[
  {
    "path": ".editorconfig",
    "content": "csharp_style_namespace_declarations = file_scoped\r\ndotnet_diagnostic.IDE0161.severity = error"
  },
  {
    "path": ".gitattributes",
    "content": "*.cs linguist-detectable=true\r\n*.cshtml linguist-detectable=true\r\n*.html linguist-detectable=false\r\n*.js linguist-detectable=false\r\n*.ts linguist-detectable=false\r\n*.css linguist-detectable=false\r\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\r\n\r\ngithub: [dodyg] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]\r\npatreon: # Replace with a single Patreon username\r\nopen_collective: # Replace with a single Open Collective username\r\nko_fi: # Replace with a single Ko-fi username\r\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\r\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\r\nliberapay: # Replace with a single Liberapay username\r\nissuehunt: # Replace with a single IssueHunt username\r\notechie: # Replace with a single Otechie username\r\nlfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry\r\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\r\n"
  },
  {
    "path": ".gitignore",
    "content": "[Oo]bj/\r\n[Bb]in/\r\nnode_modules/\r\n\r\nproject.lock.json\r\n\r\n*.user\r\n*.suo\r\n*.cache\r\n*.docstates\r\n*.db\r\n\r\n.vs/\r\nProperties/\r\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceRoot}/projects/aspnet-core-2/anti-forgery/bin/Debug/netcoreapp2.0/Anti Forgery.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceRoot}/projects/aspnet-core-2/anti-forgery\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceRoot}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\r\n    \"gitdoc.enabled\": false,\r\n    \"dotnet.defaultSolution\": \"disable\",\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#3399ff\",\r\n        \"activityBar.background\": \"#3399ff\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#bf0060\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#3399ff\",\r\n        \"statusBar.background\": \"#007fff\",\r\n        \"statusBar.debuggingBackground\": \"#ff8000\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#3399ff\",\r\n        \"statusBarItem.remoteBackground\": \"#007fff\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#007fff\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#007fff99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#007fff\",\r\n    \"github.copilot.chat.generateTests.codeLens\": true\r\n}"
  },
  {
    "path": ".vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"command\": \"dotnet\",\r\n    \"args\": [],\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"type\": \"shell\",\r\n            \"command\": \"dotnet\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceRoot}/projects/aspnet-core-2/anti-forgery/anti-forgery.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\",\r\n            \"group\": \"build\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": ".vscode/tasks.json.old",
    "content": "{\r\n    \"version\": \"0.1.0\",\r\n    \"command\": \"dotnet\",\r\n    \"isShellCommand\": true,\r\n    \"args\": [],\r\n    \"tasks\": [\r\n        {\r\n            \"taskName\": \"build\",\r\n            \"args\": [\r\n                \"${workspaceRoot}/projects/aspnet-core-2/anti-forgery/anti-forgery.csproj\"\r\n            ],\r\n            \"isBuildCommand\": true,\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "AGENTS.md",
    "content": "# Coding Agent Onboarding Guide\r\n\r\nThis guide helps a coding agent work efficiently with the **practical-aspnetcore** repository from the very first interaction.\r\n\r\n---\r\n\r\n## What This Repository Is\r\n\r\nA large, community-driven collection of **practical ASP.NET Core code samples** organized by topic. Each sample is intentionally small and focused on demonstrating one concept clearly. The repository is used as a learning resource for developers at all levels.\r\n\r\n---\r\n\r\n## Technology Stack\r\n\r\n| Item | Value |\r\n|------|-------|\r\n| Runtime | .NET 10 (RC – see `global.json`) |\r\n| SDK rollForward | `major` with `allowPrerelease: true` |\r\n| Web SDK | `Microsoft.NET.Sdk.Web` |\r\n| Language version | `preview` (`<LangVersion>preview</LangVersion>`) |\r\n| Implicit usings | Enabled (`<ImplicitUsings>true</ImplicitUsings>`) |\r\n| Target framework | `net10.0` |\r\n\r\nThe `global.json` at the repository root pins the SDK version. Any newer major SDK will also work because `rollForward` is set to `major`.\r\n\r\n---\r\n\r\n## Directory Layout\r\n\r\n```\r\npractical-aspnetcore/\r\n├── projects/                  # All sample projects live here\r\n│   ├── minimal-api/           # One directory per topic category\r\n│   │   ├── README.md          # Index of samples in this category\r\n│   │   ├── build.bat          # Optional batch helper\r\n│   │   ├── hello-world/       # One sub-directory per sample\r\n│   │   │   ├── Program.cs     # ALL application code goes here\r\n│   │   │   ├── README.md      # Description of this sample\r\n│   │   │   └── hello-world.csproj\r\n│   │   └── ...\r\n│   ├── mvc/\r\n│   ├── blazor-wasm/\r\n│   └── ...                    # 60+ topic categories\r\n├── exercises/                 # Learning exercises (separate from samples)\r\n├── scripts/                   # Utility scripts (e.g., upgrade-to-net10.ps1)\r\n├── .github/\r\n│   └── FUNDING.yml            # GitHub Sponsors config – no CI workflows\r\n├── global.json                # SDK version pinning\r\n├── README.md                  # Main index of all samples (update when adding)\r\n├── CONTRIBUTING.md            # Contribution guidelines (read before adding samples)\r\n├── CODE_OF_CONDUCT.md\r\n└── skills-checklist.md        # WIP skills checklist\r\n```\r\n\r\n---\r\n\r\n## Running a Sample\r\n\r\n```bash\r\ncd projects/<category>/<sample-name>\r\ndotnet watch run\r\n```\r\n\r\nOpen `http://localhost:5000` in a browser (or the port shown in the terminal).\r\n\r\nThere is **no solution file** and no global build command. Every sample is an independent project that is built and run individually.\r\n\r\n---\r\n\r\n## How to Add a New Sample\r\n\r\nFollow these steps every time a new sample is created:\r\n\r\n### 1. Create the sample directory\r\n\r\n```\r\nprojects/<category-name>/<sample-name>/\r\n```\r\n\r\nUse lowercase kebab-case for both the category name and the sample name.\r\n\r\n### 2. Create the `.csproj` file\r\n\r\nName the file `<sample-name>.csproj`. Use this minimal template:\r\n\r\n```xml\r\n<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n```\r\n\r\nAdd `<PackageReference>` entries inside `<ItemGroup>` only if the sample requires NuGet packages.\r\n\r\n### 3. Write all code in `Program.cs`\r\n\r\n**All application code must live in `Program.cs`.** This is the most important convention in this repository. Do not create additional `.cs` files, controllers, or class files unless it is absolutely impossible to demonstrate the concept in a single file (e.g., a Razor Pages `.cshtml` + code-behind pair).\r\n\r\nTypical structure:\r\n\r\n```csharp\r\n// using statements if not covered by implicit usings\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n// Register services\r\nvar app = builder.Build();\r\n// Configure middleware / map routes\r\napp.Run();\r\n```\r\n\r\nFor the simplest samples `WebApplication.Create()` is enough (no explicit builder needed):\r\n\r\n```csharp\r\nWebApplication app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    await context.Response.WriteAsync(\"Hello world\");\r\n});\r\nawait app.RunAsync();\r\n```\r\n\r\n### 4. Create a `README.md` for the sample\r\n\r\nKeep it concise. Include:\r\n- A one-sentence description of what the sample demonstrates.\r\n- Any notable code snippets if useful for comprehension.\r\n- Links to relevant official documentation when helpful.\r\n\r\n### 5. Update the category `README.md`\r\n\r\nAdd a line for the new sample to the category-level `README.md` (e.g., `projects/minimal-api/README.md`).\r\n\r\n### 6. Update the root `README.md`\r\n\r\n- Find the relevant section in the table and **increment the sample count**.\r\n- Add a bullet point describing the sample in the appropriate section further down the file.\r\n\r\n---\r\n\r\n## Conventions & Rules (from `CONTRIBUTING.md`)\r\n\r\n1. **All code in `Program.cs`** – makes it easy to read online without chasing types across files.\r\n2. **Keep samples small and specific** – one concept per sample.\r\n3. **No sample is too small** – if it shows one useful thing, it belongs.\r\n4. **Update the README** and increment the sample count when adding a new sample.\r\n\r\n---\r\n\r\n## Project File Conventions\r\n\r\n- **SDK**: Always `Microsoft.NET.Sdk.Web`\r\n- **TargetFramework**: `net10.0`\r\n- **ImplicitUsings**: `true` (so `Microsoft.AspNetCore.*` and other common namespaces are available without explicit `using` directives)\r\n- **LangVersion**: `preview`\r\n- **No `<Nullable>enable</Nullable>`** – samples typically omit this for brevity\r\n- Project file is named after the sample directory (e.g., `hello-world.csproj` in `hello-world/`)\r\n\r\n---\r\n\r\n## No CI/CD Pipelines\r\n\r\nThere are **no GitHub Actions workflows** in this repository. The `.github/` directory contains only `FUNDING.yml`. Validation is done manually by running each sample locally with `dotnet watch run`.\r\n\r\n---\r\n\r\n## Common Pitfalls & Known Issues\r\n\r\n| Issue | Workaround |\r\n|-------|-----------|\r\n| SDK version mismatch | `global.json` has `rollForward: major` so any .NET 10+ SDK works. If you only have .NET 8/9, some samples targeting `net10.0` won't build. |\r\n| `allowPrerelease: true` required | The SDK version is a release-candidate. Ensure your local SDK installation includes preview/RC versions. |\r\n| No solution file | There is no `.sln` file. Load individual `.csproj` files in your IDE or run `dotnet watch run` directly inside the sample directory. |\r\n| Samples reference older APIs | A few older samples still use `IHostBuilder` patterns. New samples should use the modern `WebApplication` / `WebApplicationBuilder` pattern. |\r\n| Implicit usings | Many `using` statements (e.g., `Microsoft.AspNetCore.Builder`, `Microsoft.AspNetCore.Http`) are provided by implicit usings and should not need to be explicitly listed in new samples, though older samples may still include them. |\r\n\r\n---\r\n\r\n## Useful Reference Samples\r\n\r\n| Goal | Sample location |\r\n|------|----------------|\r\n| Simplest possible web app | `projects/minimal-api/hello-world/` |\r\n| Using builder pattern | `projects/minimal-hosting/` |\r\n| Razor Pages | `projects/razor-pages/` |\r\n| MVC controllers | `projects/mvc/` |\r\n| gRPC | `projects/grpc/` |\r\n| Blazor WASM | `projects/blazor-wasm/` |\r\n| Blazor SSR | `projects/blazor-ssr/` |\r\n| HTMX integration | `projects/htmx/` |\r\n| Generic Host (non-web) | `projects/generic-host/` |\r\n| Dependency Injection | `projects/dependency-injection/` |\r\n\r\n---\r\n\r\n## Summary Checklist for Adding a Sample\r\n\r\n- [ ] Create `projects/<category>/<sample-name>/` directory\r\n- [ ] Add `<sample-name>.csproj` with `net10.0` target\r\n- [ ] Put ALL code in `Program.cs`\r\n- [ ] Add `README.md` describing the sample\r\n- [ ] Update `projects/<category>/README.md`\r\n- [ ] Increment count and add bullet in root `README.md`\r\n- [ ] Verify with `dotnet watch run` inside the sample directory\r\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\r\n\r\n## Our Pledge\r\n\r\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\r\n\r\n## Our Standards\r\n\r\nExamples of behavior that contributes to creating a positive environment include:\r\n\r\n* Using welcoming and inclusive language\r\n* Being respectful of differing viewpoints and experiences\r\n* Gracefully accepting constructive criticism\r\n* Focusing on what is best for the community\r\n* Showing empathy towards other community members\r\n\r\nExamples of unacceptable behavior by participants include:\r\n\r\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\r\n* Trolling, insulting/derogatory comments, and personal or political attacks\r\n* Public or private harassment\r\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\r\n* Other conduct which could reasonably be considered inappropriate in a professional setting\r\n\r\n## Our Responsibilities\r\n\r\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.\r\n\r\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\r\n\r\n## Scope\r\n\r\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\r\n\r\n## Enforcement\r\n\r\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at dodyg@silverkeytech.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\r\n\r\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\r\n\r\n## Attribution\r\n\r\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\r\n\r\n[homepage]: http://contributor-covenant.org\r\n[version]: http://contributor-covenant.org/version/1/4/\r\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "## Contributor Guidelines\r\n\r\n* Put all the code inside Program.cs. It makes it easier for casual users to read the code online and learn something. Sometimes it is too cumbersome to chase down types using browser.\r\n* Keep your sample very simple and specific. Try to minimise the amount of concept that people need to know in order to understand your code.\r\n* There is no sample that is too small. If it shows one single interesting and useful knoweldge, add it in.* \r\n* When you are ready, update readme and add the link to the project with a paragraph or two. Do not forget to increment the sample count at the beginning of this document.\r\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\r\n\r\nCopyright (c) 2016 Dody Gunawinata\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE.\r\n"
  },
  {
    "path": "MIGRATION-PLAN.md",
    "content": "# .NET 10 Migration Plan\n\n**Generated:** 2026-03-06  \n**Status:** Ready for Execution  \n**Estimated Time:** 3.5 hours  \n**Total Commits:** 13 (12 samples + 1 documentation)\n\n---\n\n## Overview\n\nThis plan addresses **13 outdated samples** identified in `OUT-OF-DATE.md`, migrating them to use modern .NET 10 APIs. \n\n### Migration Strategy\n- **Approach:** Update in-place (replace old code with modern patterns)\n- **OpenAPI UI:** Scalar UI (modern, clean, AOT-compatible)\n- **Scope:** HIGH + MEDIUM priority items\n- **Git:** One atomic commit per sample migration\n\n### What's Being Migrated\n\n| Priority | Category | Samples | Effort |\n|----------|----------|---------|--------|\n| HIGH | Swashbuckle → Built-in OpenAPI | 10 | 2 hours |\n| HIGH | Manual SSE → Built-in SSE | 1 | 15 min |\n| MEDIUM | NSwag → Built-in OpenAPI (MVC) | 1 | 15 min |\n| MEDIUM | Custom IHostedService → BackgroundService | 1 | 15 min |\n| FINAL | Documentation updates | 1 | 30 min |\n\n---\n\n## For Next Agent Session\n\n### Before You Start\n\n1. **Read this file completely** before executing any migrations\n2. **Check git status:** `git status` should show clean working directory\n3. **Choose branch strategy:**\n   ```bash\n   # Option 1: Work on main (if you have push access)\n   git checkout main\n   git pull origin main\n   \n   # Option 2: Create feature branch (recommended)\n   git checkout -b migrate-to-net10-patterns\n   ```\n\n### Execution Order\n\nFollow this order for best results:\n\n1. **Phase 1: OpenAPI Samples (10 samples, ~2 hours)**\n   - Start with `open-api-1` (establishes pattern)\n   - Continue with `open-api-2`, then `map-group-*`, `map-4`\n   - Then `pokedex`, `authentication-*` samples\n   - Finally `nswag` and `nswag-2`\n\n2. **Phase 2: SSE Sample (1 sample, ~15 min)**\n   - Migrate `sse` to use `Results.ServerSentEvents()`\n\n3. **Phase 3: IHostedService Sample (1 sample, ~15 min)**\n   - Simplify `ihosted-service-1` to use `BackgroundService`\n\n4. **Phase 4: Documentation (1 commit, ~30 min)**\n   - Update all README files\n   - Mark OUT-OF-DATE.md as completed\n\n### For Each Sample Migration\n\n**Follow this workflow:**\n\n```bash\n# 1. Navigate to sample\ncd projects/<category>/<sample-name>\n\n# 2. Read current implementation\ncat Program.cs\ncat <sample-name>.csproj\ncat README.md\n\n# 3. Make changes (see Migration Patterns below)\n# - Update .csproj\n# - Update Program.cs\n# - Update README.md\n\n# 4. Test thoroughly\ndotnet build\ndotnet watch run\n# Test in browser (see Testing Checklist)\n\n# 5. Stop the app (Ctrl+C)\n\n# 6. Return to root\ncd /mnt/d/GitHub/practical-aspnetcore\n\n# 7. Review changes\ngit status\ngit diff projects/<category>/<sample-name>/\n\n# 8. Stage changes\ngit add projects/<category>/<sample-name>/\n\n# 9. Commit with message (see Commit Messages below)\ngit commit -m \"...\"\n\n# 10. Verify commit\ngit log -1 --stat\n\n# 11. Repeat for next sample\n```\n\n---\n\n## Migration Patterns\n\n### Pattern A: OpenAPI Migration (Swashbuckle → Built-in)\n\n**Applies to:** `open-api-1`, `open-api-2`, `map-group-2`, `map-group-3`, `map-4`, `pokedex`, `authentication-4`, `authentication-5`, `nswag`, `nswag-2`\n\n#### Step 1: Update .csproj File\n\n**Location:** `projects/<category>/<sample-name>/<sample-name>.csproj`\n\n**Remove:**\n```xml\n<PackageReference Include=\"Swashbuckle.AspNetCore\" Version=\"...\" />\n<PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"8.0.x\" />\n<PackageReference Include=\"NSwag.AspNetCore\" Version=\"...\" />\n```\n\n**Add:**\n```xml\n<PropertyGroup>\n  <TargetFramework>net10.0</TargetFramework>\n  <ImplicitUsings>true</ImplicitUsings>\n  <GenerateDocumentationFile>true</GenerateDocumentationFile>\n  <NoWarn>$(NoWarn);1591</NoWarn>\n</PropertyGroup>\n\n<ItemGroup>\n  <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" />\n  <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\n</ItemGroup>\n```\n\n#### Step 2: Update Program.cs\n\n**Location:** `projects/<category>/<sample-name>/Program.cs`\n\n**Add at top:**\n```csharp\nusing Scalar.AspNetCore;\n```\n\n**Remove:**\n```csharp\n// These using statements\nusing Microsoft.AspNetCore.OpenApi;\nusing Microsoft.OpenApi.Models;\n\n// Service registration\nbuilder.Services.AddEndpointsApiExplorer();\nbuilder.Services.AddSwaggerGen(setup => setup.SwaggerDoc(\"v1\", new OpenApiInfo() { ... }));\n\n// Middleware\napp.UseSwagger();\napp.UseSwaggerUI();\n\n// For NSwag samples\nbuilder.Services.AddSwaggerDocument(settings => { ... });\napp.UseOpenApi();\napp.UseSwaggerUi(settings => { ... });\n\n// Extension method on endpoints\n.WithOpenApi(op =>\n{\n    op.OperationId = \"...\";\n    op.Summary = \"...\";\n    return op;\n});\n```\n\n**Add:**\n```csharp\n// Service registration (after other services)\nbuilder.Services.AddOpenApi();\n\n// Middleware (after app.Build(), before endpoints)\napp.MapOpenApi();\napp.MapScalarApiReference();\n```\n\n**Replace `.WithOpenApi()` with XML comments:**\n```csharp\n// BEFORE\napp.MapGet(\"/greeting\", Hello.GetGreeting).WithOpenApi(op =>\n{\n    op.OperationId = \"GetGreetings\";\n    op.Summary = \"Return greeting given name\";\n    return op;\n});\n\n// AFTER\n/// <summary>\n/// Return greeting given name\n/// </summary>\n/// <param name=\"name\">The name of the person to greet</param>\napp.MapGet(\"/greeting\", Hello.GetGreeting);\n```\n\n**For MVC controllers (NSwag samples):**\n```csharp\n// Add XML comments to controller actions:\n/// <summary>\n/// Returns a hello world message\n/// </summary>\n/// <response code=\"200\">The greeting message</response>\n[HttpGet(\"\")]\npublic ActionResult<Greeting> Index()\n{\n    return new Greeting { Message = \"Hello World\" };\n}\n```\n\n#### Step 3: Update README.md\n\n**Location:** `projects/<category>/<sample-name>/README.md`\n\n**Replace content with:**\n```markdown\n# Built-in OpenAPI with Scalar UI\n\nThis sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support.\n\n## Key Features\n\n- No external packages required (Swashbuckle/NSwag removed)\n- OpenAPI 3.1 document generated automatically\n- XML doc comments populate API descriptions\n- Modern Scalar UI for interactive documentation\n- AOT-compatible\n\n## Running the Sample\n\n```bash\ndotnet watch run\n```\n\n## Viewing the Documentation\n\n- **Scalar UI:** Navigate to `/scalar`\n- **OpenAPI JSON:** Navigate to `/openapi/v1.json`\n\n## Migration Notes\n\nThis sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support.\n\n**Changes:**\n- Removed `Swashbuckle.AspNetCore` package dependency\n- Added `Microsoft.AspNetCore.OpenApi` (built-in)\n- Added `Scalar.AspNetCore` for modern UI\n- Replaced `WithOpenApi()` with XML documentation comments\n- Enabled `GenerateDocumentationFile` in .csproj\n\nSee `OUT-OF-DATE.md` for migration details.\n```\n\n**For NSwag samples, adjust to mention NSwag:**\n```markdown\n# Built-in OpenAPI with MVC Controllers\n\nThis sample demonstrates ASP.NET Core 10's built-in OpenAPI support with MVC controllers.\n\n## Migration Notes\n\nThis sample was migrated from NSwag to .NET 10's built-in OpenAPI support.\n```\n\n---\n\n### Pattern B: SSE Migration (Manual → Built-in)\n\n**Applies to:** `sse`\n\n#### Step 1: Update Program.cs\n\n**Location:** `projects/sse/Program.cs`\n\n**Add at top:**\n```csharp\nusing System.Runtime.CompilerServices;\n```\n\n**Replace the entire `/sse` endpoint (lines 6-38) with:**\n```csharp\napp.MapGet(\"/sse\", (HttpContext context, CancellationToken cancellationToken) =>\n{\n    async IAsyncEnumerable<string> CounterAsync([EnumeratorCancellation] CancellationToken ct)\n    {\n        int count = 0;\n        while (!ct.IsCancellationRequested)\n        {\n            yield return $\"hello world {++count}\";\n            await Task.Delay(3000, ct);\n        }\n    }\n\n    if (context.Request.Headers.Accept == \"text/event-stream\")\n    {\n        return Results.ServerSentEvents(CounterAsync(cancellationToken), eventType: \"message\");\n    }\n    else\n    {\n        return Results.BadRequest(\"Unsupported Accept header. Use 'text/event-stream'.\");\n    }\n});\n```\n\n**Remove the `Counter()` method at the bottom (lines 69-76) - no longer needed**\n\n#### Step 2: Update README.md\n\n**Location:** `projects/sse/README.md`\n\n**Replace content with:**\n```markdown\n# Built-in Server-Sent Events\n\nThis sample demonstrates ASP.NET Core 10's built-in Server-Sent Events (SSE) support using `Results.ServerSentEvents()`.\n\n## Running the Sample\n\n```bash\ndotnet watch run\n```\n\nNavigate to `http://localhost:5000/` to see the SSE client in action.\n\n## Key Features\n\n- Built-in SSE support via `Results.ServerSentEvents()`\n- Type-safe with `IAsyncEnumerable<T>`\n- Automatic flush management\n- Proper cancellation token handling\n- No manual protocol implementation needed\n\n## How It Works\n\nThe endpoint returns `Results.ServerSentEvents()` with an `IAsyncEnumerable<string>`:\n\n```csharp\napp.MapGet(\"/sse\", (HttpContext context, CancellationToken cancellationToken) =>\n{\n    async IAsyncEnumerable<string> CounterAsync([EnumeratorCancellation] CancellationToken ct)\n    {\n        int count = 0;\n        while (!ct.IsCancellationRequested)\n        {\n            yield return $\"hello world {++count}\";\n            await Task.Delay(3000, ct);\n        }\n    }\n\n    if (context.Request.Headers.Accept == \"text/event-stream\")\n    {\n        return Results.ServerSentEvents(CounterAsync(cancellationToken), eventType: \"message\");\n    }\n    \n    return Results.BadRequest(\"Use Accept: text/event-stream\");\n});\n```\n\n## Migration Notes\n\nThis sample was migrated from manual SSE implementation to .NET 10's built-in support.\n\n**Changes:**\n- Removed manual SSE protocol implementation (data/id/event formatting)\n- Removed manual `Response.WriteAsync()` and `FlushAsync()` calls\n- Added `Results.ServerSentEvents()` with `IAsyncEnumerable<string>`\n- Added proper cancellation token handling with `[EnumeratorCancellation]`\n\nSee `OUT-OF-DATE.md` for migration details.\n\n## Related Samples\n\n- `projects/net10/sse-2/` - Basic SSE\n- `projects/net10/sse-3/` - SSE with event types\n- `projects/net10/sse-4/` - SSE with mixed events using `SseItem<T>`\n```\n\n---\n\n### Pattern C: IHostedService Migration (Custom → BackgroundService)\n\n**Applies to:** `ihosted-service-1`\n\n#### Step 1: Update Program.cs\n\n**Location:** `projects/ihosted-service/ihosted-service-1/Program.cs`\n\n**Add at top:**\n```csharp\nusing Microsoft.Extensions.Hosting;\n```\n\n**Remove the entire `HostedService` abstract class (lines 15-51)**\n\n**Replace the `GreeterUpdaterService` class (lines 53-69) with:**\n```csharp\npublic class GreeterUpdaterService : BackgroundService\n{\n    private readonly Greeter _greeter;\n    \n    public GreeterUpdaterService(Greeter greeter)\n    {\n        _greeter = greeter;\n    }\n\n    protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n    {\n        while (!stoppingToken.IsCancellationRequested)\n        {\n            _greeter.Counter++;\n            await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken);\n        }\n    }\n}\n```\n\n**Update the service registration (line 3):**\n```csharp\n// BEFORE\nbuilder.Services.AddSingleton<Microsoft.Extensions.Hosting.IHostedService, GreeterUpdaterService>();\n\n// AFTER\nbuilder.Services.AddHostedService<GreeterUpdaterService>();\n```\n\n#### Step 2: Update README.md\n\n**Location:** `projects/ihosted-service/ihosted-service-1/README.md`\n\n**Replace content with:**\n```markdown\n# BackgroundService Pattern\n\nThis sample demonstrates using the `BackgroundService` base class for background tasks in ASP.NET Core.\n\n## Running the Sample\n\n```bash\ndotnet watch run\n```\n\nNavigate to `http://localhost:5000/` and reload the page to see the counter incrementing.\n\n## How It Works\n\nA `GreeterUpdaterService` inherits from `BackgroundService` and updates a `Greeter` singleton every second:\n\n```csharp\npublic class GreeterUpdaterService : BackgroundService\n{\n    private readonly Greeter _greeter;\n    \n    public GreeterUpdaterService(Greeter greeter)\n    {\n        _greeter = greeter;\n    }\n\n    protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n    {\n        while (!stoppingToken.IsCancellationRequested)\n        {\n            _greeter.Counter++;\n            await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken);\n        }\n    }\n}\n```\n\n## Registration\n\n```csharp\nbuilder.Services.AddSingleton<Greeter>();\nbuilder.Services.AddHostedService<GreeterUpdaterService>();\n```\n\n## Migration Notes\n\nThis sample was simplified from a custom `IHostedService` implementation to using the built-in `BackgroundService` base class.\n\n**Changes:**\n- Removed custom `HostedService` abstract base class (40+ lines of boilerplate)\n- Inherited from `Microsoft.Extensions.Hosting.BackgroundService`\n- Simplified cancellation token handling\n- Cleaner, more maintainable code\n\n**Benefits:**\n- Much less code to maintain\n- `BackgroundService` handles all the boilerplate\n- Built into `Microsoft.Extensions.Hosting`\n- Standard pattern recommended by Microsoft\n\nSee `OUT-OF-DATE.md` for migration details.\n```\n\n---\n\n## Testing Checklist\n\n### For OpenAPI Samples\n\n**Before each commit, verify:**\n\n```bash\n# 1. Build succeeds\ncd projects/<category>/<sample-name>\ndotnet build\n# Should see: Build succeeded. 0 Warning(s). 0 Error(s).\n\n# 2. Run succeeds\ndotnet watch run\n# Should see: Now listening on: http://localhost:5000\n\n# 3. Test in browser\n# Open browser to http://localhost:5000/scalar\n# - Scalar UI should load\n# - Endpoints should be listed\n# - Click on endpoint, should see parameters and descriptions\n\n# 4. Test OpenAPI document\n# Navigate to http://localhost:5000/openapi/v1.json\n# - Should see valid JSON\n# - Should include endpoint descriptions from XML comments\n\n# 5. Stop the app\n# Press Ctrl+C in terminal\n\n# 6. Return to root\ncd /mnt/d/GitHub/practical-aspnetcore\n```\n\n**Common issues:**\n- **Error:** \"XML documentation file not found\" → Check `GenerateDocumentationFile` in .csproj\n- **Error:** \"Scalar UI not found\" → Check `Scalar.AspNetCore` package is installed\n- **Error:** \"OpenAPI document empty\" → Check `builder.Services.AddOpenApi()` is called\n\n### For SSE Sample\n\n```bash\n# 1. Build and run\ncd projects/sse\ndotnet build\ndotnet watch run\n\n# 2. Test in browser\n# Navigate to http://localhost:5000/\n# - Page should load with empty list\n# - Open browser console (F12)\n# - Should see: \"Connecting to SSE...\"\n# - Should see: \"Connection opened:\"\n# - List items should appear every 3 seconds\n# - Each item should say \"hello world X\"\n\n# 3. Stop the app\n# Press Ctrl+C\n\n# 4. Return to root\ncd /mnt/d/GitHub/practical-aspnetcore\n```\n\n### For IHostedService Sample\n\n```bash\n# 1. Build and run\ncd projects/ihosted-service/ihosted-service-1\ndotnet build\ndotnet watch run\n\n# 2. Test in browser\n# Navigate to http://localhost:5000/\n# - Should see: \"Please reload page (greeting updated every 1 second in the background) Hello world 0\"\n# - Reload the page\n# - Counter should have incremented\n# - Example: \"Hello world 5\" (if 5 seconds passed)\n\n# 3. Stop the app\n# Press Ctrl+C\n\n# 4. Return to root\ncd /mnt/d/GitHub/practical-aspnetcore\n```\n\n---\n\n## Commit Messages\n\n### Message Format\n\n```\n<action> <sample-path> to .NET 10 <feature>\n\n- <change 1>\n- <change 2>\n- <change 3>\n\nRefs: OUT-OF-DATE.md - <category>\n```\n\n### Individual Commit Messages\n\n#### Commit 1: open-api-1\n```bash\ngit commit -m \"Migrate minimal-api/open-api-1 to .NET 10 built-in OpenAPI\n\n- Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview\n- Add Scalar.AspNetCore for modern API documentation UI\n- Remove deprecated WithOpenApi() extension method\n- Add XML doc comments for endpoint descriptions\n- Update .csproj: enable GenerateDocumentationFile\n- Update README.md with built-in OpenAPI notes\n\nRefs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples\"\n```\n\n#### Commit 2: open-api-2\n```bash\ngit commit -m \"Migrate minimal-api/open-api-2 to .NET 10 built-in OpenAPI\n\n- Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview\n- Add Scalar.AspNetCore for modern API documentation UI\n- Remove deprecated WithOpenApi() extension method\n- Add XML doc comments for endpoint descriptions and responses\n- Update .csproj: enable GenerateDocumentationFile\n- Update README.md with built-in OpenAPI notes\n\nRefs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples\"\n```\n\n#### Commit 3: map-group-2\n```bash\ngit commit -m \"Migrate minimal-api/map-group-2 to .NET 10 built-in OpenAPI\n\n- Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview\n- Add Scalar.AspNetCore for modern API documentation UI\n- Update .csproj: enable GenerateDocumentationFile\n- Update README.md with built-in OpenAPI notes\n\nRefs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples\"\n```\n\n#### Commit 4: map-group-3\n```bash\ngit commit -m \"Migrate minimal-api/map-group-3 to .NET 10 built-in OpenAPI\n\n- Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview\n- Add Scalar.AspNetCore for modern API documentation UI\n- Update .csproj: enable GenerateDocumentationFile\n- Update README.md with built-in OpenAPI notes\n\nRefs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples\"\n```\n\n#### Commit 5: map-4\n```bash\ngit commit -m \"Migrate minimal-api/map-4 to .NET 10 built-in OpenAPI\n\n- Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview\n- Add Scalar.AspNetCore for modern API documentation UI\n- Update .csproj: enable GenerateDocumentationFile\n- Update README.md with built-in OpenAPI notes\n\nRefs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples\"\n```\n\n#### Commit 6: pokedex\n```bash\ngit commit -m \"Migrate pokedex to .NET 10 built-in OpenAPI\n\n- Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview\n- Add Scalar.AspNetCore for modern API documentation UI\n- Update .csproj: enable GenerateDocumentationFile\n- Update README.md with built-in OpenAPI notes\n\nRefs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples\"\n```\n\n#### Commit 7: authentication-4\n```bash\ngit commit -m \"Migrate authentication-4 to .NET 10 built-in OpenAPI\n\n- Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview\n- Add Scalar.AspNetCore for modern API documentation UI\n- Update .csproj: enable GenerateDocumentationFile\n- Update README.md with built-in OpenAPI notes\n\nRefs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples\"\n```\n\n#### Commit 8: authentication-5\n```bash\ngit commit -m \"Migrate authentication-5 to .NET 10 built-in OpenAPI\n\n- Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview\n- Add Scalar.AspNetCore for modern API documentation UI\n- Remove deprecated WithOpenApi() extension method\n- Add XML doc comments for endpoint descriptions\n- Update .csproj: enable GenerateDocumentationFile\n- Update README.md with built-in OpenAPI notes\n\nRefs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples\"\n```\n\n#### Commit 9: nswag\n```bash\ngit commit -m \"Migrate mvc/nswag to .NET 10 built-in OpenAPI with MVC\n\n- Replace NSwag.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview\n- Add Scalar.AspNetCore for modern API documentation UI\n- Add XML doc comments to controller actions\n- Update .csproj: enable GenerateDocumentationFile\n- Update README.md with built-in OpenAPI notes\n\nRefs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples\"\n```\n\n#### Commit 10: nswag-2\n```bash\ngit commit -m \"Migrate mvc/nswag-2 to .NET 10 built-in OpenAPI with MVC\n\n- Replace NSwag.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview\n- Add Scalar.AspNetCore for modern API documentation UI\n- Add XML doc comments to controller actions\n- Update .csproj: enable GenerateDocumentationFile\n- Update README.md with built-in OpenAPI notes\n\nRefs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples\"\n```\n\n#### Commit 11: sse\n```bash\ngit commit -m \"Migrate sse sample to .NET 10 built-in Server-Sent Events\n\n- Replace manual SSE protocol implementation with Results.ServerSentEvents()\n- Use IAsyncEnumerable<string> with proper cancellation token handling\n- Add [EnumeratorCancellation] attribute for proper cancellation\n- Remove manual Response.WriteAsync() and FlushAsync() calls\n- Simplify code with automatic flush management\n- Update README.md with built-in SSE notes\n\nRefs: OUT-OF-DATE.md - Category 2: Server-Sent Events\"\n```\n\n#### Commit 12: ihosted-service-1\n```bash\ngit commit -m \"Simplify ihosted-service-1 using BackgroundService base class\n\n- Remove custom HostedService abstract base class (40+ lines of boilerplate)\n- Inherit from Microsoft.Extensions.Hosting.BackgroundService\n- Update service registration to use AddHostedService<T>()\n- Cleaner cancellation token handling via stoppingToken parameter\n- Update README.md with BackgroundService pattern notes\n\nRefs: OUT-OF-DATE.md - Category 3: IHostedService Patterns\"\n```\n\n#### Commit 13: Documentation Update\n```bash\ngit commit -m \"Update documentation to reflect .NET 10 migrations\n\n- Update root README.md with note about .NET 10 modern patterns\n- Update projects/minimal-api/README.md with OpenAPI migration notes\n- Update projects/authentication/README.md with OpenAPI migration notes\n- Update projects/sse/README.md with built-in SSE notes\n- Update projects/mvc/README.md with NSwag alternative notes\n- Update projects/ihosted-service/README.md with BackgroundService pattern notes\n- Mark OUT-OF-DATE.md as completed\n\nRefs: OUT-OF-DATE.md\"\n```\n\n---\n\n## Sample-by-Sample Execution Guide\n\n### Sample 1: minimal-api/open-api-1\n\n**Location:** `projects/minimal-api/open-api-1/`\n\n**Files to update:**\n- `open-api-1.csproj`\n- `Program.cs`\n- `README.md`\n\n**Steps:**\n```bash\ncd projects/minimal-api/open-api-1\n\n# Read current files\ncat open-api-1.csproj\ncat Program.cs\ncat README.md\n\n# Update .csproj (see Pattern A, Step 1)\n# Update Program.cs (see Pattern A, Step 2)\n# Update README.md (see Pattern A, Step 3)\n\n# Test\ndotnet build\ndotnet watch run\n# Test in browser: /scalar and /openapi/v1.json\n# Press Ctrl+C to stop\n\ncd /mnt/d/GitHub/practical-aspnetcore\n\n# Commit\ngit add projects/minimal-api/open-api-1/\ngit commit -m \"Migrate minimal-api/open-api-1 to .NET 10 built-in OpenAPI\n\n- Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview\n- Add Scalar.AspNetCore for modern API documentation UI\n- Remove deprecated WithOpenApi() extension method\n- Add XML doc comments for endpoint descriptions\n- Update .csproj: enable GenerateDocumentationFile\n- Update README.md with built-in OpenAPI notes\n\nRefs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples\"\n\n# Verify\ngit log -1 --stat\n```\n\n### Sample 2: minimal-api/open-api-2\n\n**Location:** `projects/minimal-api/open-api-2/`\n\n**Steps:** Same as Sample 1, but use commit message for open-api-2\n\n### Sample 3: minimal-api/map-group-2\n\n**Location:** `projects/minimal-api/map-group-2/`\n\n**Steps:** Same as Sample 1, but use commit message for map-group-2\n\n### Sample 4: minimal-api/map-group-3\n\n**Location:** `projects/minimal-api/map-group-3/`\n\n**Steps:** Same as Sample 1, but use commit message for map-group-3\n\n### Sample 5: minimal-api/map-4\n\n**Location:** `projects/minimal-api/map-4/`\n\n**Steps:** Same as Sample 1, but use commit message for map-4\n\n### Sample 6: pokedex\n\n**Location:** `projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/`\n\n**Note:** This is a multi-project sample. Update the main API project.\n\n**Steps:**\n```bash\ncd projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex\n\n# Read current files\ncat Minimal.Api.Pokedex.csproj\ncat Program.cs\n\n# Update .csproj and Program.cs using Pattern A\n\n# Test\ndotnet build\ndotnet watch run\n# Test in browser\n# Press Ctrl+C\n\ncd /mnt/d/GitHub/practical-aspnetcore\n\n# Commit\ngit add projects/mini/minimal-api-pokedex/\ngit commit -m \"Migrate pokedex to .NET 10 built-in OpenAPI\n\n- Replace Swashbuckle.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview\n- Add Scalar.AspNetCore for modern API documentation UI\n- Update .csproj: enable GenerateDocumentationFile\n- Update README.md with built-in OpenAPI notes\n\nRefs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples\"\n```\n\n### Sample 7: authentication/authentication-4\n\n**Location:** `projects/authentication/authentication-4/`\n\n**Steps:** Same as Sample 1, but use commit message for authentication-4\n\n### Sample 8: authentication/authentication-5\n\n**Location:** `projects/authentication/authentication-5/`\n\n**Steps:** Same as Sample 1, but use commit message for authentication-5\n\n### Sample 9: mvc/nswag\n\n**Location:** `projects/mvc/nswag/`\n\n**Steps:**\n```bash\ncd projects/mvc/nswag\n\n# Read current files\ncat nswag.csproj\ncat Program.cs\n\n# Update .csproj (see Pattern A, Step 1 - remove NSwag, add Scalar)\n# Update Program.cs (see Pattern A, Step 2 - for MVC)\n# Add XML comments to controller actions\n\n# Test\ndotnet build\ndotnet watch run\n# Test in browser: /scalar\n# Press Ctrl+C\n\ncd /mnt/d/GitHub/practical-aspnetcore\n\n# Commit\ngit add projects/mvc/nswag/\ngit commit -m \"Migrate mvc/nswag to .NET 10 built-in OpenAPI with MVC\n\n- Replace NSwag.AspNetCore with Microsoft.AspNetCore.OpenApi 10.0.0-preview\n- Add Scalar.AspNetCore for modern API documentation UI\n- Add XML doc comments to controller actions\n- Update .csproj: enable GenerateDocumentationFile\n- Update README.md with built-in OpenAPI notes\n\nRefs: OUT-OF-DATE.md - Category 1: Swashbuckle/OpenAPI Samples\"\n```\n\n### Sample 10: mvc/nswag-2\n\n**Location:** `projects/mvc/nswag-2/`\n\n**Steps:** Same as Sample 9, but use commit message for nswag-2\n\n### Sample 11: sse\n\n**Location:** `projects/sse/`\n\n**Steps:**\n```bash\ncd projects/sse\n\n# Read current file\ncat Program.cs\n\n# Update Program.cs (see Pattern B, Step 1)\n# Update README.md (see Pattern B, Step 2)\n\n# Test\ndotnet build\ndotnet watch run\n# Test in browser: http://localhost:5000/\n# Open console, verify SSE events\n# Press Ctrl+C\n\ncd /mnt/d/GitHub/practical-aspnetcore\n\n# Commit\ngit add projects/sse/\ngit commit -m \"Migrate sse sample to .NET 10 built-in Server-Sent Events\n\n- Replace manual SSE protocol implementation with Results.ServerSentEvents()\n- Use IAsyncEnumerable<string> with proper cancellation token handling\n- Add [EnumeratorCancellation] attribute for proper cancellation\n- Remove manual Response.WriteAsync() and FlushAsync() calls\n- Simplify code with automatic flush management\n- Update README.md with built-in SSE notes\n\nRefs: OUT-OF-DATE.md - Category 2: Server-Sent Events\"\n```\n\n### Sample 12: ihosted-service/ihosted-service-1\n\n**Location:** `projects/ihosted-service/ihosted-service-1/`\n\n**Steps:**\n```bash\ncd projects/ihosted-service/ihosted-service-1\n\n# Read current file\ncat Program.cs\n\n# Update Program.cs (see Pattern C, Step 1)\n# Update README.md (see Pattern C, Step 2)\n\n# Test\ndotnet build\ndotnet watch run\n# Test in browser: http://localhost:5000/\n# Reload page, counter should increment\n# Press Ctrl+C\n\ncd /mnt/d/GitHub/practical-aspnetcore\n\n# Commit\ngit add projects/ihosted-service/ihosted-service-1/\ngit commit -m \"Simplify ihosted-service-1 using BackgroundService base class\n\n- Remove custom HostedService abstract base class (40+ lines of boilerplate)\n- Inherit from Microsoft.Extensions.Hosting.BackgroundService\n- Update service registration to use AddHostedService<T>()\n- Cleaner cancellation token handling via stoppingToken parameter\n- Update README.md with BackgroundService pattern notes\n\nRefs: OUT-OF-DATE.md - Category 3: IHostedService Patterns\"\n```\n\n### Sample 13: Documentation Update\n\n**Location:** Root and category READMEs\n\n**Steps:**\n```bash\n# Update root README.md\n# Add a section about .NET 10 modern patterns after the introduction\n\n# Update category READMEs:\n# - projects/minimal-api/README.md\n# - projects/authentication/README.md\n# - projects/sse/README.md\n# - projects/mvc/README.md\n# - projects/ihosted-service/README.md\n\n# For each category README, add a note:\n# \"Note: Samples have been migrated to use .NET 10 built-in features. See MIGRATION-PLAN.md for details.\"\n\n# Update or remove OUT-OF-DATE.md\n# Option 1: Add at top: \"STATUS: MIGRATION COMPLETED (2026-03-06)\"\n# Option 2: Delete the file\n\n# Commit\ngit add README.md\ngit add projects/*/README.md\ngit add OUT-OF-DATE.md\n\ngit commit -m \"Update documentation to reflect .NET 10 migrations\n\n- Update root README.md with note about .NET 10 modern patterns\n- Update projects/minimal-api/README.md with OpenAPI migration notes\n- Update projects/authentication/README.md with OpenAPI migration notes\n- Update projects/sse/README.md with built-in SSE notes\n- Update projects/mvc/README.md with NSwag alternative notes\n- Update projects/ihosted-service/README.md with BackgroundService pattern notes\n- Mark OUT-OF-DATE.md as completed\n\nRefs: OUT-OF-DATE.md\"\n```\n\n---\n\n## Final Verification\n\n### After All 13 Commits\n\n```bash\n# 1. Check commit history\ngit log --oneline -13\n\n# Should see all 13 commits in reverse chronological order\n\n# 2. Verify no uncommitted changes\ngit status\n# Should say: \"nothing to commit, working tree clean\"\n\n# 3. Optional: Build all migrated samples\ncd projects/minimal-api/open-api-1 && dotnet build && cd ../../..\ncd projects/minimal-api/open-api-2 && dotnet build && cd ../../..\ncd projects/minimal-api/map-group-2 && dotnet build && cd ../../..\ncd projects/minimal-api/map-group-3 && dotnet build && cd ../../..\ncd projects/minimal-api/map-4 && dotnet build && cd ../../..\ncd projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex && dotnet build && cd ../../../../..\ncd projects/authentication/authentication-4 && dotnet build && cd ../../..\ncd projects/authentication/authentication-5 && dotnet build && cd ../../..\ncd projects/mvc/nswag && dotnet build && cd ../..\ncd projects/mvc/nswag-2 && dotnet build && cd ../..\ncd projects/sse && dotnet build && cd ../..\ncd projects/ihosted-service/ihosted-service-1 && dotnet build && cd ../../..\n\n# 4. If using feature branch, push to remote\ngit push origin migrate-to-net10-patterns\n\n# 5. If ready to merge to main\ngit checkout main\ngit merge migrate-to-net10-patterns\ngit push origin main\n```\n\n---\n\n## Success Criteria\n\nBefore marking this migration as complete, verify:\n\n- [ ] All 13 commits created with descriptive messages\n- [ ] Each commit is atomic (all files for that sample in one commit)\n- [ ] All 12 samples build without warnings (`dotnet build` succeeds)\n- [ ] All 12 samples run correctly (`dotnet watch run` succeeds)\n- [ ] OpenAPI samples: `/scalar` and `/openapi/v1.json` accessible (10 samples)\n- [ ] SSE sample: Events received in browser every 3 seconds\n- [ ] IHostedService sample: Counter increments every second\n- [ ] No deprecated `WithOpenApi()` usage remains\n- [ ] No `Swashbuckle.AspNetCore` or `NSwag.AspNetCore` packages remain\n- [ ] All READMEs updated with migration notes\n- [ ] Git history shows clear, traceable progression\n- [ ] `git log --oneline -13` shows all commits\n- [ ] `git status` shows clean working tree\n- [ ] Root README and category READMEs updated in final commit\n- [ ] OUT-OF-DATE.md marked as completed or removed\n\n---\n\n## Troubleshooting\n\n### Common Issues\n\n#### Issue: \"Cannot find type 'BackgroundService'\"\n\n**Solution:** Add `using Microsoft.Extensions.Hosting;` at top of Program.cs\n\n#### Issue: \"XML documentation file not found\"\n\n**Solution:** Add to .csproj:\n```xml\n<GenerateDocumentationFile>true</GenerateDocumentationFile>\n```\n\n#### Issue: \"Scalar UI not loading\"\n\n**Solution:** Check that:\n1. `Scalar.AspNetCore` package is installed\n2. `app.MapScalarApiReference();` is called after `app.Build()`\n3. Navigate to `/scalar` (not `/swagger`)\n\n#### Issue: \"OpenAPI document is empty\"\n\n**Solution:** Check that:\n1. `builder.Services.AddOpenApi();` is called\n2. `app.MapOpenApi();` is called\n3. At least one endpoint is mapped\n\n#### Issue: \"SSE events not appearing\"\n\n**Solution:** Check that:\n1. `using System.Runtime.CompilerServices;` is added\n2. `[EnumeratorCancellation]` attribute is on the cancellation token parameter\n3. Browser is sending `Accept: text/event-stream` header\n\n#### Issue: \"Build fails after migration\"\n\n**Solution:** \n1. Check .csproj for correct package versions\n2. Run `dotnet restore`\n3. Delete `bin/` and `obj/` folders and rebuild\n\n---\n\n## Reference Links\n\n### Official Documentation\n- [.NET 10 What's New](https://learn.microsoft.com/dotnet/core/whats-new/dotnet-10)\n- [ASP.NET Core 10 What's New](https://learn.microsoft.com/aspnet/core/release-notes/aspnetcore-10)\n- [Built-in OpenAPI Support](https://learn.microsoft.com/aspnet/core/fundamentals/openapi/aspnetcore-openapi)\n- [Server-Sent Events](https://learn.microsoft.com/aspnet/core/fundamentals/server-sent-events)\n- [BackgroundService Class](https://learn.microsoft.com/dotnet/api/microsoft.extensions.hosting.backgroundservice)\n\n### Internal References\n- `OUT-OF-DATE.md` - Original analysis of outdated samples\n- `projects/net10/README.md` - .NET 10 feature samples index\n- `projects/net10/open-api-8/` - Reference for built-in OpenAPI pattern\n- `projects/net10/sse-2/` - Reference for built-in SSE pattern\n- `AGENTS.md` - Repository conventions and guidelines\n\n---\n\n## Notes for Future Agents\n\n1. **This plan is self-contained** - All information needed to execute the migration is in this file.\n\n2. **Follow the order** - Execute samples in the order listed (1-13) for best results.\n\n3. **Test before commit** - Always run `dotnet build` and `dotnet watch run` before committing.\n\n4. **Use the exact commit messages** - Copy-paste the commit messages to ensure consistency.\n\n5. **One sample at a time** - Don't try to batch multiple samples in one commit.\n\n6. **Reference existing .NET 10 samples** - If unsure, look at `projects/net10/open-api-8/` or `projects/net10/sse-2/` for patterns.\n\n7. **Keep it simple** - The goal is to demonstrate modern patterns with minimal code.\n\n8. **Update READMEs** - Don't skip updating README.md files - they help users understand the changes.\n\n9. **Mark complete** - After finishing, update this file with completion status.\n\n---\n\n## Completion Checklist\n\nWhen finished, update this section:\n\n- [ ] **Started:** (date)\n- [ ] **Completed:** (date)\n- [ ] **Commits created:** X/13\n- [ ] **Samples migrated:** X/12\n- [ ] **Documentation updated:** Yes/No\n- [ ] **Tested all samples:** Yes/No\n- [ ] **Pushed to remote:** Yes/No (branch name: ________)\n- [ ] **Merged to main:** Yes/No\n\n**Notes:**\n(Add any notes about issues encountered, deviations from plan, etc.)\n\n---\n\n**End of Migration Plan**\n"
  },
  {
    "path": "OUT-OF-DATE.md",
    "content": "# Outdated ASP.NET Core 10 Samples Report\n\n**Generated:** 2026-03-06  \n**Repository:** practical-aspnetcore  \n**Total Samples Analyzed:** 637  \n**Outdated Samples Identified:** 14  \n**Migrated:** 12 ✅  \n**Remaining:** 2\n\n---\n\n## Migration Status\n\n### Completed Migrations ✅\n\n| Sample | Category | Migration |\n|--------|----------|-----------|\n| `minimal-api/open-api-1` | OpenAPI | Swashbuckle → Built-in |\n| `minimal-api/open-api-2` | OpenAPI | Swashbuckle → Built-in |\n| `minimal-api/map-group-2` | OpenAPI | Swashbuckle → Built-in |\n| `minimal-api/map-group-3` | OpenAPI | Swashbuckle → Built-in |\n| `minimal-api/map-4` | OpenAPI | Swashbuckle → Built-in |\n| `authentication/authentication-4` | OpenAPI | Swashbuckle → Built-in |\n| `authentication/authentication-5` | OpenAPI | Swashbuckle → Built-in |\n| `mini/minimal-api-pokedex` | OpenAPI | Swashbuckle → Built-in |\n| `mvc/nswag` | OpenAPI | NSwag → Built-in |\n| `sse` | SSE | Manual → Built-in |\n| `ihosted-service/ihosted-service-1` | Background | Custom base → BackgroundService |\n\n### Remaining Samples\n\n| Sample | Priority | Notes |\n|--------|----------|-------|\n| `mvc/nswag-2` | LOW | Alternative approach, kept for reference |\n| `generic-host/generic-host-1/2` | LOW | Still valid for non-web scenarios |\n\n---\n\n## Executive Summary\n\nThis report identifies samples that were outdated due to new APIs and features available in .NET 10 / ASP.NET Core 10. **12 samples have been successfully migrated** to use modern patterns.\n\n### Key Migrations Completed\n\n1. **OpenAPI/Swagger** - 9 samples migrated from Swashbuckle to built-in OpenAPI\n2. **Server-Sent Events** - 1 sample migrated from manual implementation to built-in SSE\n3. **IHostedService** - 1 sample simplified using `BackgroundService` base class\n\n---\n\n## Migration Patterns Applied\n\n### OpenAPI Migration\n\n**Before (Swashbuckle):**\n```csharp\nbuilder.Services.AddEndpointsApiExplorer();\nbuilder.Services.AddSwaggerGen();\n\nvar app = builder.Build();\napp.UseSwagger();\napp.UseSwaggerUI();\n\napp.MapGet(\"/greeting\", Hello.GetGreeting).WithOpenApi(op => { ... });\n```\n\n**After (Built-in OpenAPI):**\n```csharp\nbuilder.Services.AddOpenApi();\n\nvar app = builder.Build();\napp.MapOpenApi();\napp.MapScalarApiReference();\n\n/// <summary>\n/// Return greeting given name\n/// </summary>\napp.MapGet(\"/greeting\", Hello.GetGreeting);\n```\n\n### SSE Migration\n\n**Before (Manual):**\n```csharp\napp.MapGet(\"/sse\", async context =>\n{\n    context.Response.ContentType = \"text/event-stream\";\n    await context.Response.WriteAsync($\"data: {data}\\n\");\n    await context.Response.Body.FlushAsync();\n});\n```\n\n**After (Built-in):**\n```csharp\napp.MapGet(\"/sse\", (CancellationToken ct) =>\n{\n    async IAsyncEnumerable<string> GetEvents([EnumeratorCancellation] CancellationToken ct)\n    {\n        while (!ct.IsCancellationRequested)\n        {\n            yield return $\"Event at {DateTime.UtcNow}\";\n            await Task.Delay(1000, ct);\n        }\n    }\n    return Results.ServerSentEvents(GetEvents(ct));\n});\n```\n\n### BackgroundService Migration\n\n**Before (Custom base):**\n```csharp\npublic abstract class HostedService : IHostedService, IDisposable { /* 20+ lines */ }\n```\n\n**After (BackgroundService):**\n```csharp\npublic class MyService : BackgroundService\n{\n    protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n    {\n        while (!stoppingToken.IsCancellationRequested)\n        {\n            // Do work\n            await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken);\n        }\n    }\n}\n```\n\n---\n\n## Benefits of Migration\n\n| Aspect | Before | After |\n|--------|--------|-------|\n| Dependencies | Swashbuckle.AspNetCore | Built-in (no package) |\n| OpenAPI Version | 3.0 | 3.1 |\n| AOT Compatible | No | Yes |\n| Code Simplicity | More boilerplate | XML comments |\n| Performance | Good | Better (source generators) |\n\n---\n\n## References\n\n- `projects/net10/README.md` - .NET 10 feature samples\n- `projects/net10/open-api-*` - Built-in OpenAPI examples\n- `projects/net10/sse-*` - Built-in SSE examples\n"
  },
  {
    "path": "README.md",
    "content": "# Samples for ASP.NET Core 10.0 \r\n\r\nGreetings from Cairo, Egypt. You can [sponsor](https://github.com/sponsors/dodyg) this project [here](https://github.com/sponsors/dodyg). \r\n\r\n## Whats' new on ASP.NET Core 10\r\n\r\nYou can find samples on new features available in ASP.NET Core 10(12) [here](/projects/net10). Datastar examples (20) can be found [here](/projects/datastar).\r\n\r\n## ASP.NET Core 9\r\n\r\nYou can find samples on new features available in ASP.NET Core 9(3) [here](/projects/net9).\r\n\r\n## Previous versions\r\n\r\n[6.0](https://github.com/dodyg/practical-aspnetcore/tree/net6.0/), [5.0](https://github.com/dodyg/practical-aspnetcore/tree/net5.0/), [3.1 LTS](https://github.com/dodyg/practical-aspnetcore/tree/3.1-LTS/), [2.1 LTS](https://github.com/dodyg/practical-aspnetcore/tree/2.1-LTS)\r\n\r\n## Other Samples\r\n\r\n- For ATProtocol (the underlying open protocol for Bluesky) related samples, you can find them [here](https://github.com/dodyg/bluenile). \r\n- For Hydro Framework (Razor Pages compatible), you can find them [here](/projects/hydro/)(8).\r\n- [Official .NET Aspire samples](https://github.com/dotnet/aspire-samples).\r\n- For Data Access samples, go to the excellent [ORM Cookbook](https://github.com/Grauenwolf/DotNet-ORM-Cookbook).\r\n- .NET team also has [a sample repository](https://github.com/dotnet/samples).\r\n\r\n## Sections\r\n\r\n| Section                                                                 |    |                                                                              |\r\n|-------------------------------------------------------------------------|----|------------------------------------------------------------------------------|\r\n| [Authentication](/projects/authentication)                              | 5  |                                                                              |\r\n| [Blazor Client Side (Web Assembly)](/projects/blazor-wasm)              | 22 | .NET8 (WIP), Components, Data Binding                                        |\r\n| [Blazor Server](/projects/blazor-ss)                                    | 16 | Localization                                                                 |\r\n| [Blazor Server Side Render](/projects/blazor-ssr)                       | 22 |                                                                              |\r\n| [Caching](/projects/caching)                                            | 5  |                                                                              |\r\n| [Configurations](/projects/configurations)                              | 10 |                                                                              |\r\n| [CoreWCF](/projects/corewcf)                                            | 1  |                                                                              |\r\n| [Dependency Injection](/projects/dependency-injection/)                 | 4  |                                                                              |\r\n| [Diagnostics](/projects/diagnostics)                                    | 5  |                                                                              |\r\n| [Endpoint Routing](/projects/endpoint-routing)                          | 32 |                                                                              |\r\n| [Email](/projects/mailkit)                                              | 2  |                                                                              |\r\n| [Elsa Workflow](/projects/elsa)                                         | 14 | .NET8                                                                        |\r\n| [Exception Handler Middleware](/projects/exception-handler-middleware/) | 2  |                                                                              |\r\n| [Features](/projects/features)                                          | 11 |                                                                              |\r\n| [Generic Hosting](/projects/generic-host)                               | 9  |                                                                              |\r\n| [gRPC](/projects/grpc) (including grpc-Web)                             | 12 |                                                                              |\r\n| [Health Check](/projects/health-check)                                  | 6  |                                                                              |\r\n| [HTMX](/projects/htmx)                                                  | 40 |                                                                              |\r\n| [IHttpClientFactory](/projects/httpclientfactory)                       | 4  |                                                                              |\r\n| [IHostedService](/projects/ihosted-service)                             | 2  |                                                                              |\r\n| [Logging](/projects/logging)                                            | 6  |                                                                              |\r\n| [Localization and Globalization](/projects/localization)                | 6  |                                                                              |\r\n| [Middleware](/projects/middleware)                                      | 14 |                                                                              |\r\n| [Mini Apps](/projects/mini)                                             | 2  |                                                                              |\r\n| [Minimal API](/projects/minimal-api)                                    | 36 | Routing, Parameter Bindings, etc                                             |\r\n| [Minimal Hosting](/projects/minimal-hosting)                            | 23 |                                                                              |\r\n| [MVC](/projects/mvc)                                                    | 47 | Localization, Routing, Razor Class Library, Tag Helpers, View Component, etc |\r\n| [Output Cache Middleware](/projects/output-cache-middleware)            |    |                                                                              |\r\n| [Open Telemetry](/projects/open-telemetry/)                             | 3  |                                                                              |\r\n| [Orchard Core](/projects/orchard-core)                                  | 4  |                                                                              |\r\n| [Path String (HttpContext.Request.Path)](/projects/path-string)         | 1  |                                                                              |\r\n| [Polly](/projects/polly/)                                               | 1  |                                                                              |\r\n| [Problem Details Middleware](/projects/problem-details-middleware/)     | 3  |                                                                              |\r\n| [Razor Pages](/projects/razor-pages)                                    | 10 | TempData                                                                     |\r\n| [RazorSlices](/projects/razor-slices)                                   | 1  |                                                                              |\r\n| [Request](/projects/request)                                            | 15 | Form, Cookies, Query String, Headers                                         |\r\n| [Request Timeouts Middleware](/projets/request-timeouts-middleware)     | 6  |                                                                              |\r\n| [Response](/projects/response)                                          | 3  |                                                                              |\r\n| [SignalR](/projects/signalr)                                            | 1  |                                                                              |\r\n| [Security](/projects/security)                                          | 7  |                                                                              |\r\n| [Single File Application](/projects/sfa)                                | 2  |                                                                              |\r\n| [Static Files and File Provider](/projects/file-provider)               | 10 |                                                                              |\r\n| [System.Text.Json](/projects/json)                                      | 23 |                                                                              |\r\n| [Syndications](/projects/syndications)                                  | 3  |                                                                              |\r\n| [Testing](/projects/testing)                                            | 1  |                                                                              |\r\n| [Unpoly](/projects/unpoly)                                              | 5  |                                                                              |\r\n| [URL Redirect/Rewrite](/projects/rewrite)                               | 6  |                                                                              |\r\n| [Uri Helper](/projects/uri-helper)                                      | 5  |                                                                              |\r\n| [Windows Service](/projects/windows-service)                            | 1  |                                                                              |\r\n| [Web Sockets](/projects/web-sockets)                                    | 6  |                                                                              |\r\n| [Web Utilities](/projects/web-utilities)                                | 3  |                                                                              |\r\n| [Orleans](/projects/orleans)                                            | 5  | .NET.8                                                                       |\r\n| [Xml](/projects/xml)                                                    | 1  |                                                                              |\r\n| [YARP](/projects/yarp)                                                  | 1  |                                                                              |\r\n\r\n## How to run these samples\r\n\r\nTo run these samples, simply open your command line console, go to each folder and execute `dotnet watch run`.\r\n\r\n### Misc (6)\r\n\r\n-   [Application Environment](/projects/application-environment)\r\n\r\n    This sample shows how to obtain application environment information (target framework, etc).\r\n\r\n-   [Show Connection info](/projects/connection-info)\r\n\r\n    Enumerate the connection information of a HTTP request.\r\n\r\n-   [Password Hasher server](/projects/password-hasher)\r\n\r\n    Give it a string and it will generate a secure hash for you, e.g. `localhost:5000?password=mypassword`.\r\n\r\n-   [Version info](/projects/version)\r\n\r\n    Show various version info of the framework your system is running on.\r\n\r\n-   [IApplicationLifetime](/projects/i-application-lifetime)\r\n\r\n    Responds to application startup and shutdown.\r\n\r\n    We are using `IApplicationLifetime` that trigger events during application startup and shutdown.\r\n\r\n- [Short Circuit](map-short-circuit)\r\n\r\n  Use `MapShortCircuit` or `.ShortCircuit()` to efficiently respond to a request without going through a middleware pipeline run. \r\n\r\n### Server-Sent Events (1)\r\n\r\n-   [Forever Server](/projects/sse)\r\n\r\n    This server will send a 'hello world' greeting forever using .NET 10 built-in SSE support.\r\n\r\n### Markdown (2)\r\n\r\n-   [Markdown server](/projects/markdown-server)\r\n\r\n    Serve markdown file as html file. You will see how you can create useful app using a few basic facilities in aspnetcore.\r\n\r\n    We take `\"Markdig\"` as dependency.\r\n\r\n-   [Markdown server - implemented as middleware component](/projects/markdown-server-middleware)\r\n\r\n    Serve markdown file as html file. It has the same exact functionality as [Markdown server](/projects/markdown-server) but implemented using middleware component.\r\n\r\n    We take `\"Markdig\"` as dependency.\r\n\r\n### Utils (3)\r\n\r\n-   [Status Codes](/projects/utils/http-status-codes)\r\n\r\n    Here we contrast between the usage of `Microsoft.AspNetCore.Http.StatusCodes` and `System.Net.HttpStatusCode`.\r\n\r\n-   [MediaTypeNames](/projects/utils/media-type-names)\r\n\r\n    This class provides convenient constants for some common MIME types. It's not extensive by any means however `MediaTypeNames.Text.Html` and `MediaTypeNames.Application.Json` come handy.\r\n\r\n-   [MediaTypeNames - 2](/projects/utils/media-type-names-2)\r\n\r\n    Using `FileExtensionContentTypeProvider` to obtain the correct MIME type of a filename extension.\r\n\r\n### Device Detection (1)\r\n\r\nThe samples in this section rely on [Wangkanai.Detection](https://github.com/wangkanai/wangkanai/tree/main/Detection) library.\r\n\r\n-   [Device Detection](/projects/device-detection)\r\n\r\n    This is the most basic device detection. You will be able to detect whether the client is a desktop or a mobile client.\r\n\r\n### Image Sharp (1)\r\n\r\nAll these samples require `SixLabors.ImageSharp.Web` middleware package. This middleware is an excelent tool to process your day to day image processing need.\r\n\r\n-   [Image-Sharp](/projects/image-sharp)\r\n\r\n    This example shows how to enable image resizing functionality to your site. It's super easy and the middleware takes care of caching, etc.\r\n\r\n## Misc\r\n\r\n-   [Contributor Guidelines](https://github.com/dodyg/practical-aspnetcore/blob/master/CONTRIBUTING.md)\r\n-   [Code of Conduct](https://github.com/dodyg/practical-aspnetcore/blob/master/CODE_OF_CONDUCT.md)\r\n\r\n\r\n"
  },
  {
    "path": "STRUCTURE.md",
    "content": "# Practical ASP.NET Core - Repository Structure\n\nGenerated on: 2026-03-06\n\n## Overview\n\nThis repository contains practical ASP.NET Core code samples organized by topic.\n\n- **Total Samples**: 637\n- **Total Categories**: 72\n- **Primary .NET Version**: .NET 10.0 (net10.0)\n\n## Build Status\n\n| Category | Status |\n|----------|--------|\n| authentication | SUCCESS |\n| blazor-ss | SUCCESS |\n| blazor-ssr | SUCCESS |\n| blazor-wasm | SUCCESS |\n| caching | SUCCESS |\n| configurations | SUCCESS |\n| datastar | SUCCESS |\n| dependency-injection | SUCCESS |\n| diagnostics | SUCCESS |\n| elsa | SUCCESS |\n| endpoint-routing | SUCCESS |\n| exception-handler-middleware | SUCCESS |\n| features | SUCCESS |\n| file-provider | SUCCESS |\n| generic-host | SUCCESS |\n| grpc | SUCCESS |\n| health-check | SUCCESS |\n| httpclientfactory | SUCCESS |\n| hydro | SUCCESS |\n| ihosted-service | SUCCESS |\n| json | SUCCESS |\n| localization | SUCCESS |\n| logging | SUCCESS |\n| mailkit | SUCCESS |\n| middleware | SUCCESS |\n| mini | SUCCESS |\n| minimal-api | SUCCESS |\n| minimal-hosting | SUCCESS |\n| mvc | SUCCESS |\n| net10 | SUCCESS |\n| net9 | SUCCESS |\n| open-telemetry | SUCCESS |\n| orchard-core | SUCCESS |\n| orleans | SUCCESS |\n| output-cache-middleware | SUCCESS |\n| path-string | SUCCESS |\n| polly | SUCCESS |\n| problem-details-middleware | SUCCESS |\n| razor-pages | SUCCESS |\n| request-timeouts-middleware | SUCCESS |\n| request | SUCCESS |\n| response | SUCCESS |\n| rewrite | SUCCESS |\n| security | SUCCESS |\n| syndications | SUCCESS |\n| uri-helper | SUCCESS |\n| utils | SUCCESS |\n| web-sockets | SUCCESS |\n| web-utilities | SUCCESS |\n\n## .NET Version Distribution\n\nAll samples target **.NET 10.0 (net10.0)** as specified in the root `global.json`:\n\n```json\n{\r\n  \"sdk\": {\r\n    \"version\": \"10.0.0\",\r\n    \"rollForward\": \"major\",\r\n    \"allowPrerelease\": true\r\n  }\r\n}\r\n```\n\n### Special Cases with Custom SDK Versions\n\nSome categories have their own `global.json` to override the SDK version:\n\n#### blazor-wasm\n\n```json\n{\r\n  \"sdk\": {\r\n    \"version\": \"8.0.100\",\r\n    \"rollForward\": \"major\"\r\n  }\r\n}```\n\n#### datastar\n\n```json\n{\r\n  \"sdk\": {\r\n    \"version\": \"10.0.100\",\r\n    \"rollForward\": \"major\"\r\n  }\r\n}```\n\n#### elsa\n\n```json\n{\r\n    \"sdk\": {\r\n      \"version\": \"8.0.100\",\r\n      \"rollForward\": \"major\"\r\n    }\r\n  }```\n\n#### net10\n\n```json\n{\r\n  \"sdk\": {\r\n    \"version\": \"10.0.100\",\r\n    \"rollForward\": \"major\"\r\n  }\r\n}```\n\n#### net9\n\n```json\n{\r\n  \"sdk\": {\r\n    \"version\": \"9.0.100\",\r\n    \"rollForward\": \"major\"\r\n  }\r\n}```\n\n#### orleans\n\n```json\n{\r\n  \"sdk\": {\r\n    \"version\": \"10.0.0-rc.1.25451.107\",\r\n    \"rollForward\": \"major\",\r\n    \"allowPrerelease\": true\r\n  }\r\n}```\n\n## Projects Structure\n\n### application-environment (1 samples)\n\n\n### authentication (5 samples)\n\n  - authentication-1\n  - authentication-2\n  - authentication-3\n  - authentication-4\n  - authentication-5\n\n### blazor-ss (16 samples)\n\n  - ChatR\n  - ComponentEvents\n  - ComponentEvents-2\n  - DependencyInjection\n  - HelloWorld\n  - JsIntegration\n  - Layout\n  - Localization\n  - Localization-2\n  - Localization-3\n  - Localization-4\n  - RenderTreeBuilder\n  - RssReader\n  - RssReader-2\n  - StartingVariation\n  - WallOfCounters\n\n### blazor-ssr (25 samples)\n\n  - **RazorComponentEight** (multi-project)\n  - RazorComponentEleven\n  - RazorComponentFive\n  - RazorComponentFour\n  - RazorComponentNine\n  - RazorComponentOne\n  - RazorComponentSeven\n  - RazorComponentSix\n  - **RazorComponentTen** (multi-project)\n  - **RazorComponentThirteen** (multi-project)\n  - RazorComponentThree\n  - RazorComponentTwelve\n  - RazorComponentTwo\n  - RazorFormHandlingFive\n  - RazorFormHandlingFour\n  - RazorFormHandlingOne\n  - RazorFormHandlingThree\n  - RazorFormHandlingTwo\n  - RazorMixMatchFour\n  - RazorMixMatchOne\n  - RazorMixMatchThree\n  - RazorMixMatchTwo\n\n### blazor-wasm (36 samples)\n\n  - Component\n  - ComponentEight\n  - ComponentEighteen\n  - ComponentEleven\n  - ComponentFifteen\n  - ComponentFive\n  - ComponentFour\n  - ComponentFourteen\n  - ComponentNine\n  - ComponentNineteen\n  - ComponentSeven\n  - ComponentSeventeen\n  - ComponentSix\n  - ComponentSixteen\n  - ComponentTen\n  - ComponentThirteen\n  - ComponentThree\n  - ComponentTwelve\n  - **ComponentTwenty** (multi-project)\n  - ComponentTwentyFive\n  - ComponentTwentyFour\n  - **ComponentTwentyOne** (multi-project)\n  - ComponentTwentySeven\n  - ComponentTwentySix\n  - ComponentTwentyThree\n  - **ComponentTwentyTwo** (multi-project)\n  - ComponentTwo\n  - DataBinding\n  - DataBindingTwo\n  - HelloWorld\n  - QuickGridOne\n  - RadioButton\n  - RenderFragment\n\n### caching (5 samples)\n\n  - caching-1\n  - caching-2\n  - caching-3\n  - caching-4\n  - redis-cache\n\n### configurations (10 samples)\n\n  - configuration-1\n  - configuration-IOption\n  - configuration-IOption-array\n  - configuration-bind-option\n  - configuration-environment-variables\n  - configuration-ini\n  - configuration-ini-options\n  - configuration-options\n  - configuration-xml\n  - configuration-xml-options\n\n### connection-info (1 samples)\n\n\n### corewcf (2 samples)\n\n  - **corewcf-1** (multi-project)\n\n### datastar (21 samples)\n\n  - backend-patch-signals\n  - backend-patch-signals-2\n  - backend-patch-signals-3\n  - backend-patch-signals-4\n  - data-attr\n  - data-bind\n  - data-class\n  - data-computed\n  - data-effect\n  - data-ignore\n  - data-indicator\n  - data-on-click\n  - data-on-custom-event\n  - data-on-interval\n  - data-on-signal-patch\n  - data-on-signal-patch-filter\n  - data-patch-elements-outer\n  - data-ref\n  - data-show\n  - data-style\n  - hello-world\n\n### dependency-injection (6 samples)\n\n  - dependency-injection-1\n  - dependency-injection-2\n  - dependency-injection-3\n  - dependency-injection-4\n  - keyed-service\n  - keyed-service-2\n\n### device-detection (1 samples)\n\n\n### diagnostics (5 samples)\n\n  - diagnostics-1\n  - diagnostics-2\n  - diagnostics-3\n  - diagnostics-4\n  - diagnostics-5\n\n### elsa (17 samples)\n\n  - composite-activity\n  - for-activity\n  - foreach-activity\n  - fork-activity\n  - fork-activity-2\n  - if-activity\n  - readline-activity\n  - sequence-activity\n  - setname-activity\n  - setvariable-activity\n  - while-activity\n  - workflow\n  - workflow-2\n  - workflow-3\n  - workflow-4\n  - workflow-5\n  - writeline-activity\n\n### endpoint-routing (37 samples)\n\n  - endpoint-routing\n  - endpoint-routing-2\n  - endpoint-routing-3\n  - endpoint-routing-4\n  - endpoint-routing-6\n  - new-routing\n  - new-routing-10\n  - new-routing-11\n  - new-routing-12\n  - new-routing-13\n  - new-routing-14\n  - new-routing-15\n  - new-routing-16\n  - new-routing-17\n  - new-routing-18\n  - new-routing-19\n  - new-routing-2\n  - new-routing-20\n  - new-routing-21\n  - new-routing-22\n  - new-routing-23\n  - new-routing-24\n  - new-routing-25\n  - new-routing-26\n  - new-routing-27\n  - new-routing-28\n  - new-routing-29\n  - new-routing-3\n  - new-routing-30\n  - new-routing-31\n  - new-routing-4\n  - new-routing-5\n  - new-routing-6\n  - new-routing-7\n  - new-routing-8\n  - new-routing-9\n  - parameter-transformer\n\n### exception-handler-middleware (2 samples)\n\n  - iexception-handler\n  - iexception-handler-2\n\n### features (11 samples)\n\n  - features-connection\n  - features-http-body-response\n  - features-max-request-body-size\n  - features-request-culture\n  - features-server-addresses\n  - features-server-addresses-2\n  - features-server-custom\n  - features-server-custom-override\n  - features-server-request\n  - features-session\n  - features-session-redis-2\n\n### file-provider (10 samples)\n\n  - file-provider-custom\n  - file-provider-physical\n  - serve-static-files-1\n  - serve-static-files-2\n  - serve-static-files-3\n  - serve-static-files-4\n  - serve-static-files-5\n  - serve-static-files-6\n  - serve-static-files-7\n  - serve-static-files-8\n\n### generic-host (10 samples)\n\n  - generic-host-1\n  - generic-host-2\n  - generic-host-3\n  - generic-host-4\n  - generic-host-5\n  - generic-host-configure-app\n  - generic-host-configure-host\n  - generic-host-configure-logging\n  - generic-host-environment\n  - generic-host-ihostapplicationlifetime\n\n### grpc (29 samples)\n\n  - **grpc-10** (multi-project)\n  - **grpc-11** (multi-project)\n  - **grpc-12** (multi-project)\n  - grpc-13\n  - grpc-14\n  - grpc-15\n  - grpc-16\n  - grpc-17\n  - **grpc-2** (multi-project)\n  - **grpc-3** (multi-project)\n  - **grpc-4** (multi-project)\n  - **grpc-5** (multi-project)\n  - **grpc-6** (multi-project)\n  - **grpc-7** (multi-project)\n  - **grpc-8** (multi-project)\n  - **grpc-9** (multi-project)\n  - **grpc** (multi-project)\n\n### health-check (6 samples)\n\n  - health-check-1\n  - health-check-2\n  - health-check-3\n  - health-check-4\n  - health-check-5\n  - health-check-6\n\n### htmx (40 samples)\n\n  - all-verbs\n  - boost\n  - form\n  - form-2\n  - header-hx-refresh\n  - header-hx-replace-url\n  - header-hx-reselect\n  - header-hx-retarget\n  - header-hx-trigger\n  - header-hx-trigger-2\n  - header-hx-trigger-3\n  - header-hx-trigger-4\n  - htmx-after-on-load\n  - htmx-config-request\n  - htmx-response-error\n  - hx-confirm\n  - hx-headers\n  - hx-include\n  - hx-indicator\n  - hx-on\n  - hx-on-2\n  - hx-preserve\n  - hx-prompt\n  - hx-replace-url\n  - hx-replace-url-2\n  - hx-sync-queue\n  - hx-vals\n  - modal-bootstrap\n  - push-url\n  - query-string\n  - select\n  - select-2\n  - select-oob\n  - swap\n  - swap-2\n  - target\n  - trigger-every\n  - trigger-load\n  - trigger-load-2\n  - trigger-once\n\n### httpclientfactory (4 samples)\n\n  - httpclientfactory-1\n  - httpclientfactory-2\n  - httpclientfactory-3\n  - httpclientfactory-4\n\n### hydro (8 samples)\n\n  - component-1\n  - component-2\n  - component-3\n  - cookies\n  - event-child-parent\n  - event-global\n  - event-global-subject\n  - hello-world\n\n### i-application-lifetime (1 samples)\n\n\n### ihosted-service (2 samples)\n\n  - ihosted-service-1\n  - ihosted-service-2\n\n### image-sharp (1 samples)\n\n\n### json (26 samples)\n\n  - json\n  - json-10\n  - json-11\n  - json-12\n  - json-13\n  - json-14\n  - json-15\n  - json-16\n  - json-17\n  - json-18\n  - json-19\n  - json-2\n  - json-20\n  - json-21\n  - json-22\n  - json-23\n  - json-24\n  - json-25\n  - json-26\n  - json-3\n  - json-4\n  - json-5\n  - json-6\n  - json-7\n  - json-8\n  - json-9\n\n### localization (6 samples)\n\n  - localization-1\n  - localization-2\n  - localization-3\n  - localization-4\n  - localization-5\n  - localization-6\n\n### logging (6 samples)\n\n  - logging-1\n  - logging-2\n  - logging-3\n  - logging-4\n  - logging-5\n  - logging-Loki\n\n### mailkit (2 samples)\n\n  - mailkit-1\n  - mailkit-2\n\n### map-short-circuit (1 samples)\n\n\n### markdown-server-middleware (1 samples)\n\n\n### markdown-server (1 samples)\n\n\n### middleware (14 samples)\n\n  - middleware-0\n  - middleware-1\n  - middleware-10\n  - middleware-11\n  - middleware-12\n  - middleware-13\n  - middleware-2\n  - middleware-3\n  - middleware-4\n  - middleware-5\n  - middleware-6\n  - middleware-7\n  - middleware-8\n  - middleware-9\n\n### mini (2 samples)\n\n  - **minimal-api-pokedex** (multi-project)\n  - pdf-viewer\n\n### minimal-api (40 samples)\n\n  - anti-forgery-1\n  - anti-forgery-2\n  - **anti-forgery-3** (multi-project)\n  - endpoint-filter-1\n  - endpoint-filter-2\n  - endpoint-filter-3\n  - endpoint-filter-4\n  - hello-world\n  - iform-file\n  - iform-file-collection\n  - link-generator-path-by-route-name\n  - map\n  - map-2\n  - map-3\n  - map-4\n  - map-5\n  - map-6\n  - map-group-1\n  - map-group-2\n  - map-group-3\n  - map-methods\n  - map-post\n  - map-post-2\n  - minimal-api-form-model-binding\n  - open-api-1\n  - open-api-2\n  - parameter-binding-custom-bind-async\n  - parameter-binding-custom-try-parse\n  - parameter-binding-header-explicit\n  - parameter-binding-json-explicit\n  - parameter-binding-json-implicit\n  - parameter-binding-query-string-explicit\n  - parameter-binding-query-string-implicit\n  - parameter-binding-route-explicit\n  - parameter-binding-route-implicit\n  - parameter-binding-special-types\n  - route-constraints-decimal\n  - route-constraints-int\n  - typed-results-1\n\n### minimal-hosting (25 samples)\n\n  - empty-builder\n  - slim-builder\n  - web-application-builder-change-default-web-root-folder\n  - web-application-builder-change-environment\n  - web-application-builder-logging-set-minimum-level\n  - web-application-builder-mvc\n  - web-application-builder-razor-pages\n  - web-application-configuration\n  - web-application-configuration-json\n  - web-application-lifetime-events\n  - web-application-logging\n  - web-application-middleware\n  - web-application-middleware-pipeline\n  - web-application-middleware-pipeline-2\n  - web-application-options-change-content-root-path\n  - web-application-options-set-environment\n  - web-application-server-aspnetcore-urls\n  - web-application-server-default-urls\n  - web-application-server-listen-all\n  - web-application-server-multiple-urls-ports\n  - web-application-server-port-env-variable\n  - web-application-server-specific-url-port\n  - web-application-use-file-server\n  - web-application-use-web-sockets\n  - web-application-welcome-page\n\n### mvc (57 samples)\n\n  - api\n  - api-problem-details\n  - api-problem-details-2\n  - api-versioning\n  - hello-world\n  - jwt\n  - **localization** (multi-project)\n  - model-binding-from-query\n  - model-binding-from-route\n  - mvc-infer-dependency-from-action\n  - mvc-output-xml\n  - newtonsoft-json\n  - nswag\n  - nswag-2\n  - output-formatter-syndication\n  - **razor-class-library** (multi-project)\n  - result-filestream\n  - result-json\n  - result-physicalfile\n  - **routing** (multi-project)\n  - **tag-helper** (multi-project)\n  - **view-component** (multi-project)\n\n### net10 (11 samples)\n\n  - open-api-10\n  - open-api-11\n  - open-api-8\n  - open-api-9\n  - redirect-http-result-is-local-url\n  - sse-2\n  - sse-3\n  - sse-4\n  - validation-1\n  - validation-2\n  - validation-3\n\n### net9 (3 samples)\n\n  - open-api-3\n  - open-api-4\n  - typed-results-2\n\n### open-telemetry (4 samples)\n\n  - open-telemetry-1\n  - open-telemetry-2\n  - open-telemetry-3\n  - open-telemetry-4\n\n### orchard-core (10 samples)\n\n  - decoupled-cms\n  - **multi-tenant** (multi-project)\n  - **routing-2** (multi-project)\n  - **routing** (multi-project)\n  - **static-files** (multi-project)\n\n### orleans (13 samples)\n\n  - orleans-1\n  - orleans-2\n  - orleans-3\n  - orleans-4\n  - orleans-5\n  - reminder\n  - rss-reader\n  - rss-reader-2\n  - rss-reader-3\n  - rss-reader-4\n  - rss-reader-5\n  - rss-reader-6\n  - timer\n\n### output-cache-middleware (8 samples)\n\n  - output-cache-1\n  - output-cache-2\n  - output-cache-3\n  - output-cache-4\n  - output-cache-5\n  - output-cache-6\n  - output-cache-7\n  - output-cache-8\n\n### password-hasher (1 samples)\n\n\n### path-string (1 samples)\n\n  - path-string-1\n\n### polly (1 samples)\n\n  - rate-limiter-http-client\n\n### problem-details-middleware (3 samples)\n\n  - problem-details\n  - problem-details-2\n  - problem-details-3\n\n### razor-pages (10 samples)\n\n  - custom-html-generator\n  - handler\n  - hello-world\n  - razor-pages-basic\n  - razor-pages-mvc\n  - **razor** (multi-project)\n  - routing\n  - routing-2\n  - temp-data\n\n### razor-slices (1 samples)\n\n  - hello-world\n\n### request-timeouts-middleware (6 samples)\n\n  - request-timeout\n  - request-timeout-2\n  - request-timeout-3\n  - request-timeout-4\n  - request-timeout-5\n  - request-timeout-6\n\n### request (16 samples)\n\n  - anti-forgery\n  - cookies-1\n  - cookies-2\n  - **cookies-3** (multi-project)\n  - form-upload-file\n  - form-url-encoded-content\n  - form-values\n  - query-string-1\n  - query-string-2\n  - query-string-3\n  - query-string-create\n  - request-headers\n  - request-headers-names\n  - request-headers-typed\n  - request-verb\n\n### response (3 samples)\n\n  - compression-response\n  - response-header\n  - trailing-headers\n\n### rewrite (6 samples)\n\n  - rewrite-1\n  - rewrite-2\n  - rewrite-3\n  - rewrite-4\n  - rewrite-5\n  - rewrite-6\n\n### route-debugger-web (2 samples)\n\n  - RouteDebugger\n  - route-debugger-web\n\n### security (7 samples)\n\n  - **authentication-with-identity** (multi-project)\n  - **dataprotection** (multi-project)\n\n### sfa (2 samples)\n\n  - remaining-time\n  - wiki\n\n### signalr (2 samples)\n\n  - **signalr-1** (multi-project)\n\n### sse (1 samples)\n\n\n### syndications (3 samples)\n\n  - newsserver-mvc\n  - syndication-1\n  - syndication-2\n\n### testing (2 samples)\n\n  - **nunit-1** (multi-project)\n\n### unpoly (5 samples)\n\n  - up-flashes\n  - up-hungry\n  - up-poll\n  - up-target\n  - up-target-2\n\n### uri-helper (5 samples)\n\n  - uri-helper-build-absolute\n  - uri-helper-from-absolute\n  - uri-helper-get-display-url\n  - uri-helper-get-encoded-path-and-query\n  - uri-helper-get-encoded-url\n\n### utils (3 samples)\n\n  - http-status-codes\n  - media-type-names\n  - media-type-names-2\n\n### version (1 samples)\n\n\n### web-sockets (6 samples)\n\n  - web-sockets-1\n  - web-sockets-2\n  - web-sockets-3\n  - web-sockets-4\n  - web-sockets-5\n  - web-sockets-6\n\n### web-utilities (3 samples)\n\n  - web-utilities-query-helpers\n  - web-utilities-query-helpers-2\n  - web-utilities-reason-phrases\n\n### windows-service (1 samples)\n\n  - windows-service-1\n\n### xml (1 samples)\n\n  - xml-validation\n\n### yarp (3 samples)\n\n  - **basic-demo** (multi-project)\n\n## Exercises\n\nThe `exercises/` directory contains learning exercises:\n\n### pathway-1\n\nContains markdown files with exercise instructions:\n\n- README.md\n- exercise-1.md\n- exercise-2.md\n- exercise-3.md\n- exercise-4.md\n- exercise-5.md\n- exercise-6.md\n- exercise-7.md\n- exercise-8.md\n- exercise-9.md\n"
  },
  {
    "path": "build-log-after-prune.txt",
    "content": "\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM Removed obsolete/invalid entries: anonymous-id, basic\\*, bedrock\\echo, and non-existent blazor folder (was causing recursive calls). \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.31\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor-ss\\ \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build ChatR \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\ChatR\\ChatR.csproj (in 3.76 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\ChatR\\ChatR.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\ChatR\\Components\\Pages\\Index.razor(82,9): warning CS4014: Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call. [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\ChatR\\ChatR.csproj]\r\n  ChatR -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\ChatR\\bin\\Debug\\net10.0\\ChatR.dll\r\n\r\nBuild succeeded.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\ChatR\\Components\\Pages\\Index.razor(82,9): warning CS4014: Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call. [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\ChatR\\ChatR.csproj]\r\n    1 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:09.10\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build ComponentEvents \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\ComponentEvents\\ComponentEvents.csproj (in 210 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\ComponentEvents\\ComponentEvents.csproj]\r\n  ComponentEvents -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\ComponentEvents\\bin\\Debug\\net10.0\\ComponentEvents.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.27\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build ComponentEvents-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\ComponentEvents-2\\ComponentEvents.csproj (in 1.9 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\ComponentEvents-2\\ComponentEvents.csproj]\r\n  ComponentEvents -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\ComponentEvents-2\\bin\\Debug\\net10.0\\ComponentEvents.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:03.80\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build DependencyInjection \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\DependencyInjection\\DependencyInjection.csproj (in 291 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\DependencyInjection\\DependencyInjection.csproj]\r\n  DependencyInjection -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\DependencyInjection\\bin\\Debug\\net10.0\\DependencyInjection.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.38\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build HelloWorld \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\HelloWorld\\HelloWorld.csproj (in 179 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\HelloWorld\\HelloWorld.csproj]\r\n  HelloWorld -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\HelloWorld\\bin\\Debug\\net10.0\\HelloWorld.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.94\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build JsIntegration \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\JsIntegration\\JsIntegration.csproj (in 176 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\JsIntegration\\JsIntegration.csproj]\r\n  JsIntegration -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\JsIntegration\\bin\\Debug\\net10.0\\JsIntegration.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.81\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build Layout \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Layout\\Layout.csproj (in 248 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Layout\\Layout.csproj]\r\n  Layout -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Layout\\bin\\Debug\\net10.0\\Layout.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.08\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build Localization \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Localization\\Localization.csproj (in 172 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Localization\\Localization.csproj]\r\n  Localization -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Localization\\bin\\Debug\\net10.0\\Localization.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.02\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build Localization-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Localization-2\\Localization.csproj (in 1.86 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Localization-2\\Localization.csproj]\r\n  Localization -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Localization-2\\bin\\Debug\\net10.0\\Localization.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:03.69\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build Localization-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Localization-3\\Localization.csproj (in 193 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Localization-3\\Localization.csproj]\r\n  Localization -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Localization-3\\bin\\Debug\\net10.0\\Localization.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.89\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build Localization-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Localization-4\\Localization.csproj (in 198 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Localization-4\\Localization.csproj]\r\n  Localization -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\Localization-4\\bin\\Debug\\net10.0\\Localization.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.90\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build RenderTreeBuilder \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\RenderTreeBuilder\\RenderTreeBuilder.csproj (in 56 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\RenderTreeBuilder\\RenderTreeBuilder.csproj]\r\n  RenderTreeBuilder -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\RenderTreeBuilder\\bin\\Debug\\net10.0\\RenderTreeBuilder.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.72\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build RssReader \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\RssReader\\RssReader.csproj (in 1.19 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\RssReader\\RssReader.csproj]\r\n  RssReader -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\RssReader\\bin\\Debug\\net10.0\\RssReader.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:03.01\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build RssReader-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\RssReader-2\\RssReader.csproj (in 215 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\RssReader-2\\RssReader.csproj]\r\n  RssReader -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\RssReader-2\\bin\\Debug\\net10.0\\RssReader.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.94\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build StartingVariation \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\StartingVariation\\StartingVariation.csproj (in 185 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\StartingVariation\\StartingVariation.csproj]\r\n  StartingVariation -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\StartingVariation\\bin\\Debug\\net10.0\\StartingVariation.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.91\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>dotnet build WallOfCounters \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\WallOfCounters\\WallOfCounters.csproj (in 178 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\WallOfCounters\\WallOfCounters.csproj]\r\n  WallOfCounters -> D:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss\\WallOfCounters\\bin\\Debug\\net10.0\\WallOfCounters.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.95\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\blazor-ss>cd .. \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build caching\\caching-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\caching\\caching-1\\caching.csproj (in 52 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\caching\\caching-1\\caching.csproj]\r\n  caching -> D:\\GitHub\\practical-aspnetcore\\projects\\caching\\caching-1\\bin\\Debug\\net10.0\\caching.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build caching\\caching-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\caching\\caching-2\\caching-2.csproj (in 72 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\caching\\caching-2\\caching-2.csproj]\r\n  caching-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\caching\\caching-2\\bin\\Debug\\net10.0\\caching-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build caching\\caching-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\caching\\caching-3\\caching-3.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\caching\\caching-3\\caching-3.csproj]\r\n  caching-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\caching\\caching-3\\bin\\Debug\\net10.0\\caching-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.70\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build caching\\caching-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\caching\\caching-4\\caching-4.csproj (in 56 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\caching\\caching-4\\caching-4.csproj]\r\n  caching-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\caching\\caching-4\\bin\\Debug\\net10.0\\caching-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.64\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build caching\\redis-cache \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\caching\\redis-cache\\redis-cache.csproj (in 2.36 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\caching\\redis-cache\\redis-cache.csproj]\r\n  redis-cache -> D:\\GitHub\\practical-aspnetcore\\projects\\caching\\redis-cache\\bin\\Debug\\net10.0\\redis-cache.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:03.89\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build configurations\\configuration-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-1\\configuration.csproj (in 67 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-1\\configuration.csproj]\r\n  configuration -> D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-1\\bin\\Debug\\net10.0\\configuration.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build configurations\\configuration-environment-variables \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-environment-variables\\configuration-environment-variables.csproj (in 56 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-environment-variables\\configuration-environment-variables.csproj]\r\n  configuration-environment-variables -> D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-environment-variables\\bin\\Debug\\net10.0\\configuration-environment-variables.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.64\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build configurations\\configuration-ini \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-ini\\configuration-ini.csproj (in 68 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-ini\\configuration-ini.csproj]\r\n  configuration-ini -> D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-ini\\bin\\Debug\\net10.0\\configuration-ini.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.60\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build configurations\\configuration-ini-options \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-ini-options\\configuration-ini-options.csproj (in 65 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-ini-options\\configuration-ini-options.csproj]\r\n  configuration-ini-options -> D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-ini-options\\bin\\Debug\\net10.0\\configuration-ini-options.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build configurations\\configuration-options \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-options\\configuration-options.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-options\\configuration-options.csproj]\r\n  configuration-options -> D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-options\\bin\\Debug\\net10.0\\configuration-options.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.56\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build configurations\\configuration-xml \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-xml\\configuration-xml.csproj (in 66 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-xml\\configuration-xml.csproj]\r\n  configuration-xml -> D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-xml\\bin\\Debug\\net10.0\\configuration-xml.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build configurations\\configuration-xml-options \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-xml-options\\configuration-xml-options.csproj (in 52 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-xml-options\\configuration-xml-options.csproj]\r\n  configuration-xml-options -> D:\\GitHub\\practical-aspnetcore\\projects\\configurations\\configuration-xml-options\\bin\\Debug\\net10.0\\configuration-xml-options.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build connection-info \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\connection-info\\connection-info.csproj (in 53 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\connection-info\\connection-info.csproj]\r\n  connection-info -> D:\\GitHub\\practical-aspnetcore\\projects\\connection-info\\bin\\Debug\\net10.0\\connection-info.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build dependency-injection\\dependency-injection-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\dependency-injection\\dependency-injection-1\\dependency-injection-1.csproj (in 55 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\dependency-injection\\dependency-injection-1\\dependency-injection-1.csproj]\r\n  dependency-injection-1 -> D:\\GitHub\\practical-aspnetcore\\projects\\dependency-injection\\dependency-injection-1\\bin\\Debug\\net10.0\\dependency-injection-1.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.51\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build dependency-injection\\dependency-injection-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\dependency-injection\\dependency-injection-3\\dependency-injection-3.csproj (in 66 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\dependency-injection\\dependency-injection-3\\dependency-injection-3.csproj]\r\n  dependency-injection-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\dependency-injection\\dependency-injection-3\\bin\\Debug\\net10.0\\dependency-injection-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build device-detection \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\device-detection\\device-detection.csproj (in 2.83 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\device-detection\\device-detection.csproj]\r\n  device-detection -> D:\\GitHub\\practical-aspnetcore\\projects\\device-detection\\bin\\Debug\\net10.0\\device-detection.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:04.29\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build diagnostics\\diagnostics-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-1\\diagnostics.csproj (in 53 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-1\\diagnostics.csproj]\r\n  diagnostics -> D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-1\\bin\\Debug\\net10.0\\diagnostics.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.55\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build diagnostics\\diagnostics-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-2\\diagnostics-2.csproj (in 50 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-2\\diagnostics-2.csproj]\r\n  diagnostics-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-2\\bin\\Debug\\net10.0\\diagnostics-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.56\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build diagnostics\\diagnostics-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-3\\diagnostics-3.csproj (in 55 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-3\\diagnostics-3.csproj]\r\n  diagnostics-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-3\\bin\\Debug\\net10.0\\diagnostics-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.70\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build diagnostics\\diagnostics-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-4\\diagnostics-4.csproj (in 68 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-4\\diagnostics-4.csproj]\r\n  diagnostics-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-4\\bin\\Debug\\net10.0\\diagnostics-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.66\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build diagnostics\\diagnostics-5 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-5\\diagnostics-5.csproj (in 64 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-5\\diagnostics-5.csproj]\r\n  diagnostics-5 -> D:\\GitHub\\practical-aspnetcore\\projects\\diagnostics\\diagnostics-5\\bin\\Debug\\net10.0\\diagnostics-5.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.71\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build diagnostics\\diagnostics-6 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: diagnostics\\diagnostics-6\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\endpoint-routing \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing\\endpoint-routing.csproj (in 67 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing\\endpoint-routing.csproj]\r\n  endpoint-routing -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing\\bin\\Debug\\net10.0\\endpoint-routing.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.87\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\endpoint-routing-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing-2\\endpoint-routing-2.csproj (in 66 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing-2\\endpoint-routing-2.csproj]\r\n  endpoint-routing-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing-2\\bin\\Debug\\net10.0\\endpoint-routing-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.76\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\endpoint-routing-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing-3\\endpoint-routing-3.csproj (in 65 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing-3\\endpoint-routing-3.csproj]\r\n  endpoint-routing-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing-3\\bin\\Debug\\net10.0\\endpoint-routing-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.69\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\endpoint-routing-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing-4\\endpoint-routing-4.csproj (in 59 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing-4\\endpoint-routing-4.csproj]\r\n  endpoint-routing-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing-4\\bin\\Debug\\net10.0\\endpoint-routing-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.71\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build endpoint-routing\\endpoint-routing-5 \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\endpoint-routing-6 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing-6\\endpoint-routing-6.csproj (in 65 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing-6\\endpoint-routing-6.csproj]\r\n  endpoint-routing-6 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\endpoint-routing-6\\bin\\Debug\\net10.0\\endpoint-routing-6.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.68\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing\\new-routing.csproj (in 59 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing\\new-routing.csproj]\r\n  new-routing -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing\\bin\\Debug\\net10.0\\new-routing.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.54\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-10 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-10\\new-routing-10.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-10\\new-routing-10.csproj]\r\n  new-routing-10 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-10\\bin\\Debug\\net10.0\\new-routing-10.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.60\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-11 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-11\\new-routing-11.csproj (in 60 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-11\\new-routing-11.csproj]\r\n  new-routing-11 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-11\\bin\\Debug\\net10.0\\new-routing-11.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.73\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-12 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-12\\new-routing-12.csproj (in 64 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-12\\new-routing-12.csproj]\r\n  new-routing-12 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-12\\bin\\Debug\\net10.0\\new-routing-12.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.71\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-13 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-13\\new-routing-13.csproj (in 66 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-13\\new-routing-13.csproj]\r\n  new-routing-13 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-13\\bin\\Debug\\net10.0\\new-routing-13.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-14 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-14\\new-routing-14.csproj (in 54 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-14\\new-routing-14.csproj]\r\n  new-routing-14 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-14\\bin\\Debug\\net10.0\\new-routing-14.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-15 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-15\\new-routing-15.csproj (in 64 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-15\\new-routing-15.csproj]\r\n  new-routing-15 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-15\\bin\\Debug\\net10.0\\new-routing-15.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-16 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-16\\new-routing-16.csproj (in 60 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-16\\new-routing-16.csproj]\r\n  new-routing-16 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-16\\bin\\Debug\\net10.0\\new-routing-16.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.70\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-17 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-17\\new-routing-17.csproj (in 57 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-17\\new-routing-17.csproj]\r\n  new-routing-17 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-17\\bin\\Debug\\net10.0\\new-routing-17.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-18 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-18\\new-routing-18.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-18\\new-routing-18.csproj]\r\n  new-routing-18 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-18\\bin\\Debug\\net10.0\\new-routing-18.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.71\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-19 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-19\\new-routing-19.csproj (in 59 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-19\\new-routing-19.csproj]\r\n  new-routing-19 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-19\\bin\\Debug\\net10.0\\new-routing-19.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.66\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-2\\new-routing-2.csproj (in 64 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-2\\new-routing-2.csproj]\r\n  new-routing-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-2\\bin\\Debug\\net10.0\\new-routing-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.81\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-20 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-20\\new-routing-20.csproj (in 68 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-20\\new-routing-20.csproj]\r\n  new-routing-20 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-20\\bin\\Debug\\net10.0\\new-routing-20.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.82\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-21 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-21\\new-routing-21.csproj (in 63 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-21\\new-routing-21.csproj]\r\n  new-routing-21 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-21\\bin\\Debug\\net10.0\\new-routing-21.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-22 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-22\\new-routing-22.csproj (in 75 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-22\\new-routing-22.csproj]\r\n  new-routing-22 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-22\\bin\\Debug\\net10.0\\new-routing-22.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.77\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-23 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-23\\new-routing-23.csproj (in 65 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-23\\new-routing-23.csproj]\r\n  new-routing-23 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-23\\bin\\Debug\\net10.0\\new-routing-23.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.85\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-24 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-24\\new-routing-24.csproj (in 65 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-24\\new-routing-24.csproj]\r\n  new-routing-24 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-24\\bin\\Debug\\net10.0\\new-routing-24.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.87\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-25 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-25\\new-routing-25.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-25\\new-routing-25.csproj]\r\n  new-routing-25 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-25\\bin\\Debug\\net10.0\\new-routing-25.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.65\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-26 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-26\\new-routing-26.csproj (in 71 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-26\\new-routing-26.csproj]\r\n  new-routing-26 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-26\\bin\\Debug\\net10.0\\new-routing-26.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.77\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-27 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-27\\new-routing-27.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-27\\new-routing-27.csproj]\r\n  new-routing-27 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-27\\bin\\Debug\\net10.0\\new-routing-27.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.73\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-28 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-28\\new-routing-28.csproj (in 68 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-28\\new-routing-28.csproj]\r\n  new-routing-28 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-28\\bin\\Debug\\net10.0\\new-routing-28.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.78\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-29 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-29\\new-routing-29.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-29\\new-routing-29.csproj]\r\n  new-routing-29 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-29\\bin\\Debug\\net10.0\\new-routing-29.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.78\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-3\\new-routing-3.csproj (in 69 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-3\\new-routing-3.csproj]\r\n  new-routing-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-3\\bin\\Debug\\net10.0\\new-routing-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.69\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-30 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-30\\new-routing-30.csproj (in 64 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-30\\new-routing-30.csproj]\r\n  new-routing-30 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-30\\bin\\Debug\\net10.0\\new-routing-29.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.72\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-4\\new-routing-4.csproj (in 60 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-4\\new-routing-4.csproj]\r\n  new-routing-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-4\\bin\\Debug\\net10.0\\new-routing-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.67\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects># Removed due to API changes \r\n'#' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects># dotnet build endpoint-routing\\new-routing-5 \r\n'#' is not recognized as an internal or external command,\r\noperable program or batch file.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-6 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-6\\new-routing-6.csproj (in 64 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-6\\new-routing-6.csproj]\r\n  new-routing-6 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-6\\bin\\Debug\\net10.0\\new-routing-6.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.81\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-7 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-7\\new-routing-7.csproj (in 69 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-7\\new-routing-7.csproj]\r\n  new-routing-7 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-7\\bin\\Debug\\net10.0\\new-routing-7.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.87\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-8 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-8\\new-routing-8.csproj (in 66 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-8\\new-routing-8.csproj]\r\n  new-routing-8 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-8\\bin\\Debug\\net10.0\\new-routing-8.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.77\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\new-routing-9 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-9\\new-routing-9.csproj (in 75 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-9\\new-routing-9.csproj]\r\n  new-routing-9 -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\new-routing-9\\bin\\Debug\\net10.0\\new-routing-9.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.86\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build endpoint-routing\\parameter-transformer \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\parameter-transformer\\parameter-transformer.csproj (in 55 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\parameter-transformer\\parameter-transformer.csproj]\r\n  parameter-transformer -> D:\\GitHub\\practical-aspnetcore\\projects\\endpoint-routing\\parameter-transformer\\bin\\Debug\\net10.0\\parameter-transformer.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.73\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build features\\features-connection \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-connection\\features-connection.csproj (in 55 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-connection\\features-connection.csproj]\r\n  features-connection -> D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-connection\\bin\\Debug\\net10.0\\features-connection.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.60\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build features\\features-http-body-response \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-http-body-response\\features-http-body-response.csproj (in 63 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-http-body-response\\features-http-body-response.csproj]\r\n  features-http-body-response -> D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-http-body-response\\bin\\Debug\\net10.0\\features-http-body-response.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build features\\features-max-request-body-size \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-max-request-body-size\\features-max-request-body-size.csproj (in 68 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-max-request-body-size\\features-max-request-body-size.csproj]\r\n  features-max-request-body-size -> D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-max-request-body-size\\bin\\Debug\\net10.0\\features-max-request-body-size.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build features\\features-request-culture \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-request-culture\\features-request-culture.csproj (in 59 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-request-culture\\features-request-culture.csproj]\r\n  features-request-culture -> D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-request-culture\\bin\\Debug\\net10.0\\features-request-culture.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build features\\features-server-addresses \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-addresses\\features-server-addresses.csproj (in 71 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-addresses\\features-server-addresses.csproj]\r\n  features-server-addresses -> D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-addresses\\bin\\Debug\\net10.0\\features-server-addresses.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build features\\features-server-addresses-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-addresses-2\\features-server-addresses-2.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-addresses-2\\features-server-addresses-2.csproj]\r\n  features-server-addresses-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-addresses-2\\bin\\Debug\\net10.0\\features-server-addresses-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build features\\features-server-custom \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-custom\\features-server-custom.csproj (in 84 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-custom\\features-server-custom.csproj]\r\n  features-server-custom -> D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-custom\\bin\\Debug\\net10.0\\features-server-custom.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.59\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build features\\features-server-custom-override \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-custom-override\\features-server-custom-override.csproj (in 58 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-custom-override\\features-server-custom-override.csproj]\r\n  features-server-custom-override -> D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-custom-override\\bin\\Debug\\net10.0\\features-server-custom-override.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.59\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build features\\features-server-request \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-request\\features-server-request.csproj (in 63 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-request\\features-server-request.csproj]\r\n  features-server-request -> D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-server-request\\bin\\Debug\\net10.0\\features-server-request.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build features\\features-session \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-session\\features-session.csproj (in 63 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-session\\features-session.csproj]\r\n  features-session -> D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-session\\bin\\Debug\\net10.0\\features-session.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build features\\features-session-redis-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-session-redis-2\\features-session-redis-2.csproj (in 190 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-session-redis-2\\features-session-redis-2.csproj]\r\n  features-session-redis-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\features\\features-session-redis-2\\bin\\Debug\\net10.0\\features-session-redis-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.75\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build file-provider\\file-provider-custom \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\file-provider-custom\\file-provider-custom.csproj (in 56 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\file-provider-custom\\file-provider-custom.csproj]\r\n  file-provider-custom -> D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\file-provider-custom\\bin\\Debug\\net10.0\\file-provider-custom.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.56\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build file-provider\\file-provider-physical \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\file-provider-physical\\file-provider-physical.csproj (in 58 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\file-provider-physical\\file-provider-physical.csproj]\r\n  file-provider-physical -> D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\file-provider-physical\\bin\\Debug\\net10.0\\file-provider-physical.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.70\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build file-provider\\serve-static-files-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-1\\serve-static-files.csproj (in 70 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-1\\serve-static-files.csproj]\r\n  serve-static-files -> D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-1\\bin\\Debug\\net10.0\\serve-static-files.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.66\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build file-provider\\serve-static-files-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-2\\serve-static-files-2.csproj (in 68 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-2\\serve-static-files-2.csproj]\r\n  serve-static-files-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-2\\bin\\Debug\\net10.0\\serve-static-files-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.66\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build file-provider\\serve-static-files-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-3\\serve-static-files-3.csproj (in 64 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-3\\serve-static-files-3.csproj]\r\n  serve-static-files-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-3\\bin\\Debug\\net10.0\\serve-static-files-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.67\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build file-provider\\serve-static-files-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-4\\serve-static-files-4.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-4\\serve-static-files-4.csproj]\r\n  serve-static-files-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-4\\bin\\Debug\\net10.0\\serve-static-files-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.65\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build file-provider\\serve-static-files-5 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-5\\serve-static-files-5.csproj (in 53 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-5\\serve-static-files-5.csproj]\r\n  serve-static-files-5 -> D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-5\\bin\\Debug\\net10.0\\serve-static-files-5.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.65\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build file-provider\\serve-static-files-6 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-6\\serve-static-files-6.csproj (in 57 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-6\\serve-static-files-6.csproj]\r\n  serve-static-files-6 -> D:\\GitHub\\practical-aspnetcore\\projects\\file-provider\\serve-static-files-6\\bin\\Debug\\net10.0\\serve-static-files-6.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build generic-host\\generic-host-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-1\\generic-host.csproj (in 67 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-1\\generic-host.csproj]\r\n  generic-host -> D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-1\\bin\\Debug\\net10.0\\generic-host.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build generic-host\\generic-host-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-2\\generic-host-2.csproj (in 75 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-2\\generic-host-2.csproj]\r\n  generic-host-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-2\\bin\\Debug\\net10.0\\generic-host-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build generic-host\\generic-host-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-3\\generic-host-3.csproj (in 69 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-3\\generic-host-3.csproj]\r\n  generic-host-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-3\\bin\\Debug\\net10.0\\generic-host-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build generic-host\\generic-host-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-4\\generic-host-4.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-4\\generic-host-4.csproj]\r\n  generic-host-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-4\\bin\\Debug\\net10.0\\generic-host-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.56\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build generic-host\\generic-host-5 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-5\\generic-host-5.csproj (in 65 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-5\\generic-host-5.csproj]\r\n  generic-host-5 -> D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-5\\bin\\Debug\\net10.0\\generic-host-5.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build generic-host\\generic-host-configure-app \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-configure-app\\generic-host-configure-app.csproj (in 71 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-configure-app\\generic-host-configure-app.csproj]\r\n  generic-host-configure-app -> D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-configure-app\\bin\\Debug\\net10.0\\generic-host-configure-app.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build generic-host\\generic-host-configure-host \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-configure-host\\generic-host-configure-host.csproj (in 54 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-configure-host\\generic-host-configure-host.csproj]\r\n  generic-host-configure-host -> D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-configure-host\\bin\\Debug\\net10.0\\generic-host-configure-host.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build generic-host\\generic-host-configure-logging \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-configure-logging\\generic-host-configure-logging.csproj (in 57 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-configure-logging\\generic-host-configure-logging.csproj]\r\n  generic-host-configure-logging -> D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-configure-logging\\bin\\Debug\\net10.0\\generic-host-configure-logging.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.56\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build generic-host\\generic-host-environment \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-environment\\generic-host-environment.csproj (in 56 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-environment\\generic-host-environment.csproj]\r\n  generic-host-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-environment\\bin\\Debug\\net10.0\\generic-host-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build generic-host\\generic-host-ihostapplicationlifetime \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-ihostapplicationlifetime\\generic-host-ihostapplicationlifetime.csproj (in 59 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-ihostapplicationlifetime\\generic-host-ihostapplicationlifetime.csproj]\r\n  generic-host-ihostapplicationlifetime -> D:\\GitHub\\practical-aspnetcore\\projects\\generic-host\\generic-host-ihostapplicationlifetime\\bin\\Debug\\net10.0\\generic-host-ihostapplicationlifetime.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.56\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc\\client \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc\\client\\grpc-client.csproj (in 1.31 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc\\client\\grpc-client.csproj]\r\n  grpc-client -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc\\client\\bin\\Debug\\net10.0\\grpc-client.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:03.12\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc\\server \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc\\server\\grpc-server.csproj]\r\n  grpc-server -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc\\server\\bin\\Debug\\net10.0\\grpc-server.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.72\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-10\\client \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-10\\client\\grpc-client.csproj (in 1.91 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-10\\client\\grpc-client.csproj]\r\n  grpc-client -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-10\\client\\bin\\Debug\\net10.0\\grpc-client.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:03.65\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-10\\server \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-10\\server\\grpc-server.csproj (in 1.16 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-10\\server\\grpc-server.csproj]\r\n  grpc-server -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-10\\server\\bin\\Debug\\net10.0\\grpc-server.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:03.00\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-11\\client \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-11\\client\\grpc-client.csproj (in 239 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-11\\client\\grpc-client.csproj]\r\n  grpc-client -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-11\\client\\bin\\Debug\\net10.0\\grpc-client.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.02\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-11\\server \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-11\\server\\grpc-server.csproj (in 205 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-11\\server\\grpc-server.csproj]\r\n  grpc-server -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-11\\server\\bin\\Debug\\net10.0\\grpc-server.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.02\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-2\\client \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-2\\client\\grpc-client.csproj (in 216 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-2\\client\\grpc-client.csproj]\r\n  grpc-client -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-2\\client\\bin\\Debug\\net10.0\\grpc-client.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.99\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-2\\server \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-2\\server\\grpc-server.csproj (in 226 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-2\\server\\grpc-server.csproj]\r\n  grpc-server -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-2\\server\\bin\\Debug\\net10.0\\grpc-server.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.03\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-3\\client \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-3\\client\\grpc-client.csproj (in 222 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-3\\client\\grpc-client.csproj]\r\n  grpc-client -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-3\\client\\bin\\Debug\\net10.0\\grpc-client.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.01\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-3\\server \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-3\\server\\grpc-server.csproj (in 217 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-3\\server\\grpc-server.csproj]\r\n  grpc-server -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-3\\server\\bin\\Debug\\net10.0\\grpc-server.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.10\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-4\\client \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-4\\client\\grpc-client.csproj (in 226 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-4\\client\\grpc-client.csproj]\r\n  grpc-client -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-4\\client\\bin\\Debug\\net10.0\\grpc-client.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.98\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-4\\server \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-4\\server\\grpc-server.csproj (in 237 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-4\\server\\grpc-server.csproj]\r\n  grpc-server -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-4\\server\\bin\\Debug\\net10.0\\grpc-server.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.90\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-5\\client \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-5\\client\\grpc-client.csproj (in 211 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-5\\client\\grpc-client.csproj]\r\n  grpc-client -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-5\\client\\bin\\Debug\\net10.0\\grpc-client.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.92\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-5\\server \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-5\\server\\grpc-server.csproj (in 227 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-5\\server\\grpc-server.csproj]\r\n  grpc-server -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-5\\server\\bin\\Debug\\net10.0\\grpc-server.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.90\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-6\\client \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-6\\client\\grpc-client.csproj (in 219 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-6\\client\\grpc-client.csproj]\r\n  grpc-client -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-6\\client\\bin\\Debug\\net10.0\\grpc-client.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.88\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-6\\server \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-6\\server\\grpc-server.csproj (in 216 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-6\\server\\grpc-server.csproj]\r\n  grpc-server -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-6\\server\\bin\\Debug\\net10.0\\grpc-server.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.87\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-7\\client \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-7\\client\\grpc-client.csproj (in 211 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-7\\client\\grpc-client.csproj]\r\n  grpc-client -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-7\\client\\bin\\Debug\\net10.0\\grpc-client.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.91\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-7\\server \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-7\\server\\grpc-server.csproj (in 238 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-7\\server\\grpc-server.csproj]\r\n  grpc-server -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-7\\server\\bin\\Debug\\net10.0\\grpc-server.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.89\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-8\\client \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-8\\client\\grpc-client.csproj (in 215 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-8\\client\\grpc-client.csproj]\r\n  grpc-client -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-8\\client\\bin\\Debug\\net10.0\\grpc-client.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.89\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-8\\server \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-8\\server\\grpc-server.csproj (in 213 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-8\\server\\grpc-server.csproj]\r\n  grpc-server -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-8\\server\\bin\\Debug\\net10.0\\grpc-server.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.87\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-9\\client \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-9\\client\\grpc-client.csproj (in 222 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-9\\client\\grpc-client.csproj]\r\n  grpc-client -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-9\\client\\bin\\Debug\\net10.0\\grpc-client.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.96\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build grpc\\grpc-9\\server \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-9\\server\\grpc-server.csproj (in 210 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-9\\server\\grpc-server.csproj]\r\n  grpc-server -> D:\\GitHub\\practical-aspnetcore\\projects\\grpc\\grpc-9\\server\\bin\\Debug\\net10.0\\grpc-server.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.92\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build health-check\\health-check-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-1\\health-check.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-1\\health-check.csproj]\r\n  health-check -> D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-1\\bin\\Debug\\net10.0\\health-check.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.59\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build health-check\\health-check-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-2\\health-check-2.csproj (in 56 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-2\\health-check-2.csproj]\r\n  health-check-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-2\\bin\\Debug\\net10.0\\health-check-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.55\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build health-check\\health-check-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-3\\health-check-3.csproj (in 54 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-3\\health-check-3.csproj]\r\n  health-check-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-3\\bin\\Debug\\net10.0\\health-check-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build health-check\\health-check-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-4\\health-check-4.csproj (in 65 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-4\\health-check-4.csproj]\r\n  health-check-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-4\\bin\\Debug\\net10.0\\health-check-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build health-check\\health-check-5 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-5\\health-check-5.csproj (in 57 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-5\\health-check-5.csproj]\r\n  health-check-5 -> D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-5\\bin\\Debug\\net10.0\\health-check-5.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.65\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build health-check\\health-check-6 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-6\\health-check-6.csproj (in 58 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-6\\health-check-6.csproj]\r\n  health-check-6 -> D:\\GitHub\\practical-aspnetcore\\projects\\health-check\\health-check-6\\bin\\Debug\\net10.0\\health-check-6.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.59\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build utils\\http-status-codes \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\utils\\http-status-codes\\http-status-codes.csproj (in 55 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\utils\\http-status-codes\\http-status-codes.csproj]\r\n  http-status-codes -> D:\\GitHub\\practical-aspnetcore\\projects\\utils\\http-status-codes\\bin\\Debug\\net10.0\\http-status-codes.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.59\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build httpclientfactory\\httpclientfactory-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\httpclientfactory\\httpclientfactory-1\\httpclientfactory.csproj (in 71 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\httpclientfactory\\httpclientfactory-1\\httpclientfactory.csproj]\r\n  httpclientfactory -> D:\\GitHub\\practical-aspnetcore\\projects\\httpclientfactory\\httpclientfactory-1\\bin\\Debug\\net10.0\\httpclientfactory.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build httpclientfactory\\httpclientfactory-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\httpclientfactory\\httpclientfactory-2\\httpclientfactory-2.csproj (in 54 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\httpclientfactory\\httpclientfactory-2\\httpclientfactory-2.csproj]\r\n  httpclientfactory-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\httpclientfactory\\httpclientfactory-2\\bin\\Debug\\net10.0\\httpclientfactory-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.53\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build httpclientfactory\\httpclientfactory-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\httpclientfactory\\httpclientfactory-3\\httpclientfactory-3.csproj (in 54 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\httpclientfactory\\httpclientfactory-3\\httpclientfactory-3.csproj]\r\n  httpclientfactory-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\httpclientfactory\\httpclientfactory-3\\bin\\Debug\\net10.0\\httpclientfactory-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build httpclientfactory\\httpclientfactory-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\httpclientfactory\\httpclientfactory-4\\httpclientfactory-4.csproj (in 69 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\httpclientfactory\\httpclientfactory-4\\httpclientfactory-4.csproj]\r\n  httpclientfactory-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\httpclientfactory\\httpclientfactory-4\\bin\\Debug\\net10.0\\httpclientfactory-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.59\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build i-application-lifetime \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\i-application-lifetime\\i-application-lifetime.csproj (in 66 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\i-application-lifetime\\i-application-lifetime.csproj]\r\n  i-application-lifetime -> D:\\GitHub\\practical-aspnetcore\\projects\\i-application-lifetime\\bin\\Debug\\net10.0\\i-application-lifetime.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build ihosted-service\\ihosted-service-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\ihosted-service\\ihosted-service-1\\ihosted-service-1.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\ihosted-service\\ihosted-service-1\\ihosted-service-1.csproj]\r\n  ihosted-service-1 -> D:\\GitHub\\practical-aspnetcore\\projects\\ihosted-service\\ihosted-service-1\\bin\\Debug\\net10.0\\ihosted-service-1.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build image-sharp \r\n  Determining projects to restore...\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-2cmq-823j-5qj8\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-5x7m-6737-26cr\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-63p8-c4ww-9cg7\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-65x7-c272-7g7r\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-g85r-6x2q-45w7\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-qxrv-gp6x-rc23\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-rxmq-m78w-7wmc\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj (in 2.63 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-2cmq-823j-5qj8\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-5x7m-6737-26cr\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-63p8-c4ww-9cg7\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-65x7-c272-7g7r\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-g85r-6x2q-45w7\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-qxrv-gp6x-rc23\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-rxmq-m78w-7wmc\r\n  ImageSharp -> D:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\bin\\Debug\\net10.0\\ImageSharp.dll\r\n\r\nBuild succeeded.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-2cmq-823j-5qj8\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-5x7m-6737-26cr\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-63p8-c4ww-9cg7\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-65x7-c272-7g7r\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-g85r-6x2q-45w7\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-qxrv-gp6x-rc23\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-rxmq-m78w-7wmc\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-2cmq-823j-5qj8\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-5x7m-6737-26cr\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-63p8-c4ww-9cg7\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1903: Package 'SixLabors.ImageSharp' 1.0.4 has a known high severity vulnerability, https://github.com/advisories/GHSA-65x7-c272-7g7r\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-g85r-6x2q-45w7\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-qxrv-gp6x-rc23\r\nD:\\GitHub\\practical-aspnetcore\\projects\\image-sharp\\ImageSharp.csproj : warning NU1902: Package 'SixLabors.ImageSharp' 1.0.4 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-rxmq-m78w-7wmc\r\n    14 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:04.31\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build json\\json \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\json\\json\\json.csproj (in 68 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\json\\json\\json.csproj]\r\n  json -> D:\\GitHub\\practical-aspnetcore\\projects\\json\\json\\bin\\Debug\\net10.0\\json.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build json\\json-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-2\\json-2.csproj (in 58 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-2\\json-2.csproj]\r\n  json-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-2\\bin\\Debug\\net10.0\\json-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.54\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build json\\json-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-3\\json-3.csproj (in 60 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-3\\json-3.csproj]\r\n  json-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-3\\bin\\Debug\\net10.0\\json-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build json\\json-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-4\\json-4.csproj (in 64 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-4\\json-4.csproj]\r\n  json-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-4\\bin\\Debug\\net10.0\\json-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.55\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build json\\json-5 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-5\\json-5.csproj (in 71 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-5\\json-5.csproj]\r\n  json-5 -> D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-5\\bin\\Debug\\net10.0\\json-5.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build json\\json-6 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-6\\json-6.csproj (in 70 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-6\\json-6.csproj]\r\n  json-6 -> D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-6\\bin\\Debug\\net10.0\\json-6.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.59\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build json\\json-7 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-7\\json-7.csproj (in 60 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-7\\json-7.csproj]\r\n  json-7 -> D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-7\\bin\\Debug\\net10.0\\json-7.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build json\\json-8 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-8\\json-8.csproj (in 5.65 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-8\\json-8.csproj]\r\n  json-8 -> D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-8\\bin\\Debug\\net10.0\\json-8.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:07.32\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build json\\json-9 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-9\\json-9.csproj (in 56 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-9\\json-9.csproj]\r\n  json-9 -> D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-9\\bin\\Debug\\net10.0\\json-9.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.51\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build json\\json-10 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-10\\json-10.csproj (in 55 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-10\\json-10.csproj]\r\n  json-10 -> D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-10\\bin\\Debug\\net10.0\\json-10.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build json\\json-11 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-11\\json-11.csproj (in 57 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-11\\json-11.csproj]\r\n  json-11 -> D:\\GitHub\\practical-aspnetcore\\projects\\json\\json-11\\bin\\Debug\\net10.0\\json-11.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.52\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build localization\\localization-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-1\\localization.csproj (in 58 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-1\\localization.csproj]\r\n  localization -> D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-1\\bin\\Debug\\net10.0\\localization.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build localization\\localization-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-2\\localization-2.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-2\\localization-2.csproj]\r\n  localization-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-2\\bin\\Debug\\net10.0\\localization-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.80\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build localization\\localization-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-3\\localization-3.csproj (in 55 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-3\\localization-3.csproj]\r\n  localization-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-3\\bin\\Debug\\net10.0\\localization-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.67\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build localization\\localization-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-4\\localization-4.csproj (in 68 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-4\\localization-4.csproj]\r\n  localization-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-4\\bin\\Debug\\net10.0\\localization-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.80\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build localization\\localization-5 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-5\\localization-5.csproj (in 1.02 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-5\\localization-5.csproj]\r\n  localization-5 -> D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-5\\bin\\Debug\\net10.0\\localization-5.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:03.02\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build localization\\localization-6 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-6\\localization-6.csproj (in 218 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-6\\localization-6.csproj]\r\n  localization-6 -> D:\\GitHub\\practical-aspnetcore\\projects\\localization\\localization-6\\bin\\Debug\\net10.0\\localization-6.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.99\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build logging\\logging-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\logging\\logging-1\\logging-1.csproj (in 53 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\logging\\logging-1\\logging-1.csproj]\r\n  logging-1 -> D:\\GitHub\\practical-aspnetcore\\projects\\logging\\logging-1\\bin\\Debug\\net10.0\\logging-1.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.67\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build logging\\logging-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\logging\\logging-2\\logging-2.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\logging\\logging-2\\logging-2.csproj]\r\n  logging-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\logging\\logging-2\\bin\\Debug\\net10.0\\logging-with-filter.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mailkit\\mailkit-1 \r\n  Determining projects to restore...\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-8xfc-gm6g-vgpv\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-m44j-cfrm-g8qc\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-v435-xc8x-wvr9\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1903: Package 'MimeKit' 4.4.0 has a known high severity vulnerability, https://github.com/advisories/GHSA-gmc6-fwg3-75m5\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj (in 3.5 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-8xfc-gm6g-vgpv\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-m44j-cfrm-g8qc\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-v435-xc8x-wvr9\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1903: Package 'MimeKit' 4.4.0 has a known high severity vulnerability, https://github.com/advisories/GHSA-gmc6-fwg3-75m5\r\n  Email -> D:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\bin\\Debug\\net10.0\\Email.dll\r\n\r\nBuild succeeded.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-8xfc-gm6g-vgpv\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-m44j-cfrm-g8qc\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-v435-xc8x-wvr9\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1903: Package 'MimeKit' 4.4.0 has a known high severity vulnerability, https://github.com/advisories/GHSA-gmc6-fwg3-75m5\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-8xfc-gm6g-vgpv\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-m44j-cfrm-g8qc\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1902: Package 'BouncyCastle.Cryptography' 2.3.0 has a known moderate severity vulnerability, https://github.com/advisories/GHSA-v435-xc8x-wvr9\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-1\\Email.csproj : warning NU1903: Package 'MimeKit' 4.4.0 has a known high severity vulnerability, https://github.com/advisories/GHSA-gmc6-fwg3-75m5\r\n    8 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:05.17\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mailkit\\mailkit-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-2\\Email.csproj (in 201 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-2\\Email.csproj]\r\n  Email -> D:\\GitHub\\practical-aspnetcore\\projects\\mailkit\\mailkit-2\\bin\\Debug\\net10.0\\Email.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.91\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build markdown-server \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\markdown-server\\markdown-server.csproj (in 1.35 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\markdown-server\\markdown-server.csproj]\r\n  markdown-server -> D:\\GitHub\\practical-aspnetcore\\projects\\markdown-server\\bin\\Debug\\net10.0\\markdown-server.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.92\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build markdown-server-middleware \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\markdown-server-middleware\\markdown-server-middleware.csproj (in 1.09 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\markdown-server-middleware\\markdown-server-middleware.csproj]\r\n  markdown-server-middleware -> D:\\GitHub\\practical-aspnetcore\\projects\\markdown-server-middleware\\bin\\Debug\\net10.0\\markdown-server-middleware.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.67\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build utils\\media-type-names \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\utils\\media-type-names\\media-type-names.csproj (in 68 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\utils\\media-type-names\\media-type-names.csproj]\r\n  media-type-names -> D:\\GitHub\\practical-aspnetcore\\projects\\utils\\media-type-names\\bin\\Debug\\net10.0\\media-type-names.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build utils\\media-type-names-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\utils\\media-type-names-2\\media-type-names-2.csproj (in 54 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\utils\\media-type-names-2\\media-type-names-2.csproj]\r\n  media-type-names-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\utils\\media-type-names-2\\bin\\Debug\\net10.0\\media-type-names-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.60\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-0 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-0\\middleware-0.csproj (in 71 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-0\\middleware-0.csproj]\r\n  middleware-0 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-0\\bin\\Debug\\net10.0\\middleware-0.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-1\\middleware-1.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-1\\middleware-1.csproj]\r\n  middleware-1 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-1\\bin\\Debug\\net10.0\\middleware-1.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.59\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-10 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-10\\middleware-10.csproj (in 64 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-10\\middleware-10.csproj]\r\n  middleware-10 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-10\\bin\\Debug\\net10.0\\middleware-10.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-11 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-11\\middleware-11.csproj (in 63 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-11\\middleware-11.csproj]\r\n  middleware-11 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-11\\bin\\Debug\\net10.0\\middleware-11.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.53\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-12 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-12\\middleware-12.csproj (in 71 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-12\\middleware-12.csproj]\r\n  middleware-12 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-12\\bin\\Debug\\net10.0\\middleware-12.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-13 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-13\\middleware-13.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-13\\middleware-13.csproj]\r\n  middleware-13 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-13\\bin\\Debug\\net10.0\\middleware-13.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.53\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-2\\middleware-2.csproj (in 59 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-2\\middleware-2.csproj]\r\n  middleware-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-2\\bin\\Debug\\net10.0\\middleware-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.56\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-3\\middleware-3.csproj (in 64 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-3\\middleware-3.csproj]\r\n  middleware-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-3\\bin\\Debug\\net10.0\\middleware-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.56\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-4\\middleware-4.csproj (in 65 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-4\\middleware-4.csproj]\r\n  middleware-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-4\\bin\\Debug\\net10.0\\middleware-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.54\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-5 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-5\\middleware-5.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-5\\middleware-5.csproj]\r\n  middleware-5 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-5\\bin\\Debug\\net10.0\\middleware-5.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-6 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-6\\middleware-6.csproj (in 53 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-6\\middleware-6.csproj]\r\n  middleware-6 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-6\\bin\\Debug\\net10.0\\middleware-6.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.59\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-7 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-7\\middleware-7.csproj (in 64 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-7\\middleware-7.csproj]\r\n  middleware-7 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-7\\bin\\Debug\\net10.0\\middleware-7.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.52\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-8 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-8\\middleware-8.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-8\\middleware-8.csproj]\r\n  middleware-8 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-8\\bin\\Debug\\net10.0\\middleware-8.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build middleware\\middleware-9 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-9\\middleware-9.csproj (in 63 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-9\\middleware-9.csproj]\r\n  middleware-9 -> D:\\GitHub\\practical-aspnetcore\\projects\\middleware\\middleware-9\\bin\\Debug\\net10.0\\middleware-9.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.54\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\api-problem-details \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\api-problem-details\\api-problem-details.csproj (in 58 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\api-problem-details\\api-problem-details.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mvc\\api-problem-details\\Program.cs(21,26): warning CS0168: The variable 'ex' is declared but never used [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\api-problem-details\\api-problem-details.csproj]\r\n  api-problem-details -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\api-problem-details\\bin\\Debug\\net10.0\\api-problem-details.dll\r\n\r\nBuild succeeded.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mvc\\api-problem-details\\Program.cs(21,26): warning CS0168: The variable 'ex' is declared but never used [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\api-problem-details\\api-problem-details.csproj]\r\n    1 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\api-problem-details-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\api-problem-details-2\\api-problem-details-2.csproj (in 69 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\api-problem-details-2\\api-problem-details-2.csproj]\r\n  api-problem-details-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\api-problem-details-2\\bin\\Debug\\net10.0\\api-problem-details-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.54\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\api-versioning \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\api-versioning\\api-versioning.csproj (in 1.2 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\api-versioning\\api-versioning.csproj]\r\n  api-versioning -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\api-versioning\\bin\\Debug\\net10.0\\api-versioning.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.79\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\hello-world \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\hello-world\\hello-world.csproj]\r\n  hello-world -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\hello-world\\bin\\Debug\\net10.0\\hello-world.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.49\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\jwt \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\jwt\\jwt.csproj (in 2.11 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\jwt\\jwt.csproj]\r\n  jwt -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\jwt\\bin\\Debug\\net10.0\\jwt.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:03.56\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\localization\\mvc-localization-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-1\\mvc-localization.csproj (in 67 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-1\\mvc-localization.csproj]\r\n  mvc-localization -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-1\\bin\\Debug\\net10.0\\mvc-localization.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\localization\\mvc-localization-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-2\\mvc-localization-2.csproj (in 65 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-2\\mvc-localization-2.csproj]\r\n  mvc-localization-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-2\\bin\\Debug\\net10.0\\mvc-localization-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.64\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\localization\\mvc-localization-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-3\\mvc-localization-3.csproj (in 77 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-3\\mvc-localization-3.csproj]\r\n  mvc-localization-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-3\\bin\\Debug\\net10.0\\mvc-localization-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.71\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\localization\\mvc-localization-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-4\\MvcLocalization.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-4\\MvcLocalization.csproj]\r\n  MvcLocalization -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-4\\bin\\Debug\\net10.0\\MvcLocalization.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.67\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\localization\\mvc-localization-5 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-5\\mvc-localization-5.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-5\\mvc-localization-5.csproj]\r\n  mvc-localization-5 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-5\\bin\\Debug\\net10.0\\mvc-localization-5.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.71\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\localization\\mvc-localization-6 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-6\\mvc-localization-6.csproj (in 59 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-6\\mvc-localization-6.csproj]\r\n  mvc-localization-6 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-6\\bin\\Debug\\net10.0\\mvc-localization-6.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\localization\\mvc-localization-7\\src\\ProjectWithResources \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: mvc\\localization\\mvc-localization-7\\src\\ProjectWithResources\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\localization\\mvc-localization-7\\src\\Web \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: mvc\\localization\\mvc-localization-7\\src\\Web\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\localization\\mvc-localization-8 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-8\\mvc-localization-8.csproj (in 52 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-8\\mvc-localization-8.csproj]\r\n  mvc-localization-8 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-8\\bin\\Debug\\net10.0\\mvc-localization-8.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\localization\\mvc-localization-9 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-9\\mvc-localization-9.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-9\\mvc-localization-9.csproj]\r\n  mvc-localization-9 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\localization\\mvc-localization-9\\bin\\Debug\\net10.0\\mvc-localization-9.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.66\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\model-binding-from-query \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\model-binding-from-query\\model-binding-from-query.csproj (in 57 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\model-binding-from-query\\model-binding-from-query.csproj]\r\n  model-binding-from-query -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\model-binding-from-query\\bin\\Debug\\net10.0\\model-binding-from-query.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.52\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\model-binding-from-route \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\model-binding-from-route\\model-binding-from-route.csproj (in 60 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\model-binding-from-route\\model-binding-from-route.csproj]\r\n  model-binding-from-route -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\model-binding-from-route\\bin\\Debug\\net10.0\\model-binding-from-route.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.55\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\mvc-output-xml \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\mvc-output-xml\\mvc-output-xml.csproj (in 59 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\mvc-output-xml\\mvc-output-xml.csproj]\r\n  mvc-output-xml -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\mvc-output-xml\\bin\\Debug\\net10.0\\mvc-output-xml.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.60\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\nswag \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\nswag\\nswag.csproj (in 3.35 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\nswag\\nswag.csproj]\r\n  nswag -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\nswag\\bin\\Debug\\net10.0\\nswag.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:04.97\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\nswag-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\nswag-2\\nswag-2.csproj (in 218 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\nswag-2\\nswag-2.csproj]\r\n  nswag-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\nswag-2\\bin\\Debug\\net10.0\\nswag-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.84\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\output-formatter-syndication \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\output-formatter-syndication\\output-formatter-syndication.csproj (in 226 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\output-formatter-syndication\\output-formatter-syndication.csproj]\r\n  output-formatter-syndication -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\output-formatter-syndication\\bin\\Debug\\net10.0\\output-formatter-syndication.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.91\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build mvc\\razor-class-library\\razor-class-library-1\\src\\RazorClassLibrary1 \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build mvc\\razor-class-library\\razor-class-library-1\\src\\RazorClassLibrary2 \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build mvc\\razor-class-library\\razor-class-library-1\\src\\WebApplication \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build mvc\\razor-class-library\\razor-class-library-with-controllers\\src\\RazorClassLibrary1 \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build mvc\\razor-class-library\\razor-class-library-with-controllers\\src\\WebApplication \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build mvc\\razor-class-library\\razor-class-library-with-static-files\\src\\RazorClassLibrary1 \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build mvc\\razor-class-library\\razor-class-library-with-static-files\\src\\RazorClassLibrary2 \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build mvc\\razor-class-library\\razor-class-library-with-static-files\\src\\RazorClassLibraries.Mvc.Core \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build mvc\\razor-class-library\\razor-class-library-with-static-files\\src\\WebApplication \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\result-filestream \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\result-filestream\\result-filestream.csproj (in 68 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\result-filestream\\result-filestream.csproj]\r\n  result-filestream -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\result-filestream\\bin\\Debug\\net10.0\\result.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.70\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\result-physicalfile \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\result-physicalfile\\result-physicalpath.csproj (in 68 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\result-physicalfile\\result-physicalpath.csproj]\r\n  result-physicalpath -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\result-physicalfile\\bin\\Debug\\net10.0\\result-physicalpath.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.74\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\routing\\routing-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-1\\routing-1.csproj (in 66 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-1\\routing-1.csproj]\r\n  routing-1 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-1\\bin\\Debug\\net10.0\\routing-1.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\routing\\routing-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-2\\routing-2.csproj (in 59 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-2\\routing-2.csproj]\r\n  routing-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-2\\bin\\Debug\\net10.0\\routing-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.55\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\routing\\routing-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-3\\routing-3.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-3\\routing-3.csproj]\r\n  routing-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-3\\bin\\Debug\\net10.0\\routing-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.71\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\routing\\routing-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-4\\routing-4.csproj (in 65 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-4\\routing-4.csproj]\r\n  routing-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-4\\bin\\Debug\\net10.0\\routing-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.65\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\routing\\routing-5 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-5\\routing-5.csproj (in 59 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-5\\routing-5.csproj]\r\n  routing-5 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-5\\bin\\Debug\\net10.0\\routing-5.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\routing\\routing-6 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-6\\routing-6.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-6\\routing-6.csproj]\r\n  routing-6 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-6\\bin\\Debug\\net10.0\\routing-6.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.59\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\routing\\routing-7 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-7\\routing-7.csproj (in 60 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-7\\routing-7.csproj]\r\n  routing-7 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-7\\bin\\Debug\\net10.0\\routing-7.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.56\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\routing\\routing-8 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-8\\routing-8.csproj (in 59 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-8\\routing-8.csproj]\r\n  routing-8 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-8\\bin\\Debug\\net10.0\\routing-8.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.54\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\routing\\routing-9 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-9\\routing-9.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-9\\routing-9.csproj]\r\n  routing-9 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\routing\\routing-9\\bin\\Debug\\net10.0\\routing-9.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\tag-helper\\tag-helper-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-1\\tag-helper.csproj (in 65 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-1\\tag-helper.csproj]\r\n  tag-helper -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-1\\bin\\Debug\\net10.0\\TagHelpers.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\tag-helper\\tag-helper-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-2\\tag-helper-2.csproj (in 66 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-2\\tag-helper-2.csproj]\r\n  tag-helper-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-2\\bin\\Debug\\net10.0\\TagHelpers.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.64\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\tag-helper\\tag-helper-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-3\\tag-helper-3.csproj (in 59 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-3\\tag-helper-3.csproj]\r\n  tag-helper-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-3\\bin\\Debug\\net10.0\\TagHelpers.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.69\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\tag-helper\\tag-helper-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-4\\tag-helper-4.csproj (in 53 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-4\\tag-helper-4.csproj]\r\n  tag-helper-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-4\\bin\\Debug\\net10.0\\TagHelpers.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\tag-helper\\tag-helper-5 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-5\\tag-helper-5.csproj (in 64 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-5\\tag-helper-5.csproj]\r\n  tag-helper-5 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-5\\bin\\Debug\\net10.0\\TagHelpers.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\tag-helper\\tag-helper-img \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-img\\tag-helper-img.csproj (in 56 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-img\\tag-helper-img.csproj]\r\n  tag-helper-img -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-img\\bin\\Debug\\net10.0\\tag-helper-img.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.71\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\tag-helper\\tag-helper-link \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-link\\tag-helper-link.csproj (in 69 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-link\\tag-helper-link.csproj]\r\n  tag-helper-link -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\tag-helper\\tag-helper-link\\bin\\Debug\\net10.0\\TagHelpers.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.72\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\utf8json-formatter \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: mvc\\utf8json-formatter\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\view-component\\view-component-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-1\\view-component.csproj (in 67 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-1\\view-component.csproj]\r\n  view-component -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-1\\bin\\Debug\\net10.0\\view-component.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.59\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\view-component\\view-component-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-2\\view-component-2.csproj (in 58 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-2\\view-component-2.csproj]\r\n  view-component-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-2\\bin\\Debug\\net10.0\\view-component-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.65\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\view-component\\view-component-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-3\\view-component-3.csproj (in 56 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-3\\view-component-3.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-3\\Views\\Shared\\Components\\HelloWorld\\HelloWorld.cs(13,45): warning CS1998: This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread. [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-3\\view-component-3.csproj]\r\n  view-component-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-3\\bin\\Debug\\net10.0\\view-component-3.dll\r\n\r\nBuild succeeded.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-3\\Views\\Shared\\Components\\HelloWorld\\HelloWorld.cs(13,45): warning CS1998: This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread. [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-3\\view-component-3.csproj]\r\n    1 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.59\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build mvc\\view-component\\view-component-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-4\\view-component-4.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-4\\view-component-4.csproj]\r\n  view-component-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\mvc\\view-component\\view-component-4\\bin\\Debug\\net10.0\\view-component-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM Root-level newtonsoft-json project removed; using mvc\\newtonsoft-json below. \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orchard-core\\multi-tenant\\Host \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\multi-tenant\\Host\\Host.csproj (in 5.58 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\multi-tenant\\Host\\Host.csproj]\r\n  Host -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\multi-tenant\\Host\\bin\\Debug\\net10.0\\Host.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:07.60\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orchard-core\\routing\\ForumModule \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing\\ForumModule\\ForumModule.csproj (in 1.23 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing\\ForumModule\\ForumModule.csproj]\r\n  ForumModule -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing\\ForumModule\\bin\\Debug\\net10.0\\ForumModule.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.87\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orchard-core\\routing\\Host \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing\\Host\\Host.csproj (in 234 ms).\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing\\TicketModule\\TicketModule.csproj (in 234 ms).\r\n  1 of 3 projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing\\Host\\Host.csproj]\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing\\TicketModule\\TicketModule.csproj]\r\n  ForumModule -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing\\ForumModule\\bin\\Debug\\net10.0\\ForumModule.dll\r\n  TicketModule -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing\\TicketModule\\bin\\Debug\\net10.0\\TicketModule.dll\r\n  Host -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing\\Host\\bin\\Debug\\net10.0\\Host.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:03.31\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orchard-core\\routing\\TicketModule \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing\\TicketModule\\TicketModule.csproj]\r\n  TicketModule -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing\\TicketModule\\bin\\Debug\\net10.0\\TicketModule.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.26\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orchard-core\\routing-2\\ForumModule \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing-2\\ForumModule\\ForumModule.csproj (in 210 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing-2\\ForumModule\\ForumModule.csproj]\r\n  ForumModule -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing-2\\ForumModule\\bin\\Debug\\net10.0\\ForumModule.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.70\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orchard-core\\routing-2\\Host \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing-2\\TicketModule\\TicketModule.csproj (in 221 ms).\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing-2\\Host\\Host.csproj (in 221 ms).\r\n  1 of 3 projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing-2\\Host\\Host.csproj]\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing-2\\TicketModule\\TicketModule.csproj]\r\n  ForumModule -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing-2\\ForumModule\\bin\\Debug\\net10.0\\ForumModule.dll\r\n  TicketModule -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing-2\\TicketModule\\bin\\Debug\\net10.0\\TicketModule.dll\r\n  Host -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing-2\\Host\\bin\\Debug\\net10.0\\Host.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.30\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orchard-core\\routing-2\\TicketModule \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing-2\\TicketModule\\TicketModule.csproj]\r\n  TicketModule -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\routing-2\\TicketModule\\bin\\Debug\\net10.0\\TicketModule.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.20\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orchard-core\\static-files\\ForumModule \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\static-files\\ForumModule\\ForumModule.csproj (in 181 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\static-files\\ForumModule\\ForumModule.csproj]\r\n  ForumModule -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\static-files\\ForumModule\\bin\\Debug\\net10.0\\ForumModule.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.60\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orchard-core\\static-files\\Host \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\static-files\\Host\\Host.csproj (in 227 ms).\r\n  1 of 2 projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\static-files\\Host\\Host.csproj]\r\n  ForumModule -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\static-files\\ForumModule\\bin\\Debug\\net10.0\\ForumModule.dll\r\n  Host -> D:\\GitHub\\practical-aspnetcore\\projects\\orchard-core\\static-files\\Host\\bin\\Debug\\net10.0\\Host.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.28\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build password-hasher \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\password-hasher\\password-hasher.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\password-hasher\\password-hasher.csproj]\r\n  password-hasher -> D:\\GitHub\\practical-aspnetcore\\projects\\password-hasher\\bin\\Debug\\net10.0\\password-hasher.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.54\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build razor-pages\\custom-html-generator \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\custom-html-generator\\custom-html-generator.csproj (in 57 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\custom-html-generator\\custom-html-generator.csproj]\r\n  custom-html-generator -> D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\custom-html-generator\\bin\\Debug\\net10.0\\custom-html-generator.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.69\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build razor-pages\\hello-world \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\hello-world\\hello-world.csproj (in 60 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\hello-world\\hello-world.csproj]\r\n  hello-world -> D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\hello-world\\bin\\Debug\\net10.0\\hello-world.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.56\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build razor-pages\\razor\\razor-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\razor\\razor-1\\razor-1.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\razor\\razor-1\\razor-1.csproj]\r\n  razor-1 -> D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\razor\\razor-1\\bin\\Debug\\net10.0\\razor-1.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.78\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build razor-pages\\razor\\razor-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\razor\\razor-2\\razor.csproj (in 67 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\razor\\razor-2\\razor.csproj]\r\n  razor -> D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\razor\\razor-2\\bin\\Debug\\net10.0\\razor.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build razor-pages\\razor-pages-basic \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\razor-pages-basic\\razor-pages-basic.csproj (in 81 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\razor-pages-basic\\razor-pages-basic.csproj]\r\n  razor-pages-basic -> D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\razor-pages-basic\\bin\\Debug\\net10.0\\razor-pages-basic.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.77\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build razor-pages\\razor-pages-mvc \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\razor-pages-mvc\\razor-pages-mvc.csproj (in 2.31 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\razor-pages-mvc\\razor-pages-mvc.csproj]\r\n  razor-pages-mvc -> D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\razor-pages-mvc\\bin\\Debug\\net10.0\\razor-pages-mvc.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:04.44\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build razor-pages\\routing \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\routing\\routing.csproj (in 115 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\routing\\routing.csproj]\r\n  routing -> D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\routing\\bin\\Debug\\net10.0\\routing.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.94\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build razor-pages\\routing-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\routing-2\\routing-2.csproj (in 84 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\routing-2\\routing-2.csproj]\r\n  routing-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\razor-pages\\routing-2\\bin\\Debug\\net10.0\\routing-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.38\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build request\\anti-forgery \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\request\\anti-forgery\\anti-forgery.csproj (in 80 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\request\\anti-forgery\\anti-forgery.csproj]\r\n  anti-forgery -> D:\\GitHub\\practical-aspnetcore\\projects\\request\\anti-forgery\\bin\\Debug\\net10.0\\anti-forgery.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.33\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build request\\cookies-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\request\\cookies-1\\cookies-1.csproj (in 56 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\request\\cookies-1\\cookies-1.csproj]\r\n  cookies-1 -> D:\\GitHub\\practical-aspnetcore\\projects\\request\\cookies-1\\bin\\Debug\\net10.0\\cookies-1.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.75\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build request\\cookies-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\request\\cookies-2\\cookies-2.csproj (in 55 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\request\\cookies-2\\cookies-2.csproj]\r\n  cookies-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\request\\cookies-2\\bin\\Debug\\net10.0\\cookies-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.68\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build request\\form-upload-file \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\request\\form-upload-file\\form-upload-file.csproj (in 71 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\request\\form-upload-file\\form-upload-file.csproj]\r\n  form-upload-file -> D:\\GitHub\\practical-aspnetcore\\projects\\request\\form-upload-file\\bin\\Debug\\net10.0\\form-upload-file.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.65\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build request\\form-values \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\request\\form-values\\form-values.csproj (in 67 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\request\\form-values\\form-values.csproj]\r\n  form-values -> D:\\GitHub\\practical-aspnetcore\\projects\\request\\form-values\\bin\\Debug\\net10.0\\form-values.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.66\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build request\\query-string-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\request\\query-string-1\\query-string-1.csproj (in 62 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\request\\query-string-1\\query-string-1.csproj]\r\n  query-string-1 -> D:\\GitHub\\practical-aspnetcore\\projects\\request\\query-string-1\\bin\\Debug\\net10.0\\query-string-1.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.65\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build request\\query-string-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\request\\query-string-2\\query-string-2.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\request\\query-string-2\\query-string-2.csproj]\r\n  query-string-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\request\\query-string-2\\bin\\Debug\\net10.0\\query-string-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.61\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build request\\query-string-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\request\\query-string-3\\query-string-3.csproj (in 55 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\request\\query-string-3\\query-string-3.csproj]\r\n  query-string-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\request\\query-string-3\\bin\\Debug\\net10.0\\query-string-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build request\\request-headers \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\request\\request-headers\\request-headers.csproj (in 59 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\request\\request-headers\\request-headers.csproj]\r\n  request-headers -> D:\\GitHub\\practical-aspnetcore\\projects\\request\\request-headers\\bin\\Debug\\net10.0\\request-headers.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.55\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build request\\request-headers-names \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\request\\request-headers-names\\request-headers-names.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\request\\request-headers-names\\request-headers-names.csproj]\r\n  request-headers-names -> D:\\GitHub\\practical-aspnetcore\\projects\\request\\request-headers-names\\bin\\Debug\\net10.0\\request-headers-names.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.53\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build request\\request-headers-typed \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\request\\request-headers-typed\\request-headers-typed.csproj (in 64 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\request\\request-headers-typed\\request-headers-typed.csproj]\r\n  request-headers-typed -> D:\\GitHub\\practical-aspnetcore\\projects\\request\\request-headers-typed\\bin\\Debug\\net10.0\\request-headers-typed.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.53\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build request\\request-verb \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\request\\request-verb\\request-verb.csproj (in 66 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\request\\request-verb\\request-verb.csproj]\r\n  request-verb -> D:\\GitHub\\practical-aspnetcore\\projects\\request\\request-verb\\bin\\Debug\\net10.0\\request-verb.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.53\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build response\\compression-response \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\response\\compression-response\\compression-response.csproj (in 77 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\response\\compression-response\\compression-response.csproj]\r\n  compression-response -> D:\\GitHub\\practical-aspnetcore\\projects\\response\\compression-response\\bin\\Debug\\net10.0\\compression-response.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.53\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build response\\response-buffering \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: response\\response-buffering\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build response\\response-header \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\response\\response-header\\response-header.csproj (in 54 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\response\\response-header\\response-header.csproj]\r\n  response-header -> D:\\GitHub\\practical-aspnetcore\\projects\\response\\response-header\\bin\\Debug\\net10.0\\response-header.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build response\\trailing-headers \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\response\\trailing-headers\\trailing-headers.csproj (in 58 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\response\\trailing-headers\\trailing-headers.csproj]\r\n  trailing-headers -> D:\\GitHub\\practical-aspnetcore\\projects\\response\\trailing-headers\\bin\\Debug\\net10.0\\trailing-headers.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build rewrite\\rewrite-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-1\\rewrite.csproj (in 70 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-1\\rewrite.csproj]\r\n  rewrite -> D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-1\\bin\\Debug\\net10.0\\rewrite.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build rewrite\\rewrite-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-2\\rewrite-2.csproj (in 61 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-2\\rewrite-2.csproj]\r\n  rewrite-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-2\\bin\\Debug\\net10.0\\rewrite-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.53\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build rewrite\\rewrite-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-3\\rewrite-3.csproj (in 75 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-3\\rewrite-3.csproj]\r\n  rewrite-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-3\\bin\\Debug\\net10.0\\rewrite-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.67\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build rewrite\\rewrite-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-4\\rewrite-4.csproj (in 63 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-4\\rewrite-4.csproj]\r\n  rewrite-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-4\\bin\\Debug\\net10.0\\rewrite-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.75\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build rewrite\\rewrite-5 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-5\\rewrite-5.csproj (in 71 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-5\\rewrite-5.csproj]\r\n  rewrite-5 -> D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-5\\bin\\Debug\\net10.0\\rewrite-5.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.27\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build rewrite\\rewrite-6 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-6\\rewrite-6.csproj (in 73 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-6\\rewrite-6.csproj]\r\n  rewrite-6 -> D:\\GitHub\\practical-aspnetcore\\projects\\rewrite\\rewrite-6\\bin\\Debug\\net10.0\\rewrite-6.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:03.76\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build security\\authentication-with-identity\\src \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\security\\authentication-with-identity\\src\\authentication-with-identity.csproj]\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.Sdk.targets(305,5): warning NETSDK1206: Found version-specific or distribution-specific runtime identifier(s): alpine-x64. Affected libraries: SQLitePCLRaw.lib.e_sqlite3. In .NET 8.0 and higher, assets for version-specific and distribution-specific runtime identifiers will not be found by default. See https://aka.ms/dotnet/rid-usage for details. [D:\\GitHub\\practical-aspnetcore\\projects\\security\\authentication-with-identity\\src\\authentication-with-identity.csproj]\r\n  authentication-with-identity -> D:\\GitHub\\practical-aspnetcore\\projects\\security\\authentication-with-identity\\src\\bin\\Debug\\net10.0\\authentication-with-identity.dll\r\n\r\nBuild succeeded.\r\n\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.Sdk.targets(305,5): warning NETSDK1206: Found version-specific or distribution-specific runtime identifier(s): alpine-x64. Affected libraries: SQLitePCLRaw.lib.e_sqlite3. In .NET 8.0 and higher, assets for version-specific and distribution-specific runtime identifiers will not be found by default. See https://aka.ms/dotnet/rid-usage for details. [D:\\GitHub\\practical-aspnetcore\\projects\\security\\authentication-with-identity\\src\\authentication-with-identity.csproj]\r\n    1 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:05.68\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build signalr\\signalr-1\\Client \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\signalr\\signalr-1\\Client\\Client.csproj (in 154 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\signalr\\signalr-1\\Client\\Client.csproj]\r\n  Client -> D:\\GitHub\\practical-aspnetcore\\projects\\signalr\\signalr-1\\Client\\bin\\Debug\\net10.0\\Client.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:08.64\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build signalr\\signalr-1\\Server \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\signalr\\signalr-1\\Server\\signalr.csproj (in 107 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\signalr\\signalr-1\\Server\\signalr.csproj]\r\n  signalr -> D:\\GitHub\\practical-aspnetcore\\projects\\signalr\\signalr-1\\Server\\bin\\Debug\\net10.0\\signalr.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:05.85\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build sse \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\sse\\sse.csproj (in 73 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\sse\\sse.csproj]\r\n  sse -> D:\\GitHub\\practical-aspnetcore\\projects\\sse\\bin\\Debug\\net10.0\\sse.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.17\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM Removed deprecated startup\\* samples (folder no longer present). \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build syndications\\syndication-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\syndications\\syndication-1\\syndication.csproj (in 249 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\syndications\\syndication-1\\syndication.csproj]\r\n  syndication -> D:\\GitHub\\practical-aspnetcore\\projects\\syndications\\syndication-1\\bin\\Debug\\net10.0\\syndication.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.20\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build syndications\\syndication-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\syndications\\syndication-2\\syndication-2.csproj (in 686 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\syndications\\syndication-2\\syndication-2.csproj]\r\n  syndication-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\syndications\\syndication-2\\bin\\Debug\\net10.0\\syndication-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.29\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM syndications\\syndication-3 removed (no project). \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build uri-helper\\uri-helper-build-absolute \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-build-absolute\\uri-helper-build-absolute.csproj (in 57 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-build-absolute\\uri-helper-build-absolute.csproj]\r\n  uri-helper-build-absolute -> D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-build-absolute\\bin\\Debug\\net10.0\\uri-helper-build-absolute.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.93\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build uri-helper\\uri-helper-from-absolute \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-from-absolute\\uri-helper-from-absolute.csproj (in 79 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-from-absolute\\uri-helper-from-absolute.csproj]\r\n  uri-helper-from-absolute -> D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-from-absolute\\bin\\Debug\\net10.0\\uri-helper-from-absolute.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.13\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build uri-helper\\uri-helper-get-display-url \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-get-display-url\\uri-helper-get-display-url.csproj (in 82 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-get-display-url\\uri-helper-get-display-url.csproj]\r\n  uri-helper-get-display-url -> D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-get-display-url\\bin\\Debug\\net10.0\\uri-helper-get-display-url.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.86\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build uri-helper\\uri-helper-get-encoded-path-and-query \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-get-encoded-path-and-query\\uri-helper-get-encoded-path-and-query.csproj (in 74 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-get-encoded-path-and-query\\uri-helper-get-encoded-path-and-query.csproj]\r\n  uri-helper-get-encoded-path-and-query -> D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-get-encoded-path-and-query\\bin\\Debug\\net10.0\\uri-helper-get-encoded-path-and-query.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.57\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build uri-helper\\uri-helper-get-encoded-url \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-get-encoded-url\\uri-helper-get-encoded-url.csproj (in 57 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-get-encoded-url\\uri-helper-get-encoded-url.csproj]\r\n  uri-helper-get-encoded-url -> D:\\GitHub\\practical-aspnetcore\\projects\\uri-helper\\uri-helper-get-encoded-url\\bin\\Debug\\net10.0\\uri-helper-get-encoded-url.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.48\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build version \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\version\\version.csproj (in 57 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\version\\version.csproj]\r\n  version -> D:\\GitHub\\practical-aspnetcore\\projects\\version\\bin\\Debug\\net10.0\\version.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.56\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build web-sockets\\web-sockets-1 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-1\\web-sockets.csproj (in 53 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-1\\web-sockets.csproj]\r\n  web-sockets -> D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-1\\bin\\Debug\\net10.0\\web-sockets.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.50\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build web-sockets\\web-sockets-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-2\\web-sockets-2.csproj (in 55 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-2\\web-sockets-2.csproj]\r\n  web-sockets-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-2\\bin\\Debug\\net10.0\\web-sockets-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.54\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build web-sockets\\web-sockets-3 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-3\\web-sockets-3.csproj (in 55 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-3\\web-sockets-3.csproj]\r\n  web-sockets-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-3\\bin\\Debug\\net10.0\\web-sockets-3.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.55\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build web-sockets\\web-sockets-4 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-4\\web-sockets-4.csproj (in 109 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-4\\web-sockets-4.csproj]\r\n  web-sockets-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-4\\bin\\Debug\\net10.0\\web-sockets-4.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.66\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build web-sockets\\web-sockets-5 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-5\\web-sockets-5.csproj (in 70 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-5\\web-sockets-5.csproj]\r\n  web-sockets-5 -> D:\\GitHub\\practical-aspnetcore\\projects\\web-sockets\\web-sockets-5\\bin\\Debug\\net10.0\\web-sockets-5.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.67\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build web-utilities\\web-utilities-query-helpers \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\web-utilities\\web-utilities-query-helpers\\web-utilities-query-helper.csproj (in 65 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\web-utilities\\web-utilities-query-helpers\\web-utilities-query-helper.csproj]\r\n  web-utilities-query-helper -> D:\\GitHub\\practical-aspnetcore\\projects\\web-utilities\\web-utilities-query-helpers\\bin\\Debug\\net10.0\\web-utilities-query-helper.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.68\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build web-utilities\\web-utilities-query-helpers-2 \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\web-utilities\\web-utilities-query-helpers-2\\web-utilities-query-helper-2.csproj (in 69 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\web-utilities\\web-utilities-query-helpers-2\\web-utilities-query-helper-2.csproj]\r\n  web-utilities-query-helper-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\web-utilities\\web-utilities-query-helpers-2\\bin\\Debug\\net10.0\\web-utilities-query-helper-2.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.71\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build web-utilities\\web-utilities-reason-phrases \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\web-utilities\\web-utilities-reason-phrases\\web-utilities-reason-phrases.csproj (in 78 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\web-utilities\\web-utilities-reason-phrases\\web-utilities-reason-phrases.csproj]\r\n  web-utilities-reason-phrases -> D:\\GitHub\\practical-aspnetcore\\projects\\web-utilities\\web-utilities-reason-phrases\\bin\\Debug\\net10.0\\web-utilities-reason-phrases.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:03.08\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build sfa\\wiki \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\sfa\\wiki\\wiki.csproj (in 3.26 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\sfa\\wiki\\wiki.csproj]\r\n  wiki -> D:\\GitHub\\practical-aspnetcore\\projects\\sfa\\wiki\\bin\\Debug\\net10.0\\wiki.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:06.21\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM Removed old orleans hello-world* and http-client samples (not present). \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orleans\\reminder \r\n  Determining projects to restore...\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.sln]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.sln]\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj (in 6.15 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(97,14): error CS1061: 'ILogger' does not contain a definition for 'Info' and no accessible extension method 'Info' accepting a first argument of type 'ILogger' could be found (are you missing a using directive or an assembly reference?) [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(98,14): error CS1061: 'ILogger' does not contain a definition for 'Info' and no accessible extension method 'Info' accepting a first argument of type 'ILogger' could be found (are you missing a using directive or an assembly reference?) [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(103,14): error CS1061: 'ILogger' does not contain a definition for 'Info' and no accessible extension method 'Info' accepting a first argument of type 'ILogger' could be found (are you missing a using directive or an assembly reference?) [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(111,23): error CS0103: The name 'GetReminder' does not exist in the current context [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(114,19): error CS0103: The name 'RegisterOrUpdateReminder' does not exist in the current context [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(122,23): error CS0103: The name 'GetReminder' does not exist in the current context [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(125,19): error CS0103: The name 'UnregisterReminder' does not exist in the current context [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\n\r\nBuild FAILED.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.sln]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.sln]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(97,14): error CS1061: 'ILogger' does not contain a definition for 'Info' and no accessible extension method 'Info' accepting a first argument of type 'ILogger' could be found (are you missing a using directive or an assembly reference?) [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(98,14): error CS1061: 'ILogger' does not contain a definition for 'Info' and no accessible extension method 'Info' accepting a first argument of type 'ILogger' could be found (are you missing a using directive or an assembly reference?) [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(103,14): error CS1061: 'ILogger' does not contain a definition for 'Info' and no accessible extension method 'Info' accepting a first argument of type 'ILogger' could be found (are you missing a using directive or an assembly reference?) [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(111,23): error CS0103: The name 'GetReminder' does not exist in the current context [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(114,19): error CS0103: The name 'RegisterOrUpdateReminder' does not exist in the current context [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(122,23): error CS0103: The name 'GetReminder' does not exist in the current context [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\Program.cs(125,19): error CS0103: The name 'UnregisterReminder' does not exist in the current context [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\reminder\\reminder.csproj]\r\n    4 Warning(s)\r\n    7 Error(s)\r\n\r\nTime Elapsed 00:00:13.22\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orleans\\rss-reader \r\n  Determining projects to restore...\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj (in 4.79 sec).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Orleans.CodeGenerator - command-line = SourceToSource D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\obj\\Debug\\net10.0\\rss-reader.orleans.g.args.txt\r\n  rss-reader -> D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\bin\\Debug\\net10.0\\rss-reader.dll\r\n\r\nBuild succeeded.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader\\rss-reader.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n    6 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:13.52\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orleans\\rss-reader-2 \r\n  Determining projects to restore...\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj (in 276 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Orleans.CodeGenerator - command-line = SourceToSource D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\obj\\Debug\\net10.0\\rss-reader-2.orleans.g.args.txt\r\n  rss-reader-2 -> D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\bin\\Debug\\net10.0\\rss-reader-2.dll\r\n\r\nBuild succeeded.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-2\\rss-reader-2.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n    6 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:08.70\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orleans\\rss-reader-3 \r\n  Determining projects to restore...\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj (in 278 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Orleans.CodeGenerator - command-line = SourceToSource D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\obj\\Debug\\net10.0\\rss-reader-3.orleans.g.args.txt\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\Opml.cs(33,21): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\Opml.cs(61,22): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\Program.cs(41,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj]\r\n  rss-reader-3 -> D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\bin\\Debug\\net10.0\\rss-reader-3.dll\r\n\r\nBuild succeeded.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\Opml.cs(33,21): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\Opml.cs(61,22): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\Program.cs(41,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-3\\rss-reader-3.csproj]\r\n    9 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:06.95\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orleans\\rss-reader-4 \r\n  Determining projects to restore...\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj (in 336 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Orleans.CodeGenerator - command-line = SourceToSource D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\obj\\Debug\\net10.0\\rss-reader-4.orleans.g.args.txt\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\Opml.cs(37,21): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\Opml.cs(65,22): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\Program.cs(39,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj]\r\n  rss-reader-4 -> D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\bin\\Debug\\net10.0\\rss-reader-4.dll\r\n\r\nBuild succeeded.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\Opml.cs(37,21): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\Opml.cs(65,22): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\Program.cs(39,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-4\\rss-reader-4.csproj]\r\n    9 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:09.36\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orleans\\rss-reader-5 \r\n  Determining projects to restore...\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj (in 315 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Orleans.CodeGenerator - command-line = SourceToSource D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\obj\\Debug\\net10.0\\rss-reader-5.orleans.g.args.txt\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\Opml.cs(37,21): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\Opml.cs(65,22): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\Program.cs(42,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj]\r\n  rss-reader-5 -> D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\bin\\Debug\\net10.0\\rss-reader-5.dll\r\n\r\nBuild succeeded.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\Opml.cs(37,21): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\Opml.cs(65,22): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\Program.cs(42,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-5\\rss-reader-5.csproj]\r\n    9 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:07.43\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orleans\\rss-reader-6 \r\n  Determining projects to restore...\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj (in 280 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Orleans.CodeGenerator - command-line = SourceToSource D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\obj\\Debug\\net10.0\\rss-reader-6.orleans.g.args.txt\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\Opml.cs(37,21): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\Opml.cs(65,22): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\Program.cs(42,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj]\r\n  rss-reader-6 -> D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\bin\\Debug\\net10.0\\rss-reader-6.dll\r\n\r\nBuild succeeded.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\Opml.cs(37,21): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\Opml.cs(65,22): warning CS8602: Dereference of a possibly null reference. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\Program.cs(42,22): warning CS8604: Possible null reference argument for parameter 'factory' in 'HttpClient HttpClientFactoryExtensions.CreateClient(IHttpClientFactory factory)'. [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\rss-reader-6\\rss-reader-6.csproj]\r\n    9 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:07.23\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build orleans\\timer \r\n  Determining projects to restore...\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj (in 267 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\n  Orleans.CodeGenerator - command-line = SourceToSource D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\obj\\Debug\\net10.0\\timer.orleans.g.args.txt\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\obj\\Debug\\net10.0\\timer.orleans.g.cs(128,53): warning SYSLIB0050: 'FormatterServices' is obsolete: 'Formatter-based serialization is obsolete and should not be used.' (https://aka.ms/dotnet-warnings/SYSLIB0050) [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\obj\\Debug\\net10.0\\timer.orleans.g.cs(146,53): warning SYSLIB0050: 'FormatterServices' is obsolete: 'Formatter-based serialization is obsolete and should not be used.' (https://aka.ms/dotnet-warnings/SYSLIB0050) [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj]\r\n  timer -> D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\bin\\Debug\\net10.0\\timer.dll\r\n\r\nBuild succeeded.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Hosting will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj : warning NU1510: PackageReference Microsoft.Extensions.Logging.Console will not be pruned. Consider removing this package from your dependencies, as it is likely unnecessary.\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj : warning NU1904: Package 'System.Drawing.Common' 4.7.0 has a known critical severity vulnerability, https://github.com/advisories/GHSA-rxg9-xrhp-64gj\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\obj\\Debug\\net10.0\\timer.orleans.g.cs(128,53): warning SYSLIB0050: 'FormatterServices' is obsolete: 'Formatter-based serialization is obsolete and should not be used.' (https://aka.ms/dotnet-warnings/SYSLIB0050) [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj]\r\nD:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\obj\\Debug\\net10.0\\timer.orleans.g.cs(146,53): warning SYSLIB0050: 'FormatterServices' is obsolete: 'Formatter-based serialization is obsolete and should not be used.' (https://aka.ms/dotnet-warnings/SYSLIB0050) [D:\\GitHub\\practical-aspnetcore\\projects\\orleans\\timer\\timer.csproj]\r\n    8 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:06.98\r\n"
  },
  {
    "path": "build-log.txt",
    "content": "\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  Restored D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj (in 73 ms).\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.64\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.96\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.31\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.19\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.17\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.01\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.16\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.92\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.84\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.81\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.03\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.92\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.06\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.23\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.99\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.24\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.99\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.80\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.11\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.30\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.17\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.83\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.93\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.12\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.92\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.81\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.03\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.69\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.02\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.15\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.37\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.23\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.94\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.87\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.76\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.79\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.92\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.03\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.85\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.01\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.24\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.93\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.88\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.02\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.28\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.20\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.94\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.21\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.06\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.00\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.89\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.00\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.84\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.14\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.82\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.11\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.16\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.01\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.84\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.98\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.26\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.14\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.91\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.29\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.18\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.83\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.11\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.24\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.98\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.28\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.08\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.12\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.27\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.15\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.91\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.22\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.89\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.80\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.87\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.01\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.06\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.73\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.23\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.95\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.95\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.88\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.95\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.35\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.78\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.96\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.11\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.08\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.06\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.79\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.81\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.00\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.74\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.02\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.96\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.06\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.05\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.21\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.84\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.26\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.11\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.19\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.92\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.97\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.35\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.97\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.23\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.01\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.18\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.23\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.05\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.00\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.02\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.95\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.93\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.03\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.00\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.07\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.03\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.23\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.12\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.64\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.06\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.97\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.90\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.26\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.83\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.73\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.66\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.94\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.12\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.98\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.54\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.09\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.81\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.85\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.88\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.72\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.05\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.17\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.65\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.53\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.76\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.68\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.95\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.65\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.43\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.03\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.87\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.81\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.14\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.49\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.71\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.66\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.93\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.99\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.79\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.74\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.74\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.02\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.12\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.22\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.81\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.62\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.98\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.99\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.93\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.24\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.68\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.66\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.55\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.27\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.67\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.14\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.77\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.72\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.25\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.07\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.21\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.24\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.83\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.82\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.03\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.06\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.98\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.68\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.94\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.64\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.87\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.64\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.54\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.66\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.85\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.94\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.88\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.48\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.54\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.55\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.66\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.22\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.56\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.98\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.86\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.06\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.71\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.99\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.91\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.21\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.21\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.84\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.01\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.67\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.04\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.84\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.93\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.79\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.79\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.12\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.80\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.19\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.77\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.95\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.14\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.18\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.14\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.80\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.24\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.15\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.76\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.11\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.06\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.11\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.03\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.93\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.71\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.96\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.74\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.52\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.93\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.97\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.67\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.11\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.08\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.58\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.01\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.91\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.95\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.87\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.96\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.94\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.41\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.88\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.97\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.95\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.07\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.97\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.07\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.14\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.26\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.00\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.94\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.84\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.17\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.96\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.87\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.77\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.65\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.76\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.01\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.09\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.90\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.18\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.83\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.80\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.19\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.31\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.23\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.13\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.98\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.08\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.16\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.25\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.80\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.18\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.21\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.06\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.31\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.63\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.91\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.14\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.72\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.81\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.82\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.88\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.67\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.74\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.04\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.80\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.07\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.21\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.88\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.98\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.91\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.92\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.43\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.18\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.96\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.02\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.67\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.95\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.12\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.72\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.09\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.31\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.12\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.20\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.96\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.13\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.11\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.81\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.53\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.98\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.04\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.96\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.00\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.96\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.86\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.69\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:01.83\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.06\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.04\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>REM dotnet build 5-0\\hello-world \r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build anonymous-id \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: anonymous-id\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build application-environment \r\n  Determining projects to restore...\r\n  All projects are up-to-date for restore.\r\nC:\\Program Files\\dotnet\\sdk\\10.0.0-rc.1.25451.107\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.NET.RuntimeIdentifierInference.targets(345,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy [D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\application-environment.csproj]\r\n  application-environment -> D:\\GitHub\\practical-aspnetcore\\projects\\application-environment\\bin\\Debug\\net10.0\\application-environment.dll\r\n\r\nBuild succeeded.\r\n    0 Warning(s)\r\n    0 Error(s)\r\n\r\nTime Elapsed 00:00:02.31\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-2 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-2\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\hello-world-3 \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\hello-world-3\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-host-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-host-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\i-webhost-environment \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\i-webhost-environment\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build basic\\iconfiguration \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: basic\\iconfiguration\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\client \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\client\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>dotnet build bedrock\\echo\\server \r\nMSBUILD : error MSB1009: Project file does not exist.\r\nSwitch: bedrock\\echo\\server\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>cd blazor\\ \r\nThe system cannot find the path specified.\r\n\r\nD:\\GitHub\\practical-aspnetcore\\projects>call build.bat \r\n******  B A T C H   R E C U R S I O N  exceeds STACK limits ******\r\nRecursion Count=342, Stack Usage=90 percent\r\n******       B A T C H   PROCESSING IS   A B O R T E D      ******\r\n"
  },
  {
    "path": "exercises/pathway-1/README.md",
    "content": "# Exercises for beginning developers to .NET platform\r\n\r\nThese exercises are designed to introduce you to .NET platform web development. They are designed to be completed in order, but you can skip around if you like."
  },
  {
    "path": "exercises/pathway-1/exercise-1.md",
    "content": "# Create a console application to manage a recipe\r\n\r\nThis exercise is designed to measure your competency in C#.\r\n\r\n## Requirements\r\n\r\nA recipe entry has the following details:\r\n\r\n* Title\r\n* Ingredients\r\n* Instructions\r\n* One or more categories \r\n\r\n\r\nFunctionalities required:\r\n\r\n* Add and edit recipe categories.\r\n* List, add and edit recipes.\r\n* All the data must be stored in a json file on disk. \r\n\r\n\r\n## Libraries to use\r\n\r\n* Make sure you use https://github.com/spectreconsole/spectre.console to handle the console UI.\r\n* Use `System.Text.Json` to serialize and deserialize JSON.\r\n\r\n## Notes\r\n\r\n* Make sure you follow the **C# coding standard**.\r\n* Create the project as a public project on your github account.\r\n* Use C# 11.\r\n* Keep your daily progress on the log. \r\n* Make sure to test your project thoroughly. \r\n* Make sure your application is nice to use.\r\n"
  },
  {
    "path": "exercises/pathway-1/exercise-2.md",
    "content": "# Service Driven Recipe Console\r\n\r\nTake the recipe console application you have created and split it into two, one for backend with REST API and another is for the console.\r\n\r\n* Use JSON to communicate data between the backend and the console.\r\n* Backend handles all the business logic including the JSON reading/writing, creating a new recipe, etc.\r\n* The console will make HTTP calls to the backend.\r\n* The backend will provide REST APIs that the console will use.\r\n* Relevant resources:\r\n  * You will need to use this in your console app https://github.com/dodyg/practical-aspnetcore/tree/net6.0/projects/httpclientfactory\r\n  * You can use the minimum Web API in ASP.NET Core 6 https://github.com/dodyg/practical-aspnetcore/\r\n  * Make sure you have read and understood how HTTP protocol works and how to design Web APIs.\r\n  \r\n"
  },
  {
    "path": "exercises/pathway-1/exercise-3.md",
    "content": "# Recipe Web Interface\r\n\r\n- Keep your JSON backend you created on Exercise 2.\r\n- Implement a HTML UI based on Razor Pages.\r\n- Connect to the JSON backend using HTTP Client.\r\n- Use Bootstrap 5.2 as a CSS framework.\r\n- Do not use AJAX nor JavaScript.\r\n\r\nNote: This is not a race. Don't take on this exercise until your previous exercises are solidly implemented to the best of your ability.\r\n"
  },
  {
    "path": "exercises/pathway-1/exercise-4.md",
    "content": "# Recipe Single Page Web Interface\r\n\r\n- Keep your JSON backend you created on Exercise 3. Adjust the CORS settings.\r\n- Implement **one** single Razor page, `index.cshtml`.\r\n- Connect to the JSON backend using [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch).\r\n- Use Bootstrap 5.0 as a CSS framework.\r\n- Implement all the functionality using [AlpineJs](https://alpinejs.dev/).\r\n\r\nNote: This is not a race. Don't take on this exercise until your previous exercises are solidly implemented to the best of your ability.\r\n"
  },
  {
    "path": "exercises/pathway-1/exercise-5.md",
    "content": "# gRPC backend\r\n\r\n- Keep your frontend from Exercise 3.\r\n- Change your backend from JSON API to gRPC.\r\n- You can read about gRPC [here](https://docs.microsoft.com/en-us/aspnet/core/grpc/?view=aspnetcore-6.0).\r\n- You can practice on gRPC through these [samples](https://github.com/dodyg/practical-aspnetcore/tree/net6.0/projects/grpc).\r\n"
  },
  {
    "path": "exercises/pathway-1/exercise-6.md",
    "content": "# Secure your REST API\r\n\r\n- Copy code from exercise-4.\r\n- Secure the backend with JWT authentication.\r\n- Modify the page to handle JWT authentication.\r\n- Implement token refresh API.\r\n"
  },
  {
    "path": "exercises/pathway-1/exercise-7.md",
    "content": "# Use HTMX\r\n\r\n- Keep your backend from exercise-6\r\n- Implement your UI using https://htmx.org/\r\n- use https://www.nuget.org/packages/Htmx.TagHelpers and https://www.nuget.org/packages/Htmx\r\n\r\n**This is an optional exercise**\r\n"
  },
  {
    "path": "exercises/pathway-1/exercise-8.md",
    "content": "# Exercise 8\r\n\r\n- Change one of your backend to use database.\r\n- You can use SQL Server Express (https://www.microsoft.com/en-us/sql-server/sql-server-downloads) or PostgreSQL (https://www.postgresql.org/)\r\n- To access the database, you can use one of the listed ORM here (https://tortugaresearch.github.io/DotNet-ORM-Cookbook/ORMs.htm).\r\n- SilverKey has been using LLBLGen Pro for the past 15 years at least and build all of our software using this but you might have different opinion\r\n    - If you are using LLBLgen Pro, you can install the trial version [here](https://www.llblgen.com/pages/try.aspx).\r\n    - Use [FluentMigrator](https://fluentmigrator.github.io/) to manage your schema.\r\n- Otherwise you can use [DbUp](https://dbup.readthedocs.io/en/latest/) or other tools to manage your database schema.\r\n\r\n## Todo\r\n* Document your database schema first \r\n* Generate the schema using a tool. Do not create schema manually. \r\n* Connect to the created database using an ORM.\r\n* Rewire your backend.\r\n\r\n**If you choose not to use LLBLGenPro and FluentMigrator, I cannot assist you since I don't have any experience with the others**\r\n"
  },
  {
    "path": "exercises/pathway-1/exercise-9.md",
    "content": "# Exercise 9\r\n- Keep your backend from exercise 8\r\n- Implement your client frontend using Blazor Web Assembly. This Web Assembly part is important. There is another version of Blazor called Blazor server. It has different model. Study Blazor Web Assembly first. \r\n\r\nYou can learn about Blazor Web Assembly at:\r\n\r\n- https://blazor-university.com/\r\n- https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor\r\n- https://github.com/dodyg/practical-aspnetcore/blob/net6.0/projects/blazor/README.md"
  },
  {
    "path": "global.json",
    "content": "{\r\n  \"sdk\": {\r\n    \"version\": \"10.0.0\",\r\n    \"rollForward\": \"major\",\r\n    \"allowPrerelease\": true\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/application-environment/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#91e60e\",\r\n        \"activityBar.background\": \"#91e60e\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#0d85d2\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#91e60e\",\r\n        \"statusBar.background\": \"#73b60b\",\r\n        \"statusBar.debuggingBackground\": \"#4e0bb6\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#558608\",\r\n        \"statusBarItem.remoteBackground\": \"#73b60b\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#73b60b\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#73b60b99\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#73b60b\"\r\n}"
  },
  {
    "path": "projects/application-environment/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    await context.Response.WriteAsync($\"Application Name: {System.Reflection.Assembly.GetEntryAssembly().GetName().Name}<br/>\");\r\n    await context.Response.WriteAsync($\"Application Base Path: {System.AppContext.BaseDirectory}<br/>\");\r\n\r\n    System.Reflection.Assembly entryAssembly = System.Reflection.Assembly.GetEntryAssembly();\r\n    var targetFramework = entryAssembly.GetCustomAttributes(typeof(System.Runtime.Versioning.TargetFrameworkAttribute), true)[0] as System.Runtime.Versioning.TargetFrameworkAttribute;\r\n    await context.Response.WriteAsync($\"Target Framework: {targetFramework.FrameworkName}<br/>\");\r\n\r\n    await context.Response.WriteAsync($\"Version: {System.Reflection.Assembly.GetEntryAssembly().GetName().Version}<br/>\");\r\n});\r\napp.Run();\r\n"
  },
  {
    "path": "projects/application-environment/README.md",
    "content": "# Application Environment\r\n\r\nThis sample shows how to obtain application environment information (target framework, etc).\r\n\r\ndotnet8"
  },
  {
    "path": "projects/application-environment/application-environment.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/application-environment/application-environment.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"application-environment\", \"application-environment.csproj\", \"{2353C50C-6C1A-4F43-9710-334A68035E1E}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{2353C50C-6C1A-4F43-9710-334A68035E1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{2353C50C-6C1A-4F43-9710-334A68035E1E}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{2353C50C-6C1A-4F43-9710-334A68035E1E}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{2353C50C-6C1A-4F43-9710-334A68035E1E}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {17683AEE-C64B-46BE-8FC8-C17F9180291B}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/authentication/authentication-1/Program.cs",
    "content": "using System.Security.Claims;\r\nusing System.IdentityModel.Tokens.Jwt;\r\nusing Microsoft.IdentityModel.Tokens;\r\nusing System.Text;\r\nusing Microsoft.AspNetCore.Authentication.JwtBearer;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddAuthorization();\r\nbuilder.Services.AddAuthentication(options =>\r\n{\r\n    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;\r\n    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;\r\n})\r\n.AddJwtBearer(options => {\r\n    options.IncludeErrorDetails = true;\r\n    options.TokenValidationParameters = new TokenValidationParameters\r\n    {\r\n        ValidateIssuer = true,\r\n        ValidateAudience = true,\r\n        ValidateLifetime = true,\r\n        ValidateIssuerSigningKey = true,\r\n        ValidIssuer = \"practical aspnetcore\",\r\n        ValidAudience = \"https://localhost:5001/\",\r\n        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(\"this is custom key for practical aspnetcore sample\"))\r\n    };});\r\n\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseAuthorization();\r\n\r\napp.MapGet(\"/\", (HttpRequest request) => Results.Text($$\"\"\"\r\n<html>\r\n<body>\r\nHello, World! Authentication Scheme: {{ JwtBearerDefaults.AuthenticationScheme }}\r\nJWT:<br/>\r\n<div id=\"jwt_content\"></div>\r\n<br/><br/>\r\nResponse from <a href=\"/secret\">/secret</a>\r\n<div id=\"message\"></div>\r\n<br/><br/>\r\n\r\n<button id=\"jwt\">Get Secret</button>\r\n\r\n<script>\r\n let btn = document.getElementById('jwt');\r\n btn.addEventListener('click', async function() {\r\n    const url = window.location.protocol + '//' + window.location.host  + \"/jwt\";\r\n    const response = await fetch(url,  {\r\n        headers: { 'Accept': 'application/json' }\r\n    });\r\n\r\n    const json = await response.json();\r\n    document.getElementById('jwt_content').textContent = json.token;\r\n\r\n    const url2 = window.location.protocol + '//' + window.location.host  + \"/secret\";\r\n    const response2 = await fetch(url2,  {\r\n        headers: { 'Accept': 'text/plain', 'Authorization': 'Bearer ' + json.token, }\r\n    });\r\n\r\n    const text =  await response2.text();\r\n\r\n    document.getElementById('message').textContent = text;\r\n });\r\n</script>\r\n\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\n\r\napp.MapGet(\"/secret\", (ClaimsPrincipal user) => $\"Hello {user.Identity?.Name}. This is a secret!\")\r\n    .RequireAuthorization();\r\n\r\napp.MapGet(\"/jwt\", () => Results.Json(new { token = GenerateJSONWebToken()}));\r\n\r\nstring GenerateJSONWebToken()    \r\n{    \r\n    var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(\"this is custom key for practical aspnetcore sample\"));    \r\n    var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);    \r\n\r\n    var token = new JwtSecurityToken(issuer:\"practical aspnetcore\",    \r\n        audience:\"https://localhost:5001/\",    \r\n        claims: new List<Claim> \r\n        { \r\n            new Claim(ClaimTypes.Name, \"Anne\"), \r\n        },\r\n        notBefore: null,    \r\n        expires: DateTime.Now.AddMinutes(120),    \r\n        signingCredentials: credentials);    \r\n\r\n    return new JwtSecurityTokenHandler().WriteToken(token);    \r\n}    \r\n\r\napp.Run();"
  },
  {
    "path": "projects/authentication/authentication-1/Readme.md",
    "content": "# Simplified JWT bearer token authentication\r\n\r\nThis sample shows the usage of the simplified authentication and authorization via `builder.AddAuthentication().AddJwtBearer();`."
  },
  {
    "path": "projects/authentication/authentication-1/authentication-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <UserSecretsId>9adce06a-fec2-402b-acba-28a6852ca7c1</UserSecretsId>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Authentication.JwtBearer\" Version=\"7.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/authentication/authentication-2/Program.cs",
    "content": "using System.Security.Claims;\r\nusing Microsoft.AspNetCore.Authentication;\r\nusing Microsoft.AspNetCore.Authentication.Cookies;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddAuthorization();\r\nbuilder.Services.AddAuthentication(options =>\r\n{\r\n    options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;\r\n    options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;\r\n}).AddCookie();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseAuthorization();\r\n\r\napp.MapGet(\"/\", (HttpRequest request) => Results.Text($$\"\"\"\r\n<html>\r\n<body>\r\n<h1>Authentication Scheme {{CookieAuthenticationDefaults.AuthenticationScheme}}</h1>\r\n<a href=\"/secret\">/secret</a> requires authentication.\r\n<br/><br/>\r\n<form action=\"/login\" method=\"post\">\r\n    <button type=\"submit\">Authenticate using cookies</button>\r\n</form>\r\n<form action=\"/logout\" method=\"post\">\r\n    <button type=\"submit\">Logout</button>\r\n</form>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\napp.MapGet(\"/secret\", (ClaimsPrincipal user) => $\"Hello {user.Identity?.Name}. This is a secret!\")\r\n    .RequireAuthorization();\r\n\r\napp.MapPost(\"/login\", async (HttpContext context) => \r\n{\r\n    var claims = new List<Claim>\r\n    {\r\n        new Claim(ClaimTypes.Name, \"Anne\")\r\n    };\r\n\r\n    var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);\r\n    var authProperties = new AuthenticationProperties(); // read more https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?view=aspnetcore-6.0\r\n    await context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties);\r\n    return Results.Redirect(\"/\");\r\n});\r\n\r\napp.MapPost(\"/logout\", async (HttpContext context) =>\r\n{\r\n    await context.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);\r\n    return Results.Redirect(\"/\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/authentication/authentication-2/Readme.md",
    "content": "# Simplified cookie authentication\r\n\r\nThis sample shows the usage of the simplified authentication and authorization via `builder.AddAuthentication().AddCookie();`."
  },
  {
    "path": "projects/authentication/authentication-2/authentication-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <UserSecretsId>9adce06a-fec2-402b-acba-28a6852ca7c1</UserSecretsId>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/authentication/authentication-3/Program.cs",
    "content": "using System.Security.Claims;\r\nusing Microsoft.AspNetCore.Authentication;\r\nusing Microsoft.AspNetCore.Authentication.Cookies;\r\nusing System.IdentityModel.Tokens.Jwt;\r\nusing Microsoft.IdentityModel.Tokens;\r\nusing System.Text;\r\nusing Microsoft.AspNetCore.Authentication.JwtBearer;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddAuthorization();\r\nbuilder.Services\r\n    .AddAuthentication()\r\n    .AddCookie()\r\n    .AddJwtBearer(options => {\r\n    options.IncludeErrorDetails = true;\r\n    options.TokenValidationParameters = new TokenValidationParameters\r\n    {\r\n        ValidateIssuer = true,\r\n        ValidateAudience = true,\r\n        ValidateLifetime = true,\r\n        ValidateIssuerSigningKey = true,\r\n        ValidIssuer = \"practical aspnetcore\",\r\n        ValidAudience = \"https://localhost:5001/\",\r\n        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(\"this is custom key for practical aspnetcore sample\"))\r\n    };});;\r\n\r\nvar app = builder.Build();\r\napp.UseAuthorization();\r\napp.MapGet(\"/\", (HttpRequest request) => Results.Text($$\"\"\"\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <title>Multiple Authentication schemes</title>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx\" crossorigin=\"anonymous\">\r\n  </head>\r\n<body>\r\n<h1>Multiple authentication schemes</h1>\r\n\r\n<ul>\r\n    <li><a href=\"/secret\">/secret</a> requires authentication.</li>\r\n    <li><a href=\"/secret-jwt-only\">/secret-jwt-only</a> requires JWT authentication.</li>\r\n    <li><a href=\"/secret-cookies-only\">/secret-cookies-only</a> requires Cookies authentication.</li>\r\n</ul>\r\n\r\n<div class=\"row\">\r\n    <div class=\"col-md-4\">\r\n\r\n        <div class=\"card\">\r\n            <div class=\"card-body\">\r\n                <form action=\"/login\" method=\"post\">\r\n                    <button type=\"submit\">Authenticate using cookies</button>\r\n                </form>\r\n                <form action=\"/logout\" method=\"post\">\r\n                    <button type=\"submit\">Logout</button>\r\n                </form>\r\n            </div>\r\n        </div>\r\n\r\n    </div>\r\n    <div class=\"col-md-4\">\r\n        <div class=\"card\">\r\n            <div class=\"card-body\">\r\n                JWT:<br/>\r\n                <div id=\"jwt_content\"></div>\r\n                <br/><br/>\r\n                Response from <a href=\"/secret\">/secret</a>\r\n                <div id=\"message\"></div>\r\n                <br/><br/>\r\n\r\n                <button id=\"jwt\">Get Secret</button>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"col-md-4\">\r\n        <div class=\"card\">\r\n            <div class=\"card-body\">\r\n                JWT:<br/>\r\n                <div id=\"jwt_content_2\"></div>\r\n                <br/><br/>\r\n                Response from <a href=\"/secret-jwt-only\">/secret-jwt-only</a>\r\n                <div id=\"message_2\"></div>\r\n                <br/><br/>\r\n\r\n                <button id=\"jwt_2\">Get Secret</button>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n<script>\r\n let btn = document.getElementById('jwt');\r\n btn.addEventListener('click', async function() {\r\n    const url = window.location.protocol + '//' + window.location.host  + \"/jwt\";\r\n    const response = await fetch(url,  {\r\n        headers: { 'Accept': 'application/json' }\r\n    });\r\n\r\n    const json = await response.json();\r\n    document.getElementById('jwt_content').textContent = json.token;\r\n\r\n    const url2 = window.location.protocol + '//' + window.location.host  + \"/secret\";\r\n    const response2 = await fetch(url2,  {\r\n        headers: { 'Accept': 'text/plain', 'Authorization': 'Bearer ' + json.token, }\r\n    });\r\n\r\n    const text =  await response2.text();\r\n\r\n    document.getElementById('message').textContent = text;\r\n });\r\n</script>\r\n\r\n\r\n<script>\r\n let btn2 = document.getElementById('jwt_2');\r\n btn2.addEventListener('click', async function() {\r\n    const url = window.location.protocol + '//' + window.location.host  + \"/jwt\";\r\n    const response = await fetch(url,  {\r\n        headers: { 'Accept': 'application/json' }\r\n    });\r\n\r\n    const json = await response.json();\r\n    document.getElementById('jwt_content_2').textContent = json.token;\r\n\r\n    const url2 = window.location.protocol + '//' + window.location.host  + \"/secret-jwt-only\";\r\n    const response2 = await fetch(url2,  {\r\n        headers: { 'Accept': 'text/plain', 'Authorization': 'Bearer ' + json.token, }\r\n    });\r\n\r\n    const text =  await response2.text();\r\n\r\n    document.getElementById('message_2').textContent = text;\r\n });\r\n</script>\r\n\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\napp.MapGet(\"/secret\", (ClaimsPrincipal user) => $\"Hello {user.Identity?.Name}. This is a secret!\")\r\n    .RequireAuthorization(options =>\r\n    {\r\n        options.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme);\r\n        options.AddAuthenticationSchemes(CookieAuthenticationDefaults.AuthenticationScheme);\r\n        options.RequireAuthenticatedUser();\r\n    });\r\n\r\napp.MapGet(\"/secret-jwt-only\", (ClaimsPrincipal user) => $\"Hello {user.Identity?.Name}. This is a secret accessible via jwt only\")\r\n    .RequireAuthorization(options =>\r\n    {\r\n        options.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme);\r\n        options.RequireAuthenticatedUser();\r\n    });\r\n\r\napp.MapGet(\"/secret-cookies-only\", (ClaimsPrincipal user) => $\"Hello {user.Identity?.Name}. This is a secret accessible via cookie based authentication only only\")\r\n    .RequireAuthorization(options =>\r\n    {\r\n        options.AddAuthenticationSchemes(CookieAuthenticationDefaults.AuthenticationScheme);\r\n        options.RequireAuthenticatedUser();\r\n    });\r\n\r\napp.MapPost(\"/login\", async (HttpContext context) => \r\n{\r\n    var claims = new List<Claim>\r\n    {\r\n        new Claim(ClaimTypes.Name, \"Anne\")\r\n    };\r\n\r\n    var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);\r\n    var authProperties = new AuthenticationProperties(); // read more https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?view=aspnetcore-6.0\r\n    await context.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties);\r\n    return Results.Redirect(\"/\");\r\n});\r\n\r\napp.MapPost(\"/logout\", async (HttpContext context) =>\r\n{\r\n    await context.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);\r\n    return Results.Redirect(\"/\");\r\n});\r\n\r\n\r\napp.MapGet(\"/jwt\", () => Results.Json(new { token = GenerateJSONWebToken()}));\r\n\r\nstring GenerateJSONWebToken()    \r\n{    \r\n    var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(\"this is custom key for practical aspnetcore sample\"));    \r\n    var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);    \r\n\r\n    var token = new JwtSecurityToken(issuer:\"practical aspnetcore\",    \r\n        audience:\"https://localhost:5001/\",    \r\n        claims: new List<Claim> \r\n        { \r\n            new Claim(ClaimTypes.Name, \"Anne\"), \r\n        },\r\n        notBefore: null,    \r\n        expires: DateTime.Now.AddMinutes(120),    \r\n        signingCredentials: credentials);    \r\n\r\n    return new JwtSecurityTokenHandler().WriteToken(token);    \r\n}    \r\n\r\napp.Run();"
  },
  {
    "path": "projects/authentication/authentication-3/Readme.md",
    "content": "# Mixed authentication\r\n\r\nThis sample shows how to combine the usage of cookie based authentication with token bearer authentication (JWT) in the same application."
  },
  {
    "path": "projects/authentication/authentication-3/authentication-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <UserSecretsId>9adce06a-fec2-402b-acba-28a6852ca7c1</UserSecretsId>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Authentication.JwtBearer\" Version=\"7.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/authentication/authentication-4/Controllers/WeatherForecastController.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Authorization;\r\n\r\n\r\n[ApiController]\r\n[Route(\"[controller]\")]\r\n[Authorize]\r\npublic class WeatherForecastController : ControllerBase\r\n{\r\n    private static readonly string[] Summaries = new[]\r\n    {\r\n        \"Freezing\", \"Bracing\", \"Chilly\", \"Cool\", \"Mild\", \"Warm\", \"Balmy\", \"Hot\", \"Sweltering\", \"Scorching\"\r\n    };\r\n\r\n    private readonly ILogger<WeatherForecastController> _logger;\r\n\r\n    public WeatherForecastController(ILogger<WeatherForecastController> logger)\r\n    {\r\n        _logger = logger;\r\n    }\r\n\r\n    [HttpGet(Name = \"GetWeatherForecast\")]\r\n    public IEnumerable<WeatherForecast> Get()\r\n    {\r\n        return Enumerable.Range(1, 5).Select(index => new WeatherForecast\r\n        {\r\n            Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),\r\n            TemperatureC = Random.Shared.Next(-20, 55),\r\n            Summary = Summaries[Random.Shared.Next(Summaries.Length)]\r\n        })\r\n        .ToArray();\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/authentication/authentication-4/Program.cs",
    "content": "using Scalar.AspNetCore;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddControllers();\nbuilder.Services.AddOpenApi();\n\nbuilder.Services.AddAuthentication()\n    .AddJwtBearer();\n\nvar app = builder.Build();\n\napp.MapOpenApi();\napp.MapScalarApiReference();\n\napp.UseHttpsRedirection();\n\napp.UseAuthorization();\n\napp.MapControllers();\n\napp.Run();\n"
  },
  {
    "path": "projects/authentication/authentication-4/Readme.md",
    "content": "# Built-in OpenAPI with JWT Bearer Authentication\n\nThis sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support with JWT Bearer authentication and MVC controllers.\n\n## Key Features\n\n- JWT Bearer authentication with minimal configuration\n- Built-in OpenAPI 3.1 support (no Swashbuckle/NSwag required)\n- Modern Scalar UI for interactive API documentation\n- MVC controllers pattern\n\n## Running the Sample\n\n```bash\ndotnet watch run\n```\n\n## Generating a JWT Token\n\nTo generate a bearer token, run:\n\n```bash\ndotnet user-jwts create\n```\n\n## Viewing the Documentation\n\n- **Scalar UI:** Navigate to `/scalar`\n- **OpenAPI JSON:** Navigate to `/openapi/v1.json`\n\n## Migration Notes\n\nThis sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support.\n\n**Changes:**\n- Removed `Swashbuckle.AspNetCore` package dependency\n- Added `Microsoft.AspNetCore.OpenApi` (built-in)\n- Added `Scalar.AspNetCore` for modern UI\n- Enabled `GenerateDocumentationFile` in .csproj\n- Updated JWT Bearer package to .NET 10 preview\n\nSee `OUT-OF-DATE.md` for migration details.\n"
  },
  {
    "path": "projects/authentication/authentication-4/WeatherForecast.cs",
    "content": "public class WeatherForecast\r\n{\r\n    public DateOnly Date { get; set; }\r\n\r\n    public int TemperatureC { get; set; }\r\n\r\n    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);\r\n\r\n    public string? Summary { get; set; }\r\n}\r\n"
  },
  {
    "path": "projects/authentication/authentication-4/appsettings.Development.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft.AspNetCore\": \"Warning\"\r\n    }\r\n  },\r\n  \"Authentication\": {\r\n    \"Schemes\": {\r\n      \"Bearer\": {\r\n        \"ValidAudiences\": [\r\n          \"http://localhost:3385\",\r\n          \"https://localhost:44315\",\r\n          \"http://localhost:5025\",\r\n          \"https://localhost:7216\"\r\n        ],\r\n        \"ValidIssuer\": \"dotnet-user-jwts\"\r\n      }\r\n    }\r\n  }\r\n}"
  },
  {
    "path": "projects/authentication/authentication-4/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft.AspNetCore\": \"Warning\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/authentication/authentication-4/authentication-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <RootNamespace>authentication_4</RootNamespace>\n    <UserSecretsId>63c41692-91b0-46cc-9f2d-a92f9ee59392</UserSecretsId>\n    <LangVersion>preview</LangVersion>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <NoWarn>$(NoWarn);1591</NoWarn>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.Authentication.JwtBearer\" Version=\"10.0.0-preview.5.*\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" />\n    <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "projects/authentication/authentication-5/Data/ApplicationDBContext.cs",
    "content": "  using Microsoft.EntityFrameworkCore;\r\n  using Microsoft.AspNetCore.Identity.EntityFrameworkCore;\r\n  \r\n  public class ApplicationDBContext:IdentityDbContext<ApplicationUser>\r\n  {\r\n    public ApplicationDBContext(DbContextOptions<ApplicationDBContext> options)\r\n     : base(options)\r\n    {\r\n    }\r\n  }"
  },
  {
    "path": "projects/authentication/authentication-5/Entities/ApplicationUser.cs",
    "content": "using Microsoft.AspNetCore.Identity;\r\n\r\npublic class ApplicationUser : IdentityUser\r\n{\r\n    \r\n}"
  },
  {
    "path": "projects/authentication/authentication-5/Migrations/20240301175333_Init.Designer.cs",
    "content": "﻿// <auto-generated />\r\nusing System;\r\nusing Microsoft.EntityFrameworkCore;\r\nusing Microsoft.EntityFrameworkCore.Infrastructure;\r\nusing Microsoft.EntityFrameworkCore.Migrations;\r\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\r\n\r\n#nullable disable\r\n\r\nnamespace authentication_5.Migrations\r\n{\r\n    [DbContext(typeof(ApplicationDBContext))]\r\n    [Migration(\"20240301175333_Init\")]\r\n    partial class Init\r\n    {\r\n        /// <inheritdoc />\r\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\r\n        {\r\n#pragma warning disable 612, 618\r\n            modelBuilder.HasAnnotation(\"ProductVersion\", \"8.0.2\");\r\n\r\n            modelBuilder.Entity(\"ApplicationUser\", b =>\r\n                {\r\n                    b.Property<string>(\"Id\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<int>(\"AccessFailedCount\")\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<string>(\"ConcurrencyStamp\")\r\n                        .IsConcurrencyToken()\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"Email\")\r\n                        .HasMaxLength(256)\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<bool>(\"EmailConfirmed\")\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<bool>(\"LockoutEnabled\")\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<DateTimeOffset?>(\"LockoutEnd\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"NormalizedEmail\")\r\n                        .HasMaxLength(256)\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"NormalizedUserName\")\r\n                        .HasMaxLength(256)\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"PasswordHash\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"PhoneNumber\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<bool>(\"PhoneNumberConfirmed\")\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<string>(\"SecurityStamp\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<bool>(\"TwoFactorEnabled\")\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<string>(\"UserName\")\r\n                        .HasMaxLength(256)\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"Id\");\r\n\r\n                    b.HasIndex(\"NormalizedEmail\")\r\n                        .HasDatabaseName(\"EmailIndex\");\r\n\r\n                    b.HasIndex(\"NormalizedUserName\")\r\n                        .IsUnique()\r\n                        .HasDatabaseName(\"UserNameIndex\");\r\n\r\n                    b.ToTable(\"AspNetUsers\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityRole\", b =>\r\n                {\r\n                    b.Property<string>(\"Id\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"ConcurrencyStamp\")\r\n                        .IsConcurrencyToken()\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"Name\")\r\n                        .HasMaxLength(256)\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"NormalizedName\")\r\n                        .HasMaxLength(256)\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"Id\");\r\n\r\n                    b.HasIndex(\"NormalizedName\")\r\n                        .IsUnique()\r\n                        .HasDatabaseName(\"RoleNameIndex\");\r\n\r\n                    b.ToTable(\"AspNetRoles\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>\", b =>\r\n                {\r\n                    b.Property<int>(\"Id\")\r\n                        .ValueGeneratedOnAdd()\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<string>(\"ClaimType\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"ClaimValue\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"RoleId\")\r\n                        .IsRequired()\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"Id\");\r\n\r\n                    b.HasIndex(\"RoleId\");\r\n\r\n                    b.ToTable(\"AspNetRoleClaims\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserClaim<string>\", b =>\r\n                {\r\n                    b.Property<int>(\"Id\")\r\n                        .ValueGeneratedOnAdd()\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<string>(\"ClaimType\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"ClaimValue\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"UserId\")\r\n                        .IsRequired()\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"Id\");\r\n\r\n                    b.HasIndex(\"UserId\");\r\n\r\n                    b.ToTable(\"AspNetUserClaims\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserLogin<string>\", b =>\r\n                {\r\n                    b.Property<string>(\"LoginProvider\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"ProviderKey\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"ProviderDisplayName\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"UserId\")\r\n                        .IsRequired()\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"LoginProvider\", \"ProviderKey\");\r\n\r\n                    b.HasIndex(\"UserId\");\r\n\r\n                    b.ToTable(\"AspNetUserLogins\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserRole<string>\", b =>\r\n                {\r\n                    b.Property<string>(\"UserId\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"RoleId\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"UserId\", \"RoleId\");\r\n\r\n                    b.HasIndex(\"RoleId\");\r\n\r\n                    b.ToTable(\"AspNetUserRoles\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserToken<string>\", b =>\r\n                {\r\n                    b.Property<string>(\"UserId\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"LoginProvider\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"Name\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"Value\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"UserId\", \"LoginProvider\", \"Name\");\r\n\r\n                    b.ToTable(\"AspNetUserTokens\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>\", b =>\r\n                {\r\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.IdentityRole\", null)\r\n                        .WithMany()\r\n                        .HasForeignKey(\"RoleId\")\r\n                        .OnDelete(DeleteBehavior.Cascade)\r\n                        .IsRequired();\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserClaim<string>\", b =>\r\n                {\r\n                    b.HasOne(\"ApplicationUser\", null)\r\n                        .WithMany()\r\n                        .HasForeignKey(\"UserId\")\r\n                        .OnDelete(DeleteBehavior.Cascade)\r\n                        .IsRequired();\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserLogin<string>\", b =>\r\n                {\r\n                    b.HasOne(\"ApplicationUser\", null)\r\n                        .WithMany()\r\n                        .HasForeignKey(\"UserId\")\r\n                        .OnDelete(DeleteBehavior.Cascade)\r\n                        .IsRequired();\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserRole<string>\", b =>\r\n                {\r\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.IdentityRole\", null)\r\n                        .WithMany()\r\n                        .HasForeignKey(\"RoleId\")\r\n                        .OnDelete(DeleteBehavior.Cascade)\r\n                        .IsRequired();\r\n\r\n                    b.HasOne(\"ApplicationUser\", null)\r\n                        .WithMany()\r\n                        .HasForeignKey(\"UserId\")\r\n                        .OnDelete(DeleteBehavior.Cascade)\r\n                        .IsRequired();\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserToken<string>\", b =>\r\n                {\r\n                    b.HasOne(\"ApplicationUser\", null)\r\n                        .WithMany()\r\n                        .HasForeignKey(\"UserId\")\r\n                        .OnDelete(DeleteBehavior.Cascade)\r\n                        .IsRequired();\r\n                });\r\n#pragma warning restore 612, 618\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/authentication/authentication-5/Migrations/20240301175333_Init.cs",
    "content": "﻿using System;\r\nusing Microsoft.EntityFrameworkCore.Migrations;\r\n\r\n#nullable disable\r\n\r\nnamespace authentication_5.Migrations\r\n{\r\n    /// <inheritdoc />\r\n    public partial class Init : Migration\r\n    {\r\n        /// <inheritdoc />\r\n        protected override void Up(MigrationBuilder migrationBuilder)\r\n        {\r\n            migrationBuilder.CreateTable(\r\n                name: \"AspNetRoles\",\r\n                columns: table => new\r\n                {\r\n                    Id = table.Column<string>(type: \"TEXT\", nullable: false),\r\n                    Name = table.Column<string>(type: \"TEXT\", maxLength: 256, nullable: true),\r\n                    NormalizedName = table.Column<string>(type: \"TEXT\", maxLength: 256, nullable: true),\r\n                    ConcurrencyStamp = table.Column<string>(type: \"TEXT\", nullable: true)\r\n                },\r\n                constraints: table =>\r\n                {\r\n                    table.PrimaryKey(\"PK_AspNetRoles\", x => x.Id);\r\n                });\r\n\r\n            migrationBuilder.CreateTable(\r\n                name: \"AspNetUsers\",\r\n                columns: table => new\r\n                {\r\n                    Id = table.Column<string>(type: \"TEXT\", nullable: false),\r\n                    UserName = table.Column<string>(type: \"TEXT\", maxLength: 256, nullable: true),\r\n                    NormalizedUserName = table.Column<string>(type: \"TEXT\", maxLength: 256, nullable: true),\r\n                    Email = table.Column<string>(type: \"TEXT\", maxLength: 256, nullable: true),\r\n                    NormalizedEmail = table.Column<string>(type: \"TEXT\", maxLength: 256, nullable: true),\r\n                    EmailConfirmed = table.Column<bool>(type: \"INTEGER\", nullable: false),\r\n                    PasswordHash = table.Column<string>(type: \"TEXT\", nullable: true),\r\n                    SecurityStamp = table.Column<string>(type: \"TEXT\", nullable: true),\r\n                    ConcurrencyStamp = table.Column<string>(type: \"TEXT\", nullable: true),\r\n                    PhoneNumber = table.Column<string>(type: \"TEXT\", nullable: true),\r\n                    PhoneNumberConfirmed = table.Column<bool>(type: \"INTEGER\", nullable: false),\r\n                    TwoFactorEnabled = table.Column<bool>(type: \"INTEGER\", nullable: false),\r\n                    LockoutEnd = table.Column<DateTimeOffset>(type: \"TEXT\", nullable: true),\r\n                    LockoutEnabled = table.Column<bool>(type: \"INTEGER\", nullable: false),\r\n                    AccessFailedCount = table.Column<int>(type: \"INTEGER\", nullable: false)\r\n                },\r\n                constraints: table =>\r\n                {\r\n                    table.PrimaryKey(\"PK_AspNetUsers\", x => x.Id);\r\n                });\r\n\r\n            migrationBuilder.CreateTable(\r\n                name: \"AspNetRoleClaims\",\r\n                columns: table => new\r\n                {\r\n                    Id = table.Column<int>(type: \"INTEGER\", nullable: false)\r\n                        .Annotation(\"Sqlite:Autoincrement\", true),\r\n                    RoleId = table.Column<string>(type: \"TEXT\", nullable: false),\r\n                    ClaimType = table.Column<string>(type: \"TEXT\", nullable: true),\r\n                    ClaimValue = table.Column<string>(type: \"TEXT\", nullable: true)\r\n                },\r\n                constraints: table =>\r\n                {\r\n                    table.PrimaryKey(\"PK_AspNetRoleClaims\", x => x.Id);\r\n                    table.ForeignKey(\r\n                        name: \"FK_AspNetRoleClaims_AspNetRoles_RoleId\",\r\n                        column: x => x.RoleId,\r\n                        principalTable: \"AspNetRoles\",\r\n                        principalColumn: \"Id\",\r\n                        onDelete: ReferentialAction.Cascade);\r\n                });\r\n\r\n            migrationBuilder.CreateTable(\r\n                name: \"AspNetUserClaims\",\r\n                columns: table => new\r\n                {\r\n                    Id = table.Column<int>(type: \"INTEGER\", nullable: false)\r\n                        .Annotation(\"Sqlite:Autoincrement\", true),\r\n                    UserId = table.Column<string>(type: \"TEXT\", nullable: false),\r\n                    ClaimType = table.Column<string>(type: \"TEXT\", nullable: true),\r\n                    ClaimValue = table.Column<string>(type: \"TEXT\", nullable: true)\r\n                },\r\n                constraints: table =>\r\n                {\r\n                    table.PrimaryKey(\"PK_AspNetUserClaims\", x => x.Id);\r\n                    table.ForeignKey(\r\n                        name: \"FK_AspNetUserClaims_AspNetUsers_UserId\",\r\n                        column: x => x.UserId,\r\n                        principalTable: \"AspNetUsers\",\r\n                        principalColumn: \"Id\",\r\n                        onDelete: ReferentialAction.Cascade);\r\n                });\r\n\r\n            migrationBuilder.CreateTable(\r\n                name: \"AspNetUserLogins\",\r\n                columns: table => new\r\n                {\r\n                    LoginProvider = table.Column<string>(type: \"TEXT\", nullable: false),\r\n                    ProviderKey = table.Column<string>(type: \"TEXT\", nullable: false),\r\n                    ProviderDisplayName = table.Column<string>(type: \"TEXT\", nullable: true),\r\n                    UserId = table.Column<string>(type: \"TEXT\", nullable: false)\r\n                },\r\n                constraints: table =>\r\n                {\r\n                    table.PrimaryKey(\"PK_AspNetUserLogins\", x => new { x.LoginProvider, x.ProviderKey });\r\n                    table.ForeignKey(\r\n                        name: \"FK_AspNetUserLogins_AspNetUsers_UserId\",\r\n                        column: x => x.UserId,\r\n                        principalTable: \"AspNetUsers\",\r\n                        principalColumn: \"Id\",\r\n                        onDelete: ReferentialAction.Cascade);\r\n                });\r\n\r\n            migrationBuilder.CreateTable(\r\n                name: \"AspNetUserRoles\",\r\n                columns: table => new\r\n                {\r\n                    UserId = table.Column<string>(type: \"TEXT\", nullable: false),\r\n                    RoleId = table.Column<string>(type: \"TEXT\", nullable: false)\r\n                },\r\n                constraints: table =>\r\n                {\r\n                    table.PrimaryKey(\"PK_AspNetUserRoles\", x => new { x.UserId, x.RoleId });\r\n                    table.ForeignKey(\r\n                        name: \"FK_AspNetUserRoles_AspNetRoles_RoleId\",\r\n                        column: x => x.RoleId,\r\n                        principalTable: \"AspNetRoles\",\r\n                        principalColumn: \"Id\",\r\n                        onDelete: ReferentialAction.Cascade);\r\n                    table.ForeignKey(\r\n                        name: \"FK_AspNetUserRoles_AspNetUsers_UserId\",\r\n                        column: x => x.UserId,\r\n                        principalTable: \"AspNetUsers\",\r\n                        principalColumn: \"Id\",\r\n                        onDelete: ReferentialAction.Cascade);\r\n                });\r\n\r\n            migrationBuilder.CreateTable(\r\n                name: \"AspNetUserTokens\",\r\n                columns: table => new\r\n                {\r\n                    UserId = table.Column<string>(type: \"TEXT\", nullable: false),\r\n                    LoginProvider = table.Column<string>(type: \"TEXT\", nullable: false),\r\n                    Name = table.Column<string>(type: \"TEXT\", nullable: false),\r\n                    Value = table.Column<string>(type: \"TEXT\", nullable: true)\r\n                },\r\n                constraints: table =>\r\n                {\r\n                    table.PrimaryKey(\"PK_AspNetUserTokens\", x => new { x.UserId, x.LoginProvider, x.Name });\r\n                    table.ForeignKey(\r\n                        name: \"FK_AspNetUserTokens_AspNetUsers_UserId\",\r\n                        column: x => x.UserId,\r\n                        principalTable: \"AspNetUsers\",\r\n                        principalColumn: \"Id\",\r\n                        onDelete: ReferentialAction.Cascade);\r\n                });\r\n\r\n            migrationBuilder.CreateIndex(\r\n                name: \"IX_AspNetRoleClaims_RoleId\",\r\n                table: \"AspNetRoleClaims\",\r\n                column: \"RoleId\");\r\n\r\n            migrationBuilder.CreateIndex(\r\n                name: \"RoleNameIndex\",\r\n                table: \"AspNetRoles\",\r\n                column: \"NormalizedName\",\r\n                unique: true);\r\n\r\n            migrationBuilder.CreateIndex(\r\n                name: \"IX_AspNetUserClaims_UserId\",\r\n                table: \"AspNetUserClaims\",\r\n                column: \"UserId\");\r\n\r\n            migrationBuilder.CreateIndex(\r\n                name: \"IX_AspNetUserLogins_UserId\",\r\n                table: \"AspNetUserLogins\",\r\n                column: \"UserId\");\r\n\r\n            migrationBuilder.CreateIndex(\r\n                name: \"IX_AspNetUserRoles_RoleId\",\r\n                table: \"AspNetUserRoles\",\r\n                column: \"RoleId\");\r\n\r\n            migrationBuilder.CreateIndex(\r\n                name: \"EmailIndex\",\r\n                table: \"AspNetUsers\",\r\n                column: \"NormalizedEmail\");\r\n\r\n            migrationBuilder.CreateIndex(\r\n                name: \"UserNameIndex\",\r\n                table: \"AspNetUsers\",\r\n                column: \"NormalizedUserName\",\r\n                unique: true);\r\n        }\r\n\r\n        /// <inheritdoc />\r\n        protected override void Down(MigrationBuilder migrationBuilder)\r\n        {\r\n            migrationBuilder.DropTable(\r\n                name: \"AspNetRoleClaims\");\r\n\r\n            migrationBuilder.DropTable(\r\n                name: \"AspNetUserClaims\");\r\n\r\n            migrationBuilder.DropTable(\r\n                name: \"AspNetUserLogins\");\r\n\r\n            migrationBuilder.DropTable(\r\n                name: \"AspNetUserRoles\");\r\n\r\n            migrationBuilder.DropTable(\r\n                name: \"AspNetUserTokens\");\r\n\r\n            migrationBuilder.DropTable(\r\n                name: \"AspNetRoles\");\r\n\r\n            migrationBuilder.DropTable(\r\n                name: \"AspNetUsers\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/authentication/authentication-5/Migrations/ApplicationDBContextModelSnapshot.cs",
    "content": "﻿// <auto-generated />\r\nusing System;\r\nusing Microsoft.EntityFrameworkCore;\r\nusing Microsoft.EntityFrameworkCore.Infrastructure;\r\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\r\n\r\n#nullable disable\r\n\r\nnamespace authentication_5.Migrations\r\n{\r\n    [DbContext(typeof(ApplicationDBContext))]\r\n    partial class ApplicationDBContextModelSnapshot : ModelSnapshot\r\n    {\r\n        protected override void BuildModel(ModelBuilder modelBuilder)\r\n        {\r\n#pragma warning disable 612, 618\r\n            modelBuilder.HasAnnotation(\"ProductVersion\", \"8.0.2\");\r\n\r\n            modelBuilder.Entity(\"ApplicationUser\", b =>\r\n                {\r\n                    b.Property<string>(\"Id\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<int>(\"AccessFailedCount\")\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<string>(\"ConcurrencyStamp\")\r\n                        .IsConcurrencyToken()\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"Email\")\r\n                        .HasMaxLength(256)\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<bool>(\"EmailConfirmed\")\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<bool>(\"LockoutEnabled\")\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<DateTimeOffset?>(\"LockoutEnd\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"NormalizedEmail\")\r\n                        .HasMaxLength(256)\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"NormalizedUserName\")\r\n                        .HasMaxLength(256)\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"PasswordHash\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"PhoneNumber\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<bool>(\"PhoneNumberConfirmed\")\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<string>(\"SecurityStamp\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<bool>(\"TwoFactorEnabled\")\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<string>(\"UserName\")\r\n                        .HasMaxLength(256)\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"Id\");\r\n\r\n                    b.HasIndex(\"NormalizedEmail\")\r\n                        .HasDatabaseName(\"EmailIndex\");\r\n\r\n                    b.HasIndex(\"NormalizedUserName\")\r\n                        .IsUnique()\r\n                        .HasDatabaseName(\"UserNameIndex\");\r\n\r\n                    b.ToTable(\"AspNetUsers\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityRole\", b =>\r\n                {\r\n                    b.Property<string>(\"Id\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"ConcurrencyStamp\")\r\n                        .IsConcurrencyToken()\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"Name\")\r\n                        .HasMaxLength(256)\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"NormalizedName\")\r\n                        .HasMaxLength(256)\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"Id\");\r\n\r\n                    b.HasIndex(\"NormalizedName\")\r\n                        .IsUnique()\r\n                        .HasDatabaseName(\"RoleNameIndex\");\r\n\r\n                    b.ToTable(\"AspNetRoles\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>\", b =>\r\n                {\r\n                    b.Property<int>(\"Id\")\r\n                        .ValueGeneratedOnAdd()\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<string>(\"ClaimType\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"ClaimValue\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"RoleId\")\r\n                        .IsRequired()\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"Id\");\r\n\r\n                    b.HasIndex(\"RoleId\");\r\n\r\n                    b.ToTable(\"AspNetRoleClaims\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserClaim<string>\", b =>\r\n                {\r\n                    b.Property<int>(\"Id\")\r\n                        .ValueGeneratedOnAdd()\r\n                        .HasColumnType(\"INTEGER\");\r\n\r\n                    b.Property<string>(\"ClaimType\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"ClaimValue\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"UserId\")\r\n                        .IsRequired()\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"Id\");\r\n\r\n                    b.HasIndex(\"UserId\");\r\n\r\n                    b.ToTable(\"AspNetUserClaims\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserLogin<string>\", b =>\r\n                {\r\n                    b.Property<string>(\"LoginProvider\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"ProviderKey\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"ProviderDisplayName\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"UserId\")\r\n                        .IsRequired()\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"LoginProvider\", \"ProviderKey\");\r\n\r\n                    b.HasIndex(\"UserId\");\r\n\r\n                    b.ToTable(\"AspNetUserLogins\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserRole<string>\", b =>\r\n                {\r\n                    b.Property<string>(\"UserId\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"RoleId\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"UserId\", \"RoleId\");\r\n\r\n                    b.HasIndex(\"RoleId\");\r\n\r\n                    b.ToTable(\"AspNetUserRoles\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserToken<string>\", b =>\r\n                {\r\n                    b.Property<string>(\"UserId\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"LoginProvider\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"Name\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.Property<string>(\"Value\")\r\n                        .HasColumnType(\"TEXT\");\r\n\r\n                    b.HasKey(\"UserId\", \"LoginProvider\", \"Name\");\r\n\r\n                    b.ToTable(\"AspNetUserTokens\", (string)null);\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>\", b =>\r\n                {\r\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.IdentityRole\", null)\r\n                        .WithMany()\r\n                        .HasForeignKey(\"RoleId\")\r\n                        .OnDelete(DeleteBehavior.Cascade)\r\n                        .IsRequired();\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserClaim<string>\", b =>\r\n                {\r\n                    b.HasOne(\"ApplicationUser\", null)\r\n                        .WithMany()\r\n                        .HasForeignKey(\"UserId\")\r\n                        .OnDelete(DeleteBehavior.Cascade)\r\n                        .IsRequired();\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserLogin<string>\", b =>\r\n                {\r\n                    b.HasOne(\"ApplicationUser\", null)\r\n                        .WithMany()\r\n                        .HasForeignKey(\"UserId\")\r\n                        .OnDelete(DeleteBehavior.Cascade)\r\n                        .IsRequired();\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserRole<string>\", b =>\r\n                {\r\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.IdentityRole\", null)\r\n                        .WithMany()\r\n                        .HasForeignKey(\"RoleId\")\r\n                        .OnDelete(DeleteBehavior.Cascade)\r\n                        .IsRequired();\r\n\r\n                    b.HasOne(\"ApplicationUser\", null)\r\n                        .WithMany()\r\n                        .HasForeignKey(\"UserId\")\r\n                        .OnDelete(DeleteBehavior.Cascade)\r\n                        .IsRequired();\r\n                });\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserToken<string>\", b =>\r\n                {\r\n                    b.HasOne(\"ApplicationUser\", null)\r\n                        .WithMany()\r\n                        .HasForeignKey(\"UserId\")\r\n                        .OnDelete(DeleteBehavior.Cascade)\r\n                        .IsRequired();\r\n                });\r\n#pragma warning restore 612, 618\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/authentication/authentication-5/Program.cs",
    "content": "using Microsoft.EntityFrameworkCore;\nusing Scalar.AspNetCore;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddOpenApi();\nbuilder.Services.AddAuthorization();\nbuilder.Services.AddDbContext<ApplicationDBContext>(options =>\n    options.UseSqlite(builder.Configuration.GetConnectionString(\"DefaultConnection\")));\n\nbuilder.Services\n    .AddIdentityApiEndpoints<ApplicationUser>()\n    .AddEntityFrameworkStores<ApplicationDBContext>();\n\nvar app = builder.Build();\n\napp.MapOpenApi();\napp.MapScalarApiReference();\n\napp.UseHttpsRedirection();\napp.UseAuthorization();\n\nvar summaries = new[]\n{\n    \"Freezing\", \"Bracing\", \"Chilly\", \"Cool\", \"Mild\", \"Warm\", \"Balmy\", \"Hot\", \"Sweltering\", \"Scorching\"\n};\n\n/// <summary>\n/// Returns a 5-day weather forecast\n/// </summary>\napp.MapGet(\"/weatherforecast\", () =>\n{\n    var forecast =  Enumerable.Range(1, 5).Select(index =>\n        new WeatherForecast\n        (\n            DateOnly.FromDateTime(DateTime.Now.AddDays(index)),\n            Random.Shared.Next(-20, 55),\n            summaries[Random.Shared.Next(summaries.Length)]\n        ))\n        .ToArray();\n    return forecast;\n})\n.WithName(\"GetWeatherForecast\")\n.RequireAuthorization();\n\napp.MapGroup(\"/account\").MapIdentityApi<ApplicationUser>();\n\napp.Run();\n\nrecord WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)\n{\n    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);\n}\n"
  },
  {
    "path": "projects/authentication/authentication-5/Readme.md",
    "content": "## Authentication using Identity API in .NET 8\r\n\r\n### To add the Identity API to our app, we need to follow the below steps:\r\n\r\n- Add the required EF Core packages\r\n  - dotnet add package Microsoft.EntityFrameworkCore.Design\r\n  - dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore\r\n  - dotnet add package Microsoft.EntityFrameworkCore.SQLite (using simple SQLite for this demo)\r\n- Extend IdentityDbContext and IdentityUser\r\n\r\n```\r\n      public class ApplicationDBContext:IdentityDbContext<ApplicationUser>\r\n      {\r\n          public ApplicationDBContext(DbContextOptions<ApplicationDBContext> options)\r\n          : base(options)\r\n          {\r\n          }\r\n      }\r\n```\r\n\r\n```\r\n      public class ApplicationUser : IdentityUser\r\n      {\r\n\r\n      }\r\n```\r\n\r\n- Add IdentityAPI endpoints in Program.cs\r\n\r\n```\r\n      builder.Services\r\n          .AddIdentityApiEndpoints<ApplicationUser>()\r\n          .AddEntityFrameworkStores<ApplicationDBContext>();\r\n```\r\n\r\n- Create DB migrations\r\n\r\n```\r\n      dotnet ef migrations add InitialSchema\r\n      dotnet ef database update\r\n```\r\n\r\n- Authorise the API\r\n\r\n```\r\n      app.MapGet(\"/weatherforecast\", () =>\r\n      {\r\n      var forecast =  Enumerable.Range(1, 5).Select(index =>\r\n          new WeatherForecast\r\n          (\r\n              DateOnly.FromDateTime(DateTime.Now.AddDays(index)),\r\n              Random.Shared.Next(-20, 55),\r\n              summaries[Random.Shared.Next(summaries.Length)]\r\n          ))\r\n          .ToArray();\r\n          return forecast;\r\n      })\r\n      .WithName(\"GetWeatherForecast\")\r\n      .RequireAuthorization() -- add this line of code\r\n      .WithOpenApi();\r\n```\r\n"
  },
  {
    "path": "projects/authentication/authentication-5/Requests/Authentication.http",
    "content": "@host = http://localhost:5033\r\n\r\nGET {{host}}/weatherforecast/\r\nAccept: application/json\r\n\r\n### Register a new user\r\nPOST {{host}}/account/register\r\nContent-Type: application/json\r\n\r\n{\r\n  \"username\": \"test@test.com\",\r\n  \"password\": \"Test@12345\",\r\n  \"email\": \"test@test.com\"\r\n}\r\n\r\n### Login and retrieve tokens\r\nPOST {{host}}/account/login\r\nContent-Type: application/json\r\n\r\n{\r\n  \"username\": \"test@test.com\",\r\n  \"password\": \"Test@12345\",\r\n  \"email\": \"test@test.com\"\r\n}\r\n\r\n### Call Forecast API with bearer token\r\nGET {{host}}/weatherforecast\r\nAuthorization: Bearer {{token received from the login API endpoint}}"
  },
  {
    "path": "projects/authentication/authentication-5/appsettings.Development.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft.AspNetCore\": \"Warning\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/authentication/authentication-5/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft.AspNetCore\": \"Warning\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\",\r\n  \"ConnectionStrings\": {\r\n    \"DefaultConnection\": \"Data Source = sample.db\"\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/authentication/authentication-5/authentication-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <RootNamespace>authentication_5</RootNamespace>\n    <LangVersion>preview</LangVersion>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <NoWarn>$(NoWarn);1591</NoWarn>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" />\n    <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.Sqlite\" Version=\"10.0.0-preview.5.*\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "projects/authentication/build.bat",
    "content": "dotnet build authentication-1\r\ndotnet build authentication-2\r\ndotnet build authentication-3\r\ndotnet build authentication-4\r\ndotnet build authentication-5"
  },
  {
    "path": "projects/authentication/build.sh",
    "content": "#!/bin/bash\ndotnet build authentication-1\ndotnet build authentication-2\ndotnet build authentication-3\ndotnet build authentication-4\ndotnet build authentication-5\n"
  },
  {
    "path": "projects/authentication/readme.md",
    "content": "# Authentication (5)\n\n- [Authentication - JWT](authentication-1)\n\n  This sample shows the usage of the simplified authentication and authorization via `builder.AddAuthentication().AddJwtBearer();`.\n\n- [Authentication - Cookie](authentication-2)\n\n  This sample shows the usage of the simplified authentication and authorization via `builder.AddAuthentication().AddCookie();`.\n\n- [Authentication - Mixed](authentication-3)\n\n  This sample shows how to use both JWT and Cookie authentications in the same application.\n\n- [Authentication - simplified JWT bearer token authentication](authentication-4)\n\n  This sample shows the usage of the simplified authentication and authorization using webapi template via `builder.AddAuthentication().AddJwtBearer();`. Uses .NET 10 built-in OpenAPI.\n\n- [Authentication - Identity](authentication-5)\n\n  This sample shows the usage of authentication using Identity API using webapi template via `builder.ServicesAddIdentityApiEndpoints<>().AddEntityFrameworkStores<>();`. Uses .NET 10 built-in OpenAPI.\n\ndotnet8\n"
  },
  {
    "path": "projects/blazor-ss/ChatR/ChatR.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.SignalR.Client\" Version=\"3.1.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/ChatR/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/ChatR/Components/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n@inject NotificationService Notification\r\n@implements IDisposable\r\n\r\n<div class=\"container\">\r\n    <h1>SignalR Broadcast</h1>\r\n    <ul>\r\n        <li>\r\n            <a href=\"/\" target=\"new\">Open another window</a>\r\n        </li>\r\n        <li>\r\n            Click Connect\r\n        </li>\r\n        <li>\r\n            Enter Name and Broadcast Message. Both screens will receive the broadcasts. \r\n        </li>\r\n    </ul>\r\n\r\n    <div class=\"alert alert-warning\">\r\n        @Log\r\n    </div>\r\n\r\n    <div class=\"alert alert-info\">\r\n        @Message\r\n    </div>\r\n    <button @onclick=\"ConnectAsync\" class=\"btn btn-primary\">Connect</button>\r\n    \r\n    <br/><br/>\r\n    @if (ShowChatPanel)\r\n    {\r\n        <label>Username</label>\r\n        <input class=\"form-control\" type=\"text\" @bind=\"Sender\" placeholder=\"Enter username\" />\r\n        <br/>\r\n        <label>Broadcast Message</label>\r\n        <textarea class=\"form-control\" @bind=\"BroadcastMessage\" placeholder=\"Enter Broadcast Message\"></textarea>\r\n        <br/>\r\n        <button @onclick=\"BroadcastAsync\" class=\"btn btn-secondary\">Broadcast</button>\r\n    }\r\n</div>\r\n\r\n@code{\r\n    string Message { get;set;}\r\n    \r\n    string Log { get;set;}\r\n\r\n    string Sender { get;set;}\r\n\r\n    string BroadcastMessage { get;set;}\r\n\r\n    bool ShowChatPanel { get; set; }\r\n\r\n    protected override void OnInitialized()\r\n    {\r\n        Notification.OnBroadcastMessage = async (string user, string message) =>\r\n        {\r\n            Message = $\"{user} broadcasts \\\"{message}\\\"\";\r\n            await this.InvokeAsync(StateHasChanged);\r\n        }; \r\n\r\n        Notification.OnServerMessage = async (string message) =>\r\n        {\r\n            ShowChatPanel = true;\r\n            Message = $\"Server sends message: \\\"{message}\\\"\";\r\n            await this.InvokeAsync(StateHasChanged);\r\n        }; \r\n    }\r\n\r\n    async Task ConnectAsync()\r\n    {\r\n        Log = \"Connected\";\r\n        await Notification.ConnectAsync();\r\n    }\r\n\r\n    async Task BroadcastAsync()\r\n    {\r\n        Log = \"Broadcast\";\r\n        await Notification.BroadcastAsync(Sender, BroadcastMessage);\r\n    }\r\n\r\n    public void Dispose()\r\n    {\r\n        Notification.DisposeAsync(); //This is by design because Blazor does not support IAsyncDisposable  https://github.com/dotnet/aspnetcore/issues/20932\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-ss/ChatR/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using ChatR.Services\r\n"
  },
  {
    "path": "projects/blazor-ss/ChatR/NotificationHub.cs",
    "content": "using System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.SignalR;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace ChatR\r\n{\r\n    public class NotificationHub : Hub\r\n    {\r\n        ILogger<NotificationHub> _logger;\r\n\r\n        public NotificationHub(ILogger<NotificationHub> logger)\r\n        {\r\n            _logger = logger;\r\n            _logger.LogInformation(\"NotificationHub Created\");\r\n        }\r\n\r\n        public override async Task OnConnectedAsync()\r\n        {\r\n            _logger.LogInformation(\"New Connection from Client\");\r\n            await base.OnConnectedAsync();\r\n            await ServerMessage(\"Welcome to ChatR\");\r\n        }\r\n\r\n        public async Task Broadcast(string from, string message)\r\n        {\r\n            _logger.LogInformation($\"{from} broadcasts message: {message}\");\r\n            await Clients.All.SendAsync(\"BroadcastChannel\", from, message);\r\n        }\r\n\r\n        public async Task ServerMessage(string message)\r\n        {\r\n            _logger.LogInformation($\"Server sends message: {message}\");\r\n            await Clients.Caller.SendAsync(\"ServerChannel\", message);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ss/ChatR/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>ChatR</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/ChatR/Pages/_ViewImports.cshtml",
    "content": "@using ChatR.Components\r\n@namespace ChatR.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/ChatR/Program.cs",
    "content": "using ChatR.Services;\r\nusing ChatR;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor(); //https://github.com/dotnet/aspnetcore/blob/master/src/Components/Server/src/DependencyInjection/ComponentServiceCollectionExtensions.cs\r\nbuilder.Services.AddScoped<NotificationService>();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\n\r\napp.MapBlazorHub(); //https://github.com/dotnet/aspnetcore/blob/master/src/Components/Server/src/Builder/ComponentEndpointRouteBuilderExtensions.cs\r\napp.MapHub<NotificationHub>(\"/notificationhub\");\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\n\r\napp.Run();"
  },
  {
    "path": "projects/blazor-ss/ChatR/README.md",
    "content": "# ChatR\r\n\r\nThis sample shows how to host SignalR Hub along with Blazor Server Side. This is just a simple 'chat' app that uses SignalR to broadcast everything. "
  },
  {
    "path": "projects/blazor-ss/ChatR/Services/NotificationService.cs",
    "content": "using System;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.SignalR.Client;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace ChatR.Services\r\n{\r\n    public class NotificationService : IAsyncDisposable\r\n    {\r\n        HubConnection _connection;\r\n\r\n        ILogger _logger;\r\n\r\n        public NotificationService(ILogger<NotificationService> logger)\r\n        {\r\n            _logger = logger;    \r\n        }\r\n\r\n        public async Task ConnectAsync()\r\n        {\r\n            _logger.LogInformation(\"ConnectAsync()\");\r\n            _connection = new HubConnectionBuilder()\r\n                .WithUrl(\"https://localhost:5001/notificationhub\")\r\n                .Build();\r\n\r\n            _connection.On<string, string>(\"BroadcastChannel\", (user, message) =>\r\n            {\r\n                this.OnBroadcastMessage?.Invoke(user, message);\r\n            });\r\n\r\n            _connection.On<string>(\"ServerChannel\", (message) => \r\n            {\r\n                this.OnServerMessage?.Invoke(message);\r\n            });\r\n\r\n            if (_connection.State != HubConnectionState.Connected)\r\n            {\r\n                _logger.LogInformation(\"Start connecting to the SignalR Hub\");\r\n                await _connection.StartAsync();\r\n            }\r\n        }\r\n\r\n        public Action<string> OnServerMessage { get; set; }\r\n\r\n        public Action<string, string> OnBroadcastMessage { get; set; }\r\n\r\n        public async Task BroadcastAsync(string sender, string message)\r\n        {\r\n            await _connection.InvokeAsync(\"Broadcast\", sender, message);\r\n        }\r\n\r\n        public async ValueTask DisposeAsync()\r\n        {\r\n            if (_connection != null)\r\n                await _connection.DisposeAsync();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ss/ChatR/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/ComponentEvents/AppState.cs",
    "content": "using System;\r\n\r\nnamespace ComponentEvents\r\n{\r\n  public class AppState\r\n  {\r\n    public event Action<string> OnNotification;\r\n\r\n    public void Notify(string notification)\r\n    {\r\n      OnNotification?.Invoke(notification);\r\n    }\r\n  }\r\n}"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents/ComponentEvents.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(Shared.MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents/Components/Child.razor",
    "content": "@inject AppState AppState\r\n\r\n<div class=\"card\">\r\n  <div class=\"card-body\">\r\n    <button @onclick=\"Notify\" class=\"btn btn-primary\">Notify from a Child Component</button>\r\n  </div>\r\n</div>\r\n\r\n@code {\r\n  void Notify()\r\n  {\r\n    AppState.Notify(\"Hello World from a child component\");\r\n  }\r\n}"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents/Components/Notification.razor",
    "content": "@inject AppState AppState\r\n@implements IDisposable\r\n\r\n@Message\r\n\r\n@code {\r\n  \r\n  string Message { get; set; }\r\n  \r\n  protected override void OnInitialized()\r\n  {\r\n      AppState.OnNotification += UpdateNotification;\r\n  }\r\n\r\n  public void UpdateNotification(string str)\r\n  {\r\n    Message = str;\r\n    StateHasChanged();\r\n  }\r\n\r\n  public void Dispose()\r\n  {\r\n    AppState.OnNotification -= UpdateNotification;\r\n  }\r\n}"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents/Components/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n@inject AppState AppState\r\n<h1>Component Events</h1>\r\n\r\n<button @onclick=\"Notify\" class=\"btn btn-primary\">Notify from Page</button>\r\n\r\n<br/>\r\n<br/>\r\n\r\n<Child></Child>\r\n\r\n@code {\r\n  void Notify()\r\n  {\r\n    AppState.Notify(\"Hello World from a page\");\r\n  }\r\n}"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents/Components/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n  <header style=\"margin-bottom:10px; background-color: #001f3f;color:white;padding:5px;\">\r\n    <Notification></Notification>\r\n  </header>\r\n  <div>\r\n          @Body\r\n  </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Component Events</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents/Pages/_ViewImports.cshtml",
    "content": "@using ComponentEvents.Components\r\n@namespace ComponentEvents.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents/Program.cs",
    "content": "using Microsoft.Extensions.DependencyInjection;\r\nusing ComponentEvents;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\nbuilder.Services.AddScoped<AppState>();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\n\r\napp.MapBlazorHub();\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\n\r\napp.Run();"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents/README.md",
    "content": "# Component Events\r\n\r\nThere are many ways for Parent component to communicate to Children components in Blazor and vice versa. However there is no straightforward way to manage communication between components that are located in different hierarchy. We are using an intermediary [Scoped lifetime](https://docs.microsoft.com/en-us/aspnet/core/blazor/dependency-injection?view=aspnetcore-3.1) AppState object here to faciliate the communication. \r\n\r\n\r\n> However, the Blazor Server hosting model supports the Scoped lifetime. In Blazor Server apps, a scoped service registration is scoped to the connection. For this reason, using scoped services is preferred for services that should be scoped to the current user, even if the current intent is to run client-side in the browser.\r\n[Scoped lifetime](https://docs.microsoft.com/en-us/aspnet/core/blazor/dependency-injection?view=aspnetcore-3.1)\r\n\r\nThe AppState object needs to be in Scoped lifetime so it exists only for your current session. If you make it Singleton your AppState will be modified by other users. "
  },
  {
    "path": "projects/blazor-ss/ComponentEvents/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/ComponentEvents-2/AppState.cs",
    "content": "using System;\r\n\r\nnamespace ComponentEvents\r\n{\r\n  public class NotificationMessage \r\n  {\r\n    public string Message { get; set; }\r\n  }\r\n}"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents-2/ComponentEvents.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"EventAggregator.Blazor\" Version=\"2.0.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents-2/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(Shared.MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents-2/Components/Child.razor",
    "content": "@inject EventAggregator.Blazor.IEventAggregator Events\r\n\r\n<div class=\"card\">\r\n  <div class=\"card-body\">\r\n    <button @onclick=\"NotifyAsync\" class=\"btn btn-primary\">Notify from a Child Component</button>\r\n  </div>\r\n</div>\r\n\r\n@code{\r\n  async Task NotifyAsync()\r\n  {\r\n    await Events.PublishAsync(new NotificationMessage { Message = \"Hello World from a child component\"});\r\n  }\r\n}"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents-2/Components/Notification.razor",
    "content": "@inject EventAggregator.Blazor.IEventAggregator Events\r\n@implements EventAggregator.Blazor.IHandle<NotificationMessage>\r\n@implements IDisposable\r\n\r\n@Message\r\n\r\n@code {\r\n  \r\n  string Message { get; set; }\r\n  \r\n  protected override void OnInitialized()\r\n  {\r\n    Events.Subscribe(this);\r\n  }\r\n\r\n  public Task HandleAsync(NotificationMessage message)\r\n  {\r\n    Message = message.Message;\r\n    InvokeAsync(() => StateHasChanged());\r\n    return Task.CompletedTask;\r\n  }\r\n\r\n  public void Dispose()\r\n  {\r\n    Events.Unsubscribe(this);\r\n  }\r\n}"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents-2/Components/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n@inject EventAggregator.Blazor.IEventAggregator Events\r\n\r\n<h1>Component Events</h1>\r\n\r\n<button @onclick=\"NotifyAsync\" class=\"btn btn-primary\">Notify from Page</button>\r\n\r\n<br/>\r\n<br/>\r\n\r\n<Child></Child>\r\n@code {\r\n  async Task NotifyAsync()\r\n  {\r\n    await Events.PublishAsync(new NotificationMessage { Message = \"Hello World from a page\" }); \r\n  }\r\n}"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents-2/Components/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n  <header style=\"margin-bottom:10px; background-color: #001f3f;color:white;padding:5px;\">\r\n    <Notification></Notification>\r\n  </header>\r\n  <div>\r\n          @Body\r\n  </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents-2/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents-2/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Component Events</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents-2/Pages/_ViewImports.cshtml",
    "content": "@using ComponentEvents.Components\r\n@namespace ComponentEvents.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents-2/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\n//do not use services.AddEventAggregator \r\nbuilder.Services.AddScoped<EventAggregator.Blazor.IEventAggregator, EventAggregator.Blazor.EventAggregator>();\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseHttpsRedirection();\r\napp.UseStaticFiles();\r\n\r\napp.MapBlazorHub();\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/blazor-ss/ComponentEvents-2/README.md",
    "content": "# Component Events 2\r\n\r\nThe sample is similar to [Component Events](ComponentEvents) except that it uses [Blazor.EventAggregrator](https://github.com/mikoskinen/Blazor.EventAggregator) to handle cross components and pages communication. "
  },
  {
    "path": "projects/blazor-ss/ComponentEvents-2/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/DependencyInjection/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/DependencyInjection/Components/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n@inject TheTransientClock TClock\r\n@inject TheSingletonClock SClock\r\n@inject TheScopedClock SCClock\r\n\r\n<p>Click all buttons repeatedly. Also open new tabs and compares the result side by side.</p>\r\n\r\n<a href=\"/\" target=\"new\">New Window</a>\r\n\r\n<table class=\"table\">\r\n<thead>\r\n    <tr>\r\n        <th>Singleton</th>\r\n        <th>Scoped</th>\r\n        <th>Transient</th>\r\n    </tr>\r\n</thead>\r\n<tbody>\r\n    <tr>\r\n        <td>@SingletonClockOutput</td>\r\n        <td>@ScopedClockOutput</td>\r\n        <td>@TransientClockOutput</td>\r\n    </tr>\r\n    \r\n    <tr>\r\n        <td><button @onclick=\"Singleton\">Call</button></td>\r\n        <td><button @onclick=\"Scoped\">Call</button></td>\r\n        <td><button @onclick=\"Transient\">Call</button></td>\r\n    </tr>\r\n</tbody>\r\n</table>\r\n\r\n@functions\r\n{\r\n    string SingletonClockOutput { get; set; }\r\n\r\n    string ScopedClockOutput { get; set; }\r\n\r\n    string TransientClockOutput { get; set; }\r\n\r\n    void Singleton()\r\n    {\r\n        SingletonClockOutput = SClock.Get();\r\n    }\r\n\r\n    void Scoped()\r\n    {\r\n        ScopedClockOutput = SCClock.Get();\r\n    }\r\n\r\n    void Transient()\r\n    {\r\n        TransientClockOutput = TClock.Get(); \r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ss/DependencyInjection/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using DependencyInjection.Services\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization"
  },
  {
    "path": "projects/blazor-ss/DependencyInjection/DependencyInjection.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/DependencyInjection/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Dependency Injection</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/DependencyInjection/Pages/_ViewImports.cshtml",
    "content": "@using DependencyInjection.Components\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/DependencyInjection/Program.cs",
    "content": "using DependencyInjection.Services;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\nbuilder.Services.AddTransient<TheTransientClock>();\r\nbuilder.Services.AddSingleton<TheSingletonClock>();\r\nbuilder.Services.AddScoped<TheScopedClock>();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseHttpsRedirection();\r\napp.UseStaticFiles();\r\n\r\napp.UseRouting();\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\napp.MapBlazorHub();\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/blazor-ss/DependencyInjection/README.md",
    "content": "# Dependency Injection\r\n\r\nNow that all your requests are going through a single two way websocket, it is hard to figure out what a request means. This will have impact on the usage of the standard built-in dependency injection concept of 'Scoped' vs 'Transient' (Singleton would behave as expected). \r\n\r\nRun the sample on `DependencyInjection` using `dotnet watch`."
  },
  {
    "path": "projects/blazor-ss/DependencyInjection/Services/TheScopedClock.cs",
    "content": "using System;\r\n\r\nnamespace DependencyInjection.Services\r\n{\r\n    public class TheScopedClock\r\n    {\r\n        DateTime _clock = DateTime.UtcNow;\r\n\r\n        public string Get()\r\n        {\r\n            return _clock.ToString();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ss/DependencyInjection/Services/TheSingletonClock.cs",
    "content": "using System;\r\n\r\nnamespace DependencyInjection.Services\r\n{\r\n    public class TheSingletonClock\r\n    {\r\n        DateTime _clock = DateTime.UtcNow;\r\n\r\n        public string Get()\r\n        {\r\n            return _clock.ToString();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ss/DependencyInjection/Services/TheTransientClock.cs",
    "content": "using System;\r\n\r\nnamespace DependencyInjection.Services\r\n{\r\n    public class TheTransientClock\r\n    {\r\n        DateTime _clock = DateTime.UtcNow;\r\n\r\n        public string Get()\r\n        {\r\n            return _clock.ToString();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ss/DependencyInjection/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/HelloWorld/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/HelloWorld/Components/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Hello, world!</h1>\r\n"
  },
  {
    "path": "projects/blazor-ss/HelloWorld/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization"
  },
  {
    "path": "projects/blazor-ss/HelloWorld/HelloWorld.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/HelloWorld/Pages/Index.cshtml",
    "content": "@page\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Hello World</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/HelloWorld/Pages/_ViewImports.cshtml",
    "content": "@using HelloWorld.Components\r\n@namespace HelloWorld.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/HelloWorld/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseHttpsRedirection();\r\napp.UseStaticFiles();\r\n\r\napp.MapBlazorHub();\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\napp.Run();\r\n"
  },
  {
    "path": "projects/blazor-ss/HelloWorld/README.md",
    "content": "# Hello World\r\n\r\nThis is the simplest Razor component app you can create. It will show you clearly the building block of a Razor component application.\r\n\r\nRun the sample on `HelloWorld` using `dotnet watch`."
  },
  {
    "path": "projects/blazor-ss/HelloWorld/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/JsIntegration/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/JsIntegration/Components/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n@inject IJSRuntime JS \r\n\r\n<h1>JS Interop</h1>\r\n\r\n<p>\r\nWe will call alert, confirm and console.log in this sample. Please click the button.\r\n</p>\r\n\r\n\r\n<button @onclick=\"ConfirmAsync\">Confirm</button>\r\n\r\n@code  \r\n{\r\n    protected override async Task OnAfterRenderAsync(bool firstRender)\r\n    {\r\n        await JS.InvokeAsync<object>(\"console.log\", \"hello world console\");\r\n        await JS.InvokeAsync<object>(\"alert\", $\"Hello \");\r\n    }\r\n\r\n    async Task ConfirmAsync(){\r\n        var result = await JS.InvokeAsync<bool>(\"confirm\", \"Do you confirm?\");\r\n        await JS.InvokeAsync<object>(\"alert\", $\"Result {result}\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-ss/JsIntegration/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization"
  },
  {
    "path": "projects/blazor-ss/JsIntegration/JsIntegration.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/JsIntegration/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Js Integration</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n    </div>\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/JsIntegration/Pages/_ViewImports.cshtml",
    "content": "@using JsIntegration.Components\r\n@namespace JsIntegration.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/JsIntegration/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseHttpsRedirection();\r\napp.UseStaticFiles();\r\n\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\napp.MapBlazorHub();\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ss/JsIntegration/README.md",
    "content": "# JS Integration \r\n\r\nThis sample shows how to access JavaScript functions available at `windows` global scope.\r\n"
  },
  {
    "path": "projects/blazor-ss/JsIntegration/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/Layout/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/Layout/Components/Pages/Index.razor",
    "content": "﻿@layout TopLayout\r\n@page \"/\"\r\n\r\n<p>\r\n    This page uses a layout.\r\n</p>\r\n"
  },
  {
    "path": "projects/blazor-ss/Layout/Components/Pages/NestedLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n@layout TopLayout\r\n\r\n<div style=\"padding:10px;border:1px solid red;\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ss/Layout/Components/Pages/NestedLayout2.razor",
    "content": "@inherits LayoutComponentBase\r\n@layout NestedLayout\r\n\r\n<div style=\"padding:10px;border:1px solid orange;margin:10px;\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ss/Layout/Components/Pages/PageUsingNestedLayout.razor",
    "content": "@layout NestedLayout\r\n@page \"/nested\"\r\n\r\n<h1>Page using Nested Layout</h1>"
  },
  {
    "path": "projects/blazor-ss/Layout/Components/Pages/PageUsingNestedLayout2.razor",
    "content": "@layout NestedLayout2\r\n@page \"/nested2\"\r\n\r\n<h1>Page using Nested Layout 2</h1>"
  },
  {
    "path": "projects/blazor-ss/Layout/Components/Pages/TopLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n    <header>\r\n        <h1>@Title</h1>\r\n    </header>\r\n\r\n    <nav style=\"margin-bottom:20px;\">\r\n        <a href=\"/\">Home</a>\r\n        <a href=\"/Nested\">Nested</a>\r\n        <a href=\"/Nested2\">2nd Level Nesting</a>\r\n    </nav>\r\n    \r\n    @Body\r\n\r\n    <footer>\r\n        @((MarkupString)\"&copy;\") by @Credit\r\n    </footer>\r\n</div>\r\n\r\n\r\n@code {\r\n    string Title {get; set;} = \"Top Layout\";\r\n    string Credit {get;set;} = \"Practical ASP.NET Core\";\r\n}"
  },
  {
    "path": "projects/blazor-ss/Layout/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization"
  },
  {
    "path": "projects/blazor-ss/Layout/Layout.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/Layout/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Layout</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/Layout/Pages/_ViewImports.cshtml",
    "content": "@using Layout.Components\r\n@namespace Layout.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/Layout/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseHttpsRedirection();\r\napp.UseStaticFiles();\r\n\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\napp.MapBlazorHub();\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ss/Layout/README.md",
    "content": "# Layouts\r\n\r\nThis sample shows how to use layout and nested layouts (including multiple nested layout) with your Razor Component app.\r\n"
  },
  {
    "path": "projects/blazor-ss/Layout/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/Localization/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#d72008\",\r\n        \"activityBar.background\": \"#d72008\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#023d09\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#d72008\",\r\n        \"statusBar.background\": \"#a61906\",\r\n        \"statusBar.debuggingBackground\": \"#0693a6\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#d72008\",\r\n        \"statusBarItem.remoteBackground\": \"#a61906\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#a61906\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#a6190699\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#a61906\"\r\n}"
  },
  {
    "path": "projects/blazor-ss/Localization/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization/Components/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n@inject IStringLocalizer<Global> Local\r\n\r\n<div class=\"container\">\r\n    <h1>Localization</h1>\r\n\r\n    <table class=\"table\">\r\n        <thead>\r\n            <tr>\r\n                <th>Key</th>\r\n                <th>Message</th>\r\n            </tr>\r\n        </thead>\r\n        <tbody>\r\n            <tr>\r\n                <td>Hello</td>\r\n                <td>@Local[\"Hello\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Goodbye</td>\r\n                <td>@Local[\"Goodbye\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Yes</td>\r\n                <td>@Local[\"Yes\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>No</td>\r\n                <td>@Local[\"No\"]</td>\r\n            </tr>\r\n        </tbody>\r\n    </table>\r\n\r\n    <h2>Switch Language</h2>\r\n    <ul>\r\n        <li><a href=\"/switch?culture=fr&redirecturl=/\">French</a></li>\r\n        <li><a href=\"/switch?culture=en&redirecturl=/\">English</a></li>\r\n    </ul>\r\n</div>\r\n\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization\r\n@using Microsoft.AspNetCore.Localization\r\n@using Microsoft.Extensions.Localization"
  },
  {
    "path": "projects/blazor-ss/Localization/Localization.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization/Localization.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Localization\", \"Localization.csproj\", \"{01F03E5D-1640-4088-ADF7-65205694FB4D}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{01F03E5D-1640-4088-ADF7-65205694FB4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{01F03E5D-1640-4088-ADF7-65205694FB4D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{01F03E5D-1640-4088-ADF7-65205694FB4D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{01F03E5D-1640-4088-ADF7-65205694FB4D}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {1F36ABA1-F373-4C0A-811F-7D9204B7DAC2}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Localization</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization/Pages/Switch.cshtml",
    "content": "@page \"/switch\"\r\n@model SwitchModel\r\n\r\n\r\n@functions {\r\n\r\n  public class SwitchModel : Microsoft.AspNetCore.Mvc.RazorPages.PageModel\r\n  {\r\n    public IActionResult OnGet(string culture, string redirectUrl)\r\n    {\r\n      if (culture != null)\r\n      {\r\n          System.Console.WriteLine(\"Culture \" + culture);\r\n          HttpContext.Response.Cookies.Delete(CookieRequestCultureProvider.DefaultCookieName);\r\n          HttpContext.Response.Cookies.Append(\r\n              CookieRequestCultureProvider.DefaultCookieName,\r\n              CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)));\r\n      }\r\n      return LocalRedirect(redirectUrl);\r\n    }\r\n  }\r\n}"
  },
  {
    "path": "projects/blazor-ss/Localization/Pages/_ViewImports.cshtml",
    "content": "@using Localization.Components\r\n@using Microsoft.Extensions.Localization\r\n@using Microsoft.AspNetCore.Localization\r\n\r\n@namespace Localization.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization/Program.cs",
    "content": "using Microsoft.AspNetCore.Localization;\r\nusing System.Globalization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(opts => { opts.ResourcesPath = \"Resources\"; });\r\n\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\"),\r\n    new CultureInfo(\"en\"),\r\n    new CultureInfo(\"fr\"),\r\n};\r\n\r\nbuilder.Services.Configure<RequestLocalizationOptions>(options =>\r\n{\r\n    options.DefaultRequestCulture = new RequestCulture(\"fr\");\r\n    options.SupportedCultures = supportedCultures;\r\n    options.SupportedUICultures = supportedCultures;\r\n    options.RequestCultureProviders.Clear();\r\n    options.RequestCultureProviders.Add(new CookieRequestCultureProvider());\r\n});\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\n\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\napp.MapBlazorHub();\r\n\r\napp.Run();\r\n\r\n// Leave this class empty. We use it to bind to resources.\r\npublic class Global\r\n{\r\n}\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization/README.md",
    "content": "# Localization\r\n\r\nThis is a sample on how to use localization and perform language switching on Blazor Server by using a global resource."
  },
  {
    "path": "projects/blazor-ss/Localization/Resources/Global.en.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>So long</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Howdy</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Hell Yeah</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>No</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/blazor-ss/Localization/Resources/Global.fr.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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Oui</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Non</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/blazor-ss/Localization/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/Localization-2/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-2/Components/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n@inject IStringLocalizer<Global> Local\r\n\r\n<div class=\"container\">\r\n    <h1>Localization</h1>\r\n\r\n    <table class=\"table\">\r\n        <thead>\r\n            <tr>\r\n                <th>Key</th>\r\n                <th>Message</th>\r\n            </tr>\r\n        </thead>\r\n        <tbody>\r\n            <tr>\r\n                <td>Hello</td>\r\n                <td>@Local[\"Hello\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Goodbye</td>\r\n                <td>@Local[\"Goodbye\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Yes</td>\r\n                <td>@Local[\"Yes\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>No</td>\r\n                <td>@Local[\"No\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>1 Car</td>\r\n                <td>@Local.Plural(1,\"One car\", \"{0} cars\")</td>\r\n            </tr>\r\n            <tr>\r\n                <td>2 Cars</td>\r\n                <td>@Local.Plural(2,\"One car\", \"{0} {1} cars\", \"holly\")</td>\r\n            </tr>\r\n            <tr>\r\n                <td>100 Cars</td>\r\n                <td>@Local.Plural(100,\"One car\", \"{0} {1} cars\", \"shit\")</td>\r\n            </tr>\r\n        </tbody>\r\n    </table>\r\n\r\n    <h2>Switch Language</h2>\r\n    <ul>\r\n        <li><a href=\"/switch?culture=fr&redirecturl=/\">French</a></li>\r\n        <li><a href=\"/switch?culture=en&redirecturl=/\">English</a></li>\r\n    </ul>\r\n</div>\r\n\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-2/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization\r\n@using Microsoft.AspNetCore.Localization\r\n@using Microsoft.Extensions.Localization\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-2/Localization.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Localization.Core\" Version=\"1.8.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-2/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Localization</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-2/Pages/Switch.cshtml",
    "content": "@page \"/switch\"\r\n@model SwitchModel\r\n\r\n@functions {\r\n\r\n  public class SwitchModel : Microsoft.AspNetCore.Mvc.RazorPages.PageModel\r\n  {\r\n    public IActionResult OnGet(string culture, string redirectUrl)\r\n    {\r\n      if (culture != null)\r\n      {\r\n          System.Console.WriteLine(\"Culture \" + culture);\r\n          HttpContext.Response.Cookies.Delete(CookieRequestCultureProvider.DefaultCookieName);\r\n          HttpContext.Response.Cookies.Append(\r\n              CookieRequestCultureProvider.DefaultCookieName,\r\n              CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)));\r\n      }\r\n      return LocalRedirect(redirectUrl);\r\n    }\r\n  }\r\n}"
  },
  {
    "path": "projects/blazor-ss/Localization-2/Pages/_ViewImports.cshtml",
    "content": "@using Localization.Components\r\n@using Microsoft.Extensions.Localization\r\n@using Microsoft.AspNetCore.Localization\r\n\r\n@namespace Localization.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Localization;\r\nusing System.Globalization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddPortableObjectLocalization(options => options.ResourcesPath = \"Resources\");\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\"),\r\n    new CultureInfo(\"en\"),\r\n    new CultureInfo(\"fr\"),\r\n};\r\n\r\nbuilder.Services.Configure<RequestLocalizationOptions>(options =>\r\n{\r\n    options.DefaultRequestCulture = new RequestCulture(\"fr\");\r\n    options.SupportedCultures = supportedCultures;\r\n    options.SupportedUICultures = supportedCultures;\r\n    options.RequestCultureProviders.Clear();\r\n    options.RequestCultureProviders.Add(new CookieRequestCultureProvider());\r\n});\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\n\r\napp.UseRequestLocalization();\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\napp.MapBlazorHub();\r\n\r\napp.Run();\r\n\r\n// Leave this class empty. We use it to bind to resources.\r\npublic class Global\r\n{\r\n\r\n}\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-2/README.md",
    "content": "# Localization using Portable Object (PO) files\r\n\r\nThis is a sample on how to use localization and perform language switching on Blazor Server by using Portable Object (PO) files. \r\n\r\nWe will be using `OrchardCore.Localization.Core` package with version `1.0.0-rc1-13433`.\r\n\r\nFor this example to work, you need to add additional NuGet sources using [this instruction](https://cloudsmith.io/~orchardcore/repos/preview/setup/#formats-nuget)."
  },
  {
    "path": "projects/blazor-ss/Localization-2/Resources/en.po",
    "content": "msgid \"Hello\"\r\nmsgstr \"Howdy\"\r\n\r\nmsgid \"Goodbye\"\r\nmsgstr \"So Long\"\r\n\r\nmsgid \"Yes\"\r\nmsgstr \"Yeah\"\r\n\r\nmsgid \"No\"\r\nmsgstr \"Nope\"\r\n\r\nmsgid \"One car\"\r\nmsgid_plural \"{0} cars\"\r\nmsgstr[0] \"One hotrod\"\r\nmsgstr[1] \"{0} hotrods\"\r\n "
  },
  {
    "path": "projects/blazor-ss/Localization-2/Resources/fr.po",
    "content": "msgid \"Hello\"\r\nmsgstr \"Bonjour\"\r\n\r\nmsgid \"Goodbye\"\r\nmsgstr \"Au Revoir\"\r\n\r\nmsgid \"Yes\"\r\nmsgstr \"Oui\"\r\n\r\nmsgid \"No\"\r\nmsgstr \"No\"\r\n\r\nmsgid \"One car\"\r\nmsgid_plural \"{0} cars\"\r\nmsgstr[0] \"Une voiture\"\r\nmsgstr[1] \"{0} voitures\"\r\n "
  },
  {
    "path": "projects/blazor-ss/Localization-2/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/Localization-3/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#ef999c\",\r\n        \"activityBar.background\": \"#ef999c\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#1a8a16\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#ef999c\",\r\n        \"statusBar.background\": \"#e86d71\",\r\n        \"statusBar.debuggingBackground\": \"#6de8e4\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#e14146\",\r\n        \"statusBarItem.remoteBackground\": \"#e86d71\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#e86d71\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#e86d7199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#e86d71\"\r\n}"
  },
  {
    "path": "projects/blazor-ss/Localization-3/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-3/Components/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n@inject IStringLocalizer<Global> Local\r\n\r\n<div class=\"container\">\r\n    <h1>Localization</h1>\r\n\r\n    <table class=\"table\">\r\n        <thead>\r\n            <tr>\r\n                <th>Key</th>\r\n                <th>Message</th>\r\n            </tr>\r\n        </thead>\r\n        <tbody>\r\n            <tr>\r\n                <td>Hello</td>\r\n                <td>@Local[\"Hello\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Goodbye</td>\r\n                <td>@Local[\"Goodbye\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Yes</td>\r\n                <td>@Local[\"Yes\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>No</td>\r\n                <td>@Local[\"No\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>1 Car</td>\r\n                <td>@Local.Plural(1,\"One car\", \"{0} cars\")</td>\r\n            </tr>\r\n            <tr>\r\n                <td>2 Cars</td>\r\n                <td>@Local.Plural(2,\"One car\", \"{0} {1} cars\", \"holly\")</td>\r\n            </tr>\r\n            <tr>\r\n                <td>100 Cars</td>\r\n                <td>@Local.Plural(100,\"One car\", \"{0} {1} cars\", \"shit\")</td>\r\n            </tr>\r\n        </tbody>\r\n    </table>\r\n\r\n    <h2>Switch Language</h2>\r\n    <ul>\r\n        <li><a href=\"/switch?culture=fr&redirecturl=/\">French</a></li>\r\n        <li><a href=\"/switch?culture=en&redirecturl=/\">English</a></li>\r\n    </ul>\r\n</div>\r\n\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-3/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization\r\n@using Microsoft.AspNetCore.Localization\r\n@using Microsoft.Extensions.Localization\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-3/Localization.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Localization.Core\" Version=\"1.8.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-3/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Localization</title>\r\n    <base href=\"~/\" />\r\n<link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-3/Pages/Switch.cshtml",
    "content": "@page \"/switch\"\r\n@model SwitchModel\r\n\r\n\r\n@functions {\r\n\r\n  public class SwitchModel : Microsoft.AspNetCore.Mvc.RazorPages.PageModel\r\n  {\r\n    public IActionResult OnGet(string culture, string redirectUrl)\r\n    {\r\n      if (culture != null)\r\n      {\r\n          System.Console.WriteLine(\"Culture \" + culture);\r\n          HttpContext.Response.Cookies.Delete(CookieRequestCultureProvider.DefaultCookieName);\r\n          HttpContext.Response.Cookies.Append(\r\n              CookieRequestCultureProvider.DefaultCookieName,\r\n              CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)));\r\n      }\r\n      return LocalRedirect(redirectUrl);\r\n    }\r\n  }\r\n}"
  },
  {
    "path": "projects/blazor-ss/Localization-3/Pages/_ViewImports.cshtml",
    "content": "@using Localization.Components\r\n@using Microsoft.Extensions.Localization\r\n@using Microsoft.AspNetCore.Localization\r\n\r\n@namespace Localization.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-3/Program.cs",
    "content": "using Microsoft.AspNetCore.Localization;\r\nusing System.Globalization;\r\nusing Microsoft.Extensions.Options;\r\nusing OrchardCore.Localization;\r\nusing Microsoft.Extensions.FileProviders;\r\nusing Microsoft.Extensions.Localization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddPortableObjectLocalization(options => options.ResourcesPath = \"Resources\");\r\nbuilder.Services.AddSingleton<ILocalizationFileLocationProvider, MultiplePoFilesLocationProvider>();\r\n\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\"),\r\n    new CultureInfo(\"en\"),\r\n    new CultureInfo(\"fr\"),\r\n};\r\n\r\nbuilder.Services.Configure<RequestLocalizationOptions>(options =>\r\n{\r\n    options.DefaultRequestCulture = new RequestCulture(\"fr\");\r\n    options.SupportedCultures = supportedCultures;\r\n    options.SupportedUICultures = supportedCultures;\r\n    options.RequestCultureProviders.Clear();\r\n    options.RequestCultureProviders.Add(new CookieRequestCultureProvider());\r\n});\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseHttpsRedirection();\r\napp.UseRouting();\r\napp.UseStaticFiles();\r\n\r\napp.UseRequestLocalization();\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\napp.MapBlazorHub();\r\n\r\napp.Run();\r\n\r\n// Leave this class empty. We use it to bind to resources.\r\npublic class Global\r\n{\r\n\r\n}\r\n\r\npublic class MultiplePoFilesLocationProvider : ILocalizationFileLocationProvider\r\n{\r\n    private readonly IFileProvider _fileProvider;\r\n    private readonly string _resourcesContainer;\r\n\r\n    public MultiplePoFilesLocationProvider(IHostEnvironment hostingEnvironment, IOptions<LocalizationOptions> localizationOptions)\r\n    {\r\n        _fileProvider = hostingEnvironment.ContentRootFileProvider;\r\n        _resourcesContainer = localizationOptions.Value.ResourcesPath;\r\n    }\r\n\r\n    public IEnumerable<IFileInfo> GetLocations(string cultureName)\r\n    {\r\n        foreach (var file in Directory.EnumerateFiles(_resourcesContainer).Where(f => f.EndsWith(cultureName + \".po\")))\r\n        {\r\n            yield return _fileProvider.GetFileInfo(file);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ss/Localization-3/README.md",
    "content": "# Better organization of PO files.\r\n\r\nThis is a sample on how to use localization and perform language switching on Blazor Server by using Portable Object (PO) files. \r\nIn this example we implement `ILocalizationFileLocationProvider` that allows us to organize our PO files better.\r\n\r\nWe will be using `OrchardCore.Localization.Core` package with version `1.0.0-rc1-13433`.\r\n\r\nFor this example to work, you need to add additional NuGet sources using [this instruction](https://cloudsmith.io/~orchardcore/repos/preview/setup/#formats-nuget).\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-3/Resources/en.po",
    "content": "msgid \"Hello\"\r\nmsgstr \"Howdy\"\r\n\r\nmsgid \"Goodbye\"\r\nmsgstr \"So Long\"\r\n\r\nmsgid \"Yes\"\r\nmsgstr \"Yeah\"\r\n\r\nmsgid \"No\"\r\nmsgstr \"Nope\""
  },
  {
    "path": "projects/blazor-ss/Localization-3/Resources/fr.po",
    "content": "msgid \"Hello\"\r\nmsgstr \"Bonjour\"\r\n\r\nmsgid \"Goodbye\"\r\nmsgstr \"Au Revoir\"\r\n\r\nmsgid \"Yes\"\r\nmsgstr \"Oui\"\r\n\r\nmsgid \"No\"\r\nmsgstr \"No\"\r\n "
  },
  {
    "path": "projects/blazor-ss/Localization-3/Resources/plural.en.po",
    "content": "msgid \"One car\"\r\nmsgid_plural \"{0} cars\"\r\nmsgstr[0] \"One hotrod\"\r\nmsgstr[1] \"{0} hotrods\"\r\n "
  },
  {
    "path": "projects/blazor-ss/Localization-3/Resources/plural.fr.po",
    "content": "msgid \"One car\"\r\nmsgid_plural \"{0} cars\"\r\nmsgstr[0] \"Une voiture\"\r\nmsgstr[1] \"{0} voitures\"\r\n "
  },
  {
    "path": "projects/blazor-ss/Localization-3/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/Localization-4/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-4/Components/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n@inject IStringLocalizer<Global> Local\r\n\r\n<div class=\"container\">\r\n    <h1>Localization</h1>\r\n\r\n    <table class=\"table\">\r\n        <thead>\r\n            <tr>\r\n                <th>Key</th>\r\n                <th>Message</th>\r\n            </tr>\r\n        </thead>\r\n        <tbody>\r\n            <tr>\r\n                <td>Hello</td>\r\n                <td>@Local[\"Hello\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Goodbye</td>\r\n                <td>@Local[\"Goodbye\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Yes</td>\r\n                <td>@Local[\"Yes\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>No</td>\r\n                <td>@Local[\"No\"]</td>\r\n            </tr>\r\n        </tbody>\r\n    </table>\r\n\r\n    <h2>Switch Language</h2>\r\n    <ul>\r\n        <li><a href=\"/switch?culture=ar&redirecturl=/\">Arabic</a></li>\r\n        <li><a href=\"/switch?culture=en&redirecturl=/\">English</a></li>\r\n    </ul>\r\n</div>\r\n\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-4/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization\r\n@using Microsoft.AspNetCore.Localization\r\n@using Microsoft.Extensions.Localization\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-4/Localization.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Localization.Core\" Version=\"1.8.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-4/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n<!DOCTYPE html>\r\n<html dir=\"@Direction()\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Localization</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body dir=\"@Direction()\">\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n\r\n@functions {\r\n\r\n    string Direction()\r\n    {\r\n         var requestCulture = HttpContext.Features.Get<IRequestCultureFeature>().RequestCulture;\r\n         if (requestCulture.Culture.Name == \"ar\")\r\n            return \"rtl\";\r\n        else\r\n            return \"ltr\";\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ss/Localization-4/Pages/Switch.cshtml",
    "content": "@page \"/switch\"\r\n@model SwitchModel\r\n\r\n\r\n@functions {\r\n\r\n  public class SwitchModel : Microsoft.AspNetCore.Mvc.RazorPages.PageModel\r\n  {\r\n    public IActionResult OnGet(string culture, string redirectUrl)\r\n    {\r\n      if (culture != null)\r\n      {\r\n          System.Console.WriteLine(\"Culture \" + culture);\r\n          HttpContext.Response.Cookies.Delete(CookieRequestCultureProvider.DefaultCookieName);\r\n          HttpContext.Response.Cookies.Append(\r\n              CookieRequestCultureProvider.DefaultCookieName,\r\n              CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)));\r\n      }\r\n      return LocalRedirect(redirectUrl);\r\n    }\r\n  }\r\n}"
  },
  {
    "path": "projects/blazor-ss/Localization-4/Pages/_ViewImports.cshtml",
    "content": "@using Localization.Components\r\n@using Microsoft.Extensions.Localization\r\n@using Microsoft.AspNetCore.Localization\r\n\r\n@namespace Localization.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-4/Program.cs",
    "content": "using Microsoft.AspNetCore.Localization;\r\nusing System.Globalization;\r\nusing Microsoft.Extensions.Options;\r\nusing OrchardCore.Localization;\r\nusing Microsoft.Extensions.FileProviders;\r\nusing Microsoft.Extensions.Localization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddPortableObjectLocalization(options => options.ResourcesPath = \"Resources\");\r\nbuilder.Services.AddSingleton<ILocalizationFileLocationProvider, MultiplePoFilesLocationProvider>();\r\n\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"en\"),\r\n    new CultureInfo(\"ar\"),\r\n};\r\n\r\nbuilder.Services.Configure<RequestLocalizationOptions>(options =>\r\n{\r\n    options.DefaultRequestCulture = new RequestCulture(\"ar\");\r\n    options.SupportedCultures = supportedCultures;\r\n    options.SupportedUICultures = supportedCultures;\r\n    options.RequestCultureProviders.Clear();\r\n    options.RequestCultureProviders.Add(new CookieRequestCultureProvider());\r\n});\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseHttpsRedirection();\r\napp.UseStaticFiles();\r\n\r\napp.UseRequestLocalization();\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\napp.MapBlazorHub();\r\n\r\napp.Run();\r\n\r\npublic class Global\r\n{\r\n\r\n}\r\n\r\npublic class MultiplePoFilesLocationProvider : ILocalizationFileLocationProvider\r\n{\r\n    private readonly IFileProvider _fileProvider;\r\n    private readonly string _resourcesContainer;\r\n\r\n    public MultiplePoFilesLocationProvider(IHostEnvironment hostingEnvironment, IOptions<LocalizationOptions> localizationOptions)\r\n    {\r\n        _fileProvider = hostingEnvironment.ContentRootFileProvider;\r\n        _resourcesContainer = localizationOptions.Value.ResourcesPath;\r\n    }\r\n\r\n    public IEnumerable<IFileInfo> GetLocations(string cultureName)\r\n    {\r\n        foreach (var file in Directory.EnumerateFiles(_resourcesContainer).Where(f => f.EndsWith(cultureName + \".po\")))\r\n        {\r\n            yield return _fileProvider.GetFileInfo(file);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-4/README.md",
    "content": "# LTR and RTL support\r\n\r\nThis sample shows how to implement LTR/RTL support in Blazor Server. This sample uses Portable Object (PO) files for localization. \r\n\r\nWe will be using `OrchardCore.Localization.Core` package with version `1.0.0-rc1-13433`.\r\n\r\nFor this example to work, you need to add additional NuGet sources using [this instruction](https://cloudsmith.io/~orchardcore/repos/preview/setup/#formats-nuget).\r\n"
  },
  {
    "path": "projects/blazor-ss/Localization-4/Resources/ar.po",
    "content": "msgid \"Hello\"\r\nmsgstr \"أهلاً و سهلاً\"\r\n\r\nmsgid \"Goodbye\"\r\nmsgstr \"مع السّلامة\"\r\n\r\nmsgid \"Yes\"\r\nmsgstr \"أيوا\"\r\n\r\nmsgid \"No\"\r\nmsgstr \"لا\"\r\n "
  },
  {
    "path": "projects/blazor-ss/Localization-4/Resources/en.po",
    "content": "msgid \"Hello\"\r\nmsgstr \"Howdy\"\r\n\r\nmsgid \"Goodbye\"\r\nmsgstr \"So Long\"\r\n\r\nmsgid \"Yes\"\r\nmsgstr \"Yeah\"\r\n\r\nmsgid \"No\"\r\nmsgstr \"Nope\""
  },
  {
    "path": "projects/blazor-ss/Localization-4/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/README.md",
    "content": "# Server Side Blazor (16)\r\n\r\nThis is an amazing piece of technology where your interactive web UI is handled via C# and streamed back and forth using web socket via SignalR.\r\n\r\nAll the samples in this section runs on SSL. If you have not gotten your local self-sign SSL in order yet, please read this [instruction](https://www.hanselman.com/blog/DevelopingLocallyWithASPNETCoreUnderHTTPSSSLAndSelfSignedCerts.aspx).\r\n\r\n  * [Hello World](HelloWorld)\r\n\r\n    This is the simplest Razor component app you can create. It will show you clearly the building block of a Razor component application.\r\n\r\n    There are two extra settings for dotnet watch to monitor `*.cshtml` and `*.razor` file changes on two projects to make your development experience better.\r\n\r\n    ``` xml\r\n        <Watch Include=\"**\\*.cshtml\" />\r\n        <Watch Include=\"**\\*.razor\" />\r\n    ```\r\n\r\n  * [Rss Reader](RssReader)\r\n\r\n    This sample demonstrates that you can use normal server side packages with your Razor Component as it is a truly server side system. This sample uses `Microsoft.SyndicationFeed.ReaderWriter` package to parse an external RSS feed and display it.\r\n\r\n  * [Rss Reader - 2](RssReader-2)\r\n    \r\n    This version of RSS Reader uses C# 8.0 `IAsyncEnumerable` to process RSS data as they are available. There is an artificial `await Task.Delay(3000);` added to `RssNews.GetNewsAsync` so you can see visually how the UI changes.\r\n\r\n  * [Js Integration](JsIntegration)\r\n\r\n    This sample shows how to access JavaScript functions available at `windows` global scope.\r\n\r\n  * [Dependency Injection](DependencyInjection)\r\n\r\n    This sample shows you that the 'Transient' and 'Scoped' Dependency Injection method have different practical impact on Razor Component.\r\n\r\n  * [Layout](Layout)\r\n\r\n    This sample shows how to use layout and nested layouts.\r\n\r\n  * [Multiple Starting Points](StartingVariation)\r\n\r\n    In this example we demonstrates how three different Razor Pages endpoints act as starting points for different path of your Server Side Blazor.\r\n\r\n  * [Wall of Counters](WallOfCounters)\r\n\r\n    In this sample we will use System.Timers.Timer to perform multiple counters. \r\n  \r\n  * [ChatR](ChatR)\r\n\r\n    In this sample we will host a SignalR Hub in the same host as the Blazor Server Side\r\n\r\n  * [Component Events](ComponentEvents)\r\n\r\n    In this sample we will facilitate communication between components and pages using a Scoped lifetime AppState object. \r\n \r\n  * [Component Events 2](ComponentEvents-2)\r\n\r\n    This sample is similar to [Component Events](ComponentEvents) except that we will facilitate communication between components and pages using [Blazor.EventAggregrator](https://github.com/mikoskinen/Blazor.EventAggregator)  library.\r\n\r\n  * [Localization](Localization)\r\n\r\n    This sample shows how to use localization and perform language switching in Blazor server using a global resource.\r\n\r\n  * [Localization using PO files](Localization-2)\r\n\r\n    This sample shows how to use localization and perform language switching in Blazor server using Portable Object(PO) files.\r\n\r\n  * [Localization using PO with multiple files](Localization-3)\r\n\r\n    This sample is similar to the previous one above except this time we allow translation files to be split into multiple files per language. This allows better organization of language translation.\r\n\r\n  * [Localization RTL/LTR support](Localization-4)\r\n\r\n    This sample shows how to implement LTR/RTL support in Blazor.\r\n\r\n  * [RenderTreeBuilder](RenderTreeBuilder)\r\n\r\n    `RenderTreeBuilder` shows a Blazor (server) component implemented without Razor syntax.\r\n\r\n\r\ndotnet8\r\n"
  },
  {
    "path": "projects/blazor-ss/RenderTreeBuilder/ListNames.cs",
    "content": "\r\nusing Microsoft.AspNetCore.Components;\r\n\r\nclass Separator : ComponentBase\r\n{\r\n    protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder)\r\n    {\r\n        builder.OpenElement(0, \"hr\");\r\n        builder.CloseElement(); // hr\r\n    }\r\n}\r\n\r\nclass ListNames : ComponentBase\r\n{\r\n    protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder)\r\n    {\r\n        // see the following:\r\n        // https://docs.microsoft.com/en-us/aspnet/core/blazor/advanced-scenarios\r\n\r\n        builder.OpenElement(0, \"ul\");\r\n        var names = new string[]\r\n        {\r\n            \"Bruce\",\r\n            \"Clint\",\r\n            \"Donald\",\r\n            \"Natasha\",\r\n            \"Steve\",\r\n            \"Tony\",\r\n        };\r\n        foreach (var x in names)\r\n        {\r\n            builder.OpenElement(1, \"li\");\r\n            builder.OpenElement(2, \"p\");\r\n            builder.AddContent(3, x);\r\n            builder.CloseElement(); // p\r\n            builder.CloseElement(); // li\r\n        }\r\n        builder.CloseElement(); // ul\r\n\r\n        // shows an example of a nested component\r\n        builder.OpenComponent<Separator>(4);\r\n        builder.CloseComponent();\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/blazor-ss/RenderTreeBuilder/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc.Rendering;\r\nusing Microsoft.AspNetCore.Mvc.ViewFeatures;\r\nusing Microsoft.AspNetCore.Html;\r\nusing System.Text.Encodings.Web;\r\n\r\n// converts an IHtmlContent to a string\r\nstatic string GetString(IHtmlContent htmlContent)\r\n{\r\n    using (var writer = new StringWriter())\r\n    {\r\n        htmlContent.WriteTo(writer, HtmlEncoder.Default);\r\n        return writer.ToString();\r\n    }\r\n}\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddMvc(); // for IHtmlHelper\r\nbuilder.Services.AddServerSideBlazor();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\napp.MapBlazorHub();\r\n\r\napp.MapGet(\"/\",\r\n    async (HttpContext ctx) =>\r\n    {\r\n        ctx.Response.ContentType = \"text/html\";\r\n\r\n        var htmlHelper = ctx.RequestServices.GetRequiredService<IHtmlHelper>();\r\n        ((IViewContextAware)htmlHelper).Contextualize(new ViewContext { HttpContext = ctx });\r\n\r\n                // all of this could be done with a Razor Page,\r\n                // but this sample uses C# instead\r\n\r\n                await ctx.Response.WriteAsync(\"<html lang=\\\"en\\\">\");\r\n\r\n        await ctx.Response.WriteAsync(\"<head>\");\r\n        await ctx.Response.WriteAsync(\"<meta charset=\\\"utf-8\\\" />\");\r\n        await ctx.Response.WriteAsync(\"<meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\" />\");\r\n        await ctx.Response.WriteAsync(\"<base href=\\\"/\\\" />\");\r\n        await ctx.Response.WriteAsync(\"</head>\");\r\n\r\n        await ctx.Response.WriteAsync(\"<body>\");\r\n\r\n        await ctx.Response.WriteAsync(\"<div>\");\r\n        {\r\n            var htmlContent = await htmlHelper.RenderComponentAsync<ListNames>(RenderMode.Server);\r\n            await ctx.Response.WriteAsync(GetString(htmlContent));\r\n        }\r\n        await ctx.Response.WriteAsync(\"</div>\");\r\n\r\n        await ctx.Response.WriteAsync(\"<script src=\\\"_framework/blazor.server.js\\\"></script>\");\r\n\r\n        await ctx.Response.WriteAsync(\"</body>\");\r\n        await ctx.Response.WriteAsync(\"</html>\");\r\n    }\r\n    );\r\n\r\napp.Run();\r\n\r\n"
  },
  {
    "path": "projects/blazor-ss/RenderTreeBuilder/README.md",
    "content": "# RenderTreeBuilder\r\n\r\n`RenderTreeBuilder` shows a Blazor (server) component implemented without Razor syntax, inheriting from the abstract class `ComponentBase` and implementing the `BuildRenderTree` method. \r\n\r\nContribution by [ericsink](https://github.com/ericsink).\r\n\r\n"
  },
  {
    "path": "projects/blazor-ss/RenderTreeBuilder/RenderTreeBuilder.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/RenderTreeBuilder/appsettings.Development.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft.AspNetCore\": \"Warning\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-ss/RenderTreeBuilder/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft.AspNetCore\": \"Warning\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/blazor-ss/RssReader/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/RssReader/Components/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<RssBox></RssBox>\r\n\r\n"
  },
  {
    "path": "projects/blazor-ss/RssReader/Components/Pages/RssBox.razor",
    "content": "@using Microsoft.SyndicationFeed\r\n@inject RssNews rss\r\n\r\n<h1>RSS News </h1>\r\n\r\n<ul>\r\n    @foreach(var n in News)\r\n    {\r\n        <li>@((MarkupString)n.Description)</li>\r\n    }\r\n</ul>\r\n\r\n@code \r\n{\r\n    List<SyndicationItem> News {get; set;}\r\n\r\n    protected override async Task OnInitializedAsync()\r\n    {\r\n        News = await rss.GetNewsAsync();\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ss/RssReader/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using RssReader.Services\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization"
  },
  {
    "path": "projects/blazor-ss/RssReader/Pages/Index.cshtml",
    "content": "@page\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>RSS Reader</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/RssReader/Pages/_ViewImports.cshtml",
    "content": "@using RssReader.Components\r\n@namespace RssReader.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/RssReader/Program.cs",
    "content": "using RssReader.Services;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\nbuilder.Services.AddSingleton<RssNews>();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseHttpsRedirection();\r\napp.UseStaticFiles();\r\n\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\napp.MapBlazorHub();\r\n\r\napp.Run();"
  },
  {
    "path": "projects/blazor-ss/RssReader/README.md",
    "content": "# Rss Reader\r\n\r\nThis sample shows that Razor Component is truly a server side system. You will see how we fetch RSS data on the server and deliver it to your browser. It uses `Microsoft.SyndicationFeed.ReaderWriter` package to parse an external RSS XML document. \r\n\r\nThis sample also shows the use of `MarkupString` to show unescaped HTML string.\r\n\r\n```\r\n<ul>\r\n    @foreach(var n in News)\r\n    {\r\n        <li>@((MarkupString)n.Description)</li>\r\n    }\r\n</ul>\r\n```\r\n"
  },
  {
    "path": "projects/blazor-ss/RssReader/RssReader.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.SyndicationFeed.ReaderWriter\" Version=\"1.0.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/RssReader/Services/RssNews.cs",
    "content": "using Microsoft.SyndicationFeed;\r\nusing Microsoft.SyndicationFeed.Rss;\r\nusing System.Xml;\r\nnamespace RssReader.Services;\r\n\r\npublic class RssNews\r\n{\r\n    public async Task<List<SyndicationItem>> GetNewsAsync()\r\n    {\r\n        var items = new List<SyndicationItem>();\r\n\r\n        using (var xmlReader = XmlReader.Create(\"http://scripting.com/rss.xml\", new XmlReaderSettings { Async = true }))\r\n        {\r\n            var feedReader = new RssFeedReader(xmlReader);\r\n\r\n            while (await feedReader.Read())\r\n            {\r\n                switch (feedReader.ElementType)\r\n                {\r\n                    case SyndicationElementType.Item:\r\n                        ISyndicationItem item = await feedReader.ReadItem();\r\n                        items.Add(new SyndicationItem(item));\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n\r\n        return items;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-ss/RssReader/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/RssReader-2/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/RssReader-2/Components/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<RssBox></RssBox>\r\n\r\n"
  },
  {
    "path": "projects/blazor-ss/RssReader-2/Components/Pages/RssBox.razor",
    "content": "@using Microsoft.SyndicationFeed\r\n@inject RssNews rss\r\n\r\n<h1>RSS News </h1>\r\n\r\n<ul>\r\n    @foreach(var n in News)\r\n    {\r\n        <li>@((MarkupString)n.Description)</li>\r\n    }\r\n</ul>\r\n\r\n@code \r\n{\r\n    List<SyndicationItem> News {get; set;} = new List<SyndicationItem>();\r\n\r\n    protected override async Task OnInitializedAsync()\r\n    {\r\n        var feeds = new string[]\r\n        {\r\n            \"http://scripting.com/rss.xml\", \r\n            \"https://hnrss.org/jobs\",\r\n            \"https://hnrss.org/newest\",\r\n            \"http://feeds.bbci.co.uk/news/rss.xml\",\r\n            \"http://feeds.bbci.co.uk/news/world/rss.xml\",\r\n            \"http://feeds.bbci.co.uk/news/uk/rss.xml\",\r\n            \"http://feeds.bbci.co.uk/news/business/rss.xml\",\r\n            \"http://feeds.bbci.co.uk/news/politics/rss.xml\",\r\n            \"http://feeds.bbci.co.uk/news/health/rss.xml\",\r\n            \"http://feeds.bbci.co.uk/news/education/rss.xml\",\r\n            \"http://feeds.bbci.co.uk/news/entertainment_and_arts/rss.xml\"\r\n        };\r\n\r\n        await foreach(var news in rss.GetMultipleNewsAsync(feeds))\r\n        {\r\n            foreach(var n in news)\r\n            {\r\n                News.Insert(0, n);\r\n            }\r\n            this.StateHasChanged();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ss/RssReader-2/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using RssReader.Services\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization"
  },
  {
    "path": "projects/blazor-ss/RssReader-2/Pages/Index.cshtml",
    "content": "@page \r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>RSS Reader</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/RssReader-2/Pages/_ViewImports.cshtml",
    "content": "@using RssReader.Components\r\n@namespace RssReader.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/RssReader-2/Program.cs",
    "content": "using RssReader.Services;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\nbuilder.Services.AddSingleton<RssNews>();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseHttpsRedirection();\r\napp.UseStaticFiles();\r\n\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\napp.MapBlazorHub();\r\n\r\napp.Run();"
  },
  {
    "path": "projects/blazor-ss/RssReader-2/README.md",
    "content": "# Rss Reader \r\n\r\nThis version of RSS Reader uses C# 8.0 `IAsyncEnumerable` to process RSS data as they are available. There is an artificial `await Task.Delay(3000);` added to `RssNews.GetNewsAsync` so you can see visually how the UI changes."
  },
  {
    "path": "projects/blazor-ss/RssReader-2/RssReader.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.SyndicationFeed.ReaderWriter\" Version=\"1.0.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/RssReader-2/Services/RssNews.cs",
    "content": "using Microsoft.SyndicationFeed;\r\nusing Microsoft.SyndicationFeed.Rss;\r\nusing System.Xml;\r\nnamespace RssReader.Services\r\n{\r\n    public class RssNews\r\n    {\r\n        public async IAsyncEnumerable<List<SyndicationItem>> GetMultipleNewsAsync(params string[] news)\r\n        {\r\n            foreach (var x in news)\r\n            {\r\n                yield return await GetNewsAsync(x);\r\n            }\r\n        }\r\n\r\n        public async Task<List<SyndicationItem>> GetNewsAsync(string url)\r\n        {\r\n            var items = new List<SyndicationItem>();\r\n\r\n            using (var xmlReader = XmlReader.Create(url, new XmlReaderSettings { Async = true }))\r\n            {\r\n                var feedReader = new RssFeedReader(xmlReader);\r\n\r\n                while (await feedReader.Read())\r\n                {\r\n                    switch (feedReader.ElementType)\r\n                    {\r\n                        case SyndicationElementType.Item:\r\n                            ISyndicationItem item = await feedReader.ReadItem();\r\n                            items.Add(new SyndicationItem(item));\r\n                            break;\r\n                        default:\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            await Task.Delay(5000);\r\n\r\n            return items;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ss/RssReader-2/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/StartingVariation/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/Components/Pages/About.razor",
    "content": "﻿@page \"/admin/blazor/about\"\r\n\r\n<div class=\"container\">\r\n    <h1>Blazor: About Page</h1>\r\n\r\n    This page is accessible directly from / because of the following code at startup.cs\r\n\r\n    <blockquote>\r\n        endpoints.MapFallbackToPage(\"/Admin/Blazor\");\r\n    </blockquote>\r\n</div>"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/Components/Pages/Index.razor",
    "content": "﻿@page \"/admin/blazor\"\r\n\r\n<div class=\"container\">\r\n    <h1>Blazor: Hello, world from different starting point</h1>\r\n\r\n    Go to <a href=\"/admin/blazor/about\">about</a>\r\n</div>"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/Components/Pages/Manage.razor",
    "content": "﻿@page \"/manage\"\r\n\r\n<div class=\"container\">\r\n    <h1>Blazor: Manage Page</h1>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/Components/Pages/Secure/Index.razor",
    "content": "﻿@page \"/secure\"\r\n\r\n<div class=\"container\">\r\n    <h1>Blazor: Secure Starting Point</h1>\r\n\r\n    <a href=\"/secure/screen\">Go to screen</a>\r\n</div>\r\n\r\n"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/Components/Pages/Secure/Screen.razor",
    "content": "﻿@page \"/secure/screen\"\r\n\r\n<div class=\"container\">\r\n    <h1>Blazor: Screen Screen</h1>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/Pages/Admin/Blazor.cshtml",
    "content": "@page \"/admin/blazor\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Multiple Entries</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/Pages/Index.cshtml",
    "content": "@page\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Hello World</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        <h1>Blazor with multiple entry points</h1>\r\n        <p>The page you are seeing is a normal page. The following pages are powered by Blazor</p>\r\n        <ul>\r\n            <li><a href=\"/Admin/Blazor\">/Admin/Blazor</a></li>   \r\n            <li><a href=\"/Admin/Blazor/About\">/Admin/Blazor/About</a></li>\r\n            <li><a href=\"/Manage\">/Manage</a></li>\r\n            <li><a href=\"/Secure\">/Secure</a></li>\r\n        </ul>\r\n    </div>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/Pages/Manage/Index.cshtml",
    "content": "@page \"/manage\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Multiple Entries</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/Pages/Secure.cshtml",
    "content": "@page \"/secure\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Multiple Entries</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"css/site.css\" rel=\"stylesheet\" />\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/Pages/_ViewImports.cshtml",
    "content": "@using StartingVariation.Components\r\n@namespace StartingVariation.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.Extensions.Hosting;\r\nusing Microsoft.Extensions.DependencyInjection;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Admin/Blazor\");\r\napp.MapBlazorHub();\r\n\r\napp.Run();"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/README.md",
    "content": "# Starting Variations\r\n\r\nIn this example we demonstrates how three different Razor Pages endpoints act as starting points for different path of your Server Side Blazor. \r\n"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/StartingVariation.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/StartingVariation/wwwroot/css/site.css",
    "content": ""
  },
  {
    "path": "projects/blazor-ss/WallOfCounters/Components/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-ss/WallOfCounters/Components/Pages/Index.razor",
    "content": "﻿@page \"/\" \r\n@using System.Timers\r\n@implements IDisposable\r\n\r\n<div class=\"container\"> \r\n    <h1>Wall Of Counters</h1>\r\n\r\n    <div class=\"row\">\r\n        <div class=\"col-md-4 @ClassWall\">\r\n            @Counter1    \r\n        </div>\r\n\r\n        <div class=\"col-md-4 @ClassWall\">\r\n            @Counter2\r\n        </div>\r\n\r\n        <div class=\"col-md-4 @ClassWall\">\r\n            @Counter3 \r\n        </div>\r\n    </div>\r\n\r\n    <div class=\"row\">\r\n        <div class=\"col-md-4 @ClassWall\">\r\n            @Counter4\r\n        </div>\r\n\r\n        <div class=\"col-md-4 @ClassWall\">\r\n            @Counter5\r\n        </div>\r\n\r\n        <div class=\"col-md-4 @ClassWall\">\r\n            @Counter6\r\n        </div>\r\n    </div>\r\n\r\n    <div class=\"row\">\r\n        <div class=\"col-md-4 @ClassWall\">\r\n            @Counter7\r\n        </div>\r\n\r\n        <div class=\"col-md-4 @ClassWall\">\r\n            @Counter8\r\n        </div>\r\n\r\n        <div class=\"col-md-4 @ClassWall\">\r\n            @Counter9\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n@code {\r\n    string ClassWall { get; set; } = \"wall\";\r\n\r\n    int Counter1 { get; set; }\r\n    int Counter2 { get; set; }\r\n    int Counter3 { get; set; }\r\n    int Counter4 { get; set; }\r\n    int Counter5 { get; set; }\r\n    int Counter6 { get; set; }\r\n    int Counter7 { get; set; }\r\n    int Counter8 { get; set; }\r\n    int Counter9 { get; set; }\r\n\r\n    Timer _timer1;\r\n    Timer _timer2;\r\n    Timer _timer3;\r\n    Timer _timer4;\r\n    Timer _timer5;\r\n    Timer _timer6;\r\n    Timer _timer7;\r\n    Timer _timer8;\r\n    Timer _timer9;\r\n\r\n    const short TimerTick1InSecond = 1;\r\n    const short TimerTick2InSecond = 4;\r\n    const short TimerTick3InSecond = 3;\r\n    const short TimerTick4InSecond = 7;\r\n    const short TimerTick5InSecond = 9;\r\n    const short TimerTick6InSecond = 5;\r\n    const short TimerTick7InSecond = 2;\r\n    const short TimerTick8InSecond = 6;\r\n    const short TimerTick9InSecond = 8;\r\n\r\n\r\n    Timer CreateAndStartTimer(short intervalModifier, ElapsedEventHandler handler)\r\n    {\r\n        var t = new Timer(1000 * intervalModifier);\r\n        t.Elapsed += handler;\r\n        t.Enabled = true;\r\n        t.Start();\r\n\r\n        return t;\r\n    }\r\n\r\n    protected override void OnInitialized()\r\n    {\r\n        _timer1 = CreateAndStartTimer(TimerTick1InSecond, (a, b) =>\r\n        {\r\n            InvokeAsync(() =>\r\n            {\r\n                Counter1++;\r\n                StateHasChanged();\r\n            });\r\n        });\r\n\r\n        _timer2 = CreateAndStartTimer(TimerTick2InSecond, (a, b) =>\r\n        {\r\n            InvokeAsync(() =>\r\n            {\r\n                Counter2++;\r\n                StateHasChanged();\r\n            });\r\n        });\r\n\r\n        _timer3 = CreateAndStartTimer(TimerTick3InSecond, (a, b) =>\r\n        {\r\n            InvokeAsync(() =>\r\n            {\r\n                Counter3++;\r\n                StateHasChanged();\r\n            });\r\n        });\r\n\r\n        _timer4 = CreateAndStartTimer(TimerTick4InSecond, (a, b) =>\r\n        {\r\n            InvokeAsync(() =>\r\n            {\r\n                Counter4++;\r\n                StateHasChanged();\r\n            });\r\n        });\r\n\r\n        _timer5 = CreateAndStartTimer(TimerTick5InSecond, (a, b) =>\r\n        {\r\n            InvokeAsync(() =>\r\n            {\r\n                Counter5++;\r\n                StateHasChanged();\r\n            });\r\n        });\r\n\r\n        _timer6 = CreateAndStartTimer(TimerTick6InSecond, (a, b) =>\r\n        {\r\n            InvokeAsync(() =>\r\n            {\r\n                Counter6++;\r\n                StateHasChanged();\r\n            });\r\n        });\r\n\r\n        _timer7 = CreateAndStartTimer(TimerTick7InSecond, (a, b) =>\r\n        {\r\n            InvokeAsync(() =>\r\n            {\r\n                Counter7++;\r\n                StateHasChanged();\r\n            });\r\n        });\r\n\r\n        _timer8 = CreateAndStartTimer(TimerTick8InSecond, (a, b) =>\r\n        {\r\n            InvokeAsync(() =>\r\n            {\r\n                Counter8++;\r\n                StateHasChanged();\r\n            });\r\n        });\r\n\r\n        _timer9 = CreateAndStartTimer(TimerTick9InSecond, (a, b) =>\r\n        {\r\n            InvokeAsync(() =>\r\n            {\r\n                Counter9++;\r\n                StateHasChanged();\r\n            });\r\n        });\r\n\r\n        base.OnInitialized();\r\n    }\r\n\r\n    public void Dispose()\r\n    {\r\n        _timer1.Dispose();\r\n        _timer2.Dispose();\r\n        _timer3.Dispose();\r\n\r\n        _timer4.Dispose();\r\n        _timer5.Dispose();\r\n        _timer6.Dispose();\r\n\r\n        _timer7.Dispose();\r\n        _timer8.Dispose();\r\n        _timer9.Dispose();\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-ss/WallOfCounters/Components/Pages/Index.razor.css",
    "content": ".wall {\r\n    font-size: 80px;\r\n}"
  },
  {
    "path": "projects/blazor-ss/WallOfCounters/Components/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization"
  },
  {
    "path": "projects/blazor-ss/WallOfCounters/Pages/Index.cshtml",
    "content": "@page\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>Wall of Counters</title>\r\n    <base href=\"~/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <link href=\"WallOfCounters.styles.css\" rel=\"stylesheet\">\r\n</head>\r\n<body>\r\n    <app>@(await Html.RenderComponentAsync<App>(RenderMode.ServerPrerendered))</app>\r\n\r\n    <script src=\"_framework/blazor.server.js\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ss/WallOfCounters/Pages/_ViewImports.cshtml",
    "content": "@using WallOfCounters.Components\r\n@namespace WallOfCounters.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/blazor-ss/WallOfCounters/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddServerSideBlazor();\r\n\r\nvar app = builder.Build();\r\napp.UseHttpsRedirection();\r\napp.UseStaticFiles();\r\n\r\napp.MapRazorPages();\r\napp.MapFallbackToPage(\"/Index\");\r\napp.MapBlazorHub();\r\n\r\napp.Run();"
  },
  {
    "path": "projects/blazor-ss/WallOfCounters/README.md",
    "content": "# Wall of Counters\r\n\r\nThis is a sample on how to use System.Timers.Timers with Blazor and how to update the UI from another thread.\r\n\r\nThis sample also uses [BlazorStyle](https://github.com/chanan/BlazorStyled), a component that allows to use scoped CSS inside a Blazer component (similar to Vue Single File Component)."
  },
  {
    "path": "projects/blazor-ss/WallOfCounters/WallOfCounters.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <ScopedCssEnabled>true</ScopedCssEnabled>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ss/build.bat",
    "content": "dotnet build ChatR\r\ndotnet build ComponentEvents\r\ndotnet build ComponentEvents-2\r\ndotnet build DependencyInjection\r\ndotnet build HelloWorld\r\ndotnet build JsIntegration\r\ndotnet build Layout\r\ndotnet build Localization\r\ndotnet build Localization-2\r\ndotnet build Localization-3\r\ndotnet build Localization-4\r\ndotnet build RenderTreeBuilder\r\ndotnet build RssReader\r\ndotnet build RssReader-2\r\ndotnet build StartingVariation\r\ndotnet build WallOfCounters"
  },
  {
    "path": "projects/blazor-ss/build.sh",
    "content": "#!/bin/bash\ndotnet build ChatR\ndotnet build ComponentEvents\ndotnet build ComponentEvents-2\ndotnet build DependencyInjection\ndotnet build HelloWorld\ndotnet build JsIntegration\ndotnet build Layout\ndotnet build Localization\ndotnet build Localization-2\ndotnet build Localization-3\ndotnet build Localization-4\ndotnet build RenderTreeBuilder\ndotnet build RssReader\ndotnet build RssReader-2\ndotnet build StartingVariation\ndotnet build WallOfCounters\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorComponentEight.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/README.md",
    "content": "# Razor Component multi render\r\n\r\nThis sample shows the ability for Blazor to host components with different rendering mode in a single Razor Component Page.\r\n\r\nThe Razor Component Page is server side render. It hosts \"number\" component with with Streaming rendering and hosts \"interactive\" component backed by Blazor Web Assembly.\r\n\r\nThe Web Assembly components **need to be hosted in a separate project**. "
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/RazorComponentEight/App.razor",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>Blazor Multi Render</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    <HeadOutlet />\r\n</head>\r\n<body>\r\n    <Router AppAssembly=\"@typeof(App).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n            <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\r\n        </Found>\r\n    </Router>\r\n    <script src=\"_framework/blazor.web.js\" suppress-error=\"BL9992\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/RazorComponentEight/Pages/Index.razor",
    "content": "@page \"/\"\r\n\r\n<h1>Blazor Multi Render</h1>\r\n\r\n@_message\r\n\r\n<div class=\"row\">\r\n    <div class=\"col-md-4\">\r\n        <p class=\"mb-3\">\r\n            This button will not work because this Razor component is statically rendered\r\n        </p>\r\n        <button type=\"button\" class=\"btn btn-primary\" @onclick=\"ShowMessage\">Show Message</button>\r\n    </div>\r\n    <div class=\"col-md-4\">\r\n        <Numbers />\r\n    </div>\r\n    <div class=\"col-md-4\">\r\n        <p class=\"mb-3\">\r\n            This button will work because this Razor component is powered by Blazor WASM\r\n        </p>\r\n               <Wasm.Interactive @rendermode=\"@RenderMode.InteractiveWebAssembly\" />\r\n    </div>\r\n</div>\r\n\r\n@code {\r\n    string _message = string.Empty;\r\n\r\n    void ShowMessage()\r\n    {\r\n        _message = \"This won't work\";\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/RazorComponentEight/Pages/Numbers.razor",
    "content": "@attribute [StreamRendering(true)]\r\n\r\n@if (_numbers.Count == 0)\r\n{\r\n    <p>Loading numbers (wait for 6 seconds) ...</p>\r\n}\r\nelse\r\n{\r\n    <ul>\r\n        @foreach(var i in _numbers)\r\n        {\r\n            <li>@i</li>\r\n        }\r\n    </ul>\r\n}\r\n\r\n@code \r\n{\r\n    List<int> _numbers = [];\r\n\r\n    protected override async Task OnInitializedAsync()\r\n    {\r\n        await Task.Delay(6_000); //six seconds\r\n\r\n        _numbers = Enumerable.Range(0,100).ToList();\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/RazorComponentEight/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\n\r\n// Add services to the container.\r\nbuilder.Services.AddRazorComponents()\r\n    .AddInteractiveWebAssemblyComponents();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\n\r\n// Configure the HTTP request pipeline.\r\nif (!app.Environment.IsDevelopment())\r\n{\r\n    app.UseExceptionHandler(\"/Error\");\r\n    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.\r\n    app.UseHsts();\r\n}\r\n\r\napp.UseHttpsRedirection();\r\n\r\napp.UseStaticFiles();\r\napp.UseAntiforgery();\r\n\r\napp.MapRazorComponents<RazorComponentEight.App>()\r\n    .AddInteractiveWebAssemblyRenderMode();\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/RazorComponentEight/RazorComponentEight.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <RazorLangVersion>8.0</RazorLangVersion>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Wasm\\Wasm.csproj\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.Server\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/RazorComponentEight/RazorComponentEight.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorComponentEight\", \"RazorComponentEight.csproj\", \"{8002ACBE-D379-4A05-832F-71D611C47D1B}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{8002ACBE-D379-4A05-832F-71D611C47D1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{8002ACBE-D379-4A05-832F-71D611C47D1B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{8002ACBE-D379-4A05-832F-71D611C47D1B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{8002ACBE-D379-4A05-832F-71D611C47D1B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {D7C03BAA-0B56-45C0-8F59-104257AD3A57}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/RazorComponentEight/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/RazorComponentEight/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.JSInterop\r\n\r\n@using RazorComponentEight\r\n@using RazorComponentEight.Shared\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/RazorComponentEight.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.001.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorComponentEight\", \"RazorComponentEight\\RazorComponentEight.csproj\", \"{B1B422F6-4C9F-4CA6-948A-44911FBE65F5}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Wasm\", \"Wasm\\Wasm.csproj\", \"{92943B7F-EB94-480D-8CC4-E78F21A00004}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{B1B422F6-4C9F-4CA6-948A-44911FBE65F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B1B422F6-4C9F-4CA6-948A-44911FBE65F5}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B1B422F6-4C9F-4CA6-948A-44911FBE65F5}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B1B422F6-4C9F-4CA6-948A-44911FBE65F5}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{92943B7F-EB94-480D-8CC4-E78F21A00004}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{92943B7F-EB94-480D-8CC4-E78F21A00004}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{92943B7F-EB94-480D-8CC4-E78F21A00004}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{92943B7F-EB94-480D-8CC4-E78F21A00004}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {56454063-2CFF-4790-81EE-254441A78685}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/Wasm/Counter.razor",
    "content": "<button type=\"button\" @onclick=\"IncrementCount\">Current count: @_currentCount</button>\r\n\r\n@code {\r\n    int _currentCount = 0;\r\n\r\n    [Parameter]\r\n    public int IncrementAmount { get; set; } = 1;\r\n\r\n    void IncrementCount()\r\n    {\r\n        _currentCount += IncrementAmount;\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/Wasm/Interactive.razor",
    "content": "@_message\r\n\r\n<button type=\"button\" class=\"btn btn-primary\" @onclick=\"ShowMessage\">Show Message</button>\r\n\r\n@code {\r\n    string _message = string.Empty;\r\n\r\n    void ShowMessage()\r\n    {\r\n        _message = \"Current Time UTC \" + DateTime.UtcNow;\r\n    }\r\n}  \r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/Wasm/Program.cs",
    "content": "using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nawait builder.Build().RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/Wasm/Wasm.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEight/Wasm/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.WebAssembly.Http\r\n@using Microsoft.JSInterop\r\n@using Wasm\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEleven/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorComponentEleven.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEleven/App.razor",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>Blazor Multi Render</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    <HeadOutlet />\r\n</head>\r\n<body>\r\n    <Router AppAssembly=\"@typeof(App).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n            <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\r\n        </Found>\r\n    </Router>\r\n\r\n    <script src=\"_framework/blazor.web.js\" suppress-error=\"BL9992\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEleven/Pages/Index.razor",
    "content": "@page \"/\"\r\n@attribute [StreamRendering(true)]\r\n\r\n@if (_numbers is null)\r\n{\r\n    <p>Loading numbers (wait for 3 seconds) ...</p>\r\n}\r\nelse\r\n{\r\n    <ul>\r\n        @foreach(var i in _numbers)\r\n        {\r\n            <li>@i</li>\r\n        }\r\n    </ul>\r\n}\r\n\r\n@code \r\n{\r\n    List<int> _numbers;\r\n\r\n    protected override async Task OnInitializedAsync()\r\n    {\r\n        await Task.Delay(3_000); //three seconds\r\n        _numbers = Enumerable.Range(0,100).ToList();\r\n        this.StateHasChanged();\r\n        \r\n        await Task.Delay(3_000); //three seconds\r\n        _numbers = Enumerable.Range(101,100).ToList();\r\n        this.StateHasChanged();\r\n\r\n        await Task.Delay(3_000); //three seconds\r\n        _numbers = Enumerable.Range(201,100).ToList();\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEleven/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\napp.UseAntiforgery();\r\napp.MapRazorComponents<RazorComponentEleven.App>();\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEleven/README.md",
    "content": "# Razor Component Streaming Rendering\r\n\r\nThis sample shows how to update the UI multiple times using `StateHasChanged();` while in streaming rendering mode.\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEleven/RazorComponentEleven.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEleven/RazorComponentEleven.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorComponentEleven\", \"RazorComponentEleven.csproj\", \"{A262DC8B-910A-4E2F-9511-3DB0025309BD}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{A262DC8B-910A-4E2F-9511-3DB0025309BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A262DC8B-910A-4E2F-9511-3DB0025309BD}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A262DC8B-910A-4E2F-9511-3DB0025309BD}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A262DC8B-910A-4E2F-9511-3DB0025309BD}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {D97D28B7-F7EE-4D7E-83D0-6B975F6A316D}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEleven/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentEleven/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.JSInterop\r\n\r\n@using RazorComponentEleven\r\n@using RazorComponentEleven.Shared\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentFive/Pages/Greetings.razor",
    "content": "@layout RazorComponentFive.Shared.MainLayout\r\n\r\n<h1>@Message</h1>\r\n@Date\r\n\r\n@code{\r\n\r\n    [Parameter]\r\n    public string Message { get; set; }\r\n\r\n    [Parameter]\r\n    public DateOnly Date { get; set; }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentFive/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Http.HttpResults;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddMvc();\r\nvar app = builder.Build();\r\n\r\napp.MapControllers();\r\n\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    [Route(\"/\")]\r\n    public IResult Index() => new RazorComponentResult<RazorComponentFive.Pages.Greetings>(new { Message = \"Hello World too\", Date = DateOnly.FromDateTime(DateTime.Now) });\r\n}\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentFive/README.md",
    "content": "# Rendering a razor component using RazorComponentResult\r\n\r\nThis sample shows how to render a razor component using `RazorComponentResult` in MVC and passing data via anonymous object."
  },
  {
    "path": "projects/blazor-ssr/RazorComponentFive/RazorComponentFive.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentFive/RazorComponentFive.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorComponentFive\", \"RazorComponentFive.csproj\", \"{DE15A8D9-76F4-4CAF-8A91-AD06102981AA}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{DE15A8D9-76F4-4CAF-8A91-AD06102981AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{DE15A8D9-76F4-4CAF-8A91-AD06102981AA}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{DE15A8D9-76F4-4CAF-8A91-AD06102981AA}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{DE15A8D9-76F4-4CAF-8A91-AD06102981AA}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {D0D1889F-A538-4AD3-B981-8DE33C187302}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentFive/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <title>Blazor</title>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-aFq/bzH65dt+w6FI2ooMVUpc+21e0SRygnTpmBvdBgSdnuTN7QbdgL+OapgHtvPp\" crossorigin=\"anonymous\">\r\n  </head>\r\n  <body>\r\n    <div class=\"container\">\r\n        @Body\r\n    </div>\r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentFour/Pages/Greetings.razor",
    "content": "<h1>@Message</h1>\r\n@Date\r\n\r\n@code{\r\n\r\n    [Parameter]\r\n    public string Message { get; set; }\r\n\r\n    [Parameter]\r\n    public DateOnly Date { get; set; }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentFour/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddMvc();\r\nbuilder.Services.AddRazorComponents();\r\nvar app = builder.Build();\r\n\r\napp.MapControllers();\r\napp.Run();\r\n\r\n\r\npublic class HomeController : Controller \r\n{\r\n    [Route(\"/\")]\r\n    public IActionResult Index()\r\n    {\r\n        return View();\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentFour/README.md",
    "content": "# Rendering a Razor Component using Html.RenderComponentAsync\r\n\r\nThis sample shows how to render a razor component using `Html.RenderComponentAsync` and passing data using anonmyous data."
  },
  {
    "path": "projects/blazor-ssr/RazorComponentFour/RazorComponentFour.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentFour/VIews/Home/Index.cshtml",
    "content": "\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <title>Blazor United</title>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-aFq/bzH65dt+w6FI2ooMVUpc+21e0SRygnTpmBvdBgSdnuTN7QbdgL+OapgHtvPp\" crossorigin=\"anonymous\">\r\n  </head>\r\n  <body>\r\n    <div class=\"container\">\r\n        @(await Html.RenderComponentAsync<RazorComponentFour.Pages.Greetings>(RenderMode.Static, \r\n            new { Message = \"Hello World\", Date = DateOnly.FromDateTime(DateTime.Now) }))\r\n    </div>\r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentNine/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorComponentNine.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentNine/App.razor",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>Blazor Multi Render</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    <HeadOutlet />\r\n</head>\r\n<body>\r\n    <Router AppAssembly=\"@typeof(App).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n            <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\r\n        </Found>\r\n    </Router>\r\n\r\n    <script src=\"_framework/blazor.web.js\" suppress-error=\"BL9992\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentNine/Pages/Greet.razor",
    "content": "\r\n@Message \r\n\r\n@code\r\n{\r\n    [Parameter]\r\n    [SupplyParameterFromQuery]\r\n    public string Message { get; set; } = string.Empty;\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentNine/Pages/Index.razor",
    "content": "@page \"/\"\r\n\r\n<h1>[Parameter] and [SupplyParameterFromQuery]</h1>\r\n\r\n\r\n<div class=\"row\">\r\n    <div class=\"col-md-6\">\r\n        Greet component supplied via [Parameter] attribute\r\n        <br/>\r\n        <Greet Message=\"Hello World\" />\r\n    </div>\r\n    <div class=\"col-md-6\">\r\n        Greet component supplied via [SupplyParameterFromQuery] attribute\r\n        <br/>\r\n        <a href=\"/?Message=Hello%20World\">Click here to show the message /?Message=Hello%20World</a>\r\n        <br/>            \r\n        <Greet />\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentNine/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorComponents<RazorComponentNine.App>();\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentNine/README.md",
    "content": "# SupplyParameterFromQuery\r\n\r\nThe attribute `[SupplyParameterFromQuery]` enables Blazor component to get values from query string."
  },
  {
    "path": "projects/blazor-ssr/RazorComponentNine/RazorComponentNine.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentNine/RazorComponentNine.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.001.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorComponentNine\", \"RazorComponentNine.csproj\", \"{E9254A58-8AD5-436F-8ED7-46627916F0A1}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{E9254A58-8AD5-436F-8ED7-46627916F0A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E9254A58-8AD5-436F-8ED7-46627916F0A1}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E9254A58-8AD5-436F-8ED7-46627916F0A1}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E9254A58-8AD5-436F-8ED7-46627916F0A1}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {19A2F89D-F303-4110-A5C9-637C16F09558}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentNine/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentNine/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.JSInterop\r\n\r\n@using RazorComponentNine\r\n@using RazorComponentNine.Shared\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentOne/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorComponentOne.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentOne/App.razor",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>Blazor SSR</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    <HeadOutlet />\r\n</head>\r\n<body>\r\n    <Router AppAssembly=\"@typeof(App).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(Shared.MainLayout)\" />\r\n            <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\r\n        </Found>\r\n        <NotFound>\r\n            <PageTitle>Not found</PageTitle>\r\n            <LayoutView Layout=\"@typeof(Shared.MainLayout)\">\r\n                <p role=\"alert\">Sorry, there's nothing at this address.</p>\r\n            </LayoutView>\r\n        </NotFound>\r\n    </Router>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentOne/Pages/Egypt.razor",
    "content": "@page \"/egypt\"\r\n\r\n<Greetings Message=\"Hello Egypt\" />"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentOne/Pages/Greetings.razor",
    "content": "<h1>@Message</h1>\r\n\r\n@code{\r\n\r\n    [Parameter]\r\n    public string Message { get; set; }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentOne/Pages/Index.razor",
    "content": "@page \"/\"\r\n\r\n<Greetings Message=\"Hello World\" />\r\n\r\n<br/>\r\n<a href=\"/Egypt\">Hello Egypt</a>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentOne/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\napp.UseAntiforgery();\r\napp.MapRazorComponents<RazorComponentOne.App>();\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentOne/README.md",
    "content": "# Razor Component SSR\r\n\r\nThis sample demonstrates how to use Razor Components with Server-Side Rendering (SSR).\r\n\r\n`app.MapRazorComponents<RazorComponentOne.App>();` map all the razor components in the assembly. There is nothing special about `App`. Any class from your target assembly will do."
  },
  {
    "path": "projects/blazor-ssr/RazorComponentOne/RazorComponentOne.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentOne/RazorComponentOne.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorComponentOne\", \"RazorComponentOne.csproj\", \"{D03FBF33-489D-49B0-A5FF-FFB87564D78C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{D03FBF33-489D-49B0-A5FF-FFB87564D78C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D03FBF33-489D-49B0-A5FF-FFB87564D78C}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D03FBF33-489D-49B0-A5FF-FFB87564D78C}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D03FBF33-489D-49B0-A5FF-FFB87564D78C}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {10A6AAD1-98D8-4F32-A286-B67B472BA3E4}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentOne/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentOne/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSeven/App.razor",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>Blazor Multi Render</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    <HeadOutlet />\r\n</head>\r\n<body>\r\n    <Router AppAssembly=\"@typeof(App).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n            <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\r\n        </Found>\r\n    </Router>\r\n\r\n    <script src=\"_framework/blazor.web.js\" suppress-error=\"BL9992\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSeven/Pages/Index.razor",
    "content": "@page \"/\"\r\n\r\n<h1>Blazor Multi Render</h1>\r\n\r\n@_message\r\n\r\n<div class=\"row\">\r\n    <div class=\"col-md-4\">\r\n        <p class=\"mb-3\">\r\n            This button will not work because this Razor component is statically rendered\r\n        </p>\r\n        <button type=\"button\" class=\"btn btn-primary\" @onclick=\"ShowMessage\">Show Message</button>\r\n    </div>\r\n    <div class=\"col-md-4\">\r\n        <Numbers />\r\n    </div>\r\n    <div class=\"col-md-4\">\r\n        <p class=\"mb-3\">\r\n            This button will work because this Razor component is powered by Server Side Blazor\r\n        </p>\r\n        <Interactive />\r\n    </div>\r\n</div>\r\n\r\n@code {\r\n    string _message = string.Empty;\r\n\r\n    void ShowMessage()\r\n    {\r\n        _message = \"This won't work\";\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSeven/Pages/Interactive.razor",
    "content": "@rendermode InteractiveServer\r\n\r\n@_message\r\n\r\n<button type=\"button\" class=\"btn btn-primary\" @onclick=\"ShowMessage\">Show Message</button>\r\n\r\n@code {\r\n    string _message = string.Empty;\r\n\r\n    void ShowMessage()\r\n    {\r\n        _message = \"Current Time UTC \" + DateTime.UtcNow;\r\n    }\r\n}  \r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSeven/Pages/Numbers.razor",
    "content": "@attribute [StreamRendering(true)]\r\n\r\n@if (_numbers is null)\r\n{\r\n    <p>Loading numbers (wait for 6 seconds) ...</p>\r\n}\r\nelse\r\n{\r\n    <ul>\r\n        @foreach(var i in _numbers)\r\n        {\r\n            <li>@i</li>\r\n        }\r\n    </ul>\r\n}\r\n\r\n@code \r\n{\r\n    List<int> _numbers;\r\n\r\n    protected override async Task OnInitializedAsync()\r\n    {\r\n        await Task.Delay(6_000); //six seconds\r\n\r\n        _numbers = Enumerable.Range(0,100).ToList();\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSeven/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents()\r\n    .AddInteractiveServerComponents();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\napp.UseAntiforgery();\r\napp.MapRazorComponents<RazorComponentSeven.App>()\r\n    .AddInteractiveServerRenderMode();\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSeven/README.md",
    "content": "# Razor Component multi render\r\n\r\nThis sample shows the ability for Blazor to host components with different rendering mode in a single Razor Component Page.\r\n\r\nThe Razor Component Page is server side render. It hosts \"number\" component with with Streaming rendering and hosts \"interactive\" component backed by Blazor Server Side."
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSeven/RazorComponentSeven.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSeven/RazorComponentSeven.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorComponentSeven\", \"RazorComponentSeven.csproj\", \"{D1666076-3523-4495-8F52-68E845F5FB46}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{D1666076-3523-4495-8F52-68E845F5FB46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D1666076-3523-4495-8F52-68E845F5FB46}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D1666076-3523-4495-8F52-68E845F5FB46}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D1666076-3523-4495-8F52-68E845F5FB46}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {2CDB3AC6-3326-409F-A59F-1248F42D29FA}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSeven/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSeven/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.JSInterop\r\n@using static Microsoft.AspNetCore.Components.Web.RenderMode\r\n\r\n@using RazorComponentSeven\r\n@using RazorComponentSeven.Shared"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSix/Pages/Greetings.razor",
    "content": "@layout RazorComponentSix.Shared.MainLayout\r\n\r\n<h1>@Message</h1>\r\n\r\n<Microsoft.AspNetCore.Components.Sections.SectionContent SectionName=\"sidebar\" >\r\nThis is a section @Date\r\n</Microsoft.AspNetCore.Components.Sections.SectionContent>\r\n\r\n@code{\r\n\r\n    [Parameter]\r\n    public string Message { get; set; }\r\n\r\n    [Parameter]\r\n    public DateOnly Date { get; set; }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSix/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.HttpResults;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddMvc();\r\nvar app = builder.Build();\r\n\r\napp.MapControllers();\r\n\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    [Route(\"/\")]\r\n    public IResult Index() => new RazorComponentResult<RazorComponentSix.Pages.Greetings>(new { Message = \"Hello World too\", Date = DateOnly.FromDateTime(DateTime.Now) });\r\n}\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSix/README.md",
    "content": "# Razor Component Section \r\n\r\nThis sample demonstrates the new section functionality in Razor Component. Use `SectionOutlet` to render a section in a component. Use `SectionContent` to supply the content for the section."
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSix/RazorComponentSix.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSix/RazorComponentSix.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorComponentSix\", \"RazorComponentSix.csproj\", \"{1BAD400E-44D5-4A18-ABBF-184C7CBDD5F2}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{1BAD400E-44D5-4A18-ABBF-184C7CBDD5F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1BAD400E-44D5-4A18-ABBF-184C7CBDD5F2}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1BAD400E-44D5-4A18-ABBF-184C7CBDD5F2}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1BAD400E-44D5-4A18-ABBF-184C7CBDD5F2}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {FC51A321-0FED-48FF-8DD3-280020A780F4}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentSix/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <title>Blazor United</title>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-aFq/bzH65dt+w6FI2ooMVUpc+21e0SRygnTpmBvdBgSdnuTN7QbdgL+OapgHtvPp\" crossorigin=\"anonymous\">\r\n  </head>\r\n  <body>\r\n    <div class=\"container\">\r\n        <div class=\"row\">\r\n            <div class=\"col-md-6\">\r\n              @Body\r\n            </div>\r\n            <div class=\"col-md-6\">\r\n                <Microsoft.AspNetCore.Components.Sections.SectionOutlet SectionName=\"sidebar\" />\r\n            </div>  \r\n        </div>\r\n    </div>\r\n\r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorComponentTen.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/README.md",
    "content": "# Razor Component multi render\r\n\r\nThis sample shows the ability for Blazor to host components with different rendering mode in a single Razor Component Page.\r\n\r\nThe Razor Component Page is server side render. It handles a POST form,  hosts \"number\" component with with Streaming rendering and hosts \"interactive\" components backed by Blazor Web Assembly and Blazor Server.\r\n\r\nThe Web Assembly components **need to be hosted in a separate project**. "
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/RazorComponentTen/App.razor",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>Blazor Multi Render</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    <HeadOutlet />\r\n</head>\r\n<body>\r\n\r\n    <Router AppAssembly=\"@typeof(App).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n            <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\r\n        </Found>\r\n    </Router>\r\n\r\n    <script src=\"_framework/blazor.web.js\" suppress-error=\"BL9992\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/RazorComponentTen/Pages/Counter.razor",
    "content": "@_currentCount\r\n<br/><br/>\r\n<button type=\"button\" @onclick=\"IncrementCount\" class=\"btn btn-primary\">Increment</button>\r\n\r\n@code {\r\n    int _currentCount = 0;\r\n\r\n    void IncrementCount()\r\n    {\r\n        _currentCount++;\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/RazorComponentTen/Pages/Index.razor",
    "content": "@page \"/\"\r\n\r\n<h1>Blazor Multi Render</h1>\r\n\r\n\r\n<div class=\"row\">\r\n    <div class=\"col-md-3\">\r\n        <h2>SSR</h2>\r\n        @_message\r\n        <EditForm method=\"POST\" EditContext=\"_editContext\" FormName=\"ShowMessage\" OnValidSubmit=\"ShowMessage\">\r\n            <button class=\"btn btn-primary\">Show Message</button>\r\n        </EditForm>\r\n    </div>\r\n    <div class=\"col-md-3\">\r\n        <h2>Streaming</h2>\r\n        <Numbers />\r\n    </div>\r\n    <div class=\"col-md-3\">\r\n        <h2>WASM</h2>\r\n        <Wasm.Interactive @rendermode=\"@RenderMode.InteractiveWebAssembly\" />\r\n    </div>\r\n    <div class=\"col-md-3\">\r\n        <h2>Server</h2>\r\n        <Counter @rendermode=\"@RenderMode.InteractiveServer\" />\r\n    </div>\r\n</div>\r\n\r\n@code {\r\n\r\n    EditContext _editContext = new(string.Empty);\r\n\r\n    string _message = string.Empty;\r\n\r\n    void ShowMessage()\r\n    {\r\n        _message = \"Hello world\";\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/RazorComponentTen/Pages/Numbers.razor",
    "content": "@attribute [StreamRendering(true)]\r\n\r\n@if (_numbers is null)\r\n{\r\n    <p>Loading numbers (wait for 3 seconds) ...</p>\r\n}\r\nelse\r\n{\r\n    <ul>\r\n        @foreach(var i in _numbers)\r\n        {\r\n            <li>@i</li>\r\n        }\r\n    </ul>\r\n}\r\n\r\n@code \r\n{\r\n    List<int>? _numbers;\r\n\r\n    protected override async Task OnInitializedAsync()\r\n    {\r\n        await Task.Delay(3_000); //3 seconds\r\n\r\n        _numbers = Enumerable.Range(0,100).ToList();\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/RazorComponentTen/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorComponents()\r\n    .AddInteractiveServerComponents()\r\n    .AddInteractiveWebAssemblyComponents();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseHttpsRedirection();\r\n\r\napp.UseStaticFiles();\r\napp.UseAntiforgery();\r\napp.MapRazorComponents<RazorComponentTen.App>()\r\n    .AddInteractiveServerRenderMode()\r\n    .AddInteractiveWebAssemblyRenderMode();\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/RazorComponentTen/RazorComponentTen.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <RazorLangVersion>8.0</RazorLangVersion>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Wasm\\Wasm.csproj\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.Server\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/RazorComponentTen/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/RazorComponentTen/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.JSInterop\r\n\r\n@using RazorComponentTen\r\n@using RazorComponentTen.Shared\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/RazorComponentTen.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorComponentTen\", \"RazorComponentTen\\RazorComponentTen.csproj\", \"{C2CFE3B6-2C5A-464A-BB5F-56DB73FAE3A6}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Wasm\", \"Wasm\\Wasm.csproj\", \"{FD20A862-F038-4B95-8EA2-2DD1CF8A267F}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{C2CFE3B6-2C5A-464A-BB5F-56DB73FAE3A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{C2CFE3B6-2C5A-464A-BB5F-56DB73FAE3A6}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{C2CFE3B6-2C5A-464A-BB5F-56DB73FAE3A6}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{C2CFE3B6-2C5A-464A-BB5F-56DB73FAE3A6}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{FD20A862-F038-4B95-8EA2-2DD1CF8A267F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{FD20A862-F038-4B95-8EA2-2DD1CF8A267F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{FD20A862-F038-4B95-8EA2-2DD1CF8A267F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{FD20A862-F038-4B95-8EA2-2DD1CF8A267F}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {5F05B384-C974-4F1F-BDF3-8873320A01D6}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/Wasm/Interactive.razor",
    "content": "@_message\r\n\r\n<button type=\"button\" class=\"btn btn-primary\" @onclick=\"ShowMessage\">Show Message</button>\r\n\r\n@code {\r\n    string _message = string.Empty;\r\n\r\n    void ShowMessage()\r\n    {\r\n        _message = \"Current Time UTC \" + DateTime.UtcNow;\r\n    }\r\n}  \r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/Wasm/Program.cs",
    "content": "using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nawait builder.Build().RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/Wasm/Wasm.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTen/Wasm/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.WebAssembly.Http\r\n@using Microsoft.JSInterop\r\n@using Wasm\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThirteen/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorComponentTen.sln\",\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#de3597\",\r\n        \"activityBar.background\": \"#de3597\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#35520d\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#de3597\",\r\n        \"statusBar.background\": \"#c11f7d\",\r\n        \"statusBar.debuggingBackground\": \"#1fc163\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#de3597\",\r\n        \"statusBarItem.remoteBackground\": \"#c11f7d\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#c11f7d\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#c11f7d99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#c11f7d\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThirteen/README.md",
    "content": "# Accessing WASM Pages in mixed environment host\r\n\r\n`.AddAdditionalAssemblies` allows the host project to discover Page components in a WASM project. \r\n\r\n``` csharp\r\napp.MapRazorComponents<RazorComponentThirteen.App>()\r\n    .AddInteractiveWebAssemblyRenderMode()\r\n    .AddAdditionalAssemblies(typeof(Wasm.Pages.Index).Assembly);\r\n```\r\n\r\nThe Web Assembly components **need to be hosted in a separate project**. \r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen/App.razor",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>Blazor Multi Render</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    <HeadOutlet />\r\n</head>\r\n<body>\r\n\r\n    <Router AppAssembly=\"@typeof(App).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n            <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\r\n        </Found>\r\n    </Router>\r\n\r\n    <script src=\"_framework/blazor.web.js\" suppress-error=\"BL9992\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen/Pages/SSR.razor",
    "content": "@page \"/ssr\"\r\n\r\nThis Blazor Page Component is rendered using Server-Side Rendering (SSR) at the Host project.\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorComponents()\r\n    .AddInteractiveWebAssemblyComponents();\r\n\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseHttpsRedirection();\r\n\r\napp.UseStaticFiles();\r\napp.UseAntiforgery();\r\napp.MapRazorComponents<RazorComponentThirteen.App>()\r\n    .AddInteractiveWebAssemblyRenderMode()\r\n    .AddAdditionalAssemblies(typeof(Wasm.Pages.Index).Assembly);\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen/RazorComponentThirteen.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <RazorLangVersion>8.0</RazorLangVersion>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Wasm\\Wasm.csproj\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.Server\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\nThis layout is located at the Host project\r\n<div class=\"container\" style=\"border:1px solid red;padding:10px;\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.JSInterop\r\n\r\n@using RazorComponentThirteen\r\n@using RazorComponentThirteen.Shared\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThirteen/RazorComponentThirteen.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorComponentThirteen\", \"RazorComponentThirteen\\RazorComponentThirteen.csproj\", \"{642702B0-A4D7-4A1A-9D06-C919DCF04E9B}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Wasm\", \"Wasm\\Wasm.csproj\", \"{E8D78F96-53BF-4986-A1E6-9855ED20DAAB}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{642702B0-A4D7-4A1A-9D06-C919DCF04E9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{642702B0-A4D7-4A1A-9D06-C919DCF04E9B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{642702B0-A4D7-4A1A-9D06-C919DCF04E9B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{642702B0-A4D7-4A1A-9D06-C919DCF04E9B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{E8D78F96-53BF-4986-A1E6-9855ED20DAAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E8D78F96-53BF-4986-A1E6-9855ED20DAAB}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E8D78F96-53BF-4986-A1E6-9855ED20DAAB}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E8D78F96-53BF-4986-A1E6-9855ED20DAAB}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {946BC6FF-DD2D-4AD3-B2A5-4BF8E17D5C5F}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThirteen/Wasm/Pages/Index.razor",
    "content": "@page \"/\"\r\n\r\n<p>\r\n    This page is a WASM component and hosted in a separate project. \r\n</p>\r\n\r\n<p>\r\n    You can click <a href=\"/ssr\">here</a> to access a Blazor SSR page located at the HOST project.\r\n</p>\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThirteen/Wasm/Program.cs",
    "content": "using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nawait builder.Build().RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThirteen/Wasm/Wasm.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThirteen/Wasm/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.WebAssembly.Http\r\n@using Microsoft.JSInterop\r\n@using Wasm\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThree/Pages/Greetings.razor",
    "content": "@layout RazorComponentThree.Shared.MainLayout\r\n\r\n<h1>@Message</h1>\r\n@Date\r\n\r\n@code{\r\n\r\n    [Parameter]\r\n    public string Message { get; set; }\r\n\r\n    [Parameter]\r\n    public DateOnly Date { get; set; }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThree/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.HttpResults;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents();\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    return new RazorComponentResult<RazorComponentThree.Pages.Greetings>(new { Message = \"Hello World too\", Date = DateOnly.FromDateTime(DateTime.Now) });\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThree/README.md",
    "content": "# Rendering a razor component using RazorComponentResult\r\n\r\nThis sample shows how to render a razor component using `RazorComponentResult` in Minimal APIs and passing data via anonymous object."
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThree/RazorComponentThree.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThree/RazorComponentThree.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorComponentThree\", \"RazorComponentThree.csproj\", \"{004E2455-02A6-49F9-97B5-0B5C90096049}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{004E2455-02A6-49F9-97B5-0B5C90096049}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{004E2455-02A6-49F9-97B5-0B5C90096049}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{004E2455-02A6-49F9-97B5-0B5C90096049}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{004E2455-02A6-49F9-97B5-0B5C90096049}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {37EAB431-6FE2-4139-9B3A-D19B05B7BBAF}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentThree/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <title>Blazor United</title>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-aFq/bzH65dt+w6FI2ooMVUpc+21e0SRygnTpmBvdBgSdnuTN7QbdgL+OapgHtvPp\" crossorigin=\"anonymous\">\r\n  </head>\r\n  <body>\r\n    <div class=\"container\">\r\n        @Body\r\n    </div>\r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwelve/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorComponentEleven.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwelve/App.razor",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>HttpContext</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    <HeadOutlet />\r\n</head>\r\n<body>\r\n    <Router AppAssembly=\"@typeof(App).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n            <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\r\n        </Found>\r\n    </Router>\r\n\r\n    <script src=\"_framework/blazor.web.js\" suppress-error=\"BL9992\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwelve/Pages/Index.razor",
    "content": "@page \"/\"\r\n\r\n@_message\r\n\r\n<br/>\r\n\r\nHttpContext.Request.Path @HttpContext!.Request.Path\r\n\r\n@code \r\n{\r\n    [CascadingParameter]\r\n    public HttpContext? HttpContext { get; set; }\r\n\r\n    string _message = string.Empty;\r\n    protected override void OnInitialized()\r\n    {\r\n        _message = HttpContext is object ? \"HttpContext exists at OnInitialized\" : \"HttpContext is null\";\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwelve/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\napp.UseAntiforgery();\r\napp.MapRazorComponents<RazorComponentTwelve.App>();\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwelve/README.md",
    "content": "# Accessing HttpContext on static Razor Component\r\n\r\nThis sample shows how to access `HttpContext` from a static Razor component."
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwelve/RazorComponentTwelve.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <Nullable>enable</Nullable>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwelve/RazorComponentTwelve.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorComponentTwelve\", \"RazorComponentTwelve.csproj\", \"{637DBFE0-E61B-47FB-9B50-8F872517F51B}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{637DBFE0-E61B-47FB-9B50-8F872517F51B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{637DBFE0-E61B-47FB-9B50-8F872517F51B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{637DBFE0-E61B-47FB-9B50-8F872517F51B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{637DBFE0-E61B-47FB-9B50-8F872517F51B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {8CD56AB3-3C87-451F-9D64-BE14D1F98316}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwelve/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwelve/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.JSInterop\r\n\r\n@using RazorComponentTwelve\r\n@using RazorComponentTwelve.Shared\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwo/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorComponentTwo.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwo/Pages/Greetings.razor",
    "content": "@layout RazorComponentTwo.Shared.MainLayout\r\n\r\n<h1>@Message</h1>\r\n\r\n@code{\r\n\r\n    [Parameter]\r\n    public string Message { get; set; }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwo/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.HttpResults;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents();\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    return new RazorComponentResult<RazorComponentTwo.Pages.Greetings>(new Dictionary<string, object> { [\"Message\"] = \"Hello World \" + DateTime.Now.ToString() });\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwo/README.md",
    "content": "# Rendering a razor component using RazorComponentResult\r\n\r\nThis sample shows how to render a razor component using `RazorComponentResult` in Minimal APIs and passing data via a dictionary."
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwo/RazorComponentTwo.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwo/RazorComponentTwo.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorComponentTwo\", \"RazorComponentTwo.csproj\", \"{1E1C5F75-57DE-400C-90B7-8576D0120CEE}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{1E1C5F75-57DE-400C-90B7-8576D0120CEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1E1C5F75-57DE-400C-90B7-8576D0120CEE}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1E1C5F75-57DE-400C-90B7-8576D0120CEE}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1E1C5F75-57DE-400C-90B7-8576D0120CEE}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {4E7A887C-D466-4286-B3C4-C269C6B12806}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorComponentTwo/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <title>Blazor United</title>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-aFq/bzH65dt+w6FI2ooMVUpc+21e0SRygnTpmBvdBgSdnuTN7QbdgL+OapgHtvPp\" crossorigin=\"anonymous\">\r\n  </head>\r\n  <body>\r\n    <div class=\"container\">\r\n        @Body\r\n    </div>\r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFive/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorFormHandlingOne.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFive/Pages/App.razor",
    "content": "<html>\r\n    <head>\r\n            <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    </head>\r\n<body>\r\n    <Router AppAssembly=\"typeof(Program).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"routeData\" />\r\n        </Found>\r\n        <NotFound>\r\n            <h1>Page not found</h1>\r\n            <p>Sorry, but there's nothing here!</p>\r\n        </NotFound>\r\n    </Router>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFive/Pages/Index.razor",
    "content": "@page \"/\"\r\n@using System.ComponentModel.DataAnnotations;\r\n\r\n<h1>Form Validation using DataAnnotationsValidator and EditForm</h1>\r\n\r\n<div class=\"container\">\r\n    @((MarkupString)_showMessage)\r\n\r\n    <br />\r\n    <div class=\"row\">\r\n        <div class=\"col-md-6\">\r\n            <EditForm method=\"POST\" Model=\"PersonInfo\" FormName=\"info\" OnValidSubmit=\"HandleSubmit\">\r\n                <DataAnnotationsValidator />\r\n                <div class=\"mb-3\">\r\n                    <label class=\"form-label\" for=\"PersonInfo.Name\">Please enter your name</label><br />\r\n                    <InputText @bind-Value=\"PersonInfo.Name\" class=\"form-control\" />\r\n                    <ValidationMessage For=\"() => PersonInfo.Name\" class=\"text-danger\" />\r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <label for=\"PersonInfo.Description\" class=\"form-label\">Describe yourself</label>\r\n                    <InputTextArea @bind-Value=\"PersonInfo.Description\" class=\"form-control\" />\r\n                    <ValidationMessage For=\"() => PersonInfo.Description\" class=\"text-danger\" />\r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <label for=\"PersonInfo.Hobby\" class=\"form-label\">Hobby</label>\r\n                    <InputSelect @bind-Value=\"PersonInfo.Hobby\" class=\"form-select\">\r\n                        <option>Football</option>\r\n                        <option>Basketball</option>\r\n                        <option>Tennis</option>\r\n                    </InputSelect>\r\n                </div>\r\n                <div class=\"mb-3 form-check\">\r\n                    <InputCheckbox @bind-Value=\"PersonInfo.IsMarried\" class=\"form-check-input\" />\r\n                    <label for=\"PersonInfo.IsMarried\" class=\"form-check-label\">Is married?</label>\r\n                </div>\r\n                <div class=\"mb-3 form-check\">\r\n                    @{ var idx = 0;}\r\n                    <InputRadioGroup @bind-Value=\"PersonInfo.Nationality\">\r\n                        @foreach(var val in new string[] { \"USA\", \"Indonesia\", \"Egypt\"})\r\n                        {\r\n                            var id = \"nationality\" + idx;\r\n                            <InputRadio class=\"formcheck-input\" Value=\"@val\" id=\"@id\"/>\r\n                            <label class=\"form-check-label\" for=\"@id\">@val</label>\r\n                            <br/>\r\n                            idx++;\r\n                        }\r\n                    </InputRadioGroup>\r\n                     <ValidationMessage For=\"() => PersonInfo.Nationality\" class=\"text-danger\" />\r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n                </div>\r\n            </EditForm>\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n@code\r\n{\r\n    [SupplyParameterFromForm(FormName=\"info\")]// matches @fornname\"info\" \r\n    public Person PersonInfo  { get; set; } = new();\r\n\r\n    string _showMessage = string.Empty;\r\n\r\n    void HandleSubmit()\r\n    {\r\n        _showMessage = $\"Name: {PersonInfo.Name}<br />Description: {PersonInfo.Description}<br />Hobby: {PersonInfo.Hobby}<br />Is married: {PersonInfo.IsMarried}<br />Nationality: {PersonInfo.Nationality}<br/><br/>\";\r\n    }\r\n\r\n    public class Person\r\n    {\r\n        [Required]\r\n        public string Name { get; set; } = string.Empty;\r\n\r\n        [Required]\r\n        public string Description { get; set; } = string.Empty;\r\n\r\n        public string Hobby { get; set; } = string.Empty;\r\n\r\n        public bool IsMarried { get; set; }\r\n\r\n        [Required]\r\n        public string Nationality { get; set; } = string.Empty;\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFive/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\napp.MapRazorComponents<RazorFormHandlingFive.Pages.App>();\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFive/README.md",
    "content": "# Validation on Blazor SSR Form using DataAnnotationsValidator and EditForm\r\n\r\nThis example shows how to perform data validation using `DataAnnotationsValidator` and `EditForm`.\r\n\r\n\r\n## Important\r\n\r\nBlazor SSR does not allow class with multiple constructors to be used as a model. This also applies to nested objects (https://github.com/dotnet/aspnetcore/issues/55711)."
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFive/RazorFormHandlingFive.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFive/RazorFormHandlingFive.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorFormHandlingFive\", \"RazorFormHandlingFive.csproj\", \"{44C7C69B-4BA0-4D7D-9290-1DC4E8DB97B0}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{44C7C69B-4BA0-4D7D-9290-1DC4E8DB97B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{44C7C69B-4BA0-4D7D-9290-1DC4E8DB97B0}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{44C7C69B-4BA0-4D7D-9290-1DC4E8DB97B0}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{44C7C69B-4BA0-4D7D-9290-1DC4E8DB97B0}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {FBCD92B0-7E70-4F7C-8F9C-9939E2D2634C}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFive/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <title>Blazor United</title>\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-aFq/bzH65dt+w6FI2ooMVUpc+21e0SRygnTpmBvdBgSdnuTN7QbdgL+OapgHtvPp\" crossorigin=\"anonymous\">\r\n  </head>\r\n  <body>\r\n    @Body\r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFive/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFour/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorFormHandlingFour.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFour/Pages/App.razor",
    "content": "<html>\r\n    <head>\r\n            <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    </head>\r\n<body>\r\n    <Router AppAssembly=\"typeof(Program).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"routeData\" />\r\n        </Found>\r\n        <NotFound>\r\n            <h1>Page not found</h1>\r\n            <p>Sorry, but there's nothing here!</p>\r\n        </NotFound>\r\n    </Router>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFour/Pages/Index.razor",
    "content": "@page \"/\"\r\n\r\n<h1>Automatic Model Binding using EditForm</h1>\r\n\r\n<div class=\"container\">\r\n    @((MarkupString)_showMessage)\r\n\r\n    <br />\r\n    <div class=\"row\">\r\n        <div class=\"col-md-6\">\r\n            <EditForm method=\"POST\" Model=\"PersonInfo\" FormName=\"info\" OnValidSubmit=\"HandleSubmit\">\r\n                <div class=\"mb-3\">\r\n                    <label class=\"form-label\" for=\"PersonInfo.Name\">Please enter your name</label><br />\r\n                    <InputText @bind-Value=\"PersonInfo.Name\" class=\"form-control\" />\r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <label for=\"PersonInfo.Description\" class=\"form-label\">Describe yourself</label>\r\n                    <InputTextArea @bind-Value=\"PersonInfo.Description\" class=\"form-control\" />\r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <label for=\"PersonInfo.Hobby\" class=\"form-label\">Hobby</label>\r\n                    <InputSelect @bind-Value=\"PersonInfo.Hobby\" class=\"form-select\">\r\n                        <option>Football</option>\r\n                        <option>Basketball</option>\r\n                        <option>Tennis</option>\r\n                    </InputSelect>\r\n                </div>\r\n                <div class=\"mb-3 form-check\">\r\n                    <InputCheckbox @bind-Value=\"PersonInfo.IsMarried\" class=\"form-check-input\" />\r\n                    <label for=\"PersonInfo.IsMarried\" class=\"form-check-label\">Is married?</label>\r\n                </div>\r\n                <div class=\"mb-3 form-check\">\r\n                    @{ var idx = 0;}\r\n                    <InputRadioGroup @bind-Value=\"PersonInfo.Nationality\">\r\n                        @foreach(var val in new string[] { \"USA\", \"Indonesia\", \"Egypt\"})\r\n                        {\r\n                            var id = \"nationality\" + idx;\r\n                            <InputRadio class=\"formcheck-input\" Value=\"@val\" id=\"@id\"/>\r\n                            <label class=\"form-check-label\" for=\"@id\">@val</label>\r\n                            <br/>\r\n                            idx++;\r\n                        }\r\n                    </InputRadioGroup> \r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n                </div>\r\n                  </EditForm>\r\n        </div>\r\n        <div class=\"col-md-6\">\r\n             <EditForm method=\"POST\" Model=\"PersonInfo\" FormName=\"info2\" OnValidSubmit=\"HandleSubmit2\">\r\n                <div class=\"mb-3\">\r\n                    <label class=\"form-label\" for=\"JobInfo.Title\">Please enter your job title</label><br />\r\n                    <InputText @bind-Value=\"JobInfo.Title\" class=\"form-control\" />\r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n                </div>\r\n                  </EditForm>\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n@code\r\n{\r\n    [SupplyParameterFromForm(FormName=\"info\")]// matches @formname=\"info\" \r\n    public Person PersonInfo  { get; set; } = new();\r\n\r\n    [SupplyParameterFromForm(FormName=\"info2\")]// matches @formname=\"info2\" \r\n    public Job JobInfo  { get; set; } = new();\r\n\r\n    string _showMessage = string.Empty;\r\n\r\n    void HandleSubmit()\r\n    {\r\n        _showMessage = $\"Name: {PersonInfo.Name}<br />Description: {PersonInfo.Description}<br />Hobby: {PersonInfo.Hobby}<br />Is married: {PersonInfo.IsMarried}<br />Nationality: {PersonInfo.Nationality}<br/><br/>\";\r\n    }\r\n\r\n    void HandleSubmit2()\r\n    {\r\n        _showMessage = $\"Title: {JobInfo.Title}<br/><br/>\";\r\n    }\r\n\r\n    public class Person\r\n    {\r\n        public string Name { get; set; } = string.Empty;\r\n\r\n        public string Description { get; set; } = string.Empty;\r\n\r\n        public string Hobby { get; set; } = string.Empty;\r\n\r\n        public bool IsMarried { get; set; }\r\n\r\n        public string Nationality { get; set; } = string.Empty;\r\n    }\r\n\r\n    public class Job\r\n    {\r\n        public string Title { get; set; } = string.Empty;\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFour/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\napp.UseAntiforgery();\r\napp.MapRazorComponents<RazorFormHandlingFour.Pages.App>();\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFour/README.md",
    "content": "# Multiple Form Handling in Blazor SSR - Automatic binding using EditForm and [SupplyParameterFromForm]\r\n\r\nThis example shows how to perform **multiple** automatic data binding for a form `POST` request using `<EditForm/>` and `[SupplyParameterFromForm]`. `EditForm` will generate the antiforgery token so there is no need to include `<AntiforgeryToken/>` component manually.\r\n\r\n\r\n## Important\r\n\r\nBlazor SSR does not allow class with multiple constructors to be used as a model. This also applies to nested objects (https://github.com/dotnet/aspnetcore/issues/55711)."
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFour/RazorFormHandlingFour.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFour/RazorFormHandlingFour.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorFormHandlingFour\", \"RazorFormHandlingFour.csproj\", \"{47BC529E-0FEF-477A-ACE2-ED4A8D87D0FB}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{47BC529E-0FEF-477A-ACE2-ED4A8D87D0FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{47BC529E-0FEF-477A-ACE2-ED4A8D87D0FB}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{47BC529E-0FEF-477A-ACE2-ED4A8D87D0FB}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{47BC529E-0FEF-477A-ACE2-ED4A8D87D0FB}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {923989CE-5243-42DA-BBCD-48E2B5AA16DC}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFour/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <title>Blazor United</title>\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-aFq/bzH65dt+w6FI2ooMVUpc+21e0SRygnTpmBvdBgSdnuTN7QbdgL+OapgHtvPp\" crossorigin=\"anonymous\">\r\n  </head>\r\n  <body>\r\n    @Body\r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingFour/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingOne/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorFormHandlingOne.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingOne/Pages/App.razor",
    "content": "<html>\r\n    <head>\r\n            <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    </head>\r\n<body>\r\n    <Router AppAssembly=\"typeof(Program).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"routeData\" />\r\n        </Found>\r\n        <NotFound>\r\n            <h1>Page not found</h1>\r\n            <p>Sorry, but there's nothing here!</p>\r\n        </NotFound>\r\n    </Router>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingOne/Pages/Index.razor",
    "content": "@page \"/\"\r\n\r\n<h1>Automatic Model Binding using normal form tag</h1>\r\n\r\n<div class=\"container\">\r\n    @((MarkupString)_showMessage)\r\n\r\n    <br />\r\n    <div class=\"row\">\r\n        <div class=\"col-md-6\">\r\n            <form method=\"post\" @formname=\"info\" @onsubmit=\"HandleSubmit\">\r\n                <AntiforgeryToken />\r\n                <div class=\"mb-3\">\r\n                    <label class=\"form-label\" for=\"PersonInfo.Name\">Please enter your name</label><br />\r\n                    <InputText @bind-Value=\"PersonInfo.Name\" class=\"form-control\" />\r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <label for=\"PersonInfo.Description\" class=\"form-label\">Describe yourself</label>\r\n                    <InputTextArea @bind-Value=\"PersonInfo.Description\" class=\"form-control\" />\r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <label for=\"PersonInfo.Hobby\" class=\"form-label\">Hobby</label>\r\n                    <InputSelect @bind-Value=\"PersonInfo.Hobby\" class=\"form-select\">\r\n                        <option>Football</option>\r\n                        <option>Basketball</option>\r\n                        <option>Tennis</option>\r\n                    </InputSelect>\r\n                </div>\r\n                <div class=\"mb-3 form-check\">\r\n                    <InputCheckbox @bind-Value=\"PersonInfo.IsMarried\" class=\"form-check-input\" />\r\n                    <label for=\"PersonInfo.IsMarried\" class=\"form-check-label\">Is married?</label>\r\n                </div>\r\n                <div class=\"mb-3 form-check\">\r\n                    @{ var idx = 0;}\r\n                    <InputRadioGroup @bind-Value=\"PersonInfo.Nationality\">\r\n                        @foreach(var val in new string[] { \"USA\", \"Indonesia\", \"Egypt\"})\r\n                        {\r\n                            var id = \"nationality\" + idx;\r\n                            <InputRadio class=\"formcheck-input\" Value=\"@val\" id=\"@id\"/>\r\n                            <label class=\"form-check-label\" for=\"@id\">@val</label>\r\n                            <br/>\r\n                            idx++;\r\n                        }\r\n                    </InputRadioGroup> \r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n                </div>\r\n            </form>\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n@code\r\n{\r\n    [SupplyParameterFromForm(FormName=\"info\")]// matches @fornname\"info\" \r\n    public Person PersonInfo  { get; set; } = new();\r\n\r\n    string _showMessage = string.Empty;\r\n\r\n    void HandleSubmit()\r\n    {\r\n        _showMessage = $\"Name: {PersonInfo.Name}<br />Description: {PersonInfo.Description}<br />Hobby: {PersonInfo.Hobby}<br />Is married: {PersonInfo.IsMarried}<br />Nationality: {PersonInfo.Nationality}<br/><br/>\";\r\n    }\r\n\r\n    public class Person\r\n    {\r\n        public string Name { get; set; } = string.Empty;\r\n\r\n        public string Description { get; set; } = string.Empty;\r\n\r\n        public string Hobby { get; set; } = string.Empty;\r\n\r\n        public bool IsMarried { get; set; }\r\n\r\n        public string Nationality { get; set; } = string.Empty;\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingOne/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\napp.MapRazorComponents<RazorFormHandlingOne.Pages.App>();\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingOne/README.md",
    "content": "# Form Handling in Blazor SSR - Automatic binding using [SupplyParameterFromForm] \r\n\r\nThis example shows how to perform automatic data binding for a form `POST` request using `[SupplyParameterFromForm]`. We will use normal `<form>` tag in this case. Never forget to include `<AntiforgeryToken />` in your form otherwise your POST request won't be processed. \r\n\r\n\r\n## Important\r\n\r\nBlazor SSR does not allow class with multiple constructors to be used as a model. This also applies to nested objects (https://github.com/dotnet/aspnetcore/issues/55711)."
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingOne/RazorFormHandlingOne.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingOne/RazorFormHandlingOne.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorFormHandlingOne\", \"RazorFormHandlingOne.csproj\", \"{89A0E326-6533-485A-912B-A7C01569C766}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{89A0E326-6533-485A-912B-A7C01569C766}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{89A0E326-6533-485A-912B-A7C01569C766}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{89A0E326-6533-485A-912B-A7C01569C766}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{89A0E326-6533-485A-912B-A7C01569C766}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {6CB93F54-D0BC-42E9-A28F-3947EB913747}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingOne/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <title>Blazor United</title>\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-aFq/bzH65dt+w6FI2ooMVUpc+21e0SRygnTpmBvdBgSdnuTN7QbdgL+OapgHtvPp\" crossorigin=\"anonymous\">\r\n  </head>\r\n  <body>\r\n    @Body\r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingOne/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingThree/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorFormHandlingThree.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingThree/Pages/App.razor",
    "content": "<html>\r\n    <head>\r\n            <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    </head>\r\n<body>\r\n    <Router AppAssembly=\"typeof(Program).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"routeData\" />\r\n        </Found>\r\n        <NotFound>\r\n            <h1>Page not found</h1>\r\n            <p>Sorry, but there's nothing here!</p>\r\n        </NotFound>\r\n    </Router>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingThree/Pages/Index.razor",
    "content": "@page \"/\"\r\n\r\n<h1>Automatic Model Binding using normal form tag</h1>\r\n\r\n<div class=\"container\">\r\n    @((MarkupString)_showMessage)\r\n\r\n    <br />\r\n    <div class=\"row\">\r\n        <div class=\"col-md-6\">\r\n            <form method=\"post\" @formname=\"info\" @onsubmit=\"HandleSubmit\">\r\n                <AntiforgeryToken />\r\n                <div class=\"mb-3\">\r\n                    <label class=\"form-label\" for=\"PersonInfo.Name\">Please enter your name</label><br />\r\n                    <InputText @bind-Value=\"PersonInfo.Name\" class=\"form-control\" />\r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <label for=\"PersonInfo.Description\" class=\"form-label\">Describe yourself</label>\r\n                    <InputTextArea @bind-Value=\"PersonInfo.Description\" class=\"form-control\" />\r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <label for=\"PersonInfo.Hobby\" class=\"form-label\">Hobby</label>\r\n                    <InputSelect @bind-Value=\"PersonInfo.Hobby\" class=\"form-select\">\r\n                        <option>Football</option>\r\n                        <option>Basketball</option>\r\n                        <option>Tennis</option>\r\n                    </InputSelect>\r\n                </div>\r\n                <div class=\"mb-3 form-check\">\r\n                    <InputCheckbox @bind-Value=\"PersonInfo.IsMarried\" class=\"form-check-input\" />\r\n                    <label for=\"PersonInfo.IsMarried\" class=\"form-check-label\">Is married?</label>\r\n                </div>\r\n                <div class=\"mb-3 form-check\">\r\n                    @{ var idx = 0;}\r\n                    <InputRadioGroup @bind-Value=\"PersonInfo.Nationality\">\r\n                        @foreach(var val in new string[] { \"USA\", \"Indonesia\", \"Egypt\"})\r\n                        {\r\n                            var id = \"nationality\" + idx;\r\n                            <InputRadio class=\"formcheck-input\" Value=\"@val\" id=\"@id\"/>\r\n                            <label class=\"form-check-label\" for=\"@id\">@val</label>\r\n                            <br/>\r\n                            idx++;\r\n                        }\r\n                    </InputRadioGroup> \r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n                </div>\r\n            </form>\r\n        </div>\r\n        <div class=\"col-md-6\">\r\n            <form method=\"post\" @formname=\"info2\" @onsubmit=\"HandleSubmit2\">\r\n                <AntiforgeryToken />\r\n                <div class=\"mb-3\">\r\n                    <label class=\"form-label\" for=\"JobInfo.Title\">Please enter your job title</label><br />\r\n                    <InputText @bind-Value=\"JobInfo.Title\" class=\"form-control\" />\r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n                </div>\r\n            </form>\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n@code\r\n{\r\n    [SupplyParameterFromForm(FormName=\"info\")]// matches @formname=\"info\" \r\n    public Person PersonInfo  { get; set; } = new();\r\n\r\n    [SupplyParameterFromForm(FormName=\"info2\")]// matches @formname=\"info2\" \r\n    public Job JobInfo  { get; set; } = new();\r\n\r\n    string _showMessage = string.Empty;\r\n\r\n    void HandleSubmit()\r\n    {\r\n        _showMessage = $\"Name: {PersonInfo.Name}<br />Description: {PersonInfo.Description}<br />Hobby: {PersonInfo.Hobby}<br />Is married: {PersonInfo.IsMarried}<br />Nationality: {PersonInfo.Nationality}<br/><br/>\";\r\n    }\r\n\r\n    void HandleSubmit2()\r\n    {\r\n        _showMessage = $\"Title: {JobInfo.Title}<br/><br/>\";\r\n    }\r\n\r\n    public class Person\r\n    {\r\n        public string Name { get; set; } = string.Empty;\r\n\r\n        public string Description { get; set; } = string.Empty;\r\n\r\n        public string Hobby { get; set; } = string.Empty;\r\n\r\n        public bool IsMarried { get; set; }\r\n\r\n        public string Nationality { get; set; } = string.Empty;\r\n    }\r\n\r\n    public class Job\r\n    {\r\n        public string Title { get; set; } = string.Empty;\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingThree/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\napp.MapRazorComponents<RazorFormHandlingThree.Pages.App>();\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingThree/README.md",
    "content": "# Multiple Form Handling in Blazor SSR - Automatic binding using [SupplyParameterFromForm] \r\n\r\nThis example shows how to perform **multiple** automatic data binding for a form `POST` request using `[SupplyParameterFromForm]`. We will use normal `<form>` tag in this case. Never forget to include `<AntiforgeryToken />` in your form otherwise your POST request won't be processed. \r\n\r\n\r\n## Important\r\n\r\nBlazor SSR does not allow class with multiple constructors to be used as a model. This also applies to nested objects (https://github.com/dotnet/aspnetcore/issues/55711)."
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingThree/RazorFormHandlingThree.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingThree/RazorFormHandlingThree.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorFormHandlingThree\", \"RazorFormHandlingThree.csproj\", \"{1249C601-FEFD-46EE-AEAC-765C95D6E346}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{1249C601-FEFD-46EE-AEAC-765C95D6E346}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1249C601-FEFD-46EE-AEAC-765C95D6E346}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1249C601-FEFD-46EE-AEAC-765C95D6E346}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1249C601-FEFD-46EE-AEAC-765C95D6E346}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {DD3B9E1A-4008-4C25-921A-648B5DA1C2C8}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingThree/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <title>Blazor United</title>\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-aFq/bzH65dt+w6FI2ooMVUpc+21e0SRygnTpmBvdBgSdnuTN7QbdgL+OapgHtvPp\" crossorigin=\"anonymous\">\r\n  </head>\r\n  <body>\r\n    @Body\r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingThree/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingTwo/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorFormHandlingTwo.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingTwo/Pages/App.razor",
    "content": "<html>\r\n    <head>\r\n            <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    </head>\r\n<body>\r\n    <Router AppAssembly=\"typeof(Program).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"routeData\" />\r\n        </Found>\r\n        <NotFound>\r\n            <h1>Page not found</h1>\r\n            <p>Sorry, but there's nothing here!</p>\r\n        </NotFound>\r\n    </Router>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingTwo/Pages/Index.razor",
    "content": "@page \"/\"\r\n\r\n<h1>Automatic Model Binding</h1>\r\n\r\n<div class=\"container\">\r\n    @((MarkupString)_showMessage)\r\n\r\n    <br />\r\n    <div class=\"row\">\r\n        <div class=\"col-md-6\">\r\n            <EditForm method=\"POST\" Model=\"PersonInfo\" FormName=\"info\" OnValidSubmit=\"HandleSubmit\">\r\n                <div class=\"mb-3\">\r\n                    <label class=\"form-label\" for=\"PersonInfo.Name\">Please enter your name</label><br />\r\n                    <InputText @bind-Value=\"PersonInfo.Name\" class=\"form-control\" />\r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <label for=\"PersonInfo.Description\" class=\"form-label\">Describe yourself</label>\r\n                    <InputTextArea @bind-Value=\"PersonInfo.Description\" class=\"form-control\" />\r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <label for=\"PersonInfo.Hobby\" class=\"form-label\">Hobby</label>\r\n                    <InputSelect @bind-Value=\"PersonInfo.Hobby\" class=\"form-select\">\r\n                        <option>Football</option>\r\n                        <option>Basketball</option>\r\n                        <option>Tennis</option>\r\n                    </InputSelect>\r\n                </div>\r\n                <div class=\"mb-3 form-check\">\r\n                    <InputCheckbox @bind-Value=\"PersonInfo.IsMarried\" class=\"form-check-input\" />\r\n                    <label for=\"PersonInfo.IsMarried\" class=\"form-check-label\">Is married?</label>\r\n                </div>\r\n                <div class=\"mb-3 form-check\">\r\n                    @{ var idx = 0;}\r\n                    <InputRadioGroup @bind-Value=\"PersonInfo.Nationality\">\r\n                        @foreach(var val in new string[] { \"USA\", \"Indonesia\", \"Egypt\"})\r\n                        {\r\n                            var id = \"nationality\" + idx;\r\n                            <InputRadio class=\"formcheck-input\" Value=\"@val\" id=\"@id\"/>\r\n                            <label class=\"form-check-label\" for=\"@id\">@val</label>\r\n                            <br/>\r\n                            idx++;\r\n                        }\r\n                    </InputRadioGroup> \r\n                </div>\r\n                <div class=\"mb-3\">\r\n                    <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n                </div>\r\n            </EditForm>\r\n        </div>\r\n    </div>\r\n</div>\r\n\r\n@code\r\n{\r\n    [SupplyParameterFromForm(FormName = \"info\")] // matches FormName=\"info\"\r\n    public Person PersonInfo  { get; set; } = new();\r\n\r\n    string _showMessage = string.Empty;\r\n\r\n    void HandleSubmit()\r\n    {\r\n        _showMessage = $\"Name: {PersonInfo.Name}<br />Description: {PersonInfo.Description}<br />Hobby: {PersonInfo.Hobby}<br />Is married: {PersonInfo.IsMarried}<br />Nationality: {PersonInfo.Nationality}<br/><br/>\";\r\n    }\r\n\r\n    public class Person\r\n    {\r\n        public string Name { get; set; } = string.Empty;\r\n\r\n        public string Description { get; set; } = string.Empty;\r\n\r\n        public string Hobby { get; set; } = string.Empty;\r\n\r\n        public bool IsMarried { get; set; }\r\n\r\n        public string Nationality { get; set; } = string.Empty;\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingTwo/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\napp.MapRazorComponents<RazorFormHandlingTwo.Pages.App>();\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingTwo/README.md",
    "content": "# Form Handling in Blazor SSR - Automatic binding using EditForm and [SupplyParameterFromForm]\r\n\r\nThis example shows how to perform automatic data binding for a form `POST` request using `<EditForm/>` and `[SupplyParameterFromForm]`. `EditForm` will generate the antiforgery token so there is no need to include `<AntiforgeryToken/>` component manually.\r\n\r\n\r\n## Important\r\n\r\nBlazor SSR does not allow class with multiple constructors to be used as a model. This also applies to nested objects (https://github.com/dotnet/aspnetcore/issues/55711)."
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingTwo/RazorFormHandlingTwo.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingTwo/RazorFormHandlingTwo.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.001.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorFormHandlingTwo\", \"RazorFormHandlingTwo.csproj\", \"{F5D419EC-2960-4FA8-A830-829BA32B8254}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{F5D419EC-2960-4FA8-A830-829BA32B8254}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{F5D419EC-2960-4FA8-A830-829BA32B8254}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{F5D419EC-2960-4FA8-A830-829BA32B8254}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F5D419EC-2960-4FA8-A830-829BA32B8254}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {5DE40412-5F9A-471A-A98E-7F26E34E04DB}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingTwo/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <title>Blazor United</title>\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-aFq/bzH65dt+w6FI2ooMVUpc+21e0SRygnTpmBvdBgSdnuTN7QbdgL+OapgHtvPp\" crossorigin=\"anonymous\">\r\n  </head>\r\n  <body>\r\n    @Body\r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorFormHandlingTwo/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using Microsoft.AspNetCore.Components.Forms\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Authorization\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchFour/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorMixMatchOne.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchFour/App.razor",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>Blazor Multi Render</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    <HeadOutlet />\r\n</head>\r\n<body>\r\n    <Router AppAssembly=\"@typeof(App).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n            <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\r\n        </Found>\r\n        <NotFound>\r\n            <PageTitle>Not found</PageTitle>\r\n            <LayoutView Layout=\"@typeof(MainLayout)\">\r\n                <p role=\"alert\">Sorry, there's nothing at this address.</p>\r\n            </LayoutView>\r\n        </NotFound>\r\n    </Router>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchFour/Controllers/HomeController.cs",
    "content": "\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\npublic class HomeController : Controller\r\n{\r\n    [HttpGet(\"/index-2\")]\r\n    public IActionResult Index()\r\n    {\r\n        return View();\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchFour/Pages/Blazor.razor",
    "content": "@page \"/blazor-ssr\"\r\n\r\n<h1>This is from Blazor SSR</h1>"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchFour/Pages/Index.cshtml",
    "content": "@page \"/index-3\"\r\n<html>\r\n    <body>\r\n        Hello world. This is a Razor Pages page.\r\n        <br/>\r\n        <a href=\"/blazor-ssr\">Blazor SSR is here</a>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchFour/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddMvc();\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\napp.UseAntiforgery();\r\napp.MapGet(\"/\", () => \r\n{\r\n    return Results.Text(\"\"\"\r\n    <html>\r\n        <body>\r\n            Hello world. This is from Minimal API.\r\n            <ul>\r\n                <li><a href=\"/index-2\">MVC is here</a></li>\r\n                <li><a href=\"/index-3\">Razor Pages is here</a></li>\r\n                <li><a href=\"/blazor-ssr\">Blazor SSR is here</a></li>\r\n            </ul>\r\n        </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.MapControllers();\r\napp.MapRazorPages();\r\napp.MapRazorComponents<RazorMixMatchOne.App>();\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchFour/README.md",
    "content": "# Mix Blazor SSR with MVC, Razor Pages and Minimal API\r\n\r\nThis example demonstrates how to use Blazor SSR with MVC, Razor Pages and Minimal API altogether."
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchFour/RazorMixMatchOne.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchFour/RazorMixMatchOne.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorMixMatchOne\", \"RazorMixMatchOne.csproj\", \"{29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {13222FA6-2C83-4681-93CA-7CDA313B62BC}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchFour/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchFour/Views/Home/Index.cshtml",
    "content": "<html>\r\n    <body>\r\n        Hello world. This is a view from the controller.\r\n        <br/>\r\n        <a href=\"/blazor-ssr\">Blazor SSR is here</a>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchFour/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.JSInterop\r\n\r\n@using RazorMixMatchOne\r\n@using RazorMixMatchOne.Shared\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchOne/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorMixMatchOne.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchOne/App.razor",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>Blazor Multi Render</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    <HeadOutlet />\r\n</head>\r\n<body>\r\n    <Router AppAssembly=\"@typeof(App).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n            <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\r\n        </Found>\r\n        <NotFound>\r\n            <PageTitle>Not found</PageTitle>\r\n            <LayoutView Layout=\"@typeof(MainLayout)\">\r\n                <p role=\"alert\">Sorry, there's nothing at this address.</p>\r\n            </LayoutView>\r\n        </NotFound>\r\n    </Router>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchOne/Controllers/HomeController.cs",
    "content": "\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\npublic class HomeController : Controller\r\n{\r\n    [HttpGet(\"/\")]\r\n    public IActionResult Index()\r\n    {\r\n        return View();\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchOne/Pages/Blazor.razor",
    "content": "@page \"/blazor-ssr\"\r\n\r\n<h1>This is from Blazor SSR</h1>"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchOne/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddMvc();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\napp.UseAntiforgery();\r\n\r\napp.MapControllers();\r\napp.MapRazorComponents<RazorMixMatchOne.App>();\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchOne/README.md",
    "content": "# Mix Blazor SSR with MVC\r\n\r\nThis example demonstrates how to use Blazor SSR with MVC."
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchOne/RazorMixMatchOne.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchOne/RazorMixMatchOne.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorMixMatchOne\", \"RazorMixMatchOne.csproj\", \"{29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{29BEE3CE-7C2F-414B-9C8A-49F075C2EA29}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {13222FA6-2C83-4681-93CA-7CDA313B62BC}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchOne/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchOne/Views/Home/Index.cshtml",
    "content": "<html>\r\n    <body>\r\n        Hello world. This is a view from the controller.\r\n        <br/>\r\n        <a href=\"/blazor-ssr\">Blazor SSR is here</a>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchOne/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.JSInterop\r\n\r\n@using RazorMixMatchOne\r\n@using RazorMixMatchOne.Shared\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchThree/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorMixMatchThree.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchThree/App.razor",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>Blazor Multi Render</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    <HeadOutlet />\r\n</head>\r\n<body>\r\n    <Router AppAssembly=\"@typeof(App).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n            <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\r\n        </Found>\r\n        <NotFound>\r\n            <PageTitle>Not found</PageTitle>\r\n            <LayoutView Layout=\"@typeof(MainLayout)\">\r\n                <p role=\"alert\">Sorry, there's nothing at this address.</p>\r\n            </LayoutView>\r\n        </NotFound>\r\n    </Router>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchThree/Pages/Blazor.razor",
    "content": "@page \"/blazor-ssr\"\r\n\r\n<h1>This is from Blazor SSR</h1>"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchThree/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", () => \r\n{\r\n    return Results.Text(\"\"\"\r\n    <html>\r\n        <body>\r\n            Hello world. This is from Minimal API.\r\n            <br/>\r\n            <a href=\"/blazor-ssr\">Blazor SSR is here</a>\r\n        </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.MapRazorComponents<RazorMixMatchThree.App>();\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchThree/README.md",
    "content": "# Mix Blazor SSR with Minimal API\r\n\r\nThis example demonstrates how to use Blazor SSR with Minimal API."
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchThree/RazorMixMatchThree.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchThree/RazorMixMatchThree.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorMixMatchThree\", \"RazorMixMatchThree.csproj\", \"{AA514391-0FC0-48BB-99D9-198FEBBC6761}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{AA514391-0FC0-48BB-99D9-198FEBBC6761}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{AA514391-0FC0-48BB-99D9-198FEBBC6761}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{AA514391-0FC0-48BB-99D9-198FEBBC6761}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{AA514391-0FC0-48BB-99D9-198FEBBC6761}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {7892608F-08CC-4E61-9B7A-8BCA118B7920}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchThree/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchThree/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.JSInterop\r\n\r\n@using RazorMixMatchThree\r\n@using RazorMixMatchThree.Shared\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchTwo/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"RazorMixMatchTwo.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchTwo/App.razor",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>Blazor Multi Render</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    <HeadOutlet />\r\n</head>\r\n<body>\r\n    <Router AppAssembly=\"@typeof(App).Assembly\">\r\n        <Found Context=\"routeData\">\r\n            <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n            <FocusOnNavigate RouteData=\"@routeData\" Selector=\"h1\" />\r\n        </Found>\r\n        <NotFound>\r\n            <PageTitle>Not found</PageTitle>\r\n            <LayoutView Layout=\"@typeof(MainLayout)\">\r\n                <p role=\"alert\">Sorry, there's nothing at this address.</p>\r\n            </LayoutView>\r\n        </NotFound>\r\n    </Router>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchTwo/Pages/Blazor.razor",
    "content": "@page \"/blazor-ssr\"\r\n\r\n<h1>This is from Blazor SSR</h1>"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchTwo/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n<html>\r\n    <body>\r\n        Hello world. This is a Razor Pages page.\r\n        <br/>\r\n        <a href=\"/blazor-ssr\">Blazor SSR is here</a>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchTwo/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorComponents();\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\napp.UseAntiforgery();\r\n\r\napp.MapRazorPages();\r\napp.MapRazorComponents<RazorMixMatchTwo.App>();\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchTwo/README.md",
    "content": "# Mix Blazor SSR with Razor Pages\r\n\r\nThis example demonstrates how to use Blazor SSR with Razor Pages."
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchTwo/RazorMixMatchTwo.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchTwo/RazorMixMatchTwo.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"RazorMixMatchTwo\", \"RazorMixMatchTwo.csproj\", \"{0C7792CD-DE0E-437A-8B00-7092D45C3637}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{0C7792CD-DE0E-437A-8B00-7092D45C3637}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{0C7792CD-DE0E-437A-8B00-7092D45C3637}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{0C7792CD-DE0E-437A-8B00-7092D45C3637}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{0C7792CD-DE0E-437A-8B00-7092D45C3637}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {414F06E3-3730-43E0-80AF-3CF0C17D6B3A}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchTwo/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"container\">\r\n    @Body\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-ssr/RazorMixMatchTwo/_Imports.razor",
    "content": "@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.JSInterop\r\n\r\n@using RazorMixMatchTwo\r\n@using RazorMixMatchTwo.Shared\r\n"
  },
  {
    "path": "projects/blazor-ssr/build.bat",
    "content": "dotnet build RazorComponentEight\r\ndotnet build RazorComponentEleven\r\ndotnet build RazorComponentFive\r\ndotnet build RazorComponentFour\r\ndotnet build RazorComponentNine\r\ndotnet build RazorComponentOne\r\ndotnet build RazorComponentSeven\r\ndotnet build RazorComponentSix\r\ndotnet build RazorComponentTen\r\ndotnet build RazorComponentThirteen\r\ndotnet build RazorComponentThree\r\ndotnet build RazorComponentTwelve\r\ndotnet build RazorComponentTwo\r\ndotnet build RazorFormHandlingFive\r\ndotnet build RazorFormHandlingFour\r\ndotnet build RazorFormHandlingOne\r\ndotnet build RazorFormHandlingThree\r\ndotnet build RazorFormHandlingTwo\r\ndotnet build RazorMixMatchFour\r\ndotnet build RazorMixMatchOne\r\ndotnet build RazorMixMatchThree\r\ndotnet build RazorMixMatchTwo"
  },
  {
    "path": "projects/blazor-ssr/build.sh",
    "content": "#!/bin/bash\ndotnet build RazorComponentEight\ndotnet build RazorComponentEleven\ndotnet build RazorComponentFive\ndotnet build RazorComponentFour\ndotnet build RazorComponentNine\ndotnet build RazorComponentOne\ndotnet build RazorComponentSeven\ndotnet build RazorComponentSix\ndotnet build RazorComponentTen\ndotnet build RazorComponentThirteen\ndotnet build RazorComponentThree\ndotnet build RazorComponentTwelve\ndotnet build RazorComponentTwo\ndotnet build RazorFormHandlingFive\ndotnet build RazorFormHandlingFour\ndotnet build RazorFormHandlingOne\ndotnet build RazorFormHandlingThree\ndotnet build RazorFormHandlingTwo\ndotnet build RazorMixMatchFour\ndotnet build RazorMixMatchOne\ndotnet build RazorMixMatchThree\ndotnet build RazorMixMatchTwo\n"
  },
  {
    "path": "projects/blazor-ssr/readme.md",
    "content": "# Blazor Server Side Rendering (22)\r\n\r\n## Basics\r\n\r\n* [RazorComponentOne](RazorComponentOne)\r\n\r\n  This sample demonstrates a simple usage of Razor Component component in SSR (Server Side Rendering).\r\n\r\n* [RazorComponentTwo](RazorComponentTwo)\r\n\r\n  This sample demonstrates rendering a Razor Component from Minimal API via  `RazorComponentResult` and passing data via a dictionary.\r\n\r\n* [RazorComponentThree](RazorComponentThree)\r\n\r\n  This sample demonstrates rendering a Razor Component from Minimal API via `RazorComponentResult` and passing data via anonymous object.\r\n\r\n* [RazorComponentFour](RazorComponentFour)\r\n\r\n  This sample demonstrates rendering a Razor Component using `Html.RenderComponentAsync` and passing data via anonymous object.\r\n\r\n* [RazorComponentFive](RazorComponentFive)\r\n\r\n  This sample demonstrates rendering a Razor Component from a MVC Controller via `RazorComponentResult` and passing data via a dictionary.\r\n\r\n* [RazorComponentSix](RazorComponentSix)\r\n\r\n  This sample demonstrates the new section functionality using `SectionOutlet` to mark a section and `SectionContent` to supply the content to a section.\r\n\r\n* [RazorComponentSeven](RazorComponentSeven)\r\n\r\n  This sample demonstrates a Razor Component Page SSR (Server Side Render) hosting Razor Component with Blazor Server Side (interactive) and Blazor Streaming Rendering.\r\n\r\n* [RazorComponentEight](RazorComponentEight)\r\n\r\n  This sample demonstrates a Razor Component Page SSR (Server Side Render) hosting Razor Component with Blazor Web Assembly (interactive) and Blazor Streaming Rendering.\r\n\r\n* [RazorComponentNine](RazorComponentNine)\r\n\r\n  This sample demostrates the new attribute `[SupplyParameterFromQuery]` that allows Blazor component to get values directly from query string.\r\n\r\n* [RazorComponentTen](RazorComponentTen)\r\n\r\n  This sample demonstrates a Razor Component Page SSR that handle a POST form, hosts \"number\" component with with Streaming rendering and hosts \"interactive\" components backed by Blazor Web Assembly and Blazor Server.\r\n\r\n* [RazorComponentEleven](RazorComponentEleven)\r\n\r\n  This sample shows how to update the UI multiple times using `StateHasChanged();` while in streaming rendering mode.\r\n\r\n* [RazorComponentTwelve](RazorComponentTwelve)\r\n\r\n  This sample shows how to access `HttpContext` from a static Razor component.\r\n\r\n* [RazorComponentThirteen](RazorComponentThirteen)\r\n\r\n  This sample shows how to use `.AddAdditionalAssemblies` to allow the a host project to discover Page components in a separate WASM project. \r\n\r\n## Blazor SSR Form Handling\r\n\r\n * [RazorFormHandlingOne](RazorFormHandlingOne)\r\n   \r\n   This example shows how to perform automatic data binding for a form `POST` request using `[SupplyParameterFromForm]`. We will use normal `<form>` tag in this case.\r\n\r\n * [RazorFormHandlingTwo](RazorFormHandlingTwo)\r\n\r\n   This example shows how to perform automatic data binding for a form `POST` request using `<EditForm/>` and `[SupplyParameterFromForm]`.\r\n\r\n * [RazorFormHandlingThree](RazorFormHandlingThree)\r\n\r\n   This example shows how to perform **multiple** automatic data binding for a form `POST` request using `[SupplyParameterFromForm]`. We will use normal `<form>` tag in this case.\r\n\r\n * [RazorFormHandlingFour](RazorFormHandlingFour)\r\n\r\n   This example shows how to perform **multiple** automatic data binding for a form `POST` request using `<EditForm/>` and `[SupplyParameterFromForm]`. \r\n\r\n * [RazorFormHandlingFive](RazorFormHandlingFive)\r\n\r\n   This example shows how to perform data validation using `DataAnnotationsValidator` and `EditForm`.\r\n\r\n## Mix and Match Blazor SSR with existing tech\r\n\r\n  * [RazorMixMatchOne](RazorMixMatchOne)\r\n\r\n    This example shows how to use Blazor SSR with MVC in the same system.\r\n  \r\n  * [RazorMixMatchTwo](RazorMixMatchTwo)\r\n\r\n    This example shows how to use Blazor SSR with Razor Pages in the same system.\r\n\r\n  * [RazorMixMatchThree](RazorMixMatchThree)\r\n\r\n    This example shows how to use Blazor SSR with Minimal API in the same system.\r\n\r\n  * [RazorMixMatchFour](RazorMixMatchFour)\r\n\r\n    This example shows how to use Blazor SSR with MVC, Razor Pages and Minimal API in the same system.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/blazor-wasm/Component/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/Component/Component.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/Component/Pages/Greeting.razor",
    "content": "﻿<h1>@Message @currentCount from a component</h1>\r\n\r\n<button class=\"btn btn-primary\" @onclick=\"IncrementCount\">Click me</button>\r\n\r\n@code {\r\n    [Parameter]\r\n    public string Message {get; set;}\r\n\r\n    int currentCount = 1;\r\n\r\n    void IncrementCount()\r\n    {\r\n        currentCount++;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/Component/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<Greeting Message=\"Hello World\"></Greeting>"
  },
  {
    "path": "projects/blazor-wasm/Component/Program.cs",
    "content": "﻿using Component;\r\nusing Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\n\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/Component/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/Component/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using Component\r\n@using Component.Shared"
  },
  {
    "path": "projects/blazor-wasm/Component/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\"\r\n        integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentEight/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEight/ComponentEight.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEight/Pages/Increment.razor",
    "content": "<button type=\"button\" @onclick=\"Add\">Increment</button>\r\n\r\n@code {\r\n    int _number = 0;\r\n\r\n    [Parameter]\r\n    public EventCallback<int> OnValueChanged { get; set;}\r\n\r\n    async Task Add() => await OnValueChanged.InvokeAsync(++_number);\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentEight/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Two components interacting with each other</h1>\r\n<Show @ref=\"_showRef\" Number=\"Number\" />\r\n<br/>\r\n<p>Via public method</p>\r\n<Increment OnValueChanged=\"Add\"/>\r\n<hr />\r\n<p>Via parameter property</p>\r\n<Increment OnValueChanged=\"Add2\" />\r\n\r\n@code\r\n{\r\n    Show _showRef;\r\n\r\n    int Number { get; set;}\r\n\r\n    void Add(int nbr)\r\n    {\r\n        _showRef.Display(nbr); \r\n    }\r\n\r\n    void Add2(int nbr)\r\n    {\r\n        Number = nbr;\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentEight/Pages/Show.razor",
    "content": "Number: @Number\r\n\r\n@code {\r\n    [Parameter]\r\n    public int Number { get; set;}\r\n\r\n    public void Display(int nbr)\r\n    {\r\n        Number = nbr;\r\n        this.StateHasChanged();\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentEight/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentEight;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEight/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEight/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using ComponentEight\r\n@using ComponentEight.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentEight/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentEighteen/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEighteen/ComponentEighteen.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEighteen/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>bind:after example</h1>\r\n\r\n@Message <br/>\r\n\r\n<input @bind=\"SearchText\" @bind:after=\"PerformSearch\" placeholder=\"Please type and press tab\" />\r\n\r\n@code\r\n{\r\n    string SearchText { get; set; }\r\n\r\n    string Message { get; set; }\r\n\r\n    int _count;\r\n\r\n    void PerformSearch()\r\n    {\r\n        Message = \"Performing search \" + _count++;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEighteen/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentEighteen;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEighteen/README.md",
    "content": "# Blazor data binding after modifier\r\n\r\nThis sample demonstrate @bind:after modifier that allows to execute async code after a binding event has been completed (value has changed).\r\n\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEighteen/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEighteen/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using ComponentEighteen\r\n@using ComponentEighteen.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentEighteen/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentEleven/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEleven/ComponentEleven.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEleven/Pages/All.razor",
    "content": "\r\nA list of unmatched attributes:\r\n<ul>\r\n    @foreach(var att in Attributes)\r\n    {\r\n        <li>@att.Key = @att.Value</li>\r\n    }\r\n</ul>\r\n\r\nAge is a parameter of this component<br/>\r\nAge = @Age\r\n\r\n@code\r\n{\r\n    [Parameter(CaptureUnmatchedValues = true)]\r\n    public Dictionary<string, object> Attributes { get; set; }\r\n\r\n    [Parameter]\r\n    public short Age { get; set;}\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentEleven/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Arbitrary Parameters</h1>\r\n\r\n<All name=\"annie\" age=\"@Age\" is-working=\"true\" today=\"@Date\" />\r\n\r\n@code\r\n{\r\n    readonly DateTime Date = DateTime.UtcNow.Date;\r\n\r\n    const short Age = 33;\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEleven/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentEleven;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEleven/README.md",
    "content": "# Accept arbitrary parameters\r\n\r\nUse `[Parameter(CaptureUnmatchedValues = true)]` to capture unmatched parameters."
  },
  {
    "path": "projects/blazor-wasm/ComponentEleven/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentEleven/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using ComponentEleven\r\n@using ComponentEleven.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentEleven/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentFifteen/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFifteen/ComponentFifteen.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFifteen/Pages/Greeting.razor",
    "content": "﻿<h1>@Message @currentCount from a component</h1>\r\n\r\n<button class=\"btn btn-primary\" @onclick=\"IncrementCount\">Click me</button>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFifteen/Pages/Greeting.razor.cs",
    "content": "﻿using Microsoft.AspNetCore.Components;\r\n\r\nnamespace ComponentFifteen.Pages\r\n{\r\n    public partial class Greeting\r\n    {\r\n        [Parameter]\r\n        public string Message {get; set;}\r\n\r\n        int currentCount = 1;\r\n\r\n        void IncrementCount()\r\n        {\r\n            currentCount++;\r\n        }\r\n    }    \r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFifteen/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<Greeting Message=\"Hello World\"></Greeting>"
  },
  {
    "path": "projects/blazor-wasm/ComponentFifteen/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentFifteen;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFifteen/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFifteen/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using ComponentFifteen\r\n@using ComponentFifteen.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentFifteen/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentFive/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFive/ComponentFive.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFive/Pages/Greeting.razor",
    "content": "﻿@inherits GreetingBase\r\n\r\n<button class=\"btn btn-primary\" @onclick=\"IncrementCount\">Click me</button>\r\n\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFive/Pages/GreetingBase.cs",
    "content": "using Microsoft.AspNetCore.Components;\r\nusing System;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace ComponentFive.Pages\r\n{\r\n    public class GreetingBase : ComponentBase\r\n    {\r\n        [Parameter]\r\n        public EventCallback<int> OnUpdate { get; set; }\r\n\r\n        int _currentCount;\r\n\r\n        protected async Task IncrementCount()\r\n        {\r\n            _currentCount++;\r\n            await OnUpdate.InvokeAsync(_currentCount);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFive/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\nCount: @Increment\r\n\r\n<div style=\"margin:30px\">\r\n<i>This is a component</i>\r\n<Greeting OnUpdate=\"IncrementUpdated\"></Greeting>\r\n</div>\r\n\r\n@code\r\n{\r\n    int Increment {get;set;}\r\n\r\n    void IncrementUpdated(int inc)\r\n    {\r\n        Increment = inc;\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentFive/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentFive;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFive/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFive/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using ComponentFive\r\n@using ComponentFive.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentFive/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentFour/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFour/ComponentFour.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFour/Pages/Greeting.razor",
    "content": "﻿<button class=\"btn btn-primary\" @onclick=\"@IncrementCount\">Click me</button>\r\n\r\n@code {\r\n    [Parameter]\r\n    public EventCallback<int> OnUpdate {get; set;}\r\n\r\n    int _currentCount;\r\n\r\n    async Task IncrementCount()\r\n    {\r\n        _currentCount++;\r\n        await OnUpdate.InvokeAsync(_currentCount);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFour/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\nCount: @Increment\r\n\r\n<div style=\"margin:30px\">\r\n<i>This is a component</i>\r\n<Greeting OnUpdate=\"IncrementUpdated\"></Greeting>\r\n</div>\r\n\r\n@code\r\n{\r\n    int Increment {get;set;}\r\n\r\n    void IncrementUpdated(int inc)\r\n    {\r\n        Increment = inc;\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentFour/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentFour;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFour/README.md",
    "content": "# Handling component paramater for event handling using EventCallback<T>\r\n\r\nThis is new on Blazor 0.9. For a complete discussion on this topic, this is a useful [thread](https://github.com/aspnet/AspNetCore/issues/6351)."
  },
  {
    "path": "projects/blazor-wasm/ComponentFour/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFour/_Imports.razor",
    "content": "\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using ComponentFour\r\n@using ComponentFour.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentFour/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentFourteen/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFourteen/ComponentFourteen.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFourteen/Pages/All.razor",
    "content": "\r\n\r\n\r\n<table class=\"table\">\r\n<thead>\r\n    <tr>\r\n        <th>Key</th>\r\n        <th>Value</th>\r\n        <th>Type</th>\r\n    </tr>\r\n</thead>\r\n<tbody>\r\n    @foreach(var a in Attributes)\r\n    {\r\n        <tr>\r\n            <td>@a.Key (splat)</td>\r\n            <td>@a.Value</td>\r\n            <td>@a.Value.GetType()</td>\r\n        </tr>\r\n    }\r\n    <tr>\r\n        <td>Height (param)</td>\r\n        <td>@Height</td>\r\n        <td>@Height.GetType()</td>\r\n    </tr>\r\n    <tr>\r\n        <td>CourageStats (param)</td>\r\n        <td>@CourageStats</td>\r\n        <td>@CourageStats.GetType()</td>\r\n    </tr>\r\n    <tr>\r\n        <td>CalmnessStats (param)</td>\r\n        <td>@CalmnessStats</td>\r\n        <td>@CalmnessStats.GetType()</td>\r\n    </tr>\r\n</tbody>\r\n</table>\r\n\r\n@code\r\n{\r\n    [Parameter(CaptureUnmatchedValues = true)]\r\n    public Dictionary<string, object> Attributes { get; set; }\r\n\r\n    [Parameter]\r\n    public int Height {get; set;}\r\n\r\n    [Parameter]\r\n    public int CourageStats {get; set;}\r\n\r\n    [Parameter]\r\n    public int CalmnessStats {get; set;}\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentFourteen/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Component parameter passing behavior</h1>\r\n\r\n<All \r\n    name=\"annie\" \r\n    age=33 \r\n    Height=175 \r\n    is-working=true \r\n    ride-bike=@CanRideBike\r\n    dob=DateOfBirth \r\n    graduation-date=@DateOfGraduation \r\n    publication-date=\"@DateOfPublication\" \r\n    can-fly=@CanFly \r\n    can-swim=\"@CanSwim\"\r\n    iq=@IQ \r\n    colors=@FavoriteColors \r\n    couragestats=@CourageStats\r\n    humorstats=@HumorStats\r\n    CalmnessStats=CalmnessStats\r\n/>\r\n\r\n@code\r\n{\r\n    public bool CanRideBike { get; set;} = true;\r\n\r\n    public DateTime DateOfBirth = DateTime.Parse(\"1986-1-1\");\r\n\r\n    public DateTime DateOfGraduation = DateTime.Parse(\"2021-5-1\");\r\n\r\n    public DateTime DateOfPublication = DateTime.Parse(\"2021-10-1\");\r\n\r\n    public bool CanFly {get; set;} = false;\r\n\r\n    public bool CanSwim {get; set;} = true;\r\n\r\n    public int IQ = 200;\r\n\r\n    public List<string> FavoriteColors { get; set; } = new List<string>() { \"red\", \"green\" };\r\n\r\n    const int CourageStats = 90;\r\n\r\n    public int HumorStats { get; set; } = 99;\r\n\r\n    public int CalmnessStats {get; set; } = 55;\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFourteen/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentFourteen;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFourteen/README.md",
    "content": "# Different ways to pass data to a component\r\n\r\nThis sample demonstrates the various ways to pass parameters to a component and how it affects on how the data is perceived by the component.\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFourteen/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentFourteen/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using ComponentFourteen\r\n@using ComponentFourteen.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentFourteen/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentNine/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentNine/ComponentNine.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentNine/Pages/Increment.razor",
    "content": "\r\n<button type=\"button\" @onclick=\"Add\">Increment</button>\r\n\r\n@code\r\n{\r\n    // You need a Property + PropertyChanged event in combination to make the custom component data binding works\r\n    [Parameter]\r\n    public int Number { get; set;}\r\n\r\n    [Parameter]\r\n    public EventCallback<int> NumberChanged { get; set;}\r\n\r\n    async Task Add()\r\n    {\r\n        Number++;\r\n        await NumberChanged.InvokeAsync(Number);\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentNine/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Data Binding from Child Component property to Parent</h1>\r\n\r\n<p>If you remove bind- from bind-number at the source, the updated number from the component won't be reflected to the parent</p>\r\n<p>bind-number or bind-Number or bind-nuMBer works equally well. It is case insensitive.</p>\r\nNumber: @MagicNumber\r\n\r\n\r\n<Increment @bind-nuMBer=\"MagicNumber\" />\r\n\r\n@functions {\r\n    int MagicNumber \r\n    { \r\n        get; set;        \r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentNine/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentNine;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentNine/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentNine/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using ComponentNine\r\n@using ComponentNine.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentNine/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentNineteen/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentNineteen/ComponentNineteen.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentNineteen/Pages/Form.razor",
    "content": "<input @bind:get=\"Value\" @bind:set=\"ValueChangedHandler\" style=\"width:500px;\" />\r\n\r\n@code {\r\n    [Parameter] public string Value { get; set; }\r\n\r\n    [Parameter] public EventCallback<string> ValueChanged { get; set; }\r\n\r\n    private async Task ValueChangedHandler(string value)\r\n    {\r\n        await  ValueChanged.InvokeAsync(value);\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentNineteen/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>bind:get and bind:set example</h1>\r\n\r\n<a href=\"https://www.thrillist.com/eat/nation/funny-fortune-cookies-in-bed\">Thanks for the inspiration</a>. Type in input field and press tab.<br/><br/>\r\n\r\n@Message <br/>\r\n\r\n<Form Value=\"@Message\" ValueChanged=\"MessageChanged\" />\r\n\r\n@code\r\n{\r\n    public string Message { get; set; } = \"Pass the bill to the person your left.\";\r\n\r\n    public void MessageChanged(string value)\r\n    {\r\n        Message = value + \" in bed\";\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentNineteen/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentNineteen;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentNineteen/README.md",
    "content": "# Blazor data binding get set modifiers\r\n\r\nThis sample demonstrate @bind:get @bind:set modifier that simplify two-way data binding.\r\n\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentNineteen/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentNineteen/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using ComponentNineteen\r\n@using ComponentNineteen.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentNineteen/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeven/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeven/Calculator/Calculate.cs",
    "content": "\r\nnamespace Calculator\r\n{\r\n    public class Calculate\r\n    {\r\n        public int Double(int number) => number * 2;\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeven/ComponentSeven.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeven/Helper/ConversationHelper.cs",
    "content": "\r\nnamespace ComponentSeven.Helper\r\n{\r\n    public static class ConversationHelper\r\n    {\r\n        public static string Say() => \"Hello\";\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeven/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n@using ComponentSeven.Helper\r\n\r\nMessage: @Message\r\n<br/>\r\n<button type=\"button\" @onclick=\"Say\">Say It</button>\r\n<hr/>\r\nNumber : @Number\r\n<br/>\r\n<button type=\"button\" @onclick=\"Double\">Double It</button>\r\n\r\n@code\r\n{\r\n    string Message {get;set;}\r\n\r\n    void Say()\r\n    {\r\n        Message = ConversationHelper.Say();\r\n    }\r\n\r\n    int Number { get; set; } = 5;\r\n\r\n    void Double()\r\n    {\r\n        var calculator = new Calculator.Calculate();\r\n        Number = calculator.Double(Number);\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeven/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentSeven;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeven/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeven/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using ComponentSeven\r\n@using ComponentSeven.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeven/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeventeen/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeventeen/ComponentSeventeen.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeventeen/Pages/Greet.razor",
    "content": "\r\nBelow message is printed on @CurrentTime <br/>\r\n\r\n@Message @Name\r\n\r\n<br/><br/>\r\nLocation: @Location\r\n<br>\r\n\r\n<PersonDetails/>\r\n\r\n@code{\r\n    [CascadingParameter(Name = \"Time\")]\r\n    private DateTimeOffset CurrentTime { get; set;}\r\n\r\n    [Parameter]\r\n    public string Message { get; set; }\r\n\r\n    [CascadingParameter(Name = \"Name\")]\r\n    private string Name { get; set;}\r\n\r\n    [CascadingParameter(Name = \"CurrentLocation\")]\r\n    private string Location { get; set;}\r\n\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeventeen/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Cascading Parameter via name</h1>\r\n\r\n<CascadingValue Value=\"CurrentTime\" Name=\"Time\">\r\n    <CascadingValue Value=\"Name\" Name=\"Name\">\r\n        <CascadingValue Value=\"Location\" Name=\"CurrentLocation\">\r\n            <CascadingValue Value=\"Person\" Name=\"PersonInfo\">\r\n                <Greet Message=\"@Message\" />\r\n            </CascadingValue>\r\n        </CascadingValue>\r\n    </CascadingValue>\r\n</CascadingValue>\r\n\r\n@code\r\n{\r\n    public DateTimeOffset CurrentTime = DateTimeOffset.Now;\r\n\r\n    public string Name = \"Annie\";\r\n\r\n    public string Message { get; set; } = \"Hello world\";\r\n\r\n    public string Location { get; set; } = \"New Haven\";\r\n\r\n    public Person Person { get; set; } = new Person\r\n    {\r\n        Name = \"Annie\",\r\n        Age = 33\r\n    };\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeventeen/Pages/Person.cs",
    "content": "public class Person\r\n{\r\n    public string Name { get; set;}\r\n\r\n    public int Age { get; set;}\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeventeen/Pages/PersonDetails.razor",
    "content": "\r\nPerson 1<br/>\r\nName: @Person.Name<br/>\r\nAge: @Person.Age<br/>\r\n\r\n<br/><br/>\r\n\r\nPerson 2<br/>\r\nName: @Person2.Name<br/>\r\nAge: @Person2.Age<br/>\r\n\r\n@code {\r\n    \r\n    [CascadingParameter(Name = \"PersonInfo\")]\r\n    private Person Person { get; set;}\r\n\r\n    \r\n    [CascadingParameter(Name = \"PersonInfo\")]\r\n    private Person Person2 { get; set;}\r\n\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeventeen/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentSeventeen;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeventeen/README.md",
    "content": "# Cascading value by name\r\n\r\nThis sample demonstrates cascading value by name feature. This is a parameter that get passed through a component without having to explicitly assign them. You can pass primitives as well as complex object this way. \r\n\r\nIn this sample you will see how cascading values flow to all components.\r\n\r\nIn cascading value by type, all cascading parameters of the same type will share the same value. In cascading value by name, only parameters that match with the assigned name (and type) will receive it.\r\n\r\nBelow code is valid for example. Person and Person2 properties will receive the same value.\r\n\r\n```\r\n    [CascadingParameter(Name = \"PersonInfo\")]\r\n    private Person Person { get; set;}\r\n\r\n    \r\n    [CascadingParameter(Name = \"PersonInfo\")]\r\n    private Person Person2 { get; set;}\r\n```\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeventeen/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeventeen/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using ComponentSeventeen\r\n@using ComponentSeventeen.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentSeventeen/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentSix/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSix/ComponentSix.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSix/Pages/CounterProperty.razor",
    "content": "@Counter\r\n<br />\r\n<button type=\"button\" @onclick=\"Increment\">Increment</button>\r\n\r\n<ul>\r\n@foreach(var l in List){\r\n    <li @key=\"l\">@l</li>\r\n}\r\n</ul>\r\n\r\n<button type=\"button\" @onclick=\"AddToList\">Add to List</button>\r\n\r\n@code {\r\n    int Counter {get; set;}\r\n    List<int> List {get;set;} = new List<int>();\r\n        \r\n    Random _rand = new Random();\r\n    \r\n    public void AddToList()\r\n    {\r\n        List.Add(_rand.Next(10000));\r\n    }\r\n\r\n    public void AddToListStateHasChanged()\r\n    {\r\n        List.Add(_rand.Next(10000));\r\n        this.StateHasChanged();\r\n    }\r\n\r\n    public void Increment()\r\n    {\r\n        Counter = Counter + 1;\r\n    }\r\n\r\n    public void IncrementWithStateHasChanged()\r\n    {\r\n        Counter++;\r\n        this.StateHasChanged();\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentSix/Pages/CounterVariable.razor",
    "content": "@Counter\r\n<br/>\r\n\r\n<button type=\"button\" @onclick=\"Increment\">Increment</button>\r\n\r\n@code {\r\n    int Counter;\r\n\r\n    public void Increment()\r\n    {\r\n        Counter++;\r\n    }\r\n\r\n    public void IncrementWithStateHasChanged()\r\n    {\r\n        Counter++;\r\n        this.StateHasChanged();\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentSix/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<p>We observe here the following behaviors</p>\r\n\r\n<ul>\r\n    <li>If you call your method from the same component, you don't need StateHasChanged()</li>\r\n    <li>If you call the same method from outside the component (from parent), the method needs to call StateHasChanged() otherwise the component won't re-render the result.</li>\r\n</ul>\r\n\r\n<p>Note: Components are within red boxes.</p>\r\n\r\n<div style=\"margin:30px\">\r\n<i>Component Uses Variable</i>\r\n<div style=\"padding:10px;border:2px solid red;\">\r\n    <CounterVariable @ref=\"Variable\" />\r\n</div>\r\n<hr />\r\n<i>The following buttons come from parents</i>\r\n<br/>\r\n<button type=\"button\" @onclick=\"IncrementVariable\">Click</button>\r\n<button type=\"button\" @onclick=\"IncrementVariable2\">Click with StateHasChanged()</button>\r\n</div>\r\n\r\n<div style=\"margin:30px\">\r\n<i>Component Uses Property</i>\r\n<div style=\"padding:10px;border:2px solid red;\">\r\n    <CounterProperty @ref=\"Property\" />\r\n</div>\r\n\r\n<hr />\r\n<i>The following buttons come from parents</i>\r\n<br/>\r\n<button type=\"button\" @onclick=\"AddToPropertyList\">Add To List</button>\r\n<button type=\"button\" @onclick=\"AddToPropertyList2\">Add To List with StateHasChanged()</button>\r\n\r\n<br/><br/>\r\n<button type=\"button\" @onclick=\"IncrementProperty\">Click</button> \r\n<button type=\"button\" @onclick=\"IncrementProperty2\">Click with StateHasChanged()</button>\r\n\r\n</div>\r\n\r\n@code{\r\n    CounterVariable Variable;\r\n\r\n    CounterProperty Property;\r\n\r\n    void IncrementVariable () {\r\n        Variable.Increment();\r\n    }\r\n\r\n    void IncrementVariable2 () {\r\n        Variable.IncrementWithStateHasChanged();\r\n    }\r\n\r\n    void IncrementProperty() {\r\n        Property.Increment();\r\n    }\r\n\r\n    void IncrementProperty2() {\r\n        Property.IncrementWithStateHasChanged();\r\n    }\r\n\r\n    void AddToPropertyList(){\r\n        Property.AddToList();\r\n    }\r\n\r\n    void AddToPropertyList2(){\r\n        Property.AddToListStateHasChanged();\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentSix/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentSix;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSix/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSix/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using ComponentSix\r\n@using ComponentSix.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentSix/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentSixteen/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSixteen/ComponentSixteen.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSixteen/Pages/Greet.razor",
    "content": "\r\nBelow message is printed on @CurrentTime <br/>\r\n\r\n@Message @Name\r\n\r\n<br/><br/>\r\nLocation: @Location\r\n<p>\r\n    <strong>Note</strong> You can see here that Name parameter and Location parameter share the same cascading value because they are both string.\r\n</p>\r\n<br>\r\nPerson<br/>\r\nName: @Person.Name<br/>\r\nAge: @Person.Age<br/>\r\n\r\n@code{\r\n    [CascadingParameter]\r\n    private DateTimeOffset CurrentTime { get; set;}\r\n\r\n    [Parameter]\r\n    public string Message { get; set; }\r\n\r\n    [CascadingParameter]\r\n    private string Name { get; set;}\r\n\r\n    [CascadingParameter]\r\n    private string Location { get; set;}\r\n\r\n    [CascadingParameter]\r\n    private Person Person { get; set;}\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentSixteen/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Cascading Parameter via type</h1>\r\n\r\n<CascadingValue Value=\"CurrentTime\">\r\n    <CascadingValue Value=\"Name\">\r\n        <CascadingValue Value=\"Person\">\r\n            <Greet Message=\"@Message\" />\r\n        </CascadingValue>\r\n    </CascadingValue>\r\n</CascadingValue>\r\n\r\n@code\r\n{\r\n    public DateTimeOffset CurrentTime = DateTimeOffset.Now;\r\n\r\n    public string Name = \"Annie\";\r\n\r\n    public string Message { get; set; } = \"Hello world\";\r\n\r\n    public Person Person { get; set; } = new Person\r\n    {\r\n        Name = \"Annie\",\r\n        Age = 33\r\n    };\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSixteen/Pages/Person.cs",
    "content": "public class Person\r\n{\r\n    public string Name { get; set;}\r\n\r\n    public int Age { get; set;}\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentSixteen/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentSixteen;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSixteen/README.md",
    "content": "# Cascading value by type\r\n\r\nThis sample demonstrates cascading value by type feature. This is a parameter that get passed through a component without having to explicitly assign them.\r\n\r\nAll the parameters that share the same type will share the same value.\r\n\r\n`Name` and `Location` would share the same value because they are both `string`.\r\n\r\n```\r\n    [CascadingParameter]\r\n    private string Name { get; set;}\r\n\r\n    [CascadingParameter]\r\n    private string Location { get; set;}\r\n\r\n```"
  },
  {
    "path": "projects/blazor-wasm/ComponentSixteen/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentSixteen/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using ComponentSixteen\r\n@using ComponentSixteen.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentSixteen/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentTen/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTen/ComponentTen.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTen/Pages/Increment.razor",
    "content": "\r\n<button type=\"button\" @onclick=\"Add\">Add Number</button>\r\n\r\n@code\r\n{\r\n    // You need a Property + PropertyChanged event in combination to make the custom component data binding works\r\n    [Parameter]\r\n    public List<int> Numbers { get; set;} = new List<int>();\r\n\r\n    [Parameter]\r\n    public EventCallback<List<int>> NumbersChanged { get; set;}\r\n\r\n    Random _rnd = new Random();\r\n\r\n    async Task Add()\r\n    {\r\n        Numbers.Add(_rnd.Next());\r\n        await NumbersChanged.InvokeAsync(Numbers);\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTen/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Data Binding from Child Component property to Parent</h1>\r\n\r\nMagic Numbers\r\n\r\n<ul>\r\n    @foreach(var mn in MagicNumbers)\r\n    {\r\n        <li @key=\"mn\">@mn</li>\r\n    }    \r\n</ul>\r\n\r\n<Increment @bind-numbers=\"MagicNumbers\" />\r\n\r\n@code \r\n{\r\n    List<int> MagicNumbers { get; set; } = new List<int>(); \r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTen/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentTen;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTen/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTen/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using ComponentTen\r\n@using ComponentTen.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentTen/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentThirteen/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentThirteen/ComponentThirteen.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentThirteen/Pages/All.razor",
    "content": "\r\n<input class=\"form-field\" @attributes=\"Attributes\" type=\"text\" />\r\n\r\n@code\r\n{\r\n    [Parameter(CaptureUnmatchedValues = true)]\r\n    public Dictionary<string, object> Attributes { get; set; }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentThirteen/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Arbitrary Parameters Splatting on a form input</h1>\r\n\r\n<All @attributes=\"HtmlAttributes\"/>\r\n\r\n@code\r\n{\r\n    public Dictionary<string, object> HtmlAttributes = new Dictionary<string, object> ()\r\n    {\r\n        { \"style\", \"background-color:lightgrey;width:300px;\" },\r\n        { \"id\", \"input_id\" },\r\n        { \"placeholder\", \"This is a demo on splatting functionality\"}\r\n   };\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentThirteen/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentThirteen;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentThirteen/README.md",
    "content": "# Splatting arbitrary attributes to components using @attributes\r\n\r\nThis sample demonstrates the usage of `@attributes` attributes splatting on a form input.\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentThirteen/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentThirteen/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using ComponentThirteen\r\n@using ComponentThirteen.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentThirteen/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentThree/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentThree/ComponentThree.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentThree/Pages/Greeting.razor",
    "content": "﻿<h1>@Message @currentCount from a component</h1>\r\n\r\n<button class=\"btn btn-primary\" @onclick=\"IncrementCount\">Click me</button>\r\n\r\n@code {\r\n    [Parameter]\r\n    public string Message {get; set;}\r\n\r\n    int currentCount = 1;\r\n\r\n    void IncrementCount()\r\n    {\r\n        currentCount++;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentThree/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<PrettyBox>\r\n<i>This is a component</i>\r\n<Greeting Message=\"Hello World\" />\r\n<br/>\r\n<Wave />\r\n</PrettyBox>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentThree/Pages/PrettyBox.razor",
    "content": "\r\n\r\n<div style=\"background-color:lightblue;border:3px solid black;padding:12px;\">\r\n    @ChildContent\r\n</div>\r\n\r\n\r\n@code{\r\n    [Parameter]\r\n    public RenderFragment ChildContent {get;set;}\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentThree/Pages/Wave.razor",
    "content": "﻿<h1 style=\"color:red;\">Wave</h1>\r\n\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentThree/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentThree;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\n\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentThree/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentThree/_Imports.razor",
    "content": "\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using ComponentThree\r\n@using ComponentThree.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentThree/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwelve/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwelve/ComponentTwelve.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwelve/Pages/All.razor",
    "content": "\r\nA list of unmatched attributes:\r\n<ul>\r\n    @foreach(var att in Attributes)\r\n    {\r\n        <li>@att.Key = @att.Value</li>\r\n    }\r\n</ul>\r\n\r\n@code\r\n{\r\n    [Parameter(CaptureUnmatchedValues = true)]\r\n    public Dictionary<string, object> Attributes { get; set; }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwelve/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Arbitrary Parameters</h1>\r\n\r\n<All @attributes=\"Values\" is-lovely=true/>\r\n\r\n@code\r\n{\r\n    public List<KeyValuePair<string, object>> Values = new List<KeyValuePair<string, object>>()\r\n    {\r\n        new KeyValuePair<string, object>( \"Name\", \"Annie\" ),\r\n        new KeyValuePair<string, object>(\"Age\", 33 ),\r\n        new KeyValuePair<string, object>( \"is-working\", true)\r\n    };\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwelve/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentTwelve;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwelve/README.md",
    "content": "# Splatting arbitrary attributes to components using @attributes \r\n\r\nUse `@attributes` and a `Dictionary<string, object>` or `List<KeyValuePair<string, object>>`."
  },
  {
    "path": "projects/blazor-wasm/ComponentTwelve/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwelve/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using ComponentTwelve\r\n@using ComponentTwelve.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwelve/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwenty/CustomElement/CustomElement.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.CustomElements\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" PrivateAssets=\"all\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwenty/CustomElement/Interaction.razor",
    "content": "﻿<p>\r\n@Content\r\n</p>\r\n\r\nCount: @_count \r\n\r\n<button class=\"btn btn-primary\" @onclick=\"()=> _count++\">Click</button>\r\n\r\n@code {\r\n    private int _count = 0;\r\n    \r\n    [Parameter] public string Content { get; set; } = string.Empty;\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwenty/CustomElement/Program.cs",
    "content": "using CustomElement;\r\nusing Microsoft.AspNetCore.Components.Web;\r\nusing Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.RegisterCustomElement<Interaction>(\"pa-interaction\");\r\n\r\nawait builder.Build().RunAsync();"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwenty/CustomElement/_Imports.razor",
    "content": "﻿@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.AspNetCore.Components.WebAssembly.Http\r\n@using Microsoft.JSInterop\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwenty/README.md",
    "content": "# Blazor WebAssembly backed HTML Custom Element\r\n\r\nThis is a sample project to show how to create a Blazor WebAssembly component that can be used as a custom element in a HTML page.\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwenty/Web/Pages/Index.cshtml",
    "content": "﻿@page\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <link rel=\"stylesheet\" href=\"css/pico.min.css\">\r\n    <title>Hello, world!</title>\r\n  </head>\r\n  <body>\r\n    <main class=\"container\">\r\n      <h1>Blazor Custom Element</h1>\r\n      <pa-interaction content=\"Hello Anne\" />\r\n    </main>\r\n    <script src=\"_content/Microsoft.AspNetCore.Components.CustomElements/BlazorCustomElements.js\"></script>\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwenty/Web/Pages/_ViewImports.cshtml",
    "content": "﻿"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwenty/Web/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddRazorPages();\r\nvar app = builder.Build();\r\napp.UseWebAssemblyDebugging();\r\napp.UseBlazorFrameworkFiles();\r\napp.UseStaticFiles();\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwenty/Web/Web.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.Server\" Version=\"8.0.4\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\CustomElement\\CustomElement.csproj\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFive/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"ComponentTwentyFive.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFive/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFive/ComponentTwentyFive.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFive/ComponentTwentyFive.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ComponentTwentyFive\", \"ComponentTwentyFive.csproj\", \"{D1EBA820-93F2-4469-B764-1C467DBB4D5F}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{D1EBA820-93F2-4469-B764-1C467DBB4D5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D1EBA820-93F2-4469-B764-1C467DBB4D5F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D1EBA820-93F2-4469-B764-1C467DBB4D5F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D1EBA820-93F2-4469-B764-1C467DBB4D5F}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {12A0397E-7025-4790-AA33-47A526539D93}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFive/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Dynamic Cascading Values</h1>\r\nKeep refreshing the page to see the date and time change\r\n\r\n<InnerComponentOne />\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFive/Pages/InnerComponentOne.razor",
    "content": "<h2>Inner Component One</h2>\r\n\r\n@HelloMessage.Message\r\n\r\n<InnerComponentTwo />\r\n\r\n@code {\r\n    [CascadingParameter]\r\n    protected MessageCascade HelloMessage { get; set; } = default!;\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFive/Pages/InnerComponentTwo.razor",
    "content": "\r\n<h3>Inner Component Two</h3>\r\n\r\n@GoodbyeMessage.Message\r\n\r\n@code {\r\n    [CascadingParameter]\r\n    protected MessageCascade GoodbyeMessage { get; set; } = default!;\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFive/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing Microsoft.AspNetCore.Components;\r\nusing ComponentTwentyFive;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\nbuilder.Services.AddCascadingValue(sp => \r\n{\r\n    var msg = new MessageCascade(\"Hello World! \" + DateTime.Now);\r\n    var source = new CascadingValueSource<MessageCascade>(msg, isFixed: false);\r\n    return source;\r\n});\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n\r\npublic record MessageCascade(string Message);"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFive/README.md",
    "content": "# Setting  root level dynamic cascading values\r\n\r\nThis sample shows how to set root level **dynamic** cascading values using `CascadingValueSource`.\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFive/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFive/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using ComponentTwentyFive\r\n@using ComponentTwentyFive.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFive/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFour/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"ComponentTwentyThree.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFour/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFour/ComponentTwentyFour.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFour/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Cascading Values</h1>\r\n\r\n<InnerComponentOne />\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFour/Pages/InnerComponentOne.razor",
    "content": "<h2>Inner Component One</h2>\r\n\r\n@HelloMessage.Message\r\n\r\n<InnerComponentTwo />\r\n\r\n@code {\r\n    [CascadingParameter(Name = \"hello\")]\r\n    protected MessageCascade HelloMessage { get; set; } = default!;\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFour/Pages/InnerComponentTwo.razor",
    "content": "\r\n<h3>Inner Component Two</h3>\r\n\r\n@GoodbyeMessage.Message\r\n\r\n@code {\r\n    [CascadingParameter(Name = \"goodbye\")]\r\n    protected MessageCascade GoodbyeMessage { get; set; } = default!;\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFour/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentTwentyFour;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\nbuilder.Services.AddCascadingValue(\"hello\", sp => new MessageCascade(\"Hello World!\"));\r\nbuilder.Services.AddCascadingValue(\"goodbye\", sp => new MessageCascade(\"Goodbye World!\"));\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n\r\npublic record MessageCascade(string Message);"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFour/README.md",
    "content": "# Setting fixed root level named cascading values\r\n\r\nThis sample shows how to set root level **named** cascading values without using `<CascadingValue/>` component. \r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFour/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFour/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using ComponentTwentyFour\r\n@using ComponentTwentyFour.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyFour/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyOne/CustomElement/CustomElement.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.CustomElements\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" PrivateAssets=\"all\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyOne/CustomElement/Interaction.razor",
    "content": "﻿<p>\r\n@Content\r\n</p>\r\n\r\nCount: @_count \r\n\r\n<button class=\"btn btn-primary\" @onclick=\"()=> _count++\">Click</button>\r\n\r\n@code {\r\n    private int _count = 0;\r\n    \r\n    [Parameter] public string Content { get; set; } = string.Empty;\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyOne/CustomElement/Program.cs",
    "content": "using CustomElement;\r\nusing Microsoft.AspNetCore.Components.Web;\r\nusing Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.RegisterCustomElement<Interaction>(\"pa-interaction\");\r\n\r\nawait builder.Build().RunAsync();"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyOne/CustomElement/_Imports.razor",
    "content": "﻿@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.AspNetCore.Components.WebAssembly.Http\r\n@using Microsoft.JSInterop\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyOne/README.md",
    "content": "# How to set and get a HTML Custom Element property\r\n\r\nThis is a sample on how to get and set a  property of a HTML Custom Element created using Blazor WebAssembly.\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyOne/Web/Pages/Index.cshtml",
    "content": "﻿@page\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <link rel=\"stylesheet\" href=\"css/pico.min.css\">\r\n    <title>Hello, world!</title>\r\n  </head>\r\n  <body>\r\n    <main class=\"container\">\r\n      <h1>Blazor Custom Element</h1>\r\n      <pa-interaction id=\"interactive\"></pa-interaction>\r\n    </main>\r\n    <script src=\"_content/Microsoft.AspNetCore.Components.CustomElements/BlazorCustomElements.js\"></script>\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n\r\n    <script>\r\n      window.addEventListener('load', (event) => {\r\n        const interactive = document.getElementById(\"interactive\");\r\n        interactive.setAttribute(\"content\", \"Hello Anne\");\r\n        alert(\"content of custom element: \" + interactive.getAttribute(\"content\"));\r\n      });\r\n    </script> \r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyOne/Web/Pages/_ViewImports.cshtml",
    "content": "﻿"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyOne/Web/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddRazorPages();\r\nvar app = builder.Build();\r\napp.UseWebAssemblyDebugging();\r\napp.UseBlazorFrameworkFiles();\r\napp.UseStaticFiles();\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyOne/Web/Web.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.Server\" Version=\"8.0.4\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\CustomElement\\CustomElement.csproj\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySeven/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"ComponentTwentySix.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySeven/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySeven/ComponentTwentySeven.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySeven/ComponentTwentySeven.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ComponentTwentySeven\", \"ComponentTwentySeven.csproj\", \"{23E5009B-0E29-4D9F-8BB7-2D7183A97DCA}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{23E5009B-0E29-4D9F-8BB7-2D7183A97DCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{23E5009B-0E29-4D9F-8BB7-2D7183A97DCA}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{23E5009B-0E29-4D9F-8BB7-2D7183A97DCA}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{23E5009B-0E29-4D9F-8BB7-2D7183A97DCA}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {A0B52EB0-A57C-4AF0-9C40-C74BB7385C44}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySeven/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n@Msg1.Message <br/>\r\n@Msg2.Message\r\n\r\n@code \r\n{\r\n    [Inject(Key = \"msg1\")]\r\n    public IMessage Msg1 { get; set; }\r\n\r\n    \r\n    [Inject(Key = \"msg2\")]\r\n    public IMessage Msg2 { get; set; }\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySeven/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentTwentySeven;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\nbuilder.Services.AddKeyedSingleton<IMessage>(\"msg1\", (_, _) => new Msg(\"Hello world\"));\r\nbuilder.Services.AddKeyedSingleton<IMessage>(\"msg2\", (_, _) => new Msg(\"Goodbyeworld\"));\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n\r\n\r\npublic interface IMessage \r\n{\r\n    string Message { get; } \r\n}\r\n\r\n\r\npublic class Msg(string message) : IMessage\r\n{\r\n    public string Message => message;\r\n}\r\n\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySeven/README.md",
    "content": "# Inject keyed services into components\r\n\r\nThis sample shows how to use `[Inject(Key)]` in consuming keyed services. "
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySeven/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySeven/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using ComponentTwentySeven\r\n@using ComponentTwentySeven.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySeven/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySix/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"ComponentTwentySix.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySix/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySix/ComponentTwentySix.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySix/ComponentTwentySix.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ComponentTwentySix\", \"ComponentTwentySix.csproj\", \"{864B5B16-E06A-4657-B36C-03F5521B97A5}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{864B5B16-E06A-4657-B36C-03F5521B97A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{864B5B16-E06A-4657-B36C-03F5521B97A5}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{864B5B16-E06A-4657-B36C-03F5521B97A5}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{864B5B16-E06A-4657-B36C-03F5521B97A5}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {CF583341-A911-452F-A8D0-D6DF6B54D7C7}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySix/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Dynamic Cascading Values</h1>\r\nKeep refreshing the page to see the date and time change\r\n\r\n<InnerComponentOne />\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySix/Pages/InnerComponentOne.razor",
    "content": "<h2>Inner Component One</h2>\r\n\r\n@HelloMessage.Message\r\n\r\n@code {\r\n    [CascadingParameter(Name=\"hello\")]\r\n    protected MessageCascade HelloMessage { get; set; } = default!;\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySix/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing Microsoft.AspNetCore.Components;\r\nusing ComponentTwentySix;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\nbuilder.Services.AddCascadingValue(sp => \r\n{\r\n    var msg = new MessageCascade(\"Hello World! \" + DateTime.Now);\r\n    var source = new CascadingValueSource<MessageCascade>(\"hello\", msg, isFixed: false);\r\n    return source;\r\n});\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n\r\npublic record MessageCascade(string Message);"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySix/README.md",
    "content": "# Setting root level **named** dynamic cascading values\r\n\r\nThis sample shows how to set root level **named dynamic** cascading values using `CascadingValueSource`.\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySix/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySix/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using ComponentTwentySix\r\n@using ComponentTwentySix.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentySix/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyThree/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"ComponentTwentyThree.sln\"\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyThree/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyThree/ComponentTwentyThree.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyThree/ComponentTwentyThree.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ComponentTwentyThree\", \"ComponentTwentyThree.csproj\", \"{26B459F9-76ED-44D4-AA0F-65D28D8E7861}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{26B459F9-76ED-44D4-AA0F-65D28D8E7861}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{26B459F9-76ED-44D4-AA0F-65D28D8E7861}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{26B459F9-76ED-44D4-AA0F-65D28D8E7861}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{26B459F9-76ED-44D4-AA0F-65D28D8E7861}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {6FC14629-365F-45CC-A524-50A03305E39D}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyThree/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Cascading Values</h1>\r\n\r\n<InnerComponentOne />\r\n\r\n\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyThree/Pages/InnerComponentOne.razor",
    "content": "<h2>Inner Component One</h2>\r\n\r\n@Message.Message\r\n\r\n<InnerComponentTwo />\r\n\r\n@code {\r\n    [CascadingParameter]\r\n    protected MessageCascade Message { get; set; } = default!;\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyThree/Pages/InnerComponentTwo.razor",
    "content": "\r\n<h3>Inner Component Two</h3>\r\n\r\n@Message.Message\r\n\r\n@code {\r\n    [CascadingParameter]\r\n    protected MessageCascade Message { get; set; } = default!;\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyThree/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentTwentyThree;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\nbuilder.Services.AddCascadingValue(sp => new MessageCascade(\"Hello World!\"));\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n\r\npublic record MessageCascade(string Message);"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyThree/README.md",
    "content": "# Setting fixed root level cascading values\r\n\r\nThis sample shows how to set root level cascading values without using `<CascadingValue/>` component. \r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyThree/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyThree/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using ComponentTwentyThree\r\n@using ComponentTwentyThree.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyThree/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyTwo/CustomElement/CustomElement.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.CustomElements\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" PrivateAssets=\"all\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyTwo/CustomElement/Interaction.razor",
    "content": "﻿@using Microsoft.JSInterop\r\n@inject IJSRuntime JS\r\n\r\n\r\nCount: @Count \r\n\r\n<button class=\"btn btn-primary\"@ref=\"_buttonRef\" @onclick=\"HandleClick\">Click</button>\r\n\r\n\r\n@code {\r\n    private ElementReference _buttonRef;\r\n\r\n    [Parameter] public int Count { get; set; }\r\n    \r\n    [Parameter] public string Content { get; set; } = string.Empty;\r\n\r\n    async Task HandleClick()\r\n    {\r\n      await JS.InvokeVoidAsync(\"interaction.triggerEvent\", _buttonRef);\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyTwo/CustomElement/Program.cs",
    "content": "using CustomElement;\r\nusing Microsoft.AspNetCore.Components.Web;\r\nusing Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.RegisterCustomElement<Interaction>(\"pa-interaction\");\r\n\r\nawait builder.Build().RunAsync();"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyTwo/CustomElement/_Imports.razor",
    "content": "﻿@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.AspNetCore.Components.WebAssembly.Http\r\n@using Microsoft.JSInterop\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyTwo/README.md",
    "content": "# How to raise event from HTML Custom Element \r\n\r\nThis is a sample on how to raise an event a HTML Custom Element created using Blazor WebAssembly.\r\n\r\nThis technique I learned from [Tomasz Pęczek](https://www.tpeczek.com/2022/09/micro-frontends-in-action-with-aspnet.html).\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyTwo/Web/Pages/Index.cshtml",
    "content": "﻿@page\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <link rel=\"stylesheet\" href=\"css/pico.min.css\">\r\n    <title>Hello, world!</title>\r\n  </head>\r\n  <body>\r\n    <main class=\"container\">\r\n      <h1>Blazor Custom Element raising event</h1>\r\n      <pa-interaction id=\"interactive\"></pa-interaction>\r\n    </main>\r\n    <script src=\"_content/Microsoft.AspNetCore.Components.CustomElements/BlazorCustomElements.js\"></script>\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n\r\n  <script>\r\n      window.interaction = (function () {\r\n      return {\r\n          triggerEvent: function (el) {\r\n              el.parentElement.dispatchEvent(new CustomEvent(\"onInteractionClicked\"));\r\n          }\r\n      };\r\n  })();\r\n  </script>\r\n\r\n    <script>\r\n      window.addEventListener('load', (event) => {\r\n        const interactive = document.getElementById(\"interactive\");\r\n        let count = interactive.getAttribute(\"count\");\r\n        interactive.addEventListener(\"onInteractionClicked\", function (e) {\r\n          interactive.setAttribute(\"count\", ++count);\r\n        });\r\n      });\r\n    </script> \r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyTwo/Web/Pages/_ViewImports.cshtml",
    "content": "﻿"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyTwo/Web/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddRazorPages();\r\nvar app = builder.Build();\r\napp.UseWebAssemblyDebugging();\r\napp.UseBlazorFrameworkFiles();\r\napp.UseStaticFiles();\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwentyTwo/Web/Web.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.Server\" Version=\"8.0.4\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\CustomElement\\CustomElement.csproj\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwo/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwo/ComponentTwo.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwo/Pages/Greeting.razor",
    "content": "﻿<h1>@Message @currentCount from a component</h1>\r\n\r\n<button class=\"btn btn-primary\" @onclick=\"IncrementCount\">Click me</button>\r\n\r\n@code {\r\n    [Parameter]\r\n    public string Message {get; set;}\r\n\r\n    int currentCount = 1;\r\n\r\n    public void Say(string message)\r\n    {\r\n        Message = message;\r\n        this.StateHasChanged();\r\n    }\r\n\r\n    void IncrementCount()\r\n    {\r\n        currentCount++;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwo/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<div style=\"margin:30px\">\r\n<i>This is a component</i>\r\n<Greeting Message=\"Hello World\" @ref=\"Greeter\" ></Greeting>\r\n</div>\r\n\r\n<button class=\"btn btn-primary\" @onclick=\"Welcome\">Welcome</button>\r\n<button class=\"btn btn-primary\" @onclick=\"Goodbye\">Goodbye</button>\r\n\r\n@code\r\n{\r\n    Greeting Greeter;\r\n\r\n    void Welcome()\r\n    {\r\n        Greeter.Say(\"Welcome\");\r\n    }\r\n\r\n    void Goodbye()\r\n    {\r\n        Greeter.Say(\"Goodbye\");\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwo/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing ComponentTwo;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwo/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwo/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using ComponentTwo\r\n@using ComponentTwo.Shared"
  },
  {
    "path": "projects/blazor-wasm/ComponentTwo/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/DataBinding/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/DataBinding/DataBinding.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/DataBinding/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Two Way Data Binding</h1>\r\n<h2>Output</h2>\r\n\r\n<div>\r\n    <strong>Name</strong> : @Name \r\n    <br/>\r\n    <strong>Bio</strong> : @Bio\r\n    <br/>\r\n    <strong>Football Team</strong> : @FootballTeam\r\n    <br/>\r\n    <strong>Is Winning</strong> : @IsWinning\r\n    <br/>\r\n</div>\r\n\r\n<h2>Form</h2>\r\nName: <input type=\"text\" @bind=\"Name\" />\r\n<br/><br/>\r\nBio:\r\n<textarea @bind=\"Bio\" cols=\"50\" rows=\"5\">\r\n</textarea>\r\n<br/><br/>\r\nTeam: <select @bind=\"FootballTeam\">\r\n        <option>Arsenal</option>\r\n        <option>Liverpool</option>\r\n        <option>Manchester City</option>\r\n    </select>\r\n<br/><br/>\r\nIs Winning?: <input type=\"checkbox\" @bind=\"IsWinning\" />\r\n<br/><br/>\r\n@code\r\n{\r\n    public string Name { get; set; }   \r\n    public string Bio { get; set;}  \r\n    public string FootballTeam { get; set; }\r\n    public bool IsWinning { get; set; }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/DataBinding/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing DataBinding;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/DataBinding/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/DataBinding/_Imports.razor",
    "content": "@using System.Net.Http\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using DataBinding\r\n@using DataBinding.Shared"
  },
  {
    "path": "projects/blazor-wasm/DataBinding/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/DataBindingTwo/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/DataBindingTwo/Code/Profile.cs",
    "content": "using System.ComponentModel.DataAnnotations;\r\nusing System;\r\n\r\nnamespace DataBindingTwo.Code\r\n{\r\n    public class Profile\r\n    {\r\n        [Required]\r\n        [Display(Name = \"First Name\")]\r\n        public string FirstName { get; set; }\r\n\r\n        [Required]\r\n        [Display(Name = \"Last Name\")]\r\n        public string LastName { get; set; }\r\n\r\n        [Required]\r\n        public string Gender { get; set; }\r\n\r\n        [Required]\r\n        [Display(Name = \"Personal Bio\")]\r\n        public string PersonalBio { get; set; }\r\n\r\n        [Required]\r\n        public bool IsMarried { get; set; }\r\n\r\n        [Required]\r\n        [Range(1, 120)]\r\n        public int Age { get; set; }\r\n\r\n        [Required]\r\n        public DateTime DateOfBirth { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/DataBindingTwo/DataBindingTwo.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/DataBindingTwo/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n@using DataBindingTwo.Code\r\n\r\n<h1>Form Validation</h1>\r\n<p>Click Submit button to trigger validation</p>\r\n\r\n<div class=\"row\">\r\n    <div class=\"col-md-6\">\r\n        <EditForm Model=\"_profile\" OnValidSubmit=\"HandleValidSubmit\">\r\n            <DataAnnotationsValidator />\r\n            <ValidationSummary />\r\n            <div class=\"form-group\">\r\n                <label for=\"first_name\">First Name</label>\r\n                <InputText id=\"first_name\" @bind-Value=\"_profile.FirstName\" class=\"form-control\"/>\r\n            </div>\r\n            <div class=\"form-group\">\r\n                <label for=\"last_name\">Last Name</label>\r\n                <InputText id=\"last_name\" @bind-Value=\"_profile.LastName\"  class=\"form-control\"/> \r\n            </div>\r\n            <div class=\"form-group\">\r\n                <label for=\"gender\">Gender</label>\r\n                <InputSelect id=\"gender\" @bind-Value=\"_profile.Gender\" class=\"form-control\">\r\n                    <option value=\"\">Select Gender</option>\r\n                    <option value=\"F\">Female</option>\r\n                    <option value=\"M\">Male</option>\r\n                </InputSelect>\r\n            </div>\r\n            <div class=\"form-group\">\r\n                <label for=\"dob\">Date of Birth</label>\r\n                <InputDate id=\"dob\" @bind-Value=\"_profile.DateOfBirth\" class=\"form-control\"/>\r\n            </div>\r\n            <div class=\"form-group\">\r\n                <label for=\"age\">Age</label>\r\n                <InputNumber id=\"age\" @bind-Value=\"_profile.Age\" class=\"form-control\"/>\r\n            </div>\r\n            <div class=\"form-check\">\r\n                <InputCheckbox id=\"married_status\" @bind-Value=\"_profile.IsMarried\" class=\"form-check-input\" />\r\n                <label for=\"married_status\">Is Married?</label>\r\n            </div>\r\n            <div class=\"form-group\">\r\n                <label for=\"personal_bio\">Personal Bio</label>\r\n                <InputTextArea @bind-Value=\"_profile.PersonalBio\" class=\"form-control\"></InputTextArea>\r\n            </div>\r\n            <br/>\r\n            <button type=\"submit\">Submit</button>\r\n        </EditForm>\r\n\r\n        <br/>\r\n        <br/>\r\n        <table class=\"table\"> \r\n            <tr>\r\n                <td>Name</td>\r\n                <td>@_profile.FirstName @_profile.LastName</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Gender</td>\r\n                <td>@_profile.Gender</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Date of Birth</td>\r\n                <td>@_profile.DateOfBirth</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Age</td>\r\n                <td>@_profile.Age</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Is Married?</td>\r\n                <td>@_profile.IsMarried</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Personal Bio</td>\r\n                <td>@_profile.PersonalBio</td>\r\n            </tr>\r\n        </table>\r\n    </div>\r\n</div>\r\n\r\n@code {\r\n    private Profile _profile = new Profile();\r\n\r\n    private void HandleValidSubmit()\r\n    {\r\n        Console.WriteLine(\"OnValidSubmit\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/DataBindingTwo/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing DataBindingTwo;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/DataBindingTwo/README.MD",
    "content": "# Form Validation\r\n\r\nThis sample demonstrates `EditForm` and all of the currently supported form control in Blazor. It also shows how to perform form validation in Blazor.\r\n\r\n* InputText\r\n* InputTextArea\r\n* InputSelect\r\n* InputNumber\r\n* InputCheckbox\r\n* InputDate\r\n"
  },
  {
    "path": "projects/blazor-wasm/DataBindingTwo/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/DataBindingTwo/_Imports.razor",
    "content": "@using System.Net.Http\r\n\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.JSInterop\r\n@using DataBindingTwo\r\n@using DataBindingTwo.Shared"
  },
  {
    "path": "projects/blazor-wasm/DataBindingTwo/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Form Validation</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css\" rel=\"stylesheet\"\r\n        integrity=\"sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO\" crossorigin=\"anonymous\">\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/HelloWorld/App.razor",
    "content": "<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/HelloWorld/HelloWorld.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/HelloWorld/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n<h1>Hello, world! @currentCount</h1>\r\n<button class=\"btn btn-primary\" @onclick=\"IncrementCount\">Click me</button>\r\n\r\n@code \r\n{\r\n    int currentCount = 1;\r\n\r\n    void IncrementCount()\r\n    {\r\n        currentCount++;\r\n        \r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/HelloWorld/Pages/_Imports.razor",
    "content": "﻿@layout MainLayout\r\n"
  },
  {
    "path": "projects/blazor-wasm/HelloWorld/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing HelloWorld;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/HelloWorld/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/HelloWorld/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using HelloWorld\r\n@using HelloWorld.Shared\r\n"
  },
  {
    "path": "projects/blazor-wasm/HelloWorld/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>hello-world</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/QuickGridOne/App.razor",
    "content": "﻿<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/QuickGridOne/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n@using Microsoft.AspNetCore.Components.QuickGrid\r\n\r\n<h1>Quick Grid sample</h1>\r\n\r\n<QuickGrid Items=\"@people\" class=\"table\">\r\n    <PropertyColumn Property=\"@(p => p.PersonId)\" Title=\"ID\" Sortable=\"true\" />\r\n    <PropertyColumn Property=\"@(p => p.Name)\" Title=\"Name\" Sortable=\"true\" />\r\n    <PropertyColumn Property=\"@(p => p.BirthDate)\" Title=\"Birth date\" Format=\"yyyy-MM-dd\" Sortable=\"true\" />\r\n    <PropertyColumn Property=\"@(p => p.IsMarried)\" Title=\"Is Married\" Sortable=\"true\" />\r\n</QuickGrid>\r\n\r\n@code\r\n{\r\n    record Person(int PersonId, string Name, DateOnly BirthDate, bool IsMarried);\r\n\r\n    IQueryable<Person> people = new[]\r\n    {\r\n        new Person(10895, \"Jean Martin\", new DateOnly(1985, 3, 16), true),\r\n        new Person(10944, \"António Langa\", new DateOnly(1991, 12, 1), false),\r\n        new Person(11203, \"Julie Smith\", new DateOnly(1958, 10, 10), true),\r\n        new Person(11205, \"Nur Sari\", new DateOnly(1922, 4, 27), false),\r\n        new Person(11898, \"Jose Hernandez\", new DateOnly(2011, 5, 3), true),\r\n        new Person(12130, \"Kenji Sato\", new DateOnly(2004, 1, 9), false),\r\n    }.AsQueryable();\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/QuickGridOne/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing QuickGridOne;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/QuickGridOne/QuickGridOne.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.QuickGrid\" Version=\"8.0.0-rc.*\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.0-rc.*\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.0-rc.*\" />\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n    <Watch Include=\"**\\*.razor\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/QuickGridOne/README.md",
    "content": "# QuickGrid Component\r\n\r\nThis sample a simple usage for QuickGrid component that demonstrate the display of int, string, date, and boolean data types.\r\n\r\nYou can find more information abotu QuickGrid component [here](https://aspnet.github.io/quickgridsamples/) along with more samples and explanations. \r\n"
  },
  {
    "path": "projects/blazor-wasm/QuickGridOne/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/QuickGridOne/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.JSInterop\r\n@using QuickGridOne\r\n@using QuickGridOne.Shared"
  },
  {
    "path": "projects/blazor-wasm/QuickGridOne/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>Component</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/blazor-wasm/README.md",
    "content": "# Blazor Wasm (33)\r\n\r\nYou will find samples for Blazor, a .NET application framework for Web Assembly here. To run the sample, simply type `dotnet watch run` at the folder of each project. Make sure you pay attention which port Kestrel is running on.\r\n\r\n  * [Hello World](HelloWorld)\r\n\r\n    The smallest Blazor app you can create.\r\n\r\n  * [Component](Component)\r\n\r\n    This sample shows the simplest demonstration of a component (which is just a .cshtml file) that accept a string parameter. Notice that the folder name of the project is capitalized. That's due to this [limitation](https://github.com/aspnet/Blazor/issues/854)  e.g. the name of your folder is currently the name of the namespace used in a blazor app.\r\n\r\n    A component is represented by a `<componentname></componentname>` in the markup. \r\n\r\n  * [Component Two - Reference and Call](ComponentTwo)\r\n  \r\n    This sample shows how to refer to a component using `ref` property and call a public method of the component. We use the method `this.StateHasChanged();` to tell the component that its value has changed.\r\n\r\n    Side note: If you are using `ref` without providing corresponding property at `functions`, the compilation will fail.\r\n    \r\n  * [Component Three - Child Content](ComponentThree)\r\n\r\n    Implement a component that takes one or more child content e.g. `<parentcomponent><childcomponent1/><childcomponent2/><parentcomponent>` and renders it. \r\n\r\n    You have to provide a parameter called `ChildContent` of type `RenderFragment`. The parameter name must be `ChildContent` otherwise it won't work.\r\n\r\n  * [Component Four - Handling Custom Event from Component](ComponentFour)\r\n\r\n    This sample shows how to raise a custom event from a component and how to handle them using `EventCallback<>`.\r\n   \r\n  * [Component Five - Inherit from a ComponentBase class](ComponentFive)\r\n\r\n    This sample shows how to inherit from a `ComponentBase` class. This allows you to share common code across components. You can also use this technique to have a 'Code Behind' experience if that's your thing.\r\n\r\n  * [Component Six - When to call StateHasChanged](ComponentSix)\r\n\r\n    This sample shows different behaviors by the component depending on where you call the method from. Note: __this is still tentative. It needs more exploration__. \r\n\r\n  * [Component Seven - Plain C#](ComponentSeven)\r\n\r\n    This sample demonstrates that you can use and organize your C# classes like in an ordinary C# app.\r\n\r\n  * [Component Eight - Interactions between two components](ComponentEight)\r\n\r\n    This samples demonstrates the two way (__currently__) of facilitating interaction between two components.\r\n\r\n  * [Component Nine - Data binding from Child Component to Parent](ComponentNine)\r\n\r\n    This samples demonstrates another way on how to pass data from Child component to Parent using two way data binding. The other way is using Custom Event (see __Component Four__).\r\n\r\n  * [Component Ten - Data binding from Child Component to Parent on Collection](ComponentTen)\r\n\r\n    Similar to __Component Nine__ except that this time the property is a `List<int>` instead of an `int`.\r\n\r\n  * [Component Eleven - Capture unmatched component parameters](ComponentEleven)\r\n\r\n    Use `[Parameter(CaptureUnmatchedValues = true)]` to capture unmatched parameters.\r\n\r\n  * [Component Twelve - Splatting arbitrary parameters to components](ComponentTwelve)\r\n\r\n    Use `@attributes` and a `Dictionary<string, object>` or `List<KeyValuePair<string, object>>`.\r\n    \r\n  * [Component Thirteen - more example of attributes splatting](ComponentThirteen)\r\n\r\n    Use `@attributes` attributes splatting on an input form.\r\n\r\n  * [Component Fourteen - various ways to pass data to components](ComponentFourteen)\r\n\r\n    This sample demonstrates the various ways to pass parameters to a component and how it affects on how the data is perceived by the component.\r\n\r\n  * [Component Fifteen](ComponentFifteen)\r\n\r\n    This sample demonstrates how to use partial class in a razor component. This allows you to separate your C# code from the markup.\r\n    \r\n  * [Component Sixteen](ComponentSixteen)\r\n\r\n    This sample demonstrates cascading value by type feature. This is a parameter that get passed through a component without having to explicitly assign them. All parameters that share the type will share the value.\r\n    \r\n  * [Component Seventeen](ComponentSeventeen)\r\n\r\n    This sample demonstrates cascading value by name feature. In contrast to cascading value by type, only parameters that match the type and name will receive the value.\r\n\r\n  * [Component Eighteen](ComponentEighteen) \r\n\r\n    This sample demonstrates @bind:after modifier that allows to execute async code after a binding event has been completed (value has changed).\r\n\r\n  * [Component Nineteen](ComponentNineteen) \r\n\r\n    This sample demonstrates @bind:get @bind:set modifier that simplify two-way data binding. \r\n    \r\n  * [Component Twenty](ComponentTwenty)\r\n\r\n    This sample shows how to implement a HTML custom element using Blazor Web Assembly.\r\n\r\n  * [Component Twenty One](ComponentTwentyOne)\r\n\r\n    This sample shows how set and get a property of a HTML custom element implemented using Blazor Web Assembly.\r\n\r\n  * [Component Twenty Two](ComponentTwentyTwo)\r\n\r\n    This sample shows how to raise an event from HTML custom element implemented using Blazor Web Assembly.\r\n\r\n  * [ComponentTwentyThree](ComponentTwentyThree)\r\n\r\n    This sample shows how to set root level cascading values without using `<CascadingValue/>` component. \r\n  \r\n  * [ComponentTwentyFour](ComponentTwentyFour)\r\n\r\n    This sample shows how to set root level **named** cascading values without using `<CascadingValue/>` component. \r\n\r\n  * [ComponentTwentyFive](ComponentTwentyFive)\r\n\r\n    This sample shows how to set root level **dynamic** cascading values using `CascadingValueSource`.\r\n\r\n  * [ComponentTwentySix](ComponentTwentySix)\r\n\r\n    This sample shows how to set root level **named dynamic** cascading values using `CascadingValueSource`.\r\n\r\n  * [ComponentTwentySeven](ComponentTwentySeven)\r\n\r\n    This sample shows how to use `[Inject(Key)]` in consuming keyed services.\r\n\r\n  * [Data Binding - Form](DataBinding)\r\n\r\n    Show an example of two day databinding to form element `input=text`, `textarea`. `input=checkbox`, and `select`.\r\n\r\n  * [Date Binding - EditForm](DataBindingTwo)\r\n\r\n    Show an example of `EditForm` and its 6 input controls, including form validation.\r\n\r\n  * [RenderFragment](RenderFragment)\r\n\r\n    Show an example of `RenderFragment` or show an example of Templated component.\r\n\r\n  * [RadioButton](RadioButton)\r\n\r\n    Show an example of `RadioButton` handling.\r\n\r\n* [QuickGrid One](QuickGridOne)\r\n  \r\n  This sample demonstrates a simple usage of QuickGrid component displaying int, string, date, and boolean data types.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/blazor-wasm/RadioButton/App.razor",
    "content": "﻿<Router AppAssembly=\"@typeof(Program).Assembly\" PreferExactMatches=\"@true\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <LayoutView Layout=\"@typeof(MainLayout)\">\r\n            <p>Sorry, there's nothing at this address.</p>\r\n        </LayoutView>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/RadioButton/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>RadioButton Example</h1>\r\n\r\n<div class=\"card p-3 my-5\">\r\n    <h6>What web technology are you using?</h6>\r\n    @foreach (var item in new string[] { \"AspNetCore\", \"AspNet\", \"SomeJsThingWhatever\" })\r\n    {\r\n        <div>\r\n            <input class=\"form-check-input\"  type=\"radio\" name=\"technology\" id=\"@item\" value=\"@item\" @onchange=\"TechnologyRadioSelection\"\r\n            checked=@(TechnologyChoice.Equals(item,StringComparison.OrdinalIgnoreCase)) />\r\n            <label class=\"form-check-label\" for=\"@item\">@item</label>\r\n        </div>\r\n    }\r\n\r\n    <div class=\"py-4\">\r\n        <label>Technology selected is <b>@TechnologyChoice</b></label>\r\n    </div>\r\n</div>\r\n\r\n<div class=\"card p-3 my-5\">\r\n    <h6>What is your favorite fruit?</h6>\r\n    @foreach (var item in new string[] { \"Mango\", \"Banana\", \"Strawberry\" })\r\n    {\r\n        <div>\r\n            <input class=\"form-check-input\" type=\"radio\" name=\"fruit\" id=\"@item\" value=\"@item\" @onchange=\"FruitRadioSelection\"\r\n            checked=@(FruitChoice.Equals(item,StringComparison.OrdinalIgnoreCase)) />\r\n            <label class=\"form-check-label\" for=\"@item\">@item</label>\r\n        </div>\r\n    }\r\n\r\n    <div class=\"py-4\">\r\n        <label>Fruit selected is <b>@FruitChoice</b></label>\r\n    </div>\r\n</div>\r\n@code\r\n{\r\n    string TechnologyChoice = \"aspnetcore\";\r\n    void TechnologyRadioSelection(ChangeEventArgs args)\r\n    {\r\n        TechnologyChoice = args.Value.ToString();\r\n    }\r\n    string FruitChoice = \"Mango\";\r\n    void FruitRadioSelection(ChangeEventArgs args)\r\n    {\r\n        FruitChoice = args.Value.ToString();\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/blazor-wasm/RadioButton/Program.cs",
    "content": "using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing RadioButton;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"#app\");\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/RadioButton/README.md",
    "content": "# RadioButton\r\n\r\n`RadioButton` demo shows how to handle Radio button selection in Blazor.\r\n\r\n``` csharp\r\n@foreach (var item in new string[] { \"AspNetCore\", \"AspNet\", \"SomeJsThingWhatever\" })\r\n{\r\n    <div>\r\n        <input type=\"radio\" name=\"technology\" id=\"@item\" value=\"@item\" @onchange=\"TechnologyRadioSelection\" checked=@(TechnologyChoice.Equals(item,StringComparison.OrdinalIgnoreCase)) />\r\n        <label for=\"@item\">@item</label>\r\n    </div>\r\n}\r\n\r\n<div>\r\n    <label>Technology selected is <b>@TechnologyChoice</b></label>\r\n</div>\r\n\r\n@code\r\n{\r\n    string TechnologyChoice = \"aspnetcore\";\r\n    void TechnologyRadioSelection(ChangeEventArgs args)\r\n    {\r\n        TechnologyChoice = args.Value.ToString();\r\n    }\r\n}\r\n```\r\n\r\nContribution by [Lohit](https://github.com/lohithgn)."
  },
  {
    "path": "projects/blazor-wasm/RadioButton/RadioButton.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" PrivateAssets=\"all\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/RadioButton/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/RadioButton/_Imports.razor",
    "content": "﻿@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.AspNetCore.Components.WebAssembly.Http\r\n@using Microsoft.JSInterop\r\n@using RadioButton\r\n@using RadioButton.Shared\r\n"
  },
  {
    "path": "projects/blazor-wasm/RadioButton/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>RadioButton</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-eOJMYsd53ii+scO/bJGFsiCZc+5NDVN2yr8+0RDqr0Ql0h+rP48ckxlpbzKgwra6\" crossorigin=\"anonymous\">    \r\n    <link href=\"RadioButton.styles.css\" rel=\"stylesheet\" />\r\n</head>\r\n\r\n<body>\r\n    <div id=\"app\">Loading...</div>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-wasm/RenderFragment/App.razor",
    "content": "﻿<Router AppAssembly=\"@typeof(Program).Assembly\" PreferExactMatches=\"@true\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <LayoutView Layout=\"@typeof(MainLayout)\">\r\n            <h1>Page not found</h1>\r\n            <p>Sorry, there's nothing at this address.</p>\r\n        </LayoutView>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/blazor-wasm/RenderFragment/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>RenderFragment Example</h1>\r\n\r\n<h3>Pets</h3>\r\n\r\n<TableTemplate Items=\"pets\" Context=\"pet\">\r\n    <TableHeader>\r\n        <th>ID</th>\r\n        <th>Name</th>\r\n    </TableHeader>\r\n    <RowTemplate>\r\n        <td>@pet.PetId</td>\r\n        <td>@pet.Name</td>\r\n    </RowTemplate>\r\n</TableTemplate>\r\n\r\n<h3>People</h3>\r\n\r\n<TableTemplate Items=\"people\" Context=\"person\">\r\n    <TableHeader>\r\n        <th>First</th>\r\n        <th>Last</th>\r\n        <th>Handle</th>\r\n    </TableHeader>\r\n    <RowTemplate>\r\n        <td>@person.FirstName</td>\r\n        <td>@person.LastName</td>\r\n        <td>@person.TwitterHandle</td>\r\n    </RowTemplate>\r\n</TableTemplate>\r\n\r\n@code {\r\n    private List<Pet> pets = new()\r\n    {\r\n        new Pet { PetId = 2, Name = \"Mr. Bigglesworth\" },\r\n        new Pet { PetId = 4, Name = \"Salem Saberhagen\" },\r\n        new Pet { PetId = 7, Name = \"K-9\" }\r\n    };\r\n\r\n    private List<Person> people = new()\r\n    {\r\n        new Person { FirstName = \"Mark\", LastName = \"Otto\", TwitterHandle = \"@mdo\" },\r\n        new Person { FirstName = \"Jacob\", LastName = \"Thornton\", TwitterHandle = \"@jac\" },\r\n        new Person { FirstName = \"Larry the bird\",  TwitterHandle = \"@twitter\" },\r\n    };\r\n\r\n    private class Pet\r\n    {\r\n        public int PetId { get; set; }\r\n        public string Name { get; set; }\r\n    }\r\n\r\n    private class Person\r\n    {\r\n        public string FirstName { get; set; }\r\n        public string LastName { get; set; }\r\n        public string TwitterHandle { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/RenderFragment/Program.cs",
    "content": "using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing RenderFragment;\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"#app\");\r\nvar app = builder.Build();\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/blazor-wasm/RenderFragment/README.md",
    "content": "# RenderFragment\r\n\r\n`RenderFragment` allows a component to render output generated by outside content, whether they are static content or output generated by other components. \r\n\r\n``` csharp\r\n<table class=\"table table-striped table-bordered\">\r\n    <thead class=\"table-dark\">\r\n        <tr>@TableHeader</tr>\r\n    </thead>\r\n    <tbody>\r\n        @foreach (var item in Items)\r\n        {\r\n            <tr>@RowTemplate(item)</tr>\r\n        }\r\n    </tbody>\r\n</table>\r\n\r\n@code {\r\n    [Parameter]\r\n    public RenderFragment TableHeader { get; set; }\r\n\r\n    [Parameter]\r\n    public RenderFragment<TItem> RowTemplate { get; set; }\r\n\r\n    [Parameter]\r\n    public IReadOnlyList<TItem> Items { get; set; }\r\n}\r\n```\r\n\r\nContribution by [Lohit](https://github.com/lohithgn)."
  },
  {
    "path": "projects/blazor-wasm/RenderFragment/RenderFragment.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" PrivateAssets=\"all\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/blazor-wasm/RenderFragment/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/blazor-wasm/RenderFragment/Shared/TableTemplate.razor",
    "content": "@typeparam TItem\r\n\r\n<table class=\"table table-striped table-bordered\">\r\n    <thead class=\"table-dark\">\r\n        <tr>@TableHeader</tr>\r\n    </thead>\r\n    <tbody>\r\n        @foreach (var item in Items)\r\n        {\r\n            <tr>@RowTemplate(item)</tr>\r\n        }\r\n    </tbody>\r\n</table>\r\n\r\n@code {\r\n    [Parameter]\r\n    public RenderFragment TableHeader { get; set; }\r\n\r\n    [Parameter]\r\n    public RenderFragment<TItem> RowTemplate { get; set; }\r\n\r\n    [Parameter]\r\n    public IReadOnlyList<TItem> Items { get; set; }\r\n}"
  },
  {
    "path": "projects/blazor-wasm/RenderFragment/_Imports.razor",
    "content": "﻿@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.AspNetCore.Components.WebAssembly.Http\r\n@using Microsoft.JSInterop\r\n@using RenderFragment\r\n@using RenderFragment.Shared\r\n"
  },
  {
    "path": "projects/blazor-wasm/RenderFragment/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>RenderFragment</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-eOJMYsd53ii+scO/bJGFsiCZc+5NDVN2yr8+0RDqr0Ql0h+rP48ckxlpbzKgwra6\" crossorigin=\"anonymous\">\r\n    <link href=\"RenderFragment.styles.css\" rel=\"stylesheet\" />\r\n</head>\r\n\r\n<body>\r\n    <div id=\"app\">Loading...</div>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>\r\n"
  },
  {
    "path": "projects/blazor-wasm/build.bat",
    "content": "dotnet build Component\r\ndotnet build ComponentEight\r\ndotnet build ComponentEighteen\r\ndotnet build ComponentEleven\r\ndotnet build ComponentFifteen\r\ndotnet build ComponentFive\r\ndotnet build ComponentFour\r\ndotnet build ComponentFourteen\r\ndotnet build ComponentNine\r\ndotnet build ComponentNineteen\r\ndotnet build ComponentSeven\r\ndotnet build ComponentSeventeen\r\ndotnet build ComponentSix\r\ndotnet build ComponentSixteen\r\ndotnet build ComponentTen\r\ndotnet build ComponentThirteen\r\ndotnet build ComponentThree\r\ndotnet build ComponentTwelve\r\ndotnet build ComponentTwenty\r\ndotnet build ComponentTwentyFive\r\ndotnet build ComponentTwentyFour\r\ndotnet build ComponentTwentyOne\r\ndotnet build ComponentTwentySeven\r\ndotnet build ComponentTwentySix\r\ndotnet build ComponentTwentyThree\r\ndotnet build ComponentTwentyTwo\r\ndotnet build ComponentTwo\r\ndotnet build DataBinding\r\ndotnet build DataBindingTwo\r\ndotnet build HelloWorld\r\ndotnet build QuickGridOne\r\ndotnet build RadioButton\r\ndotnet build RenderFragment"
  },
  {
    "path": "projects/blazor-wasm/build.sh",
    "content": "#!/bin/bash\ndotnet build Component\ndotnet build ComponentEight\ndotnet build ComponentEighteen\ndotnet build ComponentEleven\ndotnet build ComponentFifteen\ndotnet build ComponentFive\ndotnet build ComponentFour\ndotnet build ComponentFourteen\ndotnet build ComponentNine\ndotnet build ComponentNineteen\ndotnet build ComponentSeven\ndotnet build ComponentSeventeen\ndotnet build ComponentSix\ndotnet build ComponentSixteen\ndotnet build ComponentTen\ndotnet build ComponentThirteen\ndotnet build ComponentThree\ndotnet build ComponentTwelve\ndotnet build ComponentTwenty/Web\ndotnet build ComponentTwentyFive\ndotnet build ComponentTwentyFour\ndotnet build ComponentTwentyOne/Web\ndotnet build ComponentTwentySeven\ndotnet build ComponentTwentySix\ndotnet build ComponentTwentyThree\ndotnet build ComponentTwentyTwo/Web\ndotnet build ComponentTwo\ndotnet build DataBinding\ndotnet build DataBindingTwo\ndotnet build HelloWorld\ndotnet build QuickGridOne\ndotnet build RadioButton\ndotnet build RenderFragment\n"
  },
  {
    "path": "projects/blazor-wasm/global.json",
    "content": "{\r\n  \"sdk\": {\r\n    \"version\": \"8.0.100\",\r\n    \"rollForward\": \"major\"\r\n  }\r\n}"
  },
  {
    "path": "projects/build.bat",
    "content": "REM dotnet build 5-0\\hello-world\r\nREM Removed obsolete/invalid entries: anonymous-id, basic\\*, bedrock\\echo, and non-existent blazor folder (was causing recursive calls).\r\nREM -------------------------------------------------------------------------------\r\nREM Dynamic section: invoke build.bat in every immediate subfolder (if present)\r\nREM This reduces manual maintenance; failures are tracked via BUILD_ERRORS flag.\r\nREM -------------------------------------------------------------------------------\r\nSETLOCAL ENABLEDELAYEDEXPANSION\r\nSET BUILD_ERRORS=0\r\nFOR /D %%D IN (*) DO (\r\n\tIF EXIST \"%%D\\build.bat\" (\r\n\t\tECHO ========= Building folder: %%D =========\r\n\t\tPUSHD \"%%D\"\r\n\t\tCALL build.bat\r\n\t\tIF ERRORLEVEL 1 (\r\n\t\t\tECHO -------- FAILED: %%D --------\r\n\t\t\tSET BUILD_ERRORS=1\r\n\t\t)\r\n\t\tPOPD\r\n\t)\r\n)\r\nIF %BUILD_ERRORS%==1 (\r\n\tECHO One or more subfolder build scripts failed.\r\n) ELSE (\r\n\tECHO All subfolder build scripts completed successfully.\r\n)\r\nENDLOCAL\r\nREM -------------------------------------------------------------------------------\r\n\r\ndotnet build application-environment\r\n\r\ndotnet build caching\\caching-1\r\ndotnet build caching\\caching-2\r\ndotnet build caching\\caching-3\r\ndotnet build caching\\caching-4\r\ndotnet build caching\\redis-cache\r\ndotnet build configurations\\configuration-1\r\ndotnet build configurations\\configuration-environment-variables\r\ndotnet build configurations\\configuration-ini\r\ndotnet build configurations\\configuration-ini-options\r\ndotnet build configurations\\configuration-options\r\ndotnet build configurations\\configuration-xml\r\ndotnet build configurations\\configuration-xml-options\r\ndotnet build connection-info\r\ndotnet build dependency-injection\\dependency-injection-1\r\ndotnet build dependency-injection\\dependency-injection-3\r\ndotnet build device-detection\r\ndotnet build diagnostics\\diagnostics-1\r\ndotnet build diagnostics\\diagnostics-2\r\ndotnet build diagnostics\\diagnostics-3\r\ndotnet build diagnostics\\diagnostics-4\r\ndotnet build diagnostics\\diagnostics-5\r\ndotnet build diagnostics\\diagnostics-6\r\ndotnet build endpoint-routing\\endpoint-routing\r\ndotnet build endpoint-routing\\endpoint-routing-2\r\ndotnet build endpoint-routing\\endpoint-routing-3\r\ndotnet build endpoint-routing\\endpoint-routing-4\r\ndotnet build endpoint-routing\\endpoint-routing-6\r\ndotnet build endpoint-routing\\new-routing\r\ndotnet build endpoint-routing\\new-routing-10\r\ndotnet build endpoint-routing\\new-routing-11\r\ndotnet build endpoint-routing\\new-routing-12\r\ndotnet build endpoint-routing\\new-routing-13\r\ndotnet build endpoint-routing\\new-routing-14\r\ndotnet build endpoint-routing\\new-routing-15\r\ndotnet build endpoint-routing\\new-routing-16\r\ndotnet build endpoint-routing\\new-routing-17\r\ndotnet build endpoint-routing\\new-routing-18\r\ndotnet build endpoint-routing\\new-routing-19\r\ndotnet build endpoint-routing\\new-routing-2\r\ndotnet build endpoint-routing\\new-routing-20\r\ndotnet build endpoint-routing\\new-routing-21\r\ndotnet build endpoint-routing\\new-routing-22\r\ndotnet build endpoint-routing\\new-routing-23\r\ndotnet build endpoint-routing\\new-routing-24\r\ndotnet build endpoint-routing\\new-routing-25\r\ndotnet build endpoint-routing\\new-routing-26\r\ndotnet build endpoint-routing\\new-routing-27\r\ndotnet build endpoint-routing\\new-routing-28\r\ndotnet build endpoint-routing\\new-routing-29\r\ndotnet build endpoint-routing\\new-routing-3\r\ndotnet build endpoint-routing\\new-routing-30\r\ndotnet build endpoint-routing\\new-routing-4\r\nREM Removed due to API changes\r\nREM dotnet build endpoint-routing\\new-routing-5\r\ndotnet build endpoint-routing\\new-routing-6\r\ndotnet build endpoint-routing\\new-routing-7\r\ndotnet build endpoint-routing\\new-routing-8\r\ndotnet build endpoint-routing\\new-routing-9\r\ndotnet build endpoint-routing\\parameter-transformer\r\ndotnet build features\\features-connection\r\ndotnet build features\\features-http-body-response\r\ndotnet build features\\features-max-request-body-size\r\ndotnet build features\\features-request-culture\r\ndotnet build features\\features-server-addresses\r\ndotnet build features\\features-server-addresses-2\r\ndotnet build features\\features-server-custom\r\ndotnet build features\\features-server-custom-override\r\ndotnet build features\\features-server-request\r\ndotnet build features\\features-session\r\ndotnet build features\\features-session-redis-2\r\ndotnet build file-provider\\file-provider-custom\r\ndotnet build file-provider\\file-provider-physical\r\ndotnet build file-provider\\serve-static-files-1\r\ndotnet build file-provider\\serve-static-files-2\r\ndotnet build file-provider\\serve-static-files-3\r\ndotnet build file-provider\\serve-static-files-4\r\ndotnet build file-provider\\serve-static-files-5\r\ndotnet build file-provider\\serve-static-files-6\r\ndotnet build generic-host\\generic-host-1\r\ndotnet build generic-host\\generic-host-2\r\ndotnet build generic-host\\generic-host-3\r\ndotnet build generic-host\\generic-host-4\r\ndotnet build generic-host\\generic-host-5\r\ndotnet build generic-host\\generic-host-configure-app\r\ndotnet build generic-host\\generic-host-configure-host\r\ndotnet build generic-host\\generic-host-configure-logging\r\ndotnet build generic-host\\generic-host-environment\r\ndotnet build generic-host\\generic-host-ihostapplicationlifetime\r\ndotnet build grpc\\grpc\\client\r\ndotnet build grpc\\grpc\\server\r\ndotnet build grpc\\grpc-10\\client\r\ndotnet build grpc\\grpc-10\\server\r\ndotnet build grpc\\grpc-11\\client\r\ndotnet build grpc\\grpc-11\\server\r\ndotnet build grpc\\grpc-2\\client\r\ndotnet build grpc\\grpc-2\\server\r\ndotnet build grpc\\grpc-3\\client\r\ndotnet build grpc\\grpc-3\\server\r\ndotnet build grpc\\grpc-4\\client\r\ndotnet build grpc\\grpc-4\\server\r\ndotnet build grpc\\grpc-5\\client\r\ndotnet build grpc\\grpc-5\\server\r\ndotnet build grpc\\grpc-6\\client\r\ndotnet build grpc\\grpc-6\\server\r\ndotnet build grpc\\grpc-7\\client\r\ndotnet build grpc\\grpc-7\\server\r\ndotnet build grpc\\grpc-8\\client\r\ndotnet build grpc\\grpc-8\\server\r\ndotnet build grpc\\grpc-9\\client\r\ndotnet build grpc\\grpc-9\\server\r\ndotnet build health-check\\health-check-1\r\ndotnet build health-check\\health-check-2\r\ndotnet build health-check\\health-check-3\r\ndotnet build health-check\\health-check-4\r\ndotnet build health-check\\health-check-5\r\ndotnet build health-check\\health-check-6\r\ndotnet build httpclientfactory\\httpclientfactory-1\r\ndotnet build httpclientfactory\\httpclientfactory-2\r\ndotnet build httpclientfactory\\httpclientfactory-3\r\ndotnet build httpclientfactory\\httpclientfactory-4\r\ndotnet build i-application-lifetime\r\ndotnet build ihosted-service\\ihosted-service-1\r\ndotnet build image-sharp\r\ndotnet build json\\json\r\ndotnet build json\\json-2\r\ndotnet build json\\json-3\r\ndotnet build json\\json-4\r\ndotnet build json\\json-5\r\ndotnet build json\\json-6\r\ndotnet build json\\json-7\r\ndotnet build json\\json-8\r\ndotnet build json\\json-9\r\ndotnet build json\\json-10\r\ndotnet build json\\json-11\r\n\r\ndotnet build localization\\localization-1\r\ndotnet build localization\\localization-2\r\ndotnet build localization\\localization-3\r\ndotnet build localization\\localization-4\r\ndotnet build localization\\localization-5\r\ndotnet build localization\\localization-6\r\ndotnet build logging\\logging-1\r\ndotnet build logging\\logging-2\r\ndotnet build mailkit\\mailkit-1\r\ndotnet build mailkit\\mailkit-2\r\ndotnet build markdown-server\r\ndotnet build markdown-server-middleware\r\ndotnet build middleware\\middleware-0\r\ndotnet build middleware\\middleware-1\r\ndotnet build middleware\\middleware-10\r\ndotnet build middleware\\middleware-11\r\ndotnet build middleware\\middleware-12\r\ndotnet build middleware\\middleware-13\r\ndotnet build middleware\\middleware-2\r\ndotnet build middleware\\middleware-3\r\ndotnet build middleware\\middleware-4\r\ndotnet build middleware\\middleware-5\r\ndotnet build middleware\\middleware-6\r\ndotnet build middleware\\middleware-7\r\ndotnet build middleware\\middleware-8\r\ndotnet build middleware\\middleware-9\r\ndotnet build mvc\\api-problem-details\r\ndotnet build mvc\\api-problem-details-2\r\ndotnet build mvc\\api-versioning\r\ndotnet build mvc\\hello-world\r\ndotnet build mvc\\jwt\r\ndotnet build mvc\\model-binding-from-query\r\ndotnet build mvc\\model-binding-from-route\r\ndotnet build mvc\\mvc-output-xml\r\ndotnet build mvc\\nswag\r\ndotnet build mvc\\nswag-2\r\ndotnet build mvc\\output-formatter-syndication\r\ndotnet build mvc\\result-filestream\r\ndotnet build mvc\\result-physicalfile\r\ndotnet build mvc\\utf8json-formatter\r\ndotnet build orchard-core\\multi-tenant\\Host\r\ndotnet build orchard-core\\routing\\ForumModule\r\ndotnet build orchard-core\\routing\\Host\r\ndotnet build orchard-core\\routing\\TicketModule\r\ndotnet build orchard-core\\routing-2\\ForumModule\r\ndotnet build orchard-core\\routing-2\\Host\r\ndotnet build orchard-core\\routing-2\\TicketModule\r\ndotnet build orchard-core\\static-files\\ForumModule\r\ndotnet build orchard-core\\static-files\\Host\r\ndotnet build password-hasher\r\ndotnet build security\\authentication-with-identity\\src\r\ndotnet build signalr\\signalr-1\\Client\r\ndotnet build signalr\\signalr-1\\Server\r\ndotnet build sse\r\ndotnet build version\r\n\r\ndotnet build sfa\\wiki\r\n\r\n\r\n"
  },
  {
    "path": "projects/build.sh",
    "content": "#!/bin/bash\n# dotnet build 5-0/hello-world\n# Removed obsolete/invalid entries: anonymous-id, basic\\*, bedrock\\echo, and non-existent blazor folder (was causing recursive calls).\n# -------------------------------------------------------------------------------\n# Dynamic section: invoke build.sh in every immediate subfolder (if present)\n# This reduces manual maintenance; failures are tracked via BUILD_ERRORS flag.\n# -------------------------------------------------------------------------------\nBUILD_ERRORS=0\nfor d in */; do\n    if [ -f \"${d}build.sh\" ]; then\n        echo \"========= Building folder: ${d} =========\"\n        pushd \"$d\" > /dev/null\n        ./build.sh\n        if [ $? -ne 0 ]; then\n            echo \"-------- FAILED: ${d} --------\"\n            BUILD_ERRORS=1\n        fi\n        popd > /dev/null\n    fi\ndone\nif [ $BUILD_ERRORS -eq 1 ]; then\n    echo \"One or more subfolder build scripts failed.\"\nelse\n    echo \"All subfolder build scripts completed successfully.\"\nfi\n# -------------------------------------------------------------------------------\n\ndotnet build application-environment\n\ndotnet build caching/caching-1\ndotnet build caching/caching-2\ndotnet build caching/caching-3\ndotnet build caching/caching-4\ndotnet build caching/redis-cache\ndotnet build configurations/configuration-1\ndotnet build configurations/configuration-environment-variables\ndotnet build configurations/configuration-ini\ndotnet build configurations/configuration-ini-options\ndotnet build configurations/configuration-options\ndotnet build configurations/configuration-xml\ndotnet build configurations/configuration-xml-options\ndotnet build connection-info\ndotnet build dependency-injection/dependency-injection-1\ndotnet build dependency-injection/dependency-injection-3\ndotnet build device-detection\ndotnet build diagnostics/diagnostics-1\ndotnet build diagnostics/diagnostics-2\ndotnet build diagnostics/diagnostics-3\ndotnet build diagnostics/diagnostics-4\ndotnet build diagnostics/diagnostics-5\ndotnet build diagnostics/diagnostics-6\ndotnet build endpoint-routing/endpoint-routing\ndotnet build endpoint-routing/endpoint-routing-2\ndotnet build endpoint-routing/endpoint-routing-3\ndotnet build endpoint-routing/endpoint-routing-4\ndotnet build endpoint-routing/endpoint-routing-6\ndotnet build endpoint-routing/new-routing\ndotnet build endpoint-routing/new-routing-10\ndotnet build endpoint-routing/new-routing-11\ndotnet build endpoint-routing/new-routing-12\ndotnet build endpoint-routing/new-routing-13\ndotnet build endpoint-routing/new-routing-14\ndotnet build endpoint-routing/new-routing-15\ndotnet build endpoint-routing/new-routing-16\ndotnet build endpoint-routing/new-routing-17\ndotnet build endpoint-routing/new-routing-18\ndotnet build endpoint-routing/new-routing-19\ndotnet build endpoint-routing/new-routing-2\ndotnet build endpoint-routing/new-routing-20\ndotnet build endpoint-routing/new-routing-21\ndotnet build endpoint-routing/new-routing-22\ndotnet build endpoint-routing/new-routing-23\ndotnet build endpoint-routing/new-routing-24\ndotnet build endpoint-routing/new-routing-25\ndotnet build endpoint-routing/new-routing-26\ndotnet build endpoint-routing/new-routing-27\ndotnet build endpoint-routing/new-routing-28\ndotnet build endpoint-routing/new-routing-29\ndotnet build endpoint-routing/new-routing-3\ndotnet build endpoint-routing/new-routing-30\ndotnet build endpoint-routing/new-routing-4\n# Removed due to API changes\n# dotnet build endpoint-routing/new-routing-5\ndotnet build endpoint-routing/new-routing-6\ndotnet build endpoint-routing/new-routing-7\ndotnet build endpoint-routing/new-routing-8\ndotnet build endpoint-routing/new-routing-9\ndotnet build endpoint-routing/parameter-transformer\ndotnet build features/features-connection\ndotnet build features/features-http-body-response\ndotnet build features/features-max-request-body-size\ndotnet build features/features-request-culture\ndotnet build features/features-server-addresses\ndotnet build features/features-server-addresses-2\ndotnet build features/features-server-custom\ndotnet build features/features-server-custom-override\ndotnet build features/features-server-request\ndotnet build features/features-session\ndotnet build features/features-session-redis-2\ndotnet build file-provider/file-provider-custom\ndotnet build file-provider/file-provider-physical\ndotnet build file-provider/serve-static-files-1\ndotnet build file-provider/serve-static-files-2\ndotnet build file-provider/serve-static-files-3\ndotnet build file-provider/serve-static-files-4\ndotnet build file-provider/serve-static-files-5\ndotnet build file-provider/serve-static-files-6\ndotnet build generic-host/generic-host-1\ndotnet build generic-host/generic-host-2\ndotnet build generic-host/generic-host-3\ndotnet build generic-host/generic-host-4\ndotnet build generic-host/generic-host-5\ndotnet build generic-host/generic-host-configure-app\ndotnet build generic-host/generic-host-configure-host\ndotnet build generic-host/generic-host-configure-logging\ndotnet build generic-host/generic-host-environment\ndotnet build generic-host/generic-host-ihostapplicationlifetime\ndotnet build grpc/grpc/client\ndotnet build grpc/grpc/server\ndotnet build grpc/grpc-10/client\ndotnet build grpc/grpc-10/server\ndotnet build grpc/grpc-11/client\ndotnet build grpc/grpc-11/server\ndotnet build grpc/grpc-2/client\ndotnet build grpc/grpc-2/server\ndotnet build grpc/grpc-3/client\ndotnet build grpc/grpc-3/server\ndotnet build grpc/grpc-4/client\ndotnet build grpc/grpc-4/server\ndotnet build grpc/grpc-5/client\ndotnet build grpc/grpc-5/server\ndotnet build grpc/grpc-6/client\ndotnet build grpc/grpc-6/server\ndotnet build grpc/grpc-7/client\ndotnet build grpc/grpc-7/server\ndotnet build grpc/grpc-8/client\ndotnet build grpc/grpc-8/server\ndotnet build grpc/grpc-9/client\ndotnet build grpc/grpc-9/server\ndotnet build health-check/health-check-1\ndotnet build health-check/health-check-2\ndotnet build health-check/health-check-3\ndotnet build health-check/health-check-4\ndotnet build health-check/health-check-5\ndotnet build health-check/health-check-6\ndotnet build httpclientfactory/httpclientfactory-1\ndotnet build httpclientfactory/httpclientfactory-2\ndotnet build httpclientfactory/httpclientfactory-3\ndotnet build httpclientfactory/httpclientfactory-4\ndotnet build i-application-lifetime\ndotnet build ihosted-service/ihosted-service-1\ndotnet build image-sharp\ndotnet build json/json\ndotnet build json/json-2\ndotnet build json/json-3\ndotnet build json/json-4\ndotnet build json/json-5\ndotnet build json/json-6\ndotnet build json/json-7\ndotnet build json/json-8\ndotnet build json/json-9\ndotnet build json/json-10\ndotnet build json/json-11\n\ndotnet build localization/localization-1\ndotnet build localization/localization-2\ndotnet build localization/localization-3\ndotnet build localization/localization-4\ndotnet build localization/localization-5\ndotnet build localization/localization-6\ndotnet build logging/logging-1\ndotnet build logging/logging-2\ndotnet build mailkit/mailkit-1\ndotnet build mailkit/mailkit-2\ndotnet build markdown-server\ndotnet build markdown-server-middleware\ndotnet build middleware/middleware-0\ndotnet build middleware/middleware-1\ndotnet build middleware/middleware-10\ndotnet build middleware/middleware-11\ndotnet build middleware/middleware-12\ndotnet build middleware/middleware-13\ndotnet build middleware/middleware-2\ndotnet build middleware/middleware-3\ndotnet build middleware/middleware-4\ndotnet build middleware/middleware-5\ndotnet build middleware/middleware-6\ndotnet build middleware/middleware-7\ndotnet build middleware/middleware-8\ndotnet build middleware/middleware-9\ndotnet build mvc/api-problem-details\ndotnet build mvc/api-problem-details-2\ndotnet build mvc/api-versioning\ndotnet build mvc/hello-world\ndotnet build mvc/jwt\ndotnet build mvc/model-binding-from-query\ndotnet build mvc/model-binding-from-route\ndotnet build mvc/mvc-output-xml\ndotnet build mvc/nswag\ndotnet build mvc/nswag-2\ndotnet build mvc/output-formatter-syndication\ndotnet build mvc/result-filestream\ndotnet build mvc/result-physicalfile\ndotnet build mvc/utf8json-formatter\ndotnet build orchard-core/multi-tenant/Host\ndotnet build orchard-core/routing/ForumModule\ndotnet build orchard-core/routing/Host\ndotnet build orchard-core/routing/TicketModule\ndotnet build orchard-core/routing-2/ForumModule\ndotnet build orchard-core/routing-2/Host\ndotnet build orchard-core/routing-2/TicketModule\ndotnet build orchard-core/static-files/ForumModule\ndotnet build orchard-core/static-files/Host\ndotnet build password-hasher\ndotnet build security/authentication-with-identity/src\ndotnet build signalr/signalr-1/Client\ndotnet build signalr/signalr-1/Server\ndotnet build sse\ndotnet build version\n\ndotnet build sfa/wiki\n"
  },
  {
    "path": "projects/caching/README.md",
    "content": "# In Memory Caching (a.k.a local cache) (5)\r\n\r\n  These samples depends on `Microsoft.Extensions.Caching.Memory` library. \r\n\r\n  * [Caching - Absolute/Sliding expiration](/projects/caching/caching-1)\r\n\r\n    This is the most basic caching you can use either by setting absolute or sliding expiration for your cache. Absolute expiration will remove your cache at a certain point in the future. Sliding expiration will remove your cache after period of inactivity.\r\n\r\n  * [Caching 2 - File dependency](/projects/caching/caching-2)\r\n    \r\n    Add file dependency to your caching so when the file changes, your cache expires. Make sure to set `cache-file.txt` to copy over to bin.\r\n\r\n  * [Caching 3 - Cache removal event](/projects/caching/caching-3)\r\n\r\n    Register callback when a cached value is removed.\r\n\r\n  * [Caching 4 - CancellationChangeToken dependency](/projects/caching/caching-4)\r\n\r\n    Bind several cache entries to a single dependency that you can reset manually.\r\n\r\n  * [Redis Caching Package](/projects/caching/redis-cache)\r\n\r\n    This sample uses the `Microsoft.Extensions.Caching.StackExchangeRedis` to store caching value in Redis.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/caching/build.bat",
    "content": "dotnet build caching-1\r\ndotnet build caching-2\r\ndotnet build caching-3\r\ndotnet build caching-4\r\ndotnet build redis-cache"
  },
  {
    "path": "projects/caching/build.sh",
    "content": "#!/bin/bash\ndotnet build caching-1\ndotnet build caching-2\ndotnet build caching-3\ndotnet build caching-4\ndotnet build redis-cache\n"
  },
  {
    "path": "projects/caching/caching-1/Program.cs",
    "content": "using Microsoft.Extensions.Caching.Memory;\r\nusing Microsoft.Extensions.FileProviders;\r\n\r\nstring CACHE_KEY = \"MyCache\";\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddMemoryCache();\r\nvar app = builder.Build();\r\n\r\nvar fileProvider = new PhysicalFileProvider(app.Environment.ContentRootPath);\r\n\r\napp.Run(async context =>\r\n{\r\n    var cache = context.RequestServices.GetService<IMemoryCache>();\r\n    var greeting = cache.Get(CACHE_KEY) as string;\r\n\r\n    //There is no existing cache, add one\r\n    if (string.IsNullOrWhiteSpace(greeting))\r\n    {\r\n        var options = new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(100));\r\n        //You can also use .SetSlidingExpiration\r\n\r\n        var message = \"Hello \" + DateTimeOffset.UtcNow.ToString();\r\n        cache.Set(CACHE_KEY, message, options);\r\n        greeting = message;\r\n    }\r\n\r\n    await context.Response.WriteAsync($\"After the first load, this greeting '{greeting}' is cached. \\nCheck the time stamp of the message compared to this current one {DateTimeOffset.UtcNow}.\\n\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/caching/caching-1/caching.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/caching/caching-2/Program.cs",
    "content": "using Microsoft.Extensions.Caching.Memory;\r\nusing Microsoft.Extensions.FileProviders;\r\n\r\nstring CACHE_KEY = \"MyCache\";\r\nstring FILE_TO_WATCH = \"cache-file.txt\";\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddMemoryCache();\r\n\r\n\r\nvar app = builder.Build();\r\n\r\nvar fileProvider = new PhysicalFileProvider(app.Environment.ContentRootPath);\r\napp.Run(async context =>\r\n{\r\n    var cache = context.RequestServices.GetService<IMemoryCache>();\r\n\r\n    var greeting = cache.Get(CACHE_KEY) as string;\r\n\r\n        //There is no existing cache, add one\r\n        if (string.IsNullOrWhiteSpace(greeting))\r\n    {\r\n        var options = new MemoryCacheEntryOptions()\r\n            .AddExpirationToken(fileProvider.Watch(FILE_TO_WATCH));\r\n\r\n        var message = \"Hello \" + DateTimeOffset.UtcNow.ToString();\r\n        cache.Set(CACHE_KEY, message, options);\r\n        greeting = message;\r\n    }\r\n\r\n    await context.Response.WriteAsync($\"After the first load, this greeting '{greeting}' is cached. \\nCheck the time stamp of the message compared to this current one {DateTimeOffset.UtcNow}.\\n\");\r\n    await context.Response.WriteAsync($\"To expire the cache, modify the file dependency located at {Path.Combine(app.Environment.ContentRootPath, FILE_TO_WATCH)} and refresh your browser.\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/caching/caching-2/cache-file.txt",
    "content": "hello there"
  },
  {
    "path": "projects/caching/caching-2/caching-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <None Update=\"cache-file.txt\">\r\n      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>\r\n    </None>\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/caching/caching-3/Program.cs",
    "content": "using Microsoft.Extensions.Caching.Memory;\r\nusing Microsoft.Extensions.FileProviders;\r\n\r\nstring CACHE_KEY = \"MyCache\";\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddMemoryCache();\r\nbuilder.Logging.ClearProviders();\r\nbuilder.Logging.AddConsole();\r\nbuilder.Logging.AddFilter((provider, category, logLevel) => !category.Contains(\"Microsoft.AspNetCore\"));\r\n\r\nvar app = builder.Build();\r\nvar fileProvider = new PhysicalFileProvider(app.Environment.ContentRootPath);\r\napp.Run(async context =>\r\n{\r\n    var log = context.RequestServices.GetService<ILoggerFactory>().CreateLogger(\"app\");\r\n\r\n    var cache = context.RequestServices.GetService<IMemoryCache>();\r\n    var greeting = cache.Get(CACHE_KEY) as string;\r\n\r\n    //There is no existing cache, add one\r\n    if (string.IsNullOrWhiteSpace(greeting))\r\n    {\r\n        var options = new MemoryCacheEntryOptions()\r\n            .SetAbsoluteExpiration(TimeSpan.FromSeconds(5))\r\n            .RegisterPostEvictionCallback((object key, object value, EvictionReason reason, object state) =>\r\n            {\r\n                if (state == null)\r\n                    log.LogInformation(\"State is null\");\r\n\r\n                log.LogInformation($\"Key '{key}' with value '{value}' was removed because of '{reason}'\");\r\n            });\r\n        //You can also use .SetSlidingExpiration\r\n\r\n        var message = \"Hello \" + DateTimeOffset.UtcNow.ToString();\r\n        cache.Set(CACHE_KEY, message, options);\r\n        greeting = message;\r\n    }\r\n\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await context.Response.WriteAsync(@\"\r\n        <html>\r\n            <body>\r\n                <p>\r\n                    The cache is set to expire in 5 seconds. Wait until 5 seconds then refresh this page. Check your console log to see the post eviction message event.  \r\n                </p>\r\n                <p>\r\n                    If you don't refresh this page, the eviction message won't be posted at the console. Here's <a href=\"\"https://github.com/aspnet/Caching/issues/353#issuecomment-333956801\"\">an explanation</a> for this behavior.\r\n                </p>\r\n            </body>\r\n        </html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/caching/caching-3/caching-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/caching/caching-4/Program.cs",
    "content": "using Microsoft.Extensions.Caching.Memory;\r\nusing Microsoft.Extensions.FileProviders;\r\nusing Microsoft.Extensions.Primitives;\r\n\r\nstring CACHE_KEY = \"MyCache\";\r\nstring CACHE_KEY_2 = \"MyCache2\";\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddMemoryCache();\r\n\r\nbuilder.Logging.ClearProviders();\r\nbuilder.Logging.AddConsole();\r\n// Filter out the noise \r\nbuilder.Logging.AddFilter((provider, category, logLevel) => !category.Contains(\"Microsoft.AspNetCore\"));\r\n\r\nvar app = builder.Build();\r\n\r\nvar fileProvider = new PhysicalFileProvider(app.Environment.ContentRootPath);\r\nvar cts = new CancellationTokenSource();\r\n\r\nint count = 0;\r\nint resetCount = 8;\r\n\r\napp.Run(async context =>\r\n{\r\n    if (context.Request.Path == \"/favicon.ico\") return;//skip favicon request\r\n\r\n    var log = context.RequestServices.GetService<ILoggerFactory>().CreateLogger(\"app\");\r\n    var cache = context.RequestServices.GetService<IMemoryCache>();\r\n    var greeting = cache.Get(CACHE_KEY) as string;\r\n\r\n    //There is no existing cache, add one\r\n    if (string.IsNullOrWhiteSpace(greeting))\r\n    {\r\n        var options = new MemoryCacheEntryOptions()\r\n            .AddExpirationToken(new CancellationChangeToken(cts.Token))\r\n            .RegisterPostEvictionCallback((object key, object value, EvictionReason reason, object state) =>\r\n            {\r\n                log.LogInformation($\"Key '{key}' with value '{value}' was removed because of '{reason}'\");\r\n            });\r\n\r\n        var message = $\"Hello   {DateTime.Now.Ticks}\";\r\n        cache.Set(CACHE_KEY, message, options);\r\n        greeting = message;\r\n    }\r\n\r\n    var greeting2 = cache.Get(CACHE_KEY_2) as string;\r\n    if (string.IsNullOrWhiteSpace(greeting2))\r\n    {\r\n        var options = new MemoryCacheEntryOptions()\r\n        .AddExpirationToken(new CancellationChangeToken(cts.Token))\r\n        .RegisterPostEvictionCallback((object key, object value, EvictionReason reason, object state) =>\r\n        {\r\n            log.LogInformation($\"Key '{key}' with value '{value}' was removed because of '{reason}'\");\r\n        });\r\n\r\n        var message = $\"Hello 2 {DateTime.UtcNow.Ticks}\";\r\n        cache.Set(CACHE_KEY_2, message, options);\r\n        greeting2 = message;\r\n    }\r\n\r\n    await context.Response.WriteAsync($\"Greeting {greeting}\\n\");\r\n    await context.Response.WriteAsync($\"Greeting {greeting2}\\n\");\r\n\r\n    count++;\r\n\r\n    if (count >= resetCount)\r\n    {\r\n        await context.Response.WriteAsync(\"Cache expired\\n\");\r\n        cts.Cancel();\r\n        count = 0;\r\n        cts = new CancellationTokenSource();\r\n    }\r\n\r\n    await context.Response.WriteAsync($\"Above greetings share the same cancellation token. They will both expire at the same time. The caches will expire if you refresh this page {resetCount} times. So far you have loaded {count} times. \\n\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/caching/caching-4/caching-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/caching/redis-cache/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#bc3215\",\r\n        \"activityBar.background\": \"#bc3215\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#06390f\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#bc3215\",\r\n        \"statusBar.background\": \"#8e2610\",\r\n        \"statusBar.debuggingBackground\": \"#10788e\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#bc3215\",\r\n        \"statusBarItem.remoteBackground\": \"#8e2610\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#8e2610\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#8e261099\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#8e2610\"\r\n}"
  },
  {
    "path": "projects/caching/redis-cache/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.Extensions.Configuration;\r\nusing Microsoft.AspNetCore.Http.Features;\r\nusing System;\r\nusing System.Text.Json;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddStackExchangeRedisCache(options =>\r\n{\r\n    options.Configuration = builder.Configuration[\"redisConnectionString\"];\r\n});\r\n\r\nbuilder.Services.AddSession();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseSession();\r\n\r\napp.Use(async (context, next)=>\r\n{\r\n    var person = new Person\r\n    {\r\n        FirstName = \"Anne\",\r\n        LastName = \"M\"\r\n    };\r\n\r\n    var session = context.Features.Get<ISessionFeature>();\r\n    try\r\n    {\r\n        session.Session.SetString(\"Message\", \"Buon giorno cuore\");\r\n        session.Session.SetInt32(\"Year\", DateTime.Now.Year);\r\n        session.Session.SetString(\"Amore\", JsonSerializer.Serialize(person));\r\n    }\r\n    catch(Exception ex)\r\n    {\r\n        await context.Response.WriteAsync($\"{ex.Message}\");\r\n    }\r\n    await next(context);\r\n});\r\n\r\napp.Run(async context =>\r\n{\r\n    var session = context.Features.Get<ISessionFeature>();\r\n    try\r\n    {\r\n        string msg = session.Session.GetString(\"Message\");\r\n        int? year = session.Session.GetInt32(\"Year\");\r\n        var amore = JsonSerializer.Deserialize<Person>(session.Session.GetString(\"Amore\"));\r\n\r\n        await context.Response.WriteAsync($\"{amore.FirstName}, {msg} {year}\");\r\n    }\r\n    catch(Exception ex)\r\n    {\r\n        await context.Response.WriteAsync($\"{ex.Message}\");\r\n    }\r\n});\r\n\r\napp.Run();\r\n\r\npublic class Person\r\n{\r\n    public string FirstName { get; set; }\r\n\r\n    public string LastName {get; set;}\r\n}\r\n"
  },
  {
    "path": "projects/caching/redis-cache/appSettings.json",
    "content": "{\r\n    \"redisConnectionString\": \"localhost:6379\",\r\n}\r\n"
  },
  {
    "path": "projects/caching/redis-cache/redis-cache.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Extensions.Caching.StackExchangeRedis\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/caching/redis-cache/redis-cache.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"redis-cache\", \"redis-cache.csproj\", \"{BC824EB5-3C00-4F92-AA77-92779383D76C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BC824EB5-3C00-4F92-AA77-92779383D76C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BC824EB5-3C00-4F92-AA77-92779383D76C}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BC824EB5-3C00-4F92-AA77-92779383D76C}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BC824EB5-3C00-4F92-AA77-92779383D76C}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {9DE75704-7216-4378-B621-CFB1AAA9EC11}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/clean.bat",
    "content": "REM dotnet clean 5-0\\hello-world\r\n\r\ndotnet clean anonymous-id\r\ndotnet clean application-environment\r\ndotnet clean basic\\hello-world\r\ndotnet clean basic\\hello-world-2\r\ndotnet clean basic\\i-host-environment\r\ndotnet clean basic\\i-webhost-environment\r\ndotnet clean basic\\iconfiguration\r\ndotnet clean bedrock\\echo\\client\r\ndotnet clean bedrock\\echo\\server\r\ndotnet clean blazor\\Component\r\ndotnet clean blazor\\ComponentEight\r\ndotnet clean blazor\\ComponentEleven\r\ndotnet clean blazor\\ComponentFifteen\r\ndotnet clean blazor\\ComponentFive\r\ndotnet clean blazor\\ComponentFour\r\ndotnet clean blazor\\ComponentFourteen\r\ndotnet clean blazor\\ComponentNine\r\ndotnet clean blazor\\ComponentSeven\r\ndotnet clean blazor\\ComponentSix\r\ndotnet clean blazor\\ComponentTen\r\ndotnet clean blazor\\ComponentThirteen\r\ndotnet clean blazor\\ComponentThree\r\ndotnet clean blazor\\ComponentTwelve\r\ndotnet clean blazor\\ComponentTwo\r\ndotnet clean blazor\\DataBinding\r\ndotnet clean blazor\\DataBindingTwo\r\ndotnet clean blazor\\HelloWorld\r\ndotnet clean blazor-ss\\ChatR\r\ndotnet clean blazor-ss\\Chatter\r\ndotnet clean blazor-ss\\DependencyInjection\r\ndotnet clean blazor-ss\\HelloWorld\r\ndotnet clean blazor-ss\\JsIntegration\r\ndotnet clean blazor-ss\\Layout\r\ndotnet clean blazor-ss\\MultiApps\\App1\r\ndotnet clean blazor-ss\\MultiApps\\App2\r\ndotnet clean blazor-ss\\MultiApps\\AppHost\r\ndotnet clean blazor-ss\\RssReader\r\ndotnet clean blazor-ss\\RssReader-2\r\ndotnet clean blazor-ss\\StartingVariation\r\ndotnet clean caching\\caching-1\r\ndotnet clean caching\\caching-2\r\ndotnet clean caching\\caching-3\r\ndotnet clean caching\\caching-4\r\ndotnet clean caching\\redis-cache\r\ndotnet clean configurations\\configuration-1\r\ndotnet clean configurations\\configuration-environment-variables\r\ndotnet clean configurations\\configuration-ini\r\ndotnet clean configurations\\configuration-ini-options\r\ndotnet clean configurations\\configuration-options\r\ndotnet clean configurations\\configuration-xml\r\ndotnet clean configurations\\configuration-xml-options\r\ndotnet clean connection-info\r\ndotnet clean dependency-injection\\dependency-injection-1\r\ndotnet clean dependency-injection\\dependency-injection-3\r\ndotnet clean device-detection\r\ndotnet clean diagnostics\\diagnostics-1\r\ndotnet clean diagnostics\\diagnostics-2\r\ndotnet clean diagnostics\\diagnostics-3\r\ndotnet clean diagnostics\\diagnostics-4\r\ndotnet clean diagnostics\\diagnostics-5\r\ndotnet clean diagnostics\\diagnostics-6\r\ndotnet clean endpoint-routing\\endpoint-routing\r\ndotnet clean endpoint-routing\\endpoint-routing-2\r\ndotnet clean endpoint-routing\\endpoint-routing-3\r\ndotnet clean endpoint-routing\\endpoint-routing-4\r\ndotnet clean endpoint-routing\\endpoint-routing-5\r\ndotnet clean endpoint-routing\\endpoint-routing-6\r\ndotnet clean endpoint-routing\\new-routing\r\ndotnet clean endpoint-routing\\new-routing-10\r\ndotnet clean endpoint-routing\\new-routing-11\r\ndotnet clean endpoint-routing\\new-routing-12\r\ndotnet clean endpoint-routing\\new-routing-13\r\ndotnet clean endpoint-routing\\new-routing-14\r\ndotnet clean endpoint-routing\\new-routing-15\r\ndotnet clean endpoint-routing\\new-routing-16\r\ndotnet clean endpoint-routing\\new-routing-17\r\ndotnet clean endpoint-routing\\new-routing-18\r\ndotnet clean endpoint-routing\\new-routing-19\r\ndotnet clean endpoint-routing\\new-routing-2\r\ndotnet clean endpoint-routing\\new-routing-20\r\ndotnet clean endpoint-routing\\new-routing-21\r\ndotnet clean endpoint-routing\\new-routing-22\r\ndotnet clean endpoint-routing\\new-routing-23\r\ndotnet clean endpoint-routing\\new-routing-24\r\ndotnet clean endpoint-routing\\new-routing-25\r\ndotnet clean endpoint-routing\\new-routing-26\r\ndotnet clean endpoint-routing\\new-routing-27\r\ndotnet clean endpoint-routing\\new-routing-28\r\ndotnet clean endpoint-routing\\new-routing-29\r\ndotnet clean endpoint-routing\\new-routing-3\r\ndotnet clean endpoint-routing\\new-routing-30\r\ndotnet clean endpoint-routing\\new-routing-4\r\ndotnet clean endpoint-routing\\new-routing-5\r\ndotnet clean endpoint-routing\\new-routing-6\r\ndotnet clean endpoint-routing\\new-routing-7\r\ndotnet clean endpoint-routing\\new-routing-8\r\ndotnet clean endpoint-routing\\new-routing-9\r\ndotnet clean endpoint-routing\\parameter-transformer\r\ndotnet clean features\\features-connection\r\ndotnet clean features\\features-http-body-response\r\ndotnet clean features\\features-max-request-body-size\r\ndotnet clean features\\features-request-culture\r\ndotnet clean features\\features-server-addresses\r\ndotnet clean features\\features-server-addresses-2\r\ndotnet clean features\\features-server-custom\r\ndotnet clean features\\features-server-custom-override\r\ndotnet clean features\\features-server-request\r\ndotnet clean features\\features-session\r\ndotnet clean features\\features-session-redis-2\r\ndotnet clean file-provider\\file-provider-custom\r\ndotnet clean file-provider\\file-provider-physical\r\ndotnet clean file-provider\\serve-static-files-1\r\ndotnet clean file-provider\\serve-static-files-2\r\ndotnet clean file-provider\\serve-static-files-3\r\ndotnet clean file-provider\\serve-static-files-4\r\ndotnet clean file-provider\\serve-static-files-5\r\ndotnet clean file-provider\\serve-static-files-6\r\ndotnet clean generic-host\\generic-host-1\r\ndotnet clean generic-host\\generic-host-2\r\ndotnet clean generic-host\\generic-host-3\r\ndotnet clean generic-host\\generic-host-4\r\ndotnet clean generic-host\\generic-host-5\r\ndotnet clean generic-host\\generic-host-configure-app\r\ndotnet clean generic-host\\generic-host-configure-host\r\ndotnet clean generic-host\\generic-host-configure-logging\r\ndotnet clean generic-host\\generic-host-environment\r\ndotnet clean generic-host\\generic-host-ihostapplicationlifetime\r\ndotnet clean grpc\\grpc\\client\r\ndotnet clean grpc\\grpc\\server\r\ndotnet clean grpc\\grpc-10\\client\r\ndotnet clean grpc\\grpc-10\\server\r\ndotnet clean grpc\\grpc-11\\client\r\ndotnet clean grpc\\grpc-11\\server\r\ndotnet clean grpc\\grpc-2\\client\r\ndotnet clean grpc\\grpc-2\\server\r\ndotnet clean grpc\\grpc-3\\client\r\ndotnet clean grpc\\grpc-3\\server\r\ndotnet clean grpc\\grpc-4\\client\r\ndotnet clean grpc\\grpc-4\\server\r\ndotnet clean grpc\\grpc-5\\client\r\ndotnet clean grpc\\grpc-5\\server\r\ndotnet clean grpc\\grpc-6\\client\r\ndotnet clean grpc\\grpc-6\\server\r\ndotnet clean grpc\\grpc-7\\client\r\ndotnet clean grpc\\grpc-7\\server\r\ndotnet clean grpc\\grpc-8\\client\r\ndotnet clean grpc\\grpc-8\\server\r\ndotnet clean grpc\\grpc-9\\client\r\ndotnet clean grpc\\grpc-9\\server\r\ndotnet clean health-check\\health-check-1\r\ndotnet clean health-check\\health-check-2\r\ndotnet clean health-check\\health-check-3\r\ndotnet clean health-check\\health-check-4\r\ndotnet clean health-check\\health-check-5\r\ndotnet clean health-check\\health-check-6\r\ndotnet clean http-status-codes\r\ndotnet clean httpclientfactory\\httpclientfactory-1\r\ndotnet clean httpclientfactory\\httpclientfactory-2\r\ndotnet clean httpclientfactory\\httpclientfactory-3\r\ndotnet clean httpclientfactory\\httpclientfactory-4\r\ndotnet clean i-application-lifetime\r\ndotnet clean ihosted-service\\ihosted-service-1\r\ndotnet clean image-sharp\r\ndotnet clean json\\json\r\ndotnet clean json\\json-2\r\ndotnet clean json\\json-3\r\ndotnet clean json\\json-4\r\ndotnet clean json\\json-5\r\ndotnet clean json\\json-6\r\ndotnet clean json\\json-7\r\ndotnet clean json\\json-8\r\ndotnet clean json\\json-9\r\ndotnet clean localization\\localization-1\r\ndotnet clean localization\\localization-2\r\ndotnet clean localization\\localization-3\r\ndotnet clean localization\\localization-4\r\ndotnet clean localization\\localization-5\r\ndotnet clean localization\\localization-6\r\ndotnet clean logging\\logging-1\r\ndotnet clean logging\\logging-2\r\ndotnet clean mailkit\\mailkit-1\r\ndotnet clean mailkit\\mailkit-2\r\ndotnet clean markdown-server\r\ndotnet clean markdown-server-middleware\r\ndotnet clean media-type-names\r\ndotnet clean media-type-names-2\r\ndotnet clean middleware\\middleware-0\r\ndotnet clean middleware\\middleware-1\r\ndotnet clean middleware\\middleware-10\r\ndotnet clean middleware\\middleware-11\r\ndotnet clean middleware\\middleware-12\r\ndotnet clean middleware\\middleware-2\r\ndotnet clean middleware\\middleware-3\r\ndotnet clean middleware\\middleware-4\r\ndotnet clean middleware\\middleware-5\r\ndotnet clean middleware\\middleware-6\r\ndotnet clean middleware\\middleware-7\r\ndotnet clean middleware\\middleware-8\r\ndotnet clean middleware\\middleware-9\r\ndotnet clean mvc\\api-problem-details\r\ndotnet clean mvc\\api-problem-details-2\r\ndotnet clean mvc\\api-versioning\r\ndotnet clean mvc\\hello-world\r\ndotnet clean mvc\\jwt\r\ndotnet clean mvc\\localization\\mvc-localization-1\r\ndotnet clean mvc\\localization\\mvc-localization-2\r\ndotnet clean mvc\\localization\\mvc-localization-3\r\ndotnet clean mvc\\localization\\mvc-localization-4\r\ndotnet clean mvc\\localization\\mvc-localization-5\r\ndotnet clean mvc\\localization\\mvc-localization-6\r\ndotnet clean mvc\\localization\\mvc-localization-7\\src\\ProjectWithResources\r\ndotnet clean mvc\\localization\\mvc-localization-7\\src\\Web\r\ndotnet clean mvc\\localization\\mvc-localization-8\r\ndotnet clean mvc\\localization\\mvc-localization-9\r\ndotnet clean mvc\\model-binding-from-query\r\ndotnet clean mvc\\model-binding-from-route\r\ndotnet clean mvc\\mvc-output-xml\r\ndotnet clean mvc\\nswag\r\ndotnet clean mvc\\nswag-2\r\ndotnet clean mvc\\output-formatter-syndication\r\ndotnet clean mvc\\razor-class-library\\razor-class-library-1\\src\\RazorClassLibrary1\r\ndotnet clean mvc\\razor-class-library\\razor-class-library-1\\src\\RazorClassLibrary2\r\ndotnet clean mvc\\razor-class-library\\razor-class-library-1\\src\\WebApplication\r\ndotnet clean mvc\\razor-class-library\\razor-class-library-with-controllers\\src\\RazorClassLibrary1\r\ndotnet clean mvc\\razor-class-library\\razor-class-library-with-controllers\\src\\WebApplication\r\ndotnet clean mvc\\razor-class-library\\razor-class-library-with-static-files\\src\\RazorClassLibraries.Mvc.Core\r\ndotnet clean mvc\\razor-class-library\\razor-class-library-with-static-files\\src\\RazorClassLibrary1\r\ndotnet clean mvc\\razor-class-library\\razor-class-library-with-static-files\\src\\RazorClassLibrary2\r\ndotnet clean mvc\\razor-class-library\\razor-class-library-with-static-files\\src\\WebApplication\r\ndotnet clean mvc\\result-filestream\r\ndotnet clean mvc\\result-physicalfile\r\ndotnet clean mvc\\routing\\routing-1\r\ndotnet clean mvc\\routing\\routing-2\r\ndotnet clean mvc\\routing\\routing-3\r\ndotnet clean mvc\\routing\\routing-4\r\ndotnet clean mvc\\routing\\routing-5\r\ndotnet clean mvc\\routing\\routing-6\r\ndotnet clean mvc\\routing\\routing-7\r\ndotnet clean mvc\\routing\\routing-8\r\ndotnet clean mvc\\routing\\routing-9\r\ndotnet clean mvc\\tag-helper\\tag-helper-1\r\ndotnet clean mvc\\tag-helper\\tag-helper-2\r\ndotnet clean mvc\\tag-helper\\tag-helper-3\r\ndotnet clean mvc\\tag-helper\\tag-helper-4\r\ndotnet clean mvc\\tag-helper\\tag-helper-5\r\ndotnet clean mvc\\tag-helper\\tag-helper-img\r\ndotnet clean mvc\\tag-helper\\tag-helper-link\r\ndotnet clean mvc\\utf8json-formatter\r\ndotnet clean mvc\\view-component\\view-component-1\r\ndotnet clean mvc\\view-component\\view-component-2\r\ndotnet clean mvc\\view-component\\view-component-3\r\ndotnet clean mvc\\view-component\\view-component-4\r\ndotnet clean newtonsoft-json\r\ndotnet clean orchard-core\\multi-tenant\\Host\r\ndotnet clean orchard-core\\routing\\ForumModule\r\ndotnet clean orchard-core\\routing\\Host\r\ndotnet clean orchard-core\\routing\\TicketModule\r\ndotnet clean orchard-core\\routing-2\\ForumModule\r\ndotnet clean orchard-core\\routing-2\\Host\r\ndotnet clean orchard-core\\routing-2\\TicketModule\r\ndotnet clean orchard-core\\static-files\\ForumModule\r\ndotnet clean orchard-core\\static-files\\Host\r\ndotnet clean password-hasher\r\ndotnet clean razor-pages\\custom-html-generator\r\ndotnet clean razor-pages\\hello-world\r\ndotnet clean razor-pages\\razor\\razor-1\r\ndotnet clean razor-pages\\razor\\razor-2\r\ndotnet clean razor-pages\\razor-pages-basic\r\ndotnet clean razor-pages\\razor-pages-mvc\r\ndotnet clean razor-pages\\routing\r\ndotnet clean razor-pages\\routing-2\r\ndotnet clean request\\anti-forgery\r\ndotnet clean request\\cookies-1\r\ndotnet clean request\\cookies-2\r\ndotnet clean request\\form-upload-file\r\ndotnet clean request\\form-values\r\ndotnet clean request\\query-string-1\r\ndotnet clean request\\query-string-2\r\ndotnet clean request\\query-string-3\r\ndotnet clean request\\request-headers\r\ndotnet clean request\\request-headers-names\r\ndotnet clean request\\request-headers-typed\r\ndotnet clean request\\request-verb\r\ndotnet clean response\\compression-response\r\ndotnet clean response\\response-buffering\r\ndotnet clean response\\response-header\r\ndotnet clean response\\trailing-headers\r\ndotnet clean rewrite\\rewrite-1\r\ndotnet clean rewrite\\rewrite-2\r\ndotnet clean rewrite\\rewrite-3\r\ndotnet clean rewrite\\rewrite-4\r\ndotnet clean rewrite\\rewrite-5\r\ndotnet clean rewrite\\rewrite-6\r\ndotnet clean security\\authentication-with-identity\\src\r\ndotnet clean signalr\\signalr-1\\Client\r\ndotnet clean signalr\\signalr-1\\Server\r\ndotnet clean sse\r\ndotnet clean startup\\env-development\r\ndotnet clean startup\\no-startup\r\ndotnet clean startup\\startup-basic\r\ndotnet clean startup\\startup-basic-multiple\r\ndotnet clean startup\\startup-basic-multiple-environment\r\ndotnet clean startup\\startup-basic-multiple-urls\r\ndotnet clean startup\\startup-capture-errors\r\ndotnet clean startup\\startup-custom-name\r\ndotnet clean startup\\startup-istartupfilter\r\ndotnet clean startup\\startup-multiple-configure-environment\r\ndotnet clean startup\\startup-multiple-configure-environment-services\r\ndotnet clean startup\\suppress-status-messages\r\ndotnet clean syndications\\syndication-1\r\ndotnet clean syndications\\syndication-2\r\ndotnet clean syndications\\syndication-3\r\ndotnet clean uri-helper\\uri-helper-build-absolute\r\ndotnet clean uri-helper\\uri-helper-from-absolute\r\ndotnet clean uri-helper\\uri-helper-get-display-url\r\ndotnet clean uri-helper\\uri-helper-get-encoded-path-and-query\r\ndotnet clean uri-helper\\uri-helper-get-encoded-url\r\ndotnet clean version\r\ndotnet clean web-sockets\\web-sockets-1\r\ndotnet clean web-sockets\\web-sockets-2\r\ndotnet clean web-sockets\\web-sockets-3\r\ndotnet clean web-sockets\\web-sockets-4\r\ndotnet clean web-sockets\\web-sockets-5\r\ndotnet clean web-utilities\\web-utilities-query-helpers\r\ndotnet clean web-utilities\\web-utilities-query-helpers-2\r\ndotnet clean web-utilities\\web-utilities-reason-phrases\r\n"
  },
  {
    "path": "projects/clean.sh",
    "content": "#!/bin/bash\n# dotnet clean 5-0/hello-world\n\ndotnet clean anonymous-id\ndotnet clean application-environment\ndotnet clean basic/hello-world\ndotnet clean basic/hello-world-2\ndotnet clean basic/i-host-environment\ndotnet clean basic/i-webhost-environment\ndotnet clean basic/iconfiguration\ndotnet clean bedrock/echo/client\ndotnet clean bedrock/echo/server\ndotnet clean blazor/Component\ndotnet clean blazor/ComponentEight\ndotnet clean blazor/ComponentEleven\ndotnet clean blazor/ComponentFifteen\ndotnet clean blazor/ComponentFive\ndotnet clean blazor/ComponentFour\ndotnet clean blazor/ComponentFourteen\ndotnet clean blazor/ComponentNine\ndotnet clean blazor/ComponentSeven\ndotnet clean blazor/ComponentSix\ndotnet clean blazor/ComponentTen\ndotnet clean blazor/ComponentThirteen\ndotnet clean blazor/ComponentThree\ndotnet clean blazor/ComponentTwelve\ndotnet clean blazor/ComponentTwo\ndotnet clean blazor/DataBinding\ndotnet clean blazor/DataBindingTwo\ndotnet clean blazor/HelloWorld\ndotnet clean blazor-ss/ChatR\ndotnet clean blazor-ss/Chatter\ndotnet clean blazor-ss/DependencyInjection\ndotnet clean blazor-ss/HelloWorld\ndotnet clean blazor-ss/JsIntegration\ndotnet clean blazor-ss/Layout\ndotnet clean blazor-ss/MultiApps/App1\ndotnet clean blazor-ss/MultiApps/App2\ndotnet clean blazor-ss/MultiApps/AppHost\ndotnet clean blazor-ss/RssReader\ndotnet clean blazor-ss/RssReader-2\ndotnet clean blazor-ss/StartingVariation\ndotnet clean caching/caching-1\ndotnet clean caching/caching-2\ndotnet clean caching/caching-3\ndotnet clean caching/caching-4\ndotnet clean caching/redis-cache\ndotnet clean configurations/configuration-1\ndotnet clean configurations/configuration-environment-variables\ndotnet clean configurations/configuration-ini\ndotnet clean configurations/configuration-ini-options\ndotnet clean configurations/configuration-options\ndotnet clean configurations/configuration-xml\ndotnet clean configurations/configuration-xml-options\ndotnet clean connection-info\ndotnet clean dependency-injection/dependency-injection-1\ndotnet clean dependency-injection/dependency-injection-3\ndotnet clean device-detection\ndotnet clean diagnostics/diagnostics-1\ndotnet clean diagnostics/diagnostics-2\ndotnet clean diagnostics/diagnostics-3\ndotnet clean diagnostics/diagnostics-4\ndotnet clean diagnostics/diagnostics-5\ndotnet clean diagnostics/diagnostics-6\ndotnet clean endpoint-routing/endpoint-routing\ndotnet clean endpoint-routing/endpoint-routing-2\ndotnet clean endpoint-routing/endpoint-routing-3\ndotnet clean endpoint-routing/endpoint-routing-4\ndotnet clean endpoint-routing/endpoint-routing-5\ndotnet clean endpoint-routing/endpoint-routing-6\ndotnet clean endpoint-routing/new-routing\ndotnet clean endpoint-routing/new-routing-10\ndotnet clean endpoint-routing/new-routing-11\ndotnet clean endpoint-routing/new-routing-12\ndotnet clean endpoint-routing/new-routing-13\ndotnet clean endpoint-routing/new-routing-14\ndotnet clean endpoint-routing/new-routing-15\ndotnet clean endpoint-routing/new-routing-16\ndotnet clean endpoint-routing/new-routing-17\ndotnet clean endpoint-routing/new-routing-18\ndotnet clean endpoint-routing/new-routing-19\ndotnet clean endpoint-routing/new-routing-2\ndotnet clean endpoint-routing/new-routing-20\ndotnet clean endpoint-routing/new-routing-21\ndotnet clean endpoint-routing/new-routing-22\ndotnet clean endpoint-routing/new-routing-23\ndotnet clean endpoint-routing/new-routing-24\ndotnet clean endpoint-routing/new-routing-25\ndotnet clean endpoint-routing/new-routing-26\ndotnet clean endpoint-routing/new-routing-27\ndotnet clean endpoint-routing/new-routing-28\ndotnet clean endpoint-routing/new-routing-29\ndotnet clean endpoint-routing/new-routing-3\ndotnet clean endpoint-routing/new-routing-30\ndotnet clean endpoint-routing/new-routing-4\ndotnet clean endpoint-routing/new-routing-5\ndotnet clean endpoint-routing/new-routing-6\ndotnet clean endpoint-routing/new-routing-7\ndotnet clean endpoint-routing/new-routing-8\ndotnet clean endpoint-routing/new-routing-9\ndotnet clean endpoint-routing/parameter-transformer\ndotnet clean features/features-connection\ndotnet clean features/features-http-body-response\ndotnet clean features/features-max-request-body-size\ndotnet clean features/features-request-culture\ndotnet clean features/features-server-addresses\ndotnet clean features/features-server-addresses-2\ndotnet clean features/features-server-custom\ndotnet clean features/features-server-custom-override\ndotnet clean features/features-server-request\ndotnet clean features/features-session\ndotnet clean features/features-session-redis-2\ndotnet clean file-provider/file-provider-custom\ndotnet clean file-provider/file-provider-physical\ndotnet clean file-provider/serve-static-files-1\ndotnet clean file-provider/serve-static-files-2\ndotnet clean file-provider/serve-static-files-3\ndotnet clean file-provider/serve-static-files-4\ndotnet clean file-provider/serve-static-files-5\ndotnet clean file-provider/serve-static-files-6\ndotnet clean generic-host/generic-host-1\ndotnet clean generic-host/generic-host-2\ndotnet clean generic-host/generic-host-3\ndotnet clean generic-host/generic-host-4\ndotnet clean generic-host/generic-host-5\ndotnet clean generic-host/generic-host-configure-app\ndotnet clean generic-host/generic-host-configure-host\ndotnet clean generic-host/generic-host-configure-logging\ndotnet clean generic-host/generic-host-environment\ndotnet clean generic-host/generic-host-ihostapplicationlifetime\ndotnet clean grpc/grpc/client\ndotnet clean grpc/grpc/server\ndotnet clean grpc/grpc-10/client\ndotnet clean grpc/grpc-10/server\ndotnet clean grpc/grpc-11/client\ndotnet clean grpc/grpc-11/server\ndotnet clean grpc/grpc-2/client\ndotnet clean grpc/grpc-2/server\ndotnet clean grpc/grpc-3/client\ndotnet clean grpc/grpc-3/server\ndotnet clean grpc/grpc-4/client\ndotnet clean grpc/grpc-4/server\ndotnet clean grpc/grpc-5/client\ndotnet clean grpc/grpc-5/server\ndotnet clean grpc/grpc-6/client\ndotnet clean grpc/grpc-6/server\ndotnet clean grpc/grpc-7/client\ndotnet clean grpc/grpc-7/server\ndotnet clean grpc/grpc-8/client\ndotnet clean grpc/grpc-8/server\ndotnet clean grpc/grpc-9/client\ndotnet clean grpc/grpc-9/server\ndotnet clean health-check/health-check-1\ndotnet clean health-check/health-check-2\ndotnet clean health-check/health-check-3\ndotnet clean health-check/health-check-4\ndotnet clean health-check/health-check-5\ndotnet clean health-check/health-check-6\ndotnet clean http-status-codes\ndotnet clean httpclientfactory/httpclientfactory-1\ndotnet clean httpclientfactory/httpclientfactory-2\ndotnet clean httpclientfactory/httpclientfactory-3\ndotnet clean httpclientfactory/httpclientfactory-4\ndotnet clean i-application-lifetime\ndotnet clean ihosted-service/ihosted-service-1\ndotnet clean image-sharp\ndotnet clean json/json\ndotnet clean json/json-2\ndotnet clean json/json-3\ndotnet clean json/json-4\ndotnet clean json/json-5\ndotnet clean json/json-6\ndotnet clean json/json-7\ndotnet clean json/json-8\ndotnet clean json/json-9\ndotnet clean localization/localization-1\ndotnet clean localization/localization-2\ndotnet clean localization/localization-3\ndotnet clean localization/localization-4\ndotnet clean localization/localization-5\ndotnet clean localization/localization-6\ndotnet clean logging/logging-1\ndotnet clean logging/logging-2\ndotnet clean mailkit/mailkit-1\ndotnet clean mailkit/mailkit-2\ndotnet clean markdown-server\ndotnet clean markdown-server-middleware\ndotnet clean media-type-names\ndotnet clean media-type-names-2\ndotnet clean middleware/middleware-0\ndotnet clean middleware/middleware-1\ndotnet clean middleware/middleware-10\ndotnet clean middleware/middleware-11\ndotnet clean middleware/middleware-12\ndotnet clean middleware/middleware-2\ndotnet clean middleware/middleware-3\ndotnet clean middleware/middleware-4\ndotnet clean middleware/middleware-5\ndotnet clean middleware/middleware-6\ndotnet clean middleware/middleware-7\ndotnet clean middleware/middleware-8\ndotnet clean middleware/middleware-9\ndotnet clean mvc/api-problem-details\ndotnet clean mvc/api-problem-details-2\ndotnet clean mvc/api-versioning\ndotnet clean mvc/hello-world\ndotnet clean mvc/jwt\ndotnet clean mvc/localization/mvc-localization-1\ndotnet clean mvc/localization/mvc-localization-2\ndotnet clean mvc/localization/mvc-localization-3\ndotnet clean mvc/localization/mvc-localization-4\ndotnet clean mvc/localization/mvc-localization-5\ndotnet clean mvc/localization/mvc-localization-6\ndotnet clean mvc/localization/mvc-localization-7/src/ProjectWithResources\ndotnet clean mvc/localization/mvc-localization-7/src/Web\ndotnet clean mvc/localization/mvc-localization-8\ndotnet clean mvc/localization/mvc-localization-9\ndotnet clean mvc/model-binding-from-query\ndotnet clean mvc/model-binding-from-route\ndotnet clean mvc/mvc-output-xml\ndotnet clean mvc/nswag\ndotnet clean mvc/nswag-2\ndotnet clean mvc/output-formatter-syndication\ndotnet clean mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary1\ndotnet clean mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary2\ndotnet clean mvc/razor-class-library/razor-class-library-1/src/WebApplication\ndotnet clean mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1\ndotnet clean mvc/razor-class-library/razor-class-library-with-controllers/src/WebApplication\ndotnet clean mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibraries.Mvc.Core\ndotnet clean mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1\ndotnet clean mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2\ndotnet clean mvc/razor-class-library/razor-class-library-with-static-files/src/WebApplication\ndotnet clean mvc/result-filestream\ndotnet clean mvc/result-physicalfile\ndotnet clean mvc/routing/routing-1\ndotnet clean mvc/routing/routing-2\ndotnet clean mvc/routing/routing-3\ndotnet clean mvc/routing/routing-4\ndotnet clean mvc/routing/routing-5\ndotnet clean mvc/routing/routing-6\ndotnet clean mvc/routing/routing-7\ndotnet clean mvc/routing/routing-8\ndotnet clean mvc/routing/routing-9\ndotnet clean mvc/tag-helper/tag-helper-1\ndotnet clean mvc/tag-helper/tag-helper-2\ndotnet clean mvc/tag-helper/tag-helper-3\ndotnet clean mvc/tag-helper/tag-helper-4\ndotnet clean mvc/tag-helper/tag-helper-5\ndotnet clean mvc/tag-helper/tag-helper-img\ndotnet clean mvc/tag-helper/tag-helper-link\ndotnet clean mvc/utf8json-formatter\ndotnet clean mvc/view-component/view-component-1\ndotnet clean mvc/view-component/view-component-2\ndotnet clean mvc/view-component/view-component-3\ndotnet clean mvc/view-component/view-component-4\ndotnet clean newtonsoft-json\ndotnet clean orchard-core/multi-tenant/Host\ndotnet clean orchard-core/routing/ForumModule\ndotnet clean orchard-core/routing/Host\ndotnet clean orchard-core/routing/TicketModule\ndotnet clean orchard-core/routing-2/ForumModule\ndotnet clean orchard-core/routing-2/Host\ndotnet clean orchard-core/routing-2/TicketModule\ndotnet clean orchard-core/static-files/ForumModule\ndotnet clean orchard-core/static-files/Host\ndotnet clean password-hasher\ndotnet clean razor-pages/custom-html-generator\ndotnet clean razor-pages/hello-world\ndotnet clean razor-pages/razor/razor-1\ndotnet clean razor-pages/razor/razor-2\ndotnet clean razor-pages/razor-pages-basic\ndotnet clean razor-pages/razor-pages-mvc\ndotnet clean razor-pages/routing\ndotnet clean razor-pages/routing-2\ndotnet clean request/anti-forgery\ndotnet clean request/cookies-1\ndotnet clean request/cookies-2\ndotnet clean request/form-upload-file\ndotnet clean request/form-values\ndotnet clean request/query-string-1\ndotnet clean request/query-string-2\ndotnet clean request/query-string-3\ndotnet clean request/request-headers\ndotnet clean request/request-headers-names\ndotnet clean request/request-headers-typed\ndotnet clean request/request-verb\ndotnet clean response/compression-response\ndotnet clean response/response-buffering\ndotnet clean response/response-header\ndotnet clean response/trailing-headers\ndotnet clean rewrite/rewrite-1\ndotnet clean rewrite/rewrite-2\ndotnet clean rewrite/rewrite-3\ndotnet clean rewrite/rewrite-4\ndotnet clean rewrite/rewrite-5\ndotnet clean rewrite/rewrite-6\ndotnet clean security/authentication-with-identity/src\ndotnet clean signalr/signalr-1/Client\ndotnet clean signalr/signalr-1/Server\ndotnet clean sse\ndotnet clean startup/env-development\ndotnet clean startup/no-startup\ndotnet clean startup/startup-basic\ndotnet clean startup/startup-basic-multiple\ndotnet clean startup/startup-basic-multiple-environment\ndotnet clean startup/startup-basic-multiple-urls\ndotnet clean startup/startup-capture-errors\ndotnet clean startup/startup-custom-name\ndotnet clean startup/startup-istartupfilter\ndotnet clean startup/startup-multiple-configure-environment\ndotnet clean startup/startup-multiple-configure-environment-services\ndotnet clean startup/suppress-status-messages\ndotnet clean syndications/syndication-1\ndotnet clean syndications/syndication-2\ndotnet clean syndications/syndication-3\ndotnet clean uri-helper/uri-helper-build-absolute\ndotnet clean uri-helper/uri-helper-from-absolute\ndotnet clean uri-helper/uri-helper-get-display-url\ndotnet clean uri-helper/uri-helper-get-encoded-path-and-query\ndotnet clean uri-helper/uri-helper-get-encoded-url\ndotnet clean version\ndotnet clean web-sockets/web-sockets-1\ndotnet clean web-sockets/web-sockets-2\ndotnet clean web-sockets/web-sockets-3\ndotnet clean web-sockets/web-sockets-4\ndotnet clean web-sockets/web-sockets-5\ndotnet clean web-utilities/web-utilities-query-helpers\ndotnet clean web-utilities/web-utilities-query-helpers-2\ndotnet clean web-utilities/web-utilities-reason-phrases\n"
  },
  {
    "path": "projects/configurations/README.md",
    "content": "# Configurations (10)\r\n\r\n  This section is all about configuration, from memory configuration to INI, JSON and XML.\r\n\r\n  * [Configuration](/projects/configurations/configuration-1)\r\n\r\n    This is the 'hello world' of configuration. Just use `WebApplication.Configuration` read/write values to/from it.\r\n\r\n  * [Configuration - Options](/projects/configurations/configuration-options)\r\n\r\n    Use IOptions at the most basic.\r\n\r\n  * [Configuration - Environment variables](/projects/configurations/configuration-environment-variables)\r\n\r\n    Load environment variables and display all of them.\r\n\r\n  * [Configuration - INI file](/projects/configurations/configuration-ini)\r\n\r\n    Read from INI file. \r\n\r\n  * [Configuration - INI file - Options](/projects/configurations/configuration-ini-options)\r\n\r\n    Read from INI file (with nested keys) and IOptions. \r\n\r\n  * [Configuration - XML file](/projects/configurations/configuration-xml)\r\n\r\n    Read from XML file. \r\n\r\n    **Note**: This Xml Configuration provider does not support repeated element.\r\n\r\n    The following configuration settings will break:\r\n\r\n    ```\r\n    <appSettings>\r\n      <add key=\"webpages:Version\" value=\"3.0.0.0\" />\r\n      <add key=\"webpages:Enabled\" value=\"false\" />\r\n    </appSettings>\r\n    ```\r\n\r\n    On the other hand you can get unlimited nested elements and also attributes.\r\n\r\n  * [Configuration - XML file - Options](/projects/configurations/configuration-xml-options)\r\n\r\n    Read from XML file and use IOptions. \r\n\r\n  * [Configuration - Bind Option](/project/configurations/configuration-bind-option)\r\n\r\n    Read related configuration values using the options pattern\r\n\r\n    Thanks to [@khusroohayat](https://twitter.com/mangopaki).\r\n\r\n  * [Configuration - IOption](/project/configurations/configuration-IOption)\r\n\r\n    Read related configuration values using the IOptions interface\r\n\r\n    Thanks to [@khusroohayat](https://twitter.com/mangopaki).\r\n\r\n * [Configuration - IOption Array](/projects/configurations/configuration-IOption-array)\r\n   Bind array values from appsettings.json and read them using the IOptions interface \r\n\r\ndotnet8"
  },
  {
    "path": "projects/configurations/build.bat",
    "content": "dotnet build configuration-1\r\ndotnet build configuration-bind-option\r\ndotnet build configuration-environment-variables\r\ndotnet build configuration-ini\r\ndotnet build configuration-ini-options\r\ndotnet build configuration-IOption\r\ndotnet build configuration-IOption-array\r\ndotnet build configuration-options\r\ndotnet build configuration-xml\r\ndotnet build configuration-xml-options"
  },
  {
    "path": "projects/configurations/build.sh",
    "content": "#!/bin/bash\ndotnet build configuration-1\ndotnet build configuration-bind-option\ndotnet build configuration-environment-variables\ndotnet build configuration-ini\ndotnet build configuration-ini-options\ndotnet build configuration-IOption\ndotnet build configuration-IOption-array\ndotnet build configuration-options\ndotnet build configuration-xml\ndotnet build configuration-xml-options\n"
  },
  {
    "path": "projects/configurations/configuration-1/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.Configuration[\"message\"] = \"hello world\";\r\napp.Run(context =>\r\n{\r\n    return context.Response.WriteAsync($\"{app.Configuration[\"message\"]}\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/configurations/configuration-1/configuration.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/configurations/configuration-IOption/Program.cs",
    "content": "using Microsoft.Extensions.Options;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.Configure<MyOptions>(builder.Configuration.GetSection(\"MyOptions\"));\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", (IOptions<MyOptions> optionsDelegate) => \r\n    optionsDelegate.Value.Option2\r\n);\r\n\r\napp.Run();\r\n\r\n\r\npublic class MyOptions\r\n{\r\n    public string Option1 { get; set; } = string.Empty;\r\n    public int Option2 { get; set; }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/configurations/configuration-IOption/appsettings.json",
    "content": "{\r\n  \"MyOptions\": {\r\n    \"Option1\": \"Value from Dev app settings\",\r\n    \"Option2\": 999\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/configurations/configuration-IOption/configuration-IOption.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/configurations/configuration-IOption-array/Program.cs",
    "content": "using Microsoft.Extensions.Options;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.Configure<ArrayOptions>(builder.Configuration);\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", (IOptions<ArrayOptions> options) => options.Value.Integers);\r\n\r\napp.Run();\r\n\r\nclass ArrayOptions\r\n{\r\n    public int[] Integers { get; set; }\r\n}"
  },
  {
    "path": "projects/configurations/configuration-IOption-array/appsettings.json",
    "content": "{\r\n  \"Integers\": [\r\n    1,\r\n    2,\r\n    3,\r\n    4,\r\n    5\r\n  ]\r\n}"
  },
  {
    "path": "projects/configurations/configuration-IOption-array/configuration-ioption-array.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/configurations/configuration-bind-option/Program.cs",
    "content": "﻿var builder = WebApplication.CreateBuilder();\r\n\r\nConfigurationManager configuration = builder.Configuration;\r\n\r\nvar app = builder.Build();\r\n\r\napp.Run(context =>\r\n{\r\n    var positionOptions = new PositionOptions();\r\n    configuration.GetSection(PositionOptions.Position).Bind(positionOptions);\r\n\r\n    return context.Response.WriteAsync($\"Title: {positionOptions.Title} \\n\" +\r\n                       $\"Name: {positionOptions.Name}\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\npublic class PositionOptions\r\n{\r\n    public const string Position = \"Position\";\r\n\r\n    public string Title { get; set; } = String.Empty;\r\n    public string Name { get; set; } = String.Empty;\r\n}\r\n"
  },
  {
    "path": "projects/configurations/configuration-bind-option/README.md",
    "content": "# Bind options\r\n\r\nRead related configuration values using the options pattern.\r\n\r\nThanks to [@khusroohayat](https://twitter.com/mangopaki)."
  },
  {
    "path": "projects/configurations/configuration-bind-option/appSettings.json",
    "content": "{\r\n  \"Position\": {\r\n    \"Title\": \"Editor\",\r\n    \"Name\": \"Joe Smith\"\r\n  }\r\n}"
  },
  {
    "path": "projects/configurations/configuration-bind-option/configuration-bind-option.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/configurations/configuration-environment-variables/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Configuration.AddEnvironmentVariables();\r\nvar app = builder.Build();\r\n\r\napp.Run(async context =>\r\n{\r\n    //Obviously you need to be careful with GetDebugView()\r\n    await context.Response.WriteAsync((app.Configuration as IConfigurationRoot).GetDebugView());\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/configurations/configuration-environment-variables/configuration-environment-variables.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/configurations/configuration-ini/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Configuration.SetBasePath(Directory.GetCurrentDirectory()).AddIniFile(\"settings.ini\");\r\n\r\nvar app = builder.Build();\r\napp.Run(async context =>\r\n{\r\n    foreach (var c in app.Configuration.AsEnumerable())\r\n    {\r\n        await context.Response.WriteAsync($\"{c.Key} = {c.Value}\\n\");\r\n    }\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/configurations/configuration-ini/configuration-ini.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/configurations/configuration-ini/settings.ini",
    "content": "[webpages]\r\nvalue=3.0.0.0\r\n\r\n[config]\r\npassword=pwg\r\nusername=user\r\nserver=localhost\r\nport=30\r\n\r\n[app]\r\npassword=secret\r\nuser=admin\r\n;nested support \r\npriorities:task=1 \r\npriorities:limit=100\r\nprivacy:individual:sharedkey=1000 \r\nprivacy:individual:publickey=300 \r\nprivacy:organization=Umbrella Corp. \r\n"
  },
  {
    "path": "projects/configurations/configuration-ini-options/Program.cs",
    "content": "using Microsoft.Extensions.Options;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Configuration.SetBasePath(Directory.GetCurrentDirectory()).AddIniFile(\"settings.ini\");\r\nbuilder.Services.AddOptions();\r\nbuilder.Services.Configure<IniOptions>(builder.Configuration);\r\n\r\nvar app = builder.Build();\r\n\r\napp.Run(async context =>\r\n{\r\n    var options = context.RequestServices.GetService<IOptions<IniOptions>>().Value;\r\n\r\n    var res = context.Response;\r\n\r\n    await res.WriteAsync($\"webpages:value : {options.WebPages.Value}\\n\");\r\n    await res.WriteAsync($\"config.password : {options.Config.Password}\\n\");\r\n    await res.WriteAsync($\"config.username : {options.Config.Username}\\n\");\r\n    await res.WriteAsync($\"config.server : {options.Config.Server}\\n\");\r\n    await res.WriteAsync($\"config.port : {options.Config.Port}\\n\");\r\n    await res.WriteAsync($\"config.googleMap : {options.GoogleMap}\\n\");\r\n    await res.WriteAsync($\"app:password : {options.App.Password} \\n\");\r\n    await res.WriteAsync($\"app:user : {options.App.User} \\n\");\r\n    await res.WriteAsync($\"app:priorities:task : {options.App.Priorities.Task} \\n\");\r\n    await res.WriteAsync($\"app:priorities:limit : {options.App.Priorities.Limit} \\n\");\r\n    await res.WriteAsync($\"app:privacy:individual:sharedKey : {options.App.Privacy.Individual.SharedKey}\\n\");\r\n    await res.WriteAsync($\"app:privacy:individual:publicKey : {options.App.Privacy.Individual.PublicKey}\\n\");\r\n    await res.WriteAsync($\"app:privacy:organization : {options.App.Privacy.Organization}\\n\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class IniOptions\r\n{\r\n    public IniOptionsWebPages WebPages { get; set; }\r\n\r\n    public class IniOptionsWebPages\r\n    {\r\n        public string Value { get; set; }\r\n    }\r\n\r\n    public IniOptionsConfig Config { get; set; }\r\n\r\n    public class IniOptionsConfig\r\n    {\r\n        public string Password { get; set; }\r\n        public string Username { get; set; }\r\n\r\n        public string Server { get; set; }\r\n\r\n        public int Port { get; set; }\r\n    }\r\n\r\n    public string GoogleMap { get; set; }\r\n\r\n    public IniOptionsApp App { get; set; }\r\n\r\n    public class IniOptionsApp\r\n    {\r\n        public string Password { get; set; }\r\n\r\n        public string User { get; set; }\r\n\r\n        public IniOptionsAppPriorities Priorities { get; set; }\r\n\r\n        public class IniOptionsAppPriorities\r\n        {\r\n            public int Task { get; set; }\r\n\r\n            public int Limit { get; set; }\r\n        }\r\n\r\n        public IniOptionsPrivacy Privacy { get; set; }\r\n\r\n        public class IniOptionsPrivacy\r\n        {\r\n            public IniOptionsPrivacyKeys Individual { get; set; }\r\n\r\n            public string Organization { get; set; }\r\n\r\n            public class IniOptionsPrivacyKeys\r\n            {\r\n                public string SharedKey { get; set; }\r\n\r\n                public string PublicKey { get; set; }\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/configurations/configuration-ini-options/configuration-ini-options.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/configurations/configuration-ini-options/settings.ini",
    "content": "[webpages]\r\nvalue=3.0.0.0\r\n\r\n[config]\r\npassword=pwg\r\nusername=user\r\nserver=localhost\r\nport=30\r\n\r\n[app]\r\npassword=secret\r\nuser=admin\r\n;nested support \r\npriorities:task=1 \r\npriorities:limit=100\r\nprivacy:individual:sharedkey=1000 \r\nprivacy:individual:publickey=300 \r\nprivacy:organization=Umbrella Corp. \r\n"
  },
  {
    "path": "projects/configurations/configuration-options/Program.cs",
    "content": "using Microsoft.Extensions.Options;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.Configure<ApplicationOptions>(o =>\r\n{\r\n    o.Name = \"Options Sample\";\r\n    o.MaximumLimit = 10;\r\n});\r\n\r\nvar app = builder.Build();\r\napp.Run(context =>\r\n{\r\n    var options = context.RequestServices.GetService<IOptions<ApplicationOptions>>();\r\n\r\n    return context.Response.WriteAsync($\"Settings Name : {options.Value.Name}  - Maximum limit : {options.Value.MaximumLimit}\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class ApplicationOptions\r\n{\r\n    public string Name { get; set; }\r\n\r\n    public int MaximumLimit { get; set; }\r\n}\r\n"
  },
  {
    "path": "projects/configurations/configuration-options/configuration-options.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/configurations/configuration-xml/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Configuration.SetBasePath(Directory.GetCurrentDirectory()).AddXmlFile(\"settings.xml\");\r\n\r\nvar app = builder.Build();\r\napp.Run(async (context) =>\r\n{\r\n    foreach (var c in app.Configuration.AsEnumerable())\r\n    {\r\n        await context.Response.WriteAsync($\"{c.Key} = {app.Configuration[c.Key]}\\n\");\r\n    }\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/configurations/configuration-xml/configuration-xml.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/configurations/configuration-xml/settings.xml",
    "content": "  <appSettings>\r\n    <!-- Bloody Microsoft.Extensions.Configuration.Xml does not suported repeated element -->\r\n    <webpages value=\"3.0.0.0\" />\r\n    <config password=\"pwg\" username=\"user\" server=\"localhost\" port=\"30\"/>\r\n    <googleMap>XXXXXXXX</googleMap>\r\n    <app>\r\n        <password>secret</password>\r\n        <user>admin</user>\r\n        <priorities task=\"1\" limit=\"100\" />\r\n        <privacy>\r\n            <individual>\r\n                <sharedKey>1000</sharedKey>\r\n                <publicKey>300</publicKey>\r\n            </individual>\r\n            <organization></organization>\r\n        </privacy>\r\n    </app>\r\n  </appSettings>"
  },
  {
    "path": "projects/configurations/configuration-xml-options/Program.cs",
    "content": "using Microsoft.Extensions.Options;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Configuration.SetBasePath(Directory.GetCurrentDirectory()).AddXmlFile(\"settings.xml\");\r\nbuilder.Services.AddOptions();\r\nbuilder.Services.Configure<XmlOptions>(builder.Configuration);\r\n\r\nvar app = builder.Build();\r\n\r\napp.Run(async (context) =>\r\n{\r\n    var options = context.RequestServices.GetService<IOptions<XmlOptions>>().Value;\r\n\r\n    var res = context.Response;\r\n\r\n    await res.WriteAsync($\"webpages:value : {options.WebPages.Value}\\n\");\r\n    await res.WriteAsync($\"config.password : {options.Config.Password}\\n\");\r\n    await res.WriteAsync($\"config.username : {options.Config.Username}\\n\");\r\n    await res.WriteAsync($\"config.server : {options.Config.Server}\\n\");\r\n    await res.WriteAsync($\"config.port : {options.Config.Port}\\n\");\r\n    await res.WriteAsync($\"config.googleMap : {options.GoogleMap}\\n\");\r\n    await res.WriteAsync($\"app:password : {options.App.Password} \\n\");\r\n    await res.WriteAsync($\"app:user : {options.App.User} \\n\");\r\n    await res.WriteAsync($\"app:priorities:task : {options.App.Priorities.Task} \\n\");\r\n    await res.WriteAsync($\"app:priorities:limit : {options.App.Priorities.Limit} \\n\");\r\n    await res.WriteAsync($\"app:privacy:individual:sharedKey : {options.App.Privacy.Individual.SharedKey}\\n\");\r\n    await res.WriteAsync($\"app:privacy:individual:publicKey : {options.App.Privacy.Individual.PublicKey}\\n\");\r\n    await res.WriteAsync($\"app:privacy:organization : {options.App.Privacy.Organization}\\n\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\npublic class XmlOptions\r\n{\r\n    public XmlOptionsWebPages WebPages { get; set; }\r\n    public class XmlOptionsWebPages\r\n    {\r\n        public string Value { get; set; }\r\n    }\r\n\r\n    public XmlOptionsConfig Config { get; set; }\r\n\r\n    public class XmlOptionsConfig\r\n    {\r\n        public string Password { get; set; }\r\n        public string Username { get; set; }\r\n\r\n        public string Server { get; set; }\r\n\r\n        public int Port { get; set; }\r\n    }\r\n\r\n    public string GoogleMap { get; set; }\r\n\r\n    public XmlOptionsApp App { get; set; }\r\n\r\n    public class XmlOptionsApp\r\n    {\r\n        public string Password { get; set; }\r\n\r\n        public string User { get; set; }\r\n\r\n        public XmlOptionsAppPriorities Priorities { get; set; }\r\n\r\n        public class XmlOptionsAppPriorities\r\n        {\r\n            public int Task { get; set; }\r\n\r\n            public int Limit { get; set; }\r\n        }\r\n\r\n        public XmlOptionsPrivacy Privacy { get; set; }\r\n\r\n        public class XmlOptionsPrivacy\r\n        {\r\n            public XmlOptionsPrivacyKeys Individual { get; set; }\r\n\r\n            public string Organization { get; set; }\r\n\r\n            public class XmlOptionsPrivacyKeys\r\n            {\r\n                public string SharedKey { get; set; }\r\n\r\n                public string PublicKey { get; set; }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/configurations/configuration-xml-options/configuration-xml-options.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/configurations/configuration-xml-options/settings.xml",
    "content": "  <appSettings>\r\n    <!-- Bloody Microsoft.Extensions.Configuration.Xml does not suported repeated element -->\r\n    <webpages value=\"3.0.0.0\" />\r\n    <config password=\"pwg\" username=\"user\" server=\"localhost\" port=\"30\"/>\r\n    <googleMap>XXXXXXXX</googleMap>\r\n    <app>\r\n        <password>secret</password>\r\n        <user>admin</user>\r\n        <priorities task=\"1\" limit=\"100\" />\r\n        <privacy>\r\n            <individual>\r\n                <sharedKey>1000</sharedKey>\r\n                <publicKey>300</publicKey>\r\n            </individual>\r\n            <organization>Umbrella Corp.</organization>\r\n        </privacy>\r\n    </app>\r\n  </appSettings>"
  },
  {
    "path": "projects/connection-info/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.Run(context =>\r\n{\r\n    var connection = context.Connection;\r\n    var str = string.Empty;\r\n    str += $\"Local IP:Port => {connection.LocalIpAddress}:{connection.LocalPort}\\n\";\r\n    str += $\"Remote IP:Port => {connection.RemoteIpAddress}:{connection.RemotePort}\\n\";\r\n    str += $\"Client Certificate => {connection.ClientCertificate?.FriendlyName}\\n\";\r\n\r\n    return context.Response.WriteAsync($\"{str}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/connection-info/connection-info.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/corewcf/README.md",
    "content": "# CoreWCF (1)\r\n\r\n* [Hello world with simple HTTP](/projects/corewcf/corewcf-1)\r\n  This sample shows a simple request/response CoreWCF flow.\r\n\r\n## Note\r\n\r\nThe clients are built with the WCF Client libraries available [here](https://github.com/dotnet/wcf).\r\n\r\ndotnet6"
  },
  {
    "path": "projects/corewcf/corewcf-1/README.md",
    "content": "# CoreWCF Hello World\r\n\r\nThis sample consists of a server using CoreWCF to host a simple WCF service accepting simple HTTP SOAP requests.\r\n\r\nThe client side is located on `client` folder and the server at the `server` folder. Make sure you run the server **first** before running the client.\r\n\r\nBoth programs share the same service definition (`IEchoService.cs`). The server uses the types defined in `CoreWCF.Primitives`, the client uses the types defined in `System.ServiceModel.Primitives`."
  },
  {
    "path": "projects/corewcf/corewcf-1/client/IEchoService.cs",
    "content": "using System.Runtime.Serialization;\r\nusing System.ServiceModel;\r\n\r\nnamespace Contracts\r\n{\r\n    [ServiceContract]\r\n    public interface IEchoService\r\n    {\r\n        [OperationContract]\r\n        string Echo(string text);\r\n\r\n        [OperationContract]\r\n        string ComplexEcho(EchoMessage text);\r\n    }\r\n\r\n    [DataContract]\r\n    public class EchoMessage\r\n    {\r\n        [DataMember]\r\n        public string Text { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "projects/corewcf/corewcf-1/client/Program.cs",
    "content": "﻿using System.ServiceModel;\r\n\r\nconst string BasicHttpEndPointAddress = @\"http://localhost:8080/basichttp\";\r\n\r\nSimpleEcho();\r\nComplexEcho();\r\n\r\nvoid SimpleEcho()\r\n{\r\n    var factory = new ChannelFactory<Contracts.IEchoService>(new BasicHttpBinding(), new EndpointAddress(BasicHttpEndPointAddress));\r\n    factory.Open();\r\n    var channel = factory.CreateChannel();\r\n    ((IClientChannel)channel).Open();\r\n    Console.WriteLine(\"http Echo(\\\"Hello\\\") => \" + channel.Echo(\"Hello\"));\r\n    ((IClientChannel)channel).Close();\r\n    factory.Close();\r\n}\r\n\r\nvoid ComplexEcho()\r\n{\r\n    var factory = new ChannelFactory<Contracts.IEchoService>(new BasicHttpBinding(), new EndpointAddress(BasicHttpEndPointAddress));\r\n    factory.Open();\r\n    var channel = factory.CreateChannel();\r\n    ((IClientChannel)channel).Open();\r\n    Console.WriteLine(\"http EchoMessage(\\\"Complex Hello\\\") => \" + channel.ComplexEcho(new Contracts.EchoMessage() { Text = \"Complex Hello\" }));\r\n    ((IClientChannel)channel).Close();\r\n    factory.Close();\r\n}\r\n"
  },
  {
    "path": "projects/corewcf/corewcf-1/client/client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <OutputType>Exe</OutputType>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.1\" />\r\n    <PackageReference Include=\"System.ServiceModel.Http\" Version=\"4.9.0\" />\r\n    <PackageReference Include=\"System.ServiceModel.Primitives\" Version=\"4.9.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/corewcf/corewcf-1/server/EchoService.cs",
    "content": "using Contracts;\r\n\r\npublic class EchoService : IEchoService\r\n{\r\n    public string Echo(string text)\r\n    {\r\n        System.Console.WriteLine($\"Received {text} from client!\");\r\n        return text;\r\n    }\r\n\r\n    public string ComplexEcho(EchoMessage text)\r\n    {\r\n        System.Console.WriteLine($\"Received {text.Text} from client!\");\r\n        return text.Text;\r\n    }\r\n}"
  },
  {
    "path": "projects/corewcf/corewcf-1/server/IEchoService.cs",
    "content": "using CoreWCF;\r\nusing System.Runtime.Serialization;\r\n\r\nnamespace Contracts\r\n{\r\n    [ServiceContract]\r\n    public interface IEchoService\r\n    {\r\n        [OperationContract]\r\n        string Echo(string text);\r\n\r\n        [OperationContract]\r\n        string ComplexEcho(EchoMessage text);\r\n    }\r\n\r\n    [DataContract]\r\n    public class EchoMessage\r\n    {\r\n        [DataMember]\r\n        public string Text { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "projects/corewcf/corewcf-1/server/Program.cs",
    "content": "﻿using CoreWCF;\r\nusing CoreWCF.Configuration;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.WebHost.ConfigureKestrel(options => { options.ListenLocalhost(8080); });\r\nbuilder.Services.AddServiceModelServices();\r\n\r\nvar app = builder.Build();\r\napp.UseServiceModel(builder =>\r\n{\r\n    builder\r\n        .AddService<EchoService>()\r\n        .AddServiceEndpoint<EchoService, Contracts.IEchoService>(new BasicHttpBinding(), \"/basichttp\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/corewcf/corewcf-1/server/server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"CoreWCF.Http\" Version=\"0.4.0\" />\r\n    <PackageReference Include=\"CoreWCF.Primitives\" Version=\"0.4.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/datastar/README.md",
    "content": "# Datastar (20)\r\n\r\nThe following samples show how to use [Datastar](https://data-star.dev/) hypermedia framework using .NET 10 and [pico](https://picocss.com) CSS framework.\r\n\r\n* [Hello World](hello-world)\r\n  \r\n  Use `data-on-load` attribute with `@get` action to receive SSE event from a Minimal API endpoint that returns `datastar-patch-elements` SSE event type.\r\n\r\n* [Backend SSE patch-signals](backend-patch-signals)\r\n\r\n  This sample demonstrates how the backend can patch signals through SSE and how the UI reacts with it. The sample adds 3 seconds delays on the SSE response so the changes on the UI is visible.   \r\n\r\n* [Backend SSE patch-signals 2](backend-patch-signals-2)\r\n\r\n  Similar to previous sample except this time we add an extra signal and did not initialize any of the them.\r\n\r\n* [Backend SSE patch-signals 3](backend-patch-signals-3)\r\n\r\n  This sample shows how to use `filterSignals` option to only send specific signals to the backend.\r\n\r\n* [Backend SSE patch-signals 3](backend-patch-signals-4)\r\n\r\n  This sample shows the backend add one extra signal to be used for later action at the UI.\r\n\r\n* [data-attr](data-attr)\r\n\r\n  This example shows how to use `data-attr` to set HTML attribute to an expression. This sample demonstrates the usage of direct value, object and also signal expression.\r\n\r\n* [data-bind](data-bind)\r\n\r\n  This sample shows how to use `data-bind` to bind input (text, textarea, select, radio, checkbox, range) values to signals.\r\n\r\n* [data-class](data-class)\r\n\r\n  This example shows how to add or remove a class to or from an element based on an expression using `data-class`.\r\n\r\n* [data-compute](data-compute)\r\n\r\n  This example shows to create a read only signal that is computed based on expression.\r\n\r\n* [data-effect](data-effect)\r\n\r\n  This example shows to use `data-effect` to update other signals or perform operations.\r\n\r\n* [data-on-click](data-on-click)\r\n\r\n  This example shows to use `data-on-click` to update other signals or perform operations.\r\n\r\n* [data-on-custom-event](data-on-custom-event)\r\n\r\n  This example shows to use `data-on-{custom-event}` to handle custom even on three different occasion, local event, bubbling event, and event handle attached to `window`.\r\n\r\n* [data-on-interval](data-on-interval)\r\n\r\n  This example shows to use `data-on-interval` to run expression at regular time. It defaults to one second.\r\n\r\n* [data-show](data-show)\r\n\r\n  This example shows to use `data-show` to run expression to hide or show an element. \r\n\r\n* [data-style](data-style)\r\n\r\n  This example shows how to set inline CSS style using `data-style`.\r\n\r\n* [data-indicator](data-indicator)\r\n  \r\n  This sample shows how to use `data-indicator` to create a singal set to `true` while an SSE request is in flight.\r\n\r\n* [data-on-signal-patch](data-on-signal-patch)\r\n  \r\n  This sample shows how to use `data-on-signal-patch` to run an expression whether one or more signals are patched. `patch` variable is available and contains the details of the patched signals.\r\n\r\n* [data-on-signal-patch-filter](data-on-signal-patch-filter)\r\n\r\n  This sample shows how to use `data-on-signal-patch-filter` together with `data-on-signal-patch` to run an expression whether one or more **specific** signal patched. `patch` variable is available and contains the details of the patched signals.\r\n\r\n* [data-ignore](data-ignore)\r\n\r\n  This example shows to use `data-ignore` to tell Datastar to skip an element and its descendants. \r\n\r\n* [data-ref](data-ref)\r\n\r\n  This example shows to use `data-ref` to obtain a reference to the [HTML element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) itself."
  },
  {
    "path": "projects/datastar/backend-patch-signals/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/backend-patch-signals/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Nodes;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/sse\", (HttpRequest req, CancellationToken cancellationToken) =>\r\n{\r\n    async IAsyncEnumerable<string> GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken)\r\n    {\r\n        var elementIds = node.AsObject().Select(x => x.Key).ToArray();\r\n\r\n        await Task.Delay(3000, cancellationToken); // Simulate some delay\r\n\r\n        foreach (var elementId in elementIds)\r\n            yield return $$\"\"\"signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }\"\"\";\r\n    }\r\n\r\n    if (req.Headers[\"Datastar-Request\"] != \"true\")\r\n        return Results.BadRequest(\"Datastar request header is missing.\");\r\n\r\n    var data = JsonNode.Parse(req.Query[\"datastar\"]);\r\n\r\n    return Results.ServerSentEvents(GreetingAsync(data,  cancellationToken), \"datastar-patch-signals\");\r\n});\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\" data-signals=\"{greeting:'hello world', greeting2:'greetings earthlings'}\">\r\n            <h1 data-on-load=\"@get('/sse')\">SSE patch signals</h1>\r\n            <div class=\"grid\">\r\n                <div data-text=\"$greeting\">Loading...</div>\r\n                <div data-text=\"$greeting2\">Loading...</div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/backend-patch-signals/README.md",
    "content": "# Backend SSE patch signals\r\n\r\nHere we demonstrate how the backend can patch signals through SSE and how the UI reacts with it. The sample adds 3 seconds delays on the SSE response so the changes on the UI is visible. \r\n\r\nIn this example we started with the following available signals at a starting point.\r\n\r\n```<body class=\"container\" data-signals=\"{greeting:'hello world', greeting2:'greetings earthlings'}\">```\r\n\r\nWe display the signal using `data-text-`.\r\n\r\n```<div data-text=\"$greeting\">Loading...</div>`."
  },
  {
    "path": "projects/datastar/backend-patch-signals/backend-patch-signals.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/backend-patch-signals/backend-patch-signals.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"backend-patch-signals\", \"backend-patch-signals.csproj\", \"{7AEA5F5E-D965-CC15-220A-1B4698A50F4F}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{7AEA5F5E-D965-CC15-220A-1B4698A50F4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{7AEA5F5E-D965-CC15-220A-1B4698A50F4F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{7AEA5F5E-D965-CC15-220A-1B4698A50F4F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{7AEA5F5E-D965-CC15-220A-1B4698A50F4F}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {8AA8C9D7-A13C-4CC0-960E-680A6D5E6224}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/backend-patch-signals-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/backend-patch-signals-2/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Nodes;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/sse\", (HttpRequest req, CancellationToken cancellationToken) =>\r\n{\r\n    async IAsyncEnumerable<string> GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken)\r\n    {\r\n        var elementIds = node.AsObject().Select(x => x.Key).ToArray();\r\n\r\n        await Task.Delay(3000, cancellationToken); // Simulate some delay\r\n\r\n        foreach (var elementId in elementIds.Where(x => !x.Equals(\"showMessage\", StringComparison.OrdinalIgnoreCase)))\r\n            yield return $$\"\"\"signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }\"\"\";\r\n\r\n        yield return $$\"\"\"signals { showMessage: true }\"\"\";\r\n    }\r\n\r\n    if (req.Headers[\"Datastar-Request\"] != \"true\")\r\n        return Results.BadRequest(\"Datastar request header is missing.\");\r\n\r\n    var data = JsonNode.Parse(req.Query[\"datastar\"]);\r\n\r\n    return Results.ServerSentEvents(GreetingAsync(data,  cancellationToken), \"datastar-patch-signals\");\r\n});\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\">\r\n            <h1 data-on-load=\"@get('/sse')\">SSE patch signals 2</h1>\r\n            <div class=\"grid\">\r\n                <div data-text=\"$greeting\">Loading...</div>\r\n                <div data-text=\"$greeting2\">Loading...</div>\r\n                <div data-show=\"$showMessage == true\">This message is only shown when the signal <code>$showMessage</code> is set to true.</div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/backend-patch-signals-2/README.md",
    "content": "# Backend SSE patch signals - 2\r\n\r\nHere we demonstrate how the backend can patch signals through SSE and how the UI reacts with it. The sample adds 3 seconds delays on the SSE response so the changes on the UI is visible. \r\n\r\nIn this example we didn't initialize the three signals with values. You can see that all the three signals are assigned default value empty string.\r\n\r\nWe display the signal using `data-text-`.\r\n\r\n```<div data-text=\"$greeting\">Loading...</div>`.\r\n\r\nWe also use `data-show` to evaluate whether to display an element or not. \r\n\r\n```<div data-show=\"$showMessage == true\">This message is only shown when the signal <code>$showMessage</code> is set to true.</div>```"
  },
  {
    "path": "projects/datastar/backend-patch-signals-2/backend-patch-signals-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/backend-patch-signals-2/backend-patch-signals-2.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"backend-patch-signals-2\", \"backend-patch-signals-2.csproj\", \"{A22B75CA-CA14-AC5D-CDC9-6AF2B01ED74F}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{A22B75CA-CA14-AC5D-CDC9-6AF2B01ED74F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A22B75CA-CA14-AC5D-CDC9-6AF2B01ED74F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A22B75CA-CA14-AC5D-CDC9-6AF2B01ED74F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A22B75CA-CA14-AC5D-CDC9-6AF2B01ED74F}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {619CD6D3-D5B0-4AAF-ADF2-058F9C5D8FFC}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/backend-patch-signals-3/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/backend-patch-signals-3/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Nodes;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/sse\", (HttpRequest req, CancellationToken cancellationToken) =>\r\n{\r\n    async IAsyncEnumerable<string> GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken)\r\n    {\r\n        var elementIds = node.AsObject().Select(x => x.Key).ToArray();\r\n\r\n        await Task.Delay(3000, cancellationToken); // Simulate some delay\r\n\r\n        foreach (var elementId in elementIds.Where(x => !x.Equals(\"showMessage\", StringComparison.OrdinalIgnoreCase)))\r\n            yield return $$\"\"\"signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }\"\"\";\r\n\r\n        if (elementIds.Contains(\"showMessage\", StringComparer.OrdinalIgnoreCase))\r\n            yield return $$\"\"\"signals { showMessage: true }\"\"\";\r\n    }\r\n\r\n    if (req.Headers[\"Datastar-Request\"] != \"true\")\r\n        return Results.BadRequest(\"Datastar request header is missing.\");\r\n\r\n    var data = JsonNode.Parse(req.Query[\"datastar\"]);\r\n\r\n    return Results.ServerSentEvents(GreetingAsync(data,  cancellationToken), \"datastar-patch-signals\");\r\n});\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\">\r\n            <h1 data-on-load=\"@get('/sse', { filterSignals: { include: /^greeting(.)?/ } })\">SSE patch signals with filterSignals</h1>\r\n            <div class=\"grid\">\r\n                <div data-text=\"$greeting\">Loading...</div>\r\n                <div data-text=\"$greeting2\">Loading...</div>\r\n                <div data-show=\"$showMessage == true\">This message is only shown when the signal <code>$showMessage</code> is set to true.</div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/backend-patch-signals-3/README.md",
    "content": "# Backend SSE patch signals with filterSignals\r\n\r\nThis page has 3 signals. This sample shows how to use `filterSignals` option to only send specific signals to the backend.\r\n\r\n```<h1 data-on-load=\"@get('/sse', { filterSignals: { include: /^greeting(.)?/ } })\">```\r\n\r\nHere we set up filterSignals to allow `greeting` and `greeting2` signals to pass through the backend.\r\n\r\n"
  },
  {
    "path": "projects/datastar/backend-patch-signals-3/backend-patch-signals-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/backend-patch-signals-4/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/backend-patch-signals-4/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Nodes;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/sse\", (HttpRequest req, CancellationToken cancellationToken) =>\r\n{\r\n    async IAsyncEnumerable<string> GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken)\r\n    {\r\n        var elementIds = node.AsObject().Select(x => x.Key).ToArray();\r\n\r\n        await Task.Delay(3000, cancellationToken); // Simulate some delay\r\n\r\n        foreach (var elementId in elementIds.Where(x => !x.Equals(\"showMessage\", StringComparison.OrdinalIgnoreCase)))\r\n        {\r\n            yield return $$\"\"\"signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }\"\"\";\r\n        }\r\n\r\n        if (elementIds.Contains(\"showMessage\", StringComparer.OrdinalIgnoreCase))\r\n            yield return $$\"\"\"signals { showMessage: true }\"\"\";\r\n\r\n        yield return \"signals { greeting3: 'LEGIO DECIMA AD RHENUM MOVEAT' }\";\r\n    }\r\n\r\n    if (req.Headers[\"Datastar-Request\"] != \"true\")\r\n        return Results.BadRequest(\"Datastar request header is missing.\");\r\n\r\n    var data = JsonNode.Parse(req.Query[\"datastar\"]);\r\n\r\n    return Results.ServerSentEvents(GreetingAsync(data, cancellationToken), \"datastar-patch-signals\");\r\n});\r\n\r\napp.MapGet(\"/secret\", (HttpRequest req, CancellationToken cancellationToken) =>\r\n{\r\n    async IAsyncEnumerable<string> RevealSecretMessageAsync([EnumeratorCancellation] CancellationToken cancellationToken)\r\n    {\r\n        yield return \"\"\"elements <div id='secretMessage' data-text=\"$greeting3\"></div>\"\"\";\r\n    }\r\n\r\n    if (req.Headers[\"Datastar-Request\"] != \"true\")\r\n        return Results.BadRequest(\"Datastar request header is missing.\");\r\n\r\n    return Results.ServerSentEvents(RevealSecretMessageAsync(cancellationToken), \"datastar-patch-elements\");\r\n});\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\" data-signals=\"{ greeting: 'Loading'}\">\r\n            <h1 data-on-load=\"@get('/sse')\">SSE patch signals with filterSignals</h1>\r\n            <div class=\"grid\">\r\n                <div data-text=\"$greeting\">Loading...</div>\r\n                <div data-text=\"$greeting2\">Loading...</div>\r\n                <div data-show=\"$showMessage == true\">This message is only shown when the signal <code>$showMessage</code> is set to true.</div>\r\n                <div id=\"secretMessage\"></div>\r\n            </div>\r\n            <br>\r\n            <button data-show=\"$showMessage == true\" data-on-click=\"@get('/secret')\">Click to reveal secret message</button>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/backend-patch-signals-4/README.md",
    "content": "# Backend SSE patch signals with extra signal\r\n\r\nThis page has 3 signals originally. Then the backend add one extra signal to be used for later action at the UI.\r\n\r\nWe then send an element that uses the extra signal\r\n\r\n\"\"\"elements <div id='secretMessage' data-text=\"$greeting3\"></div>\"\"\";\r\n"
  },
  {
    "path": "projects/datastar/backend-patch-signals-4/backend-patch-signals-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/backend-patch-signals-4/backend-patch-signals-4.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"backend-patch-signals-4\", \"backend-patch-signals-4.csproj\", \"{58CB1C20-8207-098C-C089-2FE1DDD905D9}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{58CB1C20-8207-098C-C089-2FE1DDD905D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{58CB1C20-8207-098C-C089-2FE1DDD905D9}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{58CB1C20-8207-098C-C089-2FE1DDD905D9}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{58CB1C20-8207-098C-C089-2FE1DDD905D9}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {FFF62B11-DFCE-4413-A96E-EF134D50AE72}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/build.bat",
    "content": "dotnet build hello-world\r\ndotnet build backend-patch-signals\r\ndotnet build backend-patch-signals-2\r\ndotnet build backend-patch-signals-3\r\ndotnet build backend-patch-signals-4\r\ndotnet build data-attr\r\ndotnet build data-bind\r\ndotnet build data-class\r\ndotnet build data-compute\r\ndotnet build data-effect\r\ndotnet build data-on-click\r\ndotnet build data-on-custom-event\r\ndotnet build data-on-interval\r\ndotnet build data-show\r\ndotnet build data-style \r\ndotnet build data-indicator\r\ndotnet build data-on-signal-patch\r\ndotnet build data-on-signal-patch-filter\r\ndotnet build data-ignore \r\n"
  },
  {
    "path": "projects/datastar/build.sh",
    "content": "#!/bin/bash\ndotnet build hello-world\ndotnet build backend-patch-signals\ndotnet build backend-patch-signals-2\ndotnet build backend-patch-signals-3\ndotnet build backend-patch-signals-4\ndotnet build data-attr\ndotnet build data-bind\ndotnet build data-class\ndotnet build data-compute\ndotnet build data-effect\ndotnet build data-on-click\ndotnet build data-on-custom-event\ndotnet build data-on-interval\ndotnet build data-show\ndotnet build data-style\ndotnet build data-indicator\ndotnet build data-on-signal-patch\ndotnet build data-on-signal-patch-filter\ndotnet build data-ignore\n"
  },
  {
    "path": "projects/datastar/data-attr/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-attr/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Nodes;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\" data-signals=\"{btn1 : 'Normal Button', btn2 : true}\">\r\n            <h1 data-attr-title=\"'Data Atttribute Page'\">data-atttr</h1>\r\n            <div class=\"grid\">\r\n                <div><button data-text=\"$btn1\"></button></div>\r\n                <div><button data-attr-disabled=\"$btn2\">Disabled Button</button></div>\r\n                <div data-attr=\"{ width: '50px',  height:'50px', style:'border:1px solid red;' }\"></div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-attr/README.md",
    "content": "# data-attr\r\n\r\nThis example shows how to use `data-attr` to set HTML attribute to an expression. This sample demonstrates the usage of direct value, object and also signal expression.\r\n\r\nMake sure that you use a single quote `'` when you are assigning string value otherwise you will get an error.\r\n\r\n``` html\r\n <h1 data-attr-title=\"'Data Atttribute Page'\">data-atttr</h1>\r\n ```\r\n\r\n ``` html\r\n   <body class=\"container\" data-signals=\"{btn1 : 'Normal Button', btn2 : true}\">\r\n\r\n   <div><button data-attr-disabled=\"$btn2\">Disabled Button</button></div>\r\n```   \r\n\r\n``` html \r\n   <div data-attr=\"{ width: '50px',  height:'50px', style:'border:1px solid red;' }\"></div>\r\n```   "
  },
  {
    "path": "projects/datastar/data-attr/data-attr.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-attr/data-attr.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-attr\", \"data-attr.csproj\", \"{BDC38F64-E098-1F3B-B938-FA360CECE3BE}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BDC38F64-E098-1F3B-B938-FA360CECE3BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BDC38F64-E098-1F3B-B938-FA360CECE3BE}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BDC38F64-E098-1F3B-B938-FA360CECE3BE}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BDC38F64-E098-1F3B-B938-FA360CECE3BE}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {820676B0-5179-4541-920E-DC030ADA67E0}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-bind/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-bind/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Nodes;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\">\r\n            <h1>data-bind</h1>\r\n            <p>\r\n                Please enter information to the form\r\n            </p>\r\n            <div class=\"grid\">\r\n                <div>\r\n                    <form>\r\n                    <fieldset>\r\n                        <label>\r\n                        First name\r\n                        <input\r\n                            data-bind-first-name\r\n                            name=\"first_name\"\r\n                            placeholder=\"First name\"\r\n                            autocomplete=\"given-name\"\r\n                        />\r\n                        </label>\r\n                        <label>\r\n                        Email\r\n                        <input\r\n                            data-bind-email\r\n                            type=\"email\"\r\n                            name=\"email\"\r\n                            placeholder=\"Email\"\r\n                            autocomplete=\"email\"\r\n                        />\r\n                        </label>\r\n                        <label>\r\n                            <input data-bind-is-married type=\"checkbox\"/>\r\n                            Is Married\r\n                        </label>\r\n                        <label>\r\n                            Nationality\r\n                            <select data-bind-nationality aria-label=\"Select your favorite cuisine...\" required>\r\n                                <option selected disabled value=\"\">\r\n                                    Select your nationality\r\n                                </option>\r\n                                <option>Italian</option>\r\n                                <option>Indonesian</option>\r\n                                <option>Indian</option>\r\n                            </select>\r\n                        <label>\r\n                        <label>\r\n                            Bio\r\n                            <textarea\r\n                                data-bind-bio\r\n                                aria-label=\"Professional short bio\"\r\n                                ></textarea>\r\n                        </label>\r\n\r\n                        <fieldset data-signals-language-preference=\"''\">\r\n                            <legend>Language preference:</legend>\r\n                            <label>\r\n                                <input type=\"radio\" name=\"language\" checked data-bind-language-preference value=\"en\"/>\r\n                                English\r\n                            </label>\r\n                            <label>\r\n                                <input type=\"radio\" name=\"language\"  data-bind-language-preference value=\"fr\"/>\r\n                                French\r\n                            </label>\r\n                            <label>\r\n                                <input type=\"radio\" name=\"language\"  data-bind-language-preference value=\"cn\"/>\r\n                                Mandarin\r\n                            </label>\r\n                            <label>\r\n                                <input type=\"radio\" name=\"language\"  data-bind-language-preference value=\"th\"/>\r\n                                Thai\r\n                            </label>\r\n                        </fieldset>\r\n\r\n                        <label>\r\n                            Age\r\n                            <input type=\"range\" data-bind-age value=\"40\" min=\"0\" max=\"99\" step=\"1\" />\r\n                        </label>\r\n                    </fieldset>\r\n\r\n                    <input\r\n                        type=\"submit\"\r\n                        value=\"Subscribe\"\r\n                    />\r\n                    </form>\r\n                </div>\r\n                <div>\r\n                </div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-bind/README.md",
    "content": "# data-bind\r\n\r\nThis sample shows how to use `data-bind` to bind input (text, textarea, select, radio, checkbox, range) values to signals."
  },
  {
    "path": "projects/datastar/data-bind/data-bind.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-bind/data-bind.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-bind\", \"data-bind.csproj\", \"{463CEF9F-038A-96FC-0C58-02B62EE994B2}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{463CEF9F-038A-96FC-0C58-02B62EE994B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{463CEF9F-038A-96FC-0C58-02B62EE994B2}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{463CEF9F-038A-96FC-0C58-02B62EE994B2}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{463CEF9F-038A-96FC-0C58-02B62EE994B2}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {2D4E085F-A3E8-4BD0-A0CA-B9B994989CAA}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-class/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-class/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body data-class-container=\"$container\" data-class-container-fluid=\"$containerFluid\" data-signals=\"{ container : true, containerFluid : false }\">\r\n            <h1>data-class</h1>\r\n            <div class=\"grid\">\r\n                <div><button data-on-click=\"$container = $container  ? false : true; $containerFluid = !$container;\">Change Layout</button></div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-class/README.md",
    "content": "# data-class\r\n\r\nThis example shows how to add or remove a class to or from an element based on an expression using `data-class`."
  },
  {
    "path": "projects/datastar/data-class/data-class.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-class/data-class.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-class\", \"data-class.csproj\", \"{E0A01C50-D328-5E02-3E62-E402966E8C29}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{E0A01C50-D328-5E02-3E62-E402966E8C29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E0A01C50-D328-5E02-3E62-E402966E8C29}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E0A01C50-D328-5E02-3E62-E402966E8C29}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E0A01C50-D328-5E02-3E62-E402966E8C29}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {851B5236-42A8-42CE-ADF3-DE0473D87BF0}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-computed/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-computed/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\" data-signals=\"{ first : 1, second : 1}\">\r\n            <h1 data-computed-total = \"$first + $second\">data-computed</h1>\r\n            <div data-text=\"$total\"></div>\r\n            <br />\r\n            <div class=\"grid\">\r\n                <div><button data-on-click=\"$second++\">Increment</button></div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-computed/README.md",
    "content": "# data-computed\r\n\r\nThis example shows to create a read only signal that is computed based on expression using `data-computed`. This attribute must not be used for performing actions."
  },
  {
    "path": "projects/datastar/data-computed/data-computed.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-computed/data-computed.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-computed\", \"data-computed.csproj\", \"{BB42EF6E-376C-58A9-B3C7-BD291CADCC62}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BB42EF6E-376C-58A9-B3C7-BD291CADCC62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BB42EF6E-376C-58A9-B3C7-BD291CADCC62}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BB42EF6E-376C-58A9-B3C7-BD291CADCC62}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BB42EF6E-376C-58A9-B3C7-BD291CADCC62}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {82482F05-1D52-4535-B65F-E82502BC4C4F}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-effect/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-effect/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\" data-signals=\"{ first : 1, second : 1, total : 2}\">\r\n            <h1 data-effect = \"$total = $first + $second\">data-effect</h1>\r\n            <div data-text=\"$total\"></div>\r\n            <div data-effect = \"$total > 10 ? alert('over 10') : $first ;\"></div>\r\n            <br />\r\n            <div class=\"grid\">\r\n                <div><button data-on-click=\"$second++\">Increment</button></div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-effect/README.md",
    "content": "# data-effect\r\n\r\nThis example shows to use `data-effect` to update other signals or perform operations."
  },
  {
    "path": "projects/datastar/data-effect/data-effect.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-effect/data-effect.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-effect\", \"data-effect.csproj\", \"{20A026CC-BDF6-7137-8A0B-31B5F740CE29}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{20A026CC-BDF6-7137-8A0B-31B5F740CE29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{20A026CC-BDF6-7137-8A0B-31B5F740CE29}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{20A026CC-BDF6-7137-8A0B-31B5F740CE29}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{20A026CC-BDF6-7137-8A0B-31B5F740CE29}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {AA2313B5-8AE6-45C4-B28D-D462F1B1D5BC}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-ignore/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-ignore/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\" data-signals=\"{ count : 0 }\">\r\n            <h1>data-ignore</h1>\r\n            <div class=\"grid\">\r\n                <div><button data-on-click=\"alert('hello');\">Greet</button></div>\r\n                <div data-ignore><button data-on-click=\"$count = $count + 1;\" data-text=\"$count\">Under data-ignore</button></div>\r\n                <div><button data-on-click=\"$count = $count + 1;\" data-text=\"$count\"></button></div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-ignore/README.md",
    "content": "# data-ignore\r\n\r\nThis example shows to use `data-ignore` to tell Datastar to skip an element and its descendants. \r\n\r\n``` html\r\n    <div data-ignore><button data-on-click=\"$count = $count + 1;\" data-text=\"$count\">Under data-ignore</button></div>\r\n    <div><button data-on-click=\"$count = $count + 1;\" data-text=\"$count\"></button></div>\r\n```"
  },
  {
    "path": "projects/datastar/data-ignore/data-ignore.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-ignore/data-ignore.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-ignore\", \"data-ignore.csproj\", \"{C545052B-12AF-5641-A81A-E280F6B9B46E}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{C545052B-12AF-5641-A81A-E280F6B9B46E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{C545052B-12AF-5641-A81A-E280F6B9B46E}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{C545052B-12AF-5641-A81A-E280F6B9B46E}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{C545052B-12AF-5641-A81A-E280F6B9B46E}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {824C3E7D-A8B5-4519-BD5D-DF045F6946AF}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-indicator/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-indicator/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Nodes;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/sse\", (HttpRequest req, CancellationToken cancellationToken) =>\r\n{\r\n    async IAsyncEnumerable<string> GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken)\r\n    {\r\n        var elementIds = node.AsObject().Select(x => x.Key).ToArray();\r\n\r\n        await Task.Delay(3000, cancellationToken); // Simulate some delay\r\n\r\n        foreach (var elementId in elementIds.Where(x => !x.Equals(\"showMessage\", StringComparison.OrdinalIgnoreCase)))\r\n        {\r\n            yield return $$\"\"\"signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }\"\"\";\r\n        }\r\n    }\r\n\r\n    if (req.Headers[\"Datastar-Request\"] != \"true\")\r\n        return Results.BadRequest(\"Datastar request header is missing.\");\r\n\r\n    var data = JsonNode.Parse(req.Query[\"datastar\"]);\r\n\r\n    return Results.ServerSentEvents(GreetingAsync(data, cancellationToken), \"datastar-patch-signals\");\r\n});\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\">\r\n            <h1 data-on-load=\"@get('/sse')\" data-indicator-fetching>data-indicator</h1>\r\n            <div data-show=\"$fetching\" aria-busy=\"true\"></div>\r\n            <div class=\"grid\">\r\n                <div data-text=\"$greeting\"></div>\r\n                <div data-text=\"$greeting2\"></div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-indicator/README.md",
    "content": "# data-indicator\r\n\r\nThis sample shows how to use `data-indicator` to create a singal set to `true` while an SSE request is in flight."
  },
  {
    "path": "projects/datastar/data-indicator/data-indicator.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-indicator/data-indicator.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-indicator\", \"data-indicator.csproj\", \"{E1E054CE-6322-6207-69E3-DD71A68492DE}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{E1E054CE-6322-6207-69E3-DD71A68492DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E1E054CE-6322-6207-69E3-DD71A68492DE}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E1E054CE-6322-6207-69E3-DD71A68492DE}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E1E054CE-6322-6207-69E3-DD71A68492DE}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {4D211A20-C0AD-4817-AAF0-E9625715F613}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-on-click/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-on-click/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\" data-signals=\"{ count : 0 }\">\r\n            <h1>data-on-click</h1>\r\n            <div class=\"grid\">\r\n                <div><button data-on-click=\"alert('hello');\">Greet</button></div>\r\n                <div><button data-on-click=\"$count = $count + 1;\" data-text=\"$count\"></button></div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-on-click/README.md",
    "content": "# data-on-click\r\n\r\nThis example shows to use `data-on-click` to respond to a `click` event."
  },
  {
    "path": "projects/datastar/data-on-click/data-on-click.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-on-click/data-on-click.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-on-click\", \"data-on-click.csproj\", \"{87B22D83-7D5A-7AFC-B2BF-B8F38B24F20F}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{87B22D83-7D5A-7AFC-B2BF-B8F38B24F20F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{87B22D83-7D5A-7AFC-B2BF-B8F38B24F20F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{87B22D83-7D5A-7AFC-B2BF-B8F38B24F20F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{87B22D83-7D5A-7AFC-B2BF-B8F38B24F20F}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {639CC6D8-298D-4609-B7E7-319E4D0CCC09}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-on-custom-event/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-on-custom-event/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\" data-on-my-local-event-3__window=\"alert(evt.detail.message);\">\r\n            <h1>data-on-custom-event</h1>\r\n            <div class=\"grid\" data-on-my-local-event-2=\"alert(evt.detail.message);\" >\r\n                <div><button \r\n                        data-on-my-local-event=\"alert(evt.detail.message);\" \r\n                        data-on-click=\"el.dispatchEvent(new CustomEvent('my-local-event', {  detail : { message : 'hello from my local event' } }))\"\r\n                        type=\"button\"\r\n                        >Local Custom Event</button></div>\r\n                <div><button \r\n                        data-on-click=\"el.dispatchEvent(new CustomEvent('my-local-event-2', {  bubbles: true, detail : { message : 'hello from my bubbled up event' } }))\"\r\n                        type=\"button\"\r\n                        >Bubble Up Local Custom Event</button></div>\r\n                <div><button \r\n                        data-on-click=\"window.dispatchEvent(new CustomEvent('my-local-event-3', {  detail : { message : 'hello from my window attached event.' } }))\"\r\n                        type=\"button\"\r\n                        >window attached event</button></div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-on-custom-event/README.md",
    "content": "# data-on-{custom-event}\r\n\r\nThis example shows to use `data-on-{custom-event}` to handle custom even on three different occasion, local event, bubbling event, and event handle attached to `window`."
  },
  {
    "path": "projects/datastar/data-on-custom-event/data-on-custom-event.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-on-custom-event/data-on-custom-event.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-on-custom-event\", \"data-on-custom-event.csproj\", \"{AB81C7FA-4334-510E-6D0E-C365A0959598}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{AB81C7FA-4334-510E-6D0E-C365A0959598}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{AB81C7FA-4334-510E-6D0E-C365A0959598}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{AB81C7FA-4334-510E-6D0E-C365A0959598}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{AB81C7FA-4334-510E-6D0E-C365A0959598}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {FCD60C3A-F84A-48CF-8DF1-6EC35DA327F1}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-on-interval/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-on-interval/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\" data-signals=\"{ count : 0 }\">\r\n            <h1 data-on-interval=\"$count++\">data-on-interval</h1>\r\n            <div class=\"grid\">\r\n                <div data-text=\"$count\"></div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-on-interval/README.md",
    "content": "# data-on-interval\r\n\r\nThis example shows to use `data-on-interval` to run expression at regular time. It defaults to one second."
  },
  {
    "path": "projects/datastar/data-on-interval/data-on-interval.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-on-interval/data-on-interval.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-on-interval\", \"data-on-interval.csproj\", \"{58308DFE-FA86-0CB6-7337-CEED4519BB14}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{58308DFE-FA86-0CB6-7337-CEED4519BB14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{58308DFE-FA86-0CB6-7337-CEED4519BB14}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{58308DFE-FA86-0CB6-7337-CEED4519BB14}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{58308DFE-FA86-0CB6-7337-CEED4519BB14}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {367CB5C8-3F35-4CDD-86B9-794978841E0D}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-on-signal-patch/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-on-signal-patch/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Nodes;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/sse\", (HttpRequest req, CancellationToken cancellationToken) =>\r\n{\r\n    async IAsyncEnumerable<string> GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken)\r\n    {\r\n        var elementIds = node.AsObject().Select(x => x.Key).ToArray();\r\n\r\n        await Task.Delay(3000, cancellationToken); // Simulate some delay\r\n\r\n        foreach (var elementId in elementIds.Where(x => !x.Equals(\"showMessage\", StringComparison.OrdinalIgnoreCase)))\r\n        {\r\n            yield return $$\"\"\"signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }\"\"\";\r\n        }\r\n    }\r\n\r\n    if (req.Headers[\"Datastar-Request\"] != \"true\")\r\n        return Results.BadRequest(\"Datastar request header is missing.\");\r\n\r\n    var data = JsonNode.Parse(req.Query[\"datastar\"]);\r\n\r\n    return Results.ServerSentEvents(GreetingAsync(data, cancellationToken), \"datastar-patch-signals\");\r\n});\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\">\r\n            <h1 data-on-load=\"@get('/sse')\" data-on-signal-patch=\"alert(JSON.stringify(patch))\">data-on-signal-patch</h1>\r\n            <div class=\"grid\">\r\n                <div data-text=\"$greeting\"></div>\r\n                <div data-text=\"$greeting2\"></div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-on-signal-patch/README.md",
    "content": "# data-on-signal-patch\r\n\r\nThis sample shows how to use `data-on-signal-patch` to run an expression whether one or more signals are patched. `patch` variable is available and contains the details of the patched signals.\r\n\r\n\r\n``` html  \r\n    <h1 data-on-load=\"@get('/sse')\" data-on-signal-patch=\"alert(JSON.stringify(patch))\">data-on-signal-patch</h1>\r\n```"
  },
  {
    "path": "projects/datastar/data-on-signal-patch/data-on-signal-patch.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-on-signal-patch/data-on-signal-patch.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-on-signal-patch\", \"data-on-signal-patch.csproj\", \"{90B3E4DA-312B-3303-AE46-CD9D6A4F580C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{90B3E4DA-312B-3303-AE46-CD9D6A4F580C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{90B3E4DA-312B-3303-AE46-CD9D6A4F580C}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{90B3E4DA-312B-3303-AE46-CD9D6A4F580C}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{90B3E4DA-312B-3303-AE46-CD9D6A4F580C}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {8C15A1EF-52B2-4357-AA03-B4AA1FD11F26}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-on-signal-patch-filter/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-on-signal-patch-filter/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Nodes;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/sse\", (HttpRequest req, CancellationToken cancellationToken) =>\r\n{\r\n    async IAsyncEnumerable<string> GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken)\r\n    {\r\n        var elementIds = node.AsObject().Select(x => x.Key).ToArray();\r\n\r\n        await Task.Delay(3000, cancellationToken); // Simulate some delay\r\n\r\n        foreach (var elementId in elementIds.Where(x => !x.Equals(\"showMessage\", StringComparison.OrdinalIgnoreCase)))\r\n        {\r\n            yield return $$\"\"\"signals { {{elementId}}: 'hello world from the backend with signal {{elementId}}' }\"\"\";\r\n        }\r\n    }\r\n\r\n    if (req.Headers[\"Datastar-Request\"] != \"true\")\r\n        return Results.BadRequest(\"Datastar request header is missing.\");\r\n\r\n    var data = JsonNode.Parse(req.Query[\"datastar\"]);\r\n\r\n    return Results.ServerSentEvents(GreetingAsync(data, cancellationToken), \"datastar-patch-signals\");\r\n});\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\">\r\n            <h1 data-on-load=\"@get('/sse')\" data-on-signal-patch=\"alert(JSON.stringify(patch))\" data-on-signal-patch-filter=\"{include: /^greeting$/}\">data-on-signal-patch-filter</h1>\r\n            <div class=\"grid\">\r\n                <div data-text=\"$greeting\"></div>\r\n                <div data-text=\"$greeting2\"></div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-on-signal-patch-filter/README.md",
    "content": "# data-on-signal-patch-filter\r\n\r\nThis sample shows how to use `data-on-signal-patch-filter` together with `data-on-signal-patch` to run an expression whether one or more **specific** signal patched. `patch` variable is available and contains the details of the patched signals.\r\n\r\n\r\n``` html  \r\n      <h1 data-on-load=\"@get('/sse')\" data-on-signal-patch=\"alert(JSON.stringify(patch))\" data-on-signal-patch-filter=\"{include: /^greeting$/}\">data-on-signal-patch-filter</h1>\r\n```"
  },
  {
    "path": "projects/datastar/data-on-signal-patch-filter/data-on-signal-patch-filter.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <UserSecretsId>69e413b0-1b23-4103-9440-f0c2dc7a58b8</UserSecretsId>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-on-signal-patch-filter/data-on-signal-patch-filter.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-on-signal-patch-filter\", \"data-on-signal-patch-filter.csproj\", \"{D3622615-5487-0672-5E06-26195AAEC5C2}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{D3622615-5487-0672-5E06-26195AAEC5C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D3622615-5487-0672-5E06-26195AAEC5C2}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D3622615-5487-0672-5E06-26195AAEC5C2}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D3622615-5487-0672-5E06-26195AAEC5C2}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {E2D77481-A40C-48C8-AC11-71619DBECC74}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-patch-elements-outer/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-patch-elements-outer/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Nodes;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/sse\", (HttpRequest req, CancellationToken cancellationToken) =>\r\n{\r\n    async IAsyncEnumerable<string> GreetingAsync([EnumeratorCancellation] CancellationToken cancellationToken)\r\n    {\r\n        yield return \"mode append\";\r\n        yield return $\"\"\"elements <div id=\"mode-outer\">mode outer</div>\"\"\";\r\n\r\n        await Task.CompletedTask;\r\n    }\r\n\r\n    if (req.Headers[\"Datastar-Request\"] != \"true\")\r\n        return Results.BadRequest(\"Datastar request header is missing.\");\r\n\r\n    return Results.ServerSentEvents(GreetingAsync(cancellationToken), \"datastar-patch-elements\");\r\n});\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\">\r\n            <h1 data-on-load=\"@get('/sse')\">mode outer</h1>\r\n            <div class=\"grid\">\r\n                <div id=\"mode-outer\" style=\"border:1px solid red;padding:5px;\">Loading...</div>\r\n            </div>\r\n            <div class=\"grid\">\r\n                <div id=\"mode-inner\" style=\"border:1px solid red;padding:5px;\">Loading...</div>\r\n            </div>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-patch-elements-outer/README.md",
    "content": "# Hello World\r\n\r\nUse `data-on-load` attribute with `@get` action to receive SSE event from a Minimal API endpoint that returns `datastar-patch-elements` SSE event type.\r\n"
  },
  {
    "path": "projects/datastar/data-patch-elements-outer/data-patch-elements-outer.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-patch-elements-outer/data-patch-elements-outer.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-patch-elements-outer\", \"data-patch-elements-outer.csproj\", \"{D0F07E4B-338A-3EF5-9A0C-40B5F133BFE1}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{D0F07E4B-338A-3EF5-9A0C-40B5F133BFE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D0F07E4B-338A-3EF5-9A0C-40B5F133BFE1}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D0F07E4B-338A-3EF5-9A0C-40B5F133BFE1}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D0F07E4B-338A-3EF5-9A0C-40B5F133BFE1}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {C6FDD6DD-668F-4B5A-8502-0A8A23108E93}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-ref/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-ref/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\">\r\n            <h1 data-ref-heading style=\"color:green;\">data-ref</h1>\r\n            <div class=\"grid\">\r\n                <div data-text=\"$heading.tagName\"></div>\r\n                <div data-text=\"$heading.innerText\"></div>\r\n                <div data-text=\"$heading.style.color\"></div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-ref/README.md",
    "content": "# data-ref\r\n\r\nThis example shows to use `data-ref` to obtain a reference to the [HTML element](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) itself. You can then access the properties available on that particular element."
  },
  {
    "path": "projects/datastar/data-ref/data-ref.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-ref/data-ref.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-ref\", \"data-ref.csproj\", \"{49316EA2-506C-82AA-AE0B-5B6B2064FDD5}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{49316EA2-506C-82AA-AE0B-5B6B2064FDD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{49316EA2-506C-82AA-AE0B-5B6B2064FDD5}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{49316EA2-506C-82AA-AE0B-5B6B2064FDD5}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{49316EA2-506C-82AA-AE0B-5B6B2064FDD5}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {3F1A0D12-4279-4D7B-9DEE-46E83930682F}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-show/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-show/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\" data-signals=\"{ show : 0 }\">\r\n            <h1 data-on-interval__interval.3s=\"$show = !$show\">data-show</h1>\r\n            <div class=\"grid\">\r\n                <div data-show=\"$show\">Now you see me!</div>\r\n            </div>\r\n            <br/>\r\n            <h3>All signals on this page</h3>\r\n            <pre data-json-signals></pre>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-show/README.md",
    "content": "# data-show\r\n\r\nThis example shows to use `data-show` to run expression to hide or show an element. "
  },
  {
    "path": "projects/datastar/data-show/data-show.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-show/data-show.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-show\", \"data-show.csproj\", \"{021935D8-243D-A746-5B88-5FFCA35CD659}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{021935D8-243D-A746-5B88-5FFCA35CD659}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{021935D8-243D-A746-5B88-5FFCA35CD659}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{021935D8-243D-A746-5B88-5FFCA35CD659}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{021935D8-243D-A746-5B88-5FFCA35CD659}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {88B5EBD3-BAE1-4617-8FA0-F163E537D450}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/data-style/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/data-style/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body data-style-background-color=\"$bgColor\" data-signals=\"{ bgColor : `white`, hiding : false, headColor : 'green' }\">\r\n            <main class=\"container\">\r\n                <h1 data-style=\"{ display: $hiding ? 'none' : 'flex', 'background-color': $headColor }\">data-style</h1>\r\n                <div class=\"grid\">\r\n                    <div><button data-on-click=\"$bgColor = $bgColor  == 'white' ? 'blue' : 'white';\">Background Color</button></div>\r\n                    <div><button data-on-click=\"$hiding = !$hiding\" data-text=\"$hiding ? 'show' : 'hide'\"></button></div>\r\n                </div>\r\n                <br/>\r\n                <h3>All signals on this page</h3>\r\n                <pre data-json-signals></pre>\r\n            </main>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/data-style/README.md",
    "content": "# data-style\r\n\r\nThis example shows how to set inline CSS style using `data-style`."
  },
  {
    "path": "projects/datastar/data-style/data-style.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/data-style/data-style.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"data-style\", \"data-style.csproj\", \"{9C0931EA-E0B8-38F6-8B84-ADB2A6AA73EE}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{9C0931EA-E0B8-38F6-8B84-ADB2A6AA73EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{9C0931EA-E0B8-38F6-8B84-ADB2A6AA73EE}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{9C0931EA-E0B8-38F6-8B84-ADB2A6AA73EE}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{9C0931EA-E0B8-38F6-8B84-ADB2A6AA73EE}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {EB9ECD10-D9BE-4741-87E5-8E0A1B5C14C2}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/datastar/global.json",
    "content": "{\r\n  \"sdk\": {\r\n    \"version\": \"10.0.100\",\r\n    \"rollForward\": \"major\"\r\n  }\r\n}"
  },
  {
    "path": "projects/datastar/hello-world/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/datastar/hello-world/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Nodes;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/sse\", (HttpRequest req, CancellationToken cancellationToken) =>\r\n{\r\n    async IAsyncEnumerable<string> GreetingAsync(JsonNode node, [EnumeratorCancellation] CancellationToken cancellationToken)\r\n    {\r\n        var elementIds = node.AsObject().Select(x => x.Key).ToArray();\r\n\r\n        foreach (var elementId in elementIds)\r\n            yield return $\"\"\"elements <div id=\"{elementId}\">{node[elementId]} {DateTime.Now}</div>\"\"\";\r\n\r\n        await Task.CompletedTask;\r\n    }\r\n\r\n    if (req.Headers[\"Datastar-Request\"] != \"true\")\r\n        return Results.BadRequest(\"Datastar request header is missing.\");\r\n\r\n    var data = JsonNode.Parse(req.Query[\"datastar\"]);\r\n\r\n    return Results.ServerSentEvents(GreetingAsync(data,  cancellationToken), \"datastar-patch-elements\");\r\n});\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync($$\"\"\"\r\n    <html>\r\n        <head>\r\n          <script type=\"module\" src=\"https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js\"></script>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n        </head>\r\n        <body class=\"container\" data-signals=\"{greeting:'hello world', greeting2:'greetings earthlings'}\">\r\n            <h1 data-on-load=\"@get('/sse')\">Datastar SSE Hello World</h1>\r\n            <div class=\"grid\">\r\n                <div id=\"greeting\">Loading...</div>\r\n                <div id=\"greeting2\">Loading...</div>\r\n            </div>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/datastar/hello-world/README.md",
    "content": "# Hello World\r\n\r\nUse `data-on-load` attribute with `@get` action to receive SSE event from a Minimal API endpoint that returns `datastar-patch-elements` SSE event type.\r\n"
  },
  {
    "path": "projects/datastar/hello-world/hello-world.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "projects/datastar/hello-world/hello-world.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"hello-world\", \"hello-world.csproj\", \"{26DB1FEF-CF56-783B-DE0F-C184991DD0A7}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{26DB1FEF-CF56-783B-DE0F-C184991DD0A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{26DB1FEF-CF56-783B-DE0F-C184991DD0A7}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{26DB1FEF-CF56-783B-DE0F-C184991DD0A7}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{26DB1FEF-CF56-783B-DE0F-C184991DD0A7}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {A73CDFED-8771-49B1-9EA3-85A6AC0A6746}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/dependency-injection/README.md",
    "content": "# Dependency Injection (6)\r\n\r\n  ASP.NET Core lives and dies by DI. It relies on `Microsoft.Extensions.DependencyInjection` library. \r\n\r\n  * [Dependency Injection 1 - The basic](/projects/dependency-injection/dependency-injection-1)\r\n\r\n    Demonstrate the three lifetime registrations for the out of the box DI functionality: singleton (one and only forever), scoped (one in every request) and transient (new everytime).\r\n\r\n  * [Dependency Injection 2 - IServiceProvider](/projects/dependency-injection/dependency-injection-2)\r\n\r\n    `IServiceProvider` is a service locator. It allows you to obtain objects from the dependency injection system.\r\n\r\n  * [Dependency Injection 3 - Easy registration](/projects/dependency-injection/dependency-injection-3)\r\n  \r\n    Register all objects configured by classes that implements a specific interface (`IBootstrap` in this example). This is useful when you have large amount of classes in your project that needs registration. You can register them near where they are (usually in the same folder) instead of registering them somewhere in a giant registration function.\r\n\r\n  * [Lazy Type](/projects/dependency-injection/dependency-injection-4)\r\n\r\n    This shows how to register [Lazy](https://docs.microsoft.com/en-us/dotnet/api/system.lazy-1?view=net-5.0) types in the built in Dependency Injection. \r\n\r\n## Keyed Services\r\n\r\n  * [Keyed Services in Minimal API](keyed-service)\r\n\r\n    Use `IServiceProvider.GetRequiredKeyedService<T>(key)` to get different type of implementation instances based on string key in Minimal API\r\n\r\n  * [Keyed Services in MVC](keyed-service-2)\r\n\r\n    Use `IServiceProvider.GetRequiredKeyedService<T>(key)` to get different type of implementation instances based on string key in MVC\r\n\r\n  dotnet8"
  },
  {
    "path": "projects/dependency-injection/build.bat",
    "content": "dotnet build dependency-injection-1\r\ndotnet build dependency-injection-2\r\ndotnet build dependency-injection-3\r\ndotnet build dependency-injection-4\r\ndotnet build keyed-service\r\ndotnet build keyed-service-2"
  },
  {
    "path": "projects/dependency-injection/build.sh",
    "content": "#!/bin/bash\ndotnet build dependency-injection-1\ndotnet build dependency-injection-2\ndotnet build dependency-injection-3\ndotnet build dependency-injection-4\ndotnet build keyed-service\ndotnet build keyed-service-2\n"
  },
  {
    "path": "projects/dependency-injection/dependency-injection-1/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddSingleton(x => new SingletonDate());\r\nbuilder.Services.AddTransient(x => new TransientDate());\r\nbuilder.Services.AddScoped(x => new ScopedDate());\r\n\r\nvar app = builder.Build();\r\n\r\napp.Use(async (context, next) =>\r\n{\r\n    var single = context.RequestServices.GetService<SingletonDate>();\r\n    var scoped = context.RequestServices.GetService<ScopedDate>();\r\n    var transient = context.RequestServices.GetService<TransientDate>();\r\n\r\n    await context.Response.WriteAsync(\"Open this page in two tabs \\n\");\r\n    await context.Response.WriteAsync(\"Keep refreshing and you will see the three different DI behaviors\\n\");\r\n    await context.Response.WriteAsync(\"----------------------------------\\n\");\r\n    await context.Response.WriteAsync($\"Singleton : {single.Date.ToString(\"MM/dd/yyyy hh:mm:ss.fff tt\")}\\n\");\r\n    await context.Response.WriteAsync($\"Scoped: {scoped.Date.ToString(\"MM/dd/yyyy hh:mm:ss.fff tt\")}\\n\");\r\n    await context.Response.WriteAsync($\"Transient: {transient.Date.ToString(\"MM/dd/yyyy hh:mm:ss.fff tt\")}\\n\");\r\n    await next.Invoke();\r\n});\r\n\r\napp.Run(async (context) =>\r\n{\r\n    await Task.Delay(100);//delay for 100 ms\r\n\r\n    var single = context.RequestServices.GetService<SingletonDate>();\r\n    var scoped = context.RequestServices.GetService<ScopedDate>();\r\n    var transient = context.RequestServices.GetService<TransientDate>();\r\n\r\n    await context.Response.WriteAsync(\"----------------------------------\\n\");\r\n    await context.Response.WriteAsync($\"Singleton : {single.Date.ToString(\"MM/dd/yyyy hh:mm:ss.fff tt\")}\\n\");\r\n    await context.Response.WriteAsync($\"Scoped: {scoped.Date.ToString(\"MM/dd/yyyy hh:mm:ss.fff tt\")}\\n\");\r\n    await context.Response.WriteAsync($\"Transient: {transient.Date.ToString(\"MM/dd/yyyy hh:mm:ss.fff tt\")}\\n\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class SingletonDate\r\n{\r\n    public DateTime Date { get; set; } = DateTime.Now;\r\n}\r\n\r\npublic class TransientDate\r\n{\r\n    public DateTime Date { get; set; } = DateTime.Now;\r\n}\r\n\r\npublic class ScopedDate\r\n{\r\n    public DateTime Date { get; set; } = DateTime.Now;\r\n}"
  },
  {
    "path": "projects/dependency-injection/dependency-injection-1/dependency-injection-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/dependency-injection/dependency-injection-2/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddSingleton<SingletonDate>();\r\nbuilder.Services.AddTransient<TransientDate>();\r\nbuilder.Services.AddScoped<ScopedDate>();\r\nbuilder.Services.AddTransient<DateProvider>();\r\n\r\nvar app = builder.Build();\r\n\r\napp.Use(async (context, next) =>\r\n{\r\n    var dateProvider = context.RequestServices.GetService<DateProvider>();\r\n    var single = dateProvider.Singleton;\r\n    var scoped = dateProvider.Scoped;\r\n    var transient = dateProvider.Transient; ;\r\n\r\n    await context.Response.WriteAsync(\"Open this page in two tabs \\n\");\r\n    await context.Response.WriteAsync(\"Keep refreshing and you will see the three different DI behaviors\\n\");\r\n    await context.Response.WriteAsync(\"----------------------------------\\n\");\r\n    await context.Response.WriteAsync($\"Singleton : {single.Date.ToString(\"MM/dd/yyyy hh:mm:ss.fff tt\")}\\n\");\r\n    await context.Response.WriteAsync($\"Scoped: {scoped.Date.ToString(\"MM/dd/yyyy hh:mm:ss.fff tt\")}\\n\");\r\n    await context.Response.WriteAsync($\"Transient: {transient.Date.ToString(\"MM/dd/yyyy hh:mm:ss.fff tt\")}\\n\");\r\n    await next(context);\r\n});\r\n\r\napp.Run(async (context) =>\r\n{\r\n    await Task.Delay(100);//delay for 100 ms\r\n\r\n    var dateProvider = context.RequestServices.GetService<DateProvider>();\r\n    var single = dateProvider.Singleton;\r\n    var scoped = dateProvider.Scoped;\r\n    var transient = dateProvider.Transient; ;\r\n\r\n    await context.Response.WriteAsync(\"----------------------------------\\n\");\r\n    await context.Response.WriteAsync($\"Singleton : {single.Date.ToString(\"MM/dd/yyyy hh:mm:ss.fff tt\")}\\n\");\r\n    await context.Response.WriteAsync($\"Scoped: {scoped.Date.ToString(\"MM/dd/yyyy hh:mm:ss.fff tt\")}\\n\");\r\n    await context.Response.WriteAsync($\"Transient: {transient.Date.ToString(\"MM/dd/yyyy hh:mm:ss.fff tt\")}\\n\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class DateProvider\r\n{\r\n    readonly IServiceProvider _provider;\r\n\r\n    public SingletonDate Singleton => _provider.GetService<SingletonDate>();\r\n\r\n    public ScopedDate Scoped => _provider.GetService<ScopedDate>();\r\n\r\n    public TransientDate Transient => _provider.GetService<TransientDate>();\r\n\r\n    public DateProvider(IServiceProvider provider)\r\n    {\r\n        _provider = provider;\r\n    }\r\n}\r\n\r\npublic class SingletonDate\r\n{\r\n    public DateTime Date { get; set; } = DateTime.Now;\r\n}\r\n\r\npublic class TransientDate\r\n{\r\n    public DateTime Date { get; set; } = DateTime.Now;\r\n}\r\n\r\npublic class ScopedDate\r\n{\r\n    public DateTime Date { get; set; } = DateTime.Now;\r\n}"
  },
  {
    "path": "projects/dependency-injection/dependency-injection-2/README.md",
    "content": "# IServiceProvider\r\n\r\n`IServiceProvider` is a service locator. It allows you to obtain objects from the dependency injection system. It is considered a bad practice in common scenario.\r\n\r\nIt is better to be explicit of your dependency in your constructor e.g. `MyObject(ILogger<MyObject> logger, IStringLocalizer<MyObject>)` than using `MyObject(IServiceProvider provider)` and obtain those objects via the provider.\r\n\r\nHowever when you encounter a situation where using a service locator is needed, `IServiceProvider` is there for you.\r\n"
  },
  {
    "path": "projects/dependency-injection/dependency-injection-2/dependency-injection-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/dependency-injection/dependency-injection-3/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\n//Register all objects configured by classes that implements IBootstrap.\r\n//This is useful when you have large amount of classes in your project that needs\r\n//registration. You can register them near where they are (usually in the same folder) instead of\r\n//registering them somewhere in a giant registration function\r\nvar type = typeof(IBootstrap);\r\nvar types = System.AppDomain.CurrentDomain.GetAssemblies()\r\n    .SelectMany(x => x.GetTypes())\r\n    .Where(p => type.IsAssignableFrom(p) && p.IsClass);\r\n\r\nforeach (var p in types)\r\n{\r\n    var config = (IBootstrap)System.Activator.CreateInstance(p);\r\n    config.Register(builder.Services);\r\n}\r\n\r\nvar app = builder.Build();\r\n\r\napp.Run(context =>\r\n{\r\n    var person = context.RequestServices.GetService<Person>();\r\n    var greeting = context.RequestServices.GetService<Greeting>();\r\n\r\n    return context.Response.WriteAsync($\"{greeting.Message} {person.Name}\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic interface IBootstrap\r\n{\r\n    void Register(IServiceCollection services);\r\n}\r\n\r\npublic class Registration1 : IBootstrap\r\n{\r\n    public void Register(IServiceCollection services)\r\n    {\r\n        services.AddTransient(x => new Person { Name = \"Mahmoud\" });\r\n        //continue registering all your classes here\r\n    }\r\n}\r\n\r\n//This is a contrite sample but it demonstrates that you can have these two registration classes in farflung folders near the classes\r\n//they are registrating.\r\npublic class Registration2 : IBootstrap\r\n{\r\n    public void Register(IServiceCollection services)\r\n    {\r\n        services.AddTransient(x => new Greeting { Message = \"Good Morning\" });\r\n        //continue registering all your classes here\r\n    }\r\n}\r\n\r\npublic class Person\r\n{\r\n    public string Name { get; set; }\r\n}\r\n\r\npublic class Greeting\r\n{\r\n    public string Message { get; set; }\r\n}\r\n"
  },
  {
    "path": "projects/dependency-injection/dependency-injection-3/dependency-injection-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/dependency-injection/dependency-injection-4/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddTransient<TellTime>();\r\nbuilder.Services.AddTransient<Lazy<TellTime>>(x => new Lazy<TellTime>(x.GetRequiredService<TellTime>()));\r\n\r\nvar app = builder.Build();\r\n\r\napp.Run(context =>\r\n{\r\n    var tell = context.RequestServices.GetService<Lazy<TellTime>>();\r\n    return context.Response.WriteAsync($\"{tell.Value.Time}\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class TellTime\r\n{\r\n    public DateTime Time => DateTime.Now;\r\n}"
  },
  {
    "path": "projects/dependency-injection/dependency-injection-4/README.md",
    "content": "# Use Lazy type in Microsoft Dependency Injection\r\n\r\nThis example shows how to register types encapsulated using [Lazy Type](https://docs.microsoft.com/en-us/dotnet/api/system.lazy-1?view=net-5.0). This is very useful if you are registering large or resource-intensive object."
  },
  {
    "path": "projects/dependency-injection/dependency-injection-4/dependency-injection-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/dependency-injection/keyed-service/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddKeyedSingleton<IGreeting, MorningGreeting>(\"morning\");\r\nbuilder.Services.AddKeyedSingleton<IGreeting, DayGreeting>(\"day\");\r\nbuilder.Services.AddKeyedSingleton<IGreeting, EveningGreeting>(\"evening\");\r\n\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", (IServiceProvider provider) => \r\n{\r\n    string GetServiceKey()\r\n    {\r\n        var currentTime = DateTime.Now;\r\n        if (currentTime.Hour < 12)\r\n            return \"morning\";\r\n        else if (currentTime.Hour < 18)\r\n            return \"day\";\r\n        else\r\n            return \"evening\";\r\n    }\r\n\r\n    var key = GetServiceKey();\r\n    var greeting = provider.GetRequiredKeyedService<IGreeting>(key);\r\n\r\n    return Results.Content($$\"\"\"\r\n    <html>\r\n    <body>\r\n        {{ greeting.Message }}\r\n    </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\ninterface IGreeting\r\n{\r\n    string Message { get; }\r\n}\r\n\r\npublic class MorningGreeting : IGreeting\r\n{\r\n    public string Message => \"Good morning\";\r\n}\r\n\r\npublic class DayGreeting : IGreeting\r\n{\r\n    public string Message => \"Good day\";\r\n}\r\n\r\npublic class EveningGreeting : IGreeting\r\n{\r\n    public string Message => \"Good evening\";\r\n}\r\n\r\n"
  },
  {
    "path": "projects/dependency-injection/keyed-service/README.md",
    "content": "# Using Keyed Service with Minimal API\r\n\r\nUse `IServiceProvider.GetRequiredKeyedService<T>(key)` to get different type of implementation instances based on string key."
  },
  {
    "path": "projects/dependency-injection/keyed-service/keyed-service.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/dependency-injection/keyed-service/keyed-service.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"keyed-service\", \"keyed-service.csproj\", \"{1A4EF9A9-14AE-464D-8431-B35DA014E9D7}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{1A4EF9A9-14AE-464D-8431-B35DA014E9D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1A4EF9A9-14AE-464D-8431-B35DA014E9D7}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1A4EF9A9-14AE-464D-8431-B35DA014E9D7}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1A4EF9A9-14AE-464D-8431-B35DA014E9D7}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {2D48A138-5215-428D-8CF4-56F21D0D4194}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/dependency-injection/keyed-service-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddKeyedSingleton<IGreeting, MorningGreeting>(\"morning\");\r\nbuilder.Services.AddKeyedSingleton<IGreeting, DayGreeting>(\"day\");\r\nbuilder.Services.AddKeyedSingleton<IGreeting, EveningGreeting>(\"evening\");\r\nbuilder.Services.AddControllers();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\n\r\napp.Run();\r\n\r\npublic class HomeController: ControllerBase\r\n{\r\n\r\n    readonly IServiceProvider _keyProvider;\r\n\r\n    public HomeController(IServiceProvider keyProvider)\r\n    {\r\n        _keyProvider = keyProvider;\r\n    }\r\n\r\n    [HttpGet(\"/\")]\r\n    public IActionResult Index()\r\n    {\r\n        string GetServiceKey()\r\n        {\r\n            var currentTime = DateTime.Now;\r\n            if (currentTime.Hour < 12)\r\n                return \"morning\";\r\n            else if (currentTime.Hour < 18)\r\n                return \"day\";\r\n            else\r\n                return \"evening\";\r\n        }\r\n\r\n        var key = GetServiceKey();\r\n        var greeting = _keyProvider.GetRequiredKeyedService<IGreeting>(key);\r\n\r\n        return Content($$\"\"\"\r\n        <html>\r\n        <body>\r\n            {{ greeting.Message }}\r\n        </body>\r\n        </html>\r\n        \"\"\", \"text/html\");\r\n    }\r\n}\r\n\r\n\r\ninterface IGreeting\r\n{\r\n    string Message { get; }\r\n}\r\n\r\npublic class MorningGreeting : IGreeting\r\n{\r\n    public string Message => \"Good morning\";\r\n}\r\n\r\npublic class DayGreeting : IGreeting\r\n{\r\n    public string Message => \"Good day\";\r\n}\r\n\r\npublic class EveningGreeting : IGreeting\r\n{\r\n    public string Message => \"Good evening\";\r\n}\r\n\r\n"
  },
  {
    "path": "projects/dependency-injection/keyed-service-2/README.md",
    "content": "# Using Keyed Service with MVC\r\n\r\nUse `IServiceProvider.GetRequiredKeyedService<T>(key)` to get different type of implementation instances based on string key."
  },
  {
    "path": "projects/dependency-injection/keyed-service-2/keyed-service-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/dependency-injection/keyed-service-2/keyed-service-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"keyed-service-2\", \"keyed-service-2.csproj\", \"{998CB752-9F46-470D-A2C6-669C3D23897F}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{998CB752-9F46-470D-A2C6-669C3D23897F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{998CB752-9F46-470D-A2C6-669C3D23897F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{998CB752-9F46-470D-A2C6-669C3D23897F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{998CB752-9F46-470D-A2C6-669C3D23897F}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {F6B469E4-30D1-4F0D-896D-139274C08BE2}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/device-detection/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#4b11ba\",\r\n        \"activityBar.background\": \"#4b11ba\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#000000\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#4b11ba\",\r\n        \"statusBar.background\": \"#380d8b\",\r\n        \"statusBar.debuggingBackground\": \"#608b0d\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#4b11ba\",\r\n        \"statusBarItem.remoteBackground\": \"#380d8b\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#380d8b\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#380d8b99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#380d8b\"\r\n}"
  },
  {
    "path": "projects/device-detection/Program.cs",
    "content": "using Wangkanai.Detection;\r\nusing Wangkanai.Detection.Services;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddDetection();\r\n\r\nvar app = builder.Build();\r\n\r\n//These are the four default services available at Configure\r\napp.Run(context =>\r\n{\r\n    var device = context.RequestServices.GetService<IDetectionService>();\r\n\r\n    return context.Response.WriteAsync($@\"\r\n                Useragent : {device.UserAgent}\r\n                Device Type: {device.Device.Type}\r\n                \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/device-detection/README.md",
    "content": "# Device Detection\r\n\r\nThis is the most basic device detection. You will be able to detect whether the client is a desktop or a mobile client.\r\n\r\ndotnet8\r\n"
  },
  {
    "path": "projects/device-detection/device-detection.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Wangkanai.Detection\" Version=\"8.11.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/device-detection/device-detection.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"device-detection\", \"device-detection.csproj\", \"{BCDDC43B-6734-48D6-856A-DC8D744EFC98}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BCDDC43B-6734-48D6-856A-DC8D744EFC98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BCDDC43B-6734-48D6-856A-DC8D744EFC98}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BCDDC43B-6734-48D6-856A-DC8D744EFC98}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BCDDC43B-6734-48D6-856A-DC8D744EFC98}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {7A72F4D1-1EBB-4C53-98DD-B5676BAC6F5F}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/diagnostics/README.md",
    "content": "# Diagnostics (5)\r\n\r\n  * [Welcome Page](/projects/diagnostics/diagnostics-1)\r\n\r\n    Simply show a welcome page to indicate that the app is working properly. This sample does not use a startup class simply because it's just a one line code.\r\n\r\n  * [Developer Exception Page](/projects/diagnostics/diagnostics-2)\r\n\r\n    Show any unhandled exception in a nicely formatted page with error details. Only use this in development environment!\r\n\r\n  * [Custom Global Exception Page](/projects/diagnostics/diagnostics-3)\r\n\r\n    Use ```IExceptionHandlerFeature``` feature provided by ```Microsoft.AspNetCore.Diagnostics.Abstractions``` to create custom global exception page.\r\n\r\n  * [Custom Global Exception Page - 2](/projects/diagnostics/diagnostics-4)\r\n\r\n    Similar to the previous one except that that we use the custom error page defined in separate path.\r\n\r\n  * [Status Pages](/projects/diagnostics/diagnostics-5)\r\n\r\n    Use ```UseStatusCodePagesWithRedirects```.  **Beware:** This extension method handles your 5xx return status code by redirecting it to a specific url. It will not handle your application exception in general (for this use ```UseExceptionHandler``` - check previous samples).\r\n\r\ndotnet8"
  },
  {
    "path": "projects/diagnostics/build.bat",
    "content": "dotnet build diagnostics-1\r\ndotnet build diagnostics-2\r\ndotnet build diagnostics-3\r\ndotnet build diagnostics-4\r\ndotnet build diagnostics-5"
  },
  {
    "path": "projects/diagnostics/build.sh",
    "content": "#!/bin/bash\ndotnet build diagnostics-1\ndotnet build diagnostics-2\ndotnet build diagnostics-3\ndotnet build diagnostics-4\ndotnet build diagnostics-5\n"
  },
  {
    "path": "projects/diagnostics/diagnostics-1/Program.cs",
    "content": "var app =  WebApplication.Create();\r\napp.UseWelcomePage();\r\napp.Run();\r\n "
  },
  {
    "path": "projects/diagnostics/diagnostics-1/diagnostics.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/diagnostics/diagnostics-2/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/diagnostics-2.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/diagnostics/diagnostics-2/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/diagnostics-2.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/diagnostics/diagnostics-2/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.UseDeveloperExceptionPage();\r\napp.Run(_ => throw new ApplicationException(\"Fake exception\"));\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/diagnostics/diagnostics-2/diagnostics-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/diagnostics/diagnostics-3/Program.cs",
    "content": "using System.Text.Encodings.Web;\r\nusing Microsoft.AspNetCore.Diagnostics;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.UseExceptionHandler(errorApp =>\r\n{\r\n    errorApp.Run(async context =>\r\n    {\r\n        context.Response.StatusCode = 500;\r\n        context.Response.ContentType = \"text/html\";\r\n\r\n        var feature = context.Features.Get<IExceptionHandlerFeature>();\r\n\r\n        if (feature != null)\r\n        {\r\n            await context.Response.WriteAsync($\"<h1>Custom Error Page</h1> {HtmlEncoder.Default.Encode(feature.Error.Message)}\");\r\n            await context.Response.WriteAsync($\"<hr />{HtmlEncoder.Default.Encode(feature.Error.Source)}\");\r\n        }\r\n    });\r\n});\r\n\r\n//trigger exception\r\napp.Run(context => throw new Exception(\"Hello World Exception\"));\r\napp.Run();"
  },
  {
    "path": "projects/diagnostics/diagnostics-3/diagnostics-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/diagnostics/diagnostics-4/Program.cs",
    "content": "using System.Text.Encodings.Web;\r\nusing Microsoft.AspNetCore.Diagnostics;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.UseExceptionHandler(\"/GlobalError\");\r\n\r\napp.Map(\"/GlobalError\", errorApp =>\r\n{\r\n    errorApp.Run(async context =>\r\n    {\r\n        context.Response.StatusCode = 500;\r\n        context.Response.ContentType = \"text/html\";\r\n\r\n        var feature = context.Features.Get<IExceptionHandlerFeature>();\r\n\r\n        if (feature != null)\r\n        {\r\n            await context.Response.WriteAsync($\"<h1>Custom Error Page</h1> {HtmlEncoder.Default.Encode(feature.Error.Message)}\");\r\n            await context.Response.WriteAsync($\"<hr />{HtmlEncoder.Default.Encode(feature.Error.Source)}\");\r\n        }\r\n    });\r\n});\r\n\r\napp.Run(context => throw new ApplicationException(\"Hello World Exception\"));\r\napp.Run();"
  },
  {
    "path": "projects/diagnostics/diagnostics-4/diagnostics-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/diagnostics/diagnostics-5/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.UseStatusCodePagesWithRedirects(\"/error?status={0}\");\r\n\r\napp.Map(\"/error\", errorApp =>\r\n{\r\n    errorApp.Run(async context =>\r\n    {\r\n        await context.Response.WriteAsync($\"This is a redirected error message status {context.Request.Query[\"status\"]}\");\r\n    });\r\n});\r\n\r\napp.Run(context =>\r\n{\r\n    context.Response.StatusCode = 500;//change this as necessary\r\n        return Task.CompletedTask;\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/diagnostics/diagnostics-5/diagnostics-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/README.md",
    "content": "# ELSA Workflow (14)\r\n\r\nELSA is a workflow engine for .NET Core. It is a library that can be used to build workflow applications. It is also a standalone application that can be used to run workflows.\r\n\r\nIt is included in this ASP.NET Core samples repository because I believe that a workflow engine can play a very substiantial role in the future of ASP.NET Core applications.\r\n\r\n## Activities\r\n\r\n- [WriteLine Activity](writeline-activity)\r\n    \r\n    This sample demonstrates a very simple workflow Activity that writes a line to the console.\r\n\r\n- [Sequence Activity](sequence-activity)\r\n\r\n    This sample demonstrates the `Sequence` activity. The `Sequence` activity is a container activity that contains other activities. The `Sequence` activity executes the activities in the order they are added to the workflow.\r\n\r\n- [If Activity](if-activity)\r\n\r\n    This sample demonstrates the `If` activity. The `If` activity is a container activity that contains two activities. The first activity is executed if the condition is true. The second activity is executed if the condition is false.\r\n\r\n- [SetVariable Activity](setvariable-activity)\r\n\r\n    This sample demonstrates the `SetVariable` activity. The `SetVariable` activity is used to set a variable in the workflow.\r\n\r\n- [While Activity](while-activity)\r\n\r\n    This sample demonstrates the `While` activity.  The `While` activity has a `Condition` property that is used to specify the condition  on when the workflow continues to be executed. \r\n\r\n- [For Activity](for-activity)\r\n\r\n    This samples demonstrates the `For` activity. We use `For` activity to execute a workflow in a loop within specified parameters. \r\n\r\n- [ForEach Activity](foreach-activity)\r\n\r\n    This samples demonstrates the use of `ForEach` activity. We use `ForEach` activity to execute a workflow in a loop based on a given collection. \r\n\r\n- [Composite Activity](composite-activity)\r\n\r\n    Composite Activity is a way to encapsulate a set of activities into a single activity.\r\n\r\n- [Fork Activity](fork-activity)\r\n\r\n    Fork Activity allows you to split a workflow into two or more branches, each with its own set of actions. All the branches in the workflow must be completed before the worfklow con continue to the next step after the fork.\r\n\r\n- [Fork Activity 2](fork-activity-2)\r\n\r\n    This sample demonstrates on how to set and use variables in a fork activity.\r\n\r\n## Workflow\r\n\r\n- [Workflow with variables](workflow)\r\n    \r\n    This sample demonstrates on how to create a custom workflow and pass a variable to it.\r\n\r\n- [Workflow custom properties](workflow-2)\r\n\r\n    This sample shows how to set up custom properties for a workflow. We also use the basic workflow properties such as `DefinitionId`, `Description`, etc.\r\n\r\n- [Workflow that return result](workflow-3)\r\n\r\n    This sample demonstrates on how to create a workflow that returns result.\r\n\r\n- [Workflow with runtime inputs](workflow-4)\r\n\r\n    This sample demonstrates on how to create a workflow that take runtime inputs.\r\n\r\n- [Workflow data via constructor](workflow-5)\r\n    \r\n    This sample demonstrates on how to pass values to a workflow via constructor. \r\n\r\n"
  },
  {
    "path": "projects/elsa/build.bat",
    "content": "dotnet build composite-activity\r\ndotnet build for-activity\r\ndotnet build foreach-activity\r\ndotnet build fork-activity\r\ndotnet build fork-activity-2\r\ndotnet build if-activity\r\ndotnet build readline-activity\r\ndotnet build sequence-activity\r\ndotnet build setname-activity\r\ndotnet build setvariable-activity\r\ndotnet build while-activity\r\ndotnet build workflow\r\ndotnet build workflow-2\r\ndotnet build workflow-3\r\ndotnet build workflow-4\r\ndotnet build workflow-5\r\ndotnet build writeline-activity"
  },
  {
    "path": "projects/elsa/build.sh",
    "content": "#!/bin/bash\ndotnet build composite-activity\ndotnet build for-activity\ndotnet build foreach-activity\ndotnet build fork-activity\ndotnet build fork-activity-2\ndotnet build if-activity\ndotnet build readline-activity\ndotnet build sequence-activity\ndotnet build setname-activity\ndotnet build setvariable-activity\ndotnet build while-activity\ndotnet build workflow\ndotnet build workflow-2\ndotnet build workflow-3\ndotnet build workflow-4\ndotnet build workflow-5\ndotnet build writeline-activity\n"
  },
  {
    "path": "projects/elsa/composite-activity/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#9ecee7\",\r\n        \"activityBar.background\": \"#9ecee7\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#d34ca5\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#9ecee7\",\r\n        \"statusBar.background\": \"#75b9dd\",\r\n        \"statusBar.debuggingBackground\": \"#dd9975\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#4ca4d3\",\r\n        \"statusBarItem.remoteBackground\": \"#75b9dd\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#75b9dd\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#75b9dd99\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#75b9dd\"\r\n}"
  },
  {
    "path": "projects/elsa/composite-activity/Program.cs",
    "content": "using System.Security.Cryptography;\r\nusing Elsa.Extensions;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Activities;\r\nusing Elsa.Workflows.Memory;\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nvar magicNumber = new Variable<int>(\"magic-number\", 0);\r\n\r\nvar workflow = new Sequence\r\n{\r\n    Variables = { magicNumber },\r\n    Activities =\r\n    {\r\n        new GetRandom\r\n        {\r\n            Result = new(magicNumber)\r\n        },\r\n        new WriteLine(ctx =>\r\n        {\r\n            var number = magicNumber.Get(ctx);\r\n            return $\"The magic number is { number }\";\r\n        })\r\n    }\r\n};\r\n\r\nawait runner.RunAsync(workflow);\r\n\r\nclass GetRandom : Composite<int>\r\n{\r\n    private readonly Variable<int> _random = new();\r\n\r\n    public GetRandom()\r\n    {\r\n        var random = RandomNumberGenerator.Create();\r\n        var bytes = new byte[sizeof(int)]; \r\n        random.GetNonZeroBytes(bytes);\r\n        var result = BitConverter.ToInt32(bytes);\r\n\r\n        Root = new Sequence\r\n        {\r\n            Variables = { _random },\r\n            Activities = \r\n            {\r\n                new WriteLine($\"{nameof(GetRandom)} compositve is generating random information\"),\r\n                new SetVariable<int>(_random,result)\r\n            }\r\n        };\r\n    }\r\n\r\n    protected override void OnCompleted(ActivityCompletedContext context)\r\n    {\r\n        var random = _random.Get<int>(context.ChildContext);\r\n        context.ChildContext.Set(Result, random);\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/elsa/composite-activity/README.md",
    "content": "# Composite Activity\r\n\r\nComposite Activity is a way to encapsulate a set of activities into a single activity. It is a way to reuse activities in different workflows.\r\n"
  },
  {
    "path": "projects/elsa/composite-activity/composite-activity.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/composite-activity/composite-activity.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"composite-activity\", \"composite-activity.csproj\", \"{87938C62-2C03-49C9-B20B-B2D249A2F4E3}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{87938C62-2C03-49C9-B20B-B2D249A2F4E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{87938C62-2C03-49C9-B20B-B2D249A2F4E3}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{87938C62-2C03-49C9-B20B-B2D249A2F4E3}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{87938C62-2C03-49C9-B20B-B2D249A2F4E3}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {A4DD1435-B4CF-4661-B065-9AF8006DE99B}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/for-activity/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#2bec95\",\r\n        \"activityBar.background\": \"#2bec95\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#b66df2\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#2bec95\",\r\n        \"statusBar.background\": \"#13d17b\",\r\n        \"statusBar.debuggingBackground\": \"#d11369\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#0fa25f\",\r\n        \"statusBarItem.remoteBackground\": \"#13d17b\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#13d17b\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#13d17b99\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#13d17b\"\r\n}"
  },
  {
    "path": "projects/elsa/for-activity/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Activities;\r\nusing Elsa.Workflows.Memory;\r\nusing Elsa.Workflows.Models;\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nvar counter = new Variable<int>(\"counter\", 1);\r\n\r\nvar workflow = new Sequence\r\n{\r\n    Variables = { counter },\r\n    Activities =\r\n    {\r\n        new For(start:1, end:10, step:1)\r\n        {\r\n            CurrentValue = new Output<object>(counter),\r\n            Body = new Sequence\r\n                {\r\n                    Activities =\r\n                    {\r\n                        new WriteLine(context => $\"Counter {counter.Get(context)}\"),\r\n                        new SetVariable<int>(counter, context => counter.Get(context) + 1)\r\n                    }\r\n                }\r\n        }\r\n    }\r\n};\r\n\r\nawait runner.RunAsync(workflow);\r\n"
  },
  {
    "path": "projects/elsa/for-activity/README.md",
    "content": "# For activity\r\n\r\nWe use `For` activity to execute a workflow in loop within specified parameters. The `For` activity has a `Start` property that is used to specify the start value. The `For` activity also has a `End` property that is used to specify the end value. The `For` activity also has a `Step` property that is used to specify the step value. The `For` activity also has a `Body` property that is used to specify the body of the `For` activity.\r\n\r\nWe also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable.\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "projects/elsa/for-activity/for-activity.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/for-activity/for-activity.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"for-activity\", \"for-activity.csproj\", \"{395A446F-7329-4B18-A76E-B85D013C7A93}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{395A446F-7329-4B18-A76E-B85D013C7A93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{395A446F-7329-4B18-A76E-B85D013C7A93}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{395A446F-7329-4B18-A76E-B85D013C7A93}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{395A446F-7329-4B18-A76E-B85D013C7A93}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {4068C2BE-FEE8-4425-B0B2-466760C02F01}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/foreach-activity/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows.Activities;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Memory;\r\nusing Elsa.Workflows.Models;\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nvar counter = new Variable<int>(\"current\", 0);\r\nvar numbers = new[] { \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\" };\r\n\r\nvar workflow = new Sequence\r\n{\r\n    Variables = { counter },\r\n    Activities =\r\n    {\r\n        new ForEach()\r\n        {\r\n            Items = new Input<ICollection<object>>(numbers),\r\n            CurrentValue = new Output<object>(counter),\r\n            Body = new Sequence\r\n                {\r\n                    Activities =\r\n                    {\r\n                        new WriteLine(context => $\"Counter {counter.Get(context)}\")\r\n                    }\r\n                }\r\n        }\r\n    }\r\n};\r\n\r\nawait runner.RunAsync(workflow);\r\n"
  },
  {
    "path": "projects/elsa/foreach-activity/README.md",
    "content": "# ForEach activity\r\n\r\nWe use `ForEach` activity to execute a workflow in loop based on a given collection. The `ForEach` activity has a `Body` property that is used to specify the workflow to be executed in loop. The `ForEach` activity also has a `Values` property that is used to specify the enumerable collection.\r\n\r\nWe also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable.\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "projects/elsa/foreach-activity/foreach-activity.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/foreach-activity/foreach-activity.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"foreach-activity\", \"foreach-activity.csproj\", \"{9ED18A15-FE53-441E-AE96-8F0CCDB89881}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{9ED18A15-FE53-441E-AE96-8F0CCDB89881}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{9ED18A15-FE53-441E-AE96-8F0CCDB89881}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{9ED18A15-FE53-441E-AE96-8F0CCDB89881}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{9ED18A15-FE53-441E-AE96-8F0CCDB89881}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {3E633A85-02E5-4554-B406-43B08E0B7088}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/fork-activity/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows.Activities;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Memory;\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nvar magicNumber = new Variable<int>(\"magic-number\", 0);\r\n\r\nvar workflow = new Sequence\r\n{\r\n    Activities = \r\n    {\r\n        new WriteLine(\"Start workflow before\"),\r\n        new Fork {\r\n            Branches = \r\n            {\r\n                new Sequence \r\n                {\r\n                    Activities = \r\n                    {\r\n                        new WriteLine(\"Branch 1 Step 1\"),\r\n                        new WriteLine(\"Branch 1 Step 2\")\r\n                    }\r\n                },\r\n                new Sequence\r\n                {\r\n                    Activities = \r\n                    {\r\n                        new WriteLine(\"Branch 2 Step 1\"),\r\n                        new WriteLine(\"Branch 2 Step 2\"),\r\n                        new WriteLine(\"Branch 2 Step 3\"),\r\n                    }\r\n                }\r\n            }\r\n        },\r\n        new WriteLine(\"Finish workflow\")\r\n    }\r\n};\r\n\r\nawait runner.RunAsync(workflow);\r\n\r\n"
  },
  {
    "path": "projects/elsa/fork-activity/README.md",
    "content": "# Fork Activity\r\n\r\nFork Activity allows you to split a workflow into two or more branches, each with its own set of actions. All the branches in the workflow must be completed before the worfklow con continue to the next step after the fork."
  },
  {
    "path": "projects/elsa/fork-activity/fork-activity.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/fork-activity/fork-activity.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"fork-activity\", \"fork-activity.csproj\", \"{FFDDFC87-A449-498C-8F65-918E79232B8E}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{FFDDFC87-A449-498C-8F65-918E79232B8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{FFDDFC87-A449-498C-8F65-918E79232B8E}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{FFDDFC87-A449-498C-8F65-918E79232B8E}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{FFDDFC87-A449-498C-8F65-918E79232B8E}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {B70D532E-9009-447E-856C-6EC0FC5949C4}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/fork-activity-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#8ae9b2\",\r\n        \"activityBar.background\": \"#8ae9b2\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#a779e6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#8ae9b2\",\r\n        \"statusBar.background\": \"#5fe196\",\r\n        \"statusBar.debuggingBackground\": \"#e15faa\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#34d97a\",\r\n        \"statusBarItem.remoteBackground\": \"#5fe196\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#5fe196\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#5fe19699\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#5fe196\"\r\n}"
  },
  {
    "path": "projects/elsa/fork-activity-2/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Activities;\r\nusing Elsa.Workflows.Memory;\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nvar magicNumber = new Variable<int>(\"magic-number\", 0);\r\n\r\nvar msg1 = new Variable<string>(\"msg1\", string.Empty);\r\nvar msg2 = new Variable<string>(\"msg2\", string.Empty);\r\n\r\nvar workflow = new Sequence\r\n{\r\n    Variables = { msg1, msg2 },\r\n    Activities = \r\n    {\r\n\r\n        new WriteLine(\"Start workflow before\"),\r\n        new Fork {\r\n            JoinMode = ForkJoinMode.WaitAny,\r\n            Branches = \r\n            {\r\n                new Sequence \r\n                {\r\n                    Variables = { msg1 },\r\n                    Activities = \r\n                    {\r\n                        new WriteLine(\"Branch 1 Step 1\"),\r\n                        new SetVariable<string>(msg1, \"branch 1\")\r\n                    }\r\n                },\r\n                new Sequence\r\n                {\r\n                    Variables = { msg2 },\r\n                    Activities = \r\n                    {\r\n                        new WriteLine(\"Branch 2 Step 1\"),\r\n                        new SetVariable<string>(msg2, \"branch 2\")\r\n                    }\r\n                }\r\n            }\r\n        },\r\n        new WriteLine(ctx => $\"\"\"Finish workflow with msg1=\"{ msg1.Get(ctx)}\" and msg2=\"{ msg2.Get(ctx)}\" \"\"\")\r\n    }\r\n};\r\n\r\nawait runner.RunAsync(workflow);\r\n\r\n"
  },
  {
    "path": "projects/elsa/fork-activity-2/README.md",
    "content": "# Fork Activity 2\r\n\r\nThis sample shows how to set variables in Fork Activity."
  },
  {
    "path": "projects/elsa/fork-activity-2/fork-activity-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/fork-activity-2/fork-activity-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"fork-activity-2\", \"fork-activity-2.csproj\", \"{B27042DF-3973-408A-9972-35F871DC87D3}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{B27042DF-3973-408A-9972-35F871DC87D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B27042DF-3973-408A-9972-35F871DC87D3}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B27042DF-3973-408A-9972-35F871DC87D3}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B27042DF-3973-408A-9972-35F871DC87D3}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {EF2941F6-42E1-4ADF-81F8-AE89DDD45C8B}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/global.json",
    "content": "{\r\n    \"sdk\": {\r\n      \"version\": \"8.0.100\",\r\n      \"rollForward\": \"major\"\r\n    }\r\n  }"
  },
  {
    "path": "projects/elsa/if-activity/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows.Activities;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Memory;\r\nusing Elsa.Workflows.Models;\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nvar money = new Variable<int>(\"money\", 200);\r\n\r\nvar workflow = new Sequence{\r\n    Variables = { money },\r\n    Activities =\r\n    {\r\n        new If \r\n        {\r\n            Condition = new Input<bool>(context => money.Get<int>(context) > 70),\r\n            Then = new WriteLine(\"You have enough money purchase this Nintendo game\"),\r\n            Else = new WriteLine(\"You don't have enough money to purchase this Nintendo game\")            \r\n        }\r\n    } \r\n};\r\n\r\nawait runner.RunAsync(workflow);\r\n"
  },
  {
    "path": "projects/elsa/if-activity/README.md",
    "content": "# If activity\r\n\r\nWe use the `If` activity to execute a set of activities based on a condition. The `If` activity has a `Condition` property that is used to specify the condition. The `Condition` property is of type `Expression` and is used to specify the condition. The `If` activity also has an `Then` property that is used to specify the activities that will be executed if the condition is true. The `If` activity also has an `Else` property that is used to specify the activities that will be executed if the condition is false.\r\n\r\nWe also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable.\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "projects/elsa/if-activity/if-activity.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/if-activity/if-activity.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"if-activity\", \"if-activity.csproj\", \"{79002360-F50D-4A51-AEF8-8141E854C88D}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{79002360-F50D-4A51-AEF8-8141E854C88D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{79002360-F50D-4A51-AEF8-8141E854C88D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{79002360-F50D-4A51-AEF8-8141E854C88D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{79002360-F50D-4A51-AEF8-8141E854C88D}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {E6034C04-C002-498D-A055-E33FC054FA9F}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/readline-activity/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#f2f5f0\",\r\n        \"activityBar.background\": \"#f2f5f0\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#9facbf\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#f2f5f0\",\r\n        \"statusBar.background\": \"#d7e0d2\",\r\n        \"statusBar.debuggingBackground\": \"#dbd2e0\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#bccbb4\",\r\n        \"statusBarItem.remoteBackground\": \"#d7e0d2\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#d7e0d2\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#d7e0d299\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#d7e0d2\"\r\n}"
  },
  {
    "path": "projects/elsa/readline-activity/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows.Activities;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Memory;\r\nusing Elsa.Workflows.Models;\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar input = new Input<string>(\"What is your name\");\r\nvar name = new Variable<string>(\"name\", string.Empty);\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar workflow = new Sequence \r\n{\r\n    Variables = \r\n    {\r\n        name\r\n    },\r\n    Activities = \r\n    {\r\n        new WriteLine(\"What is your name?\"),\r\n        new ReadLine(name),\r\n        new WriteLine(ctx => \"My name is \" + name.Get(ctx))\r\n    }    \r\n};\r\n\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\nawait runner.RunAsync(workflow);\r\n\r\n\r\n"
  },
  {
    "path": "projects/elsa/readline-activity/README.md",
    "content": "# ReadLine Activity\r\n\r\nThis sample demonstrate a simple use of the ReadLine activity that reads a line from the console.\r\n\r\nNote: not working. Needs fixing."
  },
  {
    "path": "projects/elsa/readline-activity/readline-activity.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/readline-activity/readline-activity.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"readline-activity\", \"readline-activity.csproj\", \"{CBDD4A47-9179-4DF7-BA2B-91F7BAE4B163}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{CBDD4A47-9179-4DF7-BA2B-91F7BAE4B163}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{CBDD4A47-9179-4DF7-BA2B-91F7BAE4B163}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{CBDD4A47-9179-4DF7-BA2B-91F7BAE4B163}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{CBDD4A47-9179-4DF7-BA2B-91F7BAE4B163}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {EC3A0A5D-EAEC-4959-9A5B-644122154B50}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/sequence-activity/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#fcf722\",\r\n        \"activityBar.background\": \"#fcf722\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#03bdb8\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#fcf722\",\r\n        \"statusBar.background\": \"#e8e303\",\r\n        \"statusBar.debuggingBackground\": \"#0308e8\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#b6b202\",\r\n        \"statusBarItem.remoteBackground\": \"#e8e303\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#e8e303\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#e8e30399\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#e8e303\"\r\n}"
  },
  {
    "path": "projects/elsa/sequence-activity/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows.Activities;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Memory;\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nvar message = new Variable<string>(\"message\", \"Hello world!\");\r\n\r\nvar workflow = new Sequence{\r\n    Variables = { message },\r\n    Activities =\r\n    {\r\n        new WriteLine(\"Printing variable name and value\"),\r\n        new WriteLine($\"Variable name : value = {message.Name} : {message.Value}\")\r\n    } \r\n};\r\n\r\nawait runner.RunAsync(workflow);\r\n"
  },
  {
    "path": "projects/elsa/sequence-activity/README.md",
    "content": "# Sequence activity\r\n\r\nWe use the `Sequence` activity to create a sequence of activities. The `Sequence` activity is a container activity that contains other activities. The `Sequence` activity executes the activities in the order they are added to the workflow.\r\n\r\nWe also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable.\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "projects/elsa/sequence-activity/sequence-activity.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/sequence-activity/sequence-activity.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"sequence-activity\", \"sequence-activity.csproj\", \"{BF5F2B76-24A9-4C8C-A0E6-BC60F4F4E4D6}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BF5F2B76-24A9-4C8C-A0E6-BC60F4F4E4D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BF5F2B76-24A9-4C8C-A0E6-BC60F4F4E4D6}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BF5F2B76-24A9-4C8C-A0E6-BC60F4F4E4D6}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BF5F2B76-24A9-4C8C-A0E6-BC60F4F4E4D6}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {7AE388D6-02DE-434C-B54A-4C1C059259EE}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/setname-activity/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#95f7cb\",\r\n        \"activityBar.background\": \"#95f7cb\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#b66bf4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#95f7cb\",\r\n        \"statusBar.background\": \"#65f4b4\",\r\n        \"statusBar.debuggingBackground\": \"#f465a5\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#35f19d\",\r\n        \"statusBarItem.remoteBackground\": \"#65f4b4\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#65f4b4\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#65f4b499\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#65f4b4\"\r\n}"
  },
  {
    "path": "projects/elsa/setname-activity/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Activities;\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nvar workflow = new SetNameWorkflow();\r\nvar result = await runner.RunAsync(workflow);\r\n\r\npublic class SetNameWorkflow : WorkflowBase\r\n{\r\n    protected override void Build(IWorkflowBuilder builder)\r\n    {\r\n        builder.Root = new Sequence\r\n        {\r\n            Activities = \r\n            {\r\n                new SetName(\"My Simple Workflow\"),\r\n                new ShowName()\r\n            }\r\n        };\r\n    } \r\n}\r\n\r\npublic class ShowName : Activity\r\n{\r\n    protected override ValueTask ExecuteAsync(ActivityExecutionContext context)\r\n    {\r\n        var instanceName = context.WorkflowExecutionContext.GetProperty<string>(\"WorkflowInstanceName\");\r\n        Console.WriteLine($\"WorkflowInstanceName {instanceName}\");\r\n        return ValueTask.CompletedTask;\r\n    }\r\n}"
  },
  {
    "path": "projects/elsa/setname-activity/README.md",
    "content": "# Sequence activity\r\n\r\nWe use the `Sequence` activity to create a sequence of activities. The `Sequence` activity is a container activity that contains other activities. The `Sequence` activity executes the activities in the order they are added to the workflow.\r\n\r\nWe also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable.\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "projects/elsa/setname-activity/setname-activity.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/setname-activity/setname-activity.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"setname-activity\", \"setname-activity.csproj\", \"{1028085A-93D9-4EAD-91A2-44571C72F079}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{1028085A-93D9-4EAD-91A2-44571C72F079}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{1028085A-93D9-4EAD-91A2-44571C72F079}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{1028085A-93D9-4EAD-91A2-44571C72F079}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{1028085A-93D9-4EAD-91A2-44571C72F079}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {E2677B8A-65FF-4FB9-9CB1-A8ABDD9DCB87}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/setvariable-activity/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows.Activities;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Memory;\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nvar msg = new Variable<string>(\"message\", \"hello\");\r\n\r\nvar workflow = new Sequence\r\n{\r\n    Variables = { msg },\r\n    Activities =\r\n    {\r\n        new WriteLine(msg.Get),\r\n        new SetVariable<string>(msg, \"hello world\"),\r\n        new WriteLine(msg.Get),\r\n        new SetVariable<string>(msg, \"hello world from Cairo\"),\r\n        new WriteLine(msg.Get),\r\n    }\r\n};\r\n\r\nawait runner.RunAsync(workflow);\r\n"
  },
  {
    "path": "projects/elsa/setvariable-activity/README.md",
    "content": "# SetVariable activity\r\n\r\nWe use `SetVariable` to set value to a variable in a workflow. The `SetVariable` activity has a `VariableName` property that is used to specify the name of the variable. The `SetVariable` activity also has a `Value` property that is used to specify the value of the variable.\r\n\r\nWe also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable.\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "projects/elsa/setvariable-activity/setvariable-activity.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/setvariable-activity/setvariable-activity.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"setvariable-activity\", \"setvariable-activity.csproj\", \"{7479DD91-1621-45E5-857C-A60C3DA0738F}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{7479DD91-1621-45E5-857C-A60C3DA0738F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{7479DD91-1621-45E5-857C-A60C3DA0738F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{7479DD91-1621-45E5-857C-A60C3DA0738F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{7479DD91-1621-45E5-857C-A60C3DA0738F}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {92928C6E-784F-4AC4-9415-C4BEA3259A8A}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/while-activity/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows.Activities;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Memory;\r\nusing Elsa.Workflows.Models;\r\nusing Elsa.Workflows.Services;\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nvar counter = new Variable<int>(\"counter\", 1);\r\n\r\nvar workflow = new Sequence\r\n{\r\n    Variables = { counter },\r\n    Activities =\r\n    {\r\n        new While(context => counter.Get(context) <= 10)\r\n        {\r\n            Body = new Sequence\r\n                {\r\n                    Activities =\r\n                    {\r\n                        new WriteLine(context => $\"Counter {counter.Get(context)}\"),\r\n                        new SetVariable<int>(counter, context => counter.Get(context) + 1)\r\n                    }\r\n                }\r\n        }\r\n    }\r\n};\r\n\r\nawait runner.RunAsync(workflow);\r\n"
  },
  {
    "path": "projects/elsa/while-activity/README.md",
    "content": "# While activity\r\n\r\nWe use `While` activity to execute a workflow while a condition is true. The `While` activity has a `Condition` property that is used to specify the condition. The `While` activity also has a `Body` property that is used to specify the body of the `While` activity. The `Body` property will continue to be executed while the `Condition` is true.\r\n\r\nWe also use `Variable` class. The `Variable` class is used to create a variable that can be used in the workflow. The `Variable` class has a `Name` property that is used to specify the name of the variable. The `Variable` class also has a `Value` property that is used to specify the value of the variable.\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "projects/elsa/while-activity/while-activity.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/while-activity/while-activity.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"while-activity\", \"while-activity.csproj\", \"{E9050699-8553-4353-A9FB-99DB87828B69}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{E9050699-8553-4353-A9FB-99DB87828B69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E9050699-8553-4353-A9FB-99DB87828B69}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E9050699-8553-4353-A9FB-99DB87828B69}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E9050699-8553-4353-A9FB-99DB87828B69}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {A0E1BCA6-2B74-49E7-B366-6A07C0AF7B88}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/workflow/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Activities;\r\n\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar workflow = new MessageWorkflow();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nawait runner.RunAsync(workflow);\r\n\r\npublic class MessageWorkflow : WorkflowBase\r\n{\r\n    protected override void Build(IWorkflowBuilder builder)\r\n    {\r\n        builder.WithVariable<string>(\"message\", \"hello workflow\");\r\n        builder.Root = new Sequence\r\n        {\r\n            Activities =\r\n            {\r\n                new WriteLine(context => context.GetVariable<string>(\"message\"))\r\n            } \r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/elsa/workflow/README.md",
    "content": "# Passing a variable to a workflow\r\n\r\nThis sample demonstrates on how to create a custom workflow and pass a variable to it.\r\n\r\n\r\n"
  },
  {
    "path": "projects/elsa/workflow/workflow.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/workflow/workflow.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"workflow\", \"workflow.csproj\", \"{D13EDA84-3EF8-48DC-9035-1DB352DD57B6}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{D13EDA84-3EF8-48DC-9035-1DB352DD57B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D13EDA84-3EF8-48DC-9035-1DB352DD57B6}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D13EDA84-3EF8-48DC-9035-1DB352DD57B6}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D13EDA84-3EF8-48DC-9035-1DB352DD57B6}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {B5D0F378-ECC4-4311-A22B-65E330C14972}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/workflow-2/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Activities;\r\n\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar workflow = new MessageWorkflow();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nvar result = await runner.RunAsync(workflow);\r\n\r\nConsole.WriteLine($\"Workflow Name: {result.Workflow.WorkflowMetadata.Name}\");\r\nConsole.WriteLine($\"Worfklow DefinitionId: { result.Workflow.Identity.DefinitionId }\");\r\nConsole.WriteLine($\"Workflow Description: {result.Workflow.WorkflowMetadata.Description}\");\r\nConsole.WriteLine($\"Workflow Property[workflow]: { result.Workflow.CustomProperties[\"workflow\"]}\");\r\nConsole.WriteLine($\"Workflow Property[created on]: { Convert.ToDateTime(result.Workflow.CustomProperties[\"created on\"]) }\");\r\n\r\npublic class MessageWorkflow : WorkflowBase\r\n{\r\n    protected override void Build(IWorkflowBuilder builder)\r\n    {\r\n        builder.Name = \"Workflow for message\";\r\n        builder.Description = \"This is a sample worfklow definition\";\r\n        builder.WithCustomProperty(\"workflow\", \"This is a workflow\");\r\n        builder.WithCustomProperty(\"created on\", DateTime.UtcNow);\r\n        builder.Root = new Sequence\r\n        {\r\n            Activities = { }\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/elsa/workflow-2/README.md",
    "content": "# Workflow properties including custom properties\r\n\r\nThis sample shows how to set up custom properties for a workflow. We also use the basic workflow properties such as `DefinitionId`, `Description`, etc.\r\n\r\n"
  },
  {
    "path": "projects/elsa/workflow-2/workflow.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/workflow-3/Program.cs",
    "content": "using System.Security.Cryptography;\r\nusing Elsa.Extensions;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Activities;\r\n\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nvar result = await runner.RunAsync<int>(new RandomWorkflow());\r\n\r\nConsole.WriteLine($\"Result {result.Result}\");\r\n\r\npublic class RandomWorkflow : WorkflowBase<int>\r\n{\r\n    protected override void Build(IWorkflowBuilder builder)\r\n    {\r\n        var random = RandomNumberGenerator.Create();\r\n        var bytes = new byte[sizeof(int)]; // 4 bytes\r\n        random.GetNonZeroBytes(bytes);\r\n        var result = BitConverter.ToInt32(bytes);   \r\n\r\n        builder.Root = new SetVariable\r\n        {\r\n            Variable = Result,\r\n            Value = new Elsa.Workflows.Models.Input<object>(ctx => result)\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/elsa/workflow-3/README.md",
    "content": "# A workflow that return results\r\n\r\nThis sample demonstrates on how to create a workflow that returns result.\r\n\r\n"
  },
  {
    "path": "projects/elsa/workflow-3/workflow-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/workflow-3/workflow-3.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"workflow-3\", \"workflow-3.csproj\", \"{05D12AB1-3C67-43E2-BB2A-C48CDAF625B5}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{05D12AB1-3C67-43E2-BB2A-C48CDAF625B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{05D12AB1-3C67-43E2-BB2A-C48CDAF625B5}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{05D12AB1-3C67-43E2-BB2A-C48CDAF625B5}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{05D12AB1-3C67-43E2-BB2A-C48CDAF625B5}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {958E8D64-4047-422A-BA9F-3A8818CE2770}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/workflow-4/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#339eef\",\r\n        \"activityBar.background\": \"#339eef\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#b10e6b\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#339eef\",\r\n        \"statusBar.background\": \"#1186df\",\r\n        \"statusBar.debuggingBackground\": \"#df6a11\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#339eef\",\r\n        \"statusBarItem.remoteBackground\": \"#1186df\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#1186df\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#1186df99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#1186df\"\r\n}"
  },
  {
    "path": "projects/elsa/workflow-4/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Activities;\r\n\r\nusing Elsa.Workflows.Memory;\r\nusing Elsa.Workflows.Models;\r\nusing Elsa.Workflows.Options;\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nvar input = new Dictionary<string, object>{\r\n    [\"name\"] = \"Anne\",\r\n    [\"age\"] = 37\r\n};\r\n\r\nvar option = new RunWorkflowOptions\r\n{\r\n    Input = input\r\n};\r\n\r\nawait runner.RunAsync<InputWorkflow>(option);\r\n\r\npublic class InputWorkflow : WorkflowBase\r\n{\r\n    protected override void Build(IWorkflowBuilder builder)\r\n    {\r\n        var nameInput = new Variable<string>();\r\n        var ageInput = new Variable<int>();\r\n\r\n        builder.Root = new Sequence\r\n        {\r\n            Variables = { nameInput, ageInput },\r\n            Activities = \r\n            {\r\n                new SetVariable\r\n                {\r\n                    Variable = nameInput,\r\n                    Value = new Input<object>(ctx => ctx.GetInput<string>(\"name\"))\r\n                },\r\n                new SetVariable\r\n                {\r\n                    Variable = ageInput,\r\n                    Value = new Input<object>(ctx => ctx.GetInput<int>(\"age\"))\r\n                },\r\n                new WriteLine(ctx => $\"Name: {nameInput.Get(ctx)}\"),\r\n                new WriteLine(ctx => $\"Age: {ageInput.Get(ctx)}\")\r\n            }\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/elsa/workflow-4/README.md",
    "content": "# A workflow with runtime inputs\r\n\r\nThis sample demonstrates on how to create a workflow that take runtime inputs. \r\n"
  },
  {
    "path": "projects/elsa/workflow-4/workflow-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/workflow-4/workflow-4.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"workflow-4\", \"workflow-4.csproj\", \"{723CAD56-A2AE-4DE1-B5C9-43F2C40C651A}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{723CAD56-A2AE-4DE1-B5C9-43F2C40C651A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{723CAD56-A2AE-4DE1-B5C9-43F2C40C651A}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{723CAD56-A2AE-4DE1-B5C9-43F2C40C651A}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{723CAD56-A2AE-4DE1-B5C9-43F2C40C651A}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {732F282F-17C5-4AAD-9070-43CFF23A7762}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/workflow-5/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#f05543\",\r\n        \"activityBar.background\": \"#f05543\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#13ec29\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#f05543\",\r\n        \"statusBar.background\": \"#ec2a14\",\r\n        \"statusBar.debuggingBackground\": \"#14d6ec\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#f05543\",\r\n        \"statusBarItem.remoteBackground\": \"#ec2a14\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#ec2a14\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#ec2a1499\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#ec2a14\"\r\n}"
  },
  {
    "path": "projects/elsa/workflow-5/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows;\r\nusing Elsa.Workflows.Activities;\r\nusing Elsa.Workflows.Memory;\r\n\r\nvar builder = Host.CreateApplicationBuilder(args);\r\nbuilder.Services.AddElsa();\r\n\r\nvar app = builder.Build();\r\n\r\n// Use the service provider from the host\r\nvar runner = app.Services.GetRequiredService<IWorkflowRunner>();\r\nawait runner.RunAsync(new ConstructorWorkflow(\"Anne\", 37));\r\n\r\npublic class ConstructorWorkflow : WorkflowBase\r\n{\r\n    private readonly Variable<string> _name;\r\n    private readonly Variable<int> _age;\r\n\r\n    public ConstructorWorkflow(string name, int age)\r\n    {\r\n        _name = new Variable<string>(\"name\", name);\r\n        _age = new Variable<int>(\"age\", age);\r\n    }\r\n\r\n    protected override void Build(IWorkflowBuilder builder)\r\n    {\r\n        builder.Root = new Sequence\r\n        {\r\n            Variables = { _name, _age },\r\n            Activities = \r\n            {\r\n                new WriteLine(ctx => $\"Name: {_name.Get(ctx)}\"),\r\n                new WriteLine(ctx => $\"Age: {_age.Get(ctx)}\")\r\n            }\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/elsa/workflow-5/README.md",
    "content": "# Passing values to workflow via constructor\r\n\r\nThis sample demonstrates on how to pass values to a workflow via constructor. \r\n"
  },
  {
    "path": "projects/elsa/workflow-5/workflow-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/workflow-5/workflow-5.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"workflow-5\", \"workflow-5.csproj\", \"{780A3DFE-7E76-4DA2-B24F-91847FFE237B}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{780A3DFE-7E76-4DA2-B24F-91847FFE237B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{780A3DFE-7E76-4DA2-B24F-91847FFE237B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{780A3DFE-7E76-4DA2-B24F-91847FFE237B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{780A3DFE-7E76-4DA2-B24F-91847FFE237B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {298EB2BE-7EBD-4B92-BB90-F1D3094555AF}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/elsa/writeline-activity/Program.cs",
    "content": "using Elsa.Extensions;\r\nusing Elsa.Workflows.Activities;\r\nusing Elsa.Workflows;\r\n\r\nvar services = new ServiceCollection();\r\nservices.AddElsa();\r\n\r\nvar serviceProvider = services.BuildServiceProvider();\r\nvar workflow = new WriteLine(\"Hello world\"); //This is an Esla activity\r\nvar runner = serviceProvider.GetRequiredService<IWorkflowRunner>();\r\n\r\nawait runner.RunAsync(workflow);\r\n\r\n\r\n"
  },
  {
    "path": "projects/elsa/writeline-activity/README.md",
    "content": "# WriteLine Activity\r\n\r\nThis sample demonstrates a very simple workflow Activity that writes a line to the console.\r\n\r\n\r\n\r\n\r\n"
  },
  {
    "path": "projects/elsa/writeline-activity/writeline-activity.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <NoWarn>ASP0000</NoWarn>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Elsa\" Version=\"3.4.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/elsa/writeline-activity/writeline-activity.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"writeline-activity\", \"writeline-activity.csproj\", \"{BFD65E28-39E2-4D86-8458-62F9B595B358}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BFD65E28-39E2-4D86-8458-62F9B595B358}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BFD65E28-39E2-4D86-8458-62F9B595B358}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BFD65E28-39E2-4D86-8458-62F9B595B358}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BFD65E28-39E2-4D86-8458-62F9B595B358}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {1A939CDF-507C-497D-BFCC-CC6EFBBEDA2A}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/endpoint-routing/README.md",
    "content": "# Endpoint Routing (32)\r\n\r\n* [Endpoint Routing - Razor Page](/projects/endpoint-routing/new-routing)\r\n\r\n  ASP.NET Core 3 allows more control on how to organize your endpoints using `app.UseEndpoints`. In this example, we just map Razor Pages routes and nothing else.\r\n\r\n* [Endpoint Routing - MVC](/projects/endpoint-routing/new-routing-2)\r\n\r\n  ASP.NET Core 3 allows more control on how to organize your endpoints using `app.UseEndpoints`. In this example, we just map MVC routes (attribute routing only, not convention routing) and nothing else.\r\n\r\n* [Endpoint Routing - MVC with default route](/projects/endpoint-routing/new-routing-3)\r\n\r\n  Map MVC routes with default `{controller=Home}/{action=Index}/{id?}` set up.\r\n\r\n* [Endpoint Routing - RequestDelegate](/projects/endpoint-routing/new-routing-4)\r\n\r\n  This example shows how to use `RequestDelegate` directly in `app.UseEndpoints` for `GET` operation using `MapGet`. `MapPost`, `MapPut`, and `MapDelete` are also available for use.\r\n\r\n  This allow the creation of very minimalistic web services apps.\r\n\r\n* [Endpoint Routing - RequestDelegate](/projects/endpoint-routing/new-routing-5)\r\n\r\n  This example shows how to use `RequestDelegate` directly in `app.UseEndpoints` using `Map`.\r\n\r\n* [Endpoint Routing - Interrogate available endpoints](/projects/endpoint-routing/new-routing-6)\r\n\r\n  This example shows how to list all available endpoints in your app.\r\n\r\n* [Endpoint Routing - RequestDelegate with HTTP verb filter](/projects/endpoint-routing/new-routing-7)\r\n\r\n  This example shows how to use `RequestDelegate` directly in `app.UseEndpoints` using `MapMethods` that filter request based on one or more HTTP verbs.\r\n\r\n* [Endpoint Routing - Static file fallback](/projects/endpoint-routing/new-routing-8)\r\n\r\n  Return a static page when your request does not match anything else using `MapFallbackToFile`.\r\n\r\n* [Endpoint Routing - Razor Page fallback](/projects/endpoint-routing/new-routing-9)\r\n\r\n  Return a Razor Page when your request does not match anything else using `MapFallbackToPage`.\r\n\r\n* [Endpoint Routing - Obtaining an Endpoint from your Middleware](/projects/endpoint-routing/new-routing-10)\r\n\r\n  Use the brand new `HttpContext.GetEndPoint` extension method to examine the current endpoint that is being executed.\r\n\r\n* [Endpoint Routing - How to obtain metadata in an Endpoint from a Razor page](/projects/endpoint-routing/new-routing-11)\r\n\r\n  Use the brand new `EndPoint.Metadata.GetMetadata<>()` to get values from attributes at your Razor Page.\r\n\r\n* [Endpoint Routing - Obtaining an Endpoint metadata from your Razor Page depending on the request method](/projects/endpoint-routing/new-routing-12)\r\n\r\n  Unlike in MVC, you can't use `Attribute` from the method of a Razor Page. You can only use it from the Model class. This makes getting obtaining the appropriate metadata for each request require an extra step.\r\n\r\n* [Endpoint Routing - Obtaining an Endpoint metadata from your MVC Controller](/projects/endpoint-routing/new-routing-13)\r\n\r\n  Obtain Endpoint metadata from MVC Controller's Action methods.\r\n\r\n* [Endpoint Routing - Obtaining Endpoint feature via IEndpointFeature](/projects/endpoint-routing/new-routing-14)\r\n\r\n  Use `HttpContext.Features.Get<IEndpointFeature>();` to obtain `Endpoint` information for a given Middleware. You can accomplish the same thing using `HttpContext.GetEndpoint`.\r\n\r\n* [Endpoint Routing - Attaching Metadata information to your inline Middleware](/projects/endpoint-routing/new-routing-15)\r\n\r\n  Use `IEndpointConventionBuilder.WithMetadata` to attach metadata information to your inline Middleware.\r\n\r\n* [Endpoint Routing - Map Areas by Convention](/projects/endpoint-routing/new-routing-16)\r\n\r\n  Use `IEndpointRouteBuilder.MapAreaControllerRoute` to configure routing for your areas.\r\n\r\n* [Endpoint Routing - enable MVC but without Views support](/projects/endpoint-routing/new-routing-17)\r\n\r\n  Use `services.AddControllers` to provide MVC without Views supports. Razor Pages is not available. Perfect for Web APIs.\r\n\r\n* [Endpoint Routing - enable MVC but with Views support but without Razor Page](/projects/endpoint-routing/new-routing-18)\r\n\r\n  Use `services.AddControllersWithViews();` to provide MVC with Views supports. Razor Page is not available. So this similar to the \"classic\" MVC configuration.\r\n\r\n* [Endpoint Routing - enable Razor Pages with MVC API support](/projects/endpoint-routing/new-routing-19)\r\n\r\n  Use `services.AddRazorPages()` add supports for Razor Pages and MVC API.\r\n\r\n* [Endpoint Routing - Convention based Routing](/projects/endpoint-routing/new-routing-20)\r\n  \r\n  Use `IEndpointRouteBuilder.MapControllerRoute` to configure convention based routing.\r\n\r\n* [Endpoint Routing - A new way to map health check](/projects/endpoint-routing/new-routing-21)\r\n  \r\n  Use `IEndpointRouteBuilder.MapHealthChecks` to configure health check instead of `IApplicationBuilder.UseHealthChecks`.\r\n\r\n* [Endpoint Routing - Configure Endpoints default on Kestrel](/projects/endpoint-routing/new-routing-22)\r\n\r\n  We configure `KestrelServerOptions.ConfigureEndpointDefaults` so the Endpoints will run only on HTTP/2.\r\n\r\n* [Endpoint Routing - Host Matching](/projects/endpoint-routing/new-routing-23)\r\n\r\n  This example demonstrates on how to configure your endpoint to respond to a request from a specific host. In this example, GET `/` returns a different result depending whether you access it from `localhost:8111` and `localhost:8112`.\r\n\r\n* [Endpoint Routing - Host Matching 2](/projects/endpoint-routing/new-routing-24)\r\n\r\n  This produces the same exact effect as the [previous example above - Host Matching](/projects/endpoint-routing/new-routing-23) except that here we use `IEndpointConventionBuilder.WithMetadata` and `HostAttribute` instead of `IEndpointConventionBuilder.RequireHost`.\r\n\r\n* [Endpoint Routing - Handle MVC routing dynamically](/projects/endpoint-routing/new-routing-25)\r\n\r\n  This example shows how to handle MVC routing dynamically using `MapDynamicControllerRoute` and `DynamicRouteValueTransformer`.\r\n\r\n* [Endpoint Routing - Handle Razor Pages routing dynamically](/projects/endpoint-routing/new-routing-26)\r\n\r\n  This example shows how to handle Razor Pages routing dynamically using `MapDynamicPageRoute` and `DynamicRouteValueTransformer`.\r\n  \r\n* [Endpoint Routing - Setup to Razor Pages areas](/projects/endpoint-routing/new-routing-28)\r\n\r\n  This example shows how to create Razor Pages areas.\r\n\r\n* [Endpoint Routing - Map a route to a Razor Pages in an area](/projects/endpoint-routing/new-routing-27)\r\n\r\n  Map a route to a Razor Pages located in an Area using `Conventions.AddAreaPageRoute`. \r\n\r\n* [Endpoint routing - setup a fallback page in a Razor Pages area](/projects/endpoint-routing/new-routing-29)\r\n\r\n  This sample shows you how to setup a fallback page located in a Razor Pages area. \r\n\r\n* [Endpoint routing - serve different fallback pages depending on route pattern match](/projects/endpoint-routing/new-routing-30)\r\n\r\n  This sample shows how to return different fallback page located in areas depending on the route pattern that matches the request.\r\n  \r\n* [Endpoint routing - anonymous access and authorization](/projects/endpoint-routing/new-routing-31)\r\n\r\n   Allow anonymous access and require authorization to endpoints.\r\n\r\n* [Parameter Transformer ](/projects/endpoint-routing/parameter-transformer)\r\n     \r\n  Use Parameter Transformer to control the creation of route token `[area]`, `[controller]` and `[action]`. In this example we use it on `[controller]` and `[action]`.\r\n   \r\ndotnet8"
  },
  {
    "path": "projects/endpoint-routing/build.bat",
    "content": "dotnet build endpoint-routing\r\ndotnet build endpoint-routing-2\r\ndotnet build endpoint-routing-3\r\ndotnet build endpoint-routing-4\r\ndotnet build endpoint-routing-6\r\ndotnet build new-routing\r\ndotnet build new-routing-2\r\ndotnet build new-routing-3\r\ndotnet build new-routing-4\r\ndotnet build new-routing-5\r\ndotnet build new-routing-6\r\ndotnet build new-routing-7\r\ndotnet build new-routing-8\r\ndotnet build new-routing-9\r\ndotnet build new-routing-10\r\ndotnet build new-routing-11\r\ndotnet build new-routing-12\r\ndotnet build new-routing-13\r\ndotnet build new-routing-14\r\ndotnet build new-routing-15\r\ndotnet build new-routing-16\r\ndotnet build new-routing-17\r\ndotnet build new-routing-18\r\ndotnet build new-routing-19\r\ndotnet build new-routing-20\r\ndotnet build new-routing-21\r\ndotnet build new-routing-22\r\ndotnet build new-routing-23\r\ndotnet build new-routing-24\r\ndotnet build new-routing-25\r\ndotnet build new-routing-26\r\ndotnet build new-routing-27\r\ndotnet build new-routing-28\r\ndotnet build new-routing-29\r\ndotnet build new-routing-30\r\ndotnet build new-routing-31\r\ndotnet build parameter-transformer"
  },
  {
    "path": "projects/endpoint-routing/build.sh",
    "content": "#!/bin/bash\ndotnet build endpoint-routing\ndotnet build endpoint-routing-2\ndotnet build endpoint-routing-3\ndotnet build endpoint-routing-4\ndotnet build endpoint-routing-6\ndotnet build new-routing\ndotnet build new-routing-2\ndotnet build new-routing-3\ndotnet build new-routing-4\ndotnet build new-routing-5\ndotnet build new-routing-6\ndotnet build new-routing-7\ndotnet build new-routing-8\ndotnet build new-routing-9\ndotnet build new-routing-10\ndotnet build new-routing-11\ndotnet build new-routing-12\ndotnet build new-routing-13\ndotnet build new-routing-14\ndotnet build new-routing-15\ndotnet build new-routing-16\ndotnet build new-routing-17\ndotnet build new-routing-18\ndotnet build new-routing-19\ndotnet build new-routing-20\ndotnet build new-routing-21\ndotnet build new-routing-22\ndotnet build new-routing-23\ndotnet build new-routing-24\ndotnet build new-routing-25\ndotnet build new-routing-26\ndotnet build new-routing-27\ndotnet build new-routing-28\ndotnet build new-routing-29\ndotnet build new-routing-30\ndotnet build new-routing-31\ndotnet build parameter-transformer\n"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n            <html><body>\r\n            <b>Hello World running on Endpoint Routing</b>\r\n            <p>As you can see, all the existing routing methods <b>just works</b>.\r\n            Now they are just <a href=\"\"https://blogs.msdn.microsoft.com/webdev/2018/08/27/asp-net-core-2-2-0-preview1-endpoint-routing/\"\">faster</a>. We will explore the cool stuff that Endpoint Routing brings in the next samples.\r\n            <br /><br />\r\n                <li><a href=\"\"/\"\">/</a></li>\r\n                <li><a href=\"\"/home\"\">/ home</a </li>\r\n                <li><a href=\"\"/home/index\"\">/home/index</a></li>\r\n            </ul>\r\n            </body></html> \",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing/endpoint-routing.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.Use(async (HttpContext context, RequestDelegate next) =>\r\n{\r\n    var linkGenerator = context.RequestServices.GetService<LinkGenerator>();\r\n\r\n    var url = linkGenerator.GetUriByAction(context,\r\n           controller: \"Hello\",\r\n           action: \"World\"\r\n       );\r\n\r\n    context.Response.ContentType = \"text/plain\";\r\n    await context.Response.WriteAsync($\"Generated Url: {url}\");\r\n});\r\n\r\napp.MapDefaultControllerRoute();\r\n\r\napp.Run();\r\n\r\n\r\npublic class HelloController\r\n{\r\n    public ActionResult World()\r\n    {\r\n        return null;\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing-2/endpoint-routing-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing-3/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.Use(async (HttpContext context, RequestDelegate next) =>\r\n{\r\n    var linkGenerator = context.RequestServices.GetService<LinkGenerator>();\r\n\r\n    var url = linkGenerator.GetUriByAction(context,\r\n            controller: \"Hello\",\r\n            action: \"World\"\r\n        );\r\n\r\n    var url2 = linkGenerator.GetUriByAction(context,\r\n            controller: \"Hello\",\r\n            action: \"Goodbye\"\r\n        );\r\n\r\n    var url3 = linkGenerator.GetUriByAction(context,\r\n            controller: \"Hello\",\r\n            action: \"CallMe\"\r\n        );\r\n\r\n    var url4 = linkGenerator.GetUriByAction(context,\r\n            controller: \"Greet\",\r\n            action: \"Index\"\r\n        );\r\n\r\n    var url5 = linkGenerator.GetUriByAction(context,\r\n            controller: \"Wave\",\r\n            action: \"Away\"\r\n        );\r\n\r\n    var url6 = linkGenerator.GetUriByAction(context,\r\n            controller: \"XXXX\",\r\n            action: \"YYYY\"\r\n        );\r\n\r\n    context.Response.ContentType = \"text/plain\";\r\n    await context.Response.WriteAsync($@\"Generated Url:\r\n{url}\r\n{url2}\r\n{url3}\r\n{url4}\r\n{url5}\r\n{url6}(It won't produce any link if it cannot figure out controller and action information)\");\r\n});\r\n\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\n[Route(\"[controller]\")]\r\npublic class HelloController\r\n{\r\n    [HttpGet(\"\")]\r\n    public ActionResult World() => null;\r\n\r\n    [HttpGet(\"Goodbye\")]\r\n    public ActionResult Goodbye() => null;\r\n\r\n    [HttpGet(\"[action]\")]\r\n    public ActionResult CallMe() => null;\r\n}\r\n\r\n[Route(\"Greet\")]\r\npublic class GreetController\r\n{\r\n    public ActionResult Index() => null;\r\n}\r\n\r\npublic class WaveController\r\n{\r\n    [Route(\"Wave-Away\")]\r\n    public ActionResult Away() => null;\r\n}\r\n\r\n"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing-3/endpoint-routing-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing-4/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/endpoint-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing-4/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/endpoint-routing-4.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing-4/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.Use(async (HttpContext context, RequestDelegate next) =>\r\n{\r\n    var linkGenerator = context.RequestServices.GetService<LinkGenerator>();\r\n\r\n    var url = linkGenerator.GetUriByAction(context,\r\n           controller: \"Hello\",\r\n           action: \"World\",\r\n           values: new\r\n           {\r\n               name = \"One\"\r\n           }\r\n       );\r\n\r\n    var url2 = linkGenerator.GetUriByAction(context,\r\n           controller: \"Hello\",\r\n           action: \"Goodbye\",\r\n           values: new\r\n           {\r\n               age = 40\r\n           }\r\n       );\r\n\r\n    var url3 = linkGenerator.GetUriByAction(context,\r\n           controller: \"Hello\",\r\n           action: \"CallMe\"\r\n       );\r\n\r\n    var url4 = linkGenerator.GetUriByAction(context,\r\n           controller: \"Greet\",\r\n           action: \"Index\",\r\n           values: new\r\n           {\r\n               isNice = false\r\n           }\r\n       );\r\n\r\n    var url5 = linkGenerator.GetUriByAction(context,\r\n           controller: \"Wave\",\r\n           action: \"Away\",\r\n           values: new\r\n           {\r\n               danger = \"real danger\",\r\n               ahead = \"5 km ahead\"\r\n           }\r\n       );\r\n\r\n    context.Response.ContentType = \"text/plain\";\r\n    await context.Response.WriteAsync($@\"Generated Url:\r\n{url}\r\n{url2}\r\n{url3} (the route value is optional)\r\n{url4}\r\n{url5}\");\r\n});\r\n\r\n\r\napp.MapDefaultControllerRoute();\r\n\r\napp.Run();\r\n\r\n[Route(\"[controller]\")]\r\npublic class HelloController\r\n{\r\n    [HttpGet(\"{name}\")]\r\n    public ActionResult World(string name) => null;\r\n\r\n    [HttpGet(\"Goodbye/{age:int}\")]\r\n    public ActionResult Goodbye(int age) => null;\r\n\r\n    [HttpGet(\"[action]/{byYourName?}\")]\r\n    public ActionResult CallMe(string byYourName) => null;\r\n}\r\n\r\n[Route(\"Greet/{isNice:bool}\")]\r\npublic class GreetController\r\n{\r\n    public ActionResult Index() => null;\r\n}\r\n\r\npublic class WaveController\r\n{\r\n    [Route(\"Wave-Away/{danger:required}/{ahead:required}\")]\r\n    public ActionResult Away(string danger, string ahead) => null;\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing-4/endpoint-routing-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing-6/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/endpoint-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing-6/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/endpoint-routing-4.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing-6/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.Use(async (HttpContext context, RequestDelegate next) =>\r\n{\r\n    var linkGenerator = context.RequestServices.GetService<LinkGenerator>();\r\n\r\n    var url = linkGenerator.GetPathByAction(\r\n           controller: \"Hello\",\r\n           action: \"World\",\r\n           values: new\r\n           {\r\n               name = \"Annie\"\r\n           }\r\n       );\r\n\r\n    var url2 = linkGenerator.GetPathByAction(\r\n           controller: \"Hello\",\r\n           action: \"Goodbye\",\r\n           values: new\r\n           {\r\n               age = 55\r\n           }\r\n       );\r\n\r\n    var url3 = linkGenerator.GetPathByAction(\r\n           controller: \"Hello\",\r\n           action: \"CallMe\"\r\n       );\r\n\r\n    var url4 = linkGenerator.GetPathByAction(\r\n           controller: \"Greet\",\r\n           action: \"Index\",\r\n           values: new\r\n           {\r\n               isNice = true\r\n           }\r\n           );\r\n\r\n    var url5 = linkGenerator.GetPathByAction(\r\n           controller: \"Wave\",\r\n           action: \"Away\",\r\n           values: new\r\n           {\r\n               danger = \"see\",\r\n               ahead = \"soon\"\r\n           }\r\n       );\r\n\r\n    context.Response.ContentType = \"text/plain\";\r\n    await context.Response.WriteAsync($@\"Generated Url:\r\n{url}\r\n{url2}\r\n{url3}\r\n{url4}\r\n{url5}\r\n\");\r\n});\r\n\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\n[Route(\"[controller]\")]\r\npublic class HelloController\r\n{\r\n    [HttpGet(\"{name}\")]\r\n    public ActionResult World(string name) => null;\r\n\r\n    [HttpGet(\"Goodbye/{age:int}\")]\r\n    public ActionResult Goodbye(int age) => null;\r\n\r\n    [HttpGet(\"[action]/{byYourName?}\")]\r\n    public ActionResult CallMe(string byYourName) => null;\r\n}\r\n\r\n[Route(\"Greet/{isNice:bool}\")]\r\npublic class GreetController\r\n{\r\n    public ActionResult Index() => null;\r\n}\r\n\r\npublic class WaveController\r\n{\r\n    [Route(\"Wave-Away/{danger:required}/{ahead:required}\")]\r\n    public ActionResult Away(string danger, string ahead) => null;\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/endpoint-routing-6/endpoint-routing-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n    <body>\r\n        <h1>Razor Pages using new routing</h1>\r\n        <p>\r\n            In this example, only Razor Pages works. If you create an MVC Controller in this sample, it won't work.           \r\n        </p>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing/README.md",
    "content": "# New Routing - enable just Razor Pages\r\n\r\nThis example shows how to enable *just* Razor Pages routes in your app using the method `app.UseRouting`. MVC Controllers won't work at all in this sample."
  },
  {
    "path": "projects/endpoint-routing/new-routing/new-routing.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-10/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-10/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-10/Pages/about.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h2>@HttpContext.Items[\"GreetingFromMiddleWare\"]</h2>    \r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-10/Pages/index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>An example of accessing Endpoint class from a middleware</h1>\r\n    <ul>\r\n        <li><a href=\"/about\">/about</a></li>\r\n    </ul>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-10/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.UseMiddleware<GreeterMiddleware>();\r\napp.MapRazorPages();\r\napp.Run();\r\n\r\npublic class GreeterMiddleware\r\n{\r\n    RequestDelegate _next;\r\n\r\n    readonly LinkGenerator _linkGenerator;\r\n\r\n    public GreeterMiddleware(RequestDelegate next, LinkGenerator linkGenerator)\r\n    {\r\n        _next = next;\r\n        _linkGenerator = linkGenerator;\r\n    }\r\n\r\n    public async Task InvokeAsync(HttpContext httpContext)\r\n    {\r\n        Endpoint endPoint = httpContext.GetEndpoint();\r\n\r\n        if (endPoint.DisplayName == \"/about\")\r\n        {\r\n            httpContext.Items.Add(\"GreetingFromMiddleWare\", \"Hello world from GreetingMiddleware\");\r\n        }\r\n\r\n        await _next.Invoke(httpContext);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-10/README.md",
    "content": "# New Routing - Obtaining an Endpoint from your Middleware\r\n\r\nUse the brand new `HttpContext.GetEndPoint` extension method to examine the current endpoint that is being executed."
  },
  {
    "path": "projects/endpoint-routing/new-routing-10/new-routing-10.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-11/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-11/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#aa94f4\",\r\n        \"activityBar.background\": \"#aa94f4\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#fce8e2\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#aa94f4\",\r\n        \"statusBar.background\": \"#8566ef\",\r\n        \"statusBar.debuggingBackground\": \"#d0ef66\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#aa94f4\",\r\n        \"statusBarItem.remoteBackground\": \"#8566ef\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#8566ef\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#8566ef99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#8566ef\"\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-11/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-11/Pages/about.cshtml",
    "content": "@page\r\n@model PracticalAspNetCore.AboutModel\r\n<html>\r\n\r\n<body>\r\n    <h2>@HttpContext.Items[\"GreetingFromMiddleWare\"]</h2>    \r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-11/Pages/about.cshtml.cs",
    "content": "\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\n\r\nnamespace PracticalAspNetCore\r\n{\r\n    [Message(Content = \"Hello world message from attribute\")]\r\n    public class AboutModel : PageModel\r\n    {\r\n        public void OnGet()\r\n        {\r\n\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-11/Pages/index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>An example of accessing Razor Page attribute values from a middleware using Endpoint class</h1>\r\n    <ul>\r\n        <li><a href=\"/about\">/about</a></li>\r\n    </ul>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-11/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseMiddleware<GreeterMiddleware>();\r\napp.MapRazorPages();\r\napp.Run();\r\n\r\npublic class GreeterMiddleware\r\n{\r\n    RequestDelegate _next;\r\n\r\n    readonly LinkGenerator _linkGenerator;\r\n\r\n    public GreeterMiddleware(RequestDelegate next, LinkGenerator linkGenerator)\r\n    {\r\n        _next = next;\r\n        _linkGenerator = linkGenerator;\r\n    }\r\n\r\n    public async Task InvokeAsync(HttpContext httpContext)\r\n    {\r\n        Endpoint endPoint = httpContext.GetEndpoint();\r\n\r\n        var message = endPoint.Metadata.GetMetadata<MessageAttribute>();\r\n\r\n        if (message != null)\r\n        {\r\n            httpContext.Items.Add(\"GreetingFromMiddleWare\", message.Content);\r\n        }\r\n\r\n        await _next.Invoke(httpContext);\r\n    }\r\n}\r\n\r\n[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]\r\npublic class MessageAttribute : System.Attribute\r\n{\r\n    public string Content { get; set; }\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-11/README.md",
    "content": "# New Routing - Obtaining an Endpoint metadata from your Razor Page\r\n\r\n  Use the brand new `EndPoint.Metadata.GetMetadata<>()` to get values from attributes at your Razor Page."
  },
  {
    "path": "projects/endpoint-routing/new-routing-11/new-routing-11.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-11/new-routing-11.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"new-routing-11\", \"new-routing-11.csproj\", \"{AA9F3970-577F-4ADB-AC5F-B9E7D441819D}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{AA9F3970-577F-4ADB-AC5F-B9E7D441819D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{AA9F3970-577F-4ADB-AC5F-B9E7D441819D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{AA9F3970-577F-4ADB-AC5F-B9E7D441819D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{AA9F3970-577F-4ADB-AC5F-B9E7D441819D}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {790B1FCA-227F-4E9A-8A06-C9E7696B0885}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-12/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-12/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#c766b5\",\r\n        \"activityBar.background\": \"#c766b5\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#bbcc73\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#c766b5\",\r\n        \"statusBar.background\": \"#b743a2\",\r\n        \"statusBar.debuggingBackground\": \"#43b758\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#c766b5\",\r\n        \"statusBarItem.remoteBackground\": \"#b743a2\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#b743a2\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#b743a299\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#b743a2\"\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-12/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-12/Pages/_ViewImports.cshtml",
    "content": "@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n@addTagHelper *, AuthoringTagHelpers"
  },
  {
    "path": "projects/endpoint-routing/new-routing-12/Pages/about.cshtml",
    "content": "@page\r\n@model PracticalAspNetCore.AboutModel\r\n<html>\r\n\r\n<body>\r\n    <h2>@Model.Message</h2>    \r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-12/Pages/about.cshtml.cs",
    "content": "\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\n\r\nnamespace PracticalAspNetCore\r\n{\r\n    [Message(ContentGet = \"This message only shows up on GET\", ContentPost = \"This message only shows up on POST\")]\r\n    public class AboutModel : PageModel\r\n    {\r\n        public string Message { get; set; }\r\n\r\n        public void OnGet()\r\n        {\r\n            Message = HttpContext.Items[\"GreetingFromMiddleWare\"] as string;\r\n        }\r\n\r\n        public void OnPost()\r\n        {\r\n            Message = HttpContext.Items[\"GreetingFromMiddleWare\"] as string;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-12/Pages/index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>An example of accessing Razor Page attribute values from a middleware using Endpoint class</h1>\r\n    <ul>\r\n        <li><a href=\"/about\">/about</a></li>\r\n        <li><form asp-page=\"./about\"><input type=\"submit\" value=\"POST /About\"/></form></li>\r\n    </ul>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-12/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.UseMiddleware<GreeterMiddleware>();\r\napp.MapRazorPages();\r\n\r\napp.Run();\r\n\r\npublic class GreeterMiddleware\r\n{\r\n    RequestDelegate _next;\r\n\r\n    readonly LinkGenerator _linkGenerator;\r\n\r\n    public GreeterMiddleware(RequestDelegate next, LinkGenerator linkGenerator)\r\n    {\r\n        _next = next;\r\n        _linkGenerator = linkGenerator;\r\n    }\r\n\r\n    public async Task InvokeAsync(HttpContext httpContext)\r\n    {\r\n        Endpoint endPoint = httpContext.GetEndpoint();\r\n\r\n        var message = endPoint.Metadata.GetMetadata<MessageAttribute>();\r\n\r\n        if (message != null)\r\n        {\r\n            if (httpContext.Request.Method == HttpMethods.Get)\r\n                httpContext.Items.Add(\"GreetingFromMiddleWare\", message.ContentGet);\r\n            else if (httpContext.Request.Method == HttpMethods.Post)\r\n                httpContext.Items.Add(\"GreetingFromMiddleWare\", message.ContentPost);\r\n        }\r\n\r\n        await _next.Invoke(httpContext);\r\n    }\r\n}\r\n\r\n[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]\r\npublic class MessageAttribute : System.Attribute\r\n{\r\n    public string ContentGet { get; set; }\r\n\r\n    public string ContentPost { get; set; }\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-12/README.md",
    "content": "# New Routing - Obtaining an Endpoint metadata from your Razor Page depending on the request method\r\n\r\n  Unlike in MVC, you can't use `Attribute` from the method of a Razor Page. You can only use it from the Model class. This makes getting obtaining the appropriate metadata for each request require an extra step."
  },
  {
    "path": "projects/endpoint-routing/new-routing-12/new-routing-12.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>new-routing-12</AssemblyName>\r\n    <PackageId>new-routing-12</PackageId>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-12/new-routing-12.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"new-routing-12\", \"new-routing-12.csproj\", \"{CA42C8C6-20F5-4F11-BD41-64880CDC6164}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{CA42C8C6-20F5-4F11-BD41-64880CDC6164}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{CA42C8C6-20F5-4F11-BD41-64880CDC6164}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{CA42C8C6-20F5-4F11-BD41-64880CDC6164}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{CA42C8C6-20F5-4F11-BD41-64880CDC6164}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {F135872C-C9AD-4853-BB6D-E7F97B3E5671}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-13/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-13/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-13/Controllers/HomeController.cs",
    "content": "using System;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace PracticalAspNetCore\r\n{\r\n    public class Data\r\n    {\r\n        public string Message { get; set; }\r\n    }\r\n\r\n    [Route(\"/\")]\r\n    public class HomeController : Controller\r\n    {\r\n        [HttpGet]\r\n        public IActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n\r\n\r\n        [HttpGet(\"about\")]\r\n        [Message(\"Hello World from the GreetingFromMiddleWare[GET]\")]\r\n        public IActionResult About()\r\n        {\r\n            return View(new Data { Message = HttpContext.Items[\"GreetingFromMiddleWare\"] as string });\r\n        }\r\n\r\n        [HttpPost(\"about\")]\r\n        [Message(\"Hello World from the GreetingFromMiddleWare[POST]\")]\r\n        public IActionResult AboutPost()\r\n        {\r\n            return View(\"About\", new Data { Message = HttpContext.Items[\"GreetingFromMiddleWare\"] as string });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-13/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.UseMiddleware<GreeterMiddleware>();\r\napp.MapControllers();\r\n\r\napp.Run();\r\n\r\npublic class GreeterMiddleware\r\n{\r\n    RequestDelegate _next;\r\n\r\n    readonly LinkGenerator _linkGenerator;\r\n\r\n    public GreeterMiddleware(RequestDelegate next, LinkGenerator linkGenerator)\r\n    {\r\n        _next = next;\r\n        _linkGenerator = linkGenerator;\r\n    }\r\n\r\n    public async Task InvokeAsync(HttpContext httpContext)\r\n    {\r\n        Endpoint endPoint = httpContext.GetEndpoint();\r\n\r\n        var message = endPoint.Metadata.GetMetadata<MessageAttribute>();\r\n\r\n        if (message != null)\r\n            httpContext.Items.Add(\"GreetingFromMiddleWare\", message.Content);\r\n\r\n        await _next.Invoke(httpContext);\r\n    }\r\n}\r\n\r\n[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]\r\npublic class MessageAttribute : System.Attribute\r\n{\r\n    public string Content { get; set; }\r\n\r\n    public MessageAttribute(string content) => Content = content;\r\n\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-13/README.md",
    "content": "# New Routing - Obtaining an Endpoint metadata from your MVC Controller\r\n\r\nObtain Endpoint metadata from MVC Controller's Action methods."
  },
  {
    "path": "projects/endpoint-routing/new-routing-13/Views/Home/About.cshtml",
    "content": "@model PracticalAspNetCore.Data\r\n<html>\r\n\r\n<body>\r\n    <h2>@Model.Message</h2>    \r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-13/Views/Home/Index.cshtml",
    "content": "\r\n<html>\r\n\r\n<body>\r\n    <h1>An example of accessing MVC attribute values from a middleware using Endpoint class</h1>\r\n    <ul>\r\n        <li><a href=\"/about\">/about</a></li>\r\n        <li><form asp-action=\"About\"><input type=\"submit\" value=\"POST /About\"/></form></li>\r\n    </ul>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-13/Views/_ViewImports.cshtml",
    "content": "@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n@addTagHelper *, AuthoringTagHelpers"
  },
  {
    "path": "projects/endpoint-routing/new-routing-13/new-routing-13.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-14/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-14/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-14/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Features;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    var feature = context.Features.Get<IEndpointFeature>();\r\n    await context.Response.WriteAsync($\"Endpoint Name {feature.Endpoint.DisplayName}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing-14/README.md",
    "content": "# New Routing - Obtaining Endpoint feature via IEndpointFeature\r\n\r\nUse `HttpContext.Features.Get<IEndpointFeature>();` to obtain `Endpoint` information for a given Middleware. You can accomplish the same thing using `HttpContext.GetEndpoint`."
  },
  {
    "path": "projects/endpoint-routing/new-routing-14/new-routing-14.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-15/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-15/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-15/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    var endpoint = context.GetEndpoint();\r\n    var greeting = endpoint.Metadata.GetMetadata<HelloWorld>();\r\n\r\n    await context.Response.WriteAsync($\"Greeting from metadata : {greeting.Greeting}\");\r\n}).WithMetadata(new HelloWorld { Greeting = \"Hello World\" });\r\n\r\napp.Run();\r\n\r\npublic class HelloWorld\r\n{\r\n    public string Greeting { get; set; }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-15/README.md",
    "content": "# New Routing - Attaching Metadata information to your inline Middleware\r\n\r\nUse `IEndpointConventionBuilder.WithMetadata` to attach metadata information to your inline Middleware."
  },
  {
    "path": "projects/endpoint-routing/new-routing-15/new-routing-15.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-16/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-16/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-16/Areas/Admin/Controllers/HomeController.cs",
    "content": "\r\n\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace PracticalAspNetCore.Areas.Admin.Controllers\r\n{\r\n    [Area(\"Admin\")]\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index() => View();\r\n\r\n        public ActionResult About() => Content(\"About\");\r\n    }\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-16/Areas/Admin/Views/Home/Index.cshtml",
    "content": "Admin Home"
  },
  {
    "path": "projects/endpoint-routing/new-routing-16/Areas/Customer/Controllers/HomeController.cs",
    "content": "\r\n\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace PracticalAspNetCore.Areas.Customer.Controllers\r\n{\r\n    [Area(\"Customer\")]\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index() => View();\r\n    }\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-16/Areas/Customer/Views/Home/Index.cshtml",
    "content": "Customer Home"
  },
  {
    "path": "projects/endpoint-routing/new-routing-16/Controllers/HomeController.cs",
    "content": "\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace PracticalAspNetCore.Controllers\r\n{\r\n    public class HomeController : Controller\r\n    {\r\n        public IActionResult Index() => View();\r\n    }\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-16/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\n//Don't forget that the area name specified must match the name of the area at [Area()] attribute used at the area controllers. \r\napp.MapAreaControllerRoute(\"AdminArea\", \"Admin\", \"Admin/{controller=Home}/{action=Index}/{id?}\");\r\napp.MapAreaControllerRoute(\"CustomerArea\", \"Customer\", \"Customer/{controller=Home}/{action=Index}/{id?}\");\r\napp.MapDefaultControllerRoute();\r\n\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing-16/README.md",
    "content": "# New Routing - Map Areas by Convention\r\n\r\nUse `IEndpointRouteBuilder.MapAreaControllerRoute` to configure routing for your areas."
  },
  {
    "path": "projects/endpoint-routing/new-routing-16/Views/Home/Index.cshtml",
    "content": "<html>\r\n    <body>\r\n        <h1>Setup Areas</h1>\r\n        <ul>\r\n            <li><a href=\"/Admin\">/Admin</a></li>\r\n            <li><a href=\"/Admin/Home/About\">/Admin/Home/About</a></li>\r\n            <li><a href=\"/Customer\">/Customer</a></li>\r\n        </ul>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-16/new-routing-16.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>new-routing-16</AssemblyName>\r\n    <PackageId>new-routing-14</PackageId>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-17/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllers();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\napp.Run();\r\n\r\n[Route(\"\")]\r\npublic class HomeController : Controller\r\n{\r\n    public IActionResult Index() => Content(\"Using services.AddControllers to provide MVC without Views supports. Perfect for Web APIs.\");\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-17/README.md",
    "content": "# New Routing - enable MVC but without Views support or Razor Page.  \r\n\r\nUsing `services.AddControllers` to provide MVC without Views supports. Perfect for Web APIs."
  },
  {
    "path": "projects/endpoint-routing/new-routing-17/new-routing-17.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-18/Controllers/HomeController.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace PracticalAspNetCore\r\n{\r\n    [Route(\"\")]\r\n    public class HomeController : Controller\r\n    {\r\n        public IActionResult Index() => View();\r\n    }\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-18/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\n\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing-18/README.md",
    "content": "# New Routing - enable MVC but with Views support but without Razor Page\r\n\r\nUsing `services.AddControllersWithViews();` to provide MVC with Views supports. Razor Page is not available. So this similar to the \"classic\" MVC configuration."
  },
  {
    "path": "projects/endpoint-routing/new-routing-18/Views/Home/Index.cshtml",
    "content": "<html>\r\n    <body>\r\n        <h1>Classic MVC Configuration</h1>\r\n        services.AddControllersWithViews() add supports for MVC and Views. Razor Page is not available. So this similar to the \"classic\" MVC configuration.\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-18/new-routing-18.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-19/Pages/Index.cshtml",
    "content": "@page\r\n\r\n<html>\r\n    <body>\r\n        <h1>Razor Page and MVC API</h1>\r\n\r\n        services.AddRazorPages() add supports for Razor Page and <a href=\"/api/message\">MVC API (click to fetch a GET API)</a>.\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-19/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\napp.MapRazorPages();\r\n\r\napp.Run();\r\n\r\n[Route(\"/API/Message\")]\r\npublic class APIController : ControllerBase\r\n{\r\n    [HttpGet(\"\")]\r\n    public ActionResult GetMessage()\r\n    {\r\n        return Ok(new { Message = \"services.AddRazorPages() add supports for Razor Pages and MVC API. There is no MVC Views support.\" });\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-19/README.md",
    "content": "# New Routing - enable Razor Pages with MVC API support\r\n\r\n`services.AddRazorPages()` add supports for Razor Pages and MVC API (click to fetch a GET API)."
  },
  {
    "path": "projects/endpoint-routing/new-routing-19/new-routing-19.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\napp.Run();\r\n\r\n[Route(\"\")]\r\npublic class HomeController : Controller\r\n{\r\n    public IActionResult Index() => Content(\"Hello World. Razor Pages won't work in this sample.\");\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-2/README.md",
    "content": "# New Routing - enable just MVC \r\n\r\nThis example shows how to enable *just* MVC routes (with attribute routing, not convention routing) in your app using the method `app.UseRouting`. Razor Pages won't work at all in this sample."
  },
  {
    "path": "projects/endpoint-routing/new-routing-2/new-routing-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-20/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-20/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-20/Controllers/AdminController.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace PracticalAspNetCore.Controllers\r\n{\r\n    public class AdminController : Controller\r\n    {\r\n        public IActionResult Index() => Content(\"Admin Page\");\r\n    }\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-20/Controllers/HomeController.cs",
    "content": "\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace PracticalAspNetCore.Controllers\r\n{\r\n    public class HomeController : Controller\r\n    {\r\n        public IActionResult Index() => View();\r\n\r\n        public IActionResult About() => Content(\"About Page\");\r\n    }\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-20/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllerRoute(\"Admin\", \"Admin\", new\r\n{\r\n    Controller = \"Admin\",\r\n    Action = \"Index\"\r\n});\r\n\r\napp.MapControllerRoute(\"About\", \"About\", new\r\n{\r\n    Controller = \"Home\",\r\n    Action = \"About\"\r\n});\r\n\r\napp.MapControllerRoute(\"Default\", \"{controller=Home}/{action=Index}/{id?}\");\r\n\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing-20/README.md",
    "content": "# Convention based Routing\r\n        \r\nUse `IEndpointRouteBuilder.MapControllerRoute` to configure convention based routing."
  },
  {
    "path": "projects/endpoint-routing/new-routing-20/Views/Home/Index.cshtml",
    "content": "<html>\r\n    <body>\r\n        <h1>Home Page - Convention based Routing</h1>\r\n        Use IEndpointRouteBuilder.MapControllerRoute to configure convention based routing.\r\n        <ul>\r\n            <li><a href=\"/Admin\">/Admin</a></li>\r\n             <li><a href=\"/About\">/About</a></li>\r\n        </ul>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-20/new-routing-20.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-21/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-21/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-21/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddHealthChecks();\r\nvar app = builder.Build();\r\n\r\napp.MapHealthChecks(\"/WhatsUp\");\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync(@\"\r\n        <html>\r\n            <body>\r\n                <h1>Health Check</h1>\r\n                The health check service checks on this url <a href=\"\"/WhatsUp\"\">/WhatsUp</a>. \r\n            </body>\r\n        </html> \r\n        \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing-21/README.md",
    "content": "# A new way to map health check\r\n        \r\nUse `IEndpointRouteBuilder.MapHealthChecks` to configure health check instead of `IApplicationBuilder.UseHealthChecks`. [This is how it's done in ASP.NET Core 2.2](/practical-aspnetcore/blob/master/projects/2-2/health-check/src/Program.cs).\r\n\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-21/new-routing-21.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-22/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-22/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-22/Program.cs",
    "content": "using Microsoft.AspNetCore.Server.Kestrel.Core;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(e =>\r\n    {\r\n        e.Protocols = HttpProtocols.Http2;\r\n    });\r\n}   \r\n);\r\n\r\nvar app = builder.Build();\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync(@\"\r\n        <html>\r\n            <body>\r\n                This endpoint runs on HTTP/2. It is only accessible from the browser over HTTPS connection. \r\n            </body>\r\n        </html> \r\n        \");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-22/README.md",
    "content": "# Configure Kestrel defaults for Endpoints\r\n\r\nWe configure `KestrelServerOptions.ConfigureEndpointDefaults` so the Endpoints will run only on HTTP/2.\r\n\r\nYou can only access this sample over HTTPS. Hence use `https://localhost:5001/` instead of `http://localhost:5000/`.\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-22/new-routing-22.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-23/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ListenLocalhost(8111);\r\n    k.ListenLocalhost(8112); \r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync(\"hello world from http://localhost:8111\");\r\n}).RequireHost(\"localhost:8111\");\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync(\"hello world from http://localhost:8112\");\r\n}).RequireHost(\"localhost:8112\");\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-23/README.md",
    "content": "# Host Matching on your middleware\r\n\r\nThis example demonstrates on how to configure your endpoint to respond to a request from a specific host. In this example, GET `/` returns a different result depending whether you access it from `localhost:8111` and `localhost:8112`.\r\n\r\n**Run this sample through command line `dotnet watch run`**."
  },
  {
    "path": "projects/endpoint-routing/new-routing-23/new-routing-23.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-24/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ListenLocalhost(8111);\r\n    k.ListenLocalhost(8112);\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync(\"hello world from http://localhost:8111\");\r\n}).WithMetadata(new HostAttribute(\"localhost:8111\"));\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync(\"hello world from http://localhost:8112\");\r\n}).WithMetadata(new HostAttribute(\"localhost:8112\"));\r\n\r\napp.Run();\r\n\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-24/README.md",
    "content": "# Host Matching on your middleware version 2\r\n\r\nThis example demonstrates on how to configure your endpoint to respond to a request from a specific host. In this example, GET `/` returns a different result depending whether you access it from `localhost:8111` and `localhost:8112`.\r\n\r\nThis produces the same exact effect as the [previous example](/projects/3-0/new-routing-23) except that here we use `IEndpointConventionBuilder.WithMetadata` and `HostAttribute` instead of `IEndpointConventionBuilder.RequireHost`."
  },
  {
    "path": "projects/endpoint-routing/new-routing-24/new-routing-24.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-25/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc.Routing;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddSingleton<NumberTransformer>();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\napp.MapDynamicControllerRoute<NumberTransformer>(\"{number}\");\r\n\r\napp.Run();\r\n\r\npublic class NumberTransformer : DynamicRouteValueTransformer\r\n{\r\n    public override ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values)\r\n    {\r\n        if (!values.ContainsKey(\"number\"))\r\n            return new ValueTask<RouteValueDictionary>(values);\r\n\r\n        values[\"controller\"] = \"Home\";\r\n\r\n        var action = values[\"number\"] switch\r\n        {\r\n            \"1\" => \"one\",\r\n            \"2\" => \"two\",\r\n            \"3\" => \"three\",\r\n            _ => \"undefined\"\r\n        };\r\n\r\n        values[\"action\"] = action;\r\n\r\n        return new ValueTask<RouteValueDictionary>(values);\r\n    }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    [Route(\"\")]\r\n    public ActionResult Index()\r\n    {\r\n        return Content(@\"<html><body>\r\n        <ul>\r\n            <li><a href=\"\"/1\"\">/1</a></li>\r\n            <li><a href=\"\"/2\"\">/2</a></li>\r\n            <li><a href=\"\"/3\"\">/3</a></li>\r\n            <li><a href=\"\"/4\"\">/4</a></li>\r\n        </ul>\r\n        </body></html>\r\n        \", \"text/html\");\r\n    }\r\n\r\n    public ActionResult One()\r\n    {\r\n        return Content(@\"One\");\r\n    }\r\n\r\n    public ActionResult Two()\r\n    {\r\n        return Content(@\"Two\");\r\n    }\r\n\r\n    public ActionResult Three()\r\n    {\r\n        return Content(@\"Three\");\r\n    }\r\n\r\n    public ActionResult Undefined()\r\n    {\r\n        return Content(\"Undefined\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-25/README.md",
    "content": "# Handle MVC route dynamically\r\n\r\nThis example shows how to handle MVC routing dynamically using `MapDynamicControllerRoute` and `DynamicRouteValueTransformer`.\r\n\r\nThis will allows you to process a given url pattern and then set values to the `RouteValueDictionary` as you see fit."
  },
  {
    "path": "projects/endpoint-routing/new-routing-25/new-routing-25.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-26/Pages/Index.cshtml",
    "content": "@page\r\n<html><body>\r\n    <h1>Dynamic Route for Razor Pages</h1>\r\n    <ul>\r\n        <li><a href=\"/1\">/1</a></li>\r\n        <li><a href=\"/2\">/2</a></li>\r\n        <li><a href=\"/3\">/3</a></li>\r\n        <li><a href=\"/4\">/4</a></li>\r\n    </ul>\r\n</body></html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-26/Pages/One.cshtml",
    "content": "@page\r\n<html><body>\r\n  <h1>One</h1>\r\n</body></html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-26/Pages/Three.cshtml",
    "content": "@page\r\n<html><body>\r\n  <h1>Three</h1>\r\n</body></html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-26/Pages/Two.cshtml",
    "content": "@page\r\n<html><body>\r\n  <h1>Two</h1>\r\n</body></html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-26/Pages/Undefined.cshtml",
    "content": "@page\r\n<html><body>\r\n  <h1>Undefined</h1>\r\n</body></html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-26/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc.Routing;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddSingleton<NumberTransformer>();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.MapDynamicPageRoute<NumberTransformer>(\"{number}\");\r\n\r\napp.Run();\r\n\r\npublic class NumberTransformer : DynamicRouteValueTransformer\r\n{\r\n    public override ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values)\r\n    {\r\n        if (!values.ContainsKey(\"number\"))\r\n            return new ValueTask<RouteValueDictionary>(values);\r\n\r\n        var page = values[\"number\"] switch\r\n        {\r\n            \"1\" => \"/one\",\r\n            \"2\" => \"/two\",\r\n            \"3\" => \"/three\",\r\n            _ => \"/undefined\"\r\n        };\r\n\r\n        Console.WriteLine(\"Route Page\");\r\n        foreach (var k in values)\r\n        {\r\n            Console.WriteLine(\"Key\" + k);\r\n        }\r\n\r\n        values[\"page\"] = page;\r\n\r\n        return new ValueTask<RouteValueDictionary>(values);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-26/README.md",
    "content": "# Handle Razor Pages route dynamically\r\n\r\nThis example shows how to handle Razor Pages routing dynamically using `MapDynamicPageRoute` and `DynamicRouteValueTransformer`.\r\n\r\nThis will allows you to process a given url pattern and then set values to the `RouteValueDictionary` as you see fit."
  },
  {
    "path": "projects/endpoint-routing/new-routing-26/new-routing-26.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-27/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-27/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-27/Areas/Admin/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-27/Areas/Customer/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Customer Area</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-27/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Razor Pages Areas</h1>\r\n    <ul>\r\n        <li><a href=\"/manage/\">/manage</a></li>\r\n        <li><a href=\"/customerservice\">/customerservice</a></li>\r\n    </ul>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-27/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages(x =>\r\n{\r\n    x.Conventions.AddAreaPageRoute(\"Admin\", \"/Index\", \"/Manage\");\r\n    x.Conventions.AddAreaPageRoute(\"Customer\", \"/Index\", \"/CustomerService\");\r\n});\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\n\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing-27/README.md",
    "content": "# New Routing - Map a route to a Razor Pages located in Areas\r\n\r\nMap a route to a Razor Pages located in an Area using `Conventions.AddAreaPageRoute`."
  },
  {
    "path": "projects/endpoint-routing/new-routing-27/new-routing-27.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-28/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-28/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-28/Areas/Admin/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-28/Areas/Admin/Pages/Manage.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area - Manage</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-28/Areas/Admin/Pages/Reports.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area - Reports</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-28/Areas/Customer/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Customer Area</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-28/Areas/Customer/Pages/Tickets.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Customer Area - Tickets</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-28/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Razor Pages Areas</h1>\r\n    <ul>\r\n        <li><a href=\"/Admin/\">/Admin</a></li>\r\n        <li><a href=\"/Admin/Manage\">/Admin/Manage</a></li>\r\n        <li><a href=\"/Admin/Reports\">/Admin/Reports</a></li>\r\n        <li><a href=\"/customer\">/Customer</a></li>\r\n        <li><a href=\"/customer/tickets\">/Customer/Tickets</a></li>\r\n    </ul>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-28/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing-28/README.md",
    "content": "# New Routing - Setup a Razor Page Area\r\n\r\nThis sample shows you how to setup a Razor Pages area.\r\n\r\nYou need to create the following folders structure `Areas/<Your Area>/Pages/Index.cshtml` e.g. `Areas/Admin/Pages/Index.cshtml`. This page will be accessible via `/Admin/`."
  },
  {
    "path": "projects/endpoint-routing/new-routing-28/new-routing-28.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-29/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-29/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-29/Areas/Admin/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-29/Areas/Admin/Pages/Manage.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area - Manage</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-29/Areas/Admin/Pages/Other.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area - Other - Fallback</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-29/Areas/Admin/Pages/Reports.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area - Reports</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-29/Areas/Customer/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Customer Area</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-29/Areas/Customer/Pages/Tickets.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Customer Area - Tickets</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-29/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Razor Pages Fallback in area</h1>\r\n    <p>We configure a fallback page located in an area. Try these links to see its effects. Fallback page only works for non file name route (e.g. without extensions).</p>\r\n    <ul>\r\n        <li><a href=\"/Admin/\">/Admin</a></li>\r\n        <li><a href=\"/Admin/Manage\">/Admin/Manage</a></li>\r\n        <li><a href=\"/Admin/Reports\">/Admin/Reports</a></li>\r\n        <li><a href=\"/Admin/FileUpload\">/Admin/FileUpload</a></li>\r\n        <li><a href=\"/Admin/SecurityCheck\">/Admin/SecurityCheck</a></li>\r\n        <li><a href=\"/customer\">/Customer</a></li>\r\n        <li><a href=\"/customer/tickets\">/Customer/Tickets</a></li>\r\n        <li><a href=\"/customer/upgrade\">/Customer/Upgrade</a></li>\r\n        <li><a href=\"/customer/bonus.html\">/Customer/Bonus.html</a></li>\r\n        <li><a href=\"/free\">/free</a></li>\r\n    </ul>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-29/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.MapFallbackToAreaPage(\"/Other\", \"Admin\");\r\n\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing-29/README.md",
    "content": "# New Routing - Fallback page for Razor Pages areas\r\n\r\nThis sample shows you how to setup a fallback page located in a Razor Page area. When the router cannot match any given non file route (e.g without extension), it will resort to returning the fallback page.\r\n\r\nYou can only have one `endpoints.MapFallbackToAreaPage` or `endpoints.MapFallbackToPage` or `endpoints.MapFallbackToFile` definition in your system. If you want to have multiple fallback pages, you need to use the ones with pattern."
  },
  {
    "path": "projects/endpoint-routing/new-routing-29/new-routing-29.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-3/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-3/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-3/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public IActionResult Index() => Content(\"Hello World. We are using default controller route.\");\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-3/README.md",
    "content": "# New Routing - enable just MVC \r\n\r\nThis example shows how to enable *just* MVC with **default** (`{controller=Home}/{action=Index}/{id?}`) route in your app using the method `app.UseRouting`. Razor Pages won't work at all in this sample."
  },
  {
    "path": "projects/endpoint-routing/new-routing-3/new-routing-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/Areas/Admin/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/Areas/Admin/Pages/Manage.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area - Manage</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/Areas/Admin/Pages/Other.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area - Other - Fallback</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/Areas/Admin/Pages/OtherLevel.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area - Deep Level Pattern - Fallback</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/Areas/Admin/Pages/OtherNumber.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area - Other Number - Fallback</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/Areas/Admin/Pages/Reports.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Admin Area - Reports</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/Areas/Customer/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Customer Area</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/Areas/Customer/Pages/Tickets.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Customer Area - Tickets</h1>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>Razor Pages Fallback in area</h1>\r\n    <p>We configure a fallback page located in an area using route patterns. Try these links to see its effects. Fallback page only works for non file name route (e.g. without extensions).</p>\r\n    <ul>\r\n        <li><a href=\"/Admin/\">/Admin</a></li>\r\n        <li><a href=\"/Admin/Manage\">/Admin/Manage</a></li>\r\n        <li><a href=\"/Admin/Reports\">/Admin/Reports</a></li>\r\n        <li><a href=\"/Admin/FileUpload\">/Admin/FileUpload</a></li>\r\n        <li><a href=\"/Admin/SecurityCheck\">/Admin/SecurityCheck</a></li>\r\n        <li><a href=\"/customer\">/Customer</a></li>\r\n        <li><a href=\"/customer/tickets\">/Customer/Tickets</a></li>\r\n        <li><a href=\"/customer/upgrade\">/Customer/Upgrade</a></li>\r\n        <li><a href=\"/customer/bonus.html\">/Customer/Bonus.html</a></li>\r\n        <li><a href=\"/free\">/free</a></li>\r\n        <li><a href=\"/1\">/1</a></li>\r\n    </ul>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapRazorPages();\r\napp.MapFallbackToAreaPage(\"/Other\", \"Admin\");\r\napp.MapFallbackToAreaPage(\"{segment}/{segment2}\", \"/OtherLevel\", \"Admin\");\r\napp.MapFallbackToAreaPage(\"{number:int}\", \"/OtherNumber\", \"Admin\");\r\n\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/README.md",
    "content": "# New Routing - Fallback page for Razor Pages areas with route patterns\r\n\r\nThis sample shows how to return different fallback page located in areas depending on the route pattern that matches the request."
  },
  {
    "path": "projects/endpoint-routing/new-routing-30/new-routing-30.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>new-routing-29</AssemblyName>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-31/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-31/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-31/Program.cs",
    "content": "using Microsoft.AspNetCore.Authentication.Cookies;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)\r\n        .AddCookie(options =>\r\n        {\r\n            options.LoginPath = new PathString(\"/login\");\r\n        });\r\n\r\nbuilder.Services.AddAuthorization();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseAuthentication();\r\napp.UseAuthorization();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync(@\"<html><body>\r\n                    This is home page<br/>\r\n                    <a href=\"\"protected\"\">Click here</a> trying to access protected area\r\n                    </body></html>\");\r\n})\r\n.AllowAnonymous();\r\n\r\napp.MapGet(\"/login\", async context =>\r\n{\r\n    await context.Response.WriteAsync(\"You must login\");\r\n});\r\n\r\napp.MapGet(\"/protected\", async context =>\r\n{\r\n    await context.Response.WriteAsync(\"Valuable area\");\r\n}).RequireAuthorization();\r\n\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing-31/README.md",
    "content": "# Allow anonymous access and require authorization to endpoints\r\n\r\n  Use `.AllowAnonymous()` and `.RequireAuthorization` extension methods to allow anonymous access and demand authorization."
  },
  {
    "path": "projects/endpoint-routing/new-routing-31/new-routing-31.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-4/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-4/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-4/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync(\"Hello world\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-4/README.md",
    "content": "# New Routing - use RequestDelegate directly\r\n\r\nThis example shows how to use `RequestDelegate` directly in `app.UseRouting` for `GET` operation using `MapGet`. `MapPost`, `MapPut`, and `MapDelete` are also available for use."
  },
  {
    "path": "projects/endpoint-routing/new-routing-4/new-routing-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-5/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-5/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-5/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.Map(\"/\", async context =>\r\n{\r\n    if (context.Request.Method == \"GET\")\r\n        await context.Response.WriteAsync(\"Hello world\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-5/README.md",
    "content": "# New Routing - use RequestDelegate directly\r\n\r\nThis example shows how to use `RequestDelegate` directly in `app.UseRouting` using `Map`. `Map` does not filter based on HTTP Verb, hence you will have to check the request Verb yourself. It's useful to handle request such as `PATCH` that does not have helper methods already."
  },
  {
    "path": "projects/endpoint-routing/new-routing-5/new-routing-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-6/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-6/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-6/Pages/About.cshtml",
    "content": "@page \"/about-us\"\r\n\r\n<h1>This is about us</h1>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-6/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddMvc();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"hello\", async context => await context.Response.WriteAsync(\"hello\"));\r\napp.MapPost(\"new-hello\", async context => await context.Response.WriteAsync(\"hello\"));\r\napp.MapDelete(\"hello\", async context => await context.Response.WriteAsync(\"hello\"));\r\napp.MapPut(\"hello\", async context => await context.Response.WriteAsync(\"hello\"));\r\napp.MapControllers();\r\napp.MapRazorPages();\r\n\r\napp.Map(\"\", async context =>\r\n{\r\n    var route = app as IEndpointRouteBuilder;\r\n\r\n    foreach (EndpointDataSource x in route.DataSources)\r\n    {\r\n        await context.Response.WriteAsync($\"{x}\\n\");\r\n        foreach (RouteEndpoint e in x.Endpoints)\r\n        {\r\n            await context.Response.WriteAsync($\"Display Name: {e.DisplayName}\\n\");\r\n            await context.Response.WriteAsync($\"Route Pattern: {e.RoutePattern.RawText}\\n\");\r\n            await context.Response.WriteAsync($\"Metadata Count: {e.Metadata.Count}\\n\");\r\n            foreach (var mm in e.Metadata)\r\n            {\r\n                await context.Response.WriteAsync($\"Metadata: {mm}\\n\");\r\n            }\r\n            await context.Response.WriteAsync(\"\\n\");\r\n        }\r\n        await context.Response.WriteAsync(\"\\n\\n\");\r\n    }\r\n});\r\n\r\napp.Run();\r\n\r\n[Route(\"MVC\")]\r\npublic class HomeController : Controller\r\n{\r\n    [HttpGet(\"Greeting\")]\r\n    public IActionResult Index() => Content(\"Oi\");\r\n\r\n    [HttpPost(\"Greeting\")]\r\n    public IActionResult Greeting() => Content(\"Oi\");\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-6/README.md",
    "content": "# New Routing - interrogate available endpoints in your app\r\n\r\nUse `route.DataSources` to interrogate all the available endpoints in your app. It's really handy."
  },
  {
    "path": "projects/endpoint-routing/new-routing-6/new-routing-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-7/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-7/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-7/Pages/About.cshtml",
    "content": "@page \"/about-us\"\r\n\r\n<h1>This is about us</h1>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-7/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapMethods(\"\", new[] { \"GET\" }, async context =>\r\n{\r\n    var content =\r\n@\"<html>\r\n<body>\r\n<h1>Hello World</h1>\r\n<form method=\"\"post\"\" action=\"\"/about\"\">\r\n<input type=\"\"submit\"\" value=\"\"POST\"\" />\r\n</form>\r\n</body>\r\n</html>\";\r\n    await context.Response.WriteAsync(content);\r\n\r\n});\r\n\r\napp.MapMethods(\"about\", new[] { \"POST\" }, async context =>\r\n{\r\n    var content =\r\n@\"<html>\r\n<body>\r\n<h1>This page only supports POST method</h1>\r\n<p>\r\nIf you try to retrieve this page directly, you will see nothing.\r\n</p>\r\n</body>\r\n</html>\";\r\n    await context.Response.WriteAsync(content);\r\n\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing-7/README.md",
    "content": "# New Routing - using RequestDelegate with HTTP verb filter\r\n\r\nRespond to a url pattern and filter the request based on HTTP verbs."
  },
  {
    "path": "projects/endpoint-routing/new-routing-7/new-routing-7.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-8/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-8/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-8/Program.cs",
    "content": "using Microsoft.Extensions.FileProviders;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/contact/us\", async context =>\r\n{\r\n    await context.Response.WriteAsync(\"Contact Us\");\r\n});\r\n\r\napp.MapFallbackToFile(\"index.html\", new StaticFileOptions()\r\n{\r\n    FileProvider = new PhysicalFileProvider(Path.Combine(app.Environment.ContentRootPath, \"static\")),\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing-8/README.md",
    "content": "# New Routing - Static file fallback\r\n\r\nReturn a static page when your request does not match anything else using `MapFallbackToFile`."
  },
  {
    "path": "projects/endpoint-routing/new-routing-8/new-routing-8.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/new-routing-8/static/index.html",
    "content": "<html>\r\n\r\n<body>\r\n    <h1>This is a static page that got served when nothing else matches your request</h1>\r\n    <ul>\r\n        <li><a href=\"/contact/us\">/contact/us</a></li>\r\n        <li><a href=\"/about\">/about</a></li>\r\n        <li><a href=\"/buy-this\">/buy-this</a></li>\r\n    </ul>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-9/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/new-routing-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-9/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/new-routing-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/endpoint-routing/new-routing-9/Pages/index.cshtml",
    "content": "@page\r\n<html>\r\n\r\n<body>\r\n    <h1>This is a Razor Page that got served when nothing else matches your request</h1>\r\n    <ul>\r\n        <li><a href=\"/contact/us\">/contact/us</a></li>\r\n        <li><a href=\"/about\">/about</a></li>\r\n        <li><a href=\"/buy-this\">/buy-this</a></li>\r\n    </ul>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/endpoint-routing/new-routing-9/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.MapGet(\"/contact/us\", async context =>\r\n{\r\n    await context.Response.WriteAsync(\"Contact Us\");\r\n});\r\n\r\napp.MapFallbackToPage(\"/Index\");\r\n\r\napp.Run();"
  },
  {
    "path": "projects/endpoint-routing/new-routing-9/README.md",
    "content": "# New Routing - Razor Page fallback\r\n\r\nReturn a Razor Page when your request does not match anything else using `MapFallbackToPage`."
  },
  {
    "path": "projects/endpoint-routing/new-routing-9/new-routing-9.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/endpoint-routing/parameter-transformer/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.Extensions.Configuration;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Routing;\r\nusing Microsoft.AspNetCore.Mvc.ApplicationModels;\r\nusing System.Text.RegularExpressions;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddMvc(options =>\r\n{\r\n    options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()));\r\n});\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\n[Route(\"\")]\r\n[Route(\"[controller]/[action]\")]\r\npublic class HomeController : Controller\r\n{\r\n    [HttpGet(\"\")]\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n            <html><body>\r\n            <h1>Parameter Transformer</h1>\r\n            <p>\r\n                Now all your PascalCase action becomes kebab-case, e.g. AboutUs becomes about-us. Remember that the transformation happens only on the token replacement [controller] and [action].\r\n            </p> \r\n            <ul>\r\n                <li><a href=\"\"/\"\">/</a></li>\r\n                <li><a href=\"\"/home/about-us\"\">/home/about-us</a </li>\r\n                <li><a href=\"\"/home/order-items-now\"\">/home/order-items-now</a></li>\r\n                <li><a href=\"\"/WeAreAmazing\"\">/WeAreAmazing</a></li>\r\n                <li><a href=\"\"/get-this-offers-now\"\">/get-this-offers-now</a></li>\r\n            </ul>\r\n            </body></html> \",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    public ActionResult AboutUs()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n            <html><body>\r\n                <h2>About Us</h2>\r\n            </ul>\r\n            </body></html> \",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    public ActionResult OrderItemsNow()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n            <html><body>\r\n                <h2>Order Items Now</h2>\r\n            </ul>\r\n            </body></html> \",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [Route(\"WeAreAmazing\")]\r\n    public ActionResult Random()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n            <html><body>\r\n                <h2>We are Amazing</h2>\r\n            </ul>\r\n            </body></html> \",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n\r\n[Route(\"[controller]\")]\r\npublic class GetThisOffersNowController : Controller\r\n{\r\n    public ActionResult TheNameOfThisActionDoesNotMatterBecauseThisIsTheOnlyOneInThisController()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n            <html><body>\r\n                <h2>Get This Offers Now</h2>\r\n                This is an example where the transformation applied to the [controller] token.\r\n            </ul>\r\n            </body></html> \",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n\r\npublic class SlugifyParameterTransformer : IOutboundParameterTransformer\r\n{\r\n    public string TransformOutbound(object value)\r\n    {\r\n        if (value == null)\r\n            return null;\r\n\r\n        return Regex.Replace(value.ToString(), \"([a-z])([A-Z])\", \"$1-$2\").ToLower();\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/endpoint-routing/parameter-transformer/parameter-transformer.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <PackageId>parameter-transformer</PackageId>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/exception-handler-middleware/README.md",
    "content": "# IExceptionHandler\r\n\r\n  * [IExceptionHandler](iexception-handler)\r\n  \r\n    Implement `IExceptionHandler` to handle ASP.NET Core exceptions.\r\n\r\n  * [Multiple IExceptionHandler](iexception-handler-2)\r\n  \r\n    Implement multiple `IExceptionHandler` to handle ASP.NET Core exceptions.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/exception-handler-middleware/build.bat",
    "content": "dotnet build iexception-handler\r\ndotnet build iexception-handler-2"
  },
  {
    "path": "projects/exception-handler-middleware/build.sh",
    "content": "#!/bin/bash\ndotnet build iexception-handler\ndotnet build iexception-handler-2\n"
  },
  {
    "path": "projects/exception-handler-middleware/iexception-handler/Program.cs",
    "content": "using Microsoft.AspNetCore.Diagnostics;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddExceptionHandler<DefaultExceptionHandler>();\r\n\r\nvar app = builder.Build();\r\napp.UseExceptionHandler(opt => { });\r\n\r\napp.MapGet(\"/\", () => \r\n{\r\n    throw new Exception(\"Something went wrong\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class DefaultExceptionHandler : IExceptionHandler\r\n{\r\n    public async ValueTask<bool> TryHandleAsync(HttpContext httpContext, Exception exception, CancellationToken cancellationToken)\r\n    {\r\n        await httpContext.Response.WriteAsync($\"\"\"\r\n        <html>\r\n            <body>\r\n                Opps sorry. Exception message is {exception.Message} at {httpContext.Request.Method} {httpContext.Request.Path}.\r\n            </body>\r\n        </html>\r\n        \"\"\");\r\n        return true;\r\n    }\r\n}"
  },
  {
    "path": "projects/exception-handler-middleware/iexception-handler/README.md",
    "content": "# Implement IExceptionHandler to handle unhandled exceptions\r\n\r\nImplement `IExceptionHandler` for handling exceptions."
  },
  {
    "path": "projects/exception-handler-middleware/iexception-handler/iexception-handler.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/exception-handler-middleware/iexception-handler/iexception-handler.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"iexception-handler\", \"iexception-handler.csproj\", \"{14D0E714-54E8-409E-A7F7-DAE9860E46AD}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{14D0E714-54E8-409E-A7F7-DAE9860E46AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{14D0E714-54E8-409E-A7F7-DAE9860E46AD}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{14D0E714-54E8-409E-A7F7-DAE9860E46AD}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{14D0E714-54E8-409E-A7F7-DAE9860E46AD}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {066322E2-9E78-45D8-BDD7-7679632BD24A}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/exception-handler-middleware/iexception-handler-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Diagnostics;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddExceptionHandler<TimeOutHandler>();\r\nbuilder.Services.AddExceptionHandler<DefaultExceptionHandler>();\r\n\r\nvar app = builder.Build();\r\napp.UseExceptionHandler(opt => { });\r\n\r\napp.MapGet(\"/\", () => \r\n{\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n    <body>\r\n        <ul>\r\n            <li><a href=\"other-exception\">Other exception</a></li>\r\n            <li><a href=\"time-out\">Time out</a></li>\r\n        </ul>\r\n    </body\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/other-exception\", () => \r\n{\r\n    throw new Exception(\"Something went wrong\");\r\n});\r\n\r\napp.MapGet(\"/time-out\", () => \r\n{\r\n    throw new TimeoutException(\"Out of time\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class TimeOutHandler : IExceptionHandler\r\n{\r\n    public async ValueTask<bool> TryHandleAsync(HttpContext httpContext, Exception exception, CancellationToken cancellationToken)\r\n    {\r\n        if (exception is TimeoutException)\r\n        {\r\n            await httpContext.Response.WriteAsync($\"\"\"\r\n            <html>\r\n                <body>\r\n                     From {nameof(TimeOutHandler)}. The exception message is {exception.Message} at {httpContext.Request.Method} {httpContext.Request.Path}.\r\n                </body>\r\n            </html>\r\n            \"\"\");\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n}\r\n\r\npublic class DefaultExceptionHandler : IExceptionHandler\r\n{\r\n    public async ValueTask<bool> TryHandleAsync(HttpContext httpContext, Exception exception, CancellationToken cancellationToken)\r\n    {\r\n        await httpContext.Response.WriteAsync($\"\"\"\r\n        <html>\r\n            <body>\r\n                From {nameof(DefaultExceptionHandler)}. The exception message is {exception.Message} at {httpContext.Request.Method} {httpContext.Request.Path}.\r\n            </body>\r\n        </html>\r\n        \"\"\");\r\n        return true;\r\n    }\r\n}"
  },
  {
    "path": "projects/exception-handler-middleware/iexception-handler-2/README.md",
    "content": "# Implement multiple IExceptionHandler to handle unhandled exceptions\r\n\r\nImplement multiple `IExceptionHandler` for handling exceptions.\r\n\r\n```csharp\r\nbuilder.Services.AddExceptionHandler<TimeOutHandler>();\r\nbuilder.Services.AddExceptionHandler<DefaultExceptionHandler>();\r\n```\r\n\r\nIn this case **the order** of the handles are **important**. `TimeOutHandler` is called first then `DefaultExceptionHandler`.  "
  },
  {
    "path": "projects/exception-handler-middleware/iexception-handler-2/iexception-handler-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/exception-handler-middleware/iexception-handler-2/iexception-handler-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"iexception-handler-2\", \"iexception-handler-2.csproj\", \"{01EC414C-2BCA-4A70-905B-F38AA550B4BC}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{01EC414C-2BCA-4A70-905B-F38AA550B4BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{01EC414C-2BCA-4A70-905B-F38AA550B4BC}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{01EC414C-2BCA-4A70-905B-F38AA550B4BC}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{01EC414C-2BCA-4A70-905B-F38AA550B4BC}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {295FBCEC-01B4-4876-8090-EB36054B692A}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/features/README.md",
    "content": "# Features (11)\r\n\r\n  Features are collection of objects you can obtain from the framework at runtime that serve different purposes.\r\n\r\n  * [Server Addresses Feature](/projects/features/features-server-addresses)\r\n\r\n    Use this Feature to obtain a list of urls that your app is responding to.\r\n\r\n  * [Server Addresses Feature - 2](/projects/features/features-server-addresses-2)\r\n\r\n    Use `IServer` interface to access server addressess when you don't have access to `IApplicationBuilder`. \r\n\r\n  * [Request Feature](/projects/features/features-server-request)\r\n\r\n    Obtain details of a current request. It has some similarity to HttpContext.Request. They are not equal. `HttpContext.Request` has more properties.  \r\n\r\n  * [Connection Feature](/projects/features/features-connection)\r\n\r\n    Use `IHttpConnectionFeature` interface to obtain local ip/port and remote ip/port. \r\n\r\n  * [Custom Feature](/projects/features/features-server-custom)\r\n\r\n    Create your own custom Feature and pass it along from a middleware. \r\n\r\n  * [Custom Feature - Override](/projects/features/features-server-custom-override)\r\n\r\n    Shows how you can replace an implementation of a Feature with another within the request pipeline.\r\n\r\n  * [Request Culture Feature](/projects/features/features-request-culture)\r\n\r\n    Use this feature to detect the culture of a web request through `IRequestCultureFeature`. \r\n\r\n  * [Session Feature](/projects/features/features-session)\r\n\r\n    Use session within your middlewares. This sample shows a basic usage of in memory session. \r\n\r\n  * [Session Feature with Redis](/projects/features/features-session-redis-2)\r\n\r\n    Use session within your middlewares. This sample uses Redis to store session data. \r\n\r\n  * [Maximum Request Body Size Feature](/projects/features/features-max-request-body-size)\r\n\r\n    Use this feature to read and set maximum HTTP Request body size.\r\n\r\n  * [IHttpResponseBodyFeature](/projects/features/features-http-body-response)\r\n\r\n    This new Feature interface consolidate previous version's three response body APIs into one\r\n\r\ndotnet8"
  },
  {
    "path": "projects/features/build.bat",
    "content": "dotnet build features-connection\r\ndotnet build features-http-body-response\r\ndotnet build features-max-request-body-size\r\ndotnet build features-request-culture\r\ndotnet build features-server-addresses\r\ndotnet build features-server-addresses-2\r\ndotnet build features-server-custom\r\ndotnet build features-server-custom-override\r\ndotnet build features-server-request\r\ndotnet build features-session\r\ndotnet build features-session-redis-2"
  },
  {
    "path": "projects/features/build.sh",
    "content": "#!/bin/bash\ndotnet build features-connection\ndotnet build features-http-body-response\ndotnet build features-max-request-body-size\ndotnet build features-request-culture\ndotnet build features-server-addresses\ndotnet build features-server-addresses-2\ndotnet build features-server-custom\ndotnet build features-server-custom-override\ndotnet build features-server-request\ndotnet build features-session\ndotnet build features-session-redis-2\n"
  },
  {
    "path": "projects/features/features-connection/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Features;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(context =>\r\n{\r\n    var connection = context.Features.Get<IHttpConnectionFeature>();\r\n    var str = string.Empty;\r\n    str += $\"Local IP:Port: {connection?.LocalIpAddress}:{connection?.LocalPort}\\n\";\r\n    str += $\"Remote IP:Port: {connection?.RemoteIpAddress}:{connection?.RemotePort}\\n\";\r\n    str += $\"Connection Id: {connection?.ConnectionId}\\n\";\r\n\r\n    return context.Response.WriteAsync($\"{str}\");\r\n\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/features/features-connection/features-connection.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/features/features-http-body-response/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Features;\r\nusing System.Text;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html; charset=utf-8\");\r\n    var feature = context.Features.Get<IHttpResponseBodyFeature>();\r\n    await feature.StartAsync();\r\n    await feature.Stream.WriteAsync(Encoding.UTF8.GetBytes(\"<html><body style=\\\"font-size:240px;text-align:center;\\\">Hello 🌍</body></html>\"));\r\n    await feature.CompleteAsync();\r\n});\r\napp.Run();"
  },
  {
    "path": "projects/features/features-http-body-response/README.MD",
    "content": "# Feature IHttpResponseBodyFeature\r\n\r\nThis new interface consolidates previous features:\r\n\r\n- IHttpResponseFeature.Body\r\n- IHttpSendFileFeature.SendFileAsync \r\n- IHttpBufferingFeature.DisableResponseBuffering\r\n\r\ninto a single interface. More info can be found in this [github issue](https://github.com/aspnet/AspNetCore/issues/12635)."
  },
  {
    "path": "projects/features/features-http-body-response/features-http-body-response.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/features/features-max-request-body-size/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Features;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.Limits.MaxRequestBodySize = 5000;\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.Run(context =>\r\n{\r\n    var bodySize = context.Features.Get<IHttpMaxRequestBodySizeFeature>();\r\n    bodySize.MaxRequestBodySize = 555;\r\n    var str = \"<html><body>\";\r\n    str += $\"Max Request Body Size {bodySize.MaxRequestBodySize}(Is Read Only: {bodySize.IsReadOnly}) You can <strong>also</strong> set this value at KestrelServerOptions.Limits.MaxRequestBodySize\";\r\n    str += \"</body></html>\";\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    return context.Response.WriteAsync($\"{str}\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/features/features-max-request-body-size/README.md",
    "content": "# Feature IHttpMaxRequestBodySizeFeature \r\n\r\nFeature to inspect and modify the maximum request body size for a single request ([doc](https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.features.ihttpmaxrequestbodysizefeature?view=aspnetcore-3.1))."
  },
  {
    "path": "projects/features/features-max-request-body-size/features-max-request-body-size.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/features/features-request-culture/Program.cs",
    "content": "using Microsoft.AspNetCore.Localization;\r\n\r\nvar app = WebApplication.Create();\r\napp.UseRequestLocalization();\r\n\r\napp.Run(async context =>\r\n{\r\n    var cultureFeature = context.Features.Get<IRequestCultureFeature>();\r\n    await context.Response.WriteAsync($\"Request culture: {cultureFeature?.RequestCulture.Culture.EnglishName}\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/features/features-request-culture/features-request-culture.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/features/features-server-addresses/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting.Server.Features;\r\n\r\nvar app = WebApplication.Create();\r\nvar serverAddress = (app as IApplicationBuilder).ServerFeatures.Get<IServerAddressesFeature>();\r\napp.Run(context =>\r\n{\r\n    var str = string.Empty;\r\n    foreach(var a in serverAddress.Addresses)\r\n    {\r\n        str += $\"{a}\\n\";\r\n    }\r\n    return context.Response.WriteAsync(str);\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/features/features-server-addresses/features-server-addresses.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>features-server-addresses</AssemblyName>\r\n    <PackageId>features-server-addresses</PackageId>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/features/features-server-addresses-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting.Server.Features;\r\nusing Microsoft.AspNetCore.Hosting.Server;\r\n\r\nvar app = WebApplication.Create();\r\napp.UseMiddleware<AddressesMiddleware>();\r\napp.Run();\r\n\r\npublic class AddressesMiddleware\r\n{\r\n    IServer _server;\r\n\r\n    IReadOnlyCollection<string> _addresses;\r\n\r\n    public AddressesMiddleware(RequestDelegate next, IServer server)\r\n    {\r\n        _server = server;\r\n    }\r\n\r\n    public async Task Invoke(HttpContext context)\r\n    {\r\n        var str = string.Empty;\r\n\r\n        // We cache the result because the addresses are not going to change. \r\n        // Remember middlewares are singletons, so we can just do this simple check. \r\n        if (_addresses == null)\r\n        {\r\n            var address = _server.Features.Get<IServerAddressesFeature>();\r\n            _addresses = address.Addresses.ToList();\r\n        }\r\n\r\n        foreach (var a in _addresses)\r\n        {\r\n            str += $\"{a}\\n\";\r\n        }\r\n\r\n        await context.Response.WriteAsync(str);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/features/features-server-addresses-2/features-server-addresses-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/features/features-server-custom/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.Use(async (context, next ) =>{\r\n    context.Features.Set<ICustomFeature>(new CustomFeature());\r\n    await next.Invoke();\r\n});\r\n\r\napp.Run(context =>\r\n{\r\n    var custom = context.Features.Get<ICustomFeature>();\r\n    if (custom == null)\r\n        return context.Response.WriteAsync($\"Custom is null\");\r\n    else\r\n        return context.Response.WriteAsync($\"{custom.Greetings}\");\r\n});\r\n\r\napp.Run();\r\n\r\ninterface ICustomFeature \r\n{\r\n    string Greetings {get;}\r\n}\r\n\r\npublic class CustomFeature : ICustomFeature\r\n{\r\n    public string  Greetings => \"This is my custom feature set from previous middleware\";\r\n}\r\n"
  },
  {
    "path": "projects/features/features-server-custom/features-server-custom.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/features/features-server-custom-override/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.Use(async (context, next) =>\r\n   {\r\n       context.Features.Set<ICustomFeature>(new CustomFeature(\"First greeting\"));\r\n       await next.Invoke();\r\n   });\r\n\r\napp.Use(async (context, next) =>\r\n{\r\n    var custom = context.Features.Get<ICustomFeature>();\r\n    await context.Response.WriteAsync($\"{custom?.Greetings}\\n\");\r\n    context.Features.Set<ICustomFeature>(new CustomFeature(\"Second greeting\"));\r\n    await next.Invoke();\r\n});\r\n\r\napp.Run(context =>\r\n{\r\n    var custom = context.Features.Get<ICustomFeature>();\r\n    return context.Response.WriteAsync($\"{custom?.Greetings}\");\r\n});\r\n\r\napp.Run();\r\n\r\ninterface ICustomFeature\r\n{\r\n    string Greetings { get; }\r\n}\r\n\r\npublic class CustomFeature : ICustomFeature\r\n{\r\n\r\n    string _greetings;\r\n\r\n    public CustomFeature(string greetings)\r\n    {\r\n        _greetings = greetings;\r\n    }\r\n\r\n    public string Greetings => _greetings;\r\n}"
  },
  {
    "path": "projects/features/features-server-custom-override/features-server-custom-override.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/features/features-server-request/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Features;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Use(async (context, next) =>\r\n{\r\n    var request = context.Features.Get<IHttpRequestFeature>();\r\n    request.Headers.Append(\"greetings\", \"hello world\");\r\n    await next.Invoke();\r\n});\r\n\r\napp.Run(context =>\r\n{\r\n    return context.Response.WriteAsync($\"hello {context.Request.Headers[\"greetings\"]}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/features/features-server-request/features-server-request.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/features/features-session/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Features;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddDistributedMemoryCache();\r\nbuilder.Services.AddSession();\r\n\r\nvar app = builder.Build();\r\napp.UseSession();\r\n\r\napp.Use(async (context, next) =>\r\n{\r\n    var session = context.Features.Get<ISessionFeature>();\r\n    try\r\n    {\r\n        session.Session.SetString(\"Message\", \"Hello world\");\r\n        session.Session.SetInt32(\"Year\", DateTime.Now.Year);\r\n    }\r\n    catch (Exception ex)\r\n    {\r\n        await context.Response.WriteAsync($\"{ex.Message}\");\r\n    }\r\n    await next.Invoke();\r\n});\r\n\r\napp.Run(async context =>\r\n{\r\n    var session = context.Features.Get<ISessionFeature>();\r\n\r\n    try\r\n    {\r\n        string msg = session.Session.GetString(\"Message\");\r\n        int? year = session.Session.GetInt32(\"Year\");\r\n        await context.Response.WriteAsync($\"{msg} {year}\");\r\n    }\r\n    catch (Exception ex)\r\n    {\r\n        await context.Response.WriteAsync($\"{ex.Message}\");\r\n    }\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/features/features-session/features-session.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/features/features-session-redis-2/Program.cs",
    "content": "using System.Text.Json;\r\nusing Microsoft.AspNetCore.Http.Features;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddStackExchangeRedisCache(options =>\r\n{\r\n    options.Configuration = builder.Configuration[\"redisConnectionString\"];\r\n});\r\n\r\nbuilder.Services.AddSession();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseSession();\r\n\r\napp.Use(async (context, next) =>\r\n{\r\n    var person = new Person\r\n    {\r\n        FirstName = \"Anne\",\r\n        LastName = \"M\"\r\n    };\r\n\r\n    var session = context.Features.Get<ISessionFeature>();\r\n    try\r\n    {\r\n        session.Session.SetString(\"Message\", \"Buon giorno cuore\");\r\n        session.Session.SetInt32(\"Year\", DateTime.Now.Year);\r\n        session.Session.SetString(\"Amore\", JsonSerializer.Serialize(person));\r\n    }\r\n    catch (Exception ex)\r\n    {\r\n        await context.Response.WriteAsync($\"{ex.Message}\");\r\n    }\r\n    await next.Invoke();\r\n});\r\n\r\napp.Run(async context =>\r\n{\r\n    var session = context.Features.Get<ISessionFeature>();\r\n\r\n    try\r\n    {\r\n        string msg = session.Session.GetString(\"Message\");\r\n        int? year = session.Session.GetInt32(\"Year\");\r\n        var amore = JsonSerializer.Deserialize<Person>(session.Session.GetString(\"Amore\"));\r\n\r\n        await context.Response.WriteAsync($\"{amore.FirstName}, {msg} {year}\");\r\n    }\r\n    catch (Exception ex)\r\n    {\r\n        await context.Response.WriteAsync($\"{ex.Message}\");\r\n    }\r\n});\r\n\r\napp.Run();\r\n\r\npublic class Person\r\n{\r\n    public string FirstName { get; set; }\r\n\r\n    public string LastName { get; set; }\r\n}\r\n"
  },
  {
    "path": "projects/features/features-session-redis-2/appSettings.json",
    "content": "{\r\n    \"redisConnectionString\": \"localhost:6379\"\r\n}\r\n"
  },
  {
    "path": "projects/features/features-session-redis-2/features-session-redis-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Extensions.Caching.StackExchangeRedis\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/file-provider/README.md",
    "content": "# File Provider (10)\r\n\r\n* [Serve static files](serve-static-files-1)\r\n\r\n  Simply serve static files (html, css, images, etc).     \r\n\r\n  There are two static files being served in this project, index.html and hello.css. They are stored under ```wwwroot``` folder, which is the default folder location for this library. \r\n\r\n  To access them you have to refer them directly e.g. ```localhost:5000/index.html``` and ```localhost:5000/hello.css```.\r\n\r\n* [Allow Directory Browsing](serve-static-files-2)\r\n\r\n  Allow listing and browsing of your ```wwwroot``` folder.\r\n\r\n* [Use File Server](serve-static-files-3)\r\n\r\n  Combines the functionality of ```UseStaticFiles, UseDefaultFiles, and UseDirectoryBrowser```.\r\n\r\n* [Custom Directory Formatter](serve-static-files-4)\r\n\r\n  Customize the way Directory Browsing is displayed. In this sample the custom view only handles flat directory. We will deal with \r\nmore complex scenario in the next sample.\r\n\r\n* [Custom Directory Formatter - 2](serve-static-files-5)\r\n\r\n  Show custom Directory Browsing and handle directory listing as well as files.\r\n\r\n* [Allow Directory Browsing](serve-static-files-6)\r\n\r\n  Use Directory Browsing on a certain path using ```DirectoryBrowserOptions.RequestPath```, e.g. ```/browse```.\r\n\r\n* [Serve Static Files from more than one folders](serve-static-files-7)\r\n\r\n  This example shows how to serve static files from multiple directories (even outside your application path).\r\n\r\n* [Physical File Provider - Content and Web roots](file-provider-physical)\r\n\r\n  Access the file information on your Web and Content roots. \r\n\r\n* [Custom File Provider](file-provider-custom)\r\n\r\n  Implement a simple and largely nonsense file provider. It is a good starting point to implement your own proper File Provider.\r\n\r\n* [Log Static File Servings](serve-static-files-8)\r\n\r\n  Log information about the static file being served.\r\n    \r\n\r\ndotnet8"
  },
  {
    "path": "projects/file-provider/build.bat",
    "content": "dotnet build file-provider-custom\r\ndotnet build file-provider-physical\r\ndotnet build serve-static-files-1\r\ndotnet build serve-static-files-2\r\ndotnet build serve-static-files-3\r\ndotnet build serve-static-files-4\r\ndotnet build serve-static-files-5\r\ndotnet build serve-static-files-6\r\ndotnet build serve-static-files-7\r\ndotnet build serve-static-files-8"
  },
  {
    "path": "projects/file-provider/build.sh",
    "content": "#!/bin/bash\ndotnet build file-provider-custom\ndotnet build file-provider-physical\ndotnet build serve-static-files-1\ndotnet build serve-static-files-2\ndotnet build serve-static-files-3\ndotnet build serve-static-files-4\ndotnet build serve-static-files-5\ndotnet build serve-static-files-6\ndotnet build serve-static-files-7\ndotnet build serve-static-files-8\n"
  },
  {
    "path": "projects/file-provider/file-provider-custom/Program.cs",
    "content": "using Microsoft.Extensions.FileProviders;\r\nusing Microsoft.Extensions.Primitives;\r\nusing System.Collections;\r\nusing System.Text;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Environment.ContentRootFileProvider = new CustomFileProvider();\r\nvar app = builder.Build();\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n\r\n    using (var stream = app.Environment.ContentRootFileProvider.GetFileInfo(\"\").CreateReadStream())\r\n    {\r\n        var reader = new StreamReader(stream);\r\n        await context.Response.WriteAsync(reader.ReadToEnd());\r\n    }\r\n});\r\n\r\napp.Run();\r\n\r\npublic class CustomDirectoryContents : IDirectoryContents\r\n{\r\n    readonly IEnumerable<IFileInfo> _entries;\r\n\r\n    public CustomDirectoryContents(IEnumerable<IFileInfo> files)\r\n    {\r\n        _entries = files;\r\n    }\r\n\r\n    public bool Exists => true;\r\n    public IEnumerator<IFileInfo> GetEnumerator() => _entries.GetEnumerator();\r\n    IEnumerator IEnumerable.GetEnumerator() => _entries.GetEnumerator();\r\n}\r\n\r\npublic class AlwaysTheSameFile : IFileInfo\r\n{\r\n    public bool Exists => true;\r\n    public long Length { get; }\r\n    public string PhysicalPath => null;\r\n    public string Name { get; }\r\n    public DateTimeOffset LastModified { get; }\r\n    public bool IsDirectory => false;\r\n    public Stream CreateReadStream()\r\n    {\r\n        var text = @\"\r\n            Dhritarashtra said: O Sanjaya, after my sons and the sons of Pandu assembled in the place of pilgrimage at Kurukshetra, desiring to fight, what did they do?\r\n            \";\r\n\r\n        return new MemoryStream(Encoding.UTF8.GetBytes(text));\r\n    }\r\n}\r\n\r\n//https://docs.microsoft.com/en-us/aspnet/core/api/microsoft.extensions.fileproviders.ifileinfo#Microsoft_Extensions_FileProviders_IFileInfo\r\npublic class CustomDirectory : IFileInfo\r\n{\r\n    public bool Exists => true;\r\n    public long Length => -1; // read the offical doc        \r\n    public string PhysicalPath => null; // read the offical doc\r\n    public string Name { get; }\r\n    public DateTimeOffset LastModified { get; }\r\n    public bool IsDirectory => true;\r\n\r\n    public Stream CreateReadStream()\r\n    {\r\n        throw new InvalidOperationException(\"Create Stream is not applicable for directory\");\r\n    }\r\n}\r\n\r\npublic class CustomFileProvider : IFileProvider\r\n{\r\n    public IDirectoryContents GetDirectoryContents(string subpath)\r\n    {\r\n        var list = new List<AlwaysTheSameFile>\r\n            {\r\n                new AlwaysTheSameFile()\r\n            };\r\n\r\n        var contents = new CustomDirectoryContents(list);\r\n        return contents;\r\n    }\r\n\r\n    public IFileInfo GetFileInfo(string subpath) => new AlwaysTheSameFile();\r\n    public IChangeToken Watch(string filter) => NullChangeToken.Singleton;\r\n}\r\n"
  },
  {
    "path": "projects/file-provider/file-provider-custom/file-provider-custom.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/file-provider/file-provider-physical/Program.cs",
    "content": "using Microsoft.Extensions.FileProviders;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n\r\n    var contentRoot = app.Environment.ContentRootFileProvider;\r\n    var contentPhysical = app.Environment.ContentRootFileProvider as PhysicalFileProvider;\r\n\r\n    await context.Response.WriteAsync(\"<h1>Content Root</h1>\");\r\n    await context.Response.WriteAsync($\"{contentPhysical.Root}\");\r\n    await context.Response.WriteAsync($\"<ul>\");\r\n    foreach (var f in contentRoot.GetDirectoryContents(\"\"))\r\n    {\r\n        if (f.IsDirectory)\r\n            await context.Response.WriteAsync($\"<li>{f.Name} - Directory</li>\");\r\n        else\r\n            await context.Response.WriteAsync($\"<li>{f.Name}</li>\");\r\n    }\r\n    await context.Response.WriteAsync($\"</ul>\");\r\n\r\n    var webRoot = app.Environment.WebRootFileProvider;\r\n    var webPhysical = app.Environment.WebRootFileProvider as PhysicalFileProvider;\r\n\r\n    await context.Response.WriteAsync(\"<h1>Web Root</h1>\");\r\n    await context.Response.WriteAsync($\"{webPhysical.Root}\");\r\n    await context.Response.WriteAsync($\"<ul>\");\r\n    foreach (var f in webRoot.GetDirectoryContents(\"\"))\r\n    {\r\n        if (f.IsDirectory)\r\n            await context.Response.WriteAsync($\"<li>{f.Name} - Directory</li>\");\r\n        else\r\n            await context.Response.WriteAsync($\"<li>{f.Name}</li>\");\r\n    }\r\n    await context.Response.WriteAsync($\"</ul>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/file-provider/file-provider-physical/file-provider-physical.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/file-provider/file-provider-physical/wwwroot/hello-world.txt",
    "content": ""
  },
  {
    "path": "projects/file-provider/serve-static-files-1/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.UseStaticFiles();\r\napp.Run();"
  },
  {
    "path": "projects/file-provider/serve-static-files-1/README.md",
    "content": "# Static File\r\n\r\nThis sample is really simple. It's consisted of a single line of code of `app.UseStaticFiles();` to enable full static files support.\r\n\r\nYou have to open `http://localhost:5000/index.html` instead of `http://localhost:5000/` to access the `index.html` files located at the `wwwroot` folder. \r\n"
  },
  {
    "path": "projects/file-provider/serve-static-files-1/serve-static-files.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/file-provider/serve-static-files-1/wwwroot/hello.css",
    "content": "body {\r\n    font-size: large;\r\n}\r\n\r\nh1 {\r\n    color: blueviolet;\r\n}"
  },
  {
    "path": "projects/file-provider/serve-static-files-1/wwwroot/index.html",
    "content": "<html>\r\n<link rel=\"stylesheet\" type=\"text/css\" href=\"hello.css\">\r\n\r\n<body>\r\n    <h1>Static File</h1>\r\n    This is a static file located at wwwroot folder\r\n\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/file-provider/serve-static-files-2/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.UseStaticFiles();\r\napp.UseDirectoryBrowser();\r\napp.Run();"
  },
  {
    "path": "projects/file-provider/serve-static-files-2/serve-static-files-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/file-provider/serve-static-files-2/wwwroot/hello.css",
    "content": ".hello-world {\r\n    font-size: large;\r\n}"
  },
  {
    "path": "projects/file-provider/serve-static-files-2/wwwroot/index.html",
    "content": "This is a static file located at wwwroot folder"
  },
  {
    "path": "projects/file-provider/serve-static-files-2/wwwroot/secrets/one.txt",
    "content": "Secret One"
  },
  {
    "path": "projects/file-provider/serve-static-files-3/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.UseFileServer(enableDirectoryBrowsing: true);\r\napp.Run();"
  },
  {
    "path": "projects/file-provider/serve-static-files-3/serve-static-files-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/file-provider/serve-static-files-3/wwwroot/hello.css",
    "content": ".hello-world {\r\n    font-size: large;\r\n}"
  },
  {
    "path": "projects/file-provider/serve-static-files-3/wwwroot/index2.html",
    "content": "This is a static file located at wwwroot folder"
  },
  {
    "path": "projects/file-provider/serve-static-files-3/wwwroot/secrets/one.txt",
    "content": "Secret One"
  },
  {
    "path": "projects/file-provider/serve-static-files-4/Program.cs",
    "content": "using Microsoft.AspNetCore.StaticFiles;\r\n\r\nvar app = WebApplication.Create();\r\napp.UseStaticFiles();\r\napp.UseDirectoryBrowser(new DirectoryBrowserOptions\r\n{\r\n    Formatter = new DirectoryFormatter()\r\n});\r\n\r\napp.Run();\r\n\r\npublic class DirectoryFormatter : IDirectoryFormatter\r\n{\r\n    public async Task GenerateContentAsync(HttpContext context, IEnumerable<Microsoft.Extensions.FileProviders.IFileInfo> contents)\r\n    {\r\n        context.Response.ContentType = \"text/html\";\r\n\r\n        await context.Response.WriteAsync(@\"\r\n<html>\r\n<head>\r\n    <link href=\"\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\"\" rel=\"\"stylesheet\"\" integrity=\"\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\"\" crossorigin=\"\"anonymous\"\">\r\n</head>\r\n<body>\r\n<div class=\"\"container\"\">\r\n<div class=\"\"row\"\">\r\n\");\r\n        foreach (var c in contents)\r\n        {\r\n            if (c.Name.Contains(\".png\") || c.Name.Contains(\".jpg\"))\r\n                await context.Response.WriteAsync($@\"<div class=\"\"col\"\"><img src=\"\"{c.Name}\"\"/></div>\");\r\n            else\r\n                await context.Response.WriteAsync($@\"<div class=\"\"col\"\">{c.Name}</div>\");\r\n        }\r\n\r\n        await context.Response.WriteAsync(\"</div></div></body></html>\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/file-provider/serve-static-files-4/serve-static-files-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/file-provider/serve-static-files-4/wwwroot/hello.css",
    "content": ".hello-world {\r\n    font-size: large;\r\n}"
  },
  {
    "path": "projects/file-provider/serve-static-files-4/wwwroot/index.html",
    "content": "This is a static file located at wwwroot folder"
  },
  {
    "path": "projects/file-provider/serve-static-files-5/Program.cs",
    "content": "using Microsoft.AspNetCore.StaticFiles;\r\n\r\nvar app = WebApplication.Create();\r\napp.UseStaticFiles();\r\napp.UseDirectoryBrowser(new DirectoryBrowserOptions\r\n{\r\n    Formatter = new DirectoryFormatter()\r\n});\r\n\r\napp.Run();\r\n\r\npublic class DirectoryFormatter : IDirectoryFormatter\r\n{\r\n    public async Task GenerateContentAsync(HttpContext context, IEnumerable<Microsoft.Extensions.FileProviders.IFileInfo> contents)\r\n    {\r\n        context.Response.ContentType = \"text/html\";\r\n\r\n        await context.Response.WriteAsync(@\"\r\n<html>\r\n<head>\r\n    <link href=\"\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\"\" rel=\"\"stylesheet\"\" integrity=\"\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\"\" crossorigin=\"\"anonymous\"\">\r\n</head>\r\n<body>\r\n<div class=\"\"container\"\">\r\n\");\r\n        await context.Response.WriteAsync(\"\\n\");\r\n\r\n        foreach (var c in contents)\r\n        {\r\n            await context.Response.WriteAsync($\"<div class=\\\"row justify-content-center\\\">\\n\");\r\n\r\n            if (c.IsDirectory)\r\n            {\r\n                await context.Response.WriteAsync($\"<div class=\\\"col\\\"><strong>Directory <a href=\\\"{c.Name}\\\">{c.Name}</a></strong></div>\\n\");\r\n            }\r\n            else\r\n            {\r\n                if (c.Name.Contains(\".png\") || c.Name.Contains(\".jpg\"))\r\n                    await context.Response.WriteAsync($\"<div class=\\\"col\\\"><img src=\\\"{c.Name}\\\" class=\\\"img-thumbnail\\\"/></div>\\n\");\r\n                else\r\n                    await context.Response.WriteAsync($\"<div class=\\\"col\\\"><a href=\\\"{c.Name}\\\">{c.Name}</a></div>\\n\");\r\n            }\r\n\r\n            await context.Response.WriteAsync(\"</div>\\n\");\r\n        }\r\n\r\n        await context.Response.WriteAsync(\"\\n</div></body></html>\");\r\n    }\r\n}"
  },
  {
    "path": "projects/file-provider/serve-static-files-5/serve-static-files-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/file-provider/serve-static-files-5/wwwroot/hello.css",
    "content": ".hello-world {\r\n    font-size: large;\r\n}"
  },
  {
    "path": "projects/file-provider/serve-static-files-5/wwwroot/index.html",
    "content": "This is a static file located at wwwroot folder"
  },
  {
    "path": "projects/file-provider/serve-static-files-6/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.UseStaticFiles();\r\napp.UseDirectoryBrowser(new DirectoryBrowserOptions\r\n{\r\n    RequestPath = new PathString(\"/browse\")\r\n});\r\n\r\napp.Run(async context =>\r\n{\r\n    await context.Response.WriteAsync(\"<html><body><a href=\\\"browse\\\">browse directory</a></body></html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/file-provider/serve-static-files-6/serve-static-files-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/file-provider/serve-static-files-6/wwwroot/hello.css",
    "content": ".hello-world {\r\n    font-size: large;\r\n}"
  },
  {
    "path": "projects/file-provider/serve-static-files-6/wwwroot/index.html",
    "content": "This is a static file located at wwwroot folder"
  },
  {
    "path": "projects/file-provider/serve-static-files-6/wwwroot/secrets/one.txt",
    "content": "Secret One"
  },
  {
    "path": "projects/file-provider/serve-static-files-7/Program.cs",
    "content": "using Microsoft.Extensions.FileProviders;\r\n\r\nvar app = WebApplication.Create();\r\napp.UseStaticFiles(); // By default this will server files out of wwwroot folder\r\napp.UseStaticFiles(new StaticFileOptions()\r\n{\r\n    //The PhysialFileProvider will take any valid path. This way you can \r\n    //specify which folders will server the static files\r\n    FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), \"wwwroot2\")),\r\n    RequestPath = new PathString(\"/2\")\r\n});\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n\r\n    await context.Response.WriteAsync(@\"\r\n                <html>\r\n                <body>\r\n                    From wwwroot</br>\r\n                    <img src=\"\"/kitty1.jpg\"\"/>\r\n                    <hr/>\r\n                    From wwwroot2</br>\r\n                    <img src=\"\"/2/kitty2.jpg\"\" />\r\n                </body>\r\n                </html>\r\n                \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/file-provider/serve-static-files-7/README.md",
    "content": "# Serve static files from multiple folders\r\n\r\nThere are many scenarios where you need to serve static files from multiple folders, including those ones outside your application folder. This example shows you how."
  },
  {
    "path": "projects/file-provider/serve-static-files-7/serve-static-files-7.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/file-provider/serve-static-files-8/Program.cs",
    "content": "using Microsoft.Extensions.FileProviders;\r\n\r\nvar app = WebApplication.Create();\r\napp.UseStaticFiles(new StaticFileOptions\r\n{\r\n    OnPrepareResponse = ctx =>\r\n    {\r\n        app.Logger.LogInformation($\"Serving static file: {ctx.File.Name}\");\r\n    }\r\n}); // By default this will server files out of wwwroot folder\r\n\r\napp.UseStaticFiles(new StaticFileOptions()\r\n{\r\n    OnPrepareResponse = ctx =>\r\n    {\r\n        app.Logger.LogInformation($\"Serving static file: {ctx.File.Name}\");\r\n    },\r\n    //The PhysialFileProvider will take any valid path. This way you can \r\n    //specify which folders will server the static files\r\n    FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), \"wwwroot2\")),\r\n    RequestPath = new PathString(\"/2\")\r\n});\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n\r\n    await context.Response.WriteAsync(@\"\r\n                <html>\r\n                <body>\r\n                    From wwwroot</br>\r\n                    <img src=\"\"/kitty1.jpg\"\"/>\r\n                    <hr/>\r\n                    From wwwroot2</br>\r\n                    <img src=\"\"/2/kitty2.jpg\"\" />\r\n                </body>\r\n                </html>\r\n                \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/file-provider/serve-static-files-8/README.md",
    "content": "# Logging Static File Servings\r\n\r\nThere may be a scenario where you need to log information about static file being served. This example shows you how.\r\n\r\n```\r\npublic void Configure(IApplicationBuilder app, ILogger<Startup> logger)\r\n{\r\n    app.UseStaticFiles(new StaticFileOptions {\r\n        OnPrepareResponse = ctx => {\r\n            logger.LogInformation($\"Serving static file: {ctx.File.Name}\");\r\n        }\r\n    });\r\n}    \r\n```\r\n\r\nContribution by [Lohit](https://github.com/lohithgn)."
  },
  {
    "path": "projects/file-provider/serve-static-files-8/serve-static-files-7.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/generic-host/README.md",
    "content": "# Generic Host (9)\r\n\r\n  Generic Host is an awesome way to host all sort of long running tasks and applications, e.g. messaging, background tasks, etc.\r\n\r\n  * [Configure Logging](/projects/generic-host/generic-host-configure-logging)\r\n\r\n    Configure logging for your Generic Host. This technique will be used in the subsequent samples.\r\n\r\n  * [Hello World](/projects/generic-host/generic-host-1)\r\n\r\n    This is the hello world equivalent of a Generic Host service.\r\n\r\n  * [Hello World using Console Lifetime](/projects/generic-host/generic-host-2)\r\n\r\n    Use `UseConsoleLifetime` implicitly. \r\n\r\n  * [Startup and Shutdown order](/projects/generic-host/generic-host-3)\r\n\r\n    Demonstrates the startup and shutdown order of hosted services.\r\n\r\n  * [Start and stop the host](/projects/generic-host/generic-host-4)\r\n\r\n    Demonstrates starting and stopping the host programmatically.\r\n\r\n  * [A service with timed execution](/projects/generic-host/generic-host-5)\r\n\r\n    Demonstrate processing a task on a regular interval using `Task.Delay`.\r\n\r\n  * [Configure Host using Dictionary](/projects/generic-host/generic-host-configure-host)\r\n\r\n    Demonstrate the way to inject configuration values to the host using Dictionary.\r\n\r\n  * [Configure Environment](/projects/generic-host/generic-host-environment)\r\n\r\n    Set your environment using `EnvironmentName.Development` or `EnvironmentName.Production` or `EnvironmentName.Staging`.\r\n\r\n  * [Listen to IHostApplicationLifetime events](/projects/generic-host/generic-host-ihostapplicationlifetime)\r\n\r\n    Inject `IHostApplicationLifetime` and listen to `ApplicationStarted`, `ApplicationStopping` and `ApplicationStopped` events. This is important to allow services to be shutdown gracefully. The shutdown process blocks until `ApplicatinStopping` and `ApplicationStopped` events complete.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/generic-host/build.bat",
    "content": "dotnet build generic-host-1\r\ndotnet build generic-host-2\r\ndotnet build generic-host-3\r\ndotnet build generic-host-4\r\ndotnet build generic-host-5\r\ndotnet build generic-host-configure-app\r\ndotnet build generic-host-configure-host\r\ndotnet build generic-host-configure-logging\r\ndotnet build generic-host-environment\r\ndotnet build generic-host-ihostapplicationlifetime"
  },
  {
    "path": "projects/generic-host/build.sh",
    "content": "#!/bin/bash\ndotnet build generic-host-1\ndotnet build generic-host-2\ndotnet build generic-host-3\ndotnet build generic-host-4\ndotnet build generic-host-5\ndotnet build generic-host-configure-app\ndotnet build generic-host-configure-host\ndotnet build generic-host-configure-logging\ndotnet build generic-host-environment\ndotnet build generic-host-ihostapplicationlifetime\n"
  },
  {
    "path": "projects/generic-host/generic-host-1/Program.cs",
    "content": "await Host.CreateDefaultBuilder(args)\r\n        .ConfigureServices((hostContext, services) =>\r\n        {\r\n            services.AddHostedService<HelloWorldService>();\r\n        })\r\n        .ConfigureLogging(logging =>\r\n        {\r\n            logging.ClearProviders();\r\n            logging.AddConsole();\r\n            logging.AddFilter((provider, category, logLevel) =>\r\n            {\r\n                return !category.Contains(\"Microsoft\");\r\n            });\r\n        }).Build()\r\n        .RunAsync();\r\n\r\npublic class HelloWorldService : IHostedService\r\n{\r\n    ILogger _log;\r\n\r\n    public HelloWorldService(ILogger<HelloWorldService> logger)\r\n    {\r\n        _log = logger;\r\n    }\r\n\r\n    public Task StartAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"Start Hello world\");\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"Goodbye\");\r\n        return Task.CompletedTask;\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-1/generic-host.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-2/Program.cs",
    "content": "await Host.CreateDefaultBuilder(args)\r\n          .ConfigureServices((hostContext, services) =>\r\n          {\r\n              services.AddHostedService<HelloWorldService>();\r\n          })\r\n          .ConfigureLogging(logging =>\r\n          {\r\n              logging.ClearProviders();\r\n              logging.AddConsole();\r\n              logging.AddFilter((provider, category, logLevel) =>\r\n              {\r\n                  return !category.Contains(\"Microsoft\");\r\n              });\r\n          })\r\n          .RunConsoleAsync();\r\n\r\npublic class HelloWorldService : IHostedService\r\n{\r\n    ILogger _log;\r\n\r\n    public HelloWorldService(ILogger<HelloWorldService> logger)\r\n    {\r\n        _log = logger;\r\n    }\r\n\r\n    public Task StartAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"Start Hello world\");\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"Goodbye\");\r\n        return Task.CompletedTask;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-2/generic-host-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-3/Program.cs",
    "content": "await new HostBuilder()\r\n    .ConfigureServices((hostContext, services) =>\r\n    {\r\n        services.AddHostedService<HelloWorldService>();\r\n        services.AddHostedService<HelloWorldService2>();\r\n        services.AddHostedService<HelloWorldService3>();\r\n    })\r\n    .ConfigureLogging(logging =>\r\n    {\r\n        logging.ClearProviders();\r\n        logging.AddConsole();\r\n        logging.AddFilter((provider, category, logLevel) =>\r\n        {\r\n            return !category.Contains(\"Microsoft\");\r\n        });\r\n    }).RunConsoleAsync();\r\n\r\n\r\npublic class HelloWorldService : IHostedService\r\n{\r\n    readonly ILogger _log;\r\n\r\n    public HelloWorldService(ILogger<HelloWorldService> logger)\r\n    {\r\n        _log = logger;\r\n    }\r\n\r\n    public Task StartAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"Hello world 1\");\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"Goodbye 1\");\r\n        return Task.CompletedTask;\r\n    }\r\n}\r\n\r\npublic class HelloWorldService2 : IHostedService\r\n{\r\n    readonly ILogger _log;\r\n\r\n    public HelloWorldService2(ILogger<HelloWorldService2> logger)\r\n    {\r\n        _log = logger;\r\n    }\r\n\r\n    public Task StartAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"Hello world 2\");\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"Goodbye 2\");\r\n        return Task.CompletedTask;\r\n    }\r\n}\r\n\r\npublic class HelloWorldService3 : IHostedService\r\n{\r\n    readonly ILogger _log;\r\n\r\n    public HelloWorldService3(ILogger<HelloWorldService3> logger)\r\n    {\r\n        _log = logger;\r\n    }\r\n\r\n    public Task StartAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"Hello world 3\");\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"Goodbye 3\");\r\n        return Task.CompletedTask;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-3/generic-host-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-4/Program.cs",
    "content": "\r\nvar host = new HostBuilder()\r\n    .ConfigureServices((hostContext, services) =>\r\n    {\r\n        services.AddHostedService<HelloWorldService>();\r\n    })\r\n    .ConfigureLogging(logging =>\r\n    {\r\n        logging.ClearProviders();\r\n        logging.AddConsole();\r\n        logging.AddFilter((provider, category, logLevel) =>\r\n        {\r\n            return !category.Contains(\"Microsoft\");\r\n        });\r\n    })\r\n    .Build();\r\n\r\nusing (host)\r\n{\r\n    host.Start();\r\n\r\n    await host.StopAsync(TimeSpan.FromSeconds(5));\r\n}\r\n\r\npublic class HelloWorldService : IHostedService\r\n{\r\n    readonly ILogger _log;\r\n\r\n    public HelloWorldService(ILogger<HelloWorldService> logger)\r\n    {\r\n        _log = logger;\r\n    }\r\n\r\n    public Task StartAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"Hello world 1\");\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"Goodbye 1\");\r\n        return Task.CompletedTask;\r\n    }\r\n}"
  },
  {
    "path": "projects/generic-host/generic-host-4/generic-host-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-5/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/generic-host-4.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/generic-host/generic-host-5/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/generic-host-5.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/generic-host/generic-host-5/Program.cs",
    "content": "await new HostBuilder()\r\n    .ConfigureServices((hostContext, services) =>\r\n    {\r\n        services.AddHostedService<CountingService>();\r\n    })\r\n    .UseConsoleLifetime()\r\n    .ConfigureLogging(logging =>\r\n    {\r\n        logging.ClearProviders();\r\n        logging.AddConsole();\r\n        logging.AddFilter((provider, category, logLevel) =>\r\n        {\r\n            return !category.Contains(\"Microsoft\");\r\n        });\r\n    })\r\n    .Build().RunAsync();\r\n\r\npublic class CountingService : IHostedService, IDisposable\r\n{\r\n    CancellationTokenSource _stoppingCts = new CancellationTokenSource();\r\n\r\n    Task _executingTask;\r\n\r\n    readonly ILogger _log;\r\n\r\n    public CountingService(ILogger<CountingService> logger)\r\n    {\r\n        _log = logger;\r\n    }\r\n\r\n    public Task StartAsync(CancellationToken cancellationToken)\r\n    {\r\n        _executingTask = ExecuteAsync(_stoppingCts.Token);\r\n\r\n        return _executingTask.IsCompleted ? _executingTask : Task.CompletedTask;\r\n    }\r\n\r\n    async Task ExecuteAsync(CancellationToken cancellationToken)\r\n    {\r\n        var count = 0;\r\n        do\r\n        {\r\n            _log.LogDebug(count.ToString());\r\n            count++;\r\n            await Task.Delay(1000, cancellationToken);\r\n        } while (!cancellationToken.IsCancellationRequested);\r\n    }\r\n\r\n    public async Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        if (_executingTask == null)\r\n            return;\r\n\r\n        try\r\n        {\r\n            _stoppingCts.Cancel();\r\n        }\r\n        finally\r\n        {\r\n            await Task.WhenAny(_executingTask, Task.Delay(Timeout.Infinite, cancellationToken));\r\n        }\r\n    }\r\n\r\n    public void Dispose() => _stoppingCts.Cancel();\r\n}"
  },
  {
    "path": "projects/generic-host/generic-host-5/generic-host-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-configure-app/Program.cs",
    "content": "\r\nawait new HostBuilder()\r\n    .ConfigureAppConfiguration(configHost =>\r\n    {\r\n        var dict = new Dictionary<string, string>\r\n        {\r\n                    {\"Greet\", \"Hello World\"},\r\n                    {\"Goodbye\", \"Goodbye Luv\"}\r\n        };\r\n        configHost.AddInMemoryCollection(dict);\r\n    })\r\n    .ConfigureServices((hostContext, services) =>\r\n    {\r\n        services.AddHostedService<HelloWorldService>();\r\n    })\r\n    .ConfigureLogging(logging =>\r\n    {\r\n        logging.ClearProviders();\r\n        logging.AddConsole();\r\n        logging.AddFilter((provider, category, logLevel) =>\r\n        {\r\n            return !category.Contains(\"Microsoft\");\r\n        });\r\n    })\r\n    .Build().RunAsync();\r\n\r\npublic class HelloWorldService : IHostedService\r\n{\r\n    readonly IConfiguration _config;\r\n    readonly ILogger _log;\r\n\r\n    public HelloWorldService(IConfiguration config, ILogger<HelloWorldService> logger)\r\n    {\r\n        _config = config;\r\n        _log = logger;\r\n    }\r\n\r\n    public Task StartAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug($\"{_config[\"Greet\"]}\");\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug($\"{_config[\"Goodbye\"]}\");\r\n        return Task.CompletedTask;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-configure-app/generic-host-configure-app.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-configure-host/Program.cs",
    "content": "await new HostBuilder()\r\n    .ConfigureHostConfiguration(configHost =>\r\n    {\r\n        var dict = new Dictionary<string, string>\r\n        {\r\n            {\"Greet\", \"Hello World\"},\r\n            {\"Goodbye\", \"Goodbye Luv\"}\r\n        };\r\n        configHost.AddInMemoryCollection(dict);\r\n    })\r\n    .ConfigureServices((hostContext, services) =>\r\n    {\r\n        services.AddHostedService<HelloWorldService>();\r\n    })\r\n    .ConfigureLogging(logging =>\r\n    {\r\n        logging.ClearProviders();\r\n        logging.AddConsole();\r\n        logging.AddFilter((provider, category, logLevel) =>\r\n        {\r\n            return !category.Contains(\"Microsoft\");\r\n        });\r\n    })\r\n    .Build().RunAsync();\r\n\r\npublic class HelloWorldService : IHostedService\r\n{\r\n    readonly IConfiguration _config;\r\n    readonly ILogger _log;\r\n\r\n    public HelloWorldService(IConfiguration config, ILogger<HelloWorldService> logger)\r\n    {\r\n        _config = config;\r\n        _log = logger;\r\n    }\r\n\r\n    public Task StartAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug($\"{_config[\"Greet\"]}\");\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug($\"{_config[\"Goodbye\"]}\");\r\n        return Task.CompletedTask;\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-configure-host/generic-host-configure-host.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-configure-logging/Program.cs",
    "content": "await new HostBuilder()\r\n    .ConfigureLogging((hostContext, configLogging) =>\r\n    {\r\n        configLogging.ClearProviders();\r\n        configLogging.AddConsole();\r\n        configLogging.SetMinimumLevel(LogLevel.Trace);\r\n    })\r\n    .ConfigureServices((hostContext, services) =>\r\n    {\r\n        services.AddHostedService<HelloWorldService>();\r\n    })\r\n    .Build().RunAsync();\r\n\r\npublic class HelloWorldService : IHostedService\r\n{\r\n    readonly ILogger _logger;\r\n    public HelloWorldService(ILogger<HelloWorldService> logger)\r\n    {\r\n        _logger = logger;\r\n    }\r\n\r\n    public Task StartAsync(CancellationToken cancellationToken)\r\n    {\r\n        _logger.LogDebug(\"Hello world\");\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        _logger.LogDebug(\"Goodbye\");\r\n        return Task.CompletedTask;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-configure-logging/generic-host-configure-logging.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-environment/Program.cs",
    "content": "await new HostBuilder()\r\n    .UseEnvironment(Environments.Development) // change this to use other\r\n    .ConfigureServices((hostContext, services) =>\r\n    {\r\n        services.AddHostedService<HelloWorldService>();\r\n    })\r\n    .ConfigureLogging(logging =>\r\n    {\r\n        logging.ClearProviders();\r\n        logging.AddConsole();\r\n        logging.AddFilter((provider, category, logLevel) =>\r\n                {\r\n          return !category.Contains(\"Microsoft\");\r\n      });\r\n    })\r\n    .Build().RunAsync();\r\n\r\npublic class HelloWorldService : IHostedService\r\n{\r\n    readonly IHostEnvironment _env;\r\n    readonly ILogger _log;\r\n\r\n    public HelloWorldService(IHostEnvironment env, ILogger<HelloWorldService> logger)\r\n    {\r\n        _env = env;\r\n        _log = logger;\r\n    }\r\n\r\n    public Task StartAsync(CancellationToken cancellationToken)\r\n    {\r\n        if (_env.IsProduction())\r\n            _log.LogDebug(\"Hello world production\");\r\n        else if (_env.IsStaging())\r\n            _log.LogDebug(\"Hello world staging\");\r\n        else if (_env.IsDevelopment())\r\n            _log.LogDebug(\"Hello world development\");\r\n\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        return Task.CompletedTask;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-environment/generic-host-environment.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/generic-host/generic-host-ihostapplicationlifetime/Program.cs",
    "content": "await new HostBuilder()\r\n    .ConfigureServices((hostContext, services) =>\r\n    {\r\n        services.AddHostedService<HelloWorldService>();\r\n    })\r\n    .ConfigureLogging(logging =>\r\n    {\r\n        logging.ClearProviders();\r\n        logging.AddConsole();\r\n        logging.AddFilter((provider, category, logLevel) =>\r\n                {\r\n          return !category.Contains(\"Microsoft\");\r\n      });\r\n    })\r\n    .Build().RunAsync();\r\n\r\npublic class HelloWorldService : IHostedService\r\n{\r\n    readonly IHostApplicationLifetime _lifetime;\r\n    readonly ILogger _log;\r\n\r\n    public HelloWorldService(IHostApplicationLifetime lifetime, ILogger<HelloWorldService> logger)\r\n    {\r\n        _log = logger;\r\n        _lifetime = lifetime;\r\n        _lifetime.ApplicationStarted.Register(OnStarted);\r\n        _lifetime.ApplicationStopping.Register(OnStopping);\r\n        _lifetime.ApplicationStopped.Register(OnStopped);\r\n    }\r\n\r\n    public Task StartAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"StartAsync\");\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        _log.LogDebug(\"StopAsync\");\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    void OnStarted()\r\n    {\r\n        _log.LogDebug(\"OnStarted\");\r\n    }\r\n\r\n    void OnStopping()\r\n    {\r\n        _log.LogDebug(\"OnStopping\");\r\n    }\r\n\r\n    void OnStopped()\r\n    {\r\n        _log.LogDebug(\"OnStopped\");\r\n    }\r\n\r\n}"
  },
  {
    "path": "projects/generic-host/generic-host-ihostapplicationlifetime/generic-host-ihostapplicationlifetime.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/README.md",
    "content": "# GRPC (12)\r\n\r\n* [Unary - Hello World](/projects/grpc/grpc)\r\n\r\n  This sample shows a simple request/response gRPC call.\r\n\r\n* [Server Streaming - Message Server](/projects/grpc/grpc-2)\r\n\r\n  This sample shows how to do simple gRPC sever streaming.\r\n\r\n* [Client Streaming - Fortune Cookie Server](/projects/grpc/grpc-3)\r\n\r\n  This sample shows how to do simple gRPC client streaming.\r\n\r\n* [Bidirectional Streaming - Forever Ping Pong](/projects/grpc/grpc-4)\r\n\r\n  This sample shows how to do simple gRPC client/server bidirectional streaming.\r\n\r\n* [Data format - string, enum and datetime](/projects/grpc/grpc-5)\r\n\r\n  This sample shows how to define Protocol Buffers format to support sending enum, string and datetime.\r\n\r\n* [Data format - nested types and repeated values (list)](/projects/grpc/grpc-6)\r\n\r\n  This sample shows how to define Protocol Buffers format to support sending nested types and repeated values (list).\r\n\r\n* [Data format - map values (dictionary)](/projects/grpc/grpc-7)\r\n\r\n  This sample shows how to define Protocol Buffers format to support sending map values (dictionary).\r\n\r\n* [Data format - oneof](/projects/grpc/grpc-8)\r\n\r\n  This sample demonstrates how to use `oneof` type to allow you to check whether the value of a property is set or not, essentialy emulating nullable type.\r\n\r\n* [Server Streaming - Kitty Server](/projects/grpc/grpc-9)\r\n\r\n  This sample shows how to stream an image in chunks from server to client.\r\n\r\n## gRPC-Web\r\n  This is a version of gRPC that runs on HTTP 1.1 and support Unary call and Server Streaming. **Client Streaming and bi-Directional Streaming are not supported**.\r\n\r\n  gRPC-Web has been released. You can find the details [here](https://devblogs.microsoft.com/aspnet/grpc-web-for-net-now-available/).\r\n\r\n\r\n* [Unary - Hello World](/projects/grpc/grpc-10)\r\n\r\n  This sample shows a simple request/response gRPC call.\r\n\r\n* [Server Streaming - Message Server](/projects/grpc/grpc-11)\r\n\r\n  This sample shows how to do simple gRPC sever streaming.\r\n\r\n* [Server Streaming - Message Server - Blazor Web Assembly](/projects/grpc/grpc-12)\r\n\r\n  This sample shows how to do simple gRPC sever streaming with Blazor Web Assembly client.\r\n\r\n* [gRPC - 13](grpc-13)\r\n\r\n  This sample shows how to make a GET HTTP call to a gRPC endpoint via gRPC JSON transcoding.\r\n\r\n* [gRPC - 14](grpc-14)\r\n\r\n  This sample shows how to make a POST HTTP call to a gRPC endpoint via gRPC JSON transcoding.\r\n\r\n* [gRPC - 15](grpc-15)\r\n\r\n  This sample shows how to make a POST HTTP call to a gRPC endpoint via gRPC JSON transcoding by combining route parameter and body.\r\n\r\n* [gRPC - 16](grpc-16)\r\n\r\n  This sample shows how to make a PUT HTTP call to a gRPC endpoint via gRPC JSON transcoding.\r\n\r\n* [gRPC - 17](grpc-17)\r\n\r\n  This sample shows how to make a PATCH HTTP call to a gRPC endpoint via gRPC JSON transcoding.\r\n\r\n\r\n## Other collections of gRPC samples\r\n\r\n* [grpc-dotnet examples](https://github.com/grpc/grpc-dotnet/tree/master/examples)\r\n\r\ndotnet8\r\n"
  },
  {
    "path": "projects/grpc/build.bat",
    "content": "dotnet build grpc/client\r\ndotnet build grpc/server\r\ndotnet build grpc-2/client\r\ndotnet build grpc-2/server\r\ndotnet build grpc-3/client\r\ndotnet build grpc-3/server\r\ndotnet build grpc-4/client\r\ndotnet build grpc-4/server\r\ndotnet build grpc-5/client\r\ndotnet build grpc-5/server\r\ndotnet build grpc-6/client\r\ndotnet build grpc-6/server\r\ndotnet build grpc-7/client\r\ndotnet build grpc-7/server\r\ndotnet build grpc-8/client\r\ndotnet build grpc-8/server\r\ndotnet build grpc-9/client\r\ndotnet build grpc-9/server\r\ndotnet build grpc-10/client\r\ndotnet build grpc-10/server\r\ndotnet build grpc-11/client\r\ndotnet build grpc-11/server\r\ndotnet build grpc-12/client\r\ndotnet build grpc-12/server\r\ndotnet build grpc-13\r\ndotnet build grpc-14\r\ndotnet build grpc-15\r\ndotnet build grpc-16\r\ndotnet build grpc-17"
  },
  {
    "path": "projects/grpc/build.sh",
    "content": "#!/bin/bash\ndotnet build grpc/client\ndotnet build grpc/server\ndotnet build grpc-2/client\ndotnet build grpc-2/server\ndotnet build grpc-3/client\ndotnet build grpc-3/server\ndotnet build grpc-4/client\ndotnet build grpc-4/server\ndotnet build grpc-5/client\ndotnet build grpc-5/server\ndotnet build grpc-6/client\ndotnet build grpc-6/server\ndotnet build grpc-7/client\ndotnet build grpc-7/server\ndotnet build grpc-8/client\ndotnet build grpc-8/server\ndotnet build grpc-9/client\ndotnet build grpc-9/server\ndotnet build grpc-10/client\ndotnet build grpc-10/server\ndotnet build grpc-11/client\ndotnet build grpc-11/server\ndotnet build grpc-12/client\ndotnet build grpc-12/server\ndotnet build grpc-13\ndotnet build grpc-14\ndotnet build grpc-15\ndotnet build grpc-16\ndotnet build grpc-17\n"
  },
  {
    "path": "projects/grpc/grpc/README.md",
    "content": "# gRPC Hello World\r\n\r\nIf you are not familiar with gRPC, it's useful to spend some time reading up about it [here](https://grpc.io/docs/guides/concepts/). It is also useful to read about [Protocol Buffers](https://developers.google.com/protocol-buffers/), the data format that it's implemented in.\r\n\r\nThis sample demonstrate a simple Unary RPC. The client side is located on `client` folder and the server at the `server` folder. Make sure you run the server **first** before running the client.\r\n\r\nThe copies of `billboard.proto` on both folders are identical."
  },
  {
    "path": "projects/grpc/grpc/client/Program.cs",
    "content": "using Grpc.Net.Client;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    var channel = GrpcChannel.ForAddress(\"https://localhost:5500\");\r\n    var client = new Billboard.Board.BoardClient(channel);\r\n    var reply = await client.ShowMessageAsync(new Billboard.MessageRequest\r\n    {\r\n        Message = \"Good morning people of the world\",\r\n        Sender = \"Dody Gunawinata\"\r\n    });\r\n\r\n    var displayDate = new DateTime(reply.DisplayTime);\r\n    await context.Response.WriteAsync($\"This server sends a gRPC request to a server and get the following result: Received message on {displayDate} from {reply.ReceiveFrom}\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/grpc/grpc/client/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\nmessage MessageRequest {\r\n  string sender = 1;\r\n  string message = 2;\r\n}\r\n\r\nmessage MessageReply {\r\n  string receive_from = 1;\r\n  int64 display_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc/client/grpc-client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.Net.Client\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Client\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc/server/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc();\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => \"This server contains a gRPC service\");\r\n\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override Task<Billboard.MessageReply> ShowMessage(Billboard.MessageRequest request, ServerCallContext context)\r\n    {\r\n        var now = DateTime.UtcNow;\r\n        return Task.FromResult(new Billboard.MessageReply\r\n        {\r\n            DisplayTime = now.Ticks,\r\n            ReceiveFrom = request.Sender\r\n        });\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc/server/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\n\r\nmessage MessageRequest {\r\n  string sender = 1;\r\n  string message = 2;\r\n}\r\n\r\nmessage MessageReply {\r\n  string receive_from = 1;\r\n  int64 display_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc/server/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-10/README.md",
    "content": "# gRPC-Web Hello World\r\n\r\nThis sample demonstrate a simple Unary RPC. The client side is located on `client` folder and the server at the `server` folder. Make sure you run the server **first** before running the client.\r\n\r\nThe copies of `billboard.proto` on both folders are identical.\r\n\r\nYou will notice that the server is running on HTTP 1.1 instead of HTTP 2.0."
  },
  {
    "path": "projects/grpc/grpc-10/client/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#805584\",\r\n        \"activityBar.background\": \"#805584\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#3a3825\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#805584\",\r\n        \"statusBar.background\": \"#624165\",\r\n        \"statusBar.debuggingBackground\": \"#446541\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#805584\",\r\n        \"statusBarItem.remoteBackground\": \"#624165\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#624165\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#62416599\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#624165\"\r\n}"
  },
  {
    "path": "projects/grpc/grpc-10/client/Program.cs",
    "content": "using Grpc.Net.Client;\r\nusing Grpc.Net.Client.Web;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());\r\n    var channel = GrpcChannel.ForAddress(\"https://localhost:5500\", new GrpcChannelOptions\r\n    {\r\n        HttpClient = new HttpClient(handler)\r\n    });\r\n\r\n    var client = new Billboard.Board.BoardClient(channel);\r\n\r\n    var reply = await client.ShowMessageAsync(new Billboard.MessageRequest\r\n    {\r\n        Message = \"Good morning people of the world\",\r\n        Sender = \"Dody Gunawinata\"\r\n    });\r\n\r\n    Console.WriteLine(\"Connecting\");\r\n\r\n    var displayDate = new DateTime(reply.DisplayTime);\r\n    await context.Response.WriteAsync($\"This server sends a gRPC request to a server and get the following result: Received message on {displayDate} from {reply.ReceiveFrom}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/grpc/grpc-10/client/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\nmessage MessageRequest {\r\n  string sender = 1;\r\n  string message = 2;\r\n}\r\n\r\nmessage MessageReply {\r\n  string receive_from = 1;\r\n  int64 display_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-10/client/grpc-client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.Net.Client\" Version=\"2.62.0\" />\r\n    <PackageReference Include=\"Grpc.Net.Client.Web\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Client\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-10/server/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc();\r\n\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseGrpcWeb();\r\napp.MapGrpcService<BillboardService>().EnableGrpcWeb();\r\napp.MapGet(\"/\", () => \"This server contains a gRPCWeb service\");\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override Task<Billboard.MessageReply> ShowMessage(Billboard.MessageRequest request, ServerCallContext context)\r\n    {\r\n        var now = DateTime.UtcNow;\r\n        return Task.FromResult(new Billboard.MessageReply\r\n        {\r\n            DisplayTime = now.Ticks,\r\n            ReceiveFrom = request.Sender\r\n        });\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-10/server/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\n\r\nmessage MessageRequest {\r\n  string sender = 1;\r\n  string message = 2;\r\n}\r\n\r\nmessage MessageReply {\r\n  string receive_from = 1;\r\n  int64 display_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-10/server/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Web\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-11/README.md",
    "content": "# gRPC-Web Server Streaming\r\n\r\nThis is a sample of gRPC-Web [Server Streaming](https://grpc.io/docs/guides/concepts/). In this case the server just repeat the same message 10 times every 5 seconds. Make sure you run both the server and the client.\r\n\r\nThe server is running on HTTP 1.1 instead of HTTP 2."
  },
  {
    "path": "projects/grpc/grpc-11/client/Program.cs",
    "content": "using Grpc.Net.Client;\r\nusing Grpc.Net.Client.Web;\r\nusing Grpc.Core;\r\n\r\nvar app = WebApplication.Create();\r\n\r\n//Make sure that the grpc-server is run \r\napp.Run(async context =>\r\n{\r\n    var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());\r\n    var channel = GrpcChannel.ForAddress(\"https://localhost:5500\", new GrpcChannelOptions\r\n    {\r\n        HttpClient = new HttpClient(handler)\r\n    });\r\n\r\n    var client = new Billboard.Board.BoardClient(channel);\r\n    var result = client.ShowMessage(new Billboard.MessageRequest\r\n    {\r\n        Name = \"Anne\"\r\n    });\r\n\r\n    context.Response.Headers[\"Content-Type\"] = \"text/event-stream\";\r\n\r\n    using var tokenSource = new CancellationTokenSource();\r\n    CancellationToken token = tokenSource.Token;\r\n\r\n    var streamReader = result.ResponseStream;\r\n\r\n    await foreach (var reply in streamReader.ReadAllAsync(token))\r\n    {\r\n        var displayDate = new DateTime(reply.DisplayTime);\r\n        await context.Response.WriteAsync($\"Received \\\"{reply.Message}\\\" on {displayDate.ToLongTimeString()} \\n\");\r\n        await context.Response.Body.FlushAsync();\r\n    }\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/grpc/grpc-11/client/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (stream MessageReply) {}\r\n}\r\n\r\n\r\nmessage MessageRequest {\r\n  string name = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 display_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-11/client/grpc-client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.Net.Client\" Version=\"2.62.0\" />\r\n    <PackageReference Include=\"Grpc.Net.Client.Web\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Client\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-11/server/Program.cs",
    "content": "using Grpc.Core;\r\nusing Billboard;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc();\r\n\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseGrpcWeb();\r\napp.MapGrpcService<BillboardService>().EnableGrpcWeb();\r\napp.MapGet(\"/\", () => \"This server contains a gRPCWeb service\");\r\n\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override async Task ShowMessage(MessageRequest request, IServerStreamWriter<MessageReply> responseStream, ServerCallContext context)\r\n    {\r\n        foreach (var x in Enumerable.Range(1, 10))\r\n        {\r\n            var now = DateTime.UtcNow;\r\n\r\n            await responseStream.WriteAsync(new Billboard.MessageReply\r\n            {\r\n                DisplayTime = now.Ticks,\r\n                Message = $\"Hello {request.Name}\"\r\n            });\r\n\r\n            await Task.Delay(5000);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-11/server/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (stream MessageReply) {}\r\n}\r\n\r\n\r\nmessage MessageRequest {\r\n  string name = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 display_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-11/server/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Web\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-12/README.md",
    "content": "# gRPC-Web Server Streaming\r\n\r\nThis is a sample of gRPC-Web [Server Streaming](https://grpc.io/docs/guides/concepts/). In this case the server just repeat the same message 10 times every 5 seconds. Make sure you run both the server and the client.\r\n\r\nThe server is running on HTTP 1.1 instead of HTTP 2.\r\n\r\nThe client is a Blazor Web Assembly application."
  },
  {
    "path": "projects/grpc/grpc-12/client/App.razor",
    "content": "<Router AppAssembly=\"typeof(Program).Assembly\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"routeData\" DefaultLayout=\"typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <h1>Page not found</h1>\r\n        <p>Sorry, but there's nothing here!</p>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/grpc/grpc-12/client/GrpcClient.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.Net.Client\" Version=\"2.62.0\" />\r\n    <PackageReference Include=\"Grpc.Net.Client.Web\" Version=\"2.62.0\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"8.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"8.0.4\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Client\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-12/client/Pages/Index.razor",
    "content": "@page \"/\"\r\n@inject Billboard.Board.BoardClient Client;\r\n@using System.Threading\r\n\r\n<p>\r\n  @((MarkupString)Message)\r\n</p>\r\n\r\n<button type=\"button\" @onclick=\"Click\">Start receiving broadcast</button>\r\n\r\n@code {\r\n\r\n  public string Message { get; set; }\r\n\r\n  async Task Click()\r\n  {\r\n    var result = Client.ShowMessage(new Billboard.MessageRequest\r\n    {\r\n      Name = \"Anne\"\r\n    });\r\n\r\n    using var tokenSource = new CancellationTokenSource();\r\n    System.Threading.CancellationToken token = tokenSource.Token;\r\n\r\n    var streamReader = result.ResponseStream;\r\n\r\n    await foreach (var reply in streamReader.ReadAllAsync(token))\r\n    {\r\n      var displayDate = new DateTime(reply.DisplayTime);\r\n      Message += $\"Received \\\"{reply.Message}\\\" on {displayDate.ToLongTimeString()} <br/>\\n\";\r\n      StateHasChanged();\r\n    }\r\n  }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-12/client/Program.cs",
    "content": "using Grpc.Net.Client;\r\nusing Grpc.Net.Client.Web;\r\nusing Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing GrpcClient;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"app\");\r\n\r\nbuilder.Services.AddSingleton(x =>\r\n{\r\n    var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());\r\n    var channel = GrpcChannel.ForAddress(\"https://localhost:5500\", new GrpcChannelOptions\r\n    {\r\n        HttpClient = new HttpClient(handler)\r\n    });\r\n\r\n    var client = new Billboard.Board.BoardClient(channel);\r\n    return client;\r\n});\r\n\r\nvar app = builder.Build();\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/grpc/grpc-12/client/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"main\">\r\n    <div class=\"content px-4\">\r\n        @Body\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/grpc/grpc-12/client/_Imports.razor",
    "content": "@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.JSInterop\r\n@using GrpcClient\r\n@using GrpcClient.Shared\r\n@using Grpc.Net.Client\r\n@using Grpc.Net.Client.Web\r\n@using Grpc.Core"
  },
  {
    "path": "projects/grpc/grpc-12/client/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (stream MessageReply) {}\r\n}\r\n\r\n\r\nmessage MessageRequest {\r\n  string name = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 display_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-12/client/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width\">\r\n    <title>GRPC Client Blazor</title>\r\n    <base href=\"/\" />\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n</head>\r\n\r\n<body>\r\n    <app>Loading...</app>\r\n\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/grpc/grpc-12/server/Program.cs",
    "content": "using Grpc.Core;\r\nusing Billboard;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc();\r\nbuilder.Services.AddCors(o => o.AddPolicy(\"AllowAll\", builder =>\r\n{\r\n    builder.AllowAnyOrigin()\r\n        .AllowAnyMethod()\r\n        .AllowAnyHeader()\r\n        .WithExposedHeaders(\"Grpc-Status\", \"Grpc-Message\", \"Grpc-Encoding\", \"Grpc-Accept-Encoding\");\r\n}));\r\n\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseCors();\r\napp.UseGrpcWeb();\r\napp.MapGrpcService<BillboardService>().EnableGrpcWeb().RequireCors(\"AllowAll\");\r\napp.MapGet(\"/\", () => \"This server contains a gRPCWeb service\");\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override async Task ShowMessage(MessageRequest request, IServerStreamWriter<MessageReply> responseStream, ServerCallContext context)\r\n    {\r\n        foreach (var x in Enumerable.Range(1, 10))\r\n        {\r\n            var now = DateTime.UtcNow;\r\n\r\n            await responseStream.WriteAsync(new Billboard.MessageReply\r\n            {\r\n                DisplayTime = now.Ticks,\r\n                Message = $\"Hello {request.Name}\"\r\n            });\r\n\r\n            await Task.Delay(5000);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-12/server/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (stream MessageReply) {}\r\n}\r\n\r\nmessage MessageRequest {\r\n  string name = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 display_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-12/server/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Web\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-13/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\nusing Microsoft.AspNetCore.Grpc.JsonTranscoding;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc().AddJsonTranscoding();\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => Results.Content(\"\"\"\r\n<html>\r\n<body>\r\n\r\n<a href=\"/v1/message/{sender}\">The endpoint</a>\r\n<p>\r\nsender:<br/>\r\n<span id=\"sender\"/>\r\n</p>\r\n<p>\r\ntime: <br/>\r\n<span id=\"displayTime\" />\r\n</p>\r\n\r\n<script>\r\nfunction convertInJs(input){\r\n    let epochTicks = 621355968000000000,    // the number of .net ticks at the unix epoch\r\n        ticksPerMillisecond = 10000,        // there are 10000 .net ticks per millisecond\r\n        jsTicks = 0;                        // ticks in javascript environment\r\n\r\n    jsTicks = (input - epochTicks) / ticksPerMillisecond;\r\n\r\n    const jsDate = new Date(jsTicks); // N.B. Js applies local timezone in automatic\r\n\r\n    return jsDate\r\n}\r\n\r\n    async function grpc(){\r\n        const result = await fetch('https://localhost:5500/v1/message/anne');\r\n        const response = await result.json();\r\n        return response\r\n    }\r\n\r\n    grpc().then( result => { \r\n        document.getElementById(\"sender\").innerHTML = result.receiveFrom;\r\n        document.getElementById(\"displayTime\").innerHTML = convertInJs(result.displayTime);\r\n        console.log(result);\r\n    });\r\n</script>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override Task<Billboard.MessageReply> ShowMessage(Billboard.MessageRequest request, ServerCallContext context)\r\n    {\r\n        var now = DateTime.UtcNow;\r\n        return Task.FromResult(new Billboard.MessageReply\r\n        {\r\n            DisplayTime = now.Ticks,\r\n            ReceiveFrom = request.Sender\r\n        });\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-13/README.md",
    "content": "# gRPC JSON transcoding  GET\r\n\r\nThis sample shows how to make a GET HTTP call to a gRPC endpoint via gRPC JSON transcoding."
  },
  {
    "path": "projects/grpc/grpc-13/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\nimport \"google/api/annotations.proto\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {\r\n      option (google.api.http) = {\r\n      get: \"/v1/message/{sender}\"\r\n    };\r\n  }\r\n}\r\n\r\n\r\nmessage MessageRequest {\r\n  string sender = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  string receive_from = 1;\r\n  int64 display_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-13/google/api/annotations.proto",
    "content": "// Copyright (c) 2015, Google Inc.\r\n//\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n//     http://www.apache.org/licenses/LICENSE-2.0\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n\r\nsyntax = \"proto3\";\r\n\r\npackage google.api;\r\n\r\nimport \"google/api/http.proto\";\r\nimport \"google/protobuf/descriptor.proto\";\r\n\r\noption go_package = \"google.golang.org/genproto/googleapis/api/annotations;annotations\";\r\noption java_multiple_files = true;\r\noption java_outer_classname = \"AnnotationsProto\";\r\noption java_package = \"com.google.api\";\r\noption objc_class_prefix = \"GAPI\";\r\n\r\nextend google.protobuf.MethodOptions {\r\n  // See `HttpRule`.\r\n  HttpRule http = 72295728;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-13/google/api/http.proto",
    "content": "// Copyright 2019 Google LLC.\r\n//\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n//     http://www.apache.org/licenses/LICENSE-2.0\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n//\r\n\r\nsyntax = \"proto3\";\r\n\r\npackage google.api;\r\n\r\noption cc_enable_arenas = true;\r\noption go_package = \"google.golang.org/genproto/googleapis/api/annotations;annotations\";\r\noption java_multiple_files = true;\r\noption java_outer_classname = \"HttpProto\";\r\noption java_package = \"com.google.api\";\r\noption objc_class_prefix = \"GAPI\";\r\n\r\n// Defines the HTTP configuration for an API service. It contains a list of\r\n// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method\r\n// to one or more HTTP REST API methods.\r\nmessage Http {\r\n  // A list of HTTP configuration rules that apply to individual API methods.\r\n  //\r\n  // **NOTE:** All service configuration rules follow \"last one wins\" order.\r\n  repeated HttpRule rules = 1;\r\n\r\n  // When set to true, URL path parameters will be fully URI-decoded except in\r\n  // cases of single segment matches in reserved expansion, where \"%2F\" will be\r\n  // left encoded.\r\n  //\r\n  // The default behavior is to not decode RFC 6570 reserved characters in multi\r\n  // segment matches.\r\n  bool fully_decode_reserved_expansion = 2;\r\n}\r\n\r\n// # gRPC Transcoding\r\n//\r\n// gRPC Transcoding is a feature for mapping between a gRPC method and one or\r\n// more HTTP REST endpoints. It allows developers to build a single API service\r\n// that supports both gRPC APIs and REST APIs. Many systems, including [Google\r\n// APIs](https://github.com/googleapis/googleapis),\r\n// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC\r\n// Gateway](https://github.com/grpc-ecosystem/grpc-gateway),\r\n// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature\r\n// and use it for large scale production services.\r\n//\r\n// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies\r\n// how different portions of the gRPC request message are mapped to the URL\r\n// path, URL query parameters, and HTTP request body. It also controls how the\r\n// gRPC response message is mapped to the HTTP response body. `HttpRule` is\r\n// typically specified as an `google.api.http` annotation on the gRPC method.\r\n//\r\n// Each mapping specifies a URL path template and an HTTP method. The path\r\n// template may refer to one or more fields in the gRPC request message, as long\r\n// as each field is a non-repeated field with a primitive (non-message) type.\r\n// The path template controls how fields of the request message are mapped to\r\n// the URL path.\r\n//\r\n// Example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//             get: \"/v1/{name=messages/*}\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       string name = 1; // Mapped to URL path.\r\n//     }\r\n//     message Message {\r\n//       string text = 1; // The resource content.\r\n//     }\r\n//\r\n// This enables an HTTP REST to gRPC mapping as below:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456`  | `GetMessage(name: \"messages/123456\")`\r\n//\r\n// Any fields in the request message which are not bound by the path template\r\n// automatically become HTTP query parameters if there is no HTTP request body.\r\n// For example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//             get:\"/v1/messages/{message_id}\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       message SubMessage {\r\n//         string subfield = 1;\r\n//       }\r\n//       string message_id = 1; // Mapped to URL path.\r\n//       int64 revision = 2;    // Mapped to URL query parameter `revision`.\r\n//       SubMessage sub = 3;    // Mapped to URL query parameter `sub.subfield`.\r\n//     }\r\n//\r\n// This enables a HTTP JSON to RPC mapping as below:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456?revision=2&sub.subfield=foo` |\r\n// `GetMessage(message_id: \"123456\" revision: 2 sub: SubMessage(subfield:\r\n// \"foo\"))`\r\n//\r\n// Note that fields which are mapped to URL query parameters must have a\r\n// primitive type or a repeated primitive type or a non-repeated message type.\r\n// In the case of a repeated type, the parameter can be repeated in the URL\r\n// as `...?param=A&param=B`. In the case of a message type, each field of the\r\n// message is mapped to a separate parameter, such as\r\n// `...?foo.a=A&foo.b=B&foo.c=C`.\r\n//\r\n// For HTTP methods that allow a request body, the `body` field\r\n// specifies the mapping. Consider a REST update method on the\r\n// message resource collection:\r\n//\r\n//     service Messaging {\r\n//       rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           patch: \"/v1/messages/{message_id}\"\r\n//           body: \"message\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message UpdateMessageRequest {\r\n//       string message_id = 1; // mapped to the URL\r\n//       Message message = 2;   // mapped to the body\r\n//     }\r\n//\r\n// The following HTTP JSON to RPC mapping is enabled, where the\r\n// representation of the JSON in the request body is determined by\r\n// protos JSON encoding:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id:\r\n// \"123456\" message { text: \"Hi!\" })`\r\n//\r\n// The special name `*` can be used in the body mapping to define that\r\n// every field not bound by the path template should be mapped to the\r\n// request body.  This enables the following alternative definition of\r\n// the update method:\r\n//\r\n//     service Messaging {\r\n//       rpc UpdateMessage(Message) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           patch: \"/v1/messages/{message_id}\"\r\n//           body: \"*\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message Message {\r\n//       string message_id = 1;\r\n//       string text = 2;\r\n//     }\r\n//\r\n//\r\n// The following HTTP JSON to RPC mapping is enabled:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id:\r\n// \"123456\" text: \"Hi!\")`\r\n//\r\n// Note that when using `*` in the body mapping, it is not possible to\r\n// have HTTP parameters, as all fields not bound by the path end in\r\n// the body. This makes this option more rarely used in practice when\r\n// defining REST APIs. The common usage of `*` is in custom methods\r\n// which don't use the URL at all for transferring data.\r\n//\r\n// It is possible to define multiple HTTP methods for one RPC by using\r\n// the `additional_bindings` option. Example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           get: \"/v1/messages/{message_id}\"\r\n//           additional_bindings {\r\n//             get: \"/v1/users/{user_id}/messages/{message_id}\"\r\n//           }\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       string message_id = 1;\r\n//       string user_id = 2;\r\n//     }\r\n//\r\n// This enables the following two alternative HTTP JSON to RPC mappings:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456` | `GetMessage(message_id: \"123456\")`\r\n// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: \"me\" message_id:\r\n// \"123456\")`\r\n//\r\n// ## Rules for HTTP mapping\r\n//\r\n// 1. Leaf request fields (recursive expansion nested messages in the request\r\n//    message) are classified into three categories:\r\n//    - Fields referred by the path template. They are passed via the URL path.\r\n//    - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP\r\n//      request body.\r\n//    - All other fields are passed via the URL query parameters, and the\r\n//      parameter name is the field path in the request message. A repeated\r\n//      field can be represented as multiple query parameters under the same\r\n//      name.\r\n//  2. If [HttpRule.body][google.api.HttpRule.body] is \"*\", there is no URL query parameter, all fields\r\n//     are passed via URL path and HTTP request body.\r\n//  3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all\r\n//     fields are passed via URL path and URL query parameters.\r\n//\r\n// ### Path template syntax\r\n//\r\n//     Template = \"/\" Segments [ Verb ] ;\r\n//     Segments = Segment { \"/\" Segment } ;\r\n//     Segment  = \"*\" | \"**\" | LITERAL | Variable ;\r\n//     Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\r\n//     FieldPath = IDENT { \".\" IDENT } ;\r\n//     Verb     = \":\" LITERAL ;\r\n//\r\n// The syntax `*` matches a single URL path segment. The syntax `**` matches\r\n// zero or more URL path segments, which must be the last part of the URL path\r\n// except the `Verb`.\r\n//\r\n// The syntax `Variable` matches part of the URL path as specified by its\r\n// template. A variable template must not contain other variables. If a variable\r\n// matches a single path segment, its template may be omitted, e.g. `{var}`\r\n// is equivalent to `{var=*}`.\r\n//\r\n// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL`\r\n// contains any reserved character, such characters should be percent-encoded\r\n// before the matching.\r\n//\r\n// If a variable contains exactly one path segment, such as `\"{var}\"` or\r\n// `\"{var=*}\"`, when such a variable is expanded into a URL path on the client\r\n// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The\r\n// server side does the reverse decoding. Such variables show up in the\r\n// [Discovery\r\n// Document](https://developers.google.com/discovery/v1/reference/apis) as\r\n// `{var}`.\r\n//\r\n// If a variable contains multiple path segments, such as `\"{var=foo/*}\"`\r\n// or `\"{var=**}\"`, when such a variable is expanded into a URL path on the\r\n// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded.\r\n// The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left\r\n// unchanged. Such variables show up in the\r\n// [Discovery\r\n// Document](https://developers.google.com/discovery/v1/reference/apis) as\r\n// `{+var}`.\r\n//\r\n// ## Using gRPC API Service Configuration\r\n//\r\n// gRPC API Service Configuration (service config) is a configuration language\r\n// for configuring a gRPC service to become a user-facing product. The\r\n// service config is simply the YAML representation of the `google.api.Service`\r\n// proto message.\r\n//\r\n// As an alternative to annotating your proto file, you can configure gRPC\r\n// transcoding in your service config YAML files. You do this by specifying a\r\n// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same\r\n// effect as the proto annotation. This can be particularly useful if you\r\n// have a proto that is reused in multiple services. Note that any transcoding\r\n// specified in the service config will override any matching transcoding\r\n// configuration in the proto.\r\n//\r\n// Example:\r\n//\r\n//     http:\r\n//       rules:\r\n//         # Selects a gRPC method and applies HttpRule to it.\r\n//         - selector: example.v1.Messaging.GetMessage\r\n//           get: /v1/messages/{message_id}/{sub.subfield}\r\n//\r\n// ## Special notes\r\n//\r\n// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the\r\n// proto to JSON conversion must follow the [proto3\r\n// specification](https://developers.google.com/protocol-buffers/docs/proto3#json).\r\n//\r\n// While the single segment variable follows the semantics of\r\n// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\r\n// Expansion, the multi segment variable **does not** follow RFC 6570 Section\r\n// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion\r\n// does not expand special characters like `?` and `#`, which would lead\r\n// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding\r\n// for multi segment variables.\r\n//\r\n// The path variables **must not** refer to any repeated or mapped field,\r\n// because client libraries are not capable of handling such variable expansion.\r\n//\r\n// The path variables **must not** capture the leading \"/\" character. The reason\r\n// is that the most common use case \"{var}\" does not capture the leading \"/\"\r\n// character. For consistency, all path variables must share the same behavior.\r\n//\r\n// Repeated message fields must not be mapped to URL query parameters, because\r\n// no client library can support such complicated mapping.\r\n//\r\n// If an API needs to use a JSON array for request or response body, it can map\r\n// the request or response body to a repeated field. However, some gRPC\r\n// Transcoding implementations may not support this feature.\r\nmessage HttpRule {\r\n  // Selects a method to which this rule applies.\r\n  //\r\n  // Refer to [selector][google.api.DocumentationRule.selector] for syntax details.\r\n  string selector = 1;\r\n\r\n  // Determines the URL pattern is matched by this rules. This pattern can be\r\n  // used with any of the {get|put|post|delete|patch} methods. A custom method\r\n  // can be defined using the 'custom' field.\r\n  oneof pattern {\r\n    // Maps to HTTP GET. Used for listing and getting information about\r\n    // resources.\r\n    string get = 2;\r\n\r\n    // Maps to HTTP PUT. Used for replacing a resource.\r\n    string put = 3;\r\n\r\n    // Maps to HTTP POST. Used for creating a resource or performing an action.\r\n    string post = 4;\r\n\r\n    // Maps to HTTP DELETE. Used for deleting a resource.\r\n    string delete = 5;\r\n\r\n    // Maps to HTTP PATCH. Used for updating a resource.\r\n    string patch = 6;\r\n\r\n    // The custom pattern is used for specifying an HTTP method that is not\r\n    // included in the `pattern` field, such as HEAD, or \"*\" to leave the\r\n    // HTTP method unspecified for this rule. The wild-card rule is useful\r\n    // for services that provide content to Web (HTML) clients.\r\n    CustomHttpPattern custom = 8;\r\n  }\r\n\r\n  // The name of the request field whose value is mapped to the HTTP request\r\n  // body, or `*` for mapping all request fields not captured by the path\r\n  // pattern to the HTTP body, or omitted for not having any HTTP request body.\r\n  //\r\n  // NOTE: the referred field must be present at the top-level of the request\r\n  // message type.\r\n  string body = 7;\r\n\r\n  // Optional. The name of the response field whose value is mapped to the HTTP\r\n  // response body. When omitted, the entire response message will be used\r\n  // as the HTTP response body.\r\n  //\r\n  // NOTE: The referred field must be present at the top-level of the response\r\n  // message type.\r\n  string response_body = 12;\r\n\r\n  // Additional HTTP bindings for the selector. Nested bindings must\r\n  // not contain an `additional_bindings` field themselves (that is,\r\n  // the nesting may only be one level deep).\r\n  repeated HttpRule additional_bindings = 11;\r\n}\r\n\r\n// A custom pattern is used for defining custom HTTP verb.\r\nmessage CustomHttpPattern {\r\n  // The name of this custom HTTP verb.\r\n  string kind = 1;\r\n\r\n  // The path matched by this custom verb.\r\n  string path = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-13/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Grpc.JsonTranscoding\" Version=\"8.0.4\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-14/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\nusing Microsoft.AspNetCore.Grpc.JsonTranscoding;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc().AddJsonTranscoding();\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => Results.Content(\"\"\"\r\n<html>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n<body>\r\n\r\n<div class=\"container\">\r\n    <h1>gRPC JSON Transcoding POST</h1>\r\n    <div class=\"row mb-3\">\r\n        <div class=\"col-md-3\">\r\n            <form>\r\n                <input type=\"text\" class=\"form-control\" id=\"senderInput\" placeholder=\"Please enter sender\" /><br/>\r\n                <button type=\"button\" id=\"postBtn\" class=\"btn btn-primary\">Send</button>\r\n            </form>\r\n        </div>\r\n    </div>\r\n    <div class=\"card\">\r\n        <div class=\"card-body\">\r\n            <p>\r\n            sender:<br/>\r\n            <span id=\"sender\"/>\r\n            </p>\r\n            <p>\r\n            time: <br/>\r\n            <span id=\"displayTime\" />\r\n            </p>\r\n        </div>\r\n    </div>\r\n</div>\r\n<script>\r\n    const postBtn = document.getElementById(\"postBtn\");\r\n    postBtn.addEventListener(\"click\", function() {\r\n        const senderInput = document.getElementById(\"senderInput\");\r\n     \r\n        grpc(senderInput.value).then( result => { \r\n            document.getElementById(\"sender\").innerHTML = result.receiveFrom;\r\n            document.getElementById(\"displayTime\").innerHTML = convertInJs(result.displayTime);\r\n            console.log(result);\r\n        });\r\n    });\r\n\r\n    function convertInJs(input){\r\n        let epochTicks = 621355968000000000,    // the number of .net ticks at the unix epoch\r\n            ticksPerMillisecond = 10000,        // there are 10000 .net ticks per millisecond\r\n            jsTicks = 0;                        // ticks in javascript environment\r\n\r\n        jsTicks = (input - epochTicks) / ticksPerMillisecond;\r\n\r\n        const jsDate = new Date(jsTicks); // N.B. Js applies local timezone in automatic\r\n\r\n        return jsDate\r\n    }\r\n\r\n    async function grpc(sender){\r\n        const payload = {\r\n            sender: sender\r\n        };\r\n\r\n        console.log(payload);\r\n\r\n        const result = await fetch('https://localhost:5500/v1/message', {\r\n            headers: {\r\n                'Content-Type' : 'application/json'\r\n            },\r\n            body: JSON.stringify(payload),\r\n            method: 'POST'\r\n        });\r\n        const response = await result.json();\r\n        return response\r\n    }\r\n</script>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override Task<Billboard.MessageReply> ShowMessage(Billboard.MessageRequest request, ServerCallContext context)\r\n    {\r\n        var now = DateTime.UtcNow;\r\n        return Task.FromResult(new Billboard.MessageReply\r\n        {\r\n            DisplayTime = now.Ticks,\r\n            ReceiveFrom = request.Content.Sender\r\n        });\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-14/README.md",
    "content": "# gRPC JSON transcoding POST\r\n\r\nThis sample shows how to make a POST call to a gRPC endpoint via gRPC JSON transcoding."
  },
  {
    "path": "projects/grpc/grpc-14/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\nimport \"google/api/annotations.proto\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {\r\n      option (google.api.http) = {\r\n      post: \"/v1/message\",\r\n      body: \"content\"\r\n    };\r\n  }\r\n}\r\n\r\nmessage MessageRequest {\r\n  MessageBody content = 1;\r\n}\r\n\r\nmessage MessageBody {\r\n  string sender = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  string receive_from = 1;\r\n  int64 display_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-14/google/api/annotations.proto",
    "content": "// Copyright (c) 2015, Google Inc.\r\n//\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n//     http://www.apache.org/licenses/LICENSE-2.0\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n\r\nsyntax = \"proto3\";\r\n\r\npackage google.api;\r\n\r\nimport \"google/api/http.proto\";\r\nimport \"google/protobuf/descriptor.proto\";\r\n\r\noption go_package = \"google.golang.org/genproto/googleapis/api/annotations;annotations\";\r\noption java_multiple_files = true;\r\noption java_outer_classname = \"AnnotationsProto\";\r\noption java_package = \"com.google.api\";\r\noption objc_class_prefix = \"GAPI\";\r\n\r\nextend google.protobuf.MethodOptions {\r\n  // See `HttpRule`.\r\n  HttpRule http = 72295728;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-14/google/api/http.proto",
    "content": "// Copyright 2019 Google LLC.\r\n//\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n//     http://www.apache.org/licenses/LICENSE-2.0\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n//\r\n\r\nsyntax = \"proto3\";\r\n\r\npackage google.api;\r\n\r\noption cc_enable_arenas = true;\r\noption go_package = \"google.golang.org/genproto/googleapis/api/annotations;annotations\";\r\noption java_multiple_files = true;\r\noption java_outer_classname = \"HttpProto\";\r\noption java_package = \"com.google.api\";\r\noption objc_class_prefix = \"GAPI\";\r\n\r\n// Defines the HTTP configuration for an API service. It contains a list of\r\n// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method\r\n// to one or more HTTP REST API methods.\r\nmessage Http {\r\n  // A list of HTTP configuration rules that apply to individual API methods.\r\n  //\r\n  // **NOTE:** All service configuration rules follow \"last one wins\" order.\r\n  repeated HttpRule rules = 1;\r\n\r\n  // When set to true, URL path parameters will be fully URI-decoded except in\r\n  // cases of single segment matches in reserved expansion, where \"%2F\" will be\r\n  // left encoded.\r\n  //\r\n  // The default behavior is to not decode RFC 6570 reserved characters in multi\r\n  // segment matches.\r\n  bool fully_decode_reserved_expansion = 2;\r\n}\r\n\r\n// # gRPC Transcoding\r\n//\r\n// gRPC Transcoding is a feature for mapping between a gRPC method and one or\r\n// more HTTP REST endpoints. It allows developers to build a single API service\r\n// that supports both gRPC APIs and REST APIs. Many systems, including [Google\r\n// APIs](https://github.com/googleapis/googleapis),\r\n// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC\r\n// Gateway](https://github.com/grpc-ecosystem/grpc-gateway),\r\n// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature\r\n// and use it for large scale production services.\r\n//\r\n// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies\r\n// how different portions of the gRPC request message are mapped to the URL\r\n// path, URL query parameters, and HTTP request body. It also controls how the\r\n// gRPC response message is mapped to the HTTP response body. `HttpRule` is\r\n// typically specified as an `google.api.http` annotation on the gRPC method.\r\n//\r\n// Each mapping specifies a URL path template and an HTTP method. The path\r\n// template may refer to one or more fields in the gRPC request message, as long\r\n// as each field is a non-repeated field with a primitive (non-message) type.\r\n// The path template controls how fields of the request message are mapped to\r\n// the URL path.\r\n//\r\n// Example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//             get: \"/v1/{name=messages/*}\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       string name = 1; // Mapped to URL path.\r\n//     }\r\n//     message Message {\r\n//       string text = 1; // The resource content.\r\n//     }\r\n//\r\n// This enables an HTTP REST to gRPC mapping as below:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456`  | `GetMessage(name: \"messages/123456\")`\r\n//\r\n// Any fields in the request message which are not bound by the path template\r\n// automatically become HTTP query parameters if there is no HTTP request body.\r\n// For example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//             get:\"/v1/messages/{message_id}\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       message SubMessage {\r\n//         string subfield = 1;\r\n//       }\r\n//       string message_id = 1; // Mapped to URL path.\r\n//       int64 revision = 2;    // Mapped to URL query parameter `revision`.\r\n//       SubMessage sub = 3;    // Mapped to URL query parameter `sub.subfield`.\r\n//     }\r\n//\r\n// This enables a HTTP JSON to RPC mapping as below:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456?revision=2&sub.subfield=foo` |\r\n// `GetMessage(message_id: \"123456\" revision: 2 sub: SubMessage(subfield:\r\n// \"foo\"))`\r\n//\r\n// Note that fields which are mapped to URL query parameters must have a\r\n// primitive type or a repeated primitive type or a non-repeated message type.\r\n// In the case of a repeated type, the parameter can be repeated in the URL\r\n// as `...?param=A&param=B`. In the case of a message type, each field of the\r\n// message is mapped to a separate parameter, such as\r\n// `...?foo.a=A&foo.b=B&foo.c=C`.\r\n//\r\n// For HTTP methods that allow a request body, the `body` field\r\n// specifies the mapping. Consider a REST update method on the\r\n// message resource collection:\r\n//\r\n//     service Messaging {\r\n//       rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           patch: \"/v1/messages/{message_id}\"\r\n//           body: \"message\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message UpdateMessageRequest {\r\n//       string message_id = 1; // mapped to the URL\r\n//       Message message = 2;   // mapped to the body\r\n//     }\r\n//\r\n// The following HTTP JSON to RPC mapping is enabled, where the\r\n// representation of the JSON in the request body is determined by\r\n// protos JSON encoding:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id:\r\n// \"123456\" message { text: \"Hi!\" })`\r\n//\r\n// The special name `*` can be used in the body mapping to define that\r\n// every field not bound by the path template should be mapped to the\r\n// request body.  This enables the following alternative definition of\r\n// the update method:\r\n//\r\n//     service Messaging {\r\n//       rpc UpdateMessage(Message) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           patch: \"/v1/messages/{message_id}\"\r\n//           body: \"*\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message Message {\r\n//       string message_id = 1;\r\n//       string text = 2;\r\n//     }\r\n//\r\n//\r\n// The following HTTP JSON to RPC mapping is enabled:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id:\r\n// \"123456\" text: \"Hi!\")`\r\n//\r\n// Note that when using `*` in the body mapping, it is not possible to\r\n// have HTTP parameters, as all fields not bound by the path end in\r\n// the body. This makes this option more rarely used in practice when\r\n// defining REST APIs. The common usage of `*` is in custom methods\r\n// which don't use the URL at all for transferring data.\r\n//\r\n// It is possible to define multiple HTTP methods for one RPC by using\r\n// the `additional_bindings` option. Example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           get: \"/v1/messages/{message_id}\"\r\n//           additional_bindings {\r\n//             get: \"/v1/users/{user_id}/messages/{message_id}\"\r\n//           }\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       string message_id = 1;\r\n//       string user_id = 2;\r\n//     }\r\n//\r\n// This enables the following two alternative HTTP JSON to RPC mappings:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456` | `GetMessage(message_id: \"123456\")`\r\n// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: \"me\" message_id:\r\n// \"123456\")`\r\n//\r\n// ## Rules for HTTP mapping\r\n//\r\n// 1. Leaf request fields (recursive expansion nested messages in the request\r\n//    message) are classified into three categories:\r\n//    - Fields referred by the path template. They are passed via the URL path.\r\n//    - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP\r\n//      request body.\r\n//    - All other fields are passed via the URL query parameters, and the\r\n//      parameter name is the field path in the request message. A repeated\r\n//      field can be represented as multiple query parameters under the same\r\n//      name.\r\n//  2. If [HttpRule.body][google.api.HttpRule.body] is \"*\", there is no URL query parameter, all fields\r\n//     are passed via URL path and HTTP request body.\r\n//  3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all\r\n//     fields are passed via URL path and URL query parameters.\r\n//\r\n// ### Path template syntax\r\n//\r\n//     Template = \"/\" Segments [ Verb ] ;\r\n//     Segments = Segment { \"/\" Segment } ;\r\n//     Segment  = \"*\" | \"**\" | LITERAL | Variable ;\r\n//     Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\r\n//     FieldPath = IDENT { \".\" IDENT } ;\r\n//     Verb     = \":\" LITERAL ;\r\n//\r\n// The syntax `*` matches a single URL path segment. The syntax `**` matches\r\n// zero or more URL path segments, which must be the last part of the URL path\r\n// except the `Verb`.\r\n//\r\n// The syntax `Variable` matches part of the URL path as specified by its\r\n// template. A variable template must not contain other variables. If a variable\r\n// matches a single path segment, its template may be omitted, e.g. `{var}`\r\n// is equivalent to `{var=*}`.\r\n//\r\n// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL`\r\n// contains any reserved character, such characters should be percent-encoded\r\n// before the matching.\r\n//\r\n// If a variable contains exactly one path segment, such as `\"{var}\"` or\r\n// `\"{var=*}\"`, when such a variable is expanded into a URL path on the client\r\n// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The\r\n// server side does the reverse decoding. Such variables show up in the\r\n// [Discovery\r\n// Document](https://developers.google.com/discovery/v1/reference/apis) as\r\n// `{var}`.\r\n//\r\n// If a variable contains multiple path segments, such as `\"{var=foo/*}\"`\r\n// or `\"{var=**}\"`, when such a variable is expanded into a URL path on the\r\n// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded.\r\n// The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left\r\n// unchanged. Such variables show up in the\r\n// [Discovery\r\n// Document](https://developers.google.com/discovery/v1/reference/apis) as\r\n// `{+var}`.\r\n//\r\n// ## Using gRPC API Service Configuration\r\n//\r\n// gRPC API Service Configuration (service config) is a configuration language\r\n// for configuring a gRPC service to become a user-facing product. The\r\n// service config is simply the YAML representation of the `google.api.Service`\r\n// proto message.\r\n//\r\n// As an alternative to annotating your proto file, you can configure gRPC\r\n// transcoding in your service config YAML files. You do this by specifying a\r\n// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same\r\n// effect as the proto annotation. This can be particularly useful if you\r\n// have a proto that is reused in multiple services. Note that any transcoding\r\n// specified in the service config will override any matching transcoding\r\n// configuration in the proto.\r\n//\r\n// Example:\r\n//\r\n//     http:\r\n//       rules:\r\n//         # Selects a gRPC method and applies HttpRule to it.\r\n//         - selector: example.v1.Messaging.GetMessage\r\n//           get: /v1/messages/{message_id}/{sub.subfield}\r\n//\r\n// ## Special notes\r\n//\r\n// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the\r\n// proto to JSON conversion must follow the [proto3\r\n// specification](https://developers.google.com/protocol-buffers/docs/proto3#json).\r\n//\r\n// While the single segment variable follows the semantics of\r\n// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\r\n// Expansion, the multi segment variable **does not** follow RFC 6570 Section\r\n// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion\r\n// does not expand special characters like `?` and `#`, which would lead\r\n// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding\r\n// for multi segment variables.\r\n//\r\n// The path variables **must not** refer to any repeated or mapped field,\r\n// because client libraries are not capable of handling such variable expansion.\r\n//\r\n// The path variables **must not** capture the leading \"/\" character. The reason\r\n// is that the most common use case \"{var}\" does not capture the leading \"/\"\r\n// character. For consistency, all path variables must share the same behavior.\r\n//\r\n// Repeated message fields must not be mapped to URL query parameters, because\r\n// no client library can support such complicated mapping.\r\n//\r\n// If an API needs to use a JSON array for request or response body, it can map\r\n// the request or response body to a repeated field. However, some gRPC\r\n// Transcoding implementations may not support this feature.\r\nmessage HttpRule {\r\n  // Selects a method to which this rule applies.\r\n  //\r\n  // Refer to [selector][google.api.DocumentationRule.selector] for syntax details.\r\n  string selector = 1;\r\n\r\n  // Determines the URL pattern is matched by this rules. This pattern can be\r\n  // used with any of the {get|put|post|delete|patch} methods. A custom method\r\n  // can be defined using the 'custom' field.\r\n  oneof pattern {\r\n    // Maps to HTTP GET. Used for listing and getting information about\r\n    // resources.\r\n    string get = 2;\r\n\r\n    // Maps to HTTP PUT. Used for replacing a resource.\r\n    string put = 3;\r\n\r\n    // Maps to HTTP POST. Used for creating a resource or performing an action.\r\n    string post = 4;\r\n\r\n    // Maps to HTTP DELETE. Used for deleting a resource.\r\n    string delete = 5;\r\n\r\n    // Maps to HTTP PATCH. Used for updating a resource.\r\n    string patch = 6;\r\n\r\n    // The custom pattern is used for specifying an HTTP method that is not\r\n    // included in the `pattern` field, such as HEAD, or \"*\" to leave the\r\n    // HTTP method unspecified for this rule. The wild-card rule is useful\r\n    // for services that provide content to Web (HTML) clients.\r\n    CustomHttpPattern custom = 8;\r\n  }\r\n\r\n  // The name of the request field whose value is mapped to the HTTP request\r\n  // body, or `*` for mapping all request fields not captured by the path\r\n  // pattern to the HTTP body, or omitted for not having any HTTP request body.\r\n  //\r\n  // NOTE: the referred field must be present at the top-level of the request\r\n  // message type.\r\n  string body = 7;\r\n\r\n  // Optional. The name of the response field whose value is mapped to the HTTP\r\n  // response body. When omitted, the entire response message will be used\r\n  // as the HTTP response body.\r\n  //\r\n  // NOTE: The referred field must be present at the top-level of the response\r\n  // message type.\r\n  string response_body = 12;\r\n\r\n  // Additional HTTP bindings for the selector. Nested bindings must\r\n  // not contain an `additional_bindings` field themselves (that is,\r\n  // the nesting may only be one level deep).\r\n  repeated HttpRule additional_bindings = 11;\r\n}\r\n\r\n// A custom pattern is used for defining custom HTTP verb.\r\nmessage CustomHttpPattern {\r\n  // The name of this custom HTTP verb.\r\n  string kind = 1;\r\n\r\n  // The path matched by this custom verb.\r\n  string path = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-14/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Grpc.JsonTranscoding\" Version=\"8.0.4\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-15/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\nusing Microsoft.AspNetCore.Grpc.JsonTranscoding;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc().AddJsonTranscoding();\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => Results.Content(\"\"\"\r\n<html>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n<body>\r\n\r\n<div class=\"container\">\r\n    <h1>gRPC JSON Transcoding POST</h1>\r\n    <div class=\"row mb-3\">\r\n        <div class=\"col-md-3\">\r\n            <form>\r\n                <input type=\"text\" class=\"form-control\" id=\"senderInput\" placeholder=\"Please enter sender\" /><br/>\r\n                <input type=\"text\" class=\"form-control\" id=\"cityInput\" placeholder=\"Please enter city\" /><br/>\r\n                <input type=\"number\"  min=\"18\" step=\"1\" class=\"form-control\" id=\"ageInput\" placeholder=\"Please enter age\" /><br/>\r\n                <button type=\"button\" id=\"postBtn\" class=\"btn btn-primary\">Send</button>\r\n            </form>\r\n        </div>\r\n    </div>\r\n    <div class=\"card\">\r\n        <div class=\"card-body\">\r\n            <p>\r\n            sender:<br/>\r\n            <span id=\"sender\"/>\r\n            </p>\r\n            <p>\r\n            city:<br/>\r\n            <span id=\"city\"/>\r\n            </p>\r\n            <p>\r\n            sender:<br/>\r\n            <span id=\"age\"/>\r\n            </p>\r\n            <p>\r\n            time: <br/>\r\n            <span id=\"displayTime\" />\r\n            </p>\r\n        </div>\r\n    </div>\r\n</div>\r\n<script>\r\n    const postBtn = document.getElementById(\"postBtn\");\r\n    postBtn.addEventListener(\"click\", function() {\r\n        const senderInput = document.getElementById(\"senderInput\");\r\n        const cityInput = document.getElementById(\"cityInput\");\r\n        const ageInput = document.getElementById(\"ageInput\");\r\n\r\n        const input = { sender: senderInput.value, city: cityInput.value, age: parseInt(ageInput.value) };\r\n        grpc(input).then( result => { \r\n            document.getElementById(\"sender\").innerHTML = result.receivedFrom;\r\n            document.getElementById(\"city\").innerHTML = result.receivedCity;\r\n            document.getElementById(\"age\").innerHTML = result.receivedAge;\r\n            document.getElementById(\"displayTime\").innerHTML = convertInJs(result.displayTime);\r\n            console.log(result);\r\n        });\r\n    });\r\n\r\n    function convertInJs(input){\r\n        let epochTicks = 621355968000000000,    // the number of .net ticks at the unix epoch\r\n            ticksPerMillisecond = 10000,        // there are 10000 .net ticks per millisecond\r\n            jsTicks = 0;                        // ticks in javascript environment\r\n\r\n        jsTicks = (input - epochTicks) / ticksPerMillisecond;\r\n\r\n        const jsDate = new Date(jsTicks); // N.B. Js applies local timezone in automatic\r\n\r\n        return jsDate\r\n    }\r\n\r\n    async function grpc(input){\r\n        const payload = {\r\n            city: input.city,\r\n            age: input.age\r\n        };\r\n\r\n        console.log(\"Payload \", payload);\r\n\r\n        const result = await fetch(`https://localhost:5500/v1/message/${input.sender}`, {\r\n            headers: {\r\n                'Content-Type' : 'application/json'\r\n            },\r\n            body: JSON.stringify(payload),\r\n            method: 'POST'\r\n        });\r\n        const response = await result.json();\r\n        return response\r\n    }\r\n</script>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override Task<Billboard.MessageReply> ShowMessage(Billboard.MessageRequest request, ServerCallContext context)\r\n    {\r\n        var now = DateTime.UtcNow;\r\n        return Task.FromResult(new Billboard.MessageReply\r\n        {\r\n            DisplayTime = now.Ticks,\r\n            ReceivedFrom = request.Sender,\r\n            ReceivedAge = request.Age,\r\n            ReceivedCity = request.City\r\n        });\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-15/README.md",
    "content": "# gRPC JSON transcoding POST\r\n\r\nThis sample shows how to make a POST call to a gRPC endpoint via gRPC JSON transcoding by combining route parameter and body."
  },
  {
    "path": "projects/grpc/grpc-15/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\nimport \"google/api/annotations.proto\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {\r\n      option (google.api.http) = {\r\n      post: \"/v1/message/{sender}\",\r\n      body: \"*\"\r\n    };\r\n  }\r\n}\r\n\r\nmessage MessageRequest {\r\n  string sender = 1;\r\n  string city = 2;\r\n  int32 age = 3;\r\n}\r\n\r\nmessage MessageBody {\r\n}\r\n\r\nmessage MessageReply {\r\n  string received_from = 1;\r\n  int64 display_time = 2;\r\n  string received_city = 3;\r\n  int32 received_age = 4;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-15/google/api/annotations.proto",
    "content": "// Copyright (c) 2015, Google Inc.\r\n//\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n//     http://www.apache.org/licenses/LICENSE-2.0\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n\r\nsyntax = \"proto3\";\r\n\r\npackage google.api;\r\n\r\nimport \"google/api/http.proto\";\r\nimport \"google/protobuf/descriptor.proto\";\r\n\r\noption go_package = \"google.golang.org/genproto/googleapis/api/annotations;annotations\";\r\noption java_multiple_files = true;\r\noption java_outer_classname = \"AnnotationsProto\";\r\noption java_package = \"com.google.api\";\r\noption objc_class_prefix = \"GAPI\";\r\n\r\nextend google.protobuf.MethodOptions {\r\n  // See `HttpRule`.\r\n  HttpRule http = 72295728;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-15/google/api/http.proto",
    "content": "// Copyright 2019 Google LLC.\r\n//\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n//     http://www.apache.org/licenses/LICENSE-2.0\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n//\r\n\r\nsyntax = \"proto3\";\r\n\r\npackage google.api;\r\n\r\noption cc_enable_arenas = true;\r\noption go_package = \"google.golang.org/genproto/googleapis/api/annotations;annotations\";\r\noption java_multiple_files = true;\r\noption java_outer_classname = \"HttpProto\";\r\noption java_package = \"com.google.api\";\r\noption objc_class_prefix = \"GAPI\";\r\n\r\n// Defines the HTTP configuration for an API service. It contains a list of\r\n// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method\r\n// to one or more HTTP REST API methods.\r\nmessage Http {\r\n  // A list of HTTP configuration rules that apply to individual API methods.\r\n  //\r\n  // **NOTE:** All service configuration rules follow \"last one wins\" order.\r\n  repeated HttpRule rules = 1;\r\n\r\n  // When set to true, URL path parameters will be fully URI-decoded except in\r\n  // cases of single segment matches in reserved expansion, where \"%2F\" will be\r\n  // left encoded.\r\n  //\r\n  // The default behavior is to not decode RFC 6570 reserved characters in multi\r\n  // segment matches.\r\n  bool fully_decode_reserved_expansion = 2;\r\n}\r\n\r\n// # gRPC Transcoding\r\n//\r\n// gRPC Transcoding is a feature for mapping between a gRPC method and one or\r\n// more HTTP REST endpoints. It allows developers to build a single API service\r\n// that supports both gRPC APIs and REST APIs. Many systems, including [Google\r\n// APIs](https://github.com/googleapis/googleapis),\r\n// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC\r\n// Gateway](https://github.com/grpc-ecosystem/grpc-gateway),\r\n// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature\r\n// and use it for large scale production services.\r\n//\r\n// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies\r\n// how different portions of the gRPC request message are mapped to the URL\r\n// path, URL query parameters, and HTTP request body. It also controls how the\r\n// gRPC response message is mapped to the HTTP response body. `HttpRule` is\r\n// typically specified as an `google.api.http` annotation on the gRPC method.\r\n//\r\n// Each mapping specifies a URL path template and an HTTP method. The path\r\n// template may refer to one or more fields in the gRPC request message, as long\r\n// as each field is a non-repeated field with a primitive (non-message) type.\r\n// The path template controls how fields of the request message are mapped to\r\n// the URL path.\r\n//\r\n// Example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//             get: \"/v1/{name=messages/*}\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       string name = 1; // Mapped to URL path.\r\n//     }\r\n//     message Message {\r\n//       string text = 1; // The resource content.\r\n//     }\r\n//\r\n// This enables an HTTP REST to gRPC mapping as below:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456`  | `GetMessage(name: \"messages/123456\")`\r\n//\r\n// Any fields in the request message which are not bound by the path template\r\n// automatically become HTTP query parameters if there is no HTTP request body.\r\n// For example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//             get:\"/v1/messages/{message_id}\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       message SubMessage {\r\n//         string subfield = 1;\r\n//       }\r\n//       string message_id = 1; // Mapped to URL path.\r\n//       int64 revision = 2;    // Mapped to URL query parameter `revision`.\r\n//       SubMessage sub = 3;    // Mapped to URL query parameter `sub.subfield`.\r\n//     }\r\n//\r\n// This enables a HTTP JSON to RPC mapping as below:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456?revision=2&sub.subfield=foo` |\r\n// `GetMessage(message_id: \"123456\" revision: 2 sub: SubMessage(subfield:\r\n// \"foo\"))`\r\n//\r\n// Note that fields which are mapped to URL query parameters must have a\r\n// primitive type or a repeated primitive type or a non-repeated message type.\r\n// In the case of a repeated type, the parameter can be repeated in the URL\r\n// as `...?param=A&param=B`. In the case of a message type, each field of the\r\n// message is mapped to a separate parameter, such as\r\n// `...?foo.a=A&foo.b=B&foo.c=C`.\r\n//\r\n// For HTTP methods that allow a request body, the `body` field\r\n// specifies the mapping. Consider a REST update method on the\r\n// message resource collection:\r\n//\r\n//     service Messaging {\r\n//       rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           patch: \"/v1/messages/{message_id}\"\r\n//           body: \"message\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message UpdateMessageRequest {\r\n//       string message_id = 1; // mapped to the URL\r\n//       Message message = 2;   // mapped to the body\r\n//     }\r\n//\r\n// The following HTTP JSON to RPC mapping is enabled, where the\r\n// representation of the JSON in the request body is determined by\r\n// protos JSON encoding:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id:\r\n// \"123456\" message { text: \"Hi!\" })`\r\n//\r\n// The special name `*` can be used in the body mapping to define that\r\n// every field not bound by the path template should be mapped to the\r\n// request body.  This enables the following alternative definition of\r\n// the update method:\r\n//\r\n//     service Messaging {\r\n//       rpc UpdateMessage(Message) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           patch: \"/v1/messages/{message_id}\"\r\n//           body: \"*\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message Message {\r\n//       string message_id = 1;\r\n//       string text = 2;\r\n//     }\r\n//\r\n//\r\n// The following HTTP JSON to RPC mapping is enabled:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id:\r\n// \"123456\" text: \"Hi!\")`\r\n//\r\n// Note that when using `*` in the body mapping, it is not possible to\r\n// have HTTP parameters, as all fields not bound by the path end in\r\n// the body. This makes this option more rarely used in practice when\r\n// defining REST APIs. The common usage of `*` is in custom methods\r\n// which don't use the URL at all for transferring data.\r\n//\r\n// It is possible to define multiple HTTP methods for one RPC by using\r\n// the `additional_bindings` option. Example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           get: \"/v1/messages/{message_id}\"\r\n//           additional_bindings {\r\n//             get: \"/v1/users/{user_id}/messages/{message_id}\"\r\n//           }\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       string message_id = 1;\r\n//       string user_id = 2;\r\n//     }\r\n//\r\n// This enables the following two alternative HTTP JSON to RPC mappings:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456` | `GetMessage(message_id: \"123456\")`\r\n// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: \"me\" message_id:\r\n// \"123456\")`\r\n//\r\n// ## Rules for HTTP mapping\r\n//\r\n// 1. Leaf request fields (recursive expansion nested messages in the request\r\n//    message) are classified into three categories:\r\n//    - Fields referred by the path template. They are passed via the URL path.\r\n//    - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP\r\n//      request body.\r\n//    - All other fields are passed via the URL query parameters, and the\r\n//      parameter name is the field path in the request message. A repeated\r\n//      field can be represented as multiple query parameters under the same\r\n//      name.\r\n//  2. If [HttpRule.body][google.api.HttpRule.body] is \"*\", there is no URL query parameter, all fields\r\n//     are passed via URL path and HTTP request body.\r\n//  3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all\r\n//     fields are passed via URL path and URL query parameters.\r\n//\r\n// ### Path template syntax\r\n//\r\n//     Template = \"/\" Segments [ Verb ] ;\r\n//     Segments = Segment { \"/\" Segment } ;\r\n//     Segment  = \"*\" | \"**\" | LITERAL | Variable ;\r\n//     Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\r\n//     FieldPath = IDENT { \".\" IDENT } ;\r\n//     Verb     = \":\" LITERAL ;\r\n//\r\n// The syntax `*` matches a single URL path segment. The syntax `**` matches\r\n// zero or more URL path segments, which must be the last part of the URL path\r\n// except the `Verb`.\r\n//\r\n// The syntax `Variable` matches part of the URL path as specified by its\r\n// template. A variable template must not contain other variables. If a variable\r\n// matches a single path segment, its template may be omitted, e.g. `{var}`\r\n// is equivalent to `{var=*}`.\r\n//\r\n// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL`\r\n// contains any reserved character, such characters should be percent-encoded\r\n// before the matching.\r\n//\r\n// If a variable contains exactly one path segment, such as `\"{var}\"` or\r\n// `\"{var=*}\"`, when such a variable is expanded into a URL path on the client\r\n// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The\r\n// server side does the reverse decoding. Such variables show up in the\r\n// [Discovery\r\n// Document](https://developers.google.com/discovery/v1/reference/apis) as\r\n// `{var}`.\r\n//\r\n// If a variable contains multiple path segments, such as `\"{var=foo/*}\"`\r\n// or `\"{var=**}\"`, when such a variable is expanded into a URL path on the\r\n// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded.\r\n// The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left\r\n// unchanged. Such variables show up in the\r\n// [Discovery\r\n// Document](https://developers.google.com/discovery/v1/reference/apis) as\r\n// `{+var}`.\r\n//\r\n// ## Using gRPC API Service Configuration\r\n//\r\n// gRPC API Service Configuration (service config) is a configuration language\r\n// for configuring a gRPC service to become a user-facing product. The\r\n// service config is simply the YAML representation of the `google.api.Service`\r\n// proto message.\r\n//\r\n// As an alternative to annotating your proto file, you can configure gRPC\r\n// transcoding in your service config YAML files. You do this by specifying a\r\n// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same\r\n// effect as the proto annotation. This can be particularly useful if you\r\n// have a proto that is reused in multiple services. Note that any transcoding\r\n// specified in the service config will override any matching transcoding\r\n// configuration in the proto.\r\n//\r\n// Example:\r\n//\r\n//     http:\r\n//       rules:\r\n//         # Selects a gRPC method and applies HttpRule to it.\r\n//         - selector: example.v1.Messaging.GetMessage\r\n//           get: /v1/messages/{message_id}/{sub.subfield}\r\n//\r\n// ## Special notes\r\n//\r\n// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the\r\n// proto to JSON conversion must follow the [proto3\r\n// specification](https://developers.google.com/protocol-buffers/docs/proto3#json).\r\n//\r\n// While the single segment variable follows the semantics of\r\n// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\r\n// Expansion, the multi segment variable **does not** follow RFC 6570 Section\r\n// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion\r\n// does not expand special characters like `?` and `#`, which would lead\r\n// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding\r\n// for multi segment variables.\r\n//\r\n// The path variables **must not** refer to any repeated or mapped field,\r\n// because client libraries are not capable of handling such variable expansion.\r\n//\r\n// The path variables **must not** capture the leading \"/\" character. The reason\r\n// is that the most common use case \"{var}\" does not capture the leading \"/\"\r\n// character. For consistency, all path variables must share the same behavior.\r\n//\r\n// Repeated message fields must not be mapped to URL query parameters, because\r\n// no client library can support such complicated mapping.\r\n//\r\n// If an API needs to use a JSON array for request or response body, it can map\r\n// the request or response body to a repeated field. However, some gRPC\r\n// Transcoding implementations may not support this feature.\r\nmessage HttpRule {\r\n  // Selects a method to which this rule applies.\r\n  //\r\n  // Refer to [selector][google.api.DocumentationRule.selector] for syntax details.\r\n  string selector = 1;\r\n\r\n  // Determines the URL pattern is matched by this rules. This pattern can be\r\n  // used with any of the {get|put|post|delete|patch} methods. A custom method\r\n  // can be defined using the 'custom' field.\r\n  oneof pattern {\r\n    // Maps to HTTP GET. Used for listing and getting information about\r\n    // resources.\r\n    string get = 2;\r\n\r\n    // Maps to HTTP PUT. Used for replacing a resource.\r\n    string put = 3;\r\n\r\n    // Maps to HTTP POST. Used for creating a resource or performing an action.\r\n    string post = 4;\r\n\r\n    // Maps to HTTP DELETE. Used for deleting a resource.\r\n    string delete = 5;\r\n\r\n    // Maps to HTTP PATCH. Used for updating a resource.\r\n    string patch = 6;\r\n\r\n    // The custom pattern is used for specifying an HTTP method that is not\r\n    // included in the `pattern` field, such as HEAD, or \"*\" to leave the\r\n    // HTTP method unspecified for this rule. The wild-card rule is useful\r\n    // for services that provide content to Web (HTML) clients.\r\n    CustomHttpPattern custom = 8;\r\n  }\r\n\r\n  // The name of the request field whose value is mapped to the HTTP request\r\n  // body, or `*` for mapping all request fields not captured by the path\r\n  // pattern to the HTTP body, or omitted for not having any HTTP request body.\r\n  //\r\n  // NOTE: the referred field must be present at the top-level of the request\r\n  // message type.\r\n  string body = 7;\r\n\r\n  // Optional. The name of the response field whose value is mapped to the HTTP\r\n  // response body. When omitted, the entire response message will be used\r\n  // as the HTTP response body.\r\n  //\r\n  // NOTE: The referred field must be present at the top-level of the response\r\n  // message type.\r\n  string response_body = 12;\r\n\r\n  // Additional HTTP bindings for the selector. Nested bindings must\r\n  // not contain an `additional_bindings` field themselves (that is,\r\n  // the nesting may only be one level deep).\r\n  repeated HttpRule additional_bindings = 11;\r\n}\r\n\r\n// A custom pattern is used for defining custom HTTP verb.\r\nmessage CustomHttpPattern {\r\n  // The name of this custom HTTP verb.\r\n  string kind = 1;\r\n\r\n  // The path matched by this custom verb.\r\n  string path = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-15/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Grpc.JsonTranscoding\" Version=\"8.0.4\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-16/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\nusing Microsoft.AspNetCore.Grpc.JsonTranscoding;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc().AddJsonTranscoding();\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => Results.Content(\"\"\"\r\n<html>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n<body>\r\n\r\n<div class=\"container\">\r\n    <h1>gRPC JSON Transcoding PUT</h1>\r\n    <div class=\"row mb-3\">\r\n        <div class=\"col-md-3\">\r\n            <form>\r\n                <input type=\"text\" class=\"form-control\" id=\"senderInput\" placeholder=\"Please enter sender\" /><br/>\r\n                <input type=\"text\" class=\"form-control\" id=\"cityInput\" placeholder=\"Please enter city\" /><br/>\r\n                <input type=\"number\"  min=\"18\" step=\"1\" class=\"form-control\" id=\"ageInput\" placeholder=\"Please enter age\" /><br/>\r\n                <button type=\"button\" id=\"postBtn\" class=\"btn btn-primary\">Send</button>\r\n            </form>\r\n        </div>\r\n    </div>\r\n    <div class=\"card\">\r\n        <div class=\"card-body\">\r\n            <p>\r\n            sender:<br/>\r\n            <span id=\"sender\"/>\r\n            </p>\r\n            <p>\r\n            city:<br/>\r\n            <span id=\"city\"/>\r\n            </p>\r\n            <p>\r\n            sender:<br/>\r\n            <span id=\"age\"/>\r\n            </p>\r\n        </div>\r\n    </div>\r\n</div>\r\n<script>\r\n    const postBtn = document.getElementById(\"postBtn\");\r\n    postBtn.addEventListener(\"click\", function() {\r\n        const senderInput = document.getElementById(\"senderInput\");\r\n        const cityInput = document.getElementById(\"cityInput\");\r\n        const ageInput = document.getElementById(\"ageInput\");\r\n\r\n        const input = { sender: senderInput.value, city: cityInput.value, age: parseInt(ageInput.value) };\r\n        grpc(input).then( result => { \r\n            document.getElementById(\"sender\").innerHTML = result.receivedFrom;\r\n            document.getElementById(\"city\").innerHTML = result.receivedCity;\r\n            document.getElementById(\"age\").innerHTML = result.receivedAge;\r\n            console.log(result);\r\n        });\r\n    });\r\n\r\n    async function grpc(input){\r\n        const payload = {\r\n            city: input.city,\r\n            age: input.age\r\n        };\r\n\r\n        console.log(\"Payload \", payload);\r\n\r\n        const result = await fetch(`https://localhost:5500/v1/message/${input.sender}`, {\r\n            headers: {\r\n                'Content-Type' : 'application/json'\r\n            },\r\n            body: JSON.stringify(payload),\r\n            method: 'PUT'\r\n        });\r\n        const response = await result.json();\r\n        return response\r\n    }\r\n</script>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override Task<Billboard.MessageReply> ShowMessage(Billboard.MessageRequest request, ServerCallContext context)\r\n    {\r\n        var now = DateTime.UtcNow;\r\n        return Task.FromResult(new Billboard.MessageReply\r\n        {\r\n            ReceivedFrom = request.Sender,\r\n            ReceivedAge = request.Age,\r\n            ReceivedCity = request.City\r\n        });\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-16/README.md",
    "content": "# gRPC JSON transcoding PUT\r\n\r\nThis sample shows how to make a PUT call to a gRPC endpoint via gRPC JSON transcoding"
  },
  {
    "path": "projects/grpc/grpc-16/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\nimport \"google/api/annotations.proto\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {\r\n      option (google.api.http) = {\r\n      put: \"/v1/message/{sender}\",\r\n      body: \"*\"\r\n    };\r\n  }\r\n}\r\n\r\nmessage MessageRequest {\r\n  string sender = 1;\r\n  string city = 2;\r\n  int32 age = 3;\r\n}\r\n\r\nmessage MessageBody {\r\n}\r\n\r\nmessage MessageReply {\r\n  string received_from = 1;\r\n  string received_city = 2;\r\n  int32 received_age = 3;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-16/google/api/annotations.proto",
    "content": "// Copyright (c) 2015, Google Inc.\r\n//\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n//     http://www.apache.org/licenses/LICENSE-2.0\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n\r\nsyntax = \"proto3\";\r\n\r\npackage google.api;\r\n\r\nimport \"google/api/http.proto\";\r\nimport \"google/protobuf/descriptor.proto\";\r\n\r\noption go_package = \"google.golang.org/genproto/googleapis/api/annotations;annotations\";\r\noption java_multiple_files = true;\r\noption java_outer_classname = \"AnnotationsProto\";\r\noption java_package = \"com.google.api\";\r\noption objc_class_prefix = \"GAPI\";\r\n\r\nextend google.protobuf.MethodOptions {\r\n  // See `HttpRule`.\r\n  HttpRule http = 72295728;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-16/google/api/http.proto",
    "content": "// Copyright 2019 Google LLC.\r\n//\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n//     http://www.apache.org/licenses/LICENSE-2.0\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n//\r\n\r\nsyntax = \"proto3\";\r\n\r\npackage google.api;\r\n\r\noption cc_enable_arenas = true;\r\noption go_package = \"google.golang.org/genproto/googleapis/api/annotations;annotations\";\r\noption java_multiple_files = true;\r\noption java_outer_classname = \"HttpProto\";\r\noption java_package = \"com.google.api\";\r\noption objc_class_prefix = \"GAPI\";\r\n\r\n// Defines the HTTP configuration for an API service. It contains a list of\r\n// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method\r\n// to one or more HTTP REST API methods.\r\nmessage Http {\r\n  // A list of HTTP configuration rules that apply to individual API methods.\r\n  //\r\n  // **NOTE:** All service configuration rules follow \"last one wins\" order.\r\n  repeated HttpRule rules = 1;\r\n\r\n  // When set to true, URL path parameters will be fully URI-decoded except in\r\n  // cases of single segment matches in reserved expansion, where \"%2F\" will be\r\n  // left encoded.\r\n  //\r\n  // The default behavior is to not decode RFC 6570 reserved characters in multi\r\n  // segment matches.\r\n  bool fully_decode_reserved_expansion = 2;\r\n}\r\n\r\n// # gRPC Transcoding\r\n//\r\n// gRPC Transcoding is a feature for mapping between a gRPC method and one or\r\n// more HTTP REST endpoints. It allows developers to build a single API service\r\n// that supports both gRPC APIs and REST APIs. Many systems, including [Google\r\n// APIs](https://github.com/googleapis/googleapis),\r\n// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC\r\n// Gateway](https://github.com/grpc-ecosystem/grpc-gateway),\r\n// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature\r\n// and use it for large scale production services.\r\n//\r\n// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies\r\n// how different portions of the gRPC request message are mapped to the URL\r\n// path, URL query parameters, and HTTP request body. It also controls how the\r\n// gRPC response message is mapped to the HTTP response body. `HttpRule` is\r\n// typically specified as an `google.api.http` annotation on the gRPC method.\r\n//\r\n// Each mapping specifies a URL path template and an HTTP method. The path\r\n// template may refer to one or more fields in the gRPC request message, as long\r\n// as each field is a non-repeated field with a primitive (non-message) type.\r\n// The path template controls how fields of the request message are mapped to\r\n// the URL path.\r\n//\r\n// Example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//             get: \"/v1/{name=messages/*}\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       string name = 1; // Mapped to URL path.\r\n//     }\r\n//     message Message {\r\n//       string text = 1; // The resource content.\r\n//     }\r\n//\r\n// This enables an HTTP REST to gRPC mapping as below:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456`  | `GetMessage(name: \"messages/123456\")`\r\n//\r\n// Any fields in the request message which are not bound by the path template\r\n// automatically become HTTP query parameters if there is no HTTP request body.\r\n// For example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//             get:\"/v1/messages/{message_id}\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       message SubMessage {\r\n//         string subfield = 1;\r\n//       }\r\n//       string message_id = 1; // Mapped to URL path.\r\n//       int64 revision = 2;    // Mapped to URL query parameter `revision`.\r\n//       SubMessage sub = 3;    // Mapped to URL query parameter `sub.subfield`.\r\n//     }\r\n//\r\n// This enables a HTTP JSON to RPC mapping as below:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456?revision=2&sub.subfield=foo` |\r\n// `GetMessage(message_id: \"123456\" revision: 2 sub: SubMessage(subfield:\r\n// \"foo\"))`\r\n//\r\n// Note that fields which are mapped to URL query parameters must have a\r\n// primitive type or a repeated primitive type or a non-repeated message type.\r\n// In the case of a repeated type, the parameter can be repeated in the URL\r\n// as `...?param=A&param=B`. In the case of a message type, each field of the\r\n// message is mapped to a separate parameter, such as\r\n// `...?foo.a=A&foo.b=B&foo.c=C`.\r\n//\r\n// For HTTP methods that allow a request body, the `body` field\r\n// specifies the mapping. Consider a REST update method on the\r\n// message resource collection:\r\n//\r\n//     service Messaging {\r\n//       rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           patch: \"/v1/messages/{message_id}\"\r\n//           body: \"message\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message UpdateMessageRequest {\r\n//       string message_id = 1; // mapped to the URL\r\n//       Message message = 2;   // mapped to the body\r\n//     }\r\n//\r\n// The following HTTP JSON to RPC mapping is enabled, where the\r\n// representation of the JSON in the request body is determined by\r\n// protos JSON encoding:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id:\r\n// \"123456\" message { text: \"Hi!\" })`\r\n//\r\n// The special name `*` can be used in the body mapping to define that\r\n// every field not bound by the path template should be mapped to the\r\n// request body.  This enables the following alternative definition of\r\n// the update method:\r\n//\r\n//     service Messaging {\r\n//       rpc UpdateMessage(Message) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           patch: \"/v1/messages/{message_id}\"\r\n//           body: \"*\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message Message {\r\n//       string message_id = 1;\r\n//       string text = 2;\r\n//     }\r\n//\r\n//\r\n// The following HTTP JSON to RPC mapping is enabled:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id:\r\n// \"123456\" text: \"Hi!\")`\r\n//\r\n// Note that when using `*` in the body mapping, it is not possible to\r\n// have HTTP parameters, as all fields not bound by the path end in\r\n// the body. This makes this option more rarely used in practice when\r\n// defining REST APIs. The common usage of `*` is in custom methods\r\n// which don't use the URL at all for transferring data.\r\n//\r\n// It is possible to define multiple HTTP methods for one RPC by using\r\n// the `additional_bindings` option. Example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           get: \"/v1/messages/{message_id}\"\r\n//           additional_bindings {\r\n//             get: \"/v1/users/{user_id}/messages/{message_id}\"\r\n//           }\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       string message_id = 1;\r\n//       string user_id = 2;\r\n//     }\r\n//\r\n// This enables the following two alternative HTTP JSON to RPC mappings:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456` | `GetMessage(message_id: \"123456\")`\r\n// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: \"me\" message_id:\r\n// \"123456\")`\r\n//\r\n// ## Rules for HTTP mapping\r\n//\r\n// 1. Leaf request fields (recursive expansion nested messages in the request\r\n//    message) are classified into three categories:\r\n//    - Fields referred by the path template. They are passed via the URL path.\r\n//    - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP\r\n//      request body.\r\n//    - All other fields are passed via the URL query parameters, and the\r\n//      parameter name is the field path in the request message. A repeated\r\n//      field can be represented as multiple query parameters under the same\r\n//      name.\r\n//  2. If [HttpRule.body][google.api.HttpRule.body] is \"*\", there is no URL query parameter, all fields\r\n//     are passed via URL path and HTTP request body.\r\n//  3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all\r\n//     fields are passed via URL path and URL query parameters.\r\n//\r\n// ### Path template syntax\r\n//\r\n//     Template = \"/\" Segments [ Verb ] ;\r\n//     Segments = Segment { \"/\" Segment } ;\r\n//     Segment  = \"*\" | \"**\" | LITERAL | Variable ;\r\n//     Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\r\n//     FieldPath = IDENT { \".\" IDENT } ;\r\n//     Verb     = \":\" LITERAL ;\r\n//\r\n// The syntax `*` matches a single URL path segment. The syntax `**` matches\r\n// zero or more URL path segments, which must be the last part of the URL path\r\n// except the `Verb`.\r\n//\r\n// The syntax `Variable` matches part of the URL path as specified by its\r\n// template. A variable template must not contain other variables. If a variable\r\n// matches a single path segment, its template may be omitted, e.g. `{var}`\r\n// is equivalent to `{var=*}`.\r\n//\r\n// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL`\r\n// contains any reserved character, such characters should be percent-encoded\r\n// before the matching.\r\n//\r\n// If a variable contains exactly one path segment, such as `\"{var}\"` or\r\n// `\"{var=*}\"`, when such a variable is expanded into a URL path on the client\r\n// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The\r\n// server side does the reverse decoding. Such variables show up in the\r\n// [Discovery\r\n// Document](https://developers.google.com/discovery/v1/reference/apis) as\r\n// `{var}`.\r\n//\r\n// If a variable contains multiple path segments, such as `\"{var=foo/*}\"`\r\n// or `\"{var=**}\"`, when such a variable is expanded into a URL path on the\r\n// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded.\r\n// The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left\r\n// unchanged. Such variables show up in the\r\n// [Discovery\r\n// Document](https://developers.google.com/discovery/v1/reference/apis) as\r\n// `{+var}`.\r\n//\r\n// ## Using gRPC API Service Configuration\r\n//\r\n// gRPC API Service Configuration (service config) is a configuration language\r\n// for configuring a gRPC service to become a user-facing product. The\r\n// service config is simply the YAML representation of the `google.api.Service`\r\n// proto message.\r\n//\r\n// As an alternative to annotating your proto file, you can configure gRPC\r\n// transcoding in your service config YAML files. You do this by specifying a\r\n// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same\r\n// effect as the proto annotation. This can be particularly useful if you\r\n// have a proto that is reused in multiple services. Note that any transcoding\r\n// specified in the service config will override any matching transcoding\r\n// configuration in the proto.\r\n//\r\n// Example:\r\n//\r\n//     http:\r\n//       rules:\r\n//         # Selects a gRPC method and applies HttpRule to it.\r\n//         - selector: example.v1.Messaging.GetMessage\r\n//           get: /v1/messages/{message_id}/{sub.subfield}\r\n//\r\n// ## Special notes\r\n//\r\n// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the\r\n// proto to JSON conversion must follow the [proto3\r\n// specification](https://developers.google.com/protocol-buffers/docs/proto3#json).\r\n//\r\n// While the single segment variable follows the semantics of\r\n// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\r\n// Expansion, the multi segment variable **does not** follow RFC 6570 Section\r\n// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion\r\n// does not expand special characters like `?` and `#`, which would lead\r\n// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding\r\n// for multi segment variables.\r\n//\r\n// The path variables **must not** refer to any repeated or mapped field,\r\n// because client libraries are not capable of handling such variable expansion.\r\n//\r\n// The path variables **must not** capture the leading \"/\" character. The reason\r\n// is that the most common use case \"{var}\" does not capture the leading \"/\"\r\n// character. For consistency, all path variables must share the same behavior.\r\n//\r\n// Repeated message fields must not be mapped to URL query parameters, because\r\n// no client library can support such complicated mapping.\r\n//\r\n// If an API needs to use a JSON array for request or response body, it can map\r\n// the request or response body to a repeated field. However, some gRPC\r\n// Transcoding implementations may not support this feature.\r\nmessage HttpRule {\r\n  // Selects a method to which this rule applies.\r\n  //\r\n  // Refer to [selector][google.api.DocumentationRule.selector] for syntax details.\r\n  string selector = 1;\r\n\r\n  // Determines the URL pattern is matched by this rules. This pattern can be\r\n  // used with any of the {get|put|post|delete|patch} methods. A custom method\r\n  // can be defined using the 'custom' field.\r\n  oneof pattern {\r\n    // Maps to HTTP GET. Used for listing and getting information about\r\n    // resources.\r\n    string get = 2;\r\n\r\n    // Maps to HTTP PUT. Used for replacing a resource.\r\n    string put = 3;\r\n\r\n    // Maps to HTTP POST. Used for creating a resource or performing an action.\r\n    string post = 4;\r\n\r\n    // Maps to HTTP DELETE. Used for deleting a resource.\r\n    string delete = 5;\r\n\r\n    // Maps to HTTP PATCH. Used for updating a resource.\r\n    string patch = 6;\r\n\r\n    // The custom pattern is used for specifying an HTTP method that is not\r\n    // included in the `pattern` field, such as HEAD, or \"*\" to leave the\r\n    // HTTP method unspecified for this rule. The wild-card rule is useful\r\n    // for services that provide content to Web (HTML) clients.\r\n    CustomHttpPattern custom = 8;\r\n  }\r\n\r\n  // The name of the request field whose value is mapped to the HTTP request\r\n  // body, or `*` for mapping all request fields not captured by the path\r\n  // pattern to the HTTP body, or omitted for not having any HTTP request body.\r\n  //\r\n  // NOTE: the referred field must be present at the top-level of the request\r\n  // message type.\r\n  string body = 7;\r\n\r\n  // Optional. The name of the response field whose value is mapped to the HTTP\r\n  // response body. When omitted, the entire response message will be used\r\n  // as the HTTP response body.\r\n  //\r\n  // NOTE: The referred field must be present at the top-level of the response\r\n  // message type.\r\n  string response_body = 12;\r\n\r\n  // Additional HTTP bindings for the selector. Nested bindings must\r\n  // not contain an `additional_bindings` field themselves (that is,\r\n  // the nesting may only be one level deep).\r\n  repeated HttpRule additional_bindings = 11;\r\n}\r\n\r\n// A custom pattern is used for defining custom HTTP verb.\r\nmessage CustomHttpPattern {\r\n  // The name of this custom HTTP verb.\r\n  string kind = 1;\r\n\r\n  // The path matched by this custom verb.\r\n  string path = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-16/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Grpc.JsonTranscoding\" Version=\"8.0.4\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-17/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc().AddJsonTranscoding();\r\nbuilder.Services.AddSingleton<Accumulator>();\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => Results.Content(\"\"\"\r\n<html>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n<body>\r\n\r\n<div class=\"container\">\r\n    <h1>gRPC JSON Transcoding PATCH</h1>\r\n    <div class=\"row mb-3\">\r\n        <div class=\"col-md-3\">\r\n            <form>\r\n                <input type=\"number\"  min=\"18\" step=\"1\" class=\"form-control\" id=\"numberInput\" placeholder=\"Please enter a number\" /><br/>\r\n                <button type=\"button\" id=\"postBtn\" class=\"btn btn-primary\">Send</button>\r\n            </form>\r\n        </div>\r\n    </div>\r\n    <div class=\"card\">\r\n        <div class=\"card-body\">\r\n            <p>\r\n            total:<br/>\r\n            <span id=\"total\"/>\r\n            </p>\r\n        </div>\r\n    </div>\r\n</div>\r\n<script>\r\n    const postBtn = document.getElementById(\"postBtn\");\r\n    postBtn.addEventListener(\"click\", function() {\r\n        const numberInput = document.getElementById(\"numberInput\");\r\n\r\n        const input = { number : parseInt(numberInput.value) };\r\n        grpc(input).then( result => { \r\n            document.getElementById(\"total\").innerHTML = result.totalNumber;\r\n        });\r\n    });\r\n\r\n    async function grpc(input){\r\n        const payload = {\r\n            addNumber: input.number\r\n        };\r\n\r\n        console.log(\"Payload \", payload);\r\n\r\n        const result = await fetch(`https://localhost:5500/v1/message`, {\r\n            headers: {\r\n                'Content-Type' : 'application/json'\r\n            },\r\n            body: JSON.stringify(payload),\r\n            method: 'PATCH'\r\n        });\r\n        const response = await result.json();\r\n        return response\r\n    }\r\n</script>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\napp.Run();\r\n\r\npublic class Accumulator\r\n{\r\n    public int Total { get; set;}\r\n\r\n    public void Add(int number) => Total += number;\r\n}\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    Accumulator _acc;\r\n\r\n    public BillboardService(Accumulator acc) \r\n    {\r\n        _acc = acc;\r\n    }\r\n    \r\n    public override Task<Billboard.MessageReply> ShowMessage(Billboard.MessageRequest request, ServerCallContext context)\r\n    {\r\n        _acc.Add(request.AddNumber);\r\n\r\n        return Task.FromResult(new Billboard.MessageReply\r\n        {\r\n            TotalNumber = _acc.Total\r\n        });\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-17/README.md",
    "content": "# gRPC JSON transcoding PATCH\r\n\r\nThis sample shows how to make a PATCH call to a gRPC endpoint via gRPC JSON transcoding"
  },
  {
    "path": "projects/grpc/grpc-17/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\nimport \"google/api/annotations.proto\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {\r\n      option (google.api.http) = {\r\n      patch: \"/v1/message\",\r\n      body: \"*\"\r\n    };\r\n  }\r\n}\r\n\r\nmessage MessageRequest {\r\n  int32 addNumber = 1;\r\n}\r\n\r\nmessage MessageBody {\r\n}\r\n\r\nmessage MessageReply {\r\n  int32 total_number = 1;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-17/google/api/annotations.proto",
    "content": "// Copyright (c) 2015, Google Inc.\r\n//\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n//     http://www.apache.org/licenses/LICENSE-2.0\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n\r\nsyntax = \"proto3\";\r\n\r\npackage google.api;\r\n\r\nimport \"google/api/http.proto\";\r\nimport \"google/protobuf/descriptor.proto\";\r\n\r\noption go_package = \"google.golang.org/genproto/googleapis/api/annotations;annotations\";\r\noption java_multiple_files = true;\r\noption java_outer_classname = \"AnnotationsProto\";\r\noption java_package = \"com.google.api\";\r\noption objc_class_prefix = \"GAPI\";\r\n\r\nextend google.protobuf.MethodOptions {\r\n  // See `HttpRule`.\r\n  HttpRule http = 72295728;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-17/google/api/http.proto",
    "content": "// Copyright 2019 Google LLC.\r\n//\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n//     http://www.apache.org/licenses/LICENSE-2.0\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n//\r\n\r\nsyntax = \"proto3\";\r\n\r\npackage google.api;\r\n\r\noption cc_enable_arenas = true;\r\noption go_package = \"google.golang.org/genproto/googleapis/api/annotations;annotations\";\r\noption java_multiple_files = true;\r\noption java_outer_classname = \"HttpProto\";\r\noption java_package = \"com.google.api\";\r\noption objc_class_prefix = \"GAPI\";\r\n\r\n// Defines the HTTP configuration for an API service. It contains a list of\r\n// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method\r\n// to one or more HTTP REST API methods.\r\nmessage Http {\r\n  // A list of HTTP configuration rules that apply to individual API methods.\r\n  //\r\n  // **NOTE:** All service configuration rules follow \"last one wins\" order.\r\n  repeated HttpRule rules = 1;\r\n\r\n  // When set to true, URL path parameters will be fully URI-decoded except in\r\n  // cases of single segment matches in reserved expansion, where \"%2F\" will be\r\n  // left encoded.\r\n  //\r\n  // The default behavior is to not decode RFC 6570 reserved characters in multi\r\n  // segment matches.\r\n  bool fully_decode_reserved_expansion = 2;\r\n}\r\n\r\n// # gRPC Transcoding\r\n//\r\n// gRPC Transcoding is a feature for mapping between a gRPC method and one or\r\n// more HTTP REST endpoints. It allows developers to build a single API service\r\n// that supports both gRPC APIs and REST APIs. Many systems, including [Google\r\n// APIs](https://github.com/googleapis/googleapis),\r\n// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC\r\n// Gateway](https://github.com/grpc-ecosystem/grpc-gateway),\r\n// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature\r\n// and use it for large scale production services.\r\n//\r\n// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies\r\n// how different portions of the gRPC request message are mapped to the URL\r\n// path, URL query parameters, and HTTP request body. It also controls how the\r\n// gRPC response message is mapped to the HTTP response body. `HttpRule` is\r\n// typically specified as an `google.api.http` annotation on the gRPC method.\r\n//\r\n// Each mapping specifies a URL path template and an HTTP method. The path\r\n// template may refer to one or more fields in the gRPC request message, as long\r\n// as each field is a non-repeated field with a primitive (non-message) type.\r\n// The path template controls how fields of the request message are mapped to\r\n// the URL path.\r\n//\r\n// Example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//             get: \"/v1/{name=messages/*}\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       string name = 1; // Mapped to URL path.\r\n//     }\r\n//     message Message {\r\n//       string text = 1; // The resource content.\r\n//     }\r\n//\r\n// This enables an HTTP REST to gRPC mapping as below:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456`  | `GetMessage(name: \"messages/123456\")`\r\n//\r\n// Any fields in the request message which are not bound by the path template\r\n// automatically become HTTP query parameters if there is no HTTP request body.\r\n// For example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//             get:\"/v1/messages/{message_id}\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       message SubMessage {\r\n//         string subfield = 1;\r\n//       }\r\n//       string message_id = 1; // Mapped to URL path.\r\n//       int64 revision = 2;    // Mapped to URL query parameter `revision`.\r\n//       SubMessage sub = 3;    // Mapped to URL query parameter `sub.subfield`.\r\n//     }\r\n//\r\n// This enables a HTTP JSON to RPC mapping as below:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456?revision=2&sub.subfield=foo` |\r\n// `GetMessage(message_id: \"123456\" revision: 2 sub: SubMessage(subfield:\r\n// \"foo\"))`\r\n//\r\n// Note that fields which are mapped to URL query parameters must have a\r\n// primitive type or a repeated primitive type or a non-repeated message type.\r\n// In the case of a repeated type, the parameter can be repeated in the URL\r\n// as `...?param=A&param=B`. In the case of a message type, each field of the\r\n// message is mapped to a separate parameter, such as\r\n// `...?foo.a=A&foo.b=B&foo.c=C`.\r\n//\r\n// For HTTP methods that allow a request body, the `body` field\r\n// specifies the mapping. Consider a REST update method on the\r\n// message resource collection:\r\n//\r\n//     service Messaging {\r\n//       rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           patch: \"/v1/messages/{message_id}\"\r\n//           body: \"message\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message UpdateMessageRequest {\r\n//       string message_id = 1; // mapped to the URL\r\n//       Message message = 2;   // mapped to the body\r\n//     }\r\n//\r\n// The following HTTP JSON to RPC mapping is enabled, where the\r\n// representation of the JSON in the request body is determined by\r\n// protos JSON encoding:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id:\r\n// \"123456\" message { text: \"Hi!\" })`\r\n//\r\n// The special name `*` can be used in the body mapping to define that\r\n// every field not bound by the path template should be mapped to the\r\n// request body.  This enables the following alternative definition of\r\n// the update method:\r\n//\r\n//     service Messaging {\r\n//       rpc UpdateMessage(Message) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           patch: \"/v1/messages/{message_id}\"\r\n//           body: \"*\"\r\n//         };\r\n//       }\r\n//     }\r\n//     message Message {\r\n//       string message_id = 1;\r\n//       string text = 2;\r\n//     }\r\n//\r\n//\r\n// The following HTTP JSON to RPC mapping is enabled:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id:\r\n// \"123456\" text: \"Hi!\")`\r\n//\r\n// Note that when using `*` in the body mapping, it is not possible to\r\n// have HTTP parameters, as all fields not bound by the path end in\r\n// the body. This makes this option more rarely used in practice when\r\n// defining REST APIs. The common usage of `*` is in custom methods\r\n// which don't use the URL at all for transferring data.\r\n//\r\n// It is possible to define multiple HTTP methods for one RPC by using\r\n// the `additional_bindings` option. Example:\r\n//\r\n//     service Messaging {\r\n//       rpc GetMessage(GetMessageRequest) returns (Message) {\r\n//         option (google.api.http) = {\r\n//           get: \"/v1/messages/{message_id}\"\r\n//           additional_bindings {\r\n//             get: \"/v1/users/{user_id}/messages/{message_id}\"\r\n//           }\r\n//         };\r\n//       }\r\n//     }\r\n//     message GetMessageRequest {\r\n//       string message_id = 1;\r\n//       string user_id = 2;\r\n//     }\r\n//\r\n// This enables the following two alternative HTTP JSON to RPC mappings:\r\n//\r\n// HTTP | gRPC\r\n// -----|-----\r\n// `GET /v1/messages/123456` | `GetMessage(message_id: \"123456\")`\r\n// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: \"me\" message_id:\r\n// \"123456\")`\r\n//\r\n// ## Rules for HTTP mapping\r\n//\r\n// 1. Leaf request fields (recursive expansion nested messages in the request\r\n//    message) are classified into three categories:\r\n//    - Fields referred by the path template. They are passed via the URL path.\r\n//    - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP\r\n//      request body.\r\n//    - All other fields are passed via the URL query parameters, and the\r\n//      parameter name is the field path in the request message. A repeated\r\n//      field can be represented as multiple query parameters under the same\r\n//      name.\r\n//  2. If [HttpRule.body][google.api.HttpRule.body] is \"*\", there is no URL query parameter, all fields\r\n//     are passed via URL path and HTTP request body.\r\n//  3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all\r\n//     fields are passed via URL path and URL query parameters.\r\n//\r\n// ### Path template syntax\r\n//\r\n//     Template = \"/\" Segments [ Verb ] ;\r\n//     Segments = Segment { \"/\" Segment } ;\r\n//     Segment  = \"*\" | \"**\" | LITERAL | Variable ;\r\n//     Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\r\n//     FieldPath = IDENT { \".\" IDENT } ;\r\n//     Verb     = \":\" LITERAL ;\r\n//\r\n// The syntax `*` matches a single URL path segment. The syntax `**` matches\r\n// zero or more URL path segments, which must be the last part of the URL path\r\n// except the `Verb`.\r\n//\r\n// The syntax `Variable` matches part of the URL path as specified by its\r\n// template. A variable template must not contain other variables. If a variable\r\n// matches a single path segment, its template may be omitted, e.g. `{var}`\r\n// is equivalent to `{var=*}`.\r\n//\r\n// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL`\r\n// contains any reserved character, such characters should be percent-encoded\r\n// before the matching.\r\n//\r\n// If a variable contains exactly one path segment, such as `\"{var}\"` or\r\n// `\"{var=*}\"`, when such a variable is expanded into a URL path on the client\r\n// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The\r\n// server side does the reverse decoding. Such variables show up in the\r\n// [Discovery\r\n// Document](https://developers.google.com/discovery/v1/reference/apis) as\r\n// `{var}`.\r\n//\r\n// If a variable contains multiple path segments, such as `\"{var=foo/*}\"`\r\n// or `\"{var=**}\"`, when such a variable is expanded into a URL path on the\r\n// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded.\r\n// The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left\r\n// unchanged. Such variables show up in the\r\n// [Discovery\r\n// Document](https://developers.google.com/discovery/v1/reference/apis) as\r\n// `{+var}`.\r\n//\r\n// ## Using gRPC API Service Configuration\r\n//\r\n// gRPC API Service Configuration (service config) is a configuration language\r\n// for configuring a gRPC service to become a user-facing product. The\r\n// service config is simply the YAML representation of the `google.api.Service`\r\n// proto message.\r\n//\r\n// As an alternative to annotating your proto file, you can configure gRPC\r\n// transcoding in your service config YAML files. You do this by specifying a\r\n// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same\r\n// effect as the proto annotation. This can be particularly useful if you\r\n// have a proto that is reused in multiple services. Note that any transcoding\r\n// specified in the service config will override any matching transcoding\r\n// configuration in the proto.\r\n//\r\n// Example:\r\n//\r\n//     http:\r\n//       rules:\r\n//         # Selects a gRPC method and applies HttpRule to it.\r\n//         - selector: example.v1.Messaging.GetMessage\r\n//           get: /v1/messages/{message_id}/{sub.subfield}\r\n//\r\n// ## Special notes\r\n//\r\n// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the\r\n// proto to JSON conversion must follow the [proto3\r\n// specification](https://developers.google.com/protocol-buffers/docs/proto3#json).\r\n//\r\n// While the single segment variable follows the semantics of\r\n// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\r\n// Expansion, the multi segment variable **does not** follow RFC 6570 Section\r\n// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion\r\n// does not expand special characters like `?` and `#`, which would lead\r\n// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding\r\n// for multi segment variables.\r\n//\r\n// The path variables **must not** refer to any repeated or mapped field,\r\n// because client libraries are not capable of handling such variable expansion.\r\n//\r\n// The path variables **must not** capture the leading \"/\" character. The reason\r\n// is that the most common use case \"{var}\" does not capture the leading \"/\"\r\n// character. For consistency, all path variables must share the same behavior.\r\n//\r\n// Repeated message fields must not be mapped to URL query parameters, because\r\n// no client library can support such complicated mapping.\r\n//\r\n// If an API needs to use a JSON array for request or response body, it can map\r\n// the request or response body to a repeated field. However, some gRPC\r\n// Transcoding implementations may not support this feature.\r\nmessage HttpRule {\r\n  // Selects a method to which this rule applies.\r\n  //\r\n  // Refer to [selector][google.api.DocumentationRule.selector] for syntax details.\r\n  string selector = 1;\r\n\r\n  // Determines the URL pattern is matched by this rules. This pattern can be\r\n  // used with any of the {get|put|post|delete|patch} methods. A custom method\r\n  // can be defined using the 'custom' field.\r\n  oneof pattern {\r\n    // Maps to HTTP GET. Used for listing and getting information about\r\n    // resources.\r\n    string get = 2;\r\n\r\n    // Maps to HTTP PUT. Used for replacing a resource.\r\n    string put = 3;\r\n\r\n    // Maps to HTTP POST. Used for creating a resource or performing an action.\r\n    string post = 4;\r\n\r\n    // Maps to HTTP DELETE. Used for deleting a resource.\r\n    string delete = 5;\r\n\r\n    // Maps to HTTP PATCH. Used for updating a resource.\r\n    string patch = 6;\r\n\r\n    // The custom pattern is used for specifying an HTTP method that is not\r\n    // included in the `pattern` field, such as HEAD, or \"*\" to leave the\r\n    // HTTP method unspecified for this rule. The wild-card rule is useful\r\n    // for services that provide content to Web (HTML) clients.\r\n    CustomHttpPattern custom = 8;\r\n  }\r\n\r\n  // The name of the request field whose value is mapped to the HTTP request\r\n  // body, or `*` for mapping all request fields not captured by the path\r\n  // pattern to the HTTP body, or omitted for not having any HTTP request body.\r\n  //\r\n  // NOTE: the referred field must be present at the top-level of the request\r\n  // message type.\r\n  string body = 7;\r\n\r\n  // Optional. The name of the response field whose value is mapped to the HTTP\r\n  // response body. When omitted, the entire response message will be used\r\n  // as the HTTP response body.\r\n  //\r\n  // NOTE: The referred field must be present at the top-level of the response\r\n  // message type.\r\n  string response_body = 12;\r\n\r\n  // Additional HTTP bindings for the selector. Nested bindings must\r\n  // not contain an `additional_bindings` field themselves (that is,\r\n  // the nesting may only be one level deep).\r\n  repeated HttpRule additional_bindings = 11;\r\n}\r\n\r\n// A custom pattern is used for defining custom HTTP verb.\r\nmessage CustomHttpPattern {\r\n  // The name of this custom HTTP verb.\r\n  string kind = 1;\r\n\r\n  // The path matched by this custom verb.\r\n  string path = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-17/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Grpc.JsonTranscoding\" Version=\"8.0.4\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-2/README.md",
    "content": "# gRPC Server Streaming\r\n\r\nThis is a sample of gRPC [Server Streaming](https://grpc.io/docs/guides/concepts/). In this case the server just repeat the same message 10 times every 5 seconds. Make sure you run both the server and the client."
  },
  {
    "path": "projects/grpc/grpc-2/client/Program.cs",
    "content": "using Grpc.Net.Client;\r\nusing Grpc.Core;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    var channel = GrpcChannel.ForAddress(\"https://localhost:5500\");\r\n    var client = new Billboard.Board.BoardClient(channel);\r\n    var result = client.ShowMessage(new Billboard.MessageRequest\r\n    {\r\n        Name = \"Johny\"\r\n    });\r\n\r\n    context.Response.Headers[\"Content-Type\"] = \"text/event-stream\";\r\n\r\n    using var tokenSource = new CancellationTokenSource();\r\n    CancellationToken token = tokenSource.Token;\r\n\r\n    var streamReader = result.ResponseStream;\r\n\r\n    await foreach (var reply in streamReader.ReadAllAsync(token))\r\n    {\r\n        var displayDate = new DateTime(reply.DisplayTime);\r\n        await context.Response.WriteAsync($\"Received \\\"{reply.Message}\\\" on {displayDate.ToLongTimeString()} \\n\");\r\n        await context.Response.Body.FlushAsync();\r\n    }\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/grpc/grpc-2/client/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (stream MessageReply) {}\r\n}\r\n\r\n\r\nmessage MessageRequest {\r\n  string name = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 display_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-2/client/grpc-client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.Net.Client\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Client\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-2/server/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\nusing Billboard;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc();\r\n\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => \"This server contains a gRPC service\");\r\n\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override async Task ShowMessage(MessageRequest request, IServerStreamWriter<MessageReply> responseStream, ServerCallContext context)\r\n    {\r\n        foreach (var x in Enumerable.Range(1, 10))\r\n        {\r\n            var now = DateTime.UtcNow;\r\n\r\n            await responseStream.WriteAsync(new Billboard.MessageReply\r\n            {\r\n                DisplayTime = now.Ticks,\r\n                Message = $\"Hello {request.Name}\"\r\n            });\r\n\r\n            await Task.Delay(5000);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-2/server/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (stream MessageReply) {}\r\n}\r\n\r\n\r\nmessage MessageRequest {\r\n  string name = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 display_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-2/server/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-3/README.md",
    "content": "# gRPC Client Streaming\r\n\r\nThis is a sample of gRPC [Client Streaming](https://grpc.io/docs/guides/concepts/). In this case the client is sending a list of fortune cookies messages and the server convert them to \"Friends' In Bed\" version cookie and send it back to the client at the end of the streaming.\r\n"
  },
  {
    "path": "projects/grpc/grpc-3/client/Program.cs",
    "content": "using Grpc.Net.Client;\r\n\r\nvar fortunes = new List<string>()\r\n        {\r\n            \"The fortune you seek is in another cookie.\",\r\n            \"A closed mouth gathers no feet.\",\r\n            \"A conclusion is simply the place where you got tired of thinking.\",\r\n            \"A cynic is only a frustrated optimist.\",\r\n            \"A foolish man listens to his heart. A wise man listens to cookies.\",\r\n            \"You will die alone and poorly dressed.\",\r\n            \"A fanatic is one who can't change his mind, and won't change the subject.\",\r\n            \"If you look back, you'll soon be going that way.\",\r\n            \"You will live long enough to open many fortune cookies.\",\r\n            \"An alien of some sort will be appearing to you shortly.\"\r\n        };\r\n\r\nvar app = WebApplication.Create();\r\n\r\n//Make sure that the grpc-server is run \r\napp.Run(async context =>\r\n{\r\n    var channel = GrpcChannel.ForAddress(\"https://localhost:5500\"); //check the values at /server project\r\n    var client = new Billboard.Board.BoardClient(channel);\r\n\r\n    context.Response.Headers[\"Content-Type\"] = \"text/event-stream\";\r\n\r\n    using var tokenSource = new CancellationTokenSource();\r\n    CancellationToken token = tokenSource.Token;\r\n\r\n    using var stream = client.ShowMessage(cancellationToken: token);\r\n\r\n    foreach (var f in fortunes)\r\n    {\r\n        if (token.IsCancellationRequested)\r\n            break;\r\n\r\n        await stream.RequestStream.WriteAsync(new Billboard.MessageRequest\r\n        {\r\n            FortuneCookie = f\r\n        });\r\n\r\n        await context.Response.WriteAsync($\"Sending \\\"{f}\\\" \\n\");\r\n        await context.Response.Body.FlushAsync();\r\n\r\n        await Task.Delay(1000); //1 second\r\n    }\r\n\r\n    await stream.RequestStream.CompleteAsync();\r\n\r\n    var response = await stream.ResponseAsync;\r\n\r\n    await context.Response.WriteAsync(\"\\n\\n\");\r\n\r\n    foreach (var r in response.Fortunes)\r\n    {\r\n        await context.Response.WriteAsync($\"Reply \\\"{r.Message}\\\". Original cookied received on {new DateTime(r.ReceivedTime)}. \\n\");\r\n    }\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/grpc/grpc-3/client/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (stream MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\n\r\nmessage MessageRequest {\r\n  string fortune_cookie = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  repeated TranslatedFortune fortunes = 1;\r\n}\r\n\r\nmessage TranslatedFortune\r\n{\r\n  string message = 1;\r\n  int64 received_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-3/client/grpc-client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.Net.Client\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Client\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-3/server/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\nusing Billboard;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc();\r\n\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => \"This server contains a gRPC service\");\r\n\r\napp.Run();\r\n\r\npublic class ReceivedFortune\r\n{\r\n    public string Message { get; set; }\r\n\r\n    public DateTimeOffset Received { get; set; } = DateTimeOffset.UtcNow;\r\n}\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override async Task<MessageReply> ShowMessage(IAsyncStreamReader<MessageRequest> requestStream, ServerCallContext context)\r\n    {\r\n        var fortunes = new List<ReceivedFortune>();\r\n\r\n        using var tokenSource = new CancellationTokenSource();\r\n        CancellationToken token = tokenSource.Token;\r\n\r\n        await foreach (var request in requestStream.ReadAllAsync(token))\r\n        {\r\n            var inBed = request.FortuneCookie[0..^1] + \" in bed.\";\r\n\r\n            fortunes.Add(new ReceivedFortune { Message = inBed });\r\n        }\r\n\r\n        var reply = new MessageReply();\r\n\r\n        foreach (var f in fortunes)\r\n        {\r\n            reply.Fortunes.Add(new TranslatedFortune\r\n            {\r\n                Message = f.Message,\r\n                ReceivedTime = f.Received.Ticks\r\n            });\r\n        }\r\n\r\n        return reply;\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-3/server/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (stream MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\n\r\nmessage MessageRequest {\r\n  string fortune_cookie = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  repeated TranslatedFortune fortunes = 1;\r\n}\r\n\r\nmessage TranslatedFortune\r\n{\r\n  string message = 1;\r\n  int64 received_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-3/server/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-4/README.md",
    "content": "# gRPC Client/Server bidirectional Streaming\r\n\r\nThis is a sample of gRPC [bidirectional Streaming](https://grpc.io/docs/guides/concepts/). In this case the client is sending a ping with a delay timing that increment by one second for every server's pong.\r\n\r\nThis interaction will run virtually forever."
  },
  {
    "path": "projects/grpc/grpc-4/client/Program.cs",
    "content": "using Grpc.Net.Client;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    var channel = GrpcChannel.ForAddress(\"https://localhost:5500\"); //check the values at /server project\r\n    var client = new Billboard.Board.BoardClient(channel);\r\n\r\n    context.Response.Headers[\"Content-Type\"] = \"text/event-stream\";\r\n\r\n    using var tokenSource = new CancellationTokenSource();\r\n    CancellationToken token = tokenSource.Token;\r\n\r\n    using var stream = client.ShowMessage(cancellationToken: token);\r\n\r\n    bool response = true;\r\n    int inc = 1;\r\n    do\r\n    {\r\n        try\r\n        {\r\n            var delay = checked(1000 * inc);\r\n\r\n            await stream.RequestStream.WriteAsync(new Billboard.MessageRequest { Ping = \"Ping\", DelayTime = delay });\r\n            inc++;\r\n            await context.Response.WriteAsync($\"Send ping on {DateTimeOffset.UtcNow} \\n\");\r\n            response = await stream.ResponseStream.MoveNext(token);\r\n            if (response)\r\n            {\r\n                var result = stream.ResponseStream.Current;\r\n                await context.Response.WriteAsync($\"Receive {result.Pong} on {DateTimeOffset.UtcNow} \\n\\n\");\r\n            }\r\n        }\r\n        catch (System.OverflowException)\r\n        {\r\n            inc = 1;\r\n        }\r\n    }\r\n    while (response);\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/grpc/grpc-4/client/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (stream MessageRequest) returns (stream MessageReply) {}\r\n}\r\n\r\n\r\nmessage MessageRequest {\r\n  string ping = 1;\r\n  int32 delay_time = 2;\r\n}\r\n\r\nmessage MessageReply {\r\n  string pong = 1;\r\n}\r\n\r\n"
  },
  {
    "path": "projects/grpc/grpc-4/client/grpc-client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.Net.Client\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Client\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-4/server/Program.cs",
    "content": "using Billboard;\r\nusing Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc();\r\n\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => \"This server contains a gRPC service\");\r\n\r\napp.Run();\r\n\r\npublic class ReceivedFortune\r\n{\r\n    public string Message { get; set; }\r\n\r\n    public DateTimeOffset Received { get; set; } = DateTimeOffset.UtcNow;\r\n}\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override async Task ShowMessage(IAsyncStreamReader<MessageRequest> requestStream, IServerStreamWriter<MessageReply> responseStream, ServerCallContext context)\r\n    {\r\n        using var tokenSource = new CancellationTokenSource();\r\n        CancellationToken token = tokenSource.Token;\r\n\r\n        await foreach (var request in requestStream.ReadAllAsync(token))\r\n        {\r\n            await responseStream.WriteAsync(new MessageReply { Pong = \"pong\" });\r\n            await Task.Delay(request.DelayTime);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-4/server/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (stream MessageRequest) returns (stream MessageReply) {}\r\n}\r\n\r\n\r\nmessage MessageRequest {\r\n  string ping = 1;\r\n  int32 delay_time = 2;\r\n}\r\n\r\nmessage MessageReply {\r\n  string pong = 1;\r\n}\r\n\r\n"
  },
  {
    "path": "projects/grpc/grpc-4/server/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-5/README.md",
    "content": "# Sending enum, string and datetime values\r\n\r\nThis sample shows how to define Protocol Buffers format to support sending enum, string and datetime.\r\n"
  },
  {
    "path": "projects/grpc/grpc-5/client/Program.cs",
    "content": "using Grpc.Net.Client;\r\n\r\nvar app = WebApplication.Create();\r\n\r\n//Make sure that the grpc-server is run \r\napp.Run(async context =>\r\n{\r\n    var channel = GrpcChannel.ForAddress(\"https://localhost:5500\"); //check the values at /server project\r\n    var client = new Billboard.Board.BoardClient(channel);\r\n    var reply = await client.ShowMessageAsync(new Billboard.MessageRequest\r\n    {\r\n        Message = \"Hello World\",\r\n        Sender = \"Dody Gunawinata\",\r\n        Type = Billboard.MessageRequest.Types.MessageType.LongForm\r\n    });\r\n\r\n    var displayDate = new DateTime(reply.ReceivedTime);\r\n    await context.Response.WriteAsync($\"We sent a message to a gRPC server and  received  the following reply '{reply.Message}' on {displayDate} \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/grpc/grpc-5/client/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\nmessage MessageRequest {\r\n  string sender = 1;\r\n  string message = 2;\r\n  enum MessageType\r\n  {\r\n    UNKNOWN = 0;\r\n    SMS = 1;\r\n    TWEET = 2;\r\n    LONG_FORM = 3;\r\n  }\r\n  MessageType type = 3;\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 received_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-5/client/grpc-client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.Net.Client\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Client\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-5/server/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc();\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => \"This server contains a gRPC service\");\r\n\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override Task<Billboard.MessageReply> ShowMessage(Billboard.MessageRequest request, ServerCallContext context)\r\n    {\r\n        var message = $\"Your {request.Type} with the following content `{request.Message}` has arrived well.\";\r\n        var now = DateTime.UtcNow;\r\n        return Task.FromResult(new Billboard.MessageReply\r\n        {\r\n            ReceivedTime = now.Ticks,\r\n            Message = message\r\n        });\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-5/server/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\nmessage MessageRequest {\r\n  string sender = 1;\r\n  string message = 2;\r\n  enum MessageType\r\n  {\r\n    UNKNOWN = 0;\r\n    SMS = 1;\r\n    TWEET = 2;\r\n    LONG_FORM = 3;\r\n  }\r\n  MessageType type = 3;\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 received_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-5/server/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-6/README.md",
    "content": "# Sending nested types and repeated values (list)\r\n\r\nThis sample shows how to define Protocol Buffers format to support sending nested types and repeated values (list).\r\n"
  },
  {
    "path": "projects/grpc/grpc-6/client/Program.cs",
    "content": "using Grpc.Net.Client;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    var channel = GrpcChannel.ForAddress(\"https://localhost:5500\"); //check the values at /server project\r\n    var client = new Billboard.Board.BoardClient(channel);\r\n    var request = new Billboard.MessageRequest();\r\n    request.Capabilities.Add(new Billboard.MessageRequest.Types.SuperPower { Name = \"Flying\", Level = 1 });\r\n    request.Capabilities.Add(new Billboard.MessageRequest.Types.SuperPower { Name = \"Invisibility\", Level = 10 });\r\n    request.Capabilities.Add(new Billboard.MessageRequest.Types.SuperPower { Name = \"Speed\", Level = 5 });\r\n\r\n    var reply = await client.ShowMessageAsync(request);\r\n\r\n    var displayDate = new DateTime(reply.ReceivedTime);\r\n    await context.Response.WriteAsync($\"We sent a message to a gRPC server and  received  the following reply \\n'\\n{reply.Message}' \\non {displayDate} \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/grpc/grpc-6/client/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\nmessage MessageRequest {\r\n  message SuperPower {\r\n    string name = 1;\r\n    int32 level = 2;\r\n  }\r\n\r\n  repeated SuperPower capabilities = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 received_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-6/client/grpc-client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.Net.Client\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Client\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-6/server/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\nusing System.Text;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc();\r\n\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => \"This server contains a gRPC service\");\r\n\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override Task<Billboard.MessageReply> ShowMessage(Billboard.MessageRequest request, ServerCallContext context)\r\n    {\r\n        var message = new StringBuilder();\r\n        foreach (var c in request.Capabilities)\r\n        {\r\n            message.AppendLine($\"{c.Name} level {c.Level}\");\r\n        }\r\n\r\n        var now = DateTime.UtcNow;\r\n        return Task.FromResult(new Billboard.MessageReply\r\n        {\r\n            ReceivedTime = now.Ticks,\r\n            Message = message.ToString()\r\n        });\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-6/server/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\nmessage MessageRequest {\r\n  message SuperPower {\r\n    string name = 1;\r\n    int32 level = 2;\r\n  }\r\n\r\n  repeated SuperPower capabilities = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 received_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-6/server/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>grpc-server</AssemblyName>\r\n    <PackageId>grpc-server</PackageId>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-7/README.md",
    "content": "# Sending map values (dictionary)\r\n\r\nThis sample shows how to define Protocol Buffers format to support sending map values (dictionary).\r\n\r\nThe key must not repeat and can be string or scalar types except floating points and bytes. The value can be anything except another map. More details can be found at this [Protocol Buffers documentation](https://developers.google.com/protocol-buffers/docs/proto3#maps)."
  },
  {
    "path": "projects/grpc/grpc-7/client/Program.cs",
    "content": "using Grpc.Net.Client;\r\n\r\nvar app = WebApplication.Create();\r\n\r\n//Make sure that the grpc-server is run \r\napp.Run(async context =>\r\n{\r\n    var channel = GrpcChannel.ForAddress(\"https://localhost:5500\"); //check the values at /server project\r\n    var client = new Billboard.Board.BoardClient(channel);\r\n    var request = new Billboard.MessageRequest();\r\n    request.Capabilities.Add(\"fly\", new Billboard.MessageRequest.Types.SuperPower { Name = \"Flying\", Level = 1 });\r\n    request.Capabilities.Add(\"inv\", new Billboard.MessageRequest.Types.SuperPower { Name = \"Invisibility\", Level = 10 });\r\n    request.Capabilities.Add(\"spe\", new Billboard.MessageRequest.Types.SuperPower { Name = \"Speed\", Level = 5 });\r\n\r\n    var reply = await client.ShowMessageAsync(request);\r\n\r\n    var displayDate = new DateTime(reply.ReceivedTime);\r\n    await context.Response.WriteAsync($\"We sent a message to a gRPC server and  received  the following reply \\n'\\n{reply.Message}' \\non {displayDate} \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/grpc/grpc-7/client/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\nmessage MessageRequest {\r\n  message SuperPower {\r\n    string name = 1;\r\n    int32 level = 2;\r\n  }\r\n\r\n  map<string, SuperPower> capabilities = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 received_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-7/client/grpc-client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.Net.Client\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Client\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-7/server/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\nusing System.Text;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc();\r\n\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => \"This server contains a gRPC service\");\r\n\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override Task<Billboard.MessageReply> ShowMessage(Billboard.MessageRequest request, ServerCallContext context)\r\n    {\r\n        var message = new StringBuilder();\r\n        foreach (var (k, c) in request.Capabilities)\r\n        {\r\n            message.AppendLine($\"'{k}' = {c.Name} level {c.Level}\");\r\n        }\r\n\r\n        var now = DateTime.UtcNow;\r\n        return Task.FromResult(new Billboard.MessageReply\r\n        {\r\n            ReceivedTime = now.Ticks,\r\n            Message = message.ToString()\r\n        });\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-7/server/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\nmessage MessageRequest {\r\n  message SuperPower {\r\n    string name = 1;\r\n    int32 level = 2;\r\n  }\r\n\r\n  map<string, SuperPower> capabilities = 1;\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 received_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-7/server/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-8/README.md",
    "content": "# Using oneof type to simulate nullable value\r\n\r\n`oneof` type allows you check whether the value of a property is set or not, essentialy emulating nullable type.\r\n"
  },
  {
    "path": "projects/grpc/grpc-8/client/Program.cs",
    "content": "using Grpc.Net.Client;\r\n\r\nvar app = WebApplication.Create();\r\n\r\n//Make sure that the grpc-server is run \r\napp.Run(async context =>\r\n{\r\n    var channel = GrpcChannel.ForAddress(\"https://localhost:5500\"); //check the values at /server project\r\n    var client = new Billboard.Board.BoardClient(channel);\r\n    var request = new Billboard.MessageRequest();\r\n    request.WageValue = 10_000;\r\n\r\n    var reply = await client.ShowMessageAsync(request);\r\n\r\n    var displayDate = new DateTime(reply.ReceivedTime);\r\n    await context.Response.WriteAsync($\"We sent a message to a gRPC server and  received  the following reply \\n'\\n{reply.Message}' \\non {displayDate} \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/grpc/grpc-8/client/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\nmessage MessageRequest {\r\n  oneof wage {\r\n    double wage_value = 1;\r\n  }\r\n\r\n  oneof bonus {\r\n    double bonus_value = 2;\r\n  }\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 received_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-8/client/grpc-client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.Net.Client\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Client\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-8/server/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\nusing System.Text;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc();\r\n\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => \"This server contains a gRPC service\");\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    public override Task<Billboard.MessageReply> ShowMessage(Billboard.MessageRequest request, ServerCallContext context)\r\n    {\r\n        var message = new StringBuilder();\r\n        message.AppendLine($\"WageCase {request.WageCase}\");\r\n        message.AppendLine($\"WageValue {request.WageValue}\");\r\n        message.AppendLine($\"BonusCase {request.BonusCase}\");\r\n        if (request.BonusCase == Billboard.MessageRequest.BonusOneofCase.None)\r\n        {\r\n            message.AppendLine(\"BonusCase None means that BonusValue property is never set by the requester. So you can ignore whatever values you see at BonusValue property.\");\r\n        }\r\n        message.AppendLine($\"BonusValue {request.BonusValue}\");\r\n\r\n        var now = DateTime.UtcNow;\r\n        return Task.FromResult(new Billboard.MessageReply\r\n        {\r\n            ReceivedTime = now.Ticks,\r\n            Message = message.ToString()\r\n        });\r\n    }\r\n}"
  },
  {
    "path": "projects/grpc/grpc-8/server/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\n\r\nservice Board {\r\n  rpc ShowMessage (MessageRequest) returns (MessageReply) {}\r\n}\r\n\r\nmessage MessageRequest {\r\n  oneof wage {\r\n    double wage_value = 1;\r\n  }\r\n\r\n  oneof bonus {\r\n    double bonus_value = 2;\r\n  }\r\n}\r\n\r\nmessage MessageReply {\r\n  string message = 1;\r\n  int64 received_time = 2;\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-8/server/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-9/README.md",
    "content": "# gRPC Server Streaming\r\n\r\nThis gRPC server streams a picture of a kitty to the client. 'Nuff said."
  },
  {
    "path": "projects/grpc/grpc-9/client/Program.cs",
    "content": "using Grpc.Net.Client;\r\nusing Grpc.Core;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.UseStaticFiles();\r\n\r\n//Make sure that the grpc-server is run \r\napp.Run(async context =>\r\n{\r\n    var channel = GrpcChannel.ForAddress(\"https://localhost:5500\"); //check the values at /server project\r\n    var client = new Billboard.Board.BoardClient(channel);\r\n    var result = client.ShowMessage(new Google.Protobuf.WellKnownTypes.Empty());\r\n\r\n    context.Response.Headers[\"Content-Type\"] = \"text/html\";\r\n\r\n    await context.Response.WriteAsync(\"<html><body><h1>Kitty Streaming</h1>\");\r\n\r\n    using var tokenSource = new CancellationTokenSource();\r\n    CancellationToken token = tokenSource.Token;\r\n\r\n    var streamReader = result.ResponseStream;\r\n\r\n    //get metdata\r\n    string path = null;\r\n    await streamReader.MoveNext(token);\r\n    var initial = streamReader.Current;\r\n    if (initial.ImageCase == Billboard.MessageReply.ImageOneofCase.MetaData)\r\n    {\r\n        var env = context.RequestServices.GetService<IWebHostEnvironment>();\r\n        path = Path.Combine(env.WebRootPath, initial.MetaData.FileName);\r\n    }\r\n\r\n    if (path == null)\r\n        throw new ApplicationException(\"Metadata is missing from the server\");\r\n\r\n    using FileStream file = new FileStream(path, FileMode.Create);\r\n\r\n    int position = 0;\r\n    await foreach (var data in streamReader.ReadAllAsync(token))\r\n    {\r\n        var chunk = data.Chunk;\r\n        await file.WriteAsync(chunk.Data.ToByteArray(), 0, chunk.Length);\r\n        position += chunk.Length;\r\n        await context.Response.WriteAsync(position + \" \");\r\n    }\r\n\r\n    file.Close();\r\n\r\n    await context.Response.WriteAsync($\"<img src=\\\"{initial.MetaData.FileName}\\\"/>\");\r\n\r\n    await context.Response.WriteAsync(\"</body></html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/grpc/grpc-9/client/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\nimport \"google/protobuf/Empty.proto\";\r\n\r\nservice Board {\r\n  rpc ShowMessage (google.protobuf.Empty) returns (stream MessageReply) {}\r\n}\r\n\r\nmessage ImageMetaData {\r\n  string mime_type = 1;\r\n  string file_name = 2;\r\n}\r\n\r\nmessage ImageChunk {\r\n    bytes data = 1;\r\n    int32 length = 2;\r\n}\r\n\r\nmessage MessageReply {\r\n  oneof image {\r\n    ImageMetaData meta_data = 1;\r\n    ImageChunk chunk = 2;\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-9/client/grpc-client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.Net.Client\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Client\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/grpc/grpc-9/server/Program.cs",
    "content": "using Grpc.Core;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\nusing Billboard;\r\nusing Google.Protobuf;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddGrpc();\r\n\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n{\r\n    k.ConfigureEndpointDefaults(options => options.Protocols = HttpProtocols.Http2);\r\n    k.ListenLocalhost(5500, o => o.UseHttps());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGrpcService<BillboardService>();\r\napp.MapGet(\"/\", () => \"This server contains a gRPC service\");\r\napp.Run();\r\n\r\npublic class BillboardService : Billboard.Board.BoardBase\r\n{\r\n    IHostEnvironment _env;\r\n\r\n    public BillboardService(IHostEnvironment env)\r\n    {\r\n        _env = env;\r\n    }\r\n\r\n    public override async Task ShowMessage(Google.Protobuf.WellKnownTypes.Empty _, IServerStreamWriter<MessageReply> responseStream, ServerCallContext context)\r\n    {\r\n        using var tokenSource = new CancellationTokenSource();\r\n        CancellationToken token = tokenSource.Token;\r\n\r\n        var meta = new MessageReply();\r\n        var metaData = new ImageMetaData();\r\n        metaData.FileName = \"kitty.jpg\";\r\n        metaData.MimeType = \"image/jpeg\";\r\n        meta.MetaData = metaData;\r\n\r\n        await responseStream.WriteAsync(meta);\r\n\r\n        var kitty = Path.Combine(_env.ContentRootPath, \"kitty.jpg\");\r\n\r\n        using var reader = new FileStream(kitty, FileMode.Open);\r\n\r\n        int chunkSize = 100;\r\n        int bytesRead;\r\n        byte[] buffer = new byte[chunkSize];\r\n        int position = 0;\r\n        long length = reader.Length;\r\n        while ((bytesRead = await reader.ReadAsync(buffer, 0, buffer.Length)) > 0)\r\n        {\r\n            var reply = new MessageReply();\r\n            var chunk = new ImageChunk();\r\n            chunk.Length = bytesRead;\r\n            chunk.Data = ByteString.CopyFrom(buffer);\r\n            reply.Chunk = chunk;\r\n\r\n            await responseStream.WriteAsync(reply);\r\n\r\n            position += bytesRead;\r\n            Console.WriteLine(position);\r\n        }\r\n        reader.Close();\r\n        Console.WriteLine(\"Done\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-9/server/billboard.proto",
    "content": "syntax = \"proto3\";\r\n\r\npackage Billboard;\r\nimport \"google/protobuf/Empty.proto\";\r\n\r\nservice Board {\r\n  rpc ShowMessage (google.protobuf.Empty) returns (stream MessageReply) {}\r\n}\r\n\r\nmessage ImageMetaData {\r\n  string mime_type = 1;\r\n  string file_name = 2;\r\n}\r\n\r\nmessage ImageChunk {\r\n    bytes data = 1;\r\n    int32 length = 2;\r\n}\r\n\r\nmessage MessageReply {\r\n  oneof image {\r\n    ImageMetaData meta_data = 1;\r\n    ImageChunk chunk = 2;\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/grpc/grpc-9/server/grpc-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Grpc.Tools\" Version=\"2.62.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Google.Protobuf\" Version=\"3.26.1\" />\r\n    <PackageReference Include=\"Grpc.AspNetCore.Server\" Version=\"2.62.0\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Protobuf Include=\"billboard.proto\" GrpcServices=\"Server\" />\r\n    <Watch Include=\"*.proto\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/health-check/README.md",
    "content": "# Health Check (6)\r\n\r\n  * [Health Check - Check URL](health-check-1)\r\n\r\n    Show the simplest way to use health check functionality using `app.UseHealthChecks`.\r\n\r\n  * [Health Check - Check URL - 2](health-check-2)\r\n\r\n    Customize the message returned by `app.UseHealthChecks`.\r\n\r\n  * [Health Check - Check URL - 3](health-check-3)\r\n\r\n    Start implementing `IHealthCheck` to provide status information for the health check service. In this example, it will always return failure because we just throw an exception in the implementation. You will see how the health check handles an unhandled exception.\r\n\r\n  * [Health Check - Check URL - 4](health-check-4)\r\n\r\n    Implement a `IHealthCheck` that check the status of a url. This is the first version of the check so it is primitive but it is also easier to understand. We will go to a more sophisticated multi check in the next examples.\r\n\r\n  * [Health Check - Check URL - 5](health-check-5)\r\n\r\n    Similar to the previous example except that now there are two checks, one fails and one successful. \r\n\r\n  * [Health Check - Check URL - 6](health-check-6)\r\n\r\n    Similar to the previous example except that one of the check reports \"Degraded\" status by using `context.Registration.FailureStatus = HealthStatus.Degraded;`.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/health-check/build.bat",
    "content": "dotnet build health-check-1\r\ndotnet build health-check-2\r\ndotnet build health-check-3\r\ndotnet build health-check-4\r\ndotnet build health-check-5\r\ndotnet build health-check-6"
  },
  {
    "path": "projects/health-check/build.sh",
    "content": "#!/bin/bash\ndotnet build health-check-1\ndotnet build health-check-2\ndotnet build health-check-3\ndotnet build health-check-4\ndotnet build health-check-5\ndotnet build health-check-6\n"
  },
  {
    "path": "projects/health-check/health-check-1/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddHealthChecks();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapHealthChecks(\"/WhatsUp\");\r\napp.MapDefaultControllerRoute();\r\n \r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <h1>Health Check</h1>\r\n                The health check service checks on this url <a href=\"\"/WhatsUp\"\">/WhatsUp</a>. \r\n                </body></html> \",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/health-check/health-check-1/health-check.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/health-check/health-check-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Diagnostics.HealthChecks;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddHealthChecks();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapHealthChecks(\"/IsUp\", new HealthCheckOptions\r\n{\r\n    ResponseWriter = async (context, health) =>\r\n    {\r\n        await context.Response.WriteAsync(\"Mucho Bien\");\r\n    }\r\n});\r\n\r\napp.MapDefaultControllerRoute();\r\n\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <h1>Health Check - custom message</h1>\r\n                The health check service checks on this url <a href=\"\"/isup\"\">/isup</a>. It will return  `Mucho Bien` thanks to the customized health message.\r\n                </body></html> \",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/health-check/health-check-2/health-check-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/health-check/health-check-3/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.Extensions.Diagnostics.HealthChecks;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddHealthChecks().AddCheck<AlwaysBadHealthCheck>(\"Bad\");\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapHealthChecks(\"/IsUp\");\r\napp.MapDefaultControllerRoute();\r\n\r\napp.Run();\r\n\r\npublic class AlwaysBadHealthCheck : IHealthCheck\r\n{\r\n    public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default(CancellationToken))\r\n    {\r\n        throw new NotImplementedException();\r\n    }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <h1>Health Check - Failed check</h1>\r\n                This <a href=\"\"/IsUp\"\">/IsUp</a> always fails.\r\n                </body></html> \",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}"
  },
  {
    "path": "projects/health-check/health-check-3/health-check-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/health-check/health-check-4/Program.cs",
    "content": "using System.Net;\r\nusing Microsoft.AspNetCore.Diagnostics.HealthChecks;\r\nusing Microsoft.AspNetCore.Hosting.Server;\r\nusing Microsoft.AspNetCore.Hosting.Server.Features;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.Extensions.Diagnostics.HealthChecks;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddHttpContextAccessor();\r\nbuilder.Services.AddHttpClient<HttpStatusCodeHealthCheck>();\r\nbuilder.Services.AddHealthChecks().AddCheck<HttpStatusCodeHealthCheck>(\"HttpStatusCheck\");\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapHealthChecks(\"/IsUp\", new HealthCheckOptions\r\n{\r\n    ResponseWriter = async (context, health) =>\r\n    {\r\n        if (health.Status == HealthStatus.Healthy)\r\n            await context.Response.WriteAsync(\"Everything is good\");\r\n        else\r\n        {\r\n            foreach (var h in health.Entries)\r\n            {\r\n                await context.Response.WriteAsync($\"{h.Key} {h.Value.Description}\");\r\n            }\r\n        }\r\n    }\r\n});\r\n\r\n\r\napp.MapDefaultControllerRoute();\r\n\r\napp.Run();\r\n\r\npublic class HttpStatusCodeHealthCheck : IHealthCheck\r\n{\r\n    readonly HttpClient _client;\r\n\r\n    readonly IServer _server;\r\n\r\n    public HttpStatusCodeHealthCheck(HttpClient client, IServer server)\r\n    {\r\n        _client = client;\r\n        _server = server;\r\n    }\r\n\r\n    public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default(CancellationToken))\r\n    {\r\n        try\r\n        {\r\n            var serverAddress = _server.Features.Get<IServerAddressesFeature>();\r\n            var localServer = serverAddress.Addresses.First();\r\n\r\n            var result = await _client.GetAsync(localServer + \"/home/fakestatus/?statusCode=500\");\r\n\r\n            if (result.StatusCode == HttpStatusCode.OK)\r\n                return HealthCheckResult.Healthy(\"Everything is OK\");\r\n            else\r\n                return HealthCheckResult.Degraded($\"Fails: Http Status returns {result.StatusCode}\");\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            return HealthCheckResult.Unhealthy($\"Exception {ex.Message} : {ex.StackTrace}\");\r\n        }\r\n    }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <h1>Health Check - Failed/Success check</h1>\r\n                This <a href=\"\"/IsUp\"\">/IsUp</a> always fails at the moment. If you want to see it works, change the following code\r\n\r\n                <pre>\r\n                    var result = await _client.GetAsync(localServer + \"\"/home/fakestatus/?statusCode=500\"\");\r\n                </pre> \r\n\r\n                to\r\n\r\n                <pre>\r\n                    var result = await _client.GetAsync(localServer + \"\"/home/fakestatus/?statusCode=200\"\");\r\n                </pre> \r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    public ActionResult FakeStatus(int statusCode)\r\n    {\r\n        return StatusCode(statusCode);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/health-check/health-check-4/health-check-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/health-check/health-check-5/Program.cs",
    "content": "using System.Net;\r\nusing Microsoft.AspNetCore.Diagnostics.HealthChecks;\r\nusing Microsoft.AspNetCore.Hosting.Server;\r\nusing Microsoft.AspNetCore.Hosting.Server.Features;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.Extensions.Diagnostics.HealthChecks;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddHttpContextAccessor();\r\nbuilder.Services.AddHttpClient<OKHttpStatusCodeHealthCheck>();\r\nbuilder.Services.AddHttpClient<ErrorHttpStatusCodeHealthCheck>();\r\nbuilder.Services.AddSingleton<StatusOK>().AddSingleton<StatusInternalServerError>();\r\nbuilder.Services.AddHealthChecks()\r\n    .AddCheck<OKHttpStatusCodeHealthCheck>(\"OK Status Check\")\r\n    .AddCheck<ErrorHttpStatusCodeHealthCheck>(\"Error Status Check\");\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapHealthChecks(\"/IsUp\", new HealthCheckOptions\r\n{\r\n    ResponseWriter = async (context, health) =>\r\n    {\r\n        context.Response.Headers.Append(\"Content-Type\", \"text/plain\");\r\n\r\n        if (health.Status == HealthStatus.Healthy)\r\n            await context.Response.WriteAsync(\"Everything is good\");\r\n        else\r\n        {\r\n            foreach (var h in health.Entries)\r\n            {\r\n                await context.Response.WriteAsync($\"{h.Key} :: {h.Value.Description} \\n\");\r\n            }\r\n\r\n            await context.Response.WriteAsync($\"\\n\\n Overall Status: {health.Status}\");\r\n        }\r\n\r\n    }\r\n});\r\n\r\napp.MapDefaultControllerRoute();\r\n\r\napp.Run();\r\n\r\npublic class StatusOK\r\n{\r\n    public short Status { get; set; } = StatusCodes.Status200OK;\r\n}\r\n\r\npublic class StatusInternalServerError\r\n{\r\n    public short Status { get; set; } = StatusCodes.Status500InternalServerError;\r\n}\r\n\r\npublic abstract class HttpStatusCodeHealthCheck : IHealthCheck\r\n{\r\n    readonly HttpClient _client;\r\n\r\n    readonly IServer _server;\r\n\r\n    readonly short _statusCode;\r\n\r\n    public HttpStatusCodeHealthCheck(HttpClient client, IServer server, short statusCode)\r\n    {\r\n        _client = client;\r\n        _server = server;\r\n        _statusCode = statusCode;\r\n    }\r\n\r\n    public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default(CancellationToken))\r\n    {\r\n        try\r\n        {\r\n            var serverAddress = _server.Features.Get<IServerAddressesFeature>();\r\n            var localServer = serverAddress.Addresses.First();\r\n\r\n            var result = await _client.GetAsync(localServer + $\"/home/fakestatus/?statusCode={_statusCode}\");\r\n\r\n            if (result.StatusCode == HttpStatusCode.OK)\r\n                return HealthCheckResult.Healthy(\"Everything is OK\");\r\n            else\r\n                return HealthCheckResult.Degraded($\"Fails: Http Status returns {result.StatusCode}\");\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            return HealthCheckResult.Unhealthy($\"Exception {ex.Message} : {ex.StackTrace}\");\r\n        }\r\n    }\r\n}\r\n\r\npublic class OKHttpStatusCodeHealthCheck : HttpStatusCodeHealthCheck\r\n{\r\n    public OKHttpStatusCodeHealthCheck(HttpClient client, IServer server, StatusOK status) : base(client, server, status.Status)\r\n    {\r\n    }\r\n}\r\n\r\npublic class ErrorHttpStatusCodeHealthCheck : HttpStatusCodeHealthCheck\r\n{\r\n    public ErrorHttpStatusCodeHealthCheck(HttpClient client, IServer server, StatusInternalServerError status) : base(client, server, status.Status)\r\n    {\r\n    }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <h1>Health Check - Failed/Success check</h1>\r\n                <a href=\"\"/isup\"\">Check Status</a>\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    public ActionResult FakeStatus(int statusCode)\r\n    {\r\n        return StatusCode(statusCode);\r\n    }\r\n}"
  },
  {
    "path": "projects/health-check/health-check-5/health-check-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/health-check/health-check-6/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Diagnostics.HealthChecks;\r\nusing Microsoft.Extensions.Diagnostics.HealthChecks;\r\nusing System.Net;\r\nusing Microsoft.AspNetCore.Hosting.Server.Features;\r\nusing Microsoft.AspNetCore.Hosting.Server;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddHttpContextAccessor();\r\nbuilder.Services.AddHttpClient<OKHttpStatusCodeHealthCheck>();\r\nbuilder.Services.AddHttpClient<Error2HttpStatusCodeHealthCheck>();\r\nbuilder.Services.AddSingleton<StatusOK>().AddSingleton<StatusBadRequest>();\r\nbuilder.Services.AddHealthChecks()\r\n    .AddCheck<OKHttpStatusCodeHealthCheck>(\"OK Status Check\")\r\n    .AddCheck<Error2HttpStatusCodeHealthCheck>(\"Error Status 2 Check\");\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapHealthChecks(\"/IsUp\", new HealthCheckOptions\r\n{\r\n    ResponseWriter = async (context, health) =>\r\n    {\r\n        context.Response.Headers.Append(\"Content-Type\", \"text/plain\");\r\n\r\n        if (health.Status == HealthStatus.Healthy)\r\n            await context.Response.WriteAsync(\"Everything is good\");\r\n        else\r\n        {\r\n            foreach (var h in health.Entries)\r\n            {\r\n                await context.Response.WriteAsync($\"Key = {h.Key} :: Description = {h.Value.Description} :: Status = {h.Value.Status} \\n\");\r\n            }\r\n\r\n            await context.Response.WriteAsync($\"\\n\\n Overall Status: {health.Status}\");\r\n        }\r\n    }\r\n});\r\n\r\napp.MapDefaultControllerRoute();\r\n\r\napp.Run();\r\n\r\npublic class StatusOK\r\n{\r\n    public short Status { get; set; } = StatusCodes.Status200OK;\r\n}\r\n\r\npublic class StatusBadRequest\r\n{\r\n    public short Status { get; set; } = StatusCodes.Status400BadRequest;\r\n}\r\n\r\npublic abstract class HttpStatusCodeHealthCheck : IHealthCheck\r\n{\r\n    readonly HttpClient _client;\r\n\r\n    readonly IServer _server;\r\n\r\n    readonly short _statusCode;\r\n\r\n    public HttpStatusCodeHealthCheck(HttpClient client, IServer server, short statusCode)\r\n    {\r\n        _client = client;\r\n        _server = server;\r\n        _statusCode = statusCode;\r\n    }\r\n\r\n    public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default(CancellationToken))\r\n    {\r\n        try\r\n        {\r\n            var serverAddress = _server.Features.Get<IServerAddressesFeature>();\r\n            var localServer = serverAddress.Addresses.First();\r\n\r\n            var result = await _client.GetAsync(localServer + $\"/home/fakestatus/?statusCode={_statusCode}\");\r\n\r\n            if (result.StatusCode == HttpStatusCode.OK)\r\n                return HealthCheckResult.Healthy(\"Everything is OK\");\r\n            else if (result.StatusCode == HttpStatusCode.BadRequest)\r\n            {\r\n                context.Registration.FailureStatus = HealthStatus.Degraded;\r\n                return HealthCheckResult.Degraded($\"Degraded: Http Status returns {result.StatusCode}\");\r\n            }\r\n            else\r\n            {\r\n                return HealthCheckResult.Unhealthy($\"Fails: Http Status returns {result.StatusCode}\");\r\n            }\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            return HealthCheckResult.Unhealthy($\"Exception {ex.Message} : {ex.StackTrace}\");\r\n        }\r\n    }\r\n}\r\n\r\npublic class OKHttpStatusCodeHealthCheck : HttpStatusCodeHealthCheck\r\n{\r\n    public OKHttpStatusCodeHealthCheck(HttpClient client, IServer server, StatusOK status) : base(client, server, status.Status)\r\n    {\r\n    }\r\n}\r\n\r\npublic class Error2HttpStatusCodeHealthCheck : HttpStatusCodeHealthCheck\r\n{\r\n    public Error2HttpStatusCodeHealthCheck(HttpClient client, IServer server, StatusBadRequest status) : base(client, server, status.Status)\r\n    {\r\n    }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <h1>Health Check - Failed/Success check</h1>\r\n                <a href=\"\"/isup\"\">Check Status</a>\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    public ActionResult FakeStatus(int statusCode)\r\n    {\r\n        return StatusCode(statusCode);\r\n    }\r\n}"
  },
  {
    "path": "projects/health-check/health-check-6/health-check-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/Readme.md",
    "content": "# HTMX (40)\r\n\r\nThis example shows various examples on how to integrate [HTMX](https://htmx.org/) with ASP.NET Core Minimal API. We will be using [HTMX Nuget Package](https://www.nuget.org/packages/Htmx). We are using [HTMX 2](https://htmx.org/) in all samples.\r\n\r\n## AJAX\r\n\r\n* [all-verbs](all-verbs)\r\n\r\n  This example shows all HTTP Verbs supported by HTMX.\r\n\r\n* [query-string](query-string)\r\n\r\n  This example shows how to access query string in all the HTTP Verbs supported by HTMX.\r\n\r\n* [hx-include](hx-include)\r\n\r\n  This example shows how to pass parameters to all supported HTTP Verbs by targeting a single `input` element using `hx-include`. \r\n\r\n* [hx-vals](hx-vals)\r\n\r\n  This example shows how to pass parameters (in JSON format) to all supported HTTP Verbs using `hx-vals` . \r\n\r\n* [hx-headers](hx-headers)\r\n\r\n  This example shows how to pass values via HTTP headers using `hx-headers`. \r\n\r\n* [hx-confirm](hx-confirm)\r\n\r\n  This example shows how to use `hx-confirm` to ask for user confirmation before making a request\r\n\r\n* [hx-prompt](hx-prompt)\r\n\r\n  This example shows how to use `hx-prompt` to ask user for a single input before making a request\r\n\r\n* [hx-push-url](push-url)\r\n\r\n  This example shows how to use `hx-push-url` to push url into browser location history.\r\n\r\n* [hx-select](select)\r\n\r\n  This example shows how to use `hx-select` to pick up element from the server response. \r\n\r\n* [hx-select 2](select-2)\r\n  \r\n  This example shows how to use `hx-select` with multiple selectors to pick up multiple elements from server response.\r\n\r\n* [hx-select-oob](select-oob)\r\n\r\n  This example shows how to use `hx-select-oob` to pick up a specific element from server response and swap it with element of the same selection criteria.\r\n\r\n* [hx-indicator](hx-indicator)\r\n\r\n  This example demonstrates on how to show spinner indicator while waiting for AJAX requests to complete. \r\n\r\n## Core Attributes\r\n\r\n* [hx-trigger-load](trigger-load)\r\n\r\n  This example shows how to use HTMX `hx-trigger=\"load\"` functionality. It will call a given url when the element is loaded.\r\n\r\n* [hx-trigger-load-2](trigger-load-2)\r\n\r\n  This example shows how to use HTMX `hx-trigger=\"load\"` with `delay:1s` event modifier and `hx-swap=\"outerHTML\"` functionalities to create self updating element. \r\n\r\n* [hx-trigger-once](trigger-once)\r\n\r\n  This example shows how to use HTMX event modifier `once` that only enable trigger to be activated one time. \r\n\r\n* [hx-trigger-every](trigger-every)\r\n\r\n  This example shows how to use HTMX `hx-trigger=\"every\"` that activate request every specified time (polling). \r\n\r\n* [hx-swap](swap)\r\n  \r\n  This example shows how to control where the response from the server will be swapped related to the target using `hx-swap`.\r\n\r\n* [hx-swap-oob](swap-2)\r\n  \r\n  This example shows how to use `hx-swap-oob` to enable out of band swap. It is used from the server response.\r\n\r\n* [hx-target](target)\r\n  \r\n  This example shows how to specify the target element where the response from the server will be swapped using `hx-target`.\r\n\r\n* [hx-boost](boost)\r\n\r\n  This example shows how to use `hx-boost` to transform HTML links and form to use AJAX request and target `body` tag.   \r\n\r\n* [hx-on](hx-on)\r\n\r\n  This example shows how to use `hx-on` to respond to HTML events.\r\n\r\n* [hx-on-2](hx-on-2)\r\n\r\n  This example shows how to use `hx-on` to respond to HTMX events.\r\n\r\n* [hx-replace-url](hx-replace-url)\r\n\r\n  This example shows how to use `hx-replace-url` to replace the current browser location history.\r\n\r\n* [hx-replace-url-2](hx-replace-url)\r\n\r\n  This example shows how to use `hx-replace-url` with a custom url to replace the current browser location history.\r\n\r\n* [hx-sync-queue](hx-sync-queue)\r\n\r\n  This example shows how to use `hx-sync` to synchronize AJAX requests from a single element with option `queue first`, `queue last`, and `queue all`. \r\n\r\n* [hx-preserve](hx-preserve)\r\n \r\n  This example shows how to use `hx-preserve` to keep an element unchanged during HTML swap.\r\n\r\n## Form\r\n\r\n* [form](form)\r\n \r\n  This example shows a very simple example on how to handle form submission using HTMX's `hx-post`.\r\n\r\n* [form-2](form-2)\r\n \r\n  This example shows a more complex example on how to handle form submission using HTMX's `hx-post`.\r\n\r\n## Modals\r\n\r\n* [modal-bootstrap](modal-bootstrap)\r\n  \r\n  This example shows how to show a modal dialog using HTMX and Bootstrap 5. \r\n\r\n## Events\r\n\r\n* [htmx-config-request](htmx-config-request)\r\n\r\n  This examples shows how to listen to `htmx:configRequest` event to modify parameters to be sent to the server. \r\n\r\n* [htmx-response-error](htmx-response-error)\r\n\r\n  This examples shows how to listen to `htmx:responseError` event to obtain AJAX response error information.\r\n\r\n* [htmx-after-on-load](htmx-after-on-load)\r\n\r\n  This example shows how to listen to `htmx:afterOnLoad` event, which is trigerred after the AJAX response has finished. \r\n\r\n## Response Headers\r\n\r\n* [HX-Replace-Url](header-hx-replace-url)\r\n\r\n  This example demonstrates how to use `HX-Replace-Url` response header to replace the current url at the browser history.\r\n\r\n* [HX-Trigger](header-hx-trigger)\r\n\r\n  This example demonstrates how to use `HX-Trigger` response header to trigger a custom event at the browser.\r\n\r\n* [HX-Trigger-2](header-hx-trigger-2)\r\n\r\n  This example demonstrates how to use `HX-Trigger` response header to trigger a custom event with JSON payload at the browser.\r\n\r\n* [HX-Trigger-3](header-hx-trigger-3)\r\n\r\n  This example demonstrates how to use `HX-Trigger` response header to trigger multiple custom events at the browser.\r\n  \r\n* [HX-Trigger-4](header-hx-trigger-4)\r\n\r\n  This example demonstrates how to use `HX-Trigger` response header to trigger multiple custom events with JSON payloads at the browser.\r\n\r\n* [HX-Retarget](header-hx-retarget)\r\n\r\n  This example demonstrates how to use `HX-Retarget` response header to override request's target and retarget to an element at the client using CSS selector.\r\n\r\n* [HX-Refresh](header-hx-refresh)\r\n\r\n  This example demonstrates how to use `HX-Refresh` response header to instruct the web browser to refresh the page. \r\n\r\n* [HX-Reselect](header-hx-reselect)\r\n\r\n  This example demonstrates how to use `HX-Reselect` response header to select which part of the response to swap using CSS selector and override `hx-select` in on the triggering element. "
  },
  {
    "path": "projects/htmx/all-verbs/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/all-verbs/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>All verbs supported in HTMX</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/all-verbs/README.md",
    "content": "# All HTTP Verbs supported by HTMX\r\n\r\nThis example shows all the HTTP Verbs supported by HTMX ([doc](https://htmx.org/docs/#ajax))\r\n\r\n```html\r\n<ul>\r\n    <li hx-get=\"/htmx\">GET</li>\r\n    <li hx-post=\"/htmx\">POST</li>\r\n    <li hx-put=\"/htmx\">PUT</li>\r\n    <li hx-patch=\"/htmx\">PATCH</li>\r\n    <li hx-delete=\"/htmx\">DELETE</li>\r\n</ul>\r\n```"
  },
  {
    "path": "projects/htmx/all-verbs/all-verbs.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/all-verbs/all-verbs.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"all-verbs\", \"all-verbs.csproj\", \"{5769ACAC-842E-461E-BD5C-0F99F8C44B39}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {5F61E629-C920-4C16-9369-DEBD03434FB4}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/boost/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/boost/Program.cs",
    "content": "using Htmx;\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <title>hx-boost</title>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n            </head>\r\n            <body style=\"background-color:purple;\">\r\n                <div class=\"container\">\r\n                    <h1>hx-boost</h1>\r\n                    <ul hx-boost=\"true\">\r\n                        <li><a href=\"/htmx/one\">One</a></li>\r\n                        <li><a href=\"/htmx/two\">two</a></li>\r\n                    </ul>\r\n                </div>\r\n                <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/htmx/{key}\", (HttpRequest request, string key) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return key switch \r\n    {\r\n        \"one\" => Results.Content(\r\n            $\"\"\"\r\n                <div class=\"container\" style=\"background-color:green;color:white;\">\r\n                    <h1>ONE</h1>\r\n\r\n                    <ul hx-boost=\"true\">\r\n                        <li><a href=\"/htmx/one\">One</a></li>\r\n                        <li><a href=\"/htmx/two\">two</a></li>\r\n                    </ul>\r\n                    <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n                </div>  \r\n            \"\"\"),\r\n            \"two\" => Results.Content(\r\n            $\"\"\"\r\n                <div class=\"container\" style=\"background-color:yellow;color:red;\">\r\n                    <h1>TWO</h1>\r\n\r\n                    <ul hx-boost=\"true\">\r\n                        <li><a href=\"/htmx/one\">One</a></li>\r\n                        <li><a href=\"/htmx/two\">two</a></li>\r\n                    </ul>\r\n\r\n                    <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n                </div>  \r\n            \"\"\"),\r\n        _ => Results.Content(\"\")\r\n    };\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/boost/README.md",
    "content": "# HTMX hx-boost\r\n\r\nThis example shows how to use `hx-boost` attribute [doc](https://htmx.org/attributes/hx-boost/). `hx-boost` make links and form tags to issue AJAX request and target the response to `body` tag.\r\n\r\n```html\r\n    <ul hx-boost=\"true\">\r\n        <li><a href=\"/htmx/one\">One</a></li>\r\n        <li><a href=\"/htmx/two\">two</a></li>\r\n    </ul>\r\n```\r\n\r\n"
  },
  {
    "path": "projects/htmx/boost/boost.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/boost/boost.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"boost\", \"boost.csproj\", \"{B5ADE241-5FAC-4F89-953A-A61B2F6A83F1}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{B5ADE241-5FAC-4F89-953A-A61B2F6A83F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B5ADE241-5FAC-4F89-953A-A61B2F6A83F1}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B5ADE241-5FAC-4F89-953A-A61B2F6A83F1}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B5ADE241-5FAC-4F89-953A-A61B2F6A83F1}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {BDCDB4ED-31A2-432B-81D3-51E2E2EDC2F8}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/form/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/form/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nWebApplication.Create();\r\n\r\nvar builder=  WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, IAntiforgery antiforgery) =>\r\n{\r\n    var token = antiforgery.GetAndStoreTokens(context);\r\n\r\n    var html = $\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n            </head>\r\n            <body>\r\n                <div class=\"container\">\r\n                    <div class=\"col-md-6\">\r\n                        <h1>Simple Form</h1>\r\n                        <form hx-post=\"/simple\" hx-swap=\"outerHTML\">\r\n                            <input type=\"hidden\" name=\"{ token.FormFieldName }\" value=\"{token.RequestToken}\" />\r\n                            <div class=\"mb-3\">\r\n                                <label for=\"Name\" class=\"form-label\">Name</label>\r\n                                <input type=\"text\" name=\"Name\" class=\"form-control\" />\r\n                            </div>\r\n                            <div class=\"mb-3\">\r\n                                <button type=\"submit\" class=\"btn btn-primary\">Post</button>\r\n                            </div>\r\n                        </form>\r\n                    </div>\r\n                </div>\r\n                <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapPost(\"/simple\", (HttpRequest request, [FromForm] Input i) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"\"\"\r\n        <div class=\"alert alert-success\">\r\n            Your data `{i.Name}` has been processed.\r\n        </div>\r\n    \"\"\");\r\n});\r\n\r\napp.Run();\r\n\r\nclass Input \r\n{\r\n    public string Name { get; set; } = string.Empty;\r\n }\r\n\r\n"
  },
  {
    "path": "projects/htmx/form/README.md",
    "content": "# Processing form with HTMX hx-post\r\n\r\nThis example shows the simplest way to handle form in HTMX using `hx-post`.\r\n\r\n```html\r\n    <form hx-post=\"/simple\" hx-swap=\"outerHTML\">\r\n        <input type=\"hidden\" name=\"{ token.FormFieldName }\" value=\"{token.RequestToken}\" />\r\n        <div class=\"mb-3\">\r\n            <label for=\"Name\" class=\"form-label\">Name</label>\r\n            <input type=\"text\" name=\"Name\" class=\"form-control\" />\r\n        </div>\r\n        <div class=\"mb-3\">\r\n            <button type=\"submit\" class=\"btn btn-primary\">Post</button>\r\n        </div>\r\n    </form>\r\n```"
  },
  {
    "path": "projects/htmx/form/form.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/form/form.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"form\", \"form.csproj\", \"{13C5884D-73B5-4302-93D3-C8801A867A78}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{13C5884D-73B5-4302-93D3-C8801A867A78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{13C5884D-73B5-4302-93D3-C8801A867A78}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{13C5884D-73B5-4302-93D3-C8801A867A78}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{13C5884D-73B5-4302-93D3-C8801A867A78}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {0E3BF668-CE45-4DE7-8FC0-CCC060C46AB9}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/form-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/form-2/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nWebApplication.Create();\r\n\r\nvar builder=  WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, IAntiforgery antiforgery) =>\r\n{\r\n    var token = antiforgery.GetAndStoreTokens(context);\r\n\r\n    var html = $\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n            </head>\r\n            <body>\r\n                <div class=\"container\">\r\n                    <div class=\"col-md-6\">\r\n                        <h1>Simple Form</h1>\r\n                        <form hx-post=\"/simple\" hx-swap=\"outerHTML\">\r\n                            <input type=\"hidden\" name=\"{ token.FormFieldName }\" value=\"{token.RequestToken}\" />\r\n                            <div class=\"mb-3\">\r\n                                <label for=\"name\" class=\"form-label\">Name</label>\r\n                                <input type=\"text\" name=\"Name\" id=\"name\" class=\"form-control\" />\r\n                            </div>\r\n                            <div class=\"mb-3\">\r\n                                <label for=\"bio\" class=\"form-label\">Bio</label>\r\n                                <textarea name=\"Bio\" id=\"bio\" rows=\"5\" class=\"form-control\">\r\n                                </textarea>\r\n                            </div>\r\n                            <div class=\"mb-3\">\r\n                                <label for=\"Gender\" id=\"gender\" class=\"form-label\">Gender</label>\r\n                                <select name=\"Gender\" id=\"gender\" class=\"form-select\">\r\n                                    <option>Non Binary</option>\r\n                                    <option>Male</option>\r\n                                    <option>Female</option>\r\n                                </select>\r\n                            </div>\r\n                            <div class=\"form-check mb-3\">\r\n                                <input type=\"hidden\" name=\"IsEmployed\" value=\"false\">\r\n                                <input class=\"form-check-input\" name=\"IsEmployed\" type=\"checkbox\" value=\"true\" id=\"isEmployed\">\r\n                                <label class=\"form-check-label\" for=\"isEmployed\">\r\n                                    Is Employed\r\n                                </label>\r\n                            </div>\r\n                            <div>\r\n                                Preferred Transportation\r\n                            </div>\r\n                            <div class=\"form-check\">\r\n                                <input class=\"form-check-input\" type=\"radio\" name=\"Transportation\" id=\"transportation1\" value=\"car\">\r\n                                <label class=\"form-check-label\" for=\"transportation1\">\r\n                                    Car\r\n                                </label>\r\n                            </div>\r\n                            <div class=\"form-check mb-3\">\r\n                                <input class=\"form-check-input\" type=\"radio\" name=\"Transportation\" id=\"transportation2\" value=\"metro/subway\" checked>\r\n                                <label class=\"form-check-label\" for=\"transportation2\">\r\n                                    Metro/Subway\r\n                                </label>\r\n                            </div>\r\n                            <div class=\"mb-3\">\r\n                                <button type=\"submit\" class=\"btn btn-primary\">Post</button>\r\n                            </div>\r\n                        </form>\r\n                    </div>\r\n                </div>\r\n                <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapPost(\"/simple\", (HttpRequest request, [FromForm] Input i) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"\"\"\r\n        <div class=\"alert alert-success mb-3\">\r\n            Your data has been processed.\r\n        </div>\r\n        \r\n        <table class=\"table\">\r\n            <thead>\r\n                <tr>\r\n                    <th>Name</th>\r\n                    <th>Value</th>\r\n                </tr>\r\n            </thead>\r\n            <tbody>\r\n                <tr>\r\n                    <td>Name</td>\r\n                    <td>{i.Name}</td>\r\n                </tr>\r\n                <tr>\r\n                    <td>Bio</td>\r\n                    <td>{i.Bio}</td>\r\n                </tr>\r\n                <tr>\r\n                    <td>Gender</td>\r\n                    <td>{i.Gender}</td>\r\n                </tr>\r\n                <tr>\r\n                    <td>Is Employed</td>\r\n                    <td>{i.IsEmployed}</td>\r\n                </tr>\r\n                <tr>\r\n                    <td>Transportation</td>\r\n                    <td>{i.Transportation}</td>\r\n                </tr>\r\n            </tbody>\r\n        </table>\r\n    \"\"\");\r\n});\r\n\r\napp.Run();\r\n\r\nclass Input \r\n{\r\n    public string Name { get; set; } = string.Empty;\r\n\r\n    public string Bio { get; set;} = string.Empty;\r\n\r\n    public string Gender { get; set;} = string.Empty;\r\n\r\n    public bool IsEmployed { get; set; }\r\n\r\n    public string Transportation { get; set; } = string.Empty;    \r\n }\r\n\r\n"
  },
  {
    "path": "projects/htmx/form-2/README.md",
    "content": "# Processing form with HTMX hx-post\r\n\r\nThis example to handle form with more input in HTMX using `hx-post`"
  },
  {
    "path": "projects/htmx/form-2/form-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/form-2/form-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"form-2\", \"form-2.csproj\", \"{81F8B85A-18EB-4799-8941-16E6FB226CD0}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{81F8B85A-18EB-4799-8941-16E6FB226CD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{81F8B85A-18EB-4799-8941-16E6FB226CD0}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{81F8B85A-18EB-4799-8941-16E6FB226CD0}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{81F8B85A-18EB-4799-8941-16E6FB226CD0}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {3CF94AB5-0C6E-46E9-8D5F-70454A525BA6}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/header-hx-refresh/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/header-hx-refresh/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>HX-Refresh</h1>\r\n            <p>Click on the below links. This page will be refreshed. Check the date changes {{ DateTime.Now }}</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Refresh();\r\n    });\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Refresh();\r\n    });\r\n\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Refresh();\r\n    });\r\n\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Refresh();\r\n    });\r\n    \r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{   \r\n    response.Htmx(x =>\r\n    {\r\n        x.Refresh();\r\n    });\r\n\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/header-hx-refresh/README.md",
    "content": "# HX-Refresh Response Header\r\n\r\nThis example demonstrates the usage of `HX-Refresh` response header to instruct the web browser to refresh the page ([doc](https://htmx.org/reference/#response_headers)).\r\n\r\nWe are using the nice utilities provided by the excellent [Htmx](https://www.nuget.org/packages/Htmx) package.\r\n\r\n```csharp\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Refresh();\r\n    });\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n```"
  },
  {
    "path": "projects/htmx/header-hx-refresh/header-hx-refresh.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/header-hx-replace-url/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/header-hx-replace-url/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>HX-Replace-Url</h1>\r\n            <p>Click on the below links to see the response. Don't forget to check your browser url.</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.ReplaceUrl(\"/get\");\r\n    });\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.ReplaceUrl(\"/post\");\r\n    });\r\n\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.ReplaceUrl(\"/delete\");\r\n    });\r\n\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.ReplaceUrl(\"/put\");\r\n    });\r\n    \r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{   \r\n    response.Htmx(x =>\r\n    {\r\n        x.ReplaceUrl(\"/patch\");\r\n    });\r\n\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/header-hx-replace-url/README.md",
    "content": "# HX-Replace-Url Response Header\r\n\r\nThis example demonstrates the usage of `HX-Replace-Url` response header to replace the current url at the browser history ([doc](https://htmx.org/headers/hx-replace-url/)).\r\n\r\nWe are using the nice utilities provided by the excellent [Htmx](https://www.nuget.org/packages/Htmx) package.\r\n\r\n```csharp\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.ReplaceUrl(\"/get\");\r\n    });\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n```"
  },
  {
    "path": "projects/htmx/header-hx-replace-url/header-hx-replace-url.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/header-hx-replace-url/header-hx-replace-url.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"header-hx-replace-url\", \"header-hx-replace-url.csproj\", \"{440ECC17-73DA-4411-AF1B-1C800D7E4EEE}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{440ECC17-73DA-4411-AF1B-1C800D7E4EEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{440ECC17-73DA-4411-AF1B-1C800D7E4EEE}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{440ECC17-73DA-4411-AF1B-1C800D7E4EEE}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{440ECC17-73DA-4411-AF1B-1C800D7E4EEE}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {6E86A573-55C1-449B-BA37-76946582856B}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/header-hx-reselect/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/header-hx-reselect/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken}}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>HX-Reselect header</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Reselect(\"#get\");\r\n    });\r\n\r\n    return Results.Content($\"\"\"\r\n    GET => {DateTime.UtcNow}\r\n        <div id=\"get\">RESELECTED GET => {DateTime.UtcNow}</div>\r\n    \"\"\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Reselect(\"#post\");\r\n    });\r\n\r\n    return Results.Content($\"\"\"\r\n        POST => {DateTime.UtcNow}\r\n        <div id=\"post\">RESELECTED POST => {DateTime.UtcNow}</div>\r\n        \"\"\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Reselect(\"#delete\");\r\n    });\r\n\r\n    return Results.Content($\"\"\"\r\n        DELETE => {DateTime.UtcNow}\r\n        <div id=\"delete\">RESELECTED DELETE => {DateTime.UtcNow}</div>\r\n        \"\"\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Reselect(\"#put\");\r\n    });\r\n\r\n    return Results.Content($\"\"\"\r\n        PUT => {DateTime.UtcNow}\r\n        <div id=\"put\">RESELECTED PUT => {DateTime.UtcNow}</div>\r\n        \"\"\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Reselect(\"#patch\");\r\n    });\r\n\r\n    return Results.Content($\"\"\"\r\n        PATCH => {DateTime.UtcNow}\r\n        <div id=\"patch\">RESELECTED PATCH => {DateTime.UtcNow}</div>\r\n        \"\"\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/header-hx-reselect/README.md",
    "content": "# Header HX-Reselect\r\n\r\nThis example shows how to use HTTP Response `HX-Reselect` to select which part of the response to swap using CSS selector and override `hx-select` in on the triggering element.  ([doc](https://htmx.org/reference/#response_headers))\r\n\r\n```csharp\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Reselect(\"#get\");\r\n    });\r\n\r\n    return Results.Content($\"\"\"\r\n    GET => {DateTime.UtcNow}\r\n        <div id=\"get\">RESELECTED GET => {DateTime.UtcNow}</div>\r\n    \"\"\");\r\n});\r\n```"
  },
  {
    "path": "projects/htmx/header-hx-reselect/header-hx-reselect.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/header-hx-retarget/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/header-hx-retarget/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>HX-Trigger</h1>\r\n            <p>Click on the below links to see the response.</p>\r\n            <div class=\"row\">\r\n                <div class=\"col-md-6\">\r\n                    <ul>\r\n                        <li hx-get=\"/htmx\">GET</li>\r\n                        <li hx-post=\"/htmx\">POST</li>\r\n                        <li hx-put=\"/htmx\">PUT</li>\r\n                        <li hx-patch=\"/htmx\">PATCH</li>\r\n                        <li hx-delete=\"/htmx\">DELETE</li>\r\n                    </ul>\r\n                </div>\r\n                <div class=\"col-md-6\">\r\n                    <ul>\r\n                        <li id=\"get\"></li>\r\n                        <li id=\"post\"></li>\r\n                        <li id=\"put\"></li>\r\n                        <li id=\"patch\"></li>\r\n                        <li id=\"delete\"></li>\r\n                    </ul>\r\n                </div>\r\n            </div>\r\n\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"show-me\", (evt) => {\r\n                    alert(\"show-me event triggered\");\r\n                });\r\n\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Retarget(\"#get\");\r\n    });\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Retarget(\"#post\");\r\n    });\r\n\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Retarget(\"#delete\");\r\n    });\r\n\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Retarget(\"#put\");\r\n    });\r\n    \r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{   \r\n    response.Htmx(x =>\r\n    {\r\n        x.Retarget(\"#patch\");\r\n    });\r\n\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/header-hx-retarget/README.md",
    "content": "# HX-Trigger Response Header\r\n\r\nThis example demonstrates the usage of `HX-Retarget` response header to retarget an element (overriding the request) at the client using CSS selector([doc](https://htmx.org/reference/#events)).\r\n\r\nWe are using the nice utilities provided by the excellent [Htmx](https://www.nuget.org/packages/Htmx) package.\r\n\r\n```csharp\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.Retarget(\"#get\");\r\n    });\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n```"
  },
  {
    "path": "projects/htmx/header-hx-retarget/header-hx-retarget.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/header-hx-retarget/header-hx-retarget.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"header-hx-retarget\", \"header-hx-retarget.csproj\", \"{06FE4C32-287F-4D1E-95B4-A02BA2461805}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{06FE4C32-287F-4D1E-95B4-A02BA2461805}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{06FE4C32-287F-4D1E-95B4-A02BA2461805}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{06FE4C32-287F-4D1E-95B4-A02BA2461805}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{06FE4C32-287F-4D1E-95B4-A02BA2461805}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {68AF0B39-A20D-4C64-AF4F-708CF9A97A87}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/header-hx-trigger/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/header-hx-trigger/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>HX-Trigger</h1>\r\n            <p>Click on the below links to see the response.</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"show-me\", (evt) => {\r\n                    alert(\"show-me event triggered\");\r\n                });\r\n\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me\");\r\n    });\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me\");\r\n    });\r\n\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me\");\r\n    });\r\n\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me\");\r\n    });\r\n    \r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{   \r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me\");\r\n    });\r\n\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/header-hx-trigger/README.md",
    "content": "# HX-Trigger Response Header\r\n\r\nThis example demonstrates the usage of `HX-Trigger` response header to emit custom events at the client([doc](https://htmx.org/headers/hx-trigger/)).\r\n\r\nWe are using the nice utilities provided by the excellent [Htmx](https://www.nuget.org/packages/Htmx) package.\r\n\r\n```csharp\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me\");\r\n    });\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n```"
  },
  {
    "path": "projects/htmx/header-hx-trigger/header-hx-trigger.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/header-hx-trigger/header-hx-trigger.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"header-hx-trigger\", \"header-hx-trigger.csproj\", \"{C97E8BEC-FD19-4726-8EE8-E4D8062E0A3D}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{C97E8BEC-FD19-4726-8EE8-E4D8062E0A3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{C97E8BEC-FD19-4726-8EE8-E4D8062E0A3D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{C97E8BEC-FD19-4726-8EE8-E4D8062E0A3D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{C97E8BEC-FD19-4726-8EE8-E4D8062E0A3D}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {BB439578-82BE-40CC-B2D6-B1875C02EE98}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/header-hx-trigger-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/header-hx-trigger-2/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>HX-Trigger</h1>\r\n            <p>Click on the below links to see the response.</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"show-me\", (evt) => {\r\n                    alert(evt.detail.message);\r\n                });\r\n\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me\", new { message = \"GET request\" });\r\n    });\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me\", new { message = \"POST request\" });\r\n    });\r\n\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me\", new { message = \"DELETE request\" });\r\n    });\r\n\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me\", new { message = \"PUT request\" });\r\n    });\r\n    \r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{   \r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me\", new { message = \"PATCH request\" });\r\n    });\r\n\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/header-hx-trigger-2/README.md",
    "content": "# HX-Trigger Response Header with JSON payload\r\n\r\nThis example demonstrates the usage of `HX-Trigger` response header to emit custom events with JSON payload at the client([doc](https://htmx.org/headers/hx-trigger/)).\r\n\r\nWe are using the nice utilities provided by the excellent [Htmx](https://www.nuget.org/packages/Htmx) package.\r\n\r\n```csharp\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me\", new { message = \"GET request\" });\r\n    });\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n```"
  },
  {
    "path": "projects/htmx/header-hx-trigger-2/header-hx-trigger-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/header-hx-trigger-2/header-hx-trigger-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"header-hx-trigger-2\", \"header-hx-trigger-2.csproj\", \"{A156188D-B2EB-4287-BCBB-18F172DAD7CB}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{A156188D-B2EB-4287-BCBB-18F172DAD7CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A156188D-B2EB-4287-BCBB-18F172DAD7CB}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A156188D-B2EB-4287-BCBB-18F172DAD7CB}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A156188D-B2EB-4287-BCBB-18F172DAD7CB}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {BB9EBD12-9613-423B-8586-FAFF6B28005A}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/header-hx-trigger-3/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/header-hx-trigger-3/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>HX-Trigger</h1>\r\n            <p>Click on the below links to see the response.</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"show-me\", (evt) => {\r\n                    alert(\"show-me\");\r\n                });\r\n\r\n                document.addEventListener(\"show-you\", (evt) => {\r\n                    alert(\"show-you\");\r\n                });\r\n\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me, show-you\");\r\n    });\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me, show-you\");\r\n    });\r\n\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me, show-you\");\r\n    });\r\n\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me, show-you\");\r\n    });\r\n    \r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{   \r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me, show-you\");\r\n    });\r\n\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/header-hx-trigger-3/README.md",
    "content": "# HX-Trigger Response Header\r\n\r\nThis example demonstrates the usage of `HX-Trigger` response header to emit multiple custom events at the client([doc](https://htmx.org/headers/hx-trigger/)).\r\n\r\nWe are using the nice utilities provided by the excellent [Htmx](https://www.nuget.org/packages/Htmx) package.\r\n\r\n```csharp\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    response.Htmx(x =>\r\n    {\r\n        x.WithTrigger(\"show-me, show-you\");\r\n    });\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n```"
  },
  {
    "path": "projects/htmx/header-hx-trigger-3/header-hx-trigger-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/header-hx-trigger-3/header-hx-trigger-3.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"header-hx-trigger-3\", \"header-hx-trigger-3.csproj\", \"{6C84FFC6-DB7F-452D-894D-317CE6E26CB5}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{6C84FFC6-DB7F-452D-894D-317CE6E26CB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{6C84FFC6-DB7F-452D-894D-317CE6E26CB5}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{6C84FFC6-DB7F-452D-894D-317CE6E26CB5}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{6C84FFC6-DB7F-452D-894D-317CE6E26CB5}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {02E046AF-9591-4C85-BC3E-60F6092E29D8}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/header-hx-trigger-4/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/header-hx-trigger-4/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing System.Text.Json;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>HX-Trigger</h1>\r\n            <p>Click on the below links to see the response.</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"show-me\", (evt) => {\r\n                    alert(evt.detail.message);\r\n                });\r\n\r\n                document.addEventListener(\"show-you\", (evt) => {\r\n                    alert(evt.detail.message);\r\n                });\r\n\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    var showMe = JsonSerializer.Serialize(new { message = \"GET from show-me\" });\r\n    var showYou = JsonSerializer.Serialize(new { message = \"GET from show-you\" });\r\n\r\n    response.Headers.Append(\"HX-Trigger\", $$$\"\"\"{\"show-me\": {{{showMe}}}, \"show-you\": {{{showYou}}} }\"\"\");\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    var showMe = JsonSerializer.Serialize(new { message = \"POST from show-me\" });\r\n    var showYou = JsonSerializer.Serialize(new { message = \"POST from show-you\" });\r\n\r\n    response.Headers.Append(\"HX-Trigger\", $$$\"\"\"{\"show-me\": {{{showMe}}}, \"show-you\": {{{showYou}}} }\"\"\");\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    var showMe = JsonSerializer.Serialize(new { message = \"DELETE from show-me\" });\r\n    var showYou = JsonSerializer.Serialize(new { message = \"DELETE from show-you\" });\r\n\r\n    response.Headers.Append(\"HX-Trigger\", $$$\"\"\"{\"show-me\": {{{showMe}}}, \"show-you\": {{{showYou}}} }\"\"\");\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    var showMe = JsonSerializer.Serialize(new { message = \"PUT from show-me\" });\r\n    var showYou = JsonSerializer.Serialize(new { message = \"PUT from show-you\" });\r\n\r\n    response.Headers.Append(\"HX-Trigger\", $$$\"\"\"{\"show-me\": {{{showMe}}}, \"show-you\": {{{showYou}}} }\"\"\");\r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    var showMe = JsonSerializer.Serialize(new { message = \"PATCH from show-me\" });\r\n    var showYou = JsonSerializer.Serialize(new { message = \"PATCH from show-you\" });\r\n   \r\n    response.Headers.Append(\"HX-Trigger\", $$$\"\"\"{\"show-me\": {{{showMe}}}, \"show-you\": {{{showYou}}} }\"\"\");\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/header-hx-trigger-4/README.md",
    "content": "# HX-Trigger Response Header\r\n\r\nThis example demonstrates the usage of `HX-Trigger` response header to emit multiple custom events with JSON payload at the client([doc](https://htmx.org/headers/hx-trigger/)).\r\n\r\n[Htmx](https://www.nuget.org/packages/Htmx) package doesn't support this construct so we have to build the `HX-Trigger` response manually.\r\n\r\n```csharp\r\nhtmx.MapGet(\"/\", (HttpRequest request, HttpResponse response) =>\r\n{\r\n    var showMe = JsonSerializer.Serialize(new { message = \"GET from show-me\" });\r\n    var showYou = JsonSerializer.Serialize(new { message = \"GET from show-you\" });\r\n\r\n    response.Headers.Append(\"HX-Trigger\", $$$\"\"\"{\"show-me\": {{{showMe}}}, \"show-you\": {{{showYou}}} }\"\"\");\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\n```"
  },
  {
    "path": "projects/htmx/header-hx-trigger-4/header-hx-trigger-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/header-hx-trigger-4/header-hx-trigger-4.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"header-hx-trigger-4\", \"header-hx-trigger-4.csproj\", \"{12E9C364-9310-4453-9943-B583DEED08D4}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{12E9C364-9310-4453-9943-B583DEED08D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{12E9C364-9310-4453-9943-B583DEED08D4}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{12E9C364-9310-4453-9943-B583DEED08D4}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{12E9C364-9310-4453-9943-B583DEED08D4}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {8353F27C-1554-4B4F-89FD-4D6FDE9C757D}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/htmx-after-on-load/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/htmx-after-on-load/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>htmx:afterOnLoad</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <ul>\r\n                <li id=\"get-trigger\" hx-get=\"/htmx\">GET</li>\r\n                <li id=\"post-trigger\" hx-post=\"/htmx\">POST</li>\r\n                <li id=\"put-trigger\" hx-put=\"/htmx\">PUT</li>\r\n                <li id=\"patch-trigger\" hx-patch=\"/htmx\">PATCH</li>\r\n                <li id=\"delete-trigger\" hx-delete=\"/htmx\"'>DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:afterOnLoad\", (evt) => {\r\n                    let li = evt.detail.elt;\r\n                    alert(li.id);\r\n                });\r\n\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    // This is for the anti-forgery token\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/htmx-after-on-load/README.md",
    "content": "# Listen to htmx:afterOnLoad event  \r\n\r\nThis example shows how to listen to `htmx:afterOnLoad` ([doc](https://htmx.org/events/#htmx:afterOnLoad)).\r\n\r\n> This event is triggered after an AJAX onload has finished. Note that this does not mean that the content has been swapped or settled yet, only that the request has finished.\r\n\r\n```js\r\n    document.addEventListener(\"htmx:afterOnLoad\", (evt) => {\r\n        let li = evt.detail.elt;\r\n        alert(li.id);\r\n    });\r\n```"
  },
  {
    "path": "projects/htmx/htmx-after-on-load/htmx-after-on-load.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/htmx-config-request/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/htmx-config-request/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>Passing parameters via htmx:configRequest</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\"'>DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    evt.detail.parameters[\"Name\"] = \"John Doe\";\r\n                    \r\n                    // This is for the anti-forgery token\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow} + {request.Query[\"Name\"]}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"POST => {DateTime.UtcNow} + {request.Form[\"Name\"]}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow} + {request.Query[\"Name\"]}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"PUT => {DateTime.UtcNow} + {request.Form[\"Name\"]}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow} + {request.Form[\"Name\"]}\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/htmx-config-request/README.md",
    "content": "# Listen to htmx:configRequest event to send parameters \r\n\r\nThis example shows how to listen to `htmx:configRequest` to pass parameters to all supported HTTP verbs ([doc](https://htmx.org/events/#htmx:configRequest))\r\n\r\n> This event is triggered after htmx has collected parameters for inclusion in the request. It can be used to include or update the parameters that htmx will send\r\n\r\n```js\r\n    document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n        evt.detail.parameters[\"Name\"] = \"John Doe\";\r\n    });\r\n```\r\n\r\nOn `GET` and `DELETE`, the parameters are accessible via `Request.Query`. For the rest, you can access the parameters via `Request.Form`."
  },
  {
    "path": "projects/htmx/htmx-config-request/htmx-config-request.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/htmx-config-request/htmx-config-request.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"htmx-config-request\", \"htmx-config-request.csproj\", \"{6D65BCA1-66CF-4105-8D9A-146394D38F79}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{6D65BCA1-66CF-4105-8D9A-146394D38F79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{6D65BCA1-66CF-4105-8D9A-146394D38F79}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{6D65BCA1-66CF-4105-8D9A-146394D38F79}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{6D65BCA1-66CF-4105-8D9A-146394D38F79}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {25CD0839-E518-4165-A331-2F725E0ECABA}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/htmx-response-error/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/htmx-response-error/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>Examine AJAX error response via htmx:responseError</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\"'>DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:responseError\", (evt) => {\r\n                    console.log(\"event\", evt);\r\n                    alert(evt.detail.xhr.status + \":\" + evt.detail.xhr.statusText);\r\n                });\r\n\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    evt.detail.parameters[\"Name\"] = \"John Doe\";\r\n                    \r\n                    // This is for the anti-forgery token\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.BadRequest();\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.BadRequest();\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.BadRequest();\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.BadRequest();\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.BadRequest();\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/htmx-response-error/README.md",
    "content": "# Listen to htmx:responseError event to obtain AJAX error message\r\n\r\nThis example shows how to listen to `htmx:responseError` to obtain AJAX error message from the server([doc](https://htmx.org/events/#htmx:responseError))\r\n\r\n```js\r\n    document.addEventListener(\"htmx:responseError\", (evt) => {\r\n        console.log(\"event\", evt);\r\n        alert(evt.detail.xhr.status + \":\" + evt.detail.xhr.statusText);\r\n    });\r\n```"
  },
  {
    "path": "projects/htmx/htmx-response-error/htmx-response-error.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/htmx-response-error/htmx-response-error.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"htmx-response-error\", \"htmx-response-error.csproj\", \"{BA0D9995-5891-41EC-A35B-1B59C0D7FEC9}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BA0D9995-5891-41EC-A35B-1B59C0D7FEC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BA0D9995-5891-41EC-A35B-1B59C0D7FEC9}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BA0D9995-5891-41EC-A35B-1B59C0D7FEC9}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BA0D9995-5891-41EC-A35B-1B59C0D7FEC9}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {587204FC-73AA-4A05-B8FC-4DDC9DFCB28A}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/hx-confirm/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/hx-confirm/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>Asking for confirmation</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <ul hx-confirm=\"are you sure?\">\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/hx-confirm/README.md",
    "content": "# Ask for confirmation using hx-confirm\r\n\r\nThis example shows how to use `hx-confirm` to ask for user confirmation before making a request ([doc](https://htmx.org/docs/#confirming))\r\n\r\n```html\r\n<ul hx-confirm=\"are you sure?\">\r\n    <li hx-get=\"/htmx\">GET</li>\r\n    <li hx-post=\"/htmx\">POST</li>\r\n    <li hx-put=\"/htmx\">PUT</li>\r\n    <li hx-patch=\"/htmx\">PATCH</li>\r\n    <li hx-delete=\"/htmx\">DELETE</li>\r\n</ul>\r\n```\r\n\r\nYou can see here that `hx-confirm`, like many HTMX attributes, support inheritance. The HTML above has the same functional equivalent of the HTML below\r\n\r\n```html\r\n<ul>\r\n    <li hx-get=\"/htmx\" hx-confirm=\"are you sure?\">GET</li>\r\n    <li hx-post=\"/htmx\" hx-confirm=\"are you sure?\">POST</li>\r\n    <li hx-put=\"/htmx\" hx-confirm=\"are you sure?\">PUT</li>\r\n    <li hx-patch=\"/htmx\" hx-confirm=\"are you sure?\">PATCH</li>\r\n    <li hx-delete=\"/htmx\" hx-confirm=\"are you sure?\">DELETE</li>\r\n</ul>\r\n```\r\n"
  },
  {
    "path": "projects/htmx/hx-confirm/hx-confirm.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/hx-confirm/hx-confirm.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"hx-confirm\", \"hx-confirm.csproj\", \"{C85561BC-9292-4FF5-BF56-7F4C5BE7BFAA}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{C85561BC-9292-4FF5-BF56-7F4C5BE7BFAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{C85561BC-9292-4FF5-BF56-7F4C5BE7BFAA}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{C85561BC-9292-4FF5-BF56-7F4C5BE7BFAA}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{C85561BC-9292-4FF5-BF56-7F4C5BE7BFAA}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {7CDFA1B6-9C19-4493-BA2B-A5375F2C46F6}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/hx-headers/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/hx-headers/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>hx-headers</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <ul hx-headers='{ \"X-NAME\" : \"Anna\"}'>\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"GET => {DateTime.UtcNow} + {request.Headers[\"X-NAME\"]}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"POST => {DateTime.UtcNow} + {request.Headers[\"X-NAME\"]}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow} + {request.Headers[\"X-NAME\"]}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PUT => {DateTime.UtcNow} + {request.Headers[\"X-NAME\"]}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow} + {request.Headers[\"X-NAME\"]}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/hx-headers/README.md",
    "content": "# Use hx-headers to pass values via HTTP headers\r\n\r\nThis example shows how to use `hx-headers` to pass values via HTTP headers ([doc](https://htmx.org/attributes/hx-headers/))\r\n\r\n```html\r\n<ul hx-headers='{ \"X-NAME\" : \"Anna\"}'>\r\n    <li hx-get=\"/htmx\">GET</li>\r\n    <li hx-post=\"/htmx\">POST</li>\r\n    <li hx-put=\"/htmx\">PUT</li>\r\n    <li hx-patch=\"/htmx\">PATCH</li>\r\n    <li hx-delete=\"/htmx\">DELETE</li>\r\n</ul>\r\n```"
  },
  {
    "path": "projects/htmx/hx-headers/hx-headers.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/hx-headers/hx-headers.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"hx-headers\", \"hx-headers.csproj\", \"{4C4D88E4-FF79-4008-AB86-60EDDD398ADD}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{4C4D88E4-FF79-4008-AB86-60EDDD398ADD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{4C4D88E4-FF79-4008-AB86-60EDDD398ADD}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{4C4D88E4-FF79-4008-AB86-60EDDD398ADD}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{4C4D88E4-FF79-4008-AB86-60EDDD398ADD}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {3EDD06C7-B943-4643-AB57-D539FDD5A618}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/hx-include/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/hx-include/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>Passing parameters to all HTTP verbs via hx-include targeting an input form</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx\" hx-include=\"[name='Name']\">GET</li>\r\n                <li hx-post=\"/htmx\" hx-include=\"[name='Name']\">POST</li>\r\n                <li hx-put=\"/htmx\" hx-include=\"[name='Name']\">PUT</li>\r\n                <li hx-patch=\"/htmx\" hx-include=\"[name='Name']\">PATCH</li>\r\n                <li hx-delete=\"/htmx\" hx-include=\"[name='Name']\">DELETE</li>\r\n            </ul>\r\n                <h2>Please fill this input</h2>\r\n                <label for=\"Name\">Name:</label></br>\r\n                <input type=\"text\" name=\"Name\" id=\"Name\"/> <br/>\r\n\r\n                <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n                <script>\r\n                    document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                        let httpVerb = evt.detail.verb.toUpperCase();\r\n                        if (httpVerb === 'GET') return;\r\n                        \r\n                        let antiForgery = htmx.config.antiForgery;\r\n                        if (antiForgery) {\r\n                            // already specified on form, short circuit\r\n                            if (evt.detail.parameters[antiForgery.formFieldName])\r\n                                return;\r\n                            \r\n                            if (antiForgery.headerName) {\r\n                                evt.detail.headers[antiForgery.headerName]\r\n                                    = antiForgery.requestToken;\r\n                            } else {\r\n                                evt.detail.parameters[antiForgery.formFieldName]\r\n                                    = antiForgery.requestToken;\r\n                            }\r\n                        }\r\n                    });\r\n                </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"GET => {DateTime.UtcNow} + {request.Query[\"Name\"]}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"POST => {DateTime.UtcNow} + {request.Form[\"Name\"]}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow} + {request.Query[\"Name\"]}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PUT => {DateTime.UtcNow} + {request.Form[\"Name\"]}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow} + {request.Form[\"Name\"]}\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/hx-include/README.md",
    "content": "# Using hx-include on all HTTP verbs\r\n\r\nThis example shows how to use `hx-include` targeting an input form to pass parameters to all supported HTTP verbs ([doc](https://htmx.org/attributes/hx-include/))\r\n\r\n```html\r\n<ul>\r\n    <li hx-get=\"/htmx\" hx-include=\"[name='Name']\">GET</li>\r\n    <li hx-post=\"/htmx\" hx-include=\"[name='Name']\">POST</li>\r\n    <li hx-put=\"/htmx\" hx-include=\"[name='Name']\">PUT</li>\r\n    <li hx-patch=\"/htmx\" hx-include=\"[name='Name']\">PATCH</li>\r\n    <li hx-delete=\"/htmx\" hx-include=\"[name='Name']\">DELETE</li>\r\n</ul>\r\n```\r\n\r\nOn `GET` and `DELETE`, the parameters are accessible via `Request.Query`. For the rest, you can access the parameters via `Request.Form`."
  },
  {
    "path": "projects/htmx/hx-include/hx-include.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/hx-include/hx-include.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"hx-include\", \"hx-include.csproj\", \"{D2C5E35E-D55E-4364-AEF5-242118F81B27}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{D2C5E35E-D55E-4364-AEF5-242118F81B27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D2C5E35E-D55E-4364-AEF5-242118F81B27}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D2C5E35E-D55E-4364-AEF5-242118F81B27}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D2C5E35E-D55E-4364-AEF5-242118F81B27}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {2E8BFA0C-0057-4FE4-81AD-FA98D17320B6}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/hx-indicator/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/hx-indicator/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n\r\n                    .htmx-indicator{\r\n                        opacity:0;\r\n                        transition: opacity 500ms ease-in;\r\n                        position:absolute;\r\n                        left:50%;\r\n                        top:50%;\r\n                    }\r\n                    \r\n                    .htmx-request .htmx-indicator{\r\n                        opacity:1\r\n                    }\r\n                    \r\n                    .htmx-request.htmx-indicator{\r\n                        opacity:1\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>hx-spinner</h1>\r\n            <p>Click on the below links to see request spinner and the response</p>\r\n            <ul hx-indicator=\"#spinner\">\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\">DELETE</li>\r\n            </ul>\r\n            <img  id=\"spinner\" class=\"htmx-indicator\" src=\"/90-ring.svg\"/>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", async (HttpRequest request) =>\r\n{\r\n    await Task.Delay(5000);\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", async (HttpRequest request) =>\r\n{\r\n    await Task.Delay(5000);\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", async (HttpRequest request) =>\r\n{\r\n    await Task.Delay(5000);\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", async (HttpRequest request) =>\r\n{\r\n    await Task.Delay(5000);\r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", async (HttpRequest request) =>\r\n{\r\n    await Task.Delay(5000);\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/hx-indicator/README.md",
    "content": "# hx-indicator\r\n\r\nThis example demonstrats how to show spinning indicators waiting for AJAX requests to complete([doc](https://htmx.org/attributes/hx-indicator/))\r\n\r\n```html\r\n<ul hx-indicator=\"#spinner\">\r\n    <li hx-get=\"/htmx\">GET</li>\r\n    <li hx-post=\"/htmx\">POST</li>\r\n    <li hx-put=\"/htmx\">PUT</li>\r\n    <li hx-patch=\"/htmx\">PATCH</li>\r\n    <li hx-delete=\"/htmx\">DELETE</li>\r\n</ul>\r\n<img  id=\"spinner\" class=\"htmx-indicator\" src=\"/90-ring.svg\"/>\r\n```"
  },
  {
    "path": "projects/htmx/hx-indicator/hx-indicator.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/hx-indicator/hx-indicator.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"hx-indicator\", \"hx-indicator.csproj\", \"{4F9C02FB-1998-4739-B16E-F6C7D1BB7FF0}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{4F9C02FB-1998-4739-B16E-F6C7D1BB7FF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{4F9C02FB-1998-4739-B16E-F6C7D1BB7FF0}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{4F9C02FB-1998-4739-B16E-F6C7D1BB7FF0}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{4F9C02FB-1998-4739-B16E-F6C7D1BB7FF0}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {C21F30CF-CA72-4B90-B6CD-E406F58A05AA}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/hx-on/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/hx-on/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>hx-on</h1>\r\n            <p>This is the complete list of HTMX events you can respond to using hx-on</p>\r\n            <ul>\r\n                <li hx-on:click=\"alert('click');\">hx-on:click</li>\r\n                <li hx-on:mouseover=\"alert('hover');\">hx-on:mouseover</li>\r\n                <li hx-on:dblclick=\"alert('double click');\">hx-on:dblclick</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/hx-on/README.md",
    "content": "# Using hx-on to handle events\r\n\r\nThis example shows how to use `hx-on` to handle HTML Events using inline JavaScript code ([doc](https://htmx.org/attributes/hx-on/))\r\n\r\n```html\r\n    <ul>\r\n        <li hx-on:click=\"alert('click');\">hx-on:click</li>\r\n        <li hx-on:mouseover=\"alert('hover');\">hx-on:mouseover</li>\r\n        <li hx-on:dblclick=\"alert('double click');\">hx-on:dblclick</li>\r\n    </ul>\r\n```\r\n\r\n`hx-on` handles [HTML Events](https://www.w3schools.com/tags/ref_eventattributes.asp) and [HTMX Events](https://htmx.org/reference/#events)."
  },
  {
    "path": "projects/htmx/hx-on/hx-on.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/hx-on/hx-on.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"hx-on\", \"hx-on.csproj\", \"{BD42C38B-604C-41B0-83C5-B64D08AA58AC}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BD42C38B-604C-41B0-83C5-B64D08AA58AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BD42C38B-604C-41B0-83C5-B64D08AA58AC}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BD42C38B-604C-41B0-83C5-B64D08AA58AC}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BD42C38B-604C-41B0-83C5-B64D08AA58AC}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {8DBA2F7B-B399-4D04-95A6-1C7F52B226E4}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/hx-on-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/hx-on-2/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>All verbs supported in HTMX</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <ul hx-on::before-request=\"alert('before')\" hx-on::after-request=\"alert('after')\">\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/hx-on-2/README.md",
    "content": "# Using hx-on to handle HTMX events\r\n\r\nThis example shows how to use `hx-on` to handle HTMX events before AJAX request submitted and after AJAX request finished.\r\n\r\n```html\r\n    <ul hx-on::before-request=\"alert('before')\" hx-on::after-request=\"alert('after')\">\r\n        <li hx-get=\"/htmx\">GET</li>\r\n        <li hx-post=\"/htmx\">POST</li>\r\n        <li hx-put=\"/htmx\">PUT</li>\r\n        <li hx-patch=\"/htmx\">PATCH</li>\r\n        <li hx-delete=\"/htmx\">DELETE</li>\r\n    </ul>\r\n```\r\n\r\n`hx-on` handles [`htmx:beforeRequest`](https://htmx.org/events/#htmx:beforeRequest) and [`htmx:afterRequest`](https://htmx.org/events/#htmx:afterRequest)"
  },
  {
    "path": "projects/htmx/hx-on-2/all-verbs.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/hx-on-2/all-verbs.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"all-verbs\", \"all-verbs.csproj\", \"{5769ACAC-842E-461E-BD5C-0F99F8C44B39}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{5769ACAC-842E-461E-BD5C-0F99F8C44B39}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {5F61E629-C920-4C16-9369-DEBD03434FB4}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/hx-preserve/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/hx-preserve/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>hx-preserve</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx\">\r\n                    <div id=\"get\" hx-preserve=\"true\">GET Preserved</div>\r\n                </li>\r\n                <li hx-post=\"/htmx\">\r\n                    <div id=\"post\" hx-preserve=\"true\">POST Preserved</div>\r\n                </li>\r\n                <li hx-put=\"/htmx\">\r\n                    <div id=\"put\" hx-preserve=\"true\">PUT Preserved</div>\r\n                </li>\r\n                <li hx-patch=\"/htmx\">\r\n                    <div id=\"patch\" hx-preserve=\"true\">PATCH Preserved</div>\r\n                </li>\r\n                <li hx-delete=\"/htmx\">\r\n                    <div id=\"delete\" hx-preserve=\"true\">DELETE Preserved</div>\r\n                </li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"<div id=\"get\" hx-preserve=\"true\"></div> GET => {DateTime.UtcNow}\"\"\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"<div id=\"post\" hx-preserve=\"true\"></div> POST => {DateTime.UtcNow}\"\"\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"<div id=\"delete\" hx-preserve=\"true\"></div> DELETE => {DateTime.UtcNow}\"\"\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"<div id=\"put\" hx-preserve=\"true\"></div> PUT => {DateTime.UtcNow}\"\"\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"<div id=\"patch\" hx-preserve=\"true\"></div> PATCH => {DateTime.UtcNow}\"\"\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/hx-preserve/README.md",
    "content": "# hx-preserve\r\n\r\nThis example how to use `hx-preserve` to keep an element unchanged during HTMX swap([doc](https://htmx.org/attributes/hx-preserve/))\r\n\r\n```html\r\n<ul>\r\n    <li hx-get=\"/htmx\">\r\n        <div id=\"get\" hx-preserve=\"true\">GET Preserved</div>\r\n    </li>\r\n    <li hx-post=\"/htmx\">\r\n        <div id=\"post\" hx-preserve=\"true\">POST Preserved</div>\r\n    </li>\r\n    <li hx-put=\"/htmx\">\r\n        <div id=\"put\" hx-preserve=\"true\">PUT Preserved</div>\r\n    </li>\r\n    <li hx-patch=\"/htmx\">\r\n        <div id=\"patch\" hx-preserve=\"true\">PATCH Preserved</div>\r\n    </li>\r\n    <li hx-delete=\"/htmx\">\r\n        <div id=\"delete\" hx-preserve=\"true\">DELETE Preserved</div>\r\n    </li>\r\n</ul>\r\n```"
  },
  {
    "path": "projects/htmx/hx-preserve/hx-preserve.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/hx-preserve/hx-preserve.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"hx-preserve\", \"hx-preserve.csproj\", \"{12250A32-5441-418F-8876-4ACE6AA6E7FC}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{12250A32-5441-418F-8876-4ACE6AA6E7FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{12250A32-5441-418F-8876-4ACE6AA6E7FC}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{12250A32-5441-418F-8876-4ACE6AA6E7FC}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{12250A32-5441-418F-8876-4ACE6AA6E7FC}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {E26EBD7D-FC09-4103-8B1B-3064E58F8845}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/hx-prompt/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/hx-prompt/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>Asking for prompt</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <ul hx-prompt=\"what is your name?\">\r\n                <li hx-get=\"/htmx\">GET</li>\r\n                <li hx-post=\"/htmx\">POST</li>\r\n                <li hx-put=\"/htmx\">PUT</li>\r\n                <li hx-patch=\"/htmx\">PATCH</li>\r\n                <li hx-delete=\"/htmx\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    request.IsHtmx(out var headers);\r\n\r\n    return Results.Content($\"GET => {DateTime.UtcNow} hello {headers.Prompt}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    request.IsHtmx(out var headers);\r\n\r\n    return Results.Content($\"POST => {DateTime.UtcNow} hello {headers.Prompt}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    request.IsHtmx(out var headers);\r\n\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow} hello {headers.Prompt}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    request.IsHtmx(out var headers);\r\n\r\n    return Results.Content($\"PUT => {DateTime.UtcNow} hello {headers.Prompt}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    request.IsHtmx(out var headers);\r\n\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow} hello {headers.Prompt}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/hx-prompt/README.md",
    "content": "# Ask for a prompt using hx-prompt\r\n\r\nThis example shows how to use `hx-prompt` to ask a user for an input before making a request ([doc](https://htmx.org/attributes/hx-prompt/))\r\n\r\n```html\r\n    <ul hx-prompt=\"what is your name?\">\r\n        <li hx-get=\"/htmx\">GET</li>\r\n        <li hx-post=\"/htmx\">POST</li>\r\n        <li hx-put=\"/htmx\">PUT</li>\r\n        <li hx-patch=\"/htmx\">PATCH</li>\r\n        <li hx-delete=\"/htmx\">DELETE</li>\r\n    </ul>\r\n```\r\n\r\nYou can see here that `hx-prompt`, like many HTMX attributes, support inheritance. The HTML above has the same functional equivalent of the HTML below\r\n\r\n```html\r\n<ul>\r\n    <li hx-get=\"/htmx\" hx-prompt=\"what is your name?\">GET</li>\r\n    <li hx-post=\"/htmx\" hx-prompt=\"what is your name?\">POST</li>\r\n    <li hx-put=\"/htmx\" hx-prompt=\"what is your name?\">PUT</li>\r\n    <li hx-patch=\"/htmx\" hx-prompt=\"what is your name?\">PATCH</li>\r\n    <li hx-delete=\"/htmx\" hx-prompt=\"what is your name?\">DELETE</li>\r\n</ul>\r\n```\r\n"
  },
  {
    "path": "projects/htmx/hx-prompt/hx-prompt.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/hx-prompt/hx-prompt.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"hx-prompt\", \"hx-prompt.csproj\", \"{CED5ACD5-68AE-4817-A185-CFBC1E2CD91C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{CED5ACD5-68AE-4817-A185-CFBC1E2CD91C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{CED5ACD5-68AE-4817-A185-CFBC1E2CD91C}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{CED5ACD5-68AE-4817-A185-CFBC1E2CD91C}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{CED5ACD5-68AE-4817-A185-CFBC1E2CD91C}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {05A9DDF3-4C38-461C-9A22-EE4EC78334D0}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/hx-replace-url/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/hx-replace-url/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n            </head>\r\n            <body class=\"container\">\r\n            <h1>hx-replace-url</h1>\r\n            <p>Click on the below links to see the response and check the url change at the browser top bar</p>\r\n            <div class=\"row\">\r\n                <div class=\"col-md-6\">\r\n                    <h2>Without hx-replace-url</h2>\r\n                    <ul>\r\n                        <li hx-get=\"/htmx/get\">GET</li>\r\n                        <li hx-post=\"/htmx/post\">POST</li>\r\n                        <li hx-put=\"/htmx/put\">PUT</li>\r\n                        <li hx-patch=\"/htmx/patch\">PATCH</li>\r\n                        <li hx-delete=\"/htmx/delete\">DELETE</li>\r\n                    </ul>\r\n                </div>\r\n                <div class=\"col-md-6\">\r\n                    <h2>With hx-replace-url</h2>\r\n                    <ul>\r\n                        <li hx-get=\"/htmx/get\" hx-replace-url=\"true\">GET</li>\r\n                        <li hx-post=\"/htmx/post\" hx-replace-url=\"true\">POST</li>\r\n                        <li hx-put=\"/htmx/put\" hx-replace-url=\"true\">PUT</li>\r\n                        <li hx-patch=\"/htmx/patch\" hx-replace-url=\"true\">PATCH</li>\r\n                        <li hx-delete=\"/htmx/delete\" hx-replace-url=\"true\">DELETE</li>\r\n                    </ul>\r\n                </div>\r\n            </div>\r\n            \r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/get\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/post\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/delete\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/put\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/patch\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/hx-replace-url/README.md",
    "content": "# hx-replace-url\r\n\r\nThis example shows how to use `hx-replace-url` to replace the current url of the browser location ([doc](https://htmx.org/attributes/hx-replace-url/))\r\n\r\n```html\r\n    <ul>\r\n        <li hx-get=\"/htmx/get\" hx-replace-url=\"true\">GET</li>\r\n        <li hx-post=\"/htmx/post\" hx-replace-url=\"true\">POST</li>\r\n        <li hx-put=\"/htmx/put\" hx-replace-url=\"true\">PUT</li>\r\n        <li hx-patch=\"/htmx/patch\" hx-replace-url=\"true\">PATCH</li>\r\n        <li hx-delete=\"/htmx/delete\" hx-replace-url=\"true\">DELETE</li>\r\n    </ul>\r\n```"
  },
  {
    "path": "projects/htmx/hx-replace-url/hx-replace-url.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/hx-replace-url/hx-replace-url.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"hx-replace-url\", \"hx-replace-url.csproj\", \"{BE06A0CB-DE29-4BE0-9AC3-234587C89D66}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BE06A0CB-DE29-4BE0-9AC3-234587C89D66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BE06A0CB-DE29-4BE0-9AC3-234587C89D66}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BE06A0CB-DE29-4BE0-9AC3-234587C89D66}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BE06A0CB-DE29-4BE0-9AC3-234587C89D66}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {366457EA-225D-469B-A936-5E819769B0BA}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/hx-replace-url-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/hx-replace-url-2/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n            </head>\r\n            <body class=\"container\">\r\n            <h1>hx-replace-url</h1>\r\n            <p>Click on the below links to see the response and check the url change at the browser top bar</p>\r\n            <div class=\"row\">\r\n                <div class=\"col-md-6\">\r\n                    <h2>With hx-replace-url=\"true\"</h2>\r\n                    <ul>\r\n                        <li hx-get=\"/htmx/get\" hx-replace-url=\"true\">GET</li>\r\n                        <li hx-post=\"/htmx/post\" hx-replace-url=\"true\">POST</li>\r\n                        <li hx-put=\"/htmx/put\" hx-replace-url=\"true\">PUT</li>\r\n                        <li hx-patch=\"/htmx/patch\" hx-replace-url=\"true\">PATCH</li>\r\n                        <li hx-delete=\"/htmx/delete\" hx-replace-url=\"true\">DELETE</li>\r\n                    </ul>\r\n                </div>\r\n                <div class=\"col-md-6\">\r\n                    <h2>With hx-replace-url=\"{other url}\"</h2>\r\n                    <ul>\r\n                        <li hx-get=\"/htmx/get\" hx-replace-url=\"/person/anna\">GET</li>\r\n                        <li hx-post=\"/htmx/post\" hx-replace-url=\"/person/john\">POST</li>\r\n                        <li hx-put=\"/htmx/put\" hx-replace-url=\"/person/ahmed\">PUT</li>\r\n                        <li hx-patch=\"/htmx/patch\" hx-replace-url=\"/person/gaby\">PATCH</li>\r\n                        <li hx-delete=\"/htmx/delete\" hx-replace-url=\"/person/daniela\">DELETE</li>\r\n                    </ul>\r\n                </div>\r\n            </div>\r\n            \r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/get\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/post\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/delete\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/put\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/patch\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/hx-replace-url-2/README.md",
    "content": "# hx-replace-url\r\n\r\nThis example shows how to use `hx-replace-url` with custom url to replace the current url of the browser location ([doc](https://htmx.org/attributes/hx-replace-url/))\r\n\r\n```html\r\n    <ul>\r\n        <li hx-get=\"/htmx/get\" hx-replace-url=\"/person/anna\">GET</li>\r\n        <li hx-post=\"/htmx/post\" hx-replace-url=\"/person/john\">POST</li>\r\n        <li hx-put=\"/htmx/put\" hx-replace-url=\"/person/ahmed\">PUT</li>\r\n        <li hx-patch=\"/htmx/patch\" hx-replace-url=\"/person/gaby\">PATCH</li>\r\n        <li hx-delete=\"/htmx/delete\" hx-replace-url=\"/person/daniela\">DELETE</li>\r\n    </ul>\r\n```"
  },
  {
    "path": "projects/htmx/hx-replace-url-2/hx-replace-url-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/hx-replace-url-2/hx-replace-url-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"hx-replace-url-2\", \"hx-replace-url-2.csproj\", \"{E5B295F9-F4FA-4B05-A698-F19C06FE1DDD}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{E5B295F9-F4FA-4B05-A698-F19C06FE1DDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E5B295F9-F4FA-4B05-A698-F19C06FE1DDD}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E5B295F9-F4FA-4B05-A698-F19C06FE1DDD}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E5B295F9-F4FA-4B05-A698-F19C06FE1DDD}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {75A900D5-A55C-4138-87BF-44944696A65A}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/hx-sync-queue/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/hx-sync-queue/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>All verbs supported in HTMX</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <div class=\"row\">\r\n                <div class=\"col-md-4\">\r\n                    <h2>hx-sync=\"this:queue first\"</h2>\r\n                    <p>queue first: Processes only the first click in a rapid succession.</p>\r\n                    <ul hx-sync=\"this:queue first\" hx-trigger=\"increment\">\r\n                        <li><a hx-get=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#first-get\">GET</a> <span id=\"first-get\"></li>\r\n                        <li><a hx-post=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#first-post\">POST</a> <span id=\"first-post\"></li>\r\n                        <li><a hx-put=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#first-put\">PUT</a> <span id=\"first-put\"></li>\r\n                        <li><a hx-patch=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#first-patch\">PATCH</a> <span id=\"first-patch\"></li>\r\n                        <li><a hx-delete=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#first-delete\">DELETE</a> <span id=\"first-delete\"></li>\r\n                    </ul>\r\n                </div>\r\n                <div class=\"col-md-4\">\r\n                    <h2>hx-sync=\"this:queue last\"</h2>\r\n                    <p>queue last: Processes the first click and the last click in a rapid succession, dropping intermediate ones.</p>\r\n                    <ul hx-sync=\"this:queue last\" hx-trigger=\"increment\">\r\n                        <li><a hx-get=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#last-get\">GET</a> <span id=\"last-get\"></li>\r\n                        <li><a hx-post=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#last-post\">POST</a> <span id=\"last-post\"></li>\r\n                        <li><a hx-put=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#last-put\">PUT</a>  <span id=\"last-put\"></li>\r\n                        <li><a hx-patch=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#last-patch\">PATCH</a> <span id=\"last-patch\"></li>\r\n                        <li><a hx-delete=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#last-delete\">DELETE</a>  <span id=\"last-delete\"></li>\r\n                    </ul>\r\n                </div>\r\n                <div class=\"col-md-4\">\r\n                    <h2>hx-sync=\"this:queue all\"</h2>\r\n                    <p>queue all: Processes every click, but with a delay.</p>\r\n                    <ul hx-sync=\"this:queue all\" hx-trigger=\"increment\">\r\n                        <li><a hx-get=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#all-get\">GET</a> <span id=\"all-get\"></span></li>\r\n                        <li><a hx-post=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#all-post\">POST</a> <span id=\"all-post\"></span></li>\r\n                        <li><a hx-put=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#all-put\">PUT</a> <span id=\"all-put\"></span></li>\r\n                        <li><a hx-patch=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#all-patch\">PATCH</a> <span id=\"all-patch\"></span></li>\r\n                        <li><a hx-delete=\"/htmx\" hx-on:click=\"incrementCount(this, event)\" hx-vals='{\"count\" : 1}' hx-target=\"#all-delete\">DELETE</a> <span id=\"all-delete\"></span></li>\r\n                    </ul>\r\n                </div>\r\n            </div>\r\n\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                function incrementCount(target, event) {\r\n                    event.preventDefault();\r\n                    let vals = JSON.parse(target.getAttribute('hx-vals'));\r\n                    vals.count = vals.count + 1;\r\n                    target.textContent = getHtmxVerb(target) + ' ' + vals.count;\r\n                    target.setAttribute('hx-vals', JSON.stringify(vals));\r\n                    htmx.trigger(target, 'increment');\r\n                }\r\n\r\n                function getHtmxVerb(element) {\r\n                    // Check for common HTMX verb attributes\r\n                    if (element.hasAttribute('hx-post')) return 'POST';\r\n                    if (element.hasAttribute('hx-get')) return 'GET';\r\n                    if (element.hasAttribute('hx-put')) return 'PUT';\r\n                    if (element.hasAttribute('hx-delete')) return 'DELETE';\r\n                    if (element.hasAttribute('hx-patch')) return 'PATCH';\r\n                    \r\n                    // If no specific verb attribute is found, default to GET\r\n                    return 'GET';\r\n                }\r\n\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", async (HttpRequest request) =>\r\n{\r\n    await Task.Delay(2000);\r\n    return Results.Content($\"GET => {DateTime.UtcNow} =>\" + request.Query[\"count\"]);\r\n});\r\n\r\nhtmx.MapPost(\"/\", async (HttpRequest request) =>\r\n{\r\n    await Task.Delay(2000);\r\n    return Results.Content($\"POST => {DateTime.UtcNow} =>\" + request.Form[\"count\"]);\r\n});\r\n\r\nhtmx.MapDelete(\"/\", async (HttpRequest request) =>\r\n{\r\n    await Task.Delay(2000);\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow} => \" + request.Query[\"count\"]);\r\n});\r\n\r\nhtmx.MapPut(\"/\", async (HttpRequest request) =>\r\n{\r\n    await Task.Delay(2000);\r\n    return Results.Content($\"PUT => {DateTime.UtcNow} => \"  + request.Form[\"count\"]);\r\n});\r\n\r\nhtmx.MapPatch(\"/\", async (HttpRequest request) =>\r\n{\r\n    await Task.Delay(2000);\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow} => \"  + request.Form[\"count\"]);\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/hx-sync-queue/README.md",
    "content": "# hx-sync queue\r\n\r\nThis example demonstrates on how to use `hx-sync` attribute to sync a single element with optional behavior `queue first`, `queue last`, and `queue all`. ([doc](https://htmx.org/attributes/hx-sync/))\r\n"
  },
  {
    "path": "projects/htmx/hx-sync-queue/hx-sync-queue.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/hx-vals/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/hx-vals/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>Passing parameters to all HTTP verbs via hx-vals</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx\" hx-vals='{\"Name\": \"Anna\"}'>GET</li>\r\n                <li hx-post=\"/htmx\" hx-vals='{\"Name\": \"Anna\"}'>POST</li>\r\n                <li hx-put=\"/htmx\" hx-vals='{\"Name\": \"Anna\"}'>PUT</li>\r\n                <li hx-patch=\"/htmx\" hx-vals='{\"Name\": \"Anna\"}'>PATCH</li>\r\n                <li hx-delete=\"/htmx\" hx-vals='{\"Name\": \"Anna\"}'>DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"GET => {DateTime.UtcNow} + {request.Query[\"Name\"]}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"POST => {DateTime.UtcNow} + {request.Form[\"Name\"]}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow} + {request.Query[\"Name\"]}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PUT => {DateTime.UtcNow} + {request.Form[\"Name\"]}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow} + {request.Form[\"Name\"]}\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/hx-vals/README.md",
    "content": "# Using hx-vals on all HTTP verbs\r\n\r\nThis example shows how to use `hx-vals` to pass parameters to all supported HTTP verbs ([doc](https://htmx.org/attributes/hx-vals/))\r\n\r\n```html\r\n    <ul>\r\n        <li hx-get=\"/htmx\" hx-vals='{\"Name\": \"Anna\"}'>GET</li>\r\n        <li hx-post=\"/htmx\" hx-vals='{\"Name\": \"Anna\"}'>POST</li>\r\n        <li hx-put=\"/htmx\" hx-vals='{\"Name\": \"Anna\"}'>PUT</li>\r\n        <li hx-patch=\"/htmx\" hx-vals='{\"Name\": \"Anna\"}'>PATCH</li>\r\n        <li hx-delete=\"/htmx\" hx-vals='{\"Name\": \"Anna\"}'>DELETE</li>\r\n    </ul>\r\n```\r\n\r\nOn `GET` and `DELETE`, the parameters are accessible via `Request.Query`. For the rest, you can access the parameters via `Request.Form`."
  },
  {
    "path": "projects/htmx/hx-vals/hx-vals.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/modal-bootstrap/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/modal-bootstrap/Program.cs",
    "content": "using Htmx;\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <html>\r\n            <head>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n                <style>\r\n                    div[hx-trigger] {\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n            </head>\r\n            <body>\r\n                <div class=\"container\">\r\n                    <h1>Modal in Bootstrap 5</h1>\r\n                    <p>A port from this <a href=\"https://htmx.org/examples/modal-bootstrap/\">HTMX example</a></p>\r\n\r\n                    <button hx-get=\"/htmx\" hx-target=\"#designated-modal\" hx-trigger=\"click\" data-bs-toggle=\"modal\" data-bs-target=\"#designated-modal\" class=\"btn btn-primary\">Open Modal</button>\r\n\r\n                    <div id=\"designated-modal\" class=\"modal modal-blur fade\" style=\"display: none\" aria-hidden=\"false\" tabindex=\"-1\">\r\n                        <div class=\"modal-dialog modal-lg modal-dialog-centered\" role=\"document\">\r\n                            <div class=\"modal-content\"></div>\r\n                        </div>\r\n                    </div>\r\n                    <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n                    <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js\" integrity=\"sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz\" crossorigin=\"anonymous\"></script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/htmx\", (HttpRequest request, string key) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content(\r\n        $$\"\"\"\r\n        <div class=\"modal-dialog modal-dialog-centered\">\r\n            <div class=\"modal-content\">\r\n                <div class=\"modal-header\">\r\n                    <h5 class=\"modal-title\">Greetings</h5>\r\n                </div>\r\n                <div class=\"modal-body\">\r\n                    <p>The current UTC time is {{ DateTime.UtcNow }}</p>\r\n                </div>\r\n                <div class=\"modal-footer\">\r\n                    <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        \"\"\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/modal-bootstrap/README.md",
    "content": "# Show modal dialog with Bootstrap 5\r\n\r\nThis example shows how to show a modal dialog using HTMX and Bootstrap 5. It is a port of this [HTMX sample](https://htmx.org/examples/modal-bootstrap/)."
  },
  {
    "path": "projects/htmx/modal-bootstrap/modal-bootstrap.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/modal-bootstrap/modal-bootstrap.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"modal-bootstrap\", \"modal-bootstrap.csproj\", \"{B833BEC0-40FC-44DE-9E37-3CCFF4C75271}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{B833BEC0-40FC-44DE-9E37-3CCFF4C75271}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B833BEC0-40FC-44DE-9E37-3CCFF4C75271}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B833BEC0-40FC-44DE-9E37-3CCFF4C75271}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B833BEC0-40FC-44DE-9E37-3CCFF4C75271}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {E67DDC0E-B94F-4F47-A240-CEBD79C1020F}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/push-url/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/push-url/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>Push URL to browser history</h1>\r\n            <p>Click on the links below to see the URL change in the browser address bar.</p>\r\n            <ul hx-push-url=\"true\">\r\n                <li hx-get=\"/htmx/get\">GET</li>\r\n                <li hx-post=\"/htmx/post\">POST</li>\r\n                <li hx-put=\"/htmx/put\">PUT</li>\r\n                <li hx-patch=\"/htmx/patch\">PATCH</li>\r\n                <li hx-delete=\"/htmx/delete\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/get\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"GET => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPost(\"/post\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"POST => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/delete\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPut(\"/put\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PUT => {DateTime.UtcNow}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/patch\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/push-url/README.md",
    "content": "# hx-push-url attribute\r\n\r\nThis example shows how to use `hx-push-url` to push a URL into the browser location history ([doc](https://htmx.org/attributes/hx-push-url/))\r\n\r\n```html\r\n    <ul hx-push-url=\"true\">\r\n        <li hx-get=\"/htmx/get\">GET</li>\r\n        <li hx-post=\"/htmx/post\">POST</li>\r\n        <li hx-put=\"/htmx/put\">PUT</li>\r\n        <li hx-patch=\"/htmx/patch\">PATCH</li>\r\n        <li hx-delete=\"/htmx/delete\">DELETE</li>\r\n    </ul>\r\n```"
  },
  {
    "path": "projects/htmx/push-url/push-url.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/push-url/push-url.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"push-url\", \"push-url.csproj\", \"{8B829D9F-E9BC-4257-A5E0-A55CF79AB067}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{8B829D9F-E9BC-4257-A5E0-A55CF79AB067}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{8B829D9F-E9BC-4257-A5E0-A55CF79AB067}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{8B829D9F-E9BC-4257-A5E0-A55CF79AB067}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{8B829D9F-E9BC-4257-A5E0-A55CF79AB067}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {17475240-E5ED-4809-A2B4-25A5FDDAA3BD}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/query-string/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/query-string/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n            </head>\r\n            <body>\r\n            <h1>Accessing query string in HTMX</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            <ul>\r\n                <li hx-get=\"/htmx?name=Anna\">GET</li>\r\n                <li hx-post=\"/htmx?name=Anna\">POST</li>\r\n                <li hx-put=\"/htmx?name=Anna\">PUT</li>\r\n                <li hx-patch=\"/htmx?name=Anna\">PATCH</li>\r\n                <li hx-delete=\"/htmx?name=Anna\">DELETE</li>\r\n            </ul>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"GET => {DateTime.UtcNow} => {request.Query[\"name\"]}\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"POST => {DateTime.UtcNow} => {request.Query[\"name\"]}\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"DELETE => {DateTime.UtcNow} => {request.Query[\"name\"]}\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PUT => {DateTime.UtcNow} => {request.Query[\"name\"]}\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"PATCH => {DateTime.UtcNow} => {request.Query[\"name\"]}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/query-string/README.md",
    "content": "# Accessing query string in HTMX request\r\n\r\nYou can pass values via query string in all HTTP verbs supported by HTMX.\r\n\r\n```html\r\n<ul>\r\n    <li hx-get=\"/htmx?name=Anna\">GET</li>\r\n    <li hx-post=\"/htmx?name=Anna\">POST</li>\r\n    <li hx-put=\"/htmx?name=Anna\">PUT</li>\r\n    <li hx-patch=\"/htmx?name=Anna\">PATCH</li>\r\n    <li hx-delete=\"/htmx?name=Anna\">DELETE</li>\r\n</ul>\r\n```"
  },
  {
    "path": "projects/htmx/query-string/query-string.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/select/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/select/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n            </head>\r\n            <body>\r\n            <div class=\"container\">\r\n            <h1>Select element from the server response</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            \r\n            <div class=\"row mt-5\">\r\n                <div class=\"col-md-6\">\r\n                    <h2>Without hx-select</h2>\r\n                    <ul>\r\n                        <li hx-get=\"/htmx\">GET</li>\r\n                        <li hx-post=\"/htmx\">POST</li>\r\n                        <li hx-put=\"/htmx\">PUT</li>\r\n                        <li hx-patch=\"/htmx\">PATCH</li>\r\n                        <li hx-delete=\"/htmx\">DELETE</li>\r\n                    </ul>\r\n                </div>\r\n                <div class=\"col-md-6\">\r\n                    <h2>With hx-select</h2>\r\n                    <ul hx-select=\"#result\">\r\n                        <li hx-get=\"/htmx\">GET</li>\r\n                        <li hx-post=\"/htmx\">POST</li>\r\n                        <li hx-put=\"/htmx\">PUT</li>\r\n                        <li hx-patch=\"/htmx\">PATCH</li>\r\n                        <li hx-delete=\"/htmx\">DELETE</li>\r\n                    </ul>\r\n                </div>\r\n            </div>\r\n            </div>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    <div id=\"result\">\r\n    GET => {DateTime.UtcNow}\r\n    </div>\r\n    \"\"\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    <div id=\"result\">\r\n    POST => {DateTime.UtcNow}\r\n    </div>\r\n    \"\"\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    <div id=\"result\">\r\n    DELETE => {DateTime.UtcNow}\r\n    </div>\r\n    \"\"\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    <div id=\"result\">\r\n    PUT => {DateTime.UtcNow}\r\n    </div>\r\n    \"\"\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    <div id=\"result\">\r\n    PATCH => {DateTime.UtcNow}\r\n    </div>\r\n    \"\"\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/select/README.md",
    "content": "# hx-select\r\n\r\nThis example shows how to use `hx-select` to pick up specific element from server response ([doc](https://htmx.org/attributes/hx-select/))\r\n\r\n```html\r\n    <ul hx-select=\"#result\">\r\n        <li hx-get=\"/htmx\">GET</li>\r\n        <li hx-post=\"/htmx\">POST</li>\r\n        <li hx-put=\"/htmx\">PUT</li>\r\n        <li hx-patch=\"/htmx\">PATCH</li>\r\n        <li hx-delete=\"/htmx\">DELETE</li>\r\n    </ul>\r\n```"
  },
  {
    "path": "projects/htmx/select/select.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/select/select.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"select\", \"select.csproj\", \"{E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {42BA8835-D1E4-4A11-8D4F-77889EA24527}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/select-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/select-2/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n            </head>\r\n            <body>\r\n            <div class=\"container\">\r\n            <h1>Select element from the server response</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            \r\n            <div class=\"row mt-5\">\r\n                <div class=\"col-md-6\">\r\n                    <h2>Without hx-select</h2>\r\n                    <ul>\r\n                        <li hx-get=\"/htmx\">GET</li>\r\n                        <li hx-post=\"/htmx\">POST</li>\r\n                        <li hx-put=\"/htmx\">PUT</li>\r\n                        <li hx-patch=\"/htmx\">PATCH</li>\r\n                        <li hx-delete=\"/htmx\">DELETE</li>\r\n                    </ul>\r\n                </div>\r\n                <div class=\"col-md-6\">\r\n                    <h2>With hx-select</h2>\r\n                    <ul hx-select=\"#result,#result2,.results\">\r\n                        <li hx-get=\"/htmx\">GET</li>\r\n                        <li hx-post=\"/htmx\">POST</li>\r\n                        <li hx-put=\"/htmx\">PUT</li>\r\n                        <li hx-patch=\"/htmx\">PATCH</li>\r\n                        <li hx-delete=\"/htmx\">DELETE</li>\r\n                    </ul>\r\n                </div>\r\n            </div>\r\n            </div>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    <div id=\"result\">\r\n    GET => {DateTime.UtcNow}\r\n    </div>\r\n    <div id=\"result2\" class=\"mt-3\" style=\"background-color:blue;color:white;\">\r\n    GET content via #result2\r\n    </div>\r\n    \"\"\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    <div id=\"result\">\r\n    POST => {DateTime.UtcNow}\r\n    </div>\r\n    <div class=\"results mt-3\" style=\"background-color:blue;color:white;\">\r\n        POST content via .results class\r\n    </div>\r\n    <div class=\"results mt-3\" style=\"background-color:green;color:white;\">\r\n        POST content via .results class\r\n    </div>\r\n    \"\"\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    <div id=\"result\">\r\n    DELETE => {DateTime.UtcNow}\r\n    </div>\r\n    <div class=\"results mt-3\" style=\"background-color:green;color:white;\">\r\n        DELETE content via .results class\r\n    </div>\r\n    \"\"\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    \"\"\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    <div id=\"result\">\r\n    PATCH => {DateTime.UtcNow}\r\n    </div>\r\n    <div id=\"result2\" class=\"mt-3\" style=\"background-color:darkblue;color:white;\">\r\n        PATCH content via #result2\r\n    </div>\r\n    <div class=\"results mt-3\" style=\"background-color:lightblue;color:white;\">\r\n        PATCH content via .results class\r\n    </div>\r\n    \"\"\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/select-2/README.md",
    "content": "# hx-select\r\n\r\nThis example shows how to use `hx-select` with multiple selectors to pick up multiple elements from server response ([doc](https://htmx.org/attributes/hx-select/))\r\n\r\n```html\r\n <ul hx-select=\"#result,#result2,.results\">\r\n    <li hx-get=\"/htmx\">GET</li>\r\n    <li hx-post=\"/htmx\">POST</li>\r\n    <li hx-put=\"/htmx\">PUT</li>\r\n    <li hx-patch=\"/htmx\">PATCH</li>\r\n    <li hx-delete=\"/htmx\">DELETE</li>\r\n  </ul>\r\n```"
  },
  {
    "path": "projects/htmx/select-2/select.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/select-2/select.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"select\", \"select.csproj\", \"{E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E90B311D-DC5B-4DA5-8FC9-E58C0A7EADE4}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {42BA8835-D1E4-4A11-8D4F-77889EA24527}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/select-oob/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/select-oob/Program.cs",
    "content": "using Htmx;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\n\r\napp.UseAntiforgery();\r\n\r\napp.MapGet(\"/\", (HttpContext context, [FromServices] IAntiforgery anti) =>\r\n{\r\n    var token = anti.GetAndStoreTokens(context);\r\n\r\n    var html = $$\"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n                <meta name=\"htmx-config\" content='{ \"antiForgery\": {\"headerName\" : \"{{ token.HeaderName}}\", \"requestToken\" : \"{{token.RequestToken }}\" } }'>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n            </head>\r\n            <body>\r\n            <div class=\"container\">\r\n            <h1>Select element from the server response</h1>\r\n            <p>Click on the below links to see the response</p>\r\n            \r\n            <div class=\"row mt-5\">\r\n                <div class=\"col-md-6\">\r\n                    <h2>With hx-select</h2>\r\n                    <ul hx-select=\"#result,#result2,.results\">\r\n                        <li hx-get=\"/htmx\" hx-select-oob=\"#result-get\">GET</li>\r\n                        <li hx-post=\"/htmx\" hx-select-oob=\"#result-post\">POST</li>\r\n                        <li hx-put=\"/htmx\" hx-select-oob=\"#result-put\">PUT</li>\r\n                        <li hx-patch=\"/htmx\" hx-select-oob=\"#result-patch\">PATCH</li>\r\n                        <li hx-delete=\"/htmx\" hx-select-oob=\"#result-delete\">DELETE</li>\r\n                    </ul>\r\n                </div>\r\n                <div class=\"col-md-6\">\r\n                    <h2>Results</h2>\r\n                    <h3>GET</h3>\r\n                    <div id=\"result-get\" class=\"mb-3\"></div>\r\n                    <hr/>\r\n                    <h3>POST</h3>\r\n                    <div id=\"result-post\" class=\"mb-3\"></div>\r\n                    <hr/>\r\n                    <h3>PUT</h3>\r\n                    <div id=\"result-put\" class=\"mb-3\"></div>\r\n                    <hr/>\r\n                    <h3>PATCH</h3>\r\n                    <div id=\"result-patch\" class=\"mb-3\"></div>\r\n                    <hr/>\r\n                    <h3>DELETE</h3>\r\n                    <div id=\"result-delete\" class=\"mb-3\"></div>\r\n                    <hr/>\r\n                </div>\r\n            </div>\r\n            </div>\r\n            <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            <script>\r\n                document.addEventListener(\"htmx:configRequest\", (evt) => {\r\n                    let httpVerb = evt.detail.verb.toUpperCase();\r\n                    if (httpVerb === 'GET') return;\r\n                    \r\n                    let antiForgery = htmx.config.antiForgery;\r\n                    if (antiForgery) {\r\n                        // already specified on form, short circuit\r\n                        if (evt.detail.parameters[antiForgery.formFieldName])\r\n                            return;\r\n                        \r\n                        if (antiForgery.headerName) {\r\n                            evt.detail.headers[antiForgery.headerName]\r\n                                = antiForgery.requestToken;\r\n                        } else {\r\n                            evt.detail.parameters[antiForgery.formFieldName]\r\n                                = antiForgery.requestToken;\r\n                        }\r\n                    }\r\n                });\r\n            </script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\nvar htmx = app.MapGroup(\"/htmx\").AddEndpointFilter(async (context, next) =>\r\n{\r\n    if (context.HttpContext.Request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    if (context.HttpContext.Request.Method == \"GET\")\r\n        return await next(context);\r\n\r\n    await context.HttpContext.RequestServices.GetRequiredService<IAntiforgery>()!.ValidateRequestAsync(context.HttpContext);\r\n    return await next(context);\r\n});\r\n\r\nhtmx.MapGet(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    <div id=\"result\">\r\n    GET => {DateTime.UtcNow}\r\n    </div>\r\n    <div id=\"result2\" class=\"mt-3\" style=\"background-color:blue;color:white;\">\r\n    GET content via #result2\r\n    </div>\r\n    <div id=\"result-get\">\r\n        #result-get content\r\n    </div>\r\n    \"\"\");\r\n});\r\n\r\nhtmx.MapPost(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    <div id=\"result\">\r\n    POST => {DateTime.UtcNow}\r\n    </div>\r\n    <div class=\"results mt-3\" style=\"background-color:blue;color:white;\">\r\n        POST content via .results class\r\n    </div>\r\n    <div class=\"results mt-3\" style=\"background-color:green;color:white;\">\r\n        POST content via .results class\r\n    </div>\r\n    <div id=\"result-post\">\r\n        #result-post content\r\n    </div>\r\n    \"\"\");\r\n});\r\n\r\nhtmx.MapDelete(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    <div id=\"result\">\r\n    DELETE => {DateTime.UtcNow}\r\n    </div>\r\n    <div class=\"results mt-3\" style=\"background-color:green;color:white;\">\r\n        DELETE content via .results class\r\n    </div>\r\n    <div id=\"result-delete\">\r\n        #result-delete content\r\n    </div>\r\n    \"\"\");\r\n});\r\n\r\nhtmx.MapPut(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response\r\n    <div id=\"result-put\">\r\n        #result-put content\r\n    </div> \r\n    \"\"\");\r\n});\r\n\r\nhtmx.MapPatch(\"/\", (HttpRequest request) =>\r\n{\r\n    return Results.Content($\"\"\"\r\n    This is the response \r\n    <div id=\"result\">\r\n    PATCH => {DateTime.UtcNow}\r\n    </div>\r\n    <div id=\"result2\" class=\"mt-3\" style=\"background-color:darkblue;color:white;\">\r\n        PATCH content via #result2\r\n    </div>\r\n    <div class=\"results mt-3\" style=\"background-color:lightblue;color:white;\">\r\n        PATCH content via .results class\r\n    </div>\r\n    <div id=\"result-patch\">\r\n        #result-patch content\r\n    </div>\r\n    \"\"\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/htmx/select-oob/README.md",
    "content": "# hx-select-oob\r\n\r\nThis example shows how to use `hx-select-oob` to pick up a specific element from server response and swap it with element of the same selection criteria ([doc](https://htmx.org/attributes/hx-select-oob/))\r\n\r\n```html\r\n  <ul hx-select=\"#result,#result2,.results\">\r\n      <li hx-get=\"/htmx\" hx-select-oob=\"#result-get\">GET</li>\r\n      <li hx-post=\"/htmx\" hx-select-oob=\"#result-post\">POST</li>\r\n      <li hx-put=\"/htmx\" hx-select-oob=\"#result-put\">PUT</li>\r\n      <li hx-patch=\"/htmx\" hx-select-oob=\"#result-patch\">PATCH</li>\r\n      <li hx-delete=\"/htmx\" hx-select-oob=\"#result-delete\">DELETE</li>\r\n  </ul>\r\n```"
  },
  {
    "path": "projects/htmx/select-oob/select-oob.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/select-oob/select-oob.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"select-oob\", \"select-oob.csproj\", \"{44497EF1-B8AA-49AE-962B-EB0CD8A6B93C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{44497EF1-B8AA-49AE-962B-EB0CD8A6B93C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{44497EF1-B8AA-49AE-962B-EB0CD8A6B93C}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{44497EF1-B8AA-49AE-962B-EB0CD8A6B93C}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{44497EF1-B8AA-49AE-962B-EB0CD8A6B93C}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {C8179F6F-2FD2-43BF-8978-6868C48253E9}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/swap/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/swap/Program.cs",
    "content": "using Htmx;\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <html>\r\n            <head>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n                <style>\r\n                    div[hx-trigger] {\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n            </head>\r\n            <body>\r\n                <div class=\"container\">\r\n                    <h1>Various hx-swap options</h1>\r\n                    <p>You can find the full documentation <a href=\"https://htmx.org/attributes/hx-swap/\">here</a></p>\r\n                    <div class=\"row\">\r\n                        <div class=\"col-md-3 m-3\">\r\n                            <strong>innerHTML</strong><br/>\r\n                            <div hx-get=\"/htmx/innerHtml\" hx-trigger=\"click\" hx-swap=\"innerHTML\">Click Me</div>\r\n                        </div>\r\n                        <div class=\"col-md-3 m-3\">\r\n                            <strong>outerHTML</strong><br/>\r\n                            <div hx-get=\"/htmx/outerHTML\" hx-trigger=\"click\" hx-swap=\"outerHTML\">Click Me</div>\r\n                        </div>\r\n                         <div class=\"col-md-3 m-3\">\r\n                            <strong>textContent</strong><br/>\r\n                            <div hx-get=\"/htmx/textContent\" hx-trigger=\"click\" hx-swap=\"textContent\">Click Me</div>\r\n                        </div>\r\n                        <div class=\"col-md-3 m-3\">\r\n                            <strong>beforebegin</strong><br/>\r\n                            <div hx-get=\"/htmx/beforebegin\" hx-trigger=\"click\" hx-swap=\"beforebegin\">Click Me</div>\r\n                        </div>\r\n                        <div class=\"col-md-3 m-3\">\r\n                            <strong>afterbegin</strong><br/>\r\n                            <div hx-get=\"/htmx/afterbegin\" hx-trigger=\"click\" hx-swap=\"afterbegin\">Click Me</div>\r\n                        </div>\r\n                        <div class=\"col-md-3 m-3\">\r\n                            <strong>beforeend</strong><br/>\r\n                            <div hx-get=\"/htmx/beforeend\" hx-trigger=\"click\" hx-swap=\"beforeend\">Click Me</div>\r\n                        </div>\r\n                        <div class=\"col-md-3 m-3\">\r\n                            <strong>afterend</strong><br/>\r\n                            <div hx-get=\"/htmx/afterend\" hx-trigger=\"click\" hx-swap=\"afterend\">Click Me</div>\r\n                        </div>\r\n                        <div class=\"col-md-3 m-3\">\r\n                            <strong>delete</strong><br/>\r\n                            <div hx-get=\"/htmx/delete\" hx-trigger=\"click\" hx-swap=\"delete\">Click Me</div>\r\n                        </div>\r\n                        <div class=\"col-md-3 m-3\">\r\n                            <strong>none</strong><br/>\r\n                            <div hx-get=\"/htmx/none\" hx-trigger=\"click\" hx-swap=\"none\">Click Me</div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/htmx/{key}\", (HttpRequest request, string key) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return key switch \r\n    {\r\n        \"innerHtml\" => Results.Content($\"\"\"Hello {DateTime.UtcNow}. <p>Because this is hxSwap=\"innerHTML\", you can keep clicking and the swap keeps working. Check the date. </p>\"\"\"),\r\n        \"outerHTML\" => Results.Content($\"\"\"<div style=\"background-color:red;color:white\">{DateTime.UtcNow}. Click stops working now because you replaced the element itself.</div>\"\"\"),\r\n        \"textContent\" => Results.Content($\"\"\"<div style=\"background-color:blue;color:white\">{DateTime.UtcNow}. Everything is treated as text.</div>\"\"\"),\r\n        \"beforebegin\" => Results.Content($\"\"\"<div style=\"background-color:blue;color:white\">{DateTime.UtcNow}. Click \"Click Me\".</div>\"\"\"),\r\n        \"afterbegin\" => Results.Content($\"\"\"<div style=\"background-color:magenta;color:white\">{DateTime.UtcNow}. You can click here</div>\"\"\"),\r\n        \"beforeend\" => Results.Content($\"\"\"<div style=\"background-color:brown;color:white\">{DateTime.UtcNow}. You can click here.</div>\"\"\"),\r\n        \"afterend\" => Results.Content($\"\"\"<div style=\"background-color:green;color:white\">{DateTime.UtcNow}. Click \"Click Me\"</div>\"\"\"),\r\n        _ => Results.Content(\"\")\r\n    };\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/swap/README.md",
    "content": "# HTMX hx-swap\r\n\r\nThis example shows how to control where the response from the server will be swapped related to the target using `hx-swap` ([doc](https://htmx.org/attributes/hx-swap/)). \r\n\r\n```html\r\n    <div class=\"row\">\r\n        <div class=\"col-md-3 m-3\">\r\n            <strong>innerHTML</strong><br/>\r\n            <div hx-get=\"/htmx/innerHtml\" hx-trigger=\"click\" hx-swap=\"innerHTML\">Click Me</div>\r\n        </div>\r\n        <div class=\"col-md-3 m-3\">\r\n            <strong>outerHTML</strong><br/>\r\n            <div hx-get=\"/htmx/outerHTML\" hx-trigger=\"click\" hx-swap=\"outerHTML\">Click Me</div>\r\n        </div>\r\n            <div class=\"col-md-3 m-3\">\r\n            <strong>textContent</strong><br/>\r\n            <div hx-get=\"/htmx/textContent\" hx-trigger=\"click\" hx-swap=\"textContent\">Click Me</div>\r\n        </div>\r\n        <div class=\"col-md-3 m-3\">\r\n            <strong>beforebegin</strong><br/>\r\n            <div hx-get=\"/htmx/beforebegin\" hx-trigger=\"click\" hx-swap=\"beforebegin\">Click Me</div>\r\n        </div>\r\n        <div class=\"col-md-3 m-3\">\r\n            <strong>afterbegin</strong><br/>\r\n            <div hx-get=\"/htmx/afterbegin\" hx-trigger=\"click\" hx-swap=\"afterbegin\">Click Me</div>\r\n        </div>\r\n        <div class=\"col-md-3 m-3\">\r\n            <strong>beforeend</strong><br/>\r\n            <div hx-get=\"/htmx/beforeend\" hx-trigger=\"click\" hx-swap=\"beforeend\">Click Me</div>\r\n        </div>\r\n        <div class=\"col-md-3 m-3\">\r\n            <strong>afterend</strong><br/>\r\n            <div hx-get=\"/htmx/afterend\" hx-trigger=\"click\" hx-swap=\"afterend\">Click Me</div>\r\n        </div>\r\n        <div class=\"col-md-3 m-3\">\r\n            <strong>delete</strong><br/>\r\n            <div hx-get=\"/htmx/delete\" hx-trigger=\"click\" hx-swap=\"delete\">Click Me</div>\r\n        </div>\r\n        <div class=\"col-md-3 m-3\">\r\n            <strong>none</strong><br/>\r\n            <div hx-get=\"/htmx/none\" hx-trigger=\"click\" hx-swap=\"none\">Click Me</div>\r\n        </div>\r\n    </div>\r\n```\r\n\r\n"
  },
  {
    "path": "projects/htmx/swap/swap.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/swap-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/swap-2/Program.cs",
    "content": "using Htmx;\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <html>\r\n            <head>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n                <style>\r\n                    div[hx-trigger] {\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n            </head>\r\n            <body>\r\n                <div class=\"container\">\r\n                    <h1>hx-swap-oob for out of band swap</h1>\r\n                    <p>You can find the full documentation <a href=\"https://htmx.org/attributes/hx-swap/\">here</a></p>\r\n                    <div class=\"row\">\r\n                        <div class=\"col-md-3 m-3\">\r\n                            <strong>innerHTML</strong><br/>\r\n                            <div hx-get=\"/htmx/innerHtml\" hx-trigger=\"click\" hx-swap=\"innerHTML\">Click Me</div>\r\n                        </div>\r\n                        <div id=\"oob-target\">This will be replaced once you click above</div>\r\n                    </div>\r\n                </div>\r\n                <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/htmx/{key}\", (HttpRequest request, string key) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return key switch \r\n    {\r\n        \"innerHtml\" => Results.Content($\"\"\"\r\n        Hello {DateTime.UtcNow}. <p>Because this is hxSwap=\"innerHTML\", you can keep clicking and the swap keeps working. Check the date. </p>\r\n        <div id=\"oob-target\" hx-swap-oob=\"true\">New out of band message {DateTime.UtcNow}</div>\r\n        \"\"\"),\r\n        _ => Results.Content(\"\")\r\n    };\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/swap-2/README.md",
    "content": "# HTMX hx-swap-oob to perform out of band swap \r\n\r\nThis example shows how to enable out of band swap using `hx-swap-oob` ([doc](https://htmx.org/docs/#oob_swaps)). \r\n\r\nThe attribute is used in the response by the server. \r\n\r\n```csharp\r\n    return key switch \r\n    {\r\n        \"innerHtml\" => Results.Content($\"\"\"\r\n        Hello {DateTime.UtcNow}. <p>Because this is hxSwap=\"innerHTML\", you can keep clicking and the swap keeps working. Check the date. </p>\r\n        <div id=\"oob-target\" hx-swap-oob=\"true\">New out of band message {DateTime.UtcNow}</div>\r\n        \"\"\"),\r\n        _ => Results.Content(\"\")\r\n    };\r\n```"
  },
  {
    "path": "projects/htmx/swap-2/swap-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/swap-2/swap-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"swap-2\", \"swap-2.csproj\", \"{5286B386-4038-4A30-B51D-2B6829EE5DD1}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{5286B386-4038-4A30-B51D-2B6829EE5DD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{5286B386-4038-4A30-B51D-2B6829EE5DD1}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{5286B386-4038-4A30-B51D-2B6829EE5DD1}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{5286B386-4038-4A30-B51D-2B6829EE5DD1}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {DEFC7225-CEAC-4DC7-866C-35D2C4EDF2DC}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/target/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/target/Program.cs",
    "content": "using Htmx;\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <html>\r\n            <head>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n                <style>\r\n                    div[hx-trigger] {\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n            </head>\r\n            <body>\r\n                <div class=\"container\">\r\n                    <h1>Various hx-target options</h1>\r\n                    <p>You can find the full documentation <a href=\"https://htmx.org/docs/#targets\">here</a></p>\r\n                    <div class=\"row\">\r\n                        <div class=\"col-md-3\">\r\n                            <ul>\r\n                                <li>\r\n                                    <strong>this keyword</strong><br/>\r\n                                    <div hx-get=\"/htmx/this-keyword\" hx-trigger=\"click\" hx-target=\"this\">Click Me</div>\r\n                                </li>\r\n                                <li>\r\n                                    <strong>Tag Selector</strong><br/>\r\n                                    <div hx-get=\"/htmx/tag-selector\" hx-trigger=\"click\" hx-target=\"article\">Click Me</div>\r\n                                </li>\r\n                                <li>\r\n                                    <strong>Id Selector</strong><br/>\r\n                                    <div hx-get=\"/htmx/id-selector\" hx-trigger=\"click\" hx-target=\"#message\">Click Me</div>\r\n                                </li>\r\n                                <li>\r\n                                    <strong>Class Selector</strong><br/>\r\n                                    <div hx-get=\"/htmx/class-selector\" hx-trigger=\"click\" hx-target=\".info\">Click Me</div>\r\n                                </li>\r\n                            </ul>\r\n                        </div>\r\n                        <div class=\"col-md-6\">\r\n                            <article class=\"mb-3\" style=\"background-color:green;color:white;\">article tag</article>\r\n                            <div class=\"mb-3\" id=\"message\" style=\"background-color:magenta;color:white;\">div#message</div>\r\n                            <div class=\"mb-3 info\" style=\"background-color:blue;color:white;\">div.info</div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/htmx/{key}\", (HttpRequest request, string key) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return key switch \r\n    {\r\n        \"this-keyword\" => Results.Content($\"\"\"Hello {DateTime.UtcNow}.<p> This content appears inside the element where hx-target attribute appears.</p>\"\"\"),\r\n        \"tag-selector\" => Results.Content($\"\"\"Hello {DateTime.UtcNow}.<p> This content appears inside the article tag.</p>\"\"\"),\r\n        \"id-selector\" => Results.Content($\"\"\"Hello {DateTime.UtcNow}.<p> This content appears inside a div with the matching id.</p>\"\"\"),\r\n        \"class-selector\" => Results.Content($\"\"\"Hello {DateTime.UtcNow}.<p> This content appears inside a div with the matching class.</p>\"\"\"),\r\n        _ => Results.Content(\"\")\r\n    };\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/target/README.md",
    "content": "# HTMX hx-target\r\n\r\nThis example shows how to specify the target element where the response from the server will be swapped using `hx-target` ([doc](https://htmx.org/docs/#targets)). \r\n\r\n```html\r\n    <ul>\r\n        <li>\r\n            <strong>this keyword</strong><br/>\r\n            <div hx-get=\"/htmx/this-keyword\" hx-trigger=\"click\" hx-target=\"this\">Click Me</div>\r\n        </li>\r\n        <li>\r\n            <strong>Tag Selector</strong><br/>\r\n            <div hx-get=\"/htmx/tag-selector\" hx-trigger=\"click\" hx-target=\"article\">Click Me</div>\r\n        </li>\r\n        <li>\r\n            <strong>Id Selector</strong><br/>\r\n            <div hx-get=\"/htmx/id-selector\" hx-trigger=\"click\" hx-target=\"#message\">Click Me</div>\r\n        </li>\r\n        <li>\r\n            <strong>Class Selector</strong><br/>\r\n            <div hx-get=\"/htmx/class-selector\" hx-trigger=\"click\" hx-target=\".info\">Click Me</div>\r\n        </li>\r\n    </ul>\r\n```\r\n\r\n"
  },
  {
    "path": "projects/htmx/target/target.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/target/target.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"target\", \"target.csproj\", \"{520425A0-9ECB-4E43-8621-87A18E2581D1}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{520425A0-9ECB-4E43-8621-87A18E2581D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{520425A0-9ECB-4E43-8621-87A18E2581D1}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{520425A0-9ECB-4E43-8621-87A18E2581D1}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{520425A0-9ECB-4E43-8621-87A18E2581D1}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {EE0023C7-3143-4114-AC78-3A825AC5AD60}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/trigger-every/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/trigger-every/Program.cs",
    "content": "using Htmx;\r\n\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    div[hx-get]{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n            </head>\r\n            <body>\r\n                <div hx-get=\"/htmx\" hx-trigger=\"every 1s\">..wait</div>\r\n                <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/htmx/\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"{DateTime.UtcNow}\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/trigger-every/README.md",
    "content": "# HTMX polling using hx-trigger every \r\n\r\nThis example shows `every` trigger that make request every x specified time([doc](https://htmx.org/docs/#polling)). \r\n\r\n```html\r\n    <div hx-get=\"/htmx\" hx-trigger=\"every 1s\">..wait</div>\r\n```\r\n\r\n"
  },
  {
    "path": "projects/htmx/trigger-every/trigger-every.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/trigger-every/trigger-every.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"trigger-every\", \"trigger-every.csproj\", \"{F6AFDD5E-AB62-481B-88A8-8624C5C8A3F6}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{F6AFDD5E-AB62-481B-88A8-8624C5C8A3F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{F6AFDD5E-AB62-481B-88A8-8624C5C8A3F6}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{F6AFDD5E-AB62-481B-88A8-8624C5C8A3F6}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F6AFDD5E-AB62-481B-88A8-8624C5C8A3F6}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {46A0146E-B699-4A08-94D5-881FF598E68E}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/trigger-load/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/trigger-load/Program.cs",
    "content": "using Htmx;\r\n\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <html>\r\n            <body>\r\n                <div hx-get=\"/htmx\" hx-trigger=\"load\"></div>\r\n\r\n                <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/htmx\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content(\"Hello world from HTMX\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/trigger-load/Readme.md",
    "content": "# HTMX hx-trigger load\r\n\r\nThis example shows `load` event trigger ([doc](https://htmx.org/docs/#special-events)). \r\n\r\n```html\r\n<div hx-get=\"/htmx\" hx-trigger=\"load\"></div>\r\n```\r\n\r\n"
  },
  {
    "path": "projects/htmx/trigger-load/trigger-load.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/trigger-load/trigger-load.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"trigger-load\", \"trigger-load.csproj\", \"{07CC58E5-2CA2-496B-9846-533400BC8293}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{07CC58E5-2CA2-496B-9846-533400BC8293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{07CC58E5-2CA2-496B-9846-533400BC8293}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{07CC58E5-2CA2-496B-9846-533400BC8293}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{07CC58E5-2CA2-496B-9846-533400BC8293}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {8297DD33-555D-459C-8028-85EB14B37D8F}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/trigger-load-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/trigger-load-2/Program.cs",
    "content": "using Htmx;\r\n\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <html>\r\n            <body>\r\n                <div hx-get=\"/htmx\" hx-trigger=\"load delay:1s\" hx-swap=\"outerHTML\"></div>\r\n\r\n                <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/htmx\", (HttpRequest request) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"\"\"<div hx-get=\"/htmx\" hx-trigger=\"load delay:1s\" hx-swap=\"outerHTML\">{DateTime.UtcNow}</div>\"\"\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/trigger-load-2/README.md",
    "content": "# Load polling using hx-trigger load with delay\r\n\r\nThis example shows `load` event trigger ([doc](https://htmx.org/docs/#special-events)) with `delay` event modifier and [`hx-swap`](https://htmx.org/attributes/hx-swap/). \r\n\r\n```html\r\n<div hx-get=\"/htmx\" hx-trigger=\"load delay:1s\" hx-swap=\"outerHTML\"></div>\r\n```\r\n\r\n`hx-swap=\"outerHTML` tells HTMX to replace the entire target element with the response. You will see at the API that we return the same exect element with additional content. HTMX will them process this new content and make another call in (so on and so forth).\r\n\r\n```csharp\r\n    return Results.Content($\"\"\"<div hx-get=\"/htmx\" hx-trigger=\"load delay:1s\" hx-swap=\"outerHTML\">{DateTime.UtcNow}</div>\"\"\");\r\n```\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/trigger-load-2/trigger-load-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/trigger-load-2/trigger-load-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"trigger-load-2\", \"trigger-load-2.csproj\", \"{25128269-31E3-44F8-8BF2-75B7E26205C5}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{25128269-31E3-44F8-8BF2-75B7E26205C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{25128269-31E3-44F8-8BF2-75B7E26205C5}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{25128269-31E3-44F8-8BF2-75B7E26205C5}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{25128269-31E3-44F8-8BF2-75B7E26205C5}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {21B3E906-6BB9-4A0C-A78E-013498E936CF}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/htmx/trigger-once/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/htmx/trigger-once/Program.cs",
    "content": "using Htmx;\r\n\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <style>\r\n                    li[hx-get]{\r\n                        cursor:pointer;\r\n                    }\r\n                </style>\r\n            </head>\r\n            <body>\r\n                <h1>Click once</h1>\r\n                <ul>\r\n                    <li hx-get=\"/htmx/once\" hx-trigger=\"click once\">Click</li>\r\n                    <li hx-get=\"/htmx/unlimited\" hx-trigger=\"click\">Click</li>\r\n                </ul>    \r\n                <script src=\"https://unpkg.com/htmx.org@2.0.0\" integrity=\"sha384-wS5l5IKJBvK6sPTKa2WZ1js3d947pvWXbPJ1OmWfEuxLgeHcEbjUUA5i9V5ZkpCw\" crossorigin=\"anonymous\"></script>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/htmx/{key}\", (HttpRequest request, string key) =>\r\n{\r\n    if (request.IsHtmx() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return key switch \r\n    {\r\n        \"once\" => Results.Content($\"This is the only result you are going to get {DateTime.UtcNow}\"),\r\n        \"unlimited\" => Results.Content($\"You can continue to click {DateTime.UtcNow}\"),\r\n        _ => Results.Content(\"\")\r\n    };\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/htmx/trigger-once/README.md",
    "content": "# HTMX hx-trigger click once\r\n\r\nThis example shows `click` event trigger with modifier `once`([doc](https://htmx.org/docs/#trigger-modifiers)). \r\n\r\n```html\r\n<div hx-get=\"/htmx\" hx-trigger=\"click once\"></div>\r\n```\r\n\r\n"
  },
  {
    "path": "projects/htmx/trigger-once/trigger-once.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Htmx\" Version=\"1.8.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/htmx/trigger-once/trigger-once.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"trigger-once\", \"trigger-once.csproj\", \"{45E7D41F-79DB-43E0-9E1B-ADCC813CCE2F}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{45E7D41F-79DB-43E0-9E1B-ADCC813CCE2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{45E7D41F-79DB-43E0-9E1B-ADCC813CCE2F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{45E7D41F-79DB-43E0-9E1B-ADCC813CCE2F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{45E7D41F-79DB-43E0-9E1B-ADCC813CCE2F}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {2B3199E7-51B1-4C12-800A-5BF9F168D5AB}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/httpclientfactory/README.md",
    "content": "# IHttpClientFactory (4)\r\n\r\n  * [HttpClientFactory](httpclientfactory-1)\r\n\r\n    Now you can have centrally managed instance of HttpClient using ```IHttpClientFactory``` via dependency injection.\r\n\r\n  * [HttpClientFactory - 2](httpclientfactory-2)\r\n\r\n    Use preconfigured `HttpClient` via `IHttpClientFactory`.\r\n\r\n  * [HttpClientFactory - 3](httpclientfactory-3)\r\n\r\n    Use `IServiceCollection.AddHttpClient` to provide `HttpClient` for your classes.\r\n\r\n  * [HttpClientFactory - 4](httpclientfactory-4)\r\n\r\n    Use `IServiceCollection.AddHttpClient` to provide `HttpClient` for interface-implementing classes.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/httpclientfactory/build.bat",
    "content": "dotnet build httpclientfactory-1\r\ndotnet build httpclientfactory-2\r\ndotnet build httpclientfactory-3\r\ndotnet build httpclientfactory-4"
  },
  {
    "path": "projects/httpclientfactory/build.sh",
    "content": "#!/bin/bash\ndotnet build httpclientfactory-1\ndotnet build httpclientfactory-2\ndotnet build httpclientfactory-3\ndotnet build httpclientfactory-4\n"
  },
  {
    "path": "projects/httpclientfactory/httpclientfactory-1/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddHttpClient();\r\n\r\nvar app = builder.Build();\r\n\r\napp.Run(async context =>\r\n{\r\n    var httpClient = context.RequestServices.GetService<IHttpClientFactory>();\r\n    var client = httpClient.CreateClient();\r\n    var result = await client.GetStringAsync(\"http://scripting.com/rss.xml\");\r\n\r\n    context.Response.Headers.Append(\"Content-Type\", \"application/rss+xml\");\r\n    await context.Response.WriteAsync(result);\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/httpclientfactory/httpclientfactory-1/httpclientfactory.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/httpclientfactory/httpclientfactory-2/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddHttpClient(\"rss\", c =>\r\n    {\r\n        // Configure your http client here\r\n        c.DefaultRequestHeaders.Add(\"Accept\", \"application/rss+xml\");\r\n    });\r\n\r\nvar app = builder.Build();\r\n\r\napp.Run(async context =>\r\n    {\r\n        var httpClient = context.RequestServices.GetService<IHttpClientFactory>();\r\n        var client = httpClient.CreateClient(\"rss\"); // use the preconfigured http client\r\n        var result = await client.GetStringAsync(\"http://scripting.com/rss.xml\");\r\n\r\n        context.Response.Headers.Append(\"Content-Type\", \"application/rss+xml\");\r\n        await context.Response.WriteAsync(result);\r\n    });\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/httpclientfactory/httpclientfactory-2/httpclientfactory-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/httpclientfactory/httpclientfactory-3/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/httpclientfactory-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/httpclientfactory/httpclientfactory-3/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/httpclientfactory-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/httpclientfactory/httpclientfactory-3/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddTransient<RssReader>();\r\nbuilder.Services.AddHttpClient<RssReader>();\r\n       \r\nvar app = builder.Build();\r\n\r\napp.Run(async context =>\r\n    {\r\n        var rss = context.RequestServices.GetService<RssReader>();\r\n        var result = await rss.Get(\"http://scripting.com/rss.xml\");\r\n\r\n        context.Response.Headers.Append(\"Content-Type\", \"application/rss+xml\");\r\n        await context.Response.WriteAsync(result);\r\n    });\r\n\r\napp.Run();\r\n\r\n\r\npublic class RssReader\r\n{\r\n    readonly HttpClient _client;\r\n\r\n    public RssReader(HttpClient client)\r\n    {\r\n        _client = client;\r\n    }\r\n\r\n    public Task<string> Get(string url) => _client.GetStringAsync(url);\r\n}"
  },
  {
    "path": "projects/httpclientfactory/httpclientfactory-3/httpclientfactory-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/httpclientfactory/httpclientfactory-4/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/httpclientfactory-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/httpclientfactory/httpclientfactory-4/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/httpclientfactory-3.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/httpclientfactory/httpclientfactory-4/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddTransient<RssReader>();\r\nbuilder.Services.AddHttpClient<IRss, RssReader>();\r\n       \r\nvar app = builder.Build();\r\n\r\napp.Run(async context =>\r\n{\r\n    var rss = context.RequestServices.GetService<IRss>();\r\n    var result = await rss.Get(\"http://scripting.com/rss.xml\");\r\n\r\n    context.Response.Headers.Append(\"Content-Type\", \"application/rss+xml\");\r\n    await context.Response.WriteAsync(result);\r\n});\r\n\r\napp.Run();\r\n\r\npublic interface IRss\r\n{\r\n    Task<string> Get(string url);\r\n}\r\n\r\npublic class RssReader : IRss\r\n{\r\n    readonly HttpClient _client;\r\n\r\n    public RssReader(HttpClient client)\r\n    {\r\n        _client = client;\r\n    }\r\n\r\n    public Task<string> Get(string url) => _client.GetStringAsync(url);\r\n}"
  },
  {
    "path": "projects/httpclientfactory/httpclientfactory-4/httpclientfactory-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/hydro/README.md",
    "content": "# Hydro Framework\r\n\r\n* [Hello World](hello-world)\r\n\r\n  This sample introduces the usage of a Hydro component.\r\n\r\n* [Child to Parent Event](event-child-parent)\r\n \r\n  This sample introduces the usage of dispatching event from child to parent component.\r\n\r\n* [Global event](event-global)\r\n\r\n  This sample introduces the usage of dispatching global event so any subscribing component can receive it. \r\n\r\n* [Global event subject](event-global-subject)\r\n  \r\n  This sample demonstrates the ability to filter events based on specific subject.\r\n\r\n* [Cookies](cookies)\r\n\r\n  This sample shows how to set and delete a cookie from a Hydro component. \r\n\r\n* [Component-1](component-1)\r\n\r\n  This sample demonstrates how Hydro support nested components, how the data flow from parent to child, and how to communicate change from parent to child via **key** parameter.\r\n\r\n* [Component-2](component-2)\r\n\r\n  This sample introduces the subtelties of component nested rendering.\r\n\r\n* [Component-3](component-3)\r\n\r\n  This sample introduces how you can hook into Hydro's component lifecyle via `Mount/MountAsync` and 'Render/RenderAsync'."
  },
  {
    "path": "projects/hydro/build.bat",
    "content": "dotnet build component-1\r\ndotnet build component-2\r\ndotnet build component-3\r\ndotnet build cookies\r\ndotnet build event-child-parent\r\ndotnet build event-global\r\ndotnet build event-global-subject\r\ndotnet build hello-world"
  },
  {
    "path": "projects/hydro/build.sh",
    "content": "#!/bin/bash\ndotnet build component-1\ndotnet build component-2\ndotnet build component-3\ndotnet build cookies\ndotnet build event-child-parent\ndotnet build event-global\ndotnet build event-global-subject\ndotnet build hello-world\n"
  },
  {
    "path": "projects/hydro/component-1/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#9a3acf\",\r\n        \"activityBar.background\": \"#9a3acf\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#4d3813\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#9a3acf\",\r\n        \"statusBar.background\": \"#7e2aac\",\r\n        \"statusBar.debuggingBackground\": \"#58ac2a\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#9a3acf\",\r\n        \"statusBarItem.remoteBackground\": \"#7e2aac\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#7e2aac\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#7e2aac99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#7e2aac\"\r\n}"
  },
  {
    "path": "projects/hydro/component-1/Pages/Components/Container.cshtml",
    "content": "@model Component1.Pages.Components.Container\r\n\r\n<div>\r\n    Container `Model.Text` property: <span style=\"color:red;\">@Model.Text</span>\r\n    <br>\r\n    This button below will change the `Model.Text` property of this component to current UTC time. Both components below receive the same `Model.Text` property.<br>\r\n    <button on:click=\"@(() => Model.Show(DateTime.UtcNow.ToString()))\" class=\"btn btn-primary\">Show</button>\r\n    <div class=\"row mt-3\">\r\n        <div class=\"col-md-6\">\r\n            <div class=\"card\">\r\n                <div class=\"card-body\">\r\n                    <p>This declaration of message component does not use <strong>key</strong> attribute. Without the key attribute, the modification of the parent property is not propagated to the child component.</p>\r\n                    <message text=\"@Model.Text\"></message>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <div class=\"col-md-6\">\r\n            <div class=\"card\">\r\n                <div class=\"card-body\">\r\n                    <p>This declaration of message component does use <strong>key</strong> attribute</p>\r\n                    <message text=\"@Model.Text\" key=\"@Model.Text\"></message>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/hydro/component-1/Pages/Components/Container.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace Component1.Pages.Components;\r\n\r\npublic class Container : HydroComponent\r\n{  \r\n    public string Text { get; set; } = \"Hello, World!\";  \r\n\r\n    public void Show(string text)\r\n    {\r\n        Text = text;\r\n    }\r\n}"
  },
  {
    "path": "projects/hydro/component-1/Pages/Components/Message.cshtml",
    "content": "@model Component1.Pages.Components.Message\r\n\r\n<div>\r\n    <h1>Text Property: @Model.Text</h1>\r\n    <h2>Text2 Property: @Model.Text2</h2>\r\n\r\n    <button on:click=\"@(() => Model.TriggerRender())\" class=\"btn btn-primary\">Trigger</button>\r\n</div>"
  },
  {
    "path": "projects/hydro/component-1/Pages/Components/Message.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace Component1.Pages.Components;\r\npublic class Message : HydroComponent\r\n{  \r\n    public string Text { get; set; }   \r\n\r\n    public string Text2 { get; set;}\r\n\r\n    public void TriggerRender()\r\n    {\r\n        Text2 = \"Render Triggered\";\r\n    }\r\n}"
  },
  {
    "path": "projects/hydro/component-1/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n@using Hydro\r\n@{\r\n    Layout = \"/Pages/Shared/_Layout.cshtml\";\r\n}\r\n\r\n<h2>This container demonstrates changing the property of the parent impacts the child components</h2>\r\n<container></container>\r\n"
  },
  {
    "path": "projects/hydro/component-1/Pages/Shared/_Layout.cshtml",
    "content": "<!doctype html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta name=\"hydro-config\" />\r\n    <script defer src=\"~/hydro/hydro.js\" asp-append-version=\"true\"></script>\r\n    <script defer src=\"~/hydro/alpine.js\" asp-append-version=\"true\"></script>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n    <title>Component Data Flow</title>\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        @RenderBody()\r\n    </div>\r\n    <script src=\"/_framework/aspnetcore-browser-refresh.js\"></script>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/hydro/component-1/Pages/_ViewImports.cshtml",
    "content": "@addTagHelper *, Hydro\r\n@addTagHelper *, Component1\r\n@using Component1.Pages.Components"
  },
  {
    "path": "projects/hydro/component-1/Program.cs",
    "content": "using Hydro.Configuration;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddHydro(); // Hydro\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\napp.UseRouting();\r\napp.MapRazorPages();\r\napp.UseHydro(); // Hydro\r\n\r\napp.Run();"
  },
  {
    "path": "projects/hydro/component-1/README.md",
    "content": "# Component Nesting \r\n\r\nThis sample introduces how Hydro supports component nesting and how data propagation flows from parent to child components and how communicate change from parent to child components using **key** parameter."
  },
  {
    "path": "projects/hydro/component-1/component-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <AssemblyName>Component1</AssemblyName>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Hydro\" Version=\"1.2.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/hydro/component-1/component-1.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"component-1\", \"component-1.csproj\", \"{6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {976A9C22-46CC-46BE-9F7C-F7F0D5A75F3F}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/hydro/component-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#9a3acf\",\r\n        \"activityBar.background\": \"#9a3acf\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#4d3813\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#9a3acf\",\r\n        \"statusBar.background\": \"#7e2aac\",\r\n        \"statusBar.debuggingBackground\": \"#58ac2a\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#9a3acf\",\r\n        \"statusBarItem.remoteBackground\": \"#7e2aac\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#7e2aac\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#7e2aac99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#7e2aac\"\r\n}"
  },
  {
    "path": "projects/hydro/component-2/Pages/Components/Container.cshtml",
    "content": "@model Component1.Pages.Components.Container\r\n\r\n<div>\r\n    <p>\r\n        Container `Model.Text` property: <span style=\"color:red;\">@Model.Text</span>\r\n    </p>\r\n    <ul>\r\n        <li>\r\n            This is a component called <b>container.</b> It has one child component, <b>message</b>.</li>\r\n        <li>\r\n            <b>message</b> component has two properties, Text and Text2, and uses two instances of <b>inner-message</b>\r\n            component.\r\n        </li>\r\n        <li>\r\n            Each <b>inner-message</b> component receives data from Text1 and Text2 properties respectively.\r\n        </li>\r\n    </ul>\r\n    <p>\r\n        This button below will change the `Model.Text` property of this component to current UTC time.<br>\r\n    </p>\r\n    <button on:click=\"@(() => Model.Show(DateTime.UtcNow.ToString()))\" class=\"btn btn-primary\">Show Current\r\n        Time</button>\r\n    <div class=\"row mt-3\">\r\n        <div class=\"col-md-8\">\r\n            <div class=\"card\">\r\n                <div class=\"card-body\">\r\n                    <message text=\"@Model.Text\" key=\"@Model.Text\"></message>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/hydro/component-2/Pages/Components/Container.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace Component1.Pages.Components;\r\n\r\npublic class Container : HydroComponent\r\n{  \r\n    public string Text { get; set; } = \"Hello, World!\";  \r\n\r\n    public void Show(string text)\r\n    {\r\n        Text = text;\r\n    }\r\n}"
  },
  {
    "path": "projects/hydro/component-2/Pages/Components/InnerMessage.cs",
    "content": "using Hydro;\r\n\r\nnamespace Component1.Pages.Components;\r\npublic class InnerMessage : HydroComponent\r\n{  \r\n    public string Text { get; set; }   \r\n}"
  },
  {
    "path": "projects/hydro/component-2/Pages/Components/InnerMessage.cshtml",
    "content": "@model Component1.Pages.Components.InnerMessage\r\n\r\n<div style=\"color:red;\">\r\n    Text Property: @Model.Text\r\n</div>"
  },
  {
    "path": "projects/hydro/component-2/Pages/Components/Message.cshtml",
    "content": "@model Component1.Pages.Components.Message\r\n\r\n<div>\r\n    <h1>Text Property: @Model.Text</h1>\r\n    <h2>Text2 Property: @Model.Text2</h2>\r\n\r\n    <button on:click=\"@(() => Model.TriggerRender())\" class=\"btn btn-primary\">Trigger Text2</button>\r\n\r\n\r\n    <br/>\r\n    <div class=\"row mt-3\">\r\n        <div class=\"col-md-6\">\r\n            <h3>Inner Message Component @@Model.Text</h3>\r\n            <p>In this case we do not need at use key property for inner-message component because the parent <b>message</b> component gets refreshed by <b>container</b>.</p>\r\n            <div style=\"background-color:yellow;padding:5px;\">\r\n                <inner-message text=\"@Model.Text\"></inner-message>\r\n            </div>\r\n        </div>\r\n        <div class=\"col-md-6\">\r\n            <h3>Inner Message Component @@Model.Text2</h3>\r\n            <p>In this case we need to use key property because @@Model.Text2 is changed by parent <b>message</b> component.</p>\r\n            <inner-message text=\"@Model.Text2\" key=\"@Model.Text2\"></inner-message>\r\n        </div>\r\n    </div>\r\n</div>"
  },
  {
    "path": "projects/hydro/component-2/Pages/Components/Message.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace Component1.Pages.Components;\r\npublic class Message : HydroComponent\r\n{  \r\n    public string Text { get; set; }   \r\n\r\n    public string Text2 { get; set;}\r\n\r\n    public void TriggerRender()\r\n    {\r\n        Text2 = \"Render Triggered\";\r\n    }\r\n}"
  },
  {
    "path": "projects/hydro/component-2/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n@using Hydro\r\n@{\r\n    Layout = \"/Pages/Shared/_Layout.cshtml\";\r\n}\r\n\r\n<h2>This container demonstrates changing the property of the parent impacts nested components. Here we uses two level nested components. The same principle applies to unlimited nested components.</h2>\r\n<container></container>\r\n"
  },
  {
    "path": "projects/hydro/component-2/Pages/Shared/_Layout.cshtml",
    "content": "<!doctype html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta name=\"hydro-config\" />\r\n    <script defer src=\"~/hydro/hydro.js\" asp-append-version=\"true\"></script>\r\n    <script defer src=\"~/hydro/alpine.js\" asp-append-version=\"true\"></script>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n    <title>Component Data Flow</title>\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        @RenderBody()\r\n    </div>\r\n    <script src=\"/_framework/aspnetcore-browser-refresh.js\"></script>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/hydro/component-2/Pages/_ViewImports.cshtml",
    "content": "@addTagHelper *, Hydro\r\n@addTagHelper *, Component1\r\n@using Component1.Pages.Components"
  },
  {
    "path": "projects/hydro/component-2/Program.cs",
    "content": "using Hydro.Configuration;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddHydro(); // Hydro\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\napp.UseRouting();\r\napp.MapRazorPages();\r\napp.UseHydro(); // Hydro\r\n\r\napp.Run();"
  },
  {
    "path": "projects/hydro/component-2/README.md",
    "content": "# Component Nesting \r\n\r\nThis sample introduces the subtleties of component nested rendering."
  },
  {
    "path": "projects/hydro/component-2/component-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <AssemblyName>Component1</AssemblyName>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Hydro\" Version=\"1.2.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/hydro/component-2/component-1.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"component-1\", \"component-1.csproj\", \"{6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{6DE940BA-BC4F-8C35-6BC7-91FB1B296E15}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {976A9C22-46CC-46BE-9F7C-F7F0D5A75F3F}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/hydro/component-3/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#9a3acf\",\r\n        \"activityBar.background\": \"#9a3acf\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#4d3813\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#9a3acf\",\r\n        \"statusBar.background\": \"#7e2aac\",\r\n        \"statusBar.debuggingBackground\": \"#58ac2a\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#9a3acf\",\r\n        \"statusBarItem.remoteBackground\": \"#7e2aac\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#7e2aac\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#7e2aac99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#7e2aac\"\r\n}"
  },
  {
    "path": "projects/hydro/component-3/Pages/Components/Container.cshtml",
    "content": "@model Component3.Pages.Components.Container\r\n\r\n\r\n<div>\r\n    <div class=\"row mt-3\">\r\n        <div class=\"col-md-6\">\r\n            <div class=\"card\">\r\n                <div class=\"card-body\">\r\n                    <p>This demonstrates that `MountAsync` is called after `Mount` and `RenderAsync` is called after `Render`.</p>\r\n                    <message></message>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <div class=\"col-md-6\">\r\n            <div class=\"card\">\r\n                <div class=\"card-body\">\r\n                    <p>Here we just hook into `Mount` and `Render`.</p>\r\n                    <message2></message2>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/hydro/component-3/Pages/Components/Container.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace Component3.Pages.Components;\r\n\r\npublic class Container : HydroComponent\r\n{  \r\n}"
  },
  {
    "path": "projects/hydro/component-3/Pages/Components/Message.cshtml",
    "content": "@model Component3.Pages.Components.Message\r\n\r\n<div>\r\n    <h1>Text Property: @Model.Text</h1>\r\n    <h2>Text2 Property: @Model.Text2</h2>\r\n</div>"
  },
  {
    "path": "projects/hydro/component-3/Pages/Components/Message.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace Component3.Pages.Components;\r\npublic class Message : HydroComponent\r\n{  \r\n    public string Text { get; set; }   \r\n\r\n    public string Text2 { get; set;}\r\n\r\n    public override void Mount()\r\n    {\r\n        Text = \"From Mount\";\r\n    }\r\n\r\n    public override Task MountAsync()\r\n    {\r\n        Text = \"From MountAsync\";\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public override void Render()\r\n    {\r\n        Text2 = \"From Render\";\r\n    }\r\n\r\n    public override Task RenderAsync()\r\n    {\r\n        Text2 = \"From RenderAsync\";\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public void TriggerRender()\r\n    {\r\n        Text2 = \"Render Triggered\";\r\n    }\r\n}"
  },
  {
    "path": "projects/hydro/component-3/Pages/Components/Message2.cshtml",
    "content": "@model Component3.Pages.Components.Message2\r\n\r\n<div>\r\n    <h1>Text Property: @Model.Text</h1>\r\n    <h2>Text2 Property: @Model.Text2</h2>\r\n</div>"
  },
  {
    "path": "projects/hydro/component-3/Pages/Components/Message2.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace Component3.Pages.Components;\r\npublic class Message2 : HydroComponent\r\n{  \r\n    public string Text { get; set; }   \r\n\r\n    public string Text2 { get; set;}\r\n\r\n    public override void Mount()\r\n    {\r\n        Text = \"From Mount\";\r\n    }\r\n\r\n    public override void Render()\r\n    {\r\n        Text2 = \"From Render\";\r\n    }\r\n\r\n    public void TriggerRender()\r\n    {\r\n        Text2 = \"Render Triggered\";\r\n    }\r\n}"
  },
  {
    "path": "projects/hydro/component-3/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n@using Hydro\r\n@{\r\n    Layout = \"/Pages/Shared/_Layout.cshtml\";\r\n}\r\n\r\n<h1>Component Lifecycle</h1>\r\n<container></container>\r\n"
  },
  {
    "path": "projects/hydro/component-3/Pages/Shared/_Layout.cshtml",
    "content": "<!doctype html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta name=\"hydro-config\" />\r\n    <script defer src=\"~/hydro/hydro.js\" asp-append-version=\"true\"></script>\r\n    <script defer src=\"~/hydro/alpine.js\" asp-append-version=\"true\"></script>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n    <title>Component Data Flow</title>\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        @RenderBody()\r\n    </div>\r\n    <script src=\"/_framework/aspnetcore-browser-refresh.js\"></script>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/hydro/component-3/Pages/_ViewImports.cshtml",
    "content": "@addTagHelper *, Hydro\r\n@addTagHelper *, Component3\r\n@using Component3.Pages.Components"
  },
  {
    "path": "projects/hydro/component-3/Program.cs",
    "content": "using Hydro.Configuration;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddHydro(); // Hydro\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\napp.UseRouting();\r\napp.MapRazorPages();\r\napp.UseHydro(); // Hydro\r\n\r\napp.Run();"
  },
  {
    "path": "projects/hydro/component-3/README.md",
    "content": "# Component Lifecycle\r\n\r\nThis sample introduces how you can hook into Hydro's component lifecyle via `Mount/MountAsync` and `Render/RenderAsync`."
  },
  {
    "path": "projects/hydro/component-3/component-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <AssemblyName>Component3</AssemblyName>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Hydro\" Version=\"1.2.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/hydro/cookies/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#9a3acf\",\r\n        \"activityBar.background\": \"#9a3acf\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#4d3813\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#9a3acf\",\r\n        \"statusBar.background\": \"#7e2aac\",\r\n        \"statusBar.debuggingBackground\": \"#58ac2a\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#9a3acf\",\r\n        \"statusBarItem.remoteBackground\": \"#7e2aac\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#7e2aac\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#7e2aac99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#7e2aac\"\r\n}"
  },
  {
    "path": "projects/hydro/cookies/Pages/Components/CookieControl.cshtml",
    "content": "@model Cookies.Pages.Components.CookieControl\r\n\r\n@if(Model.ShowSetCookies){\r\n    <button class=\"btn btn-primary\" on:click=\"@(() => Model.SetCookie())\">Set New Cookie</button>\r\n}else{\r\n    <button class=\"btn btn-primary\" on:click=\"@(() => Model.RemoveCookie())\">Remove Cookie</button>\r\n}"
  },
  {
    "path": "projects/hydro/cookies/Pages/Components/CookieControl.cshtml.cs",
    "content": "using Hydro;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace Cookies.Pages.Components;\r\npublic class CookieControl : HydroComponent\r\n{  \r\n    public bool ShowSetCookies { get; set; }\r\n\r\n    /// <summary>\r\n    /// Called when the component is instantiated on the page\r\n    /// </summary>\r\n    public override void Mount()\r\n    {\r\n        var msg = CookieStorage.Get<string>(\"date\");\r\n        ShowSetCookies = string.IsNullOrWhiteSpace(msg);\r\n    }\r\n\r\n    public void SetCookie()\r\n    {\r\n        CookieStorage.Set(\"date\", DateTime.Now.ToString());\r\n        Dispatch(new MessageUpdatedEvent(\"A cookie is now set\"), scope: Scope.Global);\r\n        Redirect(Url.Page(\"/Index\")); // Url.Page is a helper method to generate a URL to a Razor page. It starts from /Pages folder.\r\n    }\r\n\r\n    public void RemoveCookie()\r\n    {\r\n        CookieStorage.Delete(\"date\");\r\n        Dispatch(new MessageUpdatedEvent(\"Cookie removed\"), scope: Scope.Global);\r\n        Redirect(Url.Page(\"/Index\")); // Url.Page is a helper method to generate a URL to a Razor page. It starts from /Pages folder.\r\n    }\r\n}"
  },
  {
    "path": "projects/hydro/cookies/Pages/Components/Message.cshtml",
    "content": "@model Cookies.Pages.Components.Message\r\n\r\n<div>\r\n    <h1>@Model.Text</h1>\r\n</div>"
  },
  {
    "path": "projects/hydro/cookies/Pages/Components/Message.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace Cookies.Pages.Components;\r\npublic class Message : HydroComponent\r\n{  \r\n    public string Text { get; set; }\r\n\r\n    public Message()\r\n    {\r\n        Subscribe<MessageUpdatedEvent>(data => Text = data.Message);\r\n    }\r\n\r\n    public override void Mount()\r\n    {\r\n        var msg = CookieStorage.Get<string>(\"date\");\r\n\r\n        if (!string.IsNullOrWhiteSpace(msg))\r\n            Text = msg;\r\n        else\r\n            Text = \"No cookies set\";\r\n    }\r\n}"
  },
  {
    "path": "projects/hydro/cookies/Pages/Components/MessageUpdatedEvent.cs",
    "content": "\r\nnamespace Cookies.Pages.Components;\r\n\r\npublic record MessageUpdatedEvent(string Message);"
  },
  {
    "path": "projects/hydro/cookies/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n@using Hydro\r\n@{\r\n    Layout = \"/Pages/Shared/_Layout.cshtml\";\r\n}\r\n\r\n<div class=\"container\">\r\n    <message></message>\r\n    <cookie-control></cookie-control>\r\n</div>\r\n"
  },
  {
    "path": "projects/hydro/cookies/Pages/Shared/_Layout.cshtml",
    "content": "<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"hydro-config\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <title>Cookies</title>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n    <script defer src=\"~/hydro/hydro.js\" asp-append-version=\"true\"></script>\r\n    <script defer src=\"~/hydro/alpine.js\" asp-append-version=\"true\"></script>\r\n  </head>\r\n  <body>\r\n    @RenderBody()\r\n\r\n    <script src=\"/_framework/aspnetcore-browser-refresh.js\"></script>\r\n  </body>\r\n</html>\r\n"
  },
  {
    "path": "projects/hydro/cookies/Pages/_ViewImports.cshtml",
    "content": "@addTagHelper *, Hydro\r\n@addTagHelper *, Cookies\r\n@using Cookies.Pages.Components"
  },
  {
    "path": "projects/hydro/cookies/Program.cs",
    "content": "using Hydro.Configuration;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddHydro(); // Hydro\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\napp.UseRouting();\r\napp.MapRazorPages();\r\napp.UseHydro(); // Hydro\r\n\r\napp.Run();"
  },
  {
    "path": "projects/hydro/cookies/README.md",
    "content": "# Cookies\r\n\r\nThis sample shows how to set and delete a cookie from a Hydro component. We also use Hydro global dispatch event to show messages and perform redirect navigation with page reload."
  },
  {
    "path": "projects/hydro/cookies/cookies.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <AssemblyName>Cookies</AssemblyName>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Hydro\" Version=\"1.2.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/hydro/cookies/cookies.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"cookies\", \"cookies.csproj\", \"{B88A9EB3-47AC-499E-3080-CB9F1AA33448}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{B88A9EB3-47AC-499E-3080-CB9F1AA33448}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B88A9EB3-47AC-499E-3080-CB9F1AA33448}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B88A9EB3-47AC-499E-3080-CB9F1AA33448}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B88A9EB3-47AC-499E-3080-CB9F1AA33448}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {0BA5FDA3-B995-41E8-96F5-44DAE79EB574}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/hydro/event-child-parent/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#9a3acf\",\r\n        \"activityBar.background\": \"#9a3acf\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#4d3813\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#9a3acf\",\r\n        \"statusBar.background\": \"#7e2aac\",\r\n        \"statusBar.debuggingBackground\": \"#58ac2a\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#9a3acf\",\r\n        \"statusBarItem.remoteBackground\": \"#7e2aac\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#7e2aac\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#7e2aac99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#7e2aac\"\r\n}"
  },
  {
    "path": "projects/hydro/event-child-parent/Pages/Components/Message.cshtml",
    "content": "@model Events.Pages.Components.Message\r\n\r\n<div>\r\n    <h1>@Model.Text</h1>\r\n    <message-button/>\r\n</div>"
  },
  {
    "path": "projects/hydro/event-child-parent/Pages/Components/Message.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace Events.Pages.Components;\r\npublic class Message : HydroComponent\r\n{  \r\n    public string Text { get; set; }    \r\n\r\n    public Message()\r\n    {\r\n        Subscribe<MessageChangedEvent>(e => Text = e.Message);\r\n    }\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "projects/hydro/event-child-parent/Pages/Components/MessageButton.cshtml",
    "content": "@model Events.Pages.Components.MessageButton\r\n\r\n<div>\r\n    <button on:click=\"@(() => Model.Show(\"This greeting comes from MessageButton component\"))\">Show</button>\r\n</div>\r\n\r\n"
  },
  {
    "path": "projects/hydro/event-child-parent/Pages/Components/MessageButton.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace Events.Pages.Components;\r\n\r\npublic class MessageButton : HydroComponent\r\n{  \r\n    public void Show(string text)\r\n    {\r\n        Dispatch(new MessageChangedEvent(text));\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/hydro/event-child-parent/Pages/Components/MessageChangedEvent.cs",
    "content": "namespace Events.Pages.Components;\r\n\r\npublic record MessageChangedEvent(string Message);"
  },
  {
    "path": "projects/hydro/event-child-parent/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n@using Hydro\r\n@{\r\n    Layout = \"/Pages/Shared/_Layout.cshtml\";\r\n}\r\n\r\n<message></message>\r\n\r\n"
  },
  {
    "path": "projects/hydro/event-child-parent/Pages/Shared/_Layout.cshtml",
    "content": "<html>\r\n<head>\r\n    <meta name=\"hydro-config\" />\r\n    <script defer src=\"~/hydro/hydro.js\" asp-append-version=\"true\"></script>\r\n    <script defer src=\"~/hydro/alpine.js\" asp-append-version=\"true\"></script>\r\n</head>\r\n<body>\r\n    @RenderBody()\r\n\r\n    <script src=\"/_framework/aspnetcore-browser-refresh.js\"></script>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/hydro/event-child-parent/Pages/_ViewImports.cshtml",
    "content": "@addTagHelper *, Hydro\r\n@addTagHelper *, Events\r\n@using Events.Pages.Components"
  },
  {
    "path": "projects/hydro/event-child-parent/Program.cs",
    "content": "using Hydro.Configuration;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddHydro(); // Hydro\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\napp.UseRouting();\r\napp.MapRazorPages();\r\napp.UseHydro(); // Hydro\r\n\r\napp.Run();"
  },
  {
    "path": "projects/hydro/event-child-parent/README.md",
    "content": "# Event handling from a child component to parent\r\n\r\nThis sample introduce the concept of hydro event communication from child component to parent.\r\n\r\nOne point of caution, in `MessageButton.cshtml`, it's not enough to have the button tag as a root component because it will disappear once you click the button. You need to have a `div` or other container tag to keep the button rerendered. \r\n\r\n```csharp\r\n<div>\r\n    <button on:click=\"@(() => Model.Show(\"This greeting comes from MessageButton component\"))\">Show</button>\r\n</div>\r\n```"
  },
  {
    "path": "projects/hydro/event-child-parent/event-child-parent.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <AssemblyName>Events</AssemblyName>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Hydro\" Version=\"1.2.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/hydro/event-child-parent/event-child-parent.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"event-child-parent\", \"event-child-parent.csproj\", \"{E869BD85-7D0D-4975-9EBF-BFABD0ACF51E}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{E869BD85-7D0D-4975-9EBF-BFABD0ACF51E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E869BD85-7D0D-4975-9EBF-BFABD0ACF51E}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E869BD85-7D0D-4975-9EBF-BFABD0ACF51E}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E869BD85-7D0D-4975-9EBF-BFABD0ACF51E}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {B7874CF6-D0E5-40E1-8C83-28D03B3373EC}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/hydro/event-global/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#9a3acf\",\r\n        \"activityBar.background\": \"#9a3acf\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#4d3813\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#9a3acf\",\r\n        \"statusBar.background\": \"#7e2aac\",\r\n        \"statusBar.debuggingBackground\": \"#58ac2a\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#9a3acf\",\r\n        \"statusBarItem.remoteBackground\": \"#7e2aac\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#7e2aac\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#7e2aac99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#7e2aac\"\r\n}"
  },
  {
    "path": "projects/hydro/event-global/Pages/Components/Message.cshtml",
    "content": "@model Events.Pages.Components.Message\r\n\r\n<div>\r\n    <h1>@Model.Text</h1>\r\n  </div>"
  },
  {
    "path": "projects/hydro/event-global/Pages/Components/Message.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace Events.Pages.Components;\r\npublic class Message : HydroComponent\r\n{  \r\n    public string Text { get; set; }    \r\n\r\n    public Message()\r\n    {\r\n        Subscribe<MessageChangedEvent>(e => Text = e.Message);\r\n    }\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "projects/hydro/event-global/Pages/Components/MessageButton.cshtml",
    "content": "@model Events.Pages.Components.MessageButton\r\n\r\n<div>\r\n    <button on:click=\"@(() => Model.Show(\"This greeting comes from MessageButton component\"))\">Show</button>\r\n</div>\r\n\r\n"
  },
  {
    "path": "projects/hydro/event-global/Pages/Components/MessageButton.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace Events.Pages.Components;\r\n\r\npublic class MessageButton : HydroComponent\r\n{  \r\n    public void Show(string text)\r\n    {\r\n        DispatchGlobal(new MessageChangedEvent(text));\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/hydro/event-global/Pages/Components/MessageChangedEvent.cs",
    "content": "namespace Events.Pages.Components;\r\n\r\npublic record MessageChangedEvent(string Message);"
  },
  {
    "path": "projects/hydro/event-global/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n@using Hydro\r\n@{\r\n    Layout = \"/Pages/Shared/_Layout.cshtml\";\r\n}\r\n\r\n<div class=\"container\">\r\n    <div class=\"row\">\r\n        <div class=\"col-md-6\">\r\n            <message></message>\r\n        </div>\r\n        <div class=\"col-md-6\">\r\n            <message></message>\r\n        </div>\r\n    </div>\r\n    <message-button/>\r\n</div>\r\n"
  },
  {
    "path": "projects/hydro/event-global/Pages/Shared/_Layout.cshtml",
    "content": "<html>\r\n<head>\r\n    <meta name=\"hydro-config\" />\r\n     <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n    <script defer src=\"~/hydro/hydro.js\" asp-append-version=\"true\"></script>\r\n    <script defer src=\"~/hydro/alpine.js\" asp-append-version=\"true\"></script>\r\n</head>\r\n<body>\r\n    @RenderBody()\r\n\r\n    <script src=\"/_framework/aspnetcore-browser-refresh.js\"></script>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/hydro/event-global/Pages/_ViewImports.cshtml",
    "content": "@addTagHelper *, Hydro\r\n@addTagHelper *, Events\r\n@using Events.Pages.Components"
  },
  {
    "path": "projects/hydro/event-global/Program.cs",
    "content": "using Hydro.Configuration;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddHydro(); // Hydro\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\napp.UseRouting();\r\napp.MapRazorPages();\r\napp.UseHydro(); // Hydro\r\n\r\napp.Run();"
  },
  {
    "path": "projects/hydro/event-global/README.md",
    "content": "# Global event handling\r\n\r\nThis sample introduce the concept of hydro global event communication. It allows a component to publish an event and have any subscribing components to receive it.\r\n\r\nOne point of caution, in `MessageButton.cshtml`, it's not enough to have the button tag as a root component because it will disappear once you click the button. You need to have a `div` or other container tag to keep the button rerendered. \r\n\r\n```csharp\r\n<div>\r\n    <button on:click=\"@(() => Model.Show(\"This greeting comes from MessageButton component\"))\">Show</button>\r\n</div>\r\n```"
  },
  {
    "path": "projects/hydro/event-global/event-global.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <AssemblyName>Events</AssemblyName>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Hydro\" Version=\"1.2.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/hydro/event-global/event-global.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"event-global\", \"event-global.csproj\", \"{EFF8AEEF-77A5-4912-AE06-68DCC1D109A9}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{EFF8AEEF-77A5-4912-AE06-68DCC1D109A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{EFF8AEEF-77A5-4912-AE06-68DCC1D109A9}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{EFF8AEEF-77A5-4912-AE06-68DCC1D109A9}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{EFF8AEEF-77A5-4912-AE06-68DCC1D109A9}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {4556C3CB-E26B-4180-A0BC-946CD66803AE}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/hydro/event-global-subject/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#9a3acf\",\r\n        \"activityBar.background\": \"#9a3acf\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#4d3813\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#9a3acf\",\r\n        \"statusBar.background\": \"#7e2aac\",\r\n        \"statusBar.debuggingBackground\": \"#58ac2a\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#9a3acf\",\r\n        \"statusBarItem.remoteBackground\": \"#7e2aac\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#7e2aac\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#7e2aac99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#7e2aac\"\r\n}"
  },
  {
    "path": "projects/hydro/event-global-subject/Pages/Components/Message.cshtml",
    "content": "@model Events.Pages.Components.Message\r\n\r\n<div>\r\n    <h1>@Model.Text</h1>\r\n  </div>"
  },
  {
    "path": "projects/hydro/event-global-subject/Pages/Components/Message.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace Events.Pages.Components;\r\npublic class Message : HydroComponent\r\n{  \r\n    public string Text { get; set; }    \r\n\r\n    public string Filter { get; set; }\r\n\r\n    public Message()\r\n    {\r\n        Subscribe<MessageChangedEvent>(subject: () => Filter , e => Text = e.Message);\r\n    }\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "projects/hydro/event-global-subject/Pages/Components/MessageButton.cshtml",
    "content": "@model Events.Pages.Components.MessageButton\r\n\r\n<div>\r\n    <button on:click=\"@(() => Model.Show(\"Greetings at \" + DateTime.UtcNow))\">Keep Pressing</button>\r\n</div>\r\n\r\n"
  },
  {
    "path": "projects/hydro/event-global-subject/Pages/Components/MessageButton.cshtml.cs",
    "content": "using System.Security.Cryptography;\r\nusing Hydro;\r\n\r\nnamespace Events.Pages.Components;\r\n\r\npublic class MessageButton : HydroComponent\r\n{  \r\n    public void Show(string text)\r\n    {\r\n        var r = Random.Shared.GetItems([\"left\", \"right\"], 1);\r\n        DispatchGlobal(new MessageChangedEvent(text), subject:r[0]);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/hydro/event-global-subject/Pages/Components/MessageChangedEvent.cs",
    "content": "namespace Events.Pages.Components;\r\n\r\npublic record MessageChangedEvent(string Message);"
  },
  {
    "path": "projects/hydro/event-global-subject/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n@using Hydro\r\n@{\r\n    Layout = \"/Pages/Shared/_Layout.cshtml\";\r\n}\r\n\r\n\r\n<div class=\"container\">\r\n    <div class=\"row mb-3\">\r\n        <div class=\"col-md-6\">\r\n            <message filter=\"left\"></message>\r\n        </div>\r\n        <div class=\"col-md-6\">\r\n            <message filter=\"right\"></message>\r\n        </div>\r\n    </div>\r\n    <p>When you click this message, the action will randomise the message subject between \"left\" and \"right\". You will see that \r\n        the components receive different messages based on the event subject.\r\n    </p>\r\n    <message-button/>\r\n</div>\r\n"
  },
  {
    "path": "projects/hydro/event-global-subject/Pages/Shared/_Layout.cshtml",
    "content": "<html>\r\n<head>\r\n    <meta name=\"hydro-config\" />\r\n     <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n    <script defer src=\"~/hydro/hydro.js\" asp-append-version=\"true\"></script>\r\n    <script defer src=\"~/hydro/alpine.js\" asp-append-version=\"true\"></script>\r\n</head>\r\n<body>\r\n    @RenderBody()\r\n\r\n    <script src=\"/_framework/aspnetcore-browser-refresh.js\"></script>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/hydro/event-global-subject/Pages/_ViewImports.cshtml",
    "content": "@addTagHelper *, Hydro\r\n@addTagHelper *, Events\r\n@using Events.Pages.Components"
  },
  {
    "path": "projects/hydro/event-global-subject/Program.cs",
    "content": "using Hydro.Configuration;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddHydro(); // Hydro\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\napp.UseRouting();\r\napp.MapRazorPages();\r\napp.UseHydro(); // Hydro\r\n\r\napp.Run();"
  },
  {
    "path": "projects/hydro/event-global-subject/README.md",
    "content": "# Global event handling subject\r\n\r\nThis sample demonstrates the functionality of event subject. It allows components that subscribe to a specific message to filter which matching message they will receive. \r\n\r\nIn this case, the `Message` component subscribes to `MessageChangedEvent`. The two instances of the component uses \"left\" and \"right\" event subject respectively. You will see how each instance react to the event they are subscribed to.   \r\n"
  },
  {
    "path": "projects/hydro/event-global-subject/event-global-subject.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <AssemblyName>Events</AssemblyName>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Hydro\" Version=\"1.2.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/hydro/event-global-subject/event-global-subject.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"event-global-subject\", \"event-global-subject.csproj\", \"{0B333304-CDC6-4AFB-8D95-C5D7DE49A8CA}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{0B333304-CDC6-4AFB-8D95-C5D7DE49A8CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{0B333304-CDC6-4AFB-8D95-C5D7DE49A8CA}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{0B333304-CDC6-4AFB-8D95-C5D7DE49A8CA}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{0B333304-CDC6-4AFB-8D95-C5D7DE49A8CA}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {860E12BD-D170-4DC9-ABA1-8AEBB891477B}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/hydro/hello-world/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#9a3acf\",\r\n        \"activityBar.background\": \"#9a3acf\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#4d3813\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#9a3acf\",\r\n        \"statusBar.background\": \"#7e2aac\",\r\n        \"statusBar.debuggingBackground\": \"#58ac2a\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#9a3acf\",\r\n        \"statusBarItem.remoteBackground\": \"#7e2aac\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#7e2aac\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#7e2aac99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#7e2aac\"\r\n}"
  },
  {
    "path": "projects/hydro/hello-world/Pages/Components/Message.cshtml",
    "content": "@model HelloWorld.Pages.Components.Message\r\n\r\n<div>\r\n    <h1>@Model.Text</h1>\r\n    <button on:click=\"@(() => Model.Show(\"Hello World\"))\">Show</button>\r\n</div>"
  },
  {
    "path": "projects/hydro/hello-world/Pages/Components/Message.cshtml.cs",
    "content": "using Hydro;\r\n\r\nnamespace HelloWorld.Pages.Components;\r\npublic class Message : HydroComponent\r\n{  \r\n    public string Text { get; set; }    \r\n\r\n    public void Show(string text)\r\n    {\r\n        Text = text;\r\n    }\r\n}"
  },
  {
    "path": "projects/hydro/hello-world/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n@using Hydro\r\n@{\r\n    Layout = \"/Pages/Shared/_Layout.cshtml\";\r\n}\r\n\r\n<message></message>\r\n\r\n"
  },
  {
    "path": "projects/hydro/hello-world/Pages/Shared/_Layout.cshtml",
    "content": "<html>\r\n<head>\r\n    <meta name=\"hydro-config\" />\r\n    <script defer src=\"~/hydro/hydro.js\" asp-append-version=\"true\"></script>\r\n    <script defer src=\"~/hydro/alpine.js\" asp-append-version=\"true\"></script>\r\n</head>\r\n<body>\r\n    @RenderBody()\r\n\r\n    <script src=\"/_framework/aspnetcore-browser-refresh.js\"></script>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/hydro/hello-world/Pages/_ViewImports.cshtml",
    "content": "@addTagHelper *, Hydro\r\n@addTagHelper *, HelloWorld\r\n@using HelloWorld.Pages.Components"
  },
  {
    "path": "projects/hydro/hello-world/Program.cs",
    "content": "using Hydro.Configuration;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.AddHydro(); // Hydro\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\napp.UseRouting();\r\napp.MapRazorPages();\r\napp.UseHydro(); // Hydro\r\n\r\napp.Run();"
  },
  {
    "path": "projects/hydro/hello-world/README.md",
    "content": "# Hello World \r\n\r\nThis sample introduce the concept of a Hydro component and how it handles interactivity."
  },
  {
    "path": "projects/hydro/hello-world/hello-world.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <AssemblyName>HelloWorld</AssemblyName>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Hydro\" Version=\"1.2.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/hydro/hello-world/hello-world.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"hello-world\", \"hello-world.csproj\", \"{10EB755E-653E-4713-B184-4622A6497FEA}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{10EB755E-653E-4713-B184-4622A6497FEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{10EB755E-653E-4713-B184-4622A6497FEA}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{10EB755E-653E-4713-B184-4622A6497FEA}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{10EB755E-653E-4713-B184-4622A6497FEA}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {73DB1AF6-BCA1-40A5-BE8F-9105006088E6}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/i-application-lifetime/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\nvar lifetime = app.Services.GetService<IHostApplicationLifetime>();\r\nlifetime.ApplicationStarted.Register(() => System.Console.WriteLine(\"===== Server is starting\"));\r\nlifetime.ApplicationStopping.Register(() => System.Console.WriteLine(\"===== Server is stopping\"));\r\nlifetime.ApplicationStopped.Register(() => System.Console.WriteLine(\"===== Server has stopped\"));\r\n\r\napp.Run(async context =>\r\n{\r\n    await context.Response.WriteAsync(\"Hello world\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/i-application-lifetime/i-application-lifetime.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/ihosted-service/README.md",
    "content": "# IHostedService (2)\n\n* [Background Task](/projects/ihosted-service/ihosted-service-1)\n\n  Implement background tasks using `BackgroundService` base class (simplified pattern in .NET 10).\n\n* [Background Task - 2](/projects/ihosted-service/ihosted-service-2)\n\n  Implement background tasks using the new `IHostedService` interface and a timer. This example comes from the technique outlined in this [ASP.NET Core documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services). \n\ndotnet8"
  },
  {
    "path": "projects/ihosted-service/build.bat",
    "content": "dotnet build ihosted-service-1\r\ndotnet build ihosted-service-2"
  },
  {
    "path": "projects/ihosted-service/build.sh",
    "content": "#!/bin/bash\ndotnet build ihosted-service-1\ndotnet build ihosted-service-2\n"
  },
  {
    "path": "projects/ihosted-service/ihosted-service-1/Program.cs",
    "content": "using Microsoft.Extensions.Hosting;\n\nusing Microsoft.Extensions.Hosting;\n\nusing Microsoft.Extensions.Hosting;\n\nvar builder = WebApplication.CreateBuilder();\nbuilder.Services.AddSingleton<Greeter>();\nbuilder.Services.AddHostedService<GreeterUpdaterService>();\n\nvar app = builder.Build();\napp.Run(context =>\n{\n    var greet = context.RequestServices.GetService<Greeter>();\n\n    return context.Response.WriteAsync($\"Please reload page (greeting updated every 1 second in the background) {greet}\");\n});\n\napp.Run();\n\npublic class Greeter\n{\n    public int Counter { get; set; }\n    public override string ToString() => $\"Hello world {Counter}\";\n    }\n}\n\n/// <summary>\n/// Background service that updates a Greeter counter\n/// </summary>\npublic class GreeterUpdaterService : BackgroundService\n{\n    private readonly Greeter _greeter;\n\n    public GreeterUpdaterService(Greeter greeter)\n    {\n        _greeter = greeter;\n    }\n\n    protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n    {\n        while (!stoppingToken.IsCancellationRequested)\n        {\n            _greeter.Counter++;\n            await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken);\n        }\n    }\n}\n\r\n    public async Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        if (_executingTask == null)\r\n        {\r\n            return;\r\n        }\r\n\r\n        try\r\n        {\r\n            // Signal cancellation to the executing method\r\n            _stoppingCts.Cancel();\r\n        }\r\n        finally\r\n        {\r\n            // Wait until the task completes or the stop token triggers\r\n            await Task.WhenAny(_executingTask, Task.Delay(Timeout.Infinite, cancellationToken));\r\n        }\r\n    }\r\n\r\n    protected abstract Task ExecuteAsync(CancellationToken cancellationToken);\r\n\r\n    public virtual void Dispose() => _stoppingCts.Cancel();\r\n}\r\n\r\npublic class GreeterUpdaterService : HostedService\r\n{\r\n    Greeter _greeter;\r\n    public GreeterUpdaterService(Greeter greeter)\r\n    {\r\n        _greeter = greeter;\r\n    }\r\n\r\n    protected override async Task ExecuteAsync(CancellationToken cancellationToken)\r\n    {\r\n        while (!cancellationToken.IsCancellationRequested)\r\n        {\r\n            _greeter.Counter++;\r\n            await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);\r\n        }\r\n    }\r\n}\r\n\r\npublic class Greeter\r\n{\r\n    public int Counter { get; set; }\r\n\r\n    public override string ToString() => $\"Hello world {Counter}\";\r\n}\r\n\r\n"
  },
  {
    "path": "projects/ihosted-service/ihosted-service-1/README.md",
    "content": "# BackgroundService Pattern\n\nThis sample demonstrates using the `BackgroundService` base class for background tasks in ASP.NET Core.\n\n## Running the Sample\n\n```bash\ndotnet watch run\n```\n\nNavigate to `http://localhost:5000/` and see the counter incrementing every second in the background). A `GreeterUpdaterService` updates a `Greeter` singleton every second.\n\n the updates are visible on.\n `Greeter` class provides the greeting data to the background task.\n\n The sample uses dependency injection to the `GreeterUpdaterService` injects the `Greeter` singleton. The service also automatically updates the counter property.\n\n## Key Features\n\n- Built-in `BackgroundService` base class for background tasks\n- Much less code than custom `IHostedService` implementation\n- Proper cancellation token handling\n- Cleaner, more maintainable code\n- Standard pattern recommended by Microsoft\n\n## Running the Sample\n\n```bash\ndotnet watch run\n```\n\nNavigate to `http://localhost:5000/` and see the counter incrementing every second in the background) a `Greeter` service updates a `Greeter` singleton.\n\n## Registration\n\n```csharp\nbuilder.Services.AddSingleton<Greeter>();\nbuilder.Services.AddHostedService<GreeterUpdaterService>();\n```\n\n## Viewing the Documentation\n\n- **Scalar UI:** Navigate to `/scalar`\n- **OpenAPI JSON:** Navigate to `/openapi/v1.json`\n\n## Migration Notes\n\nThis sample was simplified from a custom `IHostedService` implementation to using the built-in `BackgroundService` base class.\n- Removed custom `HostedService` abstract base class (40+ lines of boilerplate)\n- Inherited from `Microsoft.Extensions.Hosting.BackgroundService`\n- Simplified cancellation token handling\n- Cleaner, more maintainable code\n- Standard pattern recommended by Microsoft\n\nSee `OUT-OF-DATE.md` for migration details.\n"
  },
  {
    "path": "projects/ihosted-service/ihosted-service-1/ihosted-service-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <ImplicitUsings>true</ImplicitUsings>\n    <LangVersion>preview</LangVersion>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <NoWarn>$(NoWarn);1591</NoWarn>\n  </PropertyGroup>\n</Project>\n"
  },
  {
    "path": "projects/ihosted-service/ihosted-service-2/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddSingleton<Greeter>();\r\nbuilder.Services.AddSingleton<Microsoft.Extensions.Hosting.IHostedService, GreeterUpdaterService>();\r\n\r\nvar app = builder.Build();\r\n\r\napp.Run(context =>\r\n{\r\n    var greet = context.RequestServices.GetService<Greeter>();\r\n\r\n    return context.Response.WriteAsync($\"Please reload page (greeting updated every 1 second in the background) {greet}\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class GreeterUpdaterService : IHostedService, IDisposable\r\n{\r\n    Greeter _greeter;\r\n    readonly ILogger<GreeterUpdaterService> _logger;\r\n\r\n    Timer _timer;\r\n\r\n    public GreeterUpdaterService(ILogger<GreeterUpdaterService> logger, Greeter greeter)\r\n    {\r\n        _logger = logger;\r\n        _greeter = greeter;\r\n    }\r\n\r\n    private void DoWork(object state)\r\n    {\r\n        _greeter.Counter++;\r\n    }\r\n\r\n    public Task StartAsync(CancellationToken cancellationToken)\r\n    {\r\n        _logger.LogInformation($\"{nameof(GreeterUpdaterService)} running.\");\r\n\r\n        _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));\r\n\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task StopAsync(CancellationToken cancellationToken)\r\n    {\r\n        _logger.LogInformation($\"{nameof(GreeterUpdaterService)} is stopping.\");\r\n\r\n        _timer?.Change(Timeout.Infinite, 0);\r\n\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public void Dispose()\r\n    {\r\n        _timer?.Dispose();\r\n    }\r\n}\r\n\r\npublic class Greeter\r\n{\r\n    public int Counter { get; set; }\r\n\r\n    public override string ToString() => $\"Hello world {Counter}\";\r\n}\r\n\r\n"
  },
  {
    "path": "projects/ihosted-service/ihosted-service-2/README.md",
    "content": "# Background Service with Timer\r\n\r\n  Implement background tasks using the new `IHostedService` interface and a timer. This example comes from the technique outlined in this [ASP.NET Core documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services). \r\n"
  },
  {
    "path": "projects/ihosted-service/ihosted-service-2/ihosted-service-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/image-sharp/ImageSharp.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"SixLabors.ImageSharp.Web\" Version=\"1.0.5\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/image-sharp/Program.cs",
    "content": "﻿using Microsoft.AspNetCore;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing SixLabors.ImageSharp.Web.DependencyInjection;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddImageSharp();\r\n\r\nvar app = builder.Build();\r\napp.UseImageSharp();\r\napp.UseStaticFiles();\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await context.Response.WriteAsync($@\"\r\n    <html>\r\n    <body>\r\n    <h1>Imager</h1>\r\n    <blockquote>siwa.jpg?width=200</blockquote>\r\n    <img src=\"\"siwa.jpg?width=200\"\" />\r\n    <br/>\r\n    <blockquote>siwa.jpg?height=200</blockquote>\r\n    <img src=\"\"siwa.jpg?height=300\"\" />\r\n    <br/>\r\n    <blockquote>siwa.jpg</blockquote>\r\n    <br/>\r\n    <img src=\"\"siwa.jpg\"\" />\r\n    </body>\r\n    </html>          \r\n    \");\r\n});\r\n\r\napp.Run();\r\n\r\n"
  },
  {
    "path": "projects/json/README.md",
    "content": "# Json (23)\r\n\r\nAll about the new `System.Text.Json` namespace.\r\n\r\n* [Json](/projects/json/json)\r\n\r\n  Use `JsonSerializer.SerializeAsync` to serializer your object to JSON directly to stream.\r\n\r\n* [Json - Options](/projects/json/json-2)\r\n\r\n  Use `JsonSerializerOptions` to control certain aspect of your object serialization.\r\n\r\n* [Json - Serializing Anonymous Type](/projects/json/json-3)\r\n\r\n  Create adhoc JSON document using anonymous type and serialize it to stream directly using `JsonSerializer.SerializeAsync`.\r\n\r\n* [Json - Control serialization using attributes](/projects/json/json-4)\r\n\r\n  Use `[JsonPropertyName]` and `[JsonIgnore]` to control JSON serialization output.\r\n\r\n* [Json - Serialize a Dictionary of object](/projects/json/json-5)\r\n\r\n  A `Dictionary<string, object>` can be used to generate pretty much any shape of JSON document that you want.\r\n\r\n* [Json - Write a JSON document to the stream directly](/projects/json/json-6)\r\n\r\n  Use `Utf8JsonWriter` to write a JSON document directly to a stream.\r\n\r\n* [Json - Implement a custom naming policy](/projects/json/json-7)\r\n\r\n  Create a custom naming policy that generate JSON property names in snake_case. \r\n\r\n* [Json - Benchmark](/projects/json/json-8)\r\n\r\n  Benchmark on two different approaches of generating snake_case property names. \r\n\r\n* [Json - Custom Converter](/projects/json/json-9)\r\n\r\n  Implement a custom type converter. In this example we convert `TimeSpan`.\r\n\r\n* [Json - Control JsonIgnore behaviour](/projects/json/json-10)\r\n\r\n  Demonstrate the three different ways you can control the behaviour of `[JsonIgnore]` per property.\r\n  \r\n* [Json - Custom Converter 2](/projects/json/json-11)\r\n\r\n  Implement a custom type coverter for DateTime type for JsonSerializer in the format of JSON date ticks.\r\n\r\n\r\n## Writable JSON DOM\r\n\r\n   [Design document for the Writable JSON API](https://github.com/dotnet/designs/blob/main/accepted/2020/serializer/WriteableDomAndDynamic.md)\r\n\r\n* [Primitives](/projects/json/json-12)\r\n  \r\n  This sample shows how to parse and access number, string and an array values from JSON string.\r\n\r\n* [Object](/projects/json/json-13)\r\n\r\n  This sample shows how to parse and access objects from JSON string. We will be using `JsonObject` as well.\r\n\r\n* [Finding a node using LINQ](/projects/json/json-14)\r\n\r\n  This sample shows how to find a node based on of its value using LINQ.\r\n\r\n* [Finding a node using LINQ 2](/projects/json/json-15)\r\n\r\n  This sample shows how to find a node based on two of its values (a string and an array) using LINQ.\r\n\r\n* [Finding a node using LINQ 3](/projects/json/json-16)\r\n\r\n  This sample shows how to find a node based of an absence of a property using LINQ.\r\n\r\n* [Finding a node using LINQ 4](/projects/json/json-17)\r\n\r\n  In this example we are trying to find a node in an array that has a specific value on its array property.\r\n\r\n* [Construct a JSON document](/projects/json/json-18)\r\n\r\n  This sample shows how to construct a JSON document using `JsonObject`.\r\n\r\n* [Construct a JSON document](/projects/json/json-19)\r\n\r\n  This sample shows how to construct a JSON document using `JsonArray`.\r\n\r\n* [Update a JSON document](/projects/json/json-20)\r\n\r\n  This sample shows how to update properties of a JSON document.\r\n\r\n* [Delete elements in a JSON document](/projects/json/json-21)\r\n\r\n  This example shows how to update remove an object property and an element in an array.\r\n\r\n* [Add items into a JSON array](/projects/json/json-22)\r\n  \r\n  This example shows how to add items at the first position of an array and at the last position.\r\n\r\n* [JSON - 23](json-23)\r\n\r\n  Show how to customize serialization using `DefaultJsonTypeInfoResolver`.\r\n\r\n* [JSON - 24](json-24)\r\n\r\n  Customize serialization by writing `number` as `string` in JSON for `Age` values. \r\n\r\n* [JSON - 25](json-25)\r\n\r\n  In this case we add one extra `timestamp` property to the serialization process. \r\n\r\n* [JSON - 26](json-26)\r\n\r\n  This sample shows how to detect the type of a JSON property. \r\n\r\ndotnet8"
  },
  {
    "path": "projects/json/build.bat",
    "content": "dotnet build json\r\ndotnet build json-2\r\ndotnet build json-3\r\ndotnet build json-4\r\ndotnet build json-5\r\ndotnet build json-6\r\ndotnet build json-7\r\ndotnet build json-8\r\ndotnet build json-9\r\ndotnet build json-10\r\ndotnet build json-11\r\ndotnet build json-12\r\ndotnet build json-13\r\ndotnet build json-14\r\ndotnet build json-15\r\ndotnet build json-16\r\ndotnet build json-17\r\ndotnet build json-18\r\ndotnet build json-19\r\ndotnet build json-20\r\ndotnet build json-21\r\ndotnet build json-22\r\ndotnet build json-23\r\ndotnet build json-24\r\ndotnet build json-25"
  },
  {
    "path": "projects/json/build.sh",
    "content": "#!/bin/bash\ndotnet build json\ndotnet build json-2\ndotnet build json-3\ndotnet build json-4\ndotnet build json-5\ndotnet build json-6\ndotnet build json-7\ndotnet build json-8\ndotnet build json-9\ndotnet build json-10\ndotnet build json-11\ndotnet build json-12\ndotnet build json-13\ndotnet build json-14\ndotnet build json-15\ndotnet build json-16\ndotnet build json-17\ndotnet build json-18\ndotnet build json-19\ndotnet build json-20\ndotnet build json-21\ndotnet build json-22\ndotnet build json-23\ndotnet build json-24\ndotnet build json-25\n"
  },
  {
    "path": "projects/json/json/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.MapGet(\"/\",  () =>\r\n{\r\n    var payload = new Person\r\n    {\r\n        Name = \"Annie\",\r\n        Age = 33,\r\n        IsMarried = false,\r\n        CurrentTime = DateTimeOffset.UtcNow,\r\n        Characters = new Dictionary<string, bool>\r\n        {\r\n            {\"Funny\" , true},\r\n            {\"Feisty\" , true},\r\n            {\"Brilliant\" , true},\r\n            {\"FOMA\", false}\r\n        },\r\n        IsWorking = true\r\n    };\r\n\r\n    return Results.Json(payload);\r\n});\r\n\r\napp.Run();\r\n\r\npublic class Person\r\n{\r\n    public string Name { get; set; }\r\n\r\n    public int Age { get; set; }\r\n\r\n    public bool IsMarried { get; set; }\r\n\r\n    public DateTimeOffset CurrentTime { get; set; }\r\n\r\n    public bool? IsWorking { get; set; }\r\n\r\n    public Dictionary<string, bool> Characters { get; set; }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/json/json/README.md",
    "content": "# New System.Text.Json library\r\n\r\nUse `JsonSerializer.SerializeAsync` to serialize your object to json directly to stream. "
  },
  {
    "path": "projects/json/json/json.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-10/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Serialization;\r\n\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var payload = new List<Person> {\r\n        new Person\r\n        {\r\n            Name = \"Annie\",\r\n            Age = 33,\r\n            IsMarried = null,\r\n            CurrentTime = DateTimeOffset.UtcNow,\r\n            IsWorking = true\r\n        },\r\n        new Person\r\n        {\r\n            Name = \"Dody\",\r\n            Age = 42,\r\n            IsMarried = false,\r\n            IsHealthy = true\r\n        },\r\n    };\r\n\r\n    var options = new JsonSerializerOptions\r\n    {\r\n        WriteIndented = true,\r\n        DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, //Pay attention here with interaction with the IsMarried and IsWorking properties\r\n        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,\r\n        DictionaryKeyPolicy = JsonNamingPolicy.CamelCase\r\n    };\r\n\r\n    return Results.Json(payload, options);\r\n});\r\n\r\napp.Run();\r\n\r\npublic class Person\r\n{\r\n    public string Name { get; set; }\r\n\r\n    [JsonIgnore(Condition = JsonIgnoreCondition.Always)]\r\n    public int? Age { get; set; }\r\n\r\n    [JsonIgnore(Condition = JsonIgnoreCondition.Never)]\r\n    public bool? IsMarried { get; set; }\r\n\r\n    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]\r\n    public DateTimeOffset CurrentTime { get; set; }\r\n\r\n    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]// Do not serialize this property when null\r\n    public bool? IsWorking { get; set; }\r\n\r\n    [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]\r\n    public bool IsHealthy { get; set; }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/json/json-10/README.md",
    "content": "# Control JsonIgnore behavior.\r\n\r\n* `[JsonIgnore]`. This tells the serializer not to generate the property in the output JSON document.\r\n  * `[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]`. This tells serializer to not generate the property when it has null value.\r\n  * `[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]`. This tells serializer to not generate the property if it has default value.\r\n  * `[JsonIgnore(Condition = JsonIngoreCondition.Never)]`. This tells serializer to always generate the property regardless of the options set at `JsonSerializerOptions`.\r\n  * `[JsonIgnore(Condition = JsonIngoreCondition.Always)]`. This tells serializer to always **not** generate the property. This is the default behaviour.\r\n  \r\n"
  },
  {
    "path": "projects/json/json-10/json-10.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-11/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Serialization;\r\nusing System.Text.RegularExpressions;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", async () =>\r\n{\r\n    var payload = new Person\r\n    {\r\n        Name = \"Annie\",\r\n        DateOfBirth = new DateTime(1984, 11, 20) // 1000 days\r\n    };\r\n\r\n    var options = new JsonSerializerOptions\r\n    {\r\n        WriteIndented = true,\r\n        DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,\r\n        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,\r\n        DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,\r\n        Converters = { new DateTimeConverter() }\r\n    };\r\n\r\n    var filePath = Path.Combine(app.Environment.ContentRootPath, \"person.json\");\r\n    \r\n    using (FileStream write = File.Create(filePath))\r\n    {\r\n        await JsonSerializer.SerializeAsync(write, payload, typeof(Person), options);\r\n    }\r\n\r\n    using FileStream fs = File.OpenRead(filePath);\r\n    Person p = await JsonSerializer.DeserializeAsync(fs, typeof(Person), options) as Person;\r\n\r\n    return Results.Text($@\"<html><body>\r\n    Name : { p.Name} <br/>\r\n    Date of Birth : { p.DateOfBirth } <br/>\r\n    </body></html>\", \"text/html\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class Person\r\n{\r\n    public string Name { get; set; }\r\n\r\n    public DateTime DateOfBirth { get; set; }\r\n}\r\n\r\npublic class DateTimeConverter : JsonConverter<DateTime>\r\n{\r\n    const long InitialJavaScriptDateTicks = 621355968000000000;\r\n    Regex JsDate = new Regex(@\"Date\\((?<Date>[0-9]+)\\)\", RegexOptions.Compiled | RegexOptions.IgnoreCase);\r\n\r\n    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)\r\n    {\r\n        string value = reader.GetString();\r\n        var match = JsDate.Match(value);\r\n        var val = match.Groups[\"Date\"].Value;\r\n        return new DateTime((long.Parse(val) * 10000) + InitialJavaScriptDateTicks, DateTimeKind.Utc);\r\n    }\r\n\r\n    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)\r\n    {\r\n        DateTime utcDateTime = value.ToUniversalTime();\r\n        long javaScriptTicks = (utcDateTime.Ticks - InitialJavaScriptDateTicks) / 10000;\r\n\r\n        writer.WriteStringValue(\"/Date(\" + javaScriptTicks.ToString() + \")/\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/json/json-11/README.md",
    "content": "# Custom Converter \r\n\r\nThis is an custom converter implementation for DateTime type for JsonSerializer in the format of JSON date ticks. Much of the code comes from this [Tweet](https://twitter.com/James_M_South/status/1268102226490384385).\r\n\r\nMore code also comes from https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Converters/JavaScriptDateTimeConverter.cs."
  },
  {
    "path": "projects/json/json-11/json-11.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-11/person.json",
    "content": "{\r\n  \"name\": \"Annie\",\r\n  \"dateOfBirth\": \"/Date(469749600000)/\"\r\n}"
  },
  {
    "path": "projects/json/json-12/Program.cs",
    "content": "using System.Text.Json.Nodes;\r\n\r\nWebApplication app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    var numberNode = JsonNode.Parse(@\"{\"\"age\"\" : 34 }\");\r\n    int age = (int) numberNode[\"age\"];\r\n    await context.Response.WriteAsync($\"{numberNode} \\n\");\r\n    await context.Response.WriteAsync($\"Value of age is {age}\\n\\n\\n\");\r\n    \r\n    var stringNode = JsonNode.Parse(@\"{\"\"name\"\" : \"\"anne\"\"}\");\r\n    string name = (string) stringNode[\"name\"];\r\n    await context.Response.WriteAsync($\"{stringNode} \\n\");\r\n    await context.Response.WriteAsync($\"Value of name is {name}\\n\\n\\n\");\r\n\r\n    var numberArrayNode = JsonNode.Parse(\"[2, 4, 6]\");\r\n    await context.Response.WriteAsync($\"{numberArrayNode}\\n\");\r\n    int item0 = (int) numberArrayNode[0];\r\n    int item1 = (int) numberArrayNode[1];\r\n    int item2 = (int) numberArrayNode[2];\r\n    await context.Response.WriteAsync($\"Values of array: {item0}, {item1}, {item2}\\n\\n\");\r\n\r\n    //alternatively\r\n    JsonArray childrenAge = numberArrayNode.AsArray();\r\n    await context.Response.WriteAsync($\"Size of array: {childrenAge.Count}\\nValues of array: \");\r\n    foreach(JsonNode r in childrenAge)\r\n    {\r\n        await context.Response.WriteAsync($\"{r}, \");\r\n    }\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/json/json-12/README.md",
    "content": "# Writable DOM = Primitives\r\n\r\nThis sample shows how to parse and access number, string and an array values from JSON string.\r\n"
  },
  {
    "path": "projects/json/json-12/json-12.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-13/Program.cs",
    "content": "using System.Text.Json.Nodes;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    var objectNode = JsonNode.Parse(@\"\r\n    {\r\n        \"\"person\"\" : {\r\n            \"\"name\"\" : \"\"anne\"\",\r\n            \"\"age\"\" : 34 ,\r\n            \"\"favoriteNumbers\"\" : [2, 4, 6]\r\n        }\r\n    }\");\r\n    \r\n    await context.Response.WriteAsync($\"{objectNode} \\n\");\r\n\r\n    var person = objectNode[\"person\"];\r\n    int age = (int) person[\"age\"];\r\n    string name = (string) person[\"name\"];\r\n    int[] favoriteNumbers = person[\"favoriteNumbers\"].AsArray().Select(x => (int) x).ToArray();\r\n    \r\n    await context.Response.WriteAsync($\"name : {name}\\n\");\r\n    await context.Response.WriteAsync($\"age : {age}\\n\");\r\n    await context.Response.WriteAsync($\"favorite numbers : {string.Join(\",\", favoriteNumbers)}\\n\\n\");\r\n\r\n    await context.Response.WriteAsync(\"Now we are using JsonObject\\n\");\r\n    JsonObject personObject = person.AsObject();\r\n    await context.Response.WriteAsync($\"Number of elements in the object: {personObject.Count}\\n\\n\");\r\n    foreach(var el in personObject)\r\n    {\r\n        await context.Response.WriteAsync($\"{el.Key} => {el.Value}\\n\");\r\n    }\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/json/json-13/README.md",
    "content": "# Writable DOM - Objects\r\n\r\nThis sample shows how to parse and access objects from JSON string. We will be using `JsonObject` as well.\r\n"
  },
  {
    "path": "projects/json/json-13/json-13.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-14/Program.cs",
    "content": "using System.Text.Json.Nodes;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    var objectNode = JsonNode.Parse(@\"\r\n    [\r\n        {\r\n            \"\"name\"\" : \"\"anne\"\",\r\n            \"\"age\"\" : 34\r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"hadi\"\",\r\n            \"\"age\"\" : 29\r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"abdelfattah\"\",\r\n            \"\"age\"\" : 30\r\n        }\r\n    ]\");\r\n\r\n    await context.Response.WriteAsync(objectNode.ToString());\r\n    await context.Response.WriteAsync(\"\\n\");\r\n    await context.Response.WriteAsync($\"Path: {objectNode.GetPath()}\");\r\n    await context.Response.WriteAsync(\"\\n\\n\\nNow let's find an object with age value of 29\\n\");\r\n\r\n    var hadi = objectNode.AsArray().Where(x => x[\"age\"].GetValue<int>() == 29).FirstOrDefault();\r\n    if (hadi is object)\r\n    {\r\n        await context.Response.WriteAsync(\"\\n\");\r\n        await context.Response.WriteAsync(hadi.ToString());\r\n        await context.Response.WriteAsync($\"\\nPath : {hadi.GetPath()}\");\r\n    }\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/json/json-14/README.md",
    "content": "# Writable DOM - Finding a node using LINQ\r\n\r\nIn this example we are trying to find a node in an array based on one of its property value using LINQ.\r\n\r\n\r\n"
  },
  {
    "path": "projects/json/json-14/json-14.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-15/Program.cs",
    "content": "using System.Text.Json.Nodes;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    var objectNode = JsonNode.Parse(@\"\r\n    [\r\n        {\r\n            \"\"name\"\" : \"\"anne\"\",\r\n            \"\"age\"\" : 34,\r\n            \"\"gender\"\" : \"\"female\"\"\r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"hadi\"\",\r\n            \"\"age\"\" : 29,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [1, 5, 6] \r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"abdelfattah\"\",\r\n            \"\"age\"\" : 30,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [3, 9, 10, 11] \r\n        }\r\n    ]\");\r\n\r\n    await context.Response.WriteAsync(objectNode.ToString());\r\n    await context.Response.WriteAsync(\"\\n\");\r\n    await context.Response.WriteAsync($\"Path: {objectNode.GetPath()}\");\r\n\r\n    await context.Response.WriteAsync(\"\\n\\nNow lets find the non-binary person who has three `favoriteNumbers`\\n\");\r\n\r\n    var hadi = objectNode.AsArray().Where(x => x[\"gender\"].GetValue<string>() == \"non-binary\" && x[\"favoriteNumbers\"].AsArray().Count == 3).FirstOrDefault();\r\n\r\n    if (hadi is object)\r\n    {\r\n        await context.Response.WriteAsync(\"\\n\");\r\n        await context.Response.WriteAsync(hadi.ToString());\r\n        await context.Response.WriteAsync($\"\\nPath : {hadi.GetPath()}\");\r\n    }    \r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/json/json-15/README.md",
    "content": "# Writable DOM - Finding a node using LINQ 2\r\n\r\nIn this example we are trying to find a node in an array based on two property, one is a simple string property and the other is an array.\r\n\r\n\r\n"
  },
  {
    "path": "projects/json/json-15/json-15.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-16/Program.cs",
    "content": "using System.Text.Json.Nodes;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    var objectNode = JsonNode.Parse(@\"\r\n    [\r\n        {\r\n            \"\"name\"\" : \"\"anne\"\",\r\n            \"\"age\"\" : 34,\r\n            \"\"gender\"\" : \"\"female\"\"\r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"hadi\"\",\r\n            \"\"age\"\" : 29,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [1, 5, 6] \r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"abdelfattah\"\",\r\n            \"\"age\"\" : 30,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [3, 9, 10, 11] \r\n        }\r\n    ]\");\r\n\r\n    await context.Response.WriteAsync(objectNode.ToString());\r\n    await context.Response.WriteAsync(\"\\n\");\r\n    await context.Response.WriteAsync($\"Path: {objectNode.GetPath()}\");\r\n\r\n    await context.Response.WriteAsync(\"\\n\\nNow lets find the person who has no `favoriteNumbers`\\n\");\r\n\r\n    var anne = objectNode.AsArray().Where(x => x[\"favoriteNumbers\"] is null).FirstOrDefault();\r\n\r\n    if (anne is object)\r\n    {\r\n        await context.Response.WriteAsync(\"\\n\");\r\n        await context.Response.WriteAsync(anne.ToString());\r\n        await context.Response.WriteAsync($\"\\nPath : {anne.GetPath()}\");\r\n    }    \r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/json/json-16/README.md",
    "content": "# Writable DOM - Finding a node using LINQ 3\r\n\r\nIn this example we are trying to find a node in an array based on an absence of a property.\r\n\r\n"
  },
  {
    "path": "projects/json/json-16/json-16.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-17/Program.cs",
    "content": "using System.Text.Json.Nodes;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    var objectNode = JsonNode.Parse(@\"\r\n    [\r\n        {\r\n            \"\"name\"\" : \"\"anne\"\",\r\n            \"\"age\"\" : 34,\r\n            \"\"gender\"\" : \"\"female\"\"\r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"hadi\"\",\r\n            \"\"age\"\" : 29,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [1, 5, 6] \r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"abdelfattah\"\",\r\n            \"\"age\"\" : 30,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [3, 9, 10, 11] \r\n        }\r\n    ]\");\r\n\r\n    await context.Response.WriteAsync(objectNode.ToString());\r\n    await context.Response.WriteAsync(\"\\n\");\r\n    await context.Response.WriteAsync($\"Path: {objectNode.GetPath()}\");\r\n\r\n    await context.Response.WriteAsync(\"\\n\\nNow lets find the person whose 3rd `favoriteNumbers` is 10\\n\");\r\n\r\n    var abdelfattah = objectNode.AsArray().Where(x => x[\"favoriteNumbers\"]?[2]?.GetValue<int>() == 10).FirstOrDefault();\r\n\r\n    if (abdelfattah is object)\r\n    {\r\n        await context.Response.WriteAsync(\"\\n\");\r\n        await context.Response.WriteAsync(abdelfattah.ToString());\r\n        await context.Response.WriteAsync($\"\\nPath : {abdelfattah.GetPath()}\");\r\n    }    \r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/json/json-17/README.md",
    "content": "# Writable DOM - Finding a node using LINQ 4\r\n\r\nIn this example we are trying to find a node in an array that has a specific value on its array property.\r\n\r\n"
  },
  {
    "path": "projects/json/json-17/json-17.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-18/Program.cs",
    "content": "using System.Text.Json.Nodes;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    var objectNode = JsonNode.Parse(@\"\r\n    {\r\n        \"\"name\"\" : \"\"anne\"\",\r\n        \"\"age\"\" : 34,\r\n        \"\"gender\"\" : \"\"female\"\",\r\n        \"\"favouriteNumbers\"\" : [ 1, 2, 3]\r\n    }\");\r\n\r\n    await context.Response.WriteAsync(\"From JsonNode.Parse\\n\");\r\n    await context.Response.WriteAsync(objectNode.ToString());\r\n    await context.Response.WriteAsync(\"\\n\\n\");\r\n\r\n    var verbose = new JsonObject()\r\n    {\r\n        [\"name\"] = JsonValue.Create(\"anne\"),\r\n        [\"age\"] = JsonValue.Create(34),\r\n        [\"gender\"] = JsonValue.Create(\"female\"),\r\n        [\"favoriteNumbers\"] = new JsonArray()\r\n        {\r\n            JsonValue.Create(1),\r\n            JsonValue.Create(2),\r\n            JsonValue.Create(3)\r\n        }\r\n    };\r\n\r\n    await context.Response.WriteAsync(\"From new JsonObject verbose\\n\");\r\n    await context.Response.WriteAsync(verbose.ToString());\r\n\r\n    var terse = new JsonObject()\r\n    {\r\n        [\"name\"] = \"anne\",\r\n        [\"age\"] = 34,\r\n        [\"gender\"] = \"female\",\r\n        [\"favoriteNumbers\"] = new JsonArray()\r\n        {\r\n            1, 2, 3\r\n        }\r\n    };\r\n\r\n    await context.Response.WriteAsync(\"\\n\\nFrom new JsonObject terse\\n\");\r\n    await context.Response.WriteAsync(terse.ToString());\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/json/json-18/README.md",
    "content": "# Writable DOM - Create a JSON document using JsonObject\r\n\r\nIn this example we are demonstrating on how to construct a JSON document\r\n\r\nVerbose version\r\n``` csharp\r\nvar verbose = new JsonObject()\r\n{\r\n    [\"name\"] = JsonValue.Create(\"anne\"),\r\n    [\"age\"] = JsonValue.Create(34),\r\n    [\"gender\"] = JsonValue.Create(\"female\"),\r\n    [\"favoriteNumbers\"] = new JsonArray()\r\n    {\r\n        JsonValue.Create(1),\r\n        JsonValue.Create(2),\r\n        JsonValue.Create(3)\r\n    }\r\n};\r\n```\r\n\r\nTerse version through implicit operator\r\n``` csharp\r\n\r\nvar terse = new JsonObject()\r\n{\r\n    [\"name\"] = \"anne\",\r\n    [\"age\"] = 34,\r\n    [\"gender\"] = \"female\",\r\n    [\"favoriteNumbers\"] = new JsonArray()\r\n    {\r\n        1, 2, 3\r\n    }\r\n};\r\n```\r\n"
  },
  {
    "path": "projects/json/json-18/json-18.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-19/Program.cs",
    "content": "using System.Text.Json.Nodes;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    var objectNode = JsonNode.Parse(@\"\r\n    [\r\n        {\r\n            \"\"name\"\" : \"\"anne\"\",\r\n            \"\"age\"\" : 34,\r\n            \"\"gender\"\" : \"\"female\"\"\r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"hadi\"\",\r\n            \"\"age\"\" : 29,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [1, 5, 6] \r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"abdelfattah\"\",\r\n            \"\"age\"\" : 30,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [3, 9, 10, 11] \r\n        }\r\n    ]\");\r\n\r\n    await context.Response.WriteAsync(\"From JsonNode.Parse\\n\");\r\n    await context.Response.WriteAsync(objectNode.ToString());\r\n    await context.Response.WriteAsync(\"\\n\\n\");\r\n\r\n    var verbose = new JsonArray()\r\n    {\r\n        new JsonObject()\r\n        {\r\n            [\"name\"] = JsonValue.Create(\"anne\"),\r\n            [\"age\"] = JsonValue.Create(34),\r\n            [\"gender\"] = JsonValue.Create(\"female\"),\r\n            [\"favoriteNumbers\"] = new JsonArray()\r\n            {\r\n                JsonValue.Create(1),\r\n                JsonValue.Create(2),\r\n                JsonValue.Create(3)\r\n            }\r\n        },\r\n        new JsonObject()\r\n        {\r\n            [\"name\"] = JsonValue.Create(\"hadi\"),\r\n            [\"age\"] = JsonValue.Create(29),\r\n            [\"gender\"] = JsonValue.Create(\"non-binary\"),\r\n            [\"favoriteNumbers\"] = new JsonArray()\r\n            {\r\n                JsonValue.Create(1),\r\n                JsonValue.Create(5),\r\n                JsonValue.Create(6)\r\n            }\r\n        },\r\n        new JsonObject()\r\n        {\r\n            [\"name\"] = JsonValue.Create(\"abdelfattah\"),\r\n            [\"age\"] = JsonValue.Create(30),\r\n            [\"gender\"] = JsonValue.Create(\"non-binary\"),\r\n            [\"favoriteNumbers\"] = new JsonArray()\r\n            {\r\n                JsonValue.Create(3),\r\n                JsonValue.Create(9),\r\n                JsonValue.Create(10),\r\n                JsonValue.Create(11)\r\n            }\r\n        }\r\n    };\r\n\r\n    await context.Response.WriteAsync(\"From new JsonObject verbose\\n\");\r\n    await context.Response.WriteAsync(verbose.ToString());\r\n\r\n    var terse = new JsonArray()\r\n    {\r\n        new JsonObject()\r\n        {\r\n            [\"name\"] = \"anne\",\r\n            [\"age\"] = 34,\r\n            [\"gender\"] = \"female\",\r\n            [\"favoriteNumbers\"] = new JsonArray(1, 2, 3)\r\n        },\r\n        new JsonObject()\r\n        {\r\n            [\"name\"] = \"hadi\",\r\n            [\"age\"] = 29,\r\n            [\"gender\"] = \"non-binary\",\r\n            [\"favoriteNumbers\"] = new JsonArray(1, 5, 6)\r\n        },\r\n        new JsonObject()\r\n        {\r\n            [\"name\"] = \"abdelfattah\",\r\n            [\"age\"] = 30,\r\n            [\"gender\"] = \"non-binary\",\r\n            [\"favoriteNumbers\"] = new JsonArray(3, 9, 10, 11)\r\n        }\r\n    };\r\n\r\n    await context.Response.WriteAsync(\"\\n\\nFrom new JsonObject terse\\n\");\r\n    await context.Response.WriteAsync(terse.ToString());\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/json/json-19/README.md",
    "content": "# Writable DOM - Create a JSON document using JsonArray\r\n\r\nIn this example we are demonstrating on how to construct a JSON document using `JsonArray`.\r\n\r\nVerbose version\r\n``` csharp\r\nvar verbose = new JsonArray()\r\n{\r\n    new JsonObject()\r\n    {\r\n        [\"name\"] = JsonValue.Create(\"anne\"),\r\n        [\"age\"] = JsonValue.Create(34),\r\n        [\"gender\"] = JsonValue.Create(\"female\"),\r\n        [\"favoriteNumbers\"] = new JsonArray()\r\n        {\r\n            JsonValue.Create(1),\r\n            JsonValue.Create(2),\r\n            JsonValue.Create(3)\r\n        }\r\n    },\r\n    new JsonObject()\r\n    {\r\n        [\"name\"] = JsonValue.Create(\"hadi\"),\r\n        [\"age\"] = JsonValue.Create(29),\r\n        [\"gender\"] = JsonValue.Create(\"non-binary\"),\r\n        [\"favoriteNumbers\"] = new JsonArray()\r\n        {\r\n            JsonValue.Create(1),\r\n            JsonValue.Create(5),\r\n            JsonValue.Create(6)\r\n        }\r\n    },\r\n    new JsonObject()\r\n    {\r\n        [\"name\"] = JsonValue.Create(\"abdelfattah\"),\r\n        [\"age\"] = JsonValue.Create(30),\r\n        [\"gender\"] = JsonValue.Create(\"non-binary\"),\r\n        [\"favoriteNumbers\"] = new JsonArray()\r\n        {\r\n            JsonValue.Create(3),\r\n            JsonValue.Create(9),\r\n            JsonValue.Create(10),\r\n            JsonValue.Create(11)\r\n        }\r\n    }\r\n};\r\n```\r\n\r\nTerse version through implicit operator\r\n``` csharp\r\nvar terse = new JsonArray()\r\n{\r\n    new JsonObject()\r\n    {\r\n        [\"name\"] = \"anne\",\r\n        [\"age\"] = 34,\r\n        [\"gender\"] = \"female\",\r\n        [\"favoriteNumbers\"] = new JsonArray(1, 2, 3)\r\n    },\r\n    new JsonObject()\r\n    {\r\n        [\"name\"] = \"hadi\",\r\n        [\"age\"] = 29,\r\n        [\"gender\"] = \"non-binary\",\r\n        [\"favoriteNumbers\"] = new JsonArray(1, 5, 6)\r\n    },\r\n    new JsonObject()\r\n    {\r\n        [\"name\"] = \"abdelfattah\",\r\n        [\"age\"] = 30,\r\n        [\"gender\"] = \"non-binary\",\r\n        [\"favoriteNumbers\"] = new JsonArray(3, 9, 10, 11)\r\n    }\r\n};\r\n```\r\n"
  },
  {
    "path": "projects/json/json-19/json-19.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-2/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Serialization;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var payload = new Person\r\n        // We won't assign any value to the property IsWorking. \r\n        {\r\n        Name = \"Annie\",\r\n        Age = 33,\r\n        IsMarried = false,\r\n        CurrentTime = DateTimeOffset.UtcNow,\r\n        Characters = new Dictionary<string, bool>\r\n        {\r\n                {\"Funny\" , true},\r\n                {\"Feisty\" , true},\r\n                {\"Brilliant\" , true},\r\n                {\"FOMA\", false}\r\n        }\r\n    };\r\n\r\n    var options = new JsonSerializerOptions\r\n    {\r\n        WriteIndented = true,\r\n        DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,\r\n        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,\r\n        DictionaryKeyPolicy = JsonNamingPolicy.CamelCase\r\n    };\r\n\r\n    return Results.Json(payload, options);\r\n});\r\n\r\napp.Run();\r\npublic class Person\r\n{\r\n    public string Name { get; set; }\r\n\r\n    public int Age { get; set; }\r\n\r\n    public bool IsMarried { get; set; }\r\n\r\n    public DateTimeOffset CurrentTime { get; set; }\r\n\r\n    public bool? IsWorking { get; set; }\r\n\r\n    public Dictionary<string, bool> Characters { get; set; }\r\n}\r\n"
  },
  {
    "path": "projects/json/json-2/README.md",
    "content": "# Setting the options for JsonSerializer.SerializeAsync\r\n\r\nThese are the following options (`JsonSerializerOptions`) you can set that affect the serialization of your object\r\n\r\n* `IgnoreNullValues`. If your property is null, do not serialize it to JSON.\r\n* `PropertyNamingPolicy`. If you don't set this, your property will be serialized as PascalCase, which is the property naming convention for C#. To serialize it to camelCase, use `JsonNamingPolicy.CamelCase`.\r\n* `DictionaryKeyPolicy`. Ditto above but for your dictionary keys.\r\n* `WriteIndented`. Set it to true so it is formatted for human readibility. For production though, set it to false.\r\n"
  },
  {
    "path": "projects/json/json-2/json-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-20/Program.cs",
    "content": "using System.Text.Json.Nodes;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    var objectNode = JsonNode.Parse(@\"\r\n    [\r\n        {\r\n            \"\"name\"\" : \"\"anne\"\",\r\n            \"\"age\"\" : 34,\r\n            \"\"gender\"\" : \"\"female\"\"\r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"hadi\"\",\r\n            \"\"age\"\" : 29,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [1, 5, 6] \r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"abdelfattah\"\",\r\n            \"\"age\"\" : 30,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [3, 9, 10, 11] \r\n        }\r\n    ]\");\r\n\r\n    await context.Response.WriteAsync(\"From JsonNode.Parse\\n\");\r\n    await context.Response.WriteAsync(objectNode.ToString());\r\n    await context.Response.WriteAsync(\"\\n\\n\");\r\n\r\n    objectNode[0][\"name\"] = \"Susan\";\r\n    objectNode[1][\"name\"] = \"Prince\";\r\n    objectNode[2][\"name\"] = \"Cyrus\";  \r\n\r\n    await context.Response.WriteAsync(\"Updated document\\n\");\r\n    await context.Response.WriteAsync(objectNode.ToString());\r\n    await context.Response.WriteAsync(\"\\n\\n\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/json/json-20/README.md",
    "content": "# Writable DOM - Update document\r\n\r\nThis example shows how to update properties of a JSON document."
  },
  {
    "path": "projects/json/json-20/json-20.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-21/Program.cs",
    "content": "using System.Text.Json.Nodes;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    var objectNode = JsonNode.Parse(@\"\r\n    [\r\n        {\r\n            \"\"name\"\" : \"\"anne\"\",\r\n            \"\"age\"\" : 34,\r\n            \"\"gender\"\" : \"\"female\"\"\r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"hadi\"\",\r\n            \"\"age\"\" : 29,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [1, 5, 6] \r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"abdelfattah\"\",\r\n            \"\"age\"\" : 30,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [3, 9, 10, 11] \r\n        }\r\n    ]\");\r\n\r\n    await context.Response.WriteAsync(\"From JsonNode.Parse\\n\");\r\n    await context.Response.WriteAsync(objectNode.ToString());\r\n    await context.Response.WriteAsync(\"\\n\\n\");\r\n\r\n    objectNode[0].AsObject().Remove(\"name\");\r\n    objectNode.AsArray().RemoveAt(1);\r\n\r\n    await context.Response.WriteAsync(\"Updated document\\n\");\r\n    await context.Response.WriteAsync(objectNode.ToString());\r\n    await context.Response.WriteAsync(\"\\n\\n\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/json/json-21/README.md",
    "content": "# Writable DOM - Remove elements\r\n\r\nThis example shows how to update remove an object property and an element in an array.\r\n\r\n```csharp\r\nobjectNode[0].AsObject().Remove(\"name\");\r\nobjectNode.AsArray().RemoveAt(1);\r\n```"
  },
  {
    "path": "projects/json/json-21/json-21.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-22/Program.cs",
    "content": "using System.Text.Json.Nodes;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    var objectNode = JsonNode.Parse(@\"\r\n    [\r\n        {\r\n            \"\"name\"\" : \"\"anne\"\",\r\n            \"\"age\"\" : 34,\r\n            \"\"gender\"\" : \"\"female\"\"\r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"hadi\"\",\r\n            \"\"age\"\" : 29,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [1, 5, 6] \r\n        },\r\n        {\r\n            \"\"name\"\" : \"\"abdelfattah\"\",\r\n            \"\"age\"\" : 30,\r\n            \"\"gender\"\" : \"\"non-binary\"\",\r\n            \"\"favoriteNumbers\"\" : [3, 9, 10, 11] \r\n        }\r\n    ]\");\r\n\r\n    await context.Response.WriteAsync(\"From JsonNode.Parse\\n\");\r\n    await context.Response.WriteAsync(objectNode.ToString());\r\n    await context.Response.WriteAsync(\"\\n\\n\");\r\n\r\n    var additionalNode = JsonNode.Parse(@\"\r\n    {\r\n            \"\"name\"\" : \"\"prince\"\",\r\n            \"\"age\"\" : 30,\r\n            \"\"gender\"\" : \"\"male\"\"\r\n    }\r\n    \");\r\n\r\n    var objectArray = objectNode.AsArray();\r\n    objectArray.Insert(objectArray.Count, additionalNode);\r\n\r\n    var firstNode = JsonNode.Parse(@\"\r\n    {\r\n            \"\"name\"\" : \"\"arathi\"\",\r\n            \"\"age\"\" : 33,\r\n            \"\"gender\"\" : \"\"female\"\"\r\n    }\r\n    \");\r\n\r\n    objectArray.Insert(0, firstNode);\r\n\r\n    await context.Response.WriteAsync(\"Updated document\\n\");\r\n    await context.Response.WriteAsync(objectNode.ToString());\r\n    await context.Response.WriteAsync(\"\\n\\n\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/json/json-22/README.md",
    "content": "# Writable DOM - add item into array\r\n\r\nThis example shows how to add items at the first position of an array and at the last position.\r\n"
  },
  {
    "path": "projects/json/json-22/json-22.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-23/Program.cs",
    "content": "using System.Text.Json.Serialization.Metadata;\r\nusing System.Text.Json;\r\n\r\nvar options = new JsonSerializerOptions\r\n{\r\n    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,\r\n    TypeInfoResolver = new DefaultJsonTypeInfoResolver\r\n    {\r\n        Modifiers = { IgnoreNegativeValues }\r\n    }\r\n};\r\n\r\nstatic void IgnoreNegativeValues (JsonTypeInfo typeInfo)\r\n{\r\n    if (typeInfo.Type != typeof(People))\r\n        return;\r\n\r\n    foreach(JsonPropertyInfo propInfo in typeInfo.Properties)\r\n    {\r\n        if (propInfo.PropertyType == typeof(int))\r\n            propInfo.ShouldSerialize = static (obj, val) => (int)val > 0;\r\n    }\r\n}\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var people = new List<People> \r\n    {\r\n        new People(\"Anne\", 37),\r\n        new People(\"John\", 23),\r\n        new People(\"Megan\", -12)\r\n    };\r\n\r\n    var list = JsonSerializer.Serialize(people, options);\r\n\r\n    return Results.Text(list, \"application/json\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic record People(string Name, int Age);\r\n\r\n"
  },
  {
    "path": "projects/json/json-23/README.md",
    "content": "# Contract Customization\r\n\r\nThis example shows how to customize serialization using `DefaultJsonTypeInfoResolver`.  \r\n\r\n`IgnoreNegativeValue` code comes from https://devblogs.microsoft.com/dotnet/system-text-json-in-dotnet-7/. "
  },
  {
    "path": "projects/json/json-23/json-23.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-24/Program.cs",
    "content": "using System.Text.Json.Serialization.Metadata;\r\nusing System.Text.Json;\r\n\r\nvar options = new JsonSerializerOptions\r\n{\r\n    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,\r\n    TypeInfoResolver = new DefaultJsonTypeInfoResolver\r\n    {\r\n        Modifiers = { NumberAsString }\r\n    }\r\n};\r\n\r\nstatic void NumberAsString (JsonTypeInfo typeInfo)\r\n{\r\n    if (typeInfo.Type != typeof(People))\r\n        return;\r\n\r\n    foreach(JsonPropertyInfo propInfo in typeInfo.Properties)\r\n    {\r\n        if (propInfo.PropertyType == typeof(int) && propInfo.Name == \"age\")\r\n            propInfo.NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.WriteAsString;\r\n    }\r\n}\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var people = new List<People> \r\n    {\r\n        new People(\"Anne\", 37, 165),\r\n        new People(\"John\", 23, 180),\r\n        new People(\"Megan\", 34, 150)\r\n    };\r\n\r\n    var list = JsonSerializer.Serialize(people, options);\r\n\r\n    return Results.Text(list, \"application/json\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic record People(string Name, int Age, int Height);\r\n\r\n"
  },
  {
    "path": "projects/json/json-24/README.md",
    "content": "# Contract Customization - write number as string\r\n\r\nThis example shows how to customize serialization using `DefaultJsonTypeInfoResolver`. In this case we want to write `number` as `string` in JSON for `Age` values. \r\n"
  },
  {
    "path": "projects/json/json-24/json-24.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-25/Program.cs",
    "content": "using System.Text.Json.Serialization.Metadata;\r\nusing System.Text.Json;\r\n\r\nvar options = new JsonSerializerOptions\r\n{\r\n    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,\r\n    TypeInfoResolver = new DefaultJsonTypeInfoResolver\r\n    {\r\n        Modifiers = { AddTimeStamp }\r\n    }\r\n};\r\n\r\nstatic void AddTimeStamp (JsonTypeInfo typeInfo)\r\n{\r\n    if (typeInfo.Kind != JsonTypeInfoKind.Object && \r\n        typeInfo.Properties.All(prop => prop.Name == \"timestamp\"))\r\n        return;\r\n\r\n    var timestamp = typeInfo.CreateJsonPropertyInfo(typeof(DateTime), \"timestamp\");\r\n    timestamp.Get = x => DateTime.UtcNow;\r\n    typeInfo.Properties.Add(timestamp);\r\n}\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var people = new List<People> \r\n    {\r\n        new People(\"Anne\", 37, 165),\r\n        new People(\"John\", 23, 180),\r\n        new People(\"Megan\", 34, 150)\r\n    };\r\n\r\n    var list = JsonSerializer.Serialize(people, options);\r\n\r\n    return Results.Text(list, \"application/json\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic record People(string Name, int Age, int Height);\r\n\r\n"
  },
  {
    "path": "projects/json/json-25/README.md",
    "content": "# Contract Customization - add additional property on serialization\r\n\r\nThis example shows how to customize serialization using `DefaultJsonTypeInfoResolver`. In this case we add one extra \"timestamp\" property to the serialization process. \r\n"
  },
  {
    "path": "projects/json/json-25/json-25.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-26/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#eef7de\",\r\n        \"activityBar.background\": \"#eef7de\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#65b0da\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#eef7de\",\r\n        \"statusBar.background\": \"#d8eeb4\",\r\n        \"statusBar.debuggingBackground\": \"#cab4ee\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#c2e58a\",\r\n        \"statusBarItem.remoteBackground\": \"#d8eeb4\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#d8eeb4\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#d8eeb499\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#d8eeb4\"\r\n}"
  },
  {
    "path": "projects/json/json-26/Program.cs",
    "content": "using System.Text.Json.Nodes;\r\nusing System.Text.Json;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    var objectNode = JsonNode.Parse(\"\"\"\r\n    {\r\n        \"name\" : \"abdelfattah\",\r\n        \"age\" : 33,\r\n        \"isMarried\" : true,\r\n        \"gender\" : \"non-binary\",\r\n        \"address\" : {\r\n            \"city\" : \"Cairo\",\r\n            \"country\" : \"Egypt\"\r\n        },\r\n        \"favoriteNumbers\" : [3, 9, 10, 11] \r\n    }\r\n    \"\"\");\r\n\r\n    await context.Response.WriteAsync(\"From JsonNode.Parse\\n\");\r\n    await context.Response.WriteAsync(objectNode.ToString());\r\n    await context.Response.WriteAsync(\"\\n\\n\");\r\n\r\n    var json = objectNode.AsObject();\r\n\r\n    foreach(var i in json)\r\n    {\r\n        var val = i.Value;\r\n        switch(val.GetValueKind())\r\n        {\r\n            case JsonValueKind.String : \r\n                await context.Response.WriteAsync($\"|{i.Key} |{val} | string |\\n\");\r\n                break;\r\n            case JsonValueKind.False:\r\n            case JsonValueKind.True:\r\n                await context.Response.WriteAsync($\"|{i.Key} |{val} | boolean |\\n\");\r\n                break;\r\n            case JsonValueKind.Number:\r\n                var v = val.AsValue();\r\n                if (v.TryGetValue(out int intVal))\r\n                {\r\n                    await context.Response.WriteAsync($\"|{i.Key} |{intVal} | int |\\n\");\r\n                }\r\n                else if (v.TryGetValue(out int doubleVal))\r\n                {\r\n                    await context.Response.WriteAsync($\"|{i.Key} |{doubleVal} | double |\\n\");        \r\n                }\r\n                break;\r\n            case JsonValueKind.Array:\r\n                    var arr = val.AsArray();\r\n                    await context.Response.WriteAsync($\"|{i.Key} |{arr} | array |\\n\");\r\n                break;\r\n            case JsonValueKind.Object:\r\n                    var obj = val.AsObject();\r\n                    await context.Response.WriteAsync($\"|{i.Key} |{obj} | object |\\n\");\r\n                break;\r\n            default : break;\r\n        }\r\n    }\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/json/json-26/README.md",
    "content": "# Writable DOM - Find the type of a JSON property\r\n\r\nIn this example we are demonstrating on how to detect the type of a JSON property."
  },
  {
    "path": "projects/json/json-26/json-26.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-3/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Serialization;\r\n\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var payload = new\r\n    {\r\n        Name = \"Annie\",\r\n        Age = 33,\r\n        IsMarried = false,\r\n        CurrentTime = DateTimeOffset.UtcNow,\r\n        Characters = new Dictionary<string, bool>\r\n        {\r\n            {\"Funny\" , true},\r\n            {\"Feisty\" , true},\r\n            {\"Brilliant\" , true},\r\n            {\"FOMA\", false}\r\n        }\r\n    };\r\n\r\n    var options = new JsonSerializerOptions\r\n    {\r\n        WriteIndented = true,\r\n        DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,\r\n        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,\r\n        DictionaryKeyPolicy = JsonNamingPolicy.CamelCase\r\n    };\r\n\r\n    return Results.Json(payload, options);\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/json/json-3/README.md",
    "content": "# Serialize anonymous type using JsonSerializer.SerializeAsync\r\n\r\nYou can also just create adhoc JSON document using anonymous type. "
  },
  {
    "path": "projects/json/json-3/json-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-4/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Serialization;\r\n\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var payload = new Person\r\n    {\r\n        Name = \"Annie\",\r\n        Age = 33,\r\n        IsMarried = false,\r\n        CurrentTime = DateTimeOffset.UtcNow,\r\n        Characters = new Dictionary<string, bool>\r\n        {\r\n            {\"Funny\" , true},\r\n            {\"Feisty\" , true},\r\n            {\"Brilliant\" , true},\r\n            {\"FOMA\", false}\r\n        },\r\n        IsWorking = true\r\n    };\r\n\r\n    var options = new JsonSerializerOptions\r\n    {\r\n        WriteIndented = true,\r\n        DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,\r\n        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,\r\n        DictionaryKeyPolicy = JsonNamingPolicy.CamelCase\r\n    };\r\n\r\n    return Results.Json(payload, options);\r\n});\r\n\r\napp.Run();\r\n\r\npublic class Person\r\n{\r\n    //Setting this property name explicitly means that the JsonSerializerOptions.PropertyNamingPolicy won't apply\r\n    [JsonPropertyName(\"FullName\")]\r\n    public string Name { get; set; }\r\n\r\n    public int Age { get; set; }\r\n\r\n    public bool IsMarried { get; set; }\r\n\r\n    public DateTimeOffset CurrentTime { get; set; }\r\n\r\n    [JsonIgnore] // Do not serialize this property\r\n    public bool? IsWorking { get; set; }\r\n\r\n    public Dictionary<string, bool> Characters { get; set; }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/json/json-4/README.md",
    "content": "# Control JSON serialization using attributes\r\n\r\nRight now there are two attributes available for serializations\r\n\r\n* `[JsonPropertyName]`. This controls the property name generated by the serialization. The name specified here will not be affected by `JsonSerializerOptions.PropertyNamingPolicy`.\r\n* `[JsonIgnore]`. This tells the serializer not to generate the property in the output JSON document."
  },
  {
    "path": "projects/json/json-4/json-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-5/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Serialization;\r\n\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var payload = new Person\r\n    {\r\n        Name = \"Annie\",\r\n        Age = 33,\r\n        IsMarried = false,\r\n        CurrentTime = DateTimeOffset.UtcNow,\r\n        Characters = new Dictionary<string, bool>\r\n        {\r\n            {\"Funny\" , true},\r\n            {\"Feisty\" , true},\r\n            {\"Brilliant\" , true},\r\n            {\"FOMA\", false}\r\n    },\r\n        IsWorking = true,\r\n        Extensions = new Dictionary<string, object>\r\n        {\r\n            { \"SuperPowers\", new { Flight = false, Humor = true, Invisibility = true }}, // ad hoc object\r\n            { \"FavouriteWords\", new string[] { \"Hello\", \"Oh Dear\", \"Bye\"} }, // an array of primitives\r\n            { \"Stats\", new object[] { new { Flight = 0 }, new { Humor = 99 }, new { Invisibility = 30, Charged = true }}}, // an array of mixed objects\r\n        }\r\n    };\r\n\r\n    var options = new JsonSerializerOptions\r\n    {\r\n        WriteIndented = true,\r\n        DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,\r\n        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,\r\n        DictionaryKeyPolicy = JsonNamingPolicy.CamelCase\r\n    };\r\n\r\n    return Results.Json(payload, options);\r\n});\r\n\r\napp.Run();\r\n\r\npublic class Person\r\n{\r\n    public string Name { get; set; }\r\n\r\n    public int Age { get; set; }\r\n\r\n    public bool IsMarried { get; set; }\r\n\r\n    public DateTimeOffset CurrentTime { get; set; }\r\n\r\n    public bool? IsWorking { get; set; }\r\n\r\n    public Dictionary<string, bool> Characters { get; set; }\r\n\r\n    public Dictionary<string, object> Extensions { get; set; }\r\n}\r\n"
  },
  {
    "path": "projects/json/json-5/README.md",
    "content": "# Serialization a Dictionary of object\r\n\r\nA `Dictionary<string, object>` can be used to generate pretty much any shape of JSON document that you want."
  },
  {
    "path": "projects/json/json-5/json-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-6/Program.cs",
    "content": "using System.Text.Json;\r\nusing Microsoft.Net.Http.Headers;\r\n\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    var payload = new Person\r\n    {\r\n        Name = \"Annie\",\r\n        Age = 33,\r\n        IsMarried = false,\r\n        CurrentTime = DateTimeOffset.UtcNow,\r\n        Characters = new Dictionary<string, bool>\r\n        {\r\n                {\"Funny\" , true},\r\n                {\"Feisty\" , true},\r\n                {\"Brilliant\" , true},\r\n                {\"FOMA\", false}\r\n        },\r\n        Superpowers = new List<Superpower> {\r\n                new Superpower(\"Humor\", 8),\r\n                new Superpower(\"Intelligence\", 10),\r\n                new Superpower(\"Focus\", 7)\r\n        }\r\n    };\r\n\r\n    var options = new JsonWriterOptions\r\n    {\r\n        Indented = true\r\n    };\r\n\r\n    context.Response.Headers.Append(HeaderNames.ContentType, \"application/json\");\r\n\r\n    await using (var writer = new Utf8JsonWriter(context.Response.Body, options))\r\n    {\r\n        writer.WriteStartObject();\r\n        writer.WriteString(\"name\", payload.Name);\r\n        writer.WriteNumber(\"age\", payload.Age);\r\n        writer.WriteBoolean(\"isMarried\", payload.IsMarried);\r\n        writer.WriteString(\"currentTime\", payload.CurrentTime);\r\n\r\n        writer.WriteStartObject(\"characters\");\r\n        foreach (var kv in payload.Characters)\r\n            writer.WriteBoolean(kv.Key, kv.Value);\r\n        writer.WriteEndObject();\r\n\r\n        writer.WriteEndObject();\r\n    }\r\n});\r\n\r\napp.Run();\r\n\r\npublic class Superpower\r\n{\r\n    public string Name { get; set; }\r\n\r\n    public short Rating { get; set; }\r\n\r\n    public Superpower(string name, short rating)\r\n    {\r\n        Name = name;\r\n        Rating = rating;\r\n    }\r\n}\r\n\r\npublic class Person\r\n{\r\n    public string Name { get; set; }\r\n\r\n    public int Age { get; set; }\r\n\r\n    public bool IsMarried { get; set; }\r\n\r\n    public DateTimeOffset CurrentTime { get; set; }\r\n\r\n    public Dictionary<string, bool> Characters { get; set; }\r\n\r\n    public List<Superpower> Superpowers { get; set; }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/json/json-6/README.md",
    "content": "# Build a JSON document manually\r\n\r\nIn this sample we write a JSON document to stream directly  using `Utf8JsonWriter`. The JSON document has the following properties:\r\n\r\n* String\r\n* Number\r\n* Date\r\n* An object\r\n* An array of objects\r\n"
  },
  {
    "path": "projects/json/json-6/json-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-7/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text;\r\nusing System.Text.Json.Serialization;\r\n\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var payload = new\r\n    {\r\n        Name = \"Annie\",\r\n        Age = 33,\r\n        IsMarried = false,\r\n        CurrentTime = DateTimeOffset.UtcNow,\r\n        Characters = new\r\n        {\r\n            Funny = true,\r\n            Feisty = true,\r\n            Brilliant = true,\r\n            FOMA = false,\r\n            HighEmpathy = true\r\n        }\r\n    };\r\n\r\n    var options = new JsonSerializerOptions\r\n    {\r\n        WriteIndented = true,\r\n        DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,\r\n        PropertyNamingPolicy = new SnakeCaseNamingPolicy(),\r\n        DictionaryKeyPolicy = new SnakeCaseNamingPolicy()\r\n    };\r\n\r\n    return Results.Json(payload, options);\r\n});\r\n\r\napp.Run();\r\n\r\n\r\n// Implementation from https://github.com/JamesNK/Newtonsoft.Json/blob/cdf10151d507d497a3f9a71d36d544b199f73435/Src/Newtonsoft.Json/Utilities/StringUtils.cs\r\n// Modified to use span\r\ninternal static class StringUtils\r\n{\r\n    internal enum SnakeCaseState\r\n    {\r\n        Start,\r\n        Lower,\r\n        Upper,\r\n        NewWord\r\n    }\r\n\r\n    public static string ToSnakeCase(string s)\r\n    {\r\n        if (string.IsNullOrEmpty(s))\r\n        {\r\n            return s;\r\n        }\r\n\r\n        StringBuilder sb = new StringBuilder();\r\n        SnakeCaseState state = SnakeCaseState.Start;\r\n\r\n        for (int i = 0; i < s.Length; i++)\r\n        {\r\n            if (s[i] == ' ')\r\n            {\r\n                if (state != SnakeCaseState.Start)\r\n                {\r\n                    state = SnakeCaseState.NewWord;\r\n                }\r\n            }\r\n            else if (char.IsUpper(s[i]))\r\n            {\r\n                switch (state)\r\n                {\r\n                    case SnakeCaseState.Upper:\r\n                        bool hasNext = (i + 1 < s.Length);\r\n                        if (i > 0 && hasNext)\r\n                        {\r\n                            char nextChar = s[i + 1];\r\n                            if (!char.IsUpper(nextChar) && nextChar != '_')\r\n                            {\r\n                                sb.Append('_');\r\n                            }\r\n                        }\r\n                        break;\r\n                    case SnakeCaseState.Lower:\r\n                    case SnakeCaseState.NewWord:\r\n                        sb.Append('_');\r\n                        break;\r\n                }\r\n\r\n                char c;\r\n#if HAVE_CHAR_TO_LOWER_WITH_CULTURE\r\n                    c = char.ToLower(s[i], CultureInfo.InvariantCulture);\r\n#else\r\n                c = char.ToLowerInvariant(s[i]);\r\n#endif\r\n                sb.Append(c);\r\n\r\n                state = SnakeCaseState.Upper;\r\n            }\r\n            else if (s[i] == '_')\r\n            {\r\n                sb.Append('_');\r\n                state = SnakeCaseState.Start;\r\n            }\r\n            else\r\n            {\r\n                if (state == SnakeCaseState.NewWord)\r\n                {\r\n                    sb.Append('_');\r\n                }\r\n\r\n                sb.Append(s[i]);\r\n                state = SnakeCaseState.Lower;\r\n            }\r\n        }\r\n\r\n        return sb.ToString();\r\n    }\r\n}\r\n\r\npublic class SnakeCaseNamingPolicy : JsonNamingPolicy\r\n{\r\n    public override string ConvertName(string name)\r\n    {\r\n        return StringUtils.ToSnakeCase(name);\r\n    }\r\n}"
  },
  {
    "path": "projects/json/json-7/README.md",
    "content": "# Snake Case Json Naming Policy\r\n\r\nCreate a custom naming policy that generate JSON property names in snake_case.\r\n\r\nCode for converting CamelCase property to snake_case is obtained from [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json/blob/cdf10151d507d497a3f9a71d36d544b199f73435/Src/Newtonsoft.Json/Utilities/StringUtils.cs)."
  },
  {
    "path": "projects/json/json-7/json-7.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-8/Program.cs",
    "content": "using System.Text;\r\nusing BenchmarkDotNet.Attributes;\r\nusing BenchmarkDotNet.Columns;\r\nusing BenchmarkDotNet.Configs;\r\nusing BenchmarkDotNet.Loggers;\r\nusing BenchmarkDotNet.Running;\r\nusing BenchmarkDotNet.Validators;\r\n\r\nvar config = new ManualConfig()\r\n.WithOptions(ConfigOptions.DisableOptimizationsValidator)\r\n.AddValidator(JitOptimizationsValidator.DontFailOnError)\r\n.AddLogger(ConsoleLogger.Default)\r\n.AddColumnProvider(DefaultColumnProviders.Instance);\r\n\r\nBenchmarkRunner.Run<SnakeCaseConverter>(config);\r\n\r\n// Implementation from https://github.com/JamesNK/Newtonsoft.Json/blob/cdf10151d507d497a3f9a71d36d544b199f73435/Src/Newtonsoft.Json/Utilities/StringUtils.cs\r\n// Modified to use span\r\ninternal static class StringUtils\r\n{\r\n    internal enum SnakeCaseState\r\n    {\r\n        Start,\r\n        Lower,\r\n        Upper,\r\n        NewWord\r\n    }\r\n\r\n    public static string ToSnakeCaseNewtonsoft(string s)\r\n    {\r\n        if (string.IsNullOrEmpty(s))\r\n        {\r\n            return s;\r\n        }\r\n\r\n        StringBuilder sb = new StringBuilder();\r\n        SnakeCaseState state = SnakeCaseState.Start;\r\n\r\n        for (int i = 0; i < s.Length; i++)\r\n        {\r\n            if (s[i] == ' ')\r\n            {\r\n                if (state != SnakeCaseState.Start)\r\n                {\r\n                    state = SnakeCaseState.NewWord;\r\n                }\r\n            }\r\n            else if (char.IsUpper(s[i]))\r\n            {\r\n                switch (state)\r\n                {\r\n                    case SnakeCaseState.Upper:\r\n                        bool hasNext = (i + 1 < s.Length);\r\n                        if (i > 0 && hasNext)\r\n                        {\r\n                            char nextChar = s[i + 1];\r\n                            if (!char.IsUpper(nextChar) && nextChar != '_')\r\n                            {\r\n                                sb.Append('_');\r\n                            }\r\n                        }\r\n                        break;\r\n                    case SnakeCaseState.Lower:\r\n                    case SnakeCaseState.NewWord:\r\n                        sb.Append('_');\r\n                        break;\r\n                }\r\n\r\n                char c;\r\n#if HAVE_CHAR_TO_LOWER_WITH_CULTURE\r\n                    c = char.ToLower(s[i], CultureInfo.InvariantCulture);\r\n#else\r\n                c = char.ToLowerInvariant(s[i]);\r\n#endif\r\n                sb.Append(c);\r\n\r\n                state = SnakeCaseState.Upper;\r\n            }\r\n            else if (s[i] == '_')\r\n            {\r\n                sb.Append('_');\r\n                state = SnakeCaseState.Start;\r\n            }\r\n            else\r\n            {\r\n                if (state == SnakeCaseState.NewWord)\r\n                {\r\n                    sb.Append('_');\r\n                }\r\n\r\n                sb.Append(s[i]);\r\n                state = SnakeCaseState.Lower;\r\n            }\r\n        }\r\n\r\n        return sb.ToString();\r\n    }\r\n\r\n    public static string ToSnakeCaseLinq(string s)\r\n    {\r\n        return string.Concat(s.Select((x, i) => i > 0 && char.IsUpper(x) ? \"_\" + x.ToString() : x.ToString())).ToLower();\r\n    }\r\n}\r\n\r\n[MemoryDiagnoser]\r\npublic class SnakeCaseConverter\r\n{\r\n    [Benchmark]\r\n    public string ConvertToSnakeCaseNewtonsoft()\r\n    {\r\n        return StringUtils.ToSnakeCaseNewtonsoft(\"SocialSecurityNumber\");\r\n    }\r\n\r\n    [Benchmark]\r\n    public string ConvertToSnakeCaseLinq()\r\n    {\r\n        return StringUtils.ToSnakeCaseLinq(\"SocialSecurityNumber\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/json/json-8/README.md",
    "content": "# A benchmark between two approaches in converting CamelCase to snake_case\r\n\r\nThe first implementation is obtained from [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json/blob/cdf10151d507d497a3f9a71d36d544b199f73435/Src/Newtonsoft.Json/Utilities/StringUtils.cs).\r\n\r\nThe second implementation is obtained from this [Gist](https://gist.github.com/vkobel/d7302c0076c64c95ef4b).\r\n\r\n## instructions\r\n\r\n- `dotnet build -configuration Release` to build the benchmark\r\n- `dotnet run`"
  },
  {
    "path": "projects/json/json-8/json-8.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <OutputType>Exe</OutputType>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"BenchmarkDotNet\" Version=\"0.13.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/json/json-9/Program.cs",
    "content": "using System.Text.Json;\r\nusing System.Text.Json.Serialization;\r\n\r\nvar app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var payload = new Person\r\n    {\r\n        Name = \"Annie\",\r\n        TimeWaiting = new TimeSpan(1000, 0, 0, 0) // 1000 days\r\n    };\r\n\r\n    var options = new JsonSerializerOptions\r\n    {\r\n        WriteIndented = true,\r\n        DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,\r\n        PropertyNamingPolicy = JsonNamingPolicy.CamelCase,\r\n        DictionaryKeyPolicy = JsonNamingPolicy.CamelCase,\r\n        Converters = { new TimeSpanConverter() }\r\n    };\r\n\r\n    return Results.Json(payload, options);\r\n});\r\n\r\napp.Run();\r\n\r\npublic class Person\r\n{\r\n    public string Name { get; set; }\r\n\r\n    public TimeSpan TimeWaiting { get; set; }\r\n}\r\n\r\npublic class TimeSpanConverter : JsonConverter<TimeSpan>\r\n{\r\n    public override TimeSpan Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)\r\n    {\r\n        return TimeSpan.Parse(reader.GetString());\r\n    }\r\n\r\n    public override void Write(Utf8JsonWriter writer, TimeSpan value, JsonSerializerOptions options)\r\n    {\r\n        writer.WriteStringValue(value.ToString());\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/json/json-9/README.md",
    "content": "# Custom Converter \r\n\r\nThis is an custom converter implementation for TimeSpan type for JsonSerializer. "
  },
  {
    "path": "projects/json/json-9/json-9.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/localization/README.md",
    "content": "# Localization and Globalization (6)\r\n\r\n  This section is all about languages, culture, etc.\r\n\r\n  * [Localization](/projects/localization/localization-1)\r\n\r\n    Shows the most basic use of localization using a resource file. This sample only supports French language (because we are fancy). It needs the following dependency `\"Microsoft.AspNetCore.Localization\": \"2.1.0\"` and  `\"Microsoft.Extensions.Localization\": \"2.1.0\"`.\r\n\r\n  * [Localization - 2](/projects/localization/localization-2)\r\n\r\n    We build upon the previous sample and demonstrate how to switch request culture via query string using the built in `QueryStringRequestCultureProvider`. This sample supports English and French.\r\n\r\n  * [Localization - 3](/projects/localization/localization-3)\r\n\r\n    Demonstrate the difference between `Culture` and `UI Culture`.\r\n\r\n  * [Localization - 4](/projects/localization/localization-4)\r\n\r\n    Demonstrate how to switch request culture via cookie using the built in `CookieRequestCultureProvider`. This sample supports English and French.\r\n\r\n  * [Localization - 5](/projects/localization/localization-5)\r\n\r\n    Demonstrate using Portable Object (PO) files to support localization instead of the cumbersome resx file. This sample requires ```OrchardCore.Localization.Core``` package. This sample requires ```ASPNET Core 2```.\r\n\r\n  * [Localization - 6](/projects/localization/localization-6)\r\n\r\n    This is a continuation of previous sample but with context, which allows the same translation key to return different strings.\r\n\r\n\r\ndotnet8"
  },
  {
    "path": "projects/localization/build.bat",
    "content": "dotnet build localization-1\r\ndotnet build localization-2\r\ndotnet build localization-3\r\ndotnet build localization-4\r\ndotnet build localization-5\r\ndotnet build localization-6"
  },
  {
    "path": "projects/localization/build.sh",
    "content": "#!/bin/bash\ndotnet build localization-1\ndotnet build localization-2\ndotnet build localization-3\ndotnet build localization-4\ndotnet build localization-5\ndotnet build localization-6\n"
  },
  {
    "path": "projects/localization/localization-1/Program.cs",
    "content": "using Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\nusing System.Globalization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(options => options.ResourcesPath = \"resources\");\r\n\r\nvar app = builder.Build();\r\n\r\nvar stringLocalizerFactory = app.Services.GetService<IStringLocalizerFactory>();\r\nvar local = stringLocalizerFactory.Create(\"Common\", typeof(Program).Assembly.FullName);\r\n\r\n//This section is important otherwise aspnet won't be able to pick up the resource\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\")\r\n};\r\n\r\nvar options = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"fr-FR\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\napp.UseRequestLocalization(options);\r\n\r\napp.Run(async context =>\r\n{\r\n    var requestCulture = context.Features.Get<IRequestCultureFeature>();\r\n    await context.Response.WriteAsync($\"{requestCulture.RequestCulture.Culture} - {local[\"Hello\"]} {local[\"Goodbye\"]} {local[\"Yes\"]} {local[\"No\"]}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/localization/localization-1/localization.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/localization/localization-1/resources/Common.fr-FR.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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Oui</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Non</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/localization/localization-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\nusing System.Globalization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(options => options.ResourcesPath = \"resources\");\r\n\r\nvar app = builder.Build();\r\n\r\nvar stringLocalizerFactory = app.Services.GetService<IStringLocalizerFactory>();\r\nvar local = stringLocalizerFactory.Create(\"Common\", typeof(Program).Assembly.FullName);\r\n\r\n//This section is important otherwise aspnet won't be able to pick up the resource\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\"),\r\n    new CultureInfo(\"en-US\")\r\n};\r\n\r\nvar options = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"fr-FR\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\napp.UseRequestLocalization(options);\r\n\r\n//These are the three default services available at Configure\r\napp.Run(async context =>\r\n{\r\n    await context.Response.WriteAsync(\"<h1>QueryStringRequestCultureProvider</h1><p>We are using query string to switch the request culture.</p>\");\r\n\r\n    var requestCulture = context.Features.Get<IRequestCultureFeature>().RequestCulture;\r\n    if (requestCulture.Culture.TwoLetterISOLanguageName != \"fr\")\r\n        await context.Response.WriteAsync($\"<a href=\\\"/?culture=fr-FR&ui-culture=fr-FR\\\">Switch to French</a><br/>\");\r\n    else if (requestCulture.Culture.TwoLetterISOLanguageName != \"en\")\r\n        await context.Response.WriteAsync($\"<a href=\\\"/?culture=en-US&ui-culture=en-US\\\">Switch to English</a><br/>\");\r\n\r\n    await context.Response.WriteAsync($@\"\r\n                Request Culture: {requestCulture.Culture} <br/> \r\n                Localized strings: {local[\"Hello\"]} {local[\"Goodbye\"]} {local[\"Yes\"]} {local[\"No\"]}\r\n                \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/localization/localization-2/localization-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/localization/localization-2/resources/Common.en-US.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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>So long</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Howdy</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Yah</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Nope</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/localization/localization-2/resources/Common.fr-FR.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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Oui</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Non</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/localization/localization-3/Program.cs",
    "content": "using Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\nusing System.Globalization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(options => options.ResourcesPath = \"resources\");\r\n\r\nvar app = builder.Build();\r\n\r\nvar stringLocalizerFactory = app.Services.GetService<IStringLocalizerFactory>();\r\nvar local = stringLocalizerFactory.Create(\"Common\", typeof(Program).Assembly.FullName);\r\n\r\n//This section is important otherwise aspnet won't be able to pick up the resource\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"en-US\"),\r\n    new CultureInfo(\"en-GB\")\r\n};\r\n\r\nvar options = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"en-GB\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\napp.UseRequestLocalization(options);\r\n\r\n//These are the three default services available at Configure\r\napp.Run(async context =>\r\n{\r\n    await context.Response.WriteAsync(\"<h1>Culture vs UI Culture</h1><p>UI Culture affects the resource string. Culture affects number formatting, dates, etc.</p>\");\r\n\r\n    var requestCulture = context.Features.Get<IRequestCultureFeature>().RequestCulture;\r\n\r\n    await context.Response.WriteAsync($@\"\r\n                <a href=\"\"/?culture=en-US&ui-culture=en-GB\"\">Culture US - UI Culture GB</a><br/>\r\n                <a href=\"\"/?culture=en-GB&ui-culture=en-US\"\">Culture GB - UI Culture US</a><br/>\r\n                <br/>\r\n                Request Culture: {requestCulture.Culture} <br/>\r\n                Today's Date (Culture): {DateTime.Now.ToString()}<br/><br/>\r\n                Request UI Culture: {requestCulture.UICulture}<br/> \r\n                Localized strings (UI Culture): {local[\"Hello\"]} {local[\"Goodbye\"]} {local[\"Yes\"]} {local[\"No\"]}\r\n                \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/localization/localization-3/localization-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/localization/localization-3/resources/Common.en-US.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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>So long</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Howdy</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Yah</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Nope</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/localization/localization-4/Program.cs",
    "content": "using Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\nusing System.Globalization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(options => options.ResourcesPath = \"resources\");\r\n\r\nvar app = builder.Build();\r\n\r\nvar stringLocalizerFactory = app.Services.GetService<IStringLocalizerFactory>();\r\nvar local = stringLocalizerFactory.Create(\"Common\", typeof(Program).Assembly.FullName);\r\n\r\n//This section is important otherwise aspnet won't be able to pick up the resource\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\"),\r\n    new CultureInfo(\"en-US\")\r\n};\r\n\r\nvar options = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"fr-FR\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\napp.UseRequestLocalization(options);\r\n\r\napp.Run(async context =>\r\n{\r\n    var languageSwitch = context.Request.Query[\"lang\"];\r\n\r\n    try\r\n    {\r\n        if (languageSwitch == \"fr\")\r\n        {\r\n            var val = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(\"fr-FR\"));\r\n            context.Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName, val);\r\n            context.Response.Redirect(\"/\");\r\n            return;\r\n        }\r\n        else if (languageSwitch == \"en\")\r\n        {\r\n            var val = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(\"en-US\"));\r\n            context.Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName, val);\r\n            context.Response.Redirect(\"/\");\r\n            return;\r\n        }\r\n    }\r\n    catch (Exception ex)\r\n    {\r\n        await context.Response.WriteAsync($\"error {ex.Message}\");\r\n    }\r\n\r\n    await context.Response.WriteAsync($\"<h1>CookieRequestCultureProvider</h1><p>We are using a cookie named \\\"{CookieRequestCultureProvider.DefaultCookieName}\\\" to switch the request culture.</p>\");\r\n\r\n    var requestCulture = context.Features.Get<IRequestCultureFeature>().RequestCulture;\r\n\r\n    await context.Response.WriteAsync($@\"\r\n                Click <a href=\"\"/?lang=fr\"\">here</a> for French cookie and <a href=\"\"/?lang=en\"\">here</a> for English cookie.<br/><br/>\r\n                \r\n                Request Culture: {requestCulture.Culture} <br/> \r\n                Localized strings: {local[\"Hello\"]} {local[\"Goodbye\"]} {local[\"Yes\"]} {local[\"No\"]}\r\n                \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/localization/localization-4/localization-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/localization/localization-4/resources/Common.en-US.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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>So long</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Howdy</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Yah</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Nope</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/localization/localization-4/resources/Common.fr-FR.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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Oui</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Non</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/localization/localization-5/Program.cs",
    "content": "using System.Globalization;\r\nusing Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddMemoryCache();\r\nbuilder.Services.AddPortableObjectLocalization();\r\n\r\nvar app = builder.Build();\r\n\r\n//We are limiting the supported culture here so this sample works in any browser from different culture setting.\r\n//To make it pick up French or other language, simply change it-IT with something else or add more supported cultures\r\n//I have added PO file for French and English\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"it-IT\")\r\n};\r\n\r\nvar option = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"it-IT\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\napp.UseRequestLocalization(option);\r\n\r\napp.Run(context =>\r\n{\r\n    var fac = context.RequestServices.GetService<IStringLocalizerFactory>();\r\n    var local = fac.Create(string.Empty, string.Empty);\r\n\r\n    var requestCulture = context.Features.Get<IRequestCultureFeature>().RequestCulture;\r\n\r\n    return context.Response.WriteAsync($\"Request Culture `{requestCulture.UICulture}` = {local[\"Hello\"]}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/localization/localization-5/en.po",
    "content": "msgid \"Hello\"\r\nmsgstr \"Howdy\""
  },
  {
    "path": "projects/localization/localization-5/fr.po",
    "content": "msgid \"Hello\"\r\nmsgstr \"Bonjour\""
  },
  {
    "path": "projects/localization/localization-5/it.po",
    "content": "msgid \"Hello\"\r\nmsgstr \"Ciao\""
  },
  {
    "path": "projects/localization/localization-5/localization-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Localization.Core\" Version=\"1.5.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/localization/localization-6/Program.cs",
    "content": "using System.Globalization;\r\nusing Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddMemoryCache();\r\nbuilder.Services.AddPortableObjectLocalization();\r\n\r\nvar app = builder.Build();\r\n\r\n//We are limiting the supported culture here so this sample works in any browser from different culture setting.\r\n//To make it pick up French or other language, simply change it-IT with something else or add more supported cultures\r\n//I have added PO file for French and English\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"it-IT\")\r\n};\r\n\r\nvar option = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"it-IT\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\napp.UseRequestLocalization(option);\r\n\r\napp.UseRouting();\r\n\r\napp.MapGet(\"greet-friend\", async context =>\r\n{\r\n    var fac = context.RequestServices.GetService<IStringLocalizerFactory>();\r\n    var local = fac.Create(\"Greet Friend\", string.Empty);\r\n\r\n    var requestCulture = context.Features.Get<IRequestCultureFeature>().RequestCulture;\r\n\r\n    await context.Response.WriteAsync($\"Request Culture `{requestCulture.UICulture}` = {local[\"Hello\"]}\");\r\n});\r\n\r\napp.MapGet(\"greet-lover\", async context =>\r\n{\r\n    var fac = context.RequestServices.GetService<IStringLocalizerFactory>();\r\n    var local = fac.Create(\"Greet Lover\", string.Empty);\r\n\r\n    var requestCulture = context.Features.Get<IRequestCultureFeature>().RequestCulture;\r\n\r\n    await context.Response.WriteAsync($\"Request Culture `{requestCulture.UICulture}` = {local[\"Hello\"]}\");\r\n});\r\n\r\n\r\napp.Run(async context =>\r\n{\r\n    var fac = context.RequestServices.GetService<IStringLocalizerFactory>();\r\n    var local = fac.Create(string.Empty, string.Empty);\r\n\r\n    var requestCulture = context.Features.Get<IRequestCultureFeature>().RequestCulture;\r\n\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await context.Response.WriteAsync(\"<html><body>\");\r\n    await context.Response.WriteAsync($\"Request Culture `{requestCulture.UICulture}` = {local[\"Hello\"]}<br/><br/>\");\r\n    await context.Response.WriteAsync($@\"<a href=\"\"/greet-friend\"\">Greet Friend</a><br/>\");\r\n    await context.Response.WriteAsync($@\"<a href=\"\"/greet-lover\"\">Greet Lover</a><br/>\");\r\n    await context.Response.WriteAsync(\"</body></html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/localization/localization-6/en.po",
    "content": "msgid \"Hello\"\r\nmsgstr \"Howdy\"\r\n\r\nmsgctxt  \"Greet Friend\"\r\nmsgid \"Hello\"\r\nmsgstr \"Howdy friend\"\r\n\r\n\r\nmsgctxt  \"Greet Lover\"\r\nmsgid \"Hello\"\r\nmsgstr \"Hello my darling\""
  },
  {
    "path": "projects/localization/localization-6/fr.po",
    "content": "msgid \"Hello\"\r\nmsgstr \"Bonjour\"\r\n\r\nmsgctxt  \"Greet Friend\"\r\nmsgid \"Hello\"\r\nmsgstr \"Bonjour Mon Ami\"\r\n\r\nmsgctxt  \"Greet Lover\"\r\nmsgid \"Hello\"\r\nmsgstr \"Bonjour Mon Amour\""
  },
  {
    "path": "projects/localization/localization-6/it.po",
    "content": "msgid \"Hello\"\r\nmsgstr \"Ciao\"\r\n\r\nmsgctxt  \"Greet Friend\"\r\nmsgid \"Hello\"\r\nmsgstr \"Ciao Tesoro\"\r\n\r\nmsgctxt  \"Greet Lover\"\r\nmsgid \"Hello\"\r\nmsgstr \"Ciao Amore\""
  },
  {
    "path": "projects/localization/localization-6/localization-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Localization.Core\" Version=\"1.5.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/logging/README.md",
    "content": "# Logging (5)\r\n\r\n* [Basic Logging](/projects/logging/logging-1)\r\n\r\n  Shows how to do basic logging including all its various levels.\r\n\r\n* [Logging filtering](/projects/logging/logging-2)\r\n\r\n  Now you can adjust what kind of logging information from various part of ASP.NET Core and your app you want show/stored.\r\n\r\n* [JSON Console Logger](/projects/logging/logging-3)\r\n\r\n  This example shows how to display log to console in structured JSON logs.\r\n\r\n* [Create logging API](/projects/logging/logging-4)\r\n\r\n  This example shows how to use `LoggerMessageAttribute` to source generate high performance logging API.\r\n\r\n* [Created static logger](/projects/logging/logging-5)\r\n\r\n  This examples show how to create cached static loggers. \r\n\r\n* [Logging to Grafana Loki](/projects/logging/logging-Loki)\r\n\r\n  This example shows how to log to [Grafana Loki](https://grafana.com/oss/loki/).\r\n\r\n  dotnet6"
  },
  {
    "path": "projects/logging/build.bat",
    "content": "dotnet build logging-1\r\ndotnet build logging-2\r\ndotnet build logging-3\r\ndotnet build logging-Loki"
  },
  {
    "path": "projects/logging/build.sh",
    "content": "#!/bin/bash\ndotnet build logging-1\ndotnet build logging-2\ndotnet build logging-3\ndotnet build logging-Loki\n"
  },
  {
    "path": "projects/logging/logging-1/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\n// Adjust the minimum level here and see the impact \r\n// on the displayed logs.\r\n// The rule is it will show >= minimum level\r\n// The levels are:\r\n// - Trace = 0\r\n// - Debug = 1\r\n// - Information = 2\r\n// - Warning = 3\r\n// - Error = 4\r\n// - Critical = 5\r\n// - None = 6\r\n\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Warning);\r\nbuilder.Logging.AddConsole();\r\n\r\nvar app = builder.Build();\r\n\r\napp.Run(context =>\r\n{\r\n    var log = app.Logger;\r\n    log.LogTrace(\"Trace message\");\r\n    log.LogDebug(\"Debug message\");\r\n    log.LogInformation(\"Information message\");\r\n    log.LogWarning(\"Warning message\");\r\n    log.LogError(\"Error message\");\r\n    log.LogCritical(\"Critical message\");\r\n    return context.Response.WriteAsync(\"Hello world. Take a look at your terminal to see the logging messages.\");\r\n});\r\napp.Run();\r\n"
  },
  {
    "path": "projects/logging/logging-1/logging-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/logging/logging-2/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Logging.AddFilter(\"Microsoft\", LogLevel.Warning); //Only show Warning log and above from anything that contains Microsoft.\r\nbuilder.Logging.AddFilter(\"AppLogger\", LogLevel.Trace);//Pretty much show everything from AppLogger\r\nbuilder.Logging.AddConsole();\r\n\r\nvar app = builder.Build();\r\n\r\napp.Run(context =>\r\n{\r\n    app.Logger.LogInformation(\"This is a information message\");\r\n    app.Logger.LogDebug(\"This is debug message\");\r\n    return context.Response.WriteAsync(app.Configuration[\"greeting\"]);\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/logging/logging-2/appSettings.json",
    "content": "{\r\n    \"greeting\": \"hello world. Please check your terminal for the logging messages.\"\r\n}"
  },
  {
    "path": "projects/logging/logging-2/logging-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>logging-with-filter</AssemblyName>\r\n    <PackageId>logging-with-filter</PackageId>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/logging/logging-3/Program.cs",
    "content": "using System.Text.Json;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n// Trace, Debug, Information, Warning, Error, Critical, None\r\nbuilder.Logging.AddFilter(\"Microsoft\", LogLevel.Warning); //Only show Warning log and above from anything that contains Microsoft.\r\nbuilder.Logging.AddFilter(\"AppLogger\", LogLevel.Trace);//Pretty much show everything from AppLogger\r\nbuilder.Logging.AddJsonConsole(options =>\r\n{\r\n    options.JsonWriterOptions = new JsonWriterOptions { Indented = true }; \r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.Run(context =>\r\n{\r\n    app.Logger.LogInformation(\"This is a information message\");\r\n    app.Logger.LogDebug(\"This is debug message\");\r\n    return context.Response.WriteAsync(app.Configuration[\"greeting\"]);\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/logging/logging-3/README.md",
    "content": "# Emit structured JSON logs in console\r\n\r\nThis example shows how to display log to console in structured JSON logs."
  },
  {
    "path": "projects/logging/logging-3/logging-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/logging/logging-4/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#bb8dec\",\r\n        \"activityBar.background\": \"#bb8dec\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#faefe4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#bb8dec\",\r\n        \"statusBar.background\": \"#a161e5\",\r\n        \"statusBar.debuggingBackground\": \"#a5e561\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#8735de\",\r\n        \"statusBarItem.remoteBackground\": \"#a161e5\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#a161e5\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#a161e599\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#a161e5\"\r\n}"
  },
  {
    "path": "projects/logging/logging-4/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Logging.AddFilter(\"Microsoft\", LogLevel.Error);\r\nbuilder.Logging.AddFilter(\"AppLogger\", LogLevel.Error);\r\nbuilder.Logging.AddConsole();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", () => \r\n{\r\n    Random rng = new Random();\r\n\r\n    List<int> numbers = [];\r\n\r\n    foreach(var x in Enumerable.Range(0, 10))\r\n    {\r\n        numbers.Add(rng.Next(100));\r\n    }\r\n\r\n    var html = $$\"\"\"\r\n    <!DOCTYPE html>\r\n    <html>\r\n\r\n    <body>\r\n        <h1>LoggerMessage attribute</h1>\r\n        <ul>\r\n            {{ string.Join(\"\", numbers.Select(x => $\"<li><a href=\\\"/log-it?number={x}\\\">{x}</a></li>\"))}}\r\n        </ul>\r\n    </body>\r\n    </html>\r\n    \"\"\";\r\n\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/log-it\", ([FromQuery] int number) =>\r\n{\r\n    var log = app.Logger;\r\n    \r\n    if (number % 2 == 0)\r\n        log.LogInformationWhenInputNumberIsEven(number);\r\n    else\r\n        log.LogInformationWhenInputNumberIsOdd(number);\r\n\r\n    return Results.Content(\"Take a look at your terminal to see the logging messages.\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic static partial class EvenOddLogs\r\n{\r\n    [LoggerMessage(EventId = 1, Level = LogLevel.Information, Message = \"input number is even !: {number}\")]\r\n    public static partial void LogInformationWhenInputNumberIsEven(this ILogger logger, long number);\r\n\r\n    [LoggerMessage(EventId = 2, Level = LogLevel.Information, Message = \"input number is odd !: {number}\")]\r\n    public static partial void LogInformationWhenInputNumberIsOdd(this ILogger logger, long number);\r\n}"
  },
  {
    "path": "projects/logging/logging-4/README.md",
    "content": "# LoggerMessageAttribute\r\n\r\n> .NET 6 introduces the LoggerMessageAttribute type. This attribute is part of the Microsoft.Extensions.Logging namespace, and when used, it source-generates performant logging APIs. The source-generation logging support is designed to deliver a highly usable and highly performant logging solution for modern .NET applications. The auto-generated source code relies on the ILogger interface in conjunction with LoggerMessage.Define functionality.\r\n>\r\n> [learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/core/extensions/logger-message-generator) "
  },
  {
    "path": "projects/logging/logging-4/logging-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/logging/logging-4/logging-4.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"logging-4\", \"logging-4.csproj\", \"{3369A14A-F7C0-4D09-9B03-B7522B17367C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{3369A14A-F7C0-4D09-9B03-B7522B17367C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{3369A14A-F7C0-4D09-9B03-B7522B17367C}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{3369A14A-F7C0-4D09-9B03-B7522B17367C}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{3369A14A-F7C0-4D09-9B03-B7522B17367C}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {D0F0F227-63E8-401D-B497-ED22BCED2F62}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/logging/logging-5/Program.cs",
    "content": "using System.Collections.Concurrent;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\n// Adjust the minimum level here and see the impact \r\n// on the displayed logs.\r\n// The rule is it will show >= minimum level\r\n// The levels are:\r\n// - Trace = 0\r\n// - Debug = 1\r\n// - Information = 2\r\n// - Warning = 3\r\n// - Error = 4\r\n// - Critical = 5\r\n// - None = 6\r\n\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Warning);\r\nbuilder.Logging.AddConsole();\r\n\r\nvar app = builder.Build();\r\nLog.Configure(app.Services.GetRequiredService<ILoggerFactory>());  \r\n\r\napp.Run(context =>\r\n{\r\n    var log = Log.CreateLogger(\"main\");\r\n    log.LogTrace(\"Trace message\");\r\n    log.LogDebug(\"Debug message\");\r\n    log.LogInformation(\"Information message\");\r\n    log.LogWarning(\"Warning message\");\r\n    log.LogError(\"Error message\");\r\n    log.LogCritical(\"Critical message\");\r\n    return context.Response.WriteAsync(\"Hello world. Take a look at your terminal to see the logging messages.\");\r\n});\r\napp.Run();\r\n\r\n public static class Log\r\n{\r\n    static ILoggerFactory _loggerFactory;\r\n\r\n    static readonly ConcurrentDictionary<string, ILogger> _loggers = new();\r\n    \r\n    public static void Configure(ILoggerFactory loggerFactory)\r\n    {\r\n        _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));\r\n    }\r\n    \r\n    public static ILogger CreateLogger<T>() => _loggers.GetOrAdd(typeof(T).FullName, _ => _loggerFactory.CreateLogger<T>());\r\n    \r\n    public static ILogger CreateLogger(string categoryName) => _loggers.GetOrAdd(categoryName, _ => _loggerFactory.CreateLogger(categoryName));\r\n}"
  },
  {
    "path": "projects/logging/logging-5/README.md",
    "content": "# Static Logger\r\n\r\nThis sample demonstrates on how to create cached static loggers. "
  },
  {
    "path": "projects/logging/logging-5/logging-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/logging/logging-5/logging-5.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"logging-5\", \"logging-5.csproj\", \"{7E2F4271-AF61-CD47-D1E0-89E66ECCC4AB}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{7E2F4271-AF61-CD47-D1E0-89E66ECCC4AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{7E2F4271-AF61-CD47-D1E0-89E66ECCC4AB}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{7E2F4271-AF61-CD47-D1E0-89E66ECCC4AB}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{7E2F4271-AF61-CD47-D1E0-89E66ECCC4AB}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {7B859DFE-4713-4799-9445-9EB25E2A6709}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/logging/logging-Loki/Program.cs",
    "content": "using LokiLoggingProvider.Options;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Logging.AddLoki(configure =>\r\n{\r\n    configure.Client = PushClient.Grpc;\r\n    configure.StaticLabels.JobName = \"LokiWebApplication\";\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/test\", (ILoggerFactory loggerFactory) =>\r\n{\r\n    var logger = loggerFactory.CreateLogger(\"Start\");\r\n    logger.LogTrace(\"Trace message\");\r\n    logger.LogDebug(\"Debug message\");\r\n    logger.LogInformation(\"Information message\");\r\n    logger.LogWarning(\"Warning message\");\r\n    logger.LogError(\"Error message\");\r\n    logger.LogCritical(\"Critical message\");\r\n    return \"OK\";\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/logging/logging-Loki/README.md",
    "content": "# Log into Grafana Loki \r\n\r\nThis example shows how to log to [Grafana Loki](https://grafana.com/oss/loki/). The Docker is used for the software hosting.\r\n\r\n - open a command-line window in the folder and execute:\r\n \r\n ```sh\r\ndocker compose up\r\n ```\r\n  - make sure that [Grafana Loki](https://grafana.com/oss/loki/) and [Grafana Dashboard](https://grafana.com/grafana/) containers are succesfully installed\r\n  - Compile and run the application\r\n ```sh\r\n dotnet build\r\n dotnet run\r\n  ```\r\n  - Navigate to /test endpoint. The response should be 'OK'. The console window should contain **info**, **warn**, **fail** and **crit** log messages.\r\n  - Navigate in a browser to the Grafana Dashboard website: <http://localhost:3000/>\r\n  - Add a loki data source <http://loki:3100>\r\n  - Go to the 'Explore data' page and add Label filter:  ``job=\"LokiWebApplication\"``. Press the 'Run query' button\r\n  - Log messages should be shown"
  },
  {
    "path": "projects/logging/logging-Loki/docker-compose.yml",
    "content": "version: '3.7'\r\n\r\nvolumes:\r\n    grafana: ~\r\n    loki: ~\r\n\r\nservices:\r\n    loki:\r\n        image: \"grafana/loki:latest\"\r\n        hostname: logs\r\n        command: -config.file=/etc/loki/local-config.yaml\r\n        volumes:\r\n            - loki:/loki\r\n        ports:\r\n            - \"3100:3100\" # http and Grafana data source\r\n            - \"9095:9095\" # grpc\r\n    grafana:\r\n        image: grafana/grafana-oss:latest-ubuntu\r\n        hostname: grafana\r\n        ports: \r\n            - \"3000:3000\" #UI\r\n        volumes:\r\n            - grafana:/var/lib/grafana\r\n        environment:\r\n            - GF_AUTH_ANONYMOUS_ENABLED=true\r\n            - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin\r\n            - GF_AUTH_DISABLE_LOGIN_FORM=true\r\n        depends_on:\r\n            - loki"
  },
  {
    "path": "projects/logging/logging-Loki/logging-Loki.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"LokiLoggingProvider\" Version=\"1.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mailkit/README.md",
    "content": "# Mailkit (2)\r\n\r\n  This section shows samples of using [MailKit](https://github.com/jstedfast/MailKit), which is essentially **the** library to use for sending and receiving email in ASP.NET Core.\r\n\r\n  * [Send message](/projects/mailkit/mailkit-1)\r\n\r\n    This shows an example on how to send an email.\r\n\r\n  * [Connect to POP3 Account](/projects/mailkit/mailkit-2)\r\n   \r\n    This shows how to connect to a POP3 account.\r\n\r\ndotnet8\r\n"
  },
  {
    "path": "projects/mailkit/build.bat",
    "content": "dotnet build mailkit-1\r\ndotnet build mailkit-2"
  },
  {
    "path": "projects/mailkit/build.sh",
    "content": "#!/bin/bash\ndotnet build mailkit-1\ndotnet build mailkit-2\n"
  },
  {
    "path": "projects/mailkit/mailkit-1/Email.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"MailKit\" Version=\"4.4.0\" />\r\n    <PackageReference Include=\"MimeKit\" Version=\"4.15.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mailkit/mailkit-1/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\r\nusing MimeKit;\r\nusing MimeKit.Text;\r\nusing MailKit.Net.Smtp;\r\nusing MailKit.Security;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\nbuilder.Services.AddTransient<EmailService>();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\n\r\n[Route(\"\")]\r\npublic class HomeController : Controller\r\n{\r\n    private readonly EmailService _emailService;\r\n\r\n    public HomeController(EmailService EmailService)\r\n    {\r\n        _emailService = EmailService;\r\n    }\r\n\r\n    [HttpGet(\"\")]\r\n    public IActionResult Index(string message)\r\n    {\r\n        ViewBag.Message = message;\r\n        return View();\r\n    }\r\n\r\n    [HttpPost(\"Send\")]\r\n    public IActionResult Send()\r\n    {\r\n        _emailService.Send(new EmailMessage()\r\n        {\r\n            SenderName = \"Change This\",\r\n            SenderEmail = \"Change This\",\r\n            RecipientName = \"Change This\",\r\n            RecipientEmail = \"Change This\",\r\n            Subject = \"Subject\",\r\n            Content = \"Good day\"\r\n        });\r\n\r\n        return RedirectToAction(\"Index\", new { Message = \"Email is successfully sent\" });\r\n    }\r\n}\r\n\r\npublic class EmailService\r\n{\r\n    public void Send(EmailMessage email)\r\n    {\r\n        var message = new MimeMessage();\r\n        message.From.Add(new MailboxAddress(email.SenderName, email.SenderEmail));\r\n        message.To.Add(new MailboxAddress(email.RecipientName, email.RecipientEmail));\r\n        message.Subject = email.Subject;\r\n\r\n        message.Body = new TextPart(TextFormat.Html)\r\n        {\r\n            Text = email.Content\r\n        };\r\n\r\n        using (var emailClient = new SmtpClient())\r\n        {\r\n            // 587 is for smtp server port, this might change from one server to another.\r\n            // SecureSocketOptions.Auto for SSL.\r\n            emailClient.Connect(\"Change This\", 587, SecureSocketOptions.Auto);\r\n\r\n            //Remove any OAuth functionality as we won't be using it.\r\n            emailClient.AuthenticationMechanisms.Remove(\"XOAUTH2\");\r\n\r\n            emailClient.Authenticate(\"Change This\", \"Change This\");\r\n            emailClient.Send(message);\r\n            emailClient.Disconnect(true);\r\n        }\r\n    }\r\n}\r\n\r\npublic class EmailMessage\r\n{\r\n    public string SenderName { get; set; }\r\n    public string SenderEmail { get; set; }\r\n    public string RecipientName { get; set; }\r\n    public string RecipientEmail { get; set; }\r\n    public string Subject { get; set; }\r\n    public string Content { get; set; }\r\n}\r\n"
  },
  {
    "path": "projects/mailkit/mailkit-1/Views/Home/Index.cshtml",
    "content": "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Mail Kit</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n    @if(ViewBag.Message != null)\r\n    {\r\n        <div style=\"padding:10px; background-color: #7CFC00;\">\r\n            @ViewBag.Message\r\n        </div>\r\n    }\r\n\r\n    <h1>Send Email</h1>\r\n    <p>Make sure you change the appropriate values (replace all \"Change This\") inside the source code otherwise this sample won't work.</p>\r\n    <form action=\"/send\" method=\"post\">\r\n        <input type=\"submit\" value=\"Send\"/>\r\n    </form>\r\n</body>\r\n</html>\r\n\r\n"
  },
  {
    "path": "projects/mailkit/mailkit-2/Email.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"MailKit\" Version=\"4.4.0\" />\r\n    <PackageReference Include=\"MimeKit\" Version=\"4.7.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mailkit/mailkit-2/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\r\nusing MailKit.Net.Pop3;\r\nusing MailKit.Security;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\nbuilder.Services.AddTransient<IEmailService, EmailService>();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\napp.MapControllerRoute(\r\n    name: \"default\",\r\n    pattern: \"{controller=Mailkit}/{action=Index}\");\r\n\r\napp.Run();\r\n\r\npublic interface IEmailService\r\n{\r\n    List<EmailMessage> ReceiveEmail(int maxCount = 10);\r\n}\r\npublic class EmailService : IEmailService\r\n{\r\n    public List<EmailMessage> ReceiveEmail(int maxCount = 10)\r\n    {\r\n        using (var emailClient = new Pop3Client())\r\n        {\r\n            // 995 is for POP3 server port, this might change from one server to another.\r\n            // SecureSocketOptions.Auto for SSL.\r\n            emailClient.Connect(\"POP3 server name\",  995, SecureSocketOptions.Auto);\r\n\r\n            //Remove any OAuth functionality as we won't be using it.\r\n            emailClient.AuthenticationMechanisms.Remove(\"XOAUTH2\");\r\n\r\n            emailClient.Authenticate(\"POP3 server username\", \"POP3 server password\");\r\n            List<EmailMessage> emails = new List<EmailMessage>();\r\n            for (int i = 0; i < emailClient.Count && i < maxCount; i++)\r\n            {\r\n                // i variable is for maximum number of messages to retrieve\r\n                var message = emailClient.GetMessage(i);\r\n                var emailMessage = new EmailMessage\r\n                {\r\n                    Content = !string.IsNullOrEmpty(message.HtmlBody) ? message.HtmlBody : message.TextBody,\r\n                    Subject = message.Subject,\r\n                    SenderName = message.Sender.Name,\r\n                    SenderEmail = message.Sender.Address\r\n                };\r\n            }\r\n\r\n            return emails;\r\n        }\r\n    }\r\n}\r\n\r\npublic class EmailMessage\r\n{\r\n    public string SenderName { get; set; }\r\n    public string SenderEmail { get; set; }\r\n    public string RecipientName { get; set; }\r\n    public string RecipientEmail { get; set; }\r\n    public string Subject { get; set; }\r\n    public string Content { get; set; }\r\n}\r\n\r\nnamespace PracticalAspNetCore.Controllers\r\n{\r\n    public class MailkitController : Controller\r\n    {\r\n        private readonly IEmailService _emailService;\r\n        public MailkitController(IEmailService EmailService)\r\n        {\r\n            _emailService = EmailService;\r\n        }\r\n\r\n        public IActionResult Index()\r\n        {\r\n            return View(\"/Views/Mailkit/Index.cshtml\");\r\n        }\r\n\r\n        [Route(\"Mailkit/Retrieve\")]\r\n        public IActionResult Retrieve()\r\n        {\r\n            List<EmailMessage> emails = _emailService.ReceiveEmail(50);\r\n            return RedirectToAction(\"Index\");\r\n        }\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "projects/mailkit/mailkit-2/Views/Mailkit/Index.cshtml",
    "content": "<a  href=\"/mailkit/retrieve\"><button>Retrieve</button></a>\r\n"
  },
  {
    "path": "projects/map-short-circuit/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nvar app = builder.Build();\r\n\r\napp.MapShortCircuit(404, \"robots.txt\", \"favicon.ico\");\r\n\r\napp.MapGet(\"/\", () => {\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n    <body>\r\n        hello world\r\n    </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n}).ShortCircuit(200);\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/map-short-circuit/README.md",
    "content": "# Use ShortCircuit\r\n\r\nUse `MapShortCircuit` or `.ShortCircuit()` to efficiently respond to a request without going through a middleware pipeline run. It skips processes such as authentication, CORS, etc."
  },
  {
    "path": "projects/map-short-circuit/map-short-circuit.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/markdown-server/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(new WebApplicationOptions\r\n{\r\n    WebRootPath = \"markdown\"        \r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.Run(context =>\r\n{\r\n    var requestPath = context.Request.Path;\r\n\r\n    //Get default page\r\n    if (requestPath == \"/\")\r\n    {\r\n        var defaultMd = Path.Combine(app.Environment.WebRootPath, \"index.md\");\r\n        if (!File.Exists(defaultMd))\r\n        {\r\n            context.Response.StatusCode = 404;\r\n            return context.Response.WriteAsync(\"File Not Found\");\r\n        }\r\n\r\n        context.Response.ContentType = \"text/html\";\r\n        return context.Response.WriteAsync(ProduceMarkdown(defaultMd));\r\n    }\r\n\r\n    //Replace the path and remove the beginning \\ of the path\r\n    //every request path segment represent a folder within markdown folder, e.g. \r\n    // /about/us is mapped to markdown\\about\\us.md File\r\n    // /hello is mapped to markdown\\hello.md\r\n\r\n    var localPath = requestPath.ToString().Replace('/', '\\\\').TrimStart(new char[]{'\\\\'}) + \".md\";\r\n    var md = Path.Combine(app.Environment.WebRootPath, localPath);\r\n    if (!File.Exists(md))\r\n    {\r\n        context.Response.StatusCode = 404;\r\n        return context.Response.WriteAsync(\"File Not Found\");\r\n    }\r\n\r\n    context.Response.ContentType = \"text/html\";\r\n    return context.Response.WriteAsync(ProduceMarkdown(md));\r\n});\r\n\r\nstring ProduceMarkdown(string path)\r\n{\r\n    var md = File.ReadAllText(path);\r\n\r\n    var res = Markdig.Markdown.ToHtml(md);\r\n    return res;\r\n}\r\n\r\napp.Run();"
  },
  {
    "path": "projects/markdown-server/markdown/about/us.md",
    "content": "# About Us"
  },
  {
    "path": "projects/markdown-server/markdown/hello.md",
    "content": "hello world"
  },
  {
    "path": "projects/markdown-server/markdown/index.md",
    "content": "# Index\r\n\r\n* [Hello](/hello)\r\n* [About Us](/about/us)"
  },
  {
    "path": "projects/markdown-server/markdown-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Markdig\" Version=\"0.37.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/markdown-server-middleware/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(new WebApplicationOptions\r\n{\r\n    WebRootPath = \"markdown\"\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.Use((HttpContext context, RequestDelegate next) =>\r\n{\r\n    var markdown = new MarkdownMiddleware(next, app.Environment);\r\n    return markdown.Invoke(context);\r\n});\r\n\r\napp.Run(context =>\r\n{\r\n    return context.Response.WriteAsync(\"\\nIf you read this, the file does not exist.\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class MarkdownMiddleware\r\n{\r\n    readonly RequestDelegate _next;\r\n\r\n    readonly IWebHostEnvironment _env;\r\n\r\n    public MarkdownMiddleware(RequestDelegate next, IWebHostEnvironment env)\r\n    {\r\n        _next = next;\r\n        _env = env;\r\n    }\r\n\r\n    public async Task Invoke(HttpContext context)\r\n    {\r\n        _env.ContentRootPath = Directory.GetCurrentDirectory();\r\n        _env.WebRootPath = Path.Combine(_env.ContentRootPath, \"markdown\");\r\n\r\n        var requestPath = context.Request.Path;\r\n\r\n        //Get default page\r\n        if (requestPath == \"/\")\r\n        {\r\n            var defaultMd = Path.Combine(_env.WebRootPath, \"index.md\");\r\n            if (!File.Exists(defaultMd))\r\n            {\r\n                context.Response.StatusCode = 404;\r\n                await context.Response.WriteAsync(\"File Not Found\");\r\n                await _next.Invoke(context);\r\n                //write here for post logic\r\n                return;\r\n            }\r\n\r\n            //no more processing. This code is shortcircuited.\r\n            context.Response.ContentType = \"text/html\";\r\n            await context.Response.WriteAsync(ProduceMarkdown(defaultMd));\r\n            return;\r\n        }\r\n\r\n        //Replace the path and remove the beginning \\ of the path\r\n        //every request path segment represent a folder within markdown folder, e.g. \r\n        // /about/us is mapped to markdown\\about\\us.md File\r\n        // /hello is mapped to markdown\\hello.md\r\n\r\n        var localPath = requestPath.ToString().Replace('/', '\\\\').TrimStart(new char[] { '\\\\' }) + \".md\";\r\n        var md = Path.Combine(_env.WebRootPath, localPath);\r\n        if (!File.Exists(md))\r\n        {\r\n            context.Response.StatusCode = 404;\r\n            await context.Response.WriteAsync(\"File Not Found\");\r\n            await _next.Invoke(context);\r\n            //write here for post logic\r\n            return;\r\n        }\r\n\r\n        //no more processing. This code is shortcircuited.\r\n        context.Response.ContentType = \"text/html\";\r\n        await context.Response.WriteAsync(ProduceMarkdown(md));\r\n    }\r\n\r\n    string ProduceMarkdown(string path)\r\n    {\r\n        var md = File.ReadAllText(path);\r\n\r\n        var res = Markdig.Markdown.ToHtml(md);\r\n        return res;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/markdown-server-middleware/markdown/about/us.md",
    "content": "# About Us"
  },
  {
    "path": "projects/markdown-server-middleware/markdown/hello.md",
    "content": "hello world"
  },
  {
    "path": "projects/markdown-server-middleware/markdown/index.md",
    "content": "# Index\r\n\r\n* [Hello](/hello)\r\n* [About Us](/about/us)"
  },
  {
    "path": "projects/markdown-server-middleware/markdown-server-middleware.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Markdig\" Version=\"0.36.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/README.md",
    "content": "# Middleware (14)\r\n\r\n  We will explore all aspect of middleware building in this section.\r\n\r\n  * [Middleware 0](/projects/middleware/middleware-0)\r\n\r\n    ASP.NET Core is built on top of pipelines of functions called middleware. This sample shows the basic outline on how they work. \r\n    \r\n    We are using ```IApplicationBuilder Use```, an extension method for adding middleware and ```IApplicationBuilder Run```.\r\n\r\n  * [Middleware 1](/projects/middleware/middleware-1)\r\n   \r\n    This example shows how to pass information from one middleware to another using `HttpContext.Items`.\r\n\r\n  * [Middleware 2](/projects/middleware/middleware-2)\r\n   \r\n    As a general rule, only one of your Middleware should write to Response in an execution path. This sample shows how to work around this by buffering the Response.\r\n\r\n    e.g.\r\n\r\n    If path `/` involves the execution of Middleware 1, Middleware 2 and Middleware 3, only one of these should write to Response.\r\n\r\n  * [Middleware 3](/projects/middleware/middleware-3)\r\n   \r\n    This is the simplest middleware class you can create. \r\n\r\n  * [Middleware 4](/projects/middleware/middleware-4)\r\n   \r\n    Use `app.Map` (`MapMiddleware`) to configure your middleware pipeline to respond only on specific url path.\r\n\r\n  * [Middleware 5](/projects/middleware/middleware-5)\r\n   \r\n    Nested `app.Map` (show `Request.Path` and `Request.PathBase`).\r\n\r\n  * [Middleware 6](/projects/middleware/middleware-6)\r\n   \r\n    Use `app.MapWhen`(`MapWhenMiddleware`) and Nested `app.Map` (show `Request.Path` and `Request.PathBase`).\r\n\r\n  * [Middleware 7](/projects/middleware/middleware-7)\r\n   \r\n    Use `MapMiddleware` and `MapWhenMiddleware` directly without using extensions (show `Request.Path` and `Request.PathBase`).\r\n\r\n  * [Middleware 8](/projects/middleware/middleware-8)\r\n   \r\n    Demonstrate the various ways you can inject dependency to your middleware class *manually*. \r\n\r\n  * [Middleware 9](/projects/middleware/middleware-9)\r\n   \r\n    Demonstrate how to ASP.NET Core built in DI (Dependency Injection) mechanism to provide dependency for your middleware.\r\n\r\n  * [Middleware 10](/projects/middleware/middleware-10)\r\n   \r\n    Demonstrate that a middleware is a singleton.\r\n\r\n  * [Middleware 11](/projects/middleware/middleware-11)\r\n   \r\n    This sample is similar to `Middleware 10` except that this one implement `IMiddleware` to create Factory-based middleware activation. This means that you can create a middleware that is not a singleton (either Transient or Scoped). \r\n\r\n  * [Middleware 12](/projects/middleware/middleware-12)\r\n\r\n    Contrast the usage of `MapWhen` (which branch execution) and `UseWhen` (which doesn't branch execution) in configuring your Middleware.\r\n\r\n  * [Middleware 13](/projects/middleware/middleware-13)\r\n\r\n    Demonstrate how to implement basic error handling mechanism and how to return error object (same for all api exceptions).\r\n\r\ndotnet8"
  },
  {
    "path": "projects/middleware/build.bat",
    "content": "dotnet build middleware-0\r\ndotnet build middleware-1\r\ndotnet build middleware-2\r\ndotnet build middleware-3\r\ndotnet build middleware-4\r\ndotnet build middleware-5\r\ndotnet build middleware-6\r\ndotnet build middleware-7\r\ndotnet build middleware-8\r\ndotnet build middleware-9\r\ndotnet build middleware-10\r\ndotnet build middleware-11\r\ndotnet build middleware-12\r\ndotnet build middleware-13"
  },
  {
    "path": "projects/middleware/build.sh",
    "content": "#!/bin/bash\ndotnet build middleware-0\ndotnet build middleware-1\ndotnet build middleware-2\ndotnet build middleware-3\ndotnet build middleware-4\ndotnet build middleware-5\ndotnet build middleware-6\ndotnet build middleware-7\ndotnet build middleware-8\ndotnet build middleware-9\ndotnet build middleware-10\ndotnet build middleware-11\ndotnet build middleware-12\ndotnet build middleware-13\n"
  },
  {
    "path": "projects/middleware/middleware-0/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\n//The order of these things are important. \r\napp.Use(async (context, next) =>\r\n{\r\n    context.Items[\"Content\"] += \"[1] ----- \\n\";//1\r\n    await next(context);\r\n    context.Items[\"Content\"] += \"[5] =====\\n\";//5\r\n    await context.Response.WriteAsync(context.Items[\"Content\"] as string);\r\n});\r\n\r\napp.Use(async (context, next) =>\r\n{\r\n    context.Items[\"Content\"] += \"[2] Hello world \\n\";//2\r\n    await next(context);\r\n    context.Items[\"Content\"] += \"[4]  \\n\";//4\r\n});\r\n\r\napp.Run(context =>\r\n{\r\n    context.Items[\"Content\"] += \"[3] ----- \\n\";//3\r\n    return Task.CompletedTask;\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/middleware/middleware-0/middleware-0.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/middleware-1/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\n//The order of these things are important. \r\n//Only one Middleware should write to the Response. \r\n//Do not write to Response before next.Invoke()\r\napp.Use(async (context, next) =>\r\n{\r\n    context.Items[\"Greeting\"] = \"Hello World\";\r\n    await next(context);\r\n    await context.Response.WriteAsync($\"{context.Items[\"Greeting\"]}\\n\");\r\n    await context.Response.WriteAsync($\"{context.Items[\"Goodbye\"]}\\n\");\r\n});\r\n\r\napp.Use(async(context, next) =>\r\n{\r\n    context.Items[\"Goodbye\"] = \"Goodbye for now\";\r\n    await next(context);\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/middleware/middleware-1/middleware-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/middleware-10/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.UseMiddleware(typeof(TerminalMiddleware));\r\napp.Run();\r\n\r\npublic class TerminalMiddleware\r\n{\r\n    DateTime _date = DateTime.Now;\r\n\r\n    public TerminalMiddleware(RequestDelegate next)\r\n    {\r\n    }\r\n\r\n    public async Task Invoke(HttpContext context, ILogger<TerminalMiddleware> log)\r\n    {\r\n        log.LogDebug($\"Request: {context.Request.Path}\");\r\n        context.Response.Headers.Append(\"Content-Type\", \"text/plain\");\r\n        await context.Response.WriteAsync($\"Middleware is singleton. Keep refreshing the page. You will see that the date does not change {_date}.\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/middleware/middleware-10/middleware-10.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/middleware-11/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddTransient<TerminalMiddleware>();\r\n\r\nvar app = builder.Build();\r\napp.UseMiddleware(typeof(TerminalMiddleware));\r\napp.Run();\r\n\r\npublic class TerminalMiddleware : IMiddleware\r\n{\r\n    ILogger<TerminalMiddleware> _log;\r\n\r\n    DateTime _date = DateTime.Now;\r\n\r\n    public TerminalMiddleware(ILogger<TerminalMiddleware> log)\r\n    {\r\n        _log = log;\r\n    }\r\n\r\n    public async Task InvokeAsync(HttpContext context, RequestDelegate next)\r\n    {\r\n        _log.LogDebug($\"Request: {context.Request.Path}\");\r\n        context.Response.Headers.Append(\"Content-Type\", \"text/plain\");\r\n        await context.Response.WriteAsync($\"This Middleware is transient. Keep refreshing your page. The date will keep changing: {_date}.\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/middleware/middleware-11/middleware-11.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/middleware-12/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.UseMiddleware<MiddlewareHtml>();\r\napp.UseMiddleware<MiddlewareTitle>();\r\n\r\napp.MapWhen(context => context.Request.Path.StartsWithSegments(\"/map-when-example\"), appBuilder => appBuilder.UseMiddleware<MiddlewareUsedByMapWhen>());\r\napp.UseWhen(context => context.Request.Path.StartsWithSegments(\"/use-when-example\"), appBuilder => appBuilder.UseMiddleware<MiddlewareUsedByUseWhen>());\r\n\r\napp.UseMiddleware<MiddlewareNavigation>();\r\napp.UseMiddleware<MiddlewareFooter>();\r\n\r\napp.Run();\r\n\r\npublic class MiddlewareHtml\r\n{\r\n    readonly RequestDelegate _next;\r\n\r\n    public MiddlewareHtml(RequestDelegate next) => _next = next;\r\n\r\n    public async Task Invoke(HttpContext context)\r\n    {\r\n        context.Items[\"Content\"] += \"<html><body>\\n\";\r\n        await _next.Invoke(context);\r\n        context.Items[\"Content\"] += \"</body></html>\";\r\n\r\n        context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n        await context.Response.WriteAsync(context.Items[\"Content\"] as string);\r\n    }\r\n}\r\n\r\npublic class MiddlewareTitle\r\n{\r\n    readonly RequestDelegate _next;\r\n\r\n    public MiddlewareTitle(RequestDelegate next) => _next = next;\r\n\r\n    public async Task Invoke(HttpContext context)\r\n    {\r\n        context.Items[\"Content\"] += \"<h1>Contrasting MapWhen with UseWhen</h1>\\n\";\r\n        await _next.Invoke(context);\r\n    }\r\n}\r\n\r\npublic class MiddlewareFooter\r\n{\r\n    readonly RequestDelegate _next;\r\n\r\n    public MiddlewareFooter(RequestDelegate next) => _next = next;\r\n\r\n    public async Task Invoke(HttpContext context)\r\n    {\r\n        await _next.Invoke(context);\r\n        context.Items[\"Content\"] += \"<footer><hr/><strong>Middleware Footer</strong></footer>\\n\";\r\n    }\r\n}\r\n\r\n\r\npublic class MiddlewareUsedByMapWhen\r\n{\r\n    readonly RequestDelegate _next;\r\n\r\n    public MiddlewareUsedByMapWhen(RequestDelegate next) => _next = next;\r\n\r\n    public async Task Invoke(HttpContext context)\r\n    {\r\n        context.Items[\"Content\"] += @\"<strong>This message generated by MiddlewareUsedByMapWhen</strong>\\n\r\n            <p>\r\n                MapWhen branches the middleware execution hence you will not see the footer here.\r\n            </p>\r\n            \";\r\n\r\n        await _next.Invoke(context);\r\n    }\r\n}\r\n\r\npublic class MiddlewareUsedByUseWhen\r\n{\r\n    readonly RequestDelegate _next;\r\n\r\n    public MiddlewareUsedByUseWhen(RequestDelegate next) => _next = next;\r\n\r\n    public async Task Invoke(HttpContext context)\r\n    {\r\n        context.Items[\"Content\"] += @\"<strong>This message generated by MiddlewareUsedByUseWhen</strong>\\n\r\n            <p>\r\n                UseWhen makes the execution of a Middleware conditional based on certain condition. In contrast with MapWhen, it does not branch the execution. Hence you will\r\n                see the footer here.\r\n            </p>\r\n            \";\r\n\r\n        await _next.Invoke(context);\r\n    }\r\n}\r\n\r\npublic class MiddlewareNavigation\r\n{\r\n    readonly RequestDelegate _next;\r\n\r\n    public MiddlewareNavigation(RequestDelegate next) => _next = next;\r\n\r\n    public async Task Invoke(HttpContext context)\r\n    {\r\n        context.Items[\"Content\"] += @\"<ul>\r\n                   <li><a href=\"\"/map-when-example\"\">/map-when-example</a>.</li>\r\n                   <li><a href=\"\"/use-when-example\"\">/use-when-example</a>.</li>\r\n                </ul>\";\r\n\r\n        await _next.Invoke(context);\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/middleware/middleware-12/middleware-12.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/middleware-13/Program.cs",
    "content": "using System.Net;\r\nusing System.Text.Json;\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddSingleton<ErrorHandlingMiddleware>();\r\n\r\nvar app = builder.Build();\r\napp.UseMiddleware<ErrorHandlingMiddleware>();\r\napp.Run(context => throw new ExampleApiException(\"oops\"));\r\napp.Run();\r\n\r\npublic interface ICustomApiException\r\n{\r\n    HttpStatusCode HttpStatus { get; }\r\n    string HttpMessage { get; }\r\n}\r\n\r\npublic class ExampleApiException : Exception, ICustomApiException\r\n{\r\n    public HttpStatusCode HttpStatus => HttpStatusCode.Forbidden;\r\n    public string HttpMessage => \"Resource cannot be accessed.\";\r\n\r\n    public ExampleApiException(string message) : base(message)\r\n    {\r\n    }\r\n}\r\n\r\npublic class ErrorDto\r\n{\r\n    public int Status { get; set; }\r\n    public string Message { get; set; }\r\n}\r\n\r\npublic class ErrorHandlingMiddleware : IMiddleware\r\n{\r\n    private readonly ILogger<ErrorHandlingMiddleware> _logger;\r\n\r\n    public ErrorHandlingMiddleware(ILogger<ErrorHandlingMiddleware> logger)\r\n    {\r\n        _logger = logger;\r\n    }\r\n\r\n    public async Task InvokeAsync(HttpContext context, RequestDelegate next)\r\n    {\r\n        try\r\n        {\r\n            await next(context);\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            _logger.LogError(ex, ex.Message);\r\n\r\n            var httpStatus = HttpStatusCode.InternalServerError;\r\n            var httpMessage = \"Internal Server Error\";\r\n\r\n            if (ex is ICustomApiException customException)\r\n            {\r\n                httpStatus = customException.HttpStatus;\r\n                httpMessage = customException.HttpMessage;\r\n            }\r\n\r\n            context.Response.StatusCode = (int)httpStatus;\r\n            context.Response.ContentType = \"application/json\";\r\n\r\n            var error = new ErrorDto()\r\n            {\r\n                Status = (int)httpStatus,\r\n                Message = httpMessage\r\n            };\r\n\r\n            await context.Response.WriteAsync(JsonSerializer.Serialize(error));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/middleware/middleware-13/middleware-13.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/middleware-2/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\n//https://github.com/aspnet/Entropy/blob/master/samples/Builder.Filtering.Web/Startup.cs\r\n\r\napp.Use(BufferAsync);\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await context.Response.WriteAsync(\"<h1>This sample uses buffering</h1>\");\r\n    await context.Response.WriteAsync(\"<p>This allows all your Middlewares to write to Response.</p>\");\r\n});\r\n\r\nasync Task BufferAsync(HttpContext context, RequestDelegate next)\r\n{\r\n    var body = context.Response.Body;\r\n    var buffer = new MemoryStream();\r\n    context.Response.Body = buffer;\r\n\r\n    try\r\n    {\r\n        await context.Response.WriteAsync(\"<html><body>\");\r\n        await next(context);\r\n        await context.Response.WriteAsync(\"</body></html>\");\r\n\r\n        buffer.Position = 0;\r\n        await buffer.CopyToAsync(body);\r\n    }\r\n    finally\r\n    {\r\n        context.Response.Body = body;\r\n    }\r\n}\r\n\r\napp.Run();"
  },
  {
    "path": "projects/middleware/middleware-2/middleware-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/middleware-3/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.UseMiddleware<TerminalMiddleware>();\r\napp.Run();\r\n\r\n//A middleware class in ASP.NET Core is simply a class that \r\n// - Take a constructor with RequestDelegate\r\n// - implements Invoke method taking HttpContext and returning Task\r\n//If you take a look at this code, it cannot be any simpler.\r\n//This is a terminal middleware. It does not invoke the subsequent middleware. It just returns its own response and that's it.\r\n\r\npublic class TerminalMiddleware\r\n{\r\n    public TerminalMiddleware(RequestDelegate next)\r\n    {\r\n        //We are not using the parameter next in this middleware since this middleware is terminal\r\n    }\r\n\r\n    public async Task Invoke(HttpContext context)\r\n    {\r\n        await context.Response.WriteAsync(\"Hello world\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/middleware/middleware-3/middleware-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/middleware-4/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.Map(\"/hello\", (IApplicationBuilder pp) => pp.Run(context => context.Response.WriteAsync(\"/hello path\")));\r\napp.Map(\"/world\", (IApplicationBuilder pp) => pp.Run(context => context.Response.WriteAsync(\"/world path\")));\r\n\r\napp.Run(context =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    return context.Response.WriteAsync(@\"\r\n                   <a href=\"\"/hello\"\">hello</a> <a href=\"\"/world\"\">world</a>\r\n                \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/middleware/middleware-4/middleware-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/middleware-5/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.Map(\"/hello\", (IApplicationBuilder pp) =>\r\n{\r\n    //nested\r\n    app.Map(\"/world\", (IApplicationBuilder ppa) => ppa.Run(context =>\r\n        context.Response.WriteAsync($\"Path: {context.Request.Path} - Path Base: {context.Request.PathBase}\")));\r\n\r\n    pp.Run(context =>\r\n        context.Response.WriteAsync($\"Path: {context.Request.Path} - Path Base: {context.Request.PathBase}\"));\r\n});\r\n\r\napp.Run(context =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    return context.Response.WriteAsync(@\"<a href=\"\"/hello\"\">/hello</a> <a href=\"\"/hello/world\"\">/hello/world</a>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/middleware/middleware-5/middleware-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>middleware-5</AssemblyName>\r\n    <PackageId>middleware-5</PackageId>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/middleware-6/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.MapWhen(context => context.Request.Path.Value.Contains(\"/hello\"),\r\n(IApplicationBuilder pp) =>\r\n{\r\n    //nested\r\n    app.Map(\"/world\", (IApplicationBuilder ppa) => ppa.Run(context => \r\n        context.Response.WriteAsync($\"Path: {context.Request.Path} - Path Base: {context.Request.PathBase}\")));\r\n\r\n    pp.Run(context =>\r\n        context.Response.WriteAsync($\"Path: {context.Request.Path} - Path Base: {context.Request.PathBase}\"));\r\n});\r\n\r\napp.Run(context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    return context.Response.WriteAsync(@\"<a href=\"\"/hello\"\">/hello</a> <a href=\"\"/hello/world\"\">/hello/world</a>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/middleware/middleware-6/middleware-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>middleware-6</AssemblyName>\r\n    <PackageId>middleware-6</PackageId>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/middleware-7/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder.Extensions;\r\nvar app = WebApplication.Create();\r\n\r\n//Use MapMiddleWare and MapWhenMiddlware directly\r\nvar whenOption = new MapWhenOptions\r\n{\r\n    Branch =\r\n        context =>\r\n            context.Response.WriteAsync($\"MapWhenMiddleware| Path: {context.Request.Path} - Path Base: {context.Request.PathBase}\"),\r\n    Predicate = context => context.Request.Path.Value.Contains(\"hello\")\r\n};\r\n\r\napp.UseMiddleware<MapWhenMiddleware>(whenOption);\r\n\r\nvar mapOption = new MapOptions\r\n{\r\n    Branch =\r\n        context =>\r\n            context.Response.WriteAsync($\"MapMiddleware| Path: {context.Request.Path} - Path Base: {context.Request.PathBase}\"),\r\n    PathMatch = \"/greetings\"\r\n};\r\n\r\napp.UseMiddleware<MapMiddleware>(mapOption);\r\n\r\napp.Run(context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    return context.Response.WriteAsync(@\"<a href=\"\"/hello\"\">/hello</a> <a href=\"\"/greetings\"\">/greetings</a>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/middleware/middleware-7/middleware-7.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/middleware-8/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddSingleton<Content>();\r\n\r\nvar app = builder.Build();\r\n\r\n//Pay attention to the order of the parameter passed.\r\n//If your parameter is distinct, the order does not matter, As you can see here we put Greeting\r\n//at the end of the parameter passing although in the constructor Greeting was the second on the parameter list.\r\n//However if you pass multiple parameters of the same type, the order matters. \r\napp.UseMiddleware<TerminalMiddleware>(\"Cairo\", \"Dody\", new Greeting());\r\n\r\napp.Run();\r\n\r\npublic class Content\r\n{\r\n    public string SayHello() => \"Hello world\";\r\n}\r\n\r\npublic class Greeting\r\n{\r\n    public string Greet() => \"Good morning\";\r\n}\r\n\r\n\r\npublic class TerminalMiddleware\r\n{\r\n    readonly Content _content;\r\n    readonly string _city;\r\n    readonly Greeting _greet;\r\n    readonly string _name;\r\n\r\n    public TerminalMiddleware(RequestDelegate next, Greeting greet, string city, Content cnt, string name)\r\n    {\r\n        //We are not using the parameter next in this middleware since this middleware is terminal\r\n        _content = cnt;\r\n        _city = city;\r\n        _greet = greet;\r\n        _name = name;\r\n    }\r\n    public async Task Invoke(HttpContext context)\r\n    {\r\n        await context.Response.WriteAsync($\"{_greet.Greet()} {_name}, {_content.SayHello()} from {_city}\");\r\n    }\r\n}"
  },
  {
    "path": "projects/middleware/middleware-8/middleware-8.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/middleware/middleware-9/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddSingleton<Greeting>();\r\nbuilder.Services.AddSingleton<Goodbye>();\r\n\r\nvar app = builder.Build();\r\napp.UseMiddleware(typeof(TerminalMiddleware));\r\napp.Run();\r\n\r\npublic class Greeting\r\n{\r\n    public string Greet() => \"Good morning\";\r\n}\r\n\r\npublic class Goodbye\r\n{\r\n    public string Say() => \"Goodbye\";\r\n}\r\n\r\npublic class TerminalMiddleware\r\n{\r\n    Greeting _greet;\r\n\r\n    public TerminalMiddleware(RequestDelegate next, Greeting greet)\r\n    {\r\n        _greet = greet;\r\n    }\r\n\r\n    public async Task Invoke(HttpContext context, Goodbye goodbye)\r\n    {\r\n        await context.Response.WriteAsync($\"{_greet.Greet()} {goodbye.Say()}\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/middleware/middleware-9/middleware-9.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mini/README.md",
    "content": "# Mini Apps (2)\r\n\r\nThis is a collection of useful mini applications written in ASP.NET Core 5 designed to demonstrate one or more techniques related to ASP.NET Core and other web libraries.\r\n\r\n\r\n- [PDF Viewer](pdf-viewer)\r\n\r\n  This sample shows you how to build a PDF viewer using PDF.js\r\n\r\n\r\n* [Pokedex API](minimal-api-pokedex)\n\n  This example shows how to build Web API using Minimal API pattern using Pokedex as a data source. Uses .NET 10 built-in OpenAPI.\n\ndotnet10"
  },
  {
    "path": "projects/mini/build.bat",
    "content": "dotnet build pdf-viewer"
  },
  {
    "path": "projects/mini/build.sh",
    "content": "#!/bin/bash\ndotnet build pdf-viewer\n"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/Minimal.Api.Pokedex.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.0.31808.319\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Minimal.Api.Pokedex\", \"src\\Minimal.Api.Pokedex\\Minimal.Api.Pokedex.csproj\", \"{548D3B00-A9F4-4A97-85F3-0F3653D7D322}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{548D3B00-A9F4-4A97-85F3-0F3653D7D322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{548D3B00-A9F4-4A97-85F3-0F3653D7D322}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{548D3B00-A9F4-4A97-85F3-0F3653D7D322}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{548D3B00-A9F4-4A97-85F3-0F3653D7D322}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {E3678DBD-DEB8-4A0F-A43D-D640723EB1E4}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/Readme.md",
    "content": "# Minimal Api - Pokedex \r\n\r\nThis projet showcases the new .NET 6 Minimal APIs feature for developing Web APIs. We build a Pokedex API in this sample.\r\n\r\n# Description\r\n\r\nThe project uses a static pokedex JSON file as a data store to read. The JSON file is kept in `Data` folder and read at runtime. We setup Swagger as part of the project and we get a Swagger UI to look at the endpoints supported. Steps to set up a minimal api:\r\n\r\n- Changes to Program.cs\r\n    - In program.cs, we add API explorer and Swagger.\r\n        ```csharp\r\n        builder.Services.AddEndpointsApiExplorer();\r\n        builder.Services.AddSwaggerGen(options => options.SwaggerDoc(\"v1\", new OpenApiInfo()\r\n        {\r\n            Description = \"Pokedex API implemetation using .NET 6 Minimal API\",\r\n            Title = \"Pokedex API\",\r\n            Version = \"v1\", \r\n            Contact = new OpenApiContact()\r\n            {\r\n                Name = \"Lohith GN\",\r\n                Url = new Uri(\"https://github.com/lohithgn\")\r\n            }\r\n        }));\r\n        ```\r\n    - Next, we add our required services to service collection.\r\n        ```csharp\r\n            services.AddScoped<IPokedexRepository, PokedexRepository>();\r\n            services.AddScoped<IPokedexService, PokedexService>();\r\n        ```\r\n    - We then build the app\r\n        ```csharp\r\n            var app = builder.Build();\r\n        ```\r\n    - Once app is built, we configure services to use\r\n        ```csharp\r\n            app.UseStaticFiles();\r\n            app.UseSwagger();\r\n            app.UseSwaggerUI(c =>\r\n            {\r\n                c.SwaggerEndpoint(\"/swagger/v1/swagger.json\", \"Pokedex Api v1\");\r\n                c.RoutePrefix = string.Empty;\r\n            });\r\n        ```\r\n    - We then add our Pokedex API routes\r\n        ```csharp\r\n             builder.MapGet(\"/pokedex\", async (int? page, int? pageSize, IPokedexService service) =>\r\n            {\r\n                //...call to service\r\n            })\r\n            .Produces<PokedexPagedResponse>(StatusCodes.Status200OK);\r\n\r\n            builder.MapGet(\"/pokedex/all\", async (IPokedexService service) =>\r\n            {\r\n                //...call to service\r\n            })\r\n            .Produces<PokedexResponse>(StatusCodes.Status200OK);\r\n\r\n            builder.MapGet(\"/pokedex/{name}\", async (string name, IPokedexService service) =>\r\n            {\r\n                //...call to service\r\n            })\r\n            .Produces<PokemonEntity>(StatusCodes.Status200OK)\r\n            .ProducesProblem(StatusCodes.Status404NotFound);\r\n\r\n            builder.MapGet(\"/pokedex/search\", async (string query, int? page, int? pageSize, IPokedexService service) =>\r\n            {\r\n                //...call to service\r\n            })\r\n            .Produces<PokedexPagedResponse>(StatusCodes.Status200OK)\r\n            .Produces<PokedexPagedResponse>(StatusCodes.Status400BadRequest);\r\n\r\n        ```\r\n    - We then run the app\r\n        ```csharp\r\n            app.Run();\r\n        ```        \r\n- Run the app. Navigate to root of the site. Swagger UI will be rendered at the root of the site (we set Swagger route prefix to empty).\r\n<img src=\"assets/swagger-ui.png\">\r\n\r\nNote: To run this sample, you need to have .NET 6 installed on your machine. If you are using Visual Studio Code make sure to install the latest .NET 6 SDK. If you are using Visual Studio - make sure you use VS2022 as it comes with .NET 6.\r\n\r\n# Credits\r\n\r\nContribution by [Lohith G. N.](https://github.com/lohithgn)\r\n"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/.dockerignore",
    "content": "**/.classpath\r\n**/.dockerignore\r\n**/.env\r\n**/.git\r\n**/.gitignore\r\n**/.project\r\n**/.settings\r\n**/.toolstarget\r\n**/.vs\r\n**/.vscode\r\n**/*.*proj.user\r\n**/*.dbmdl\r\n**/*.jfm\r\n**/azds.yaml\r\n**/bin\r\n**/charts\r\n**/docker-compose*\r\n**/Dockerfile*\r\n**/node_modules\r\n**/npm-debug.log\r\n**/obj\r\n**/secrets.dev.yaml\r\n**/values.dev.yaml\r\nLICENSE\r\nREADME.md"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Data/pokemon.json",
    "content": "[\r\n    {\r\n        \"num\": 1,\r\n        \"name\": \"Bulbasaur\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bulbasaur\",\r\n                \"description\": \"Bulbasaur is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Seed Pokémon.\",\r\n                \"image\": \"images/bulbasaur.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Seed Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 6.9,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Chlorophyll\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 318,\r\n                    \"hp\": 45,\r\n                    \"attack\": 49,\r\n                    \"defense\": 49,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"bulbasaur\",\r\n                    \"ivysaur\",\r\n                    \"venusaur\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bulbasaur\"\r\n    },\r\n    {\r\n        \"num\": 2,\r\n        \"name\": \"Ivysaur\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ivysaur\",\r\n                \"description\": \"Ivysaur is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Seed Pokémon.\",\r\n                \"image\": \"images/ivysaur.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Seed Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 13,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Chlorophyll\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 60,\r\n                    \"attack\": 62,\r\n                    \"defense\": 63,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"bulbasaur\",\r\n                    \"ivysaur\",\r\n                    \"venusaur\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ivysaur\"\r\n    },\r\n    {\r\n        \"num\": 3,\r\n        \"name\": \"Venusaur\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Venusaur\",\r\n                \"description\": \"Venusaur is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Seed Pokémon.\\nVenusaur has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/venusaur.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Seed Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 100,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Chlorophyll\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 80,\r\n                    \"attack\": 82,\r\n                    \"defense\": 83,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"bulbasaur\",\r\n                    \"ivysaur\",\r\n                    \"venusaur\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Venusaur\",\r\n                \"description\": \"Venusaur is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Seed Pokémon.\\nVenusaur has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/venusaur-mega.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Seed Pokémon\",\r\n                \"height\": 2.4,\r\n                \"weight\": 155.5,\r\n                \"abilities\": [\r\n                    \"Thick Fat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 625,\r\n                    \"hp\": 80,\r\n                    \"attack\": 100,\r\n                    \"defense\": 123,\r\n                    \"speedAttack\": 122,\r\n                    \"speedDefense\": 120,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"bulbasaur\",\r\n                    \"ivysaur\",\r\n                    \"venusaur\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/venusaur\"\r\n    },\r\n    {\r\n        \"num\": 4,\r\n        \"name\": \"Charmander\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Charmander\",\r\n                \"description\": \"Charmander is a Fire type Pokémon introduced in Generation 1. It is known as the Lizard Pokémon.\",\r\n                \"image\": \"images/charmander.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Lizard Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 8.5,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Solar Power\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 309,\r\n                    \"hp\": 39,\r\n                    \"attack\": 52,\r\n                    \"defense\": 43,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"charmander\",\r\n                    \"charmeleon\",\r\n                    \"charizard\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/charmander\"\r\n    },\r\n    {\r\n        \"num\": 5,\r\n        \"name\": \"Charmeleon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Charmeleon\",\r\n                \"description\": \"Charmeleon is a Fire type Pokémon introduced in Generation 1. It is known as the Flame Pokémon.\",\r\n                \"image\": \"images/charmeleon.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Flame Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 19,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Solar Power\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 58,\r\n                    \"attack\": 64,\r\n                    \"defense\": 58,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"charmander\",\r\n                    \"charmeleon\",\r\n                    \"charizard\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/charmeleon\"\r\n    },\r\n    {\r\n        \"num\": 6,\r\n        \"name\": \"Charizard\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Charizard\",\r\n                \"description\": \"Charizard is a Fire/Flying type Pokémon introduced in Generation 1. It is known as the Flame Pokémon.\\nCharizard has two Mega Evolutions, available from X & Y onwards.\",\r\n                \"image\": \"images/charizard.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Flame Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 90.5,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Solar Power\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 534,\r\n                    \"hp\": 78,\r\n                    \"attack\": 84,\r\n                    \"defense\": 78,\r\n                    \"speedAttack\": 109,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"charmander\",\r\n                    \"charmeleon\",\r\n                    \"charizard\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Charizard X\",\r\n                \"description\": \"Charizard is a Fire/Flying type Pokémon introduced in Generation 1. It is known as the Flame Pokémon.\\nCharizard has two Mega Evolutions, available from X & Y onwards.\",\r\n                \"image\": \"images/charizard-mega-x.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Flame Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 110.5,\r\n                \"abilities\": [\r\n                    \"Tough Claws\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 634,\r\n                    \"hp\": 78,\r\n                    \"attack\": 130,\r\n                    \"defense\": 111,\r\n                    \"speedAttack\": 130,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"charmander\",\r\n                    \"charmeleon\",\r\n                    \"charizard\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Charizard Y\",\r\n                \"description\": \"Charizard is a Fire/Flying type Pokémon introduced in Generation 1. It is known as the Flame Pokémon.\\nCharizard has two Mega Evolutions, available from X & Y onwards.\",\r\n                \"image\": \"images/charizard-mega-y.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Flame Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 100.5,\r\n                \"abilities\": [\r\n                    \"Drought\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 634,\r\n                    \"hp\": 78,\r\n                    \"attack\": 104,\r\n                    \"defense\": 78,\r\n                    \"speedAttack\": 159,\r\n                    \"speedDefense\": 115,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"charmander\",\r\n                    \"charmeleon\",\r\n                    \"charizard\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/charizard\"\r\n    },\r\n    {\r\n        \"num\": 7,\r\n        \"name\": \"Squirtle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Squirtle\",\r\n                \"description\": \"Squirtle is a Water type Pokémon introduced in Generation 1. It is known as the Tiny Turtle Pokémon.\",\r\n                \"image\": \"images/squirtle.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Tiny Turtle Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 9,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Rain Dish\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 314,\r\n                    \"hp\": 44,\r\n                    \"attack\": 48,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 64,\r\n                    \"speed\": 43\r\n                },\r\n                \"evolutions\": [\r\n                    \"squirtle\",\r\n                    \"wartortle\",\r\n                    \"blastoise\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/squirtle\"\r\n    },\r\n    {\r\n        \"num\": 8,\r\n        \"name\": \"Wartortle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Wartortle\",\r\n                \"description\": \"Wartortle is a Water type Pokémon introduced in Generation 1. It is known as the Turtle Pokémon.\",\r\n                \"image\": \"images/wartortle.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Turtle Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 22.5,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Rain Dish\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 59,\r\n                    \"attack\": 63,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 58\r\n                },\r\n                \"evolutions\": [\r\n                    \"squirtle\",\r\n                    \"wartortle\",\r\n                    \"blastoise\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/wartortle\"\r\n    },\r\n    {\r\n        \"num\": 9,\r\n        \"name\": \"Blastoise\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Blastoise\",\r\n                \"description\": \"Blastoise is a Water type Pokémon introduced in Generation 1. It is known as the Shellfish Pokémon.\\nBlastoise has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/blastoise.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Shellfish Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 85.5,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Rain Dish\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 79,\r\n                    \"attack\": 83,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 78\r\n                },\r\n                \"evolutions\": [\r\n                    \"squirtle\",\r\n                    \"wartortle\",\r\n                    \"blastoise\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Blastoise\",\r\n                \"description\": \"Blastoise is a Water type Pokémon introduced in Generation 1. It is known as the Shellfish Pokémon.\\nBlastoise has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/blastoise-mega.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Shellfish Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 101.1,\r\n                \"abilities\": [\r\n                    \"Mega Launcher\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 630,\r\n                    \"hp\": 79,\r\n                    \"attack\": 103,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 135,\r\n                    \"speedDefense\": 115,\r\n                    \"speed\": 78\r\n                },\r\n                \"evolutions\": [\r\n                    \"squirtle\",\r\n                    \"wartortle\",\r\n                    \"blastoise\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/blastoise\"\r\n    },\r\n    {\r\n        \"num\": 10,\r\n        \"name\": \"Caterpie\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Caterpie\",\r\n                \"description\": \"Caterpie is a Bug type Pokémon introduced in Generation 1. It is known as the Worm Pokémon.\",\r\n                \"image\": \"images/caterpie.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Worm Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 2.9,\r\n                \"abilities\": [\r\n                    \"Shield Dust\",\r\n                    \"Run Away\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 195,\r\n                    \"hp\": 45,\r\n                    \"attack\": 30,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 20,\r\n                    \"speedDefense\": 20,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"caterpie\",\r\n                    \"metapod\",\r\n                    \"butterfree\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/caterpie\"\r\n    },\r\n    {\r\n        \"num\": 11,\r\n        \"name\": \"Metapod\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Metapod\",\r\n                \"description\": \"Metapod is a Bug type Pokémon introduced in Generation 1. It is known as the Cocoon Pokémon.\",\r\n                \"image\": \"images/metapod.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Cocoon Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 9.9,\r\n                \"abilities\": [\r\n                    \"Shed Skin\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 205,\r\n                    \"hp\": 50,\r\n                    \"attack\": 20,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 25,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"caterpie\",\r\n                    \"metapod\",\r\n                    \"butterfree\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/metapod\"\r\n    },\r\n    {\r\n        \"num\": 12,\r\n        \"name\": \"Butterfree\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Butterfree\",\r\n                \"description\": \"Butterfree is a Bug/Flying type Pokémon introduced in Generation 1. It is known as the Butterfly Pokémon.\",\r\n                \"image\": \"images/butterfree.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Butterfly Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 32,\r\n                \"abilities\": [\r\n                    \"Compound Eyes\",\r\n                    \"Tinted Lens\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 395,\r\n                    \"hp\": 60,\r\n                    \"attack\": 45,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"caterpie\",\r\n                    \"metapod\",\r\n                    \"butterfree\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/butterfree\"\r\n    },\r\n    {\r\n        \"num\": 13,\r\n        \"name\": \"Weedle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Weedle\",\r\n                \"description\": \"Weedle is a Bug/Poison type Pokémon introduced in Generation 1. It is known as the Hairy Bug Pokémon.\",\r\n                \"image\": \"images/weedle.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Hairy Bug Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 3.2,\r\n                \"abilities\": [\r\n                    \"Shield Dust\",\r\n                    \"Run Away\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 195,\r\n                    \"hp\": 40,\r\n                    \"attack\": 35,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 20,\r\n                    \"speedDefense\": 20,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"weedle\",\r\n                    \"kakuna\",\r\n                    \"beedrill\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/weedle\"\r\n    },\r\n    {\r\n        \"num\": 14,\r\n        \"name\": \"Kakuna\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kakuna\",\r\n                \"description\": \"Kakuna is a Bug/Poison type Pokémon introduced in Generation 1. It is known as the Cocoon Pokémon.\",\r\n                \"image\": \"images/kakuna.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Cocoon Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 10,\r\n                \"abilities\": [\r\n                    \"Shed Skin\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 205,\r\n                    \"hp\": 45,\r\n                    \"attack\": 25,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 25,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"weedle\",\r\n                    \"kakuna\",\r\n                    \"beedrill\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kakuna\"\r\n    },\r\n    {\r\n        \"num\": 15,\r\n        \"name\": \"Beedrill\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Beedrill\",\r\n                \"description\": \"Beedrill is a Bug/Poison type Pokémon introduced in Generation 1. It is known as the Poison Bee Pokémon.\\nBeedrill has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/beedrill.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Poison Bee Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 29.5,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Sniper\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 395,\r\n                    \"hp\": 65,\r\n                    \"attack\": 90,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": [\r\n                    \"weedle\",\r\n                    \"kakuna\",\r\n                    \"beedrill\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Beedrill\",\r\n                \"description\": \"Beedrill is a Bug/Poison type Pokémon introduced in Generation 1. It is known as the Poison Bee Pokémon.\\nBeedrill has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/beedrill-mega.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Poison Bee Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 40.5,\r\n                \"abilities\": [\r\n                    \"Adaptability\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 65,\r\n                    \"attack\": 150,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 15,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 145\r\n                },\r\n                \"evolutions\": [\r\n                    \"weedle\",\r\n                    \"kakuna\",\r\n                    \"beedrill\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/beedrill\"\r\n    },\r\n    {\r\n        \"num\": 16,\r\n        \"name\": \"Pidgey\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pidgey\",\r\n                \"description\": \"Pidgey is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Tiny Bird Pokémon.\",\r\n                \"image\": \"images/pidgey.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Tiny Bird Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 1.8,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Tangled Feet\",\r\n                    \"Big Pecks\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 251,\r\n                    \"hp\": 40,\r\n                    \"attack\": 45,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 56\r\n                },\r\n                \"evolutions\": [\r\n                    \"pidgey\",\r\n                    \"pidgeotto\",\r\n                    \"pidgeot\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pidgey\"\r\n    },\r\n    {\r\n        \"num\": 17,\r\n        \"name\": \"Pidgeotto\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pidgeotto\",\r\n                \"description\": \"Pidgeotto is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Bird Pokémon.\",\r\n                \"image\": \"images/pidgeotto.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Bird Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 30,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Tangled Feet\",\r\n                    \"Big Pecks\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 349,\r\n                    \"hp\": 63,\r\n                    \"attack\": 60,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 71\r\n                },\r\n                \"evolutions\": [\r\n                    \"pidgey\",\r\n                    \"pidgeotto\",\r\n                    \"pidgeot\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pidgeotto\"\r\n    },\r\n    {\r\n        \"num\": 18,\r\n        \"name\": \"Pidgeot\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pidgeot\",\r\n                \"description\": \"Pidgeot is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Bird Pokémon.\\nPidgeot has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/pidgeot.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Bird Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 39.5,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Tangled Feet\",\r\n                    \"Big Pecks\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 479,\r\n                    \"hp\": 83,\r\n                    \"attack\": 80,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 101\r\n                },\r\n                \"evolutions\": [\r\n                    \"pidgey\",\r\n                    \"pidgeotto\",\r\n                    \"pidgeot\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Pidgeot\",\r\n                \"description\": \"Pidgeot is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Bird Pokémon.\\nPidgeot has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/pidgeot-mega.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Bird Pokémon\",\r\n                \"height\": 2.2,\r\n                \"weight\": 50.5,\r\n                \"abilities\": [\r\n                    \"No Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 579,\r\n                    \"hp\": 83,\r\n                    \"attack\": 80,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 135,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 121\r\n                },\r\n                \"evolutions\": [\r\n                    \"pidgey\",\r\n                    \"pidgeotto\",\r\n                    \"pidgeot\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pidgeot\"\r\n    },\r\n    {\r\n        \"num\": 19,\r\n        \"name\": \"Rattata\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Rattata\",\r\n                \"description\": \"Rattata is a Normal type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\\nRattata has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/rattata.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Mouse Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 3.5,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Guts\",\r\n                    \"Hustle\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 253,\r\n                    \"hp\": 30,\r\n                    \"attack\": 56,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 72\r\n                },\r\n                \"evolutions\": [\r\n                    \"rattata\",\r\n                    \"raticate\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Rattata\",\r\n                \"description\": \"Rattata is a Normal type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\\nRattata has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/rattata-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Mouse Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 3.8,\r\n                \"abilities\": [\r\n                    \"Gluttony\",\r\n                    \"Hustle\",\r\n                    \"Thick Fat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 253,\r\n                    \"hp\": 30,\r\n                    \"attack\": 56,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 72\r\n                },\r\n                \"evolutions\": [\r\n                    \"rattata\",\r\n                    \"raticate\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/rattata\"\r\n    },\r\n    {\r\n        \"num\": 20,\r\n        \"name\": \"Raticate\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Raticate\",\r\n                \"description\": \"Raticate is a Normal type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\",\r\n                \"image\": \"images/raticate.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Mouse Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 18.5,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Guts\",\r\n                    \"Hustle\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 413,\r\n                    \"hp\": 55,\r\n                    \"attack\": 81,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 97\r\n                },\r\n                \"evolutions\": [\r\n                    \"rattata\",\r\n                    \"raticate\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Raticate\",\r\n                \"description\": \"Raticate is a Normal type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\",\r\n                \"image\": \"images/raticate-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Mouse Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 25.5,\r\n                \"abilities\": [\r\n                    \"Gluttony\",\r\n                    \"Hustle\",\r\n                    \"Thick Fat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 413,\r\n                    \"hp\": 75,\r\n                    \"attack\": 71,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 77\r\n                },\r\n                \"evolutions\": [\r\n                    \"rattata\",\r\n                    \"raticate\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/raticate\"\r\n    },\r\n    {\r\n        \"num\": 21,\r\n        \"name\": \"Spearow\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Spearow\",\r\n                \"description\": \"Spearow is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Tiny Bird Pokémon.\",\r\n                \"image\": \"images/spearow.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Tiny Bird Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 2,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Sniper\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 262,\r\n                    \"hp\": 40,\r\n                    \"attack\": 60,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 31,\r\n                    \"speedDefense\": 31,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"spearow\",\r\n                    \"fearow\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/spearow\"\r\n    },\r\n    {\r\n        \"num\": 22,\r\n        \"name\": \"Fearow\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Fearow\",\r\n                \"description\": \"Fearow is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Beak Pokémon.\",\r\n                \"image\": \"images/fearow.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Beak Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 38,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Sniper\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 442,\r\n                    \"hp\": 65,\r\n                    \"attack\": 90,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 61,\r\n                    \"speedDefense\": 61,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"spearow\",\r\n                    \"fearow\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/fearow\"\r\n    },\r\n    {\r\n        \"num\": 23,\r\n        \"name\": \"Ekans\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ekans\",\r\n                \"description\": \"Ekans is a Poison type Pokémon introduced in Generation 1. It is known as the Snake Pokémon.\",\r\n                \"image\": \"images/ekans.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Snake Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 6.9,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Shed Skin\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 288,\r\n                    \"hp\": 35,\r\n                    \"attack\": 60,\r\n                    \"defense\": 44,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 54,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"ekans\",\r\n                    \"arbok\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ekans\"\r\n    },\r\n    {\r\n        \"num\": 24,\r\n        \"name\": \"Arbok\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Arbok\",\r\n                \"description\": \"Arbok is a Poison type Pokémon introduced in Generation 1. It is known as the Cobra Pokémon.\",\r\n                \"image\": \"images/arbok.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Cobra Pokémon\",\r\n                \"height\": 3.5,\r\n                \"weight\": 65,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Shed Skin\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 448,\r\n                    \"hp\": 60,\r\n                    \"attack\": 95,\r\n                    \"defense\": 69,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 79,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"ekans\",\r\n                    \"arbok\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/arbok\"\r\n    },\r\n    {\r\n        \"num\": 25,\r\n        \"name\": \"Pikachu\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pikachu\",\r\n                \"description\": \"Pikachu is an Electric type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\",\r\n                \"image\": \"images/pikachu.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Mouse Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 6,\r\n                \"abilities\": [\r\n                    \"Static\",\r\n                    \"Lightning Rod\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 320,\r\n                    \"hp\": 35,\r\n                    \"attack\": 55,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"pichu\",\r\n                    \"pikachu\",\r\n                    \"raichu\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Partner Pikachu\",\r\n                \"description\": \"Pikachu is an Electric type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\",\r\n                \"image\": \"images/pikachu-lets-go.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Mouse Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 6,\r\n                \"abilities\": [],\r\n                \"stats\": {\r\n                    \"total\": 430,\r\n                    \"hp\": 45,\r\n                    \"attack\": 80,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 120\r\n                },\r\n                \"evolutions\": [\r\n                    \"pichu\",\r\n                    \"pikachu\",\r\n                    \"raichu\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pikachu\"\r\n    },\r\n    {\r\n        \"num\": 26,\r\n        \"name\": \"Raichu\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Raichu\",\r\n                \"description\": \"Raichu is an Electric type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\\nRaichu has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/raichu.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Mouse Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 30,\r\n                \"abilities\": [\r\n                    \"Static\",\r\n                    \"Lightning Rod\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 60,\r\n                    \"attack\": 90,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": [\r\n                    \"pichu\",\r\n                    \"pikachu\",\r\n                    \"raichu\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Raichu\",\r\n                \"description\": \"Raichu is an Electric type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\\nRaichu has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/raichu-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Mouse Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 21,\r\n                \"abilities\": [\r\n                    \"Surge Surfer\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 60,\r\n                    \"attack\": 85,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": [\r\n                    \"pichu\",\r\n                    \"pikachu\",\r\n                    \"raichu\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/raichu\"\r\n    },\r\n    {\r\n        \"num\": 27,\r\n        \"name\": \"Sandshrew\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sandshrew\",\r\n                \"description\": \"Sandshrew is a Ground type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\\nSandshrew has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/sandshrew.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Mouse Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 12,\r\n                \"abilities\": [\r\n                    \"Sand Veil\",\r\n                    \"Sand Rush\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 50,\r\n                    \"attack\": 75,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 20,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"sandshrew\",\r\n                    \"sandslash\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Sandshrew\",\r\n                \"description\": \"Sandshrew is a Ground type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\\nSandshrew has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/sandshrew-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Mouse Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 40,\r\n                \"abilities\": [\r\n                    \"Snow Cloak\",\r\n                    \"Slush Rush\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 50,\r\n                    \"attack\": 75,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 10,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"sandshrew\",\r\n                    \"sandslash\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sandshrew\"\r\n    },\r\n    {\r\n        \"num\": 28,\r\n        \"name\": \"Sandslash\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sandslash\",\r\n                \"description\": \"Sandslash is a Ground type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\\nSandslash has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/sandslash.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Mouse Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 29.5,\r\n                \"abilities\": [\r\n                    \"Sand Veil\",\r\n                    \"Sand Rush\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 450,\r\n                    \"hp\": 75,\r\n                    \"attack\": 100,\r\n                    \"defense\": 110,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"sandshrew\",\r\n                    \"sandslash\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Sandslash\",\r\n                \"description\": \"Sandslash is a Ground type Pokémon introduced in Generation 1. It is known as the Mouse Pokémon.\\nSandslash has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/sandslash-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Mouse Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 55,\r\n                \"abilities\": [\r\n                    \"Snow Cloak\",\r\n                    \"Slush Rush\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 450,\r\n                    \"hp\": 75,\r\n                    \"attack\": 100,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"sandshrew\",\r\n                    \"sandslash\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sandslash\"\r\n    },\r\n    {\r\n        \"num\": 29,\r\n        \"name\": \"Nidoran♀\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Nidoran♀\",\r\n                \"description\": \"Nidoran♀ is a Poison type Pokémon introduced in Generation 1. It is known as the Poison Pin Pokémon.\",\r\n                \"image\": \"images/nidoran-f.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Poison Pin Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 7,\r\n                \"abilities\": [\r\n                    \"Poison Point\",\r\n                    \"Rivalry\",\r\n                    \"Hustle\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 275,\r\n                    \"hp\": 55,\r\n                    \"attack\": 47,\r\n                    \"defense\": 52,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 41\r\n                },\r\n                \"evolutions\": [\r\n                    \"nidoran♀\",\r\n                    \"nidorina\",\r\n                    \"nidoqueen\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/nidoran-f\"\r\n    },\r\n    {\r\n        \"num\": 30,\r\n        \"name\": \"Nidorina\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Nidorina\",\r\n                \"description\": \"Nidorina is a Poison type Pokémon introduced in Generation 1. It is known as the Poison Pin Pokémon.\",\r\n                \"image\": \"images/nidorina.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Poison Pin Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 20,\r\n                \"abilities\": [\r\n                    \"Poison Point\",\r\n                    \"Rivalry\",\r\n                    \"Hustle\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 365,\r\n                    \"hp\": 70,\r\n                    \"attack\": 62,\r\n                    \"defense\": 67,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 56\r\n                },\r\n                \"evolutions\": [\r\n                    \"nidoran♀\",\r\n                    \"nidorina\",\r\n                    \"nidoqueen\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/nidorina\"\r\n    },\r\n    {\r\n        \"num\": 31,\r\n        \"name\": \"Nidoqueen\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Nidoqueen\",\r\n                \"description\": \"Nidoqueen is a Poison/Ground type Pokémon introduced in Generation 1. It is known as the Drill Pokémon.\",\r\n                \"image\": \"images/nidoqueen.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Drill Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 60,\r\n                \"abilities\": [\r\n                    \"Poison Point\",\r\n                    \"Rivalry\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 505,\r\n                    \"hp\": 90,\r\n                    \"attack\": 92,\r\n                    \"defense\": 87,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 76\r\n                },\r\n                \"evolutions\": [\r\n                    \"nidoran♀\",\r\n                    \"nidorina\",\r\n                    \"nidoqueen\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/nidoqueen\"\r\n    },\r\n    {\r\n        \"num\": 32,\r\n        \"name\": \"Nidoran♂\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Nidoran♂\",\r\n                \"description\": \"Nidoran♂ is a Poison type Pokémon introduced in Generation 1. It is known as the Poison Pin Pokémon.\",\r\n                \"image\": \"images/nidoran-m.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Poison Pin Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 9,\r\n                \"abilities\": [\r\n                    \"Poison Point\",\r\n                    \"Rivalry\",\r\n                    \"Hustle\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 273,\r\n                    \"hp\": 46,\r\n                    \"attack\": 57,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"nidoran♂\",\r\n                    \"nidorino\",\r\n                    \"nidoking\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/nidoran-m\"\r\n    },\r\n    {\r\n        \"num\": 33,\r\n        \"name\": \"Nidorino\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Nidorino\",\r\n                \"description\": \"Nidorino is a Poison type Pokémon introduced in Generation 1. It is known as the Poison Pin Pokémon.\",\r\n                \"image\": \"images/nidorino.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Poison Pin Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 19.5,\r\n                \"abilities\": [\r\n                    \"Poison Point\",\r\n                    \"Rivalry\",\r\n                    \"Hustle\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 365,\r\n                    \"hp\": 61,\r\n                    \"attack\": 72,\r\n                    \"defense\": 57,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"nidoran♂\",\r\n                    \"nidorino\",\r\n                    \"nidoking\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/nidorino\"\r\n    },\r\n    {\r\n        \"num\": 34,\r\n        \"name\": \"Nidoking\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Nidoking\",\r\n                \"description\": \"Nidoking is a Poison/Ground type Pokémon introduced in Generation 1. It is known as the Drill Pokémon.\",\r\n                \"image\": \"images/nidoking.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Drill Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 62,\r\n                \"abilities\": [\r\n                    \"Poison Point\",\r\n                    \"Rivalry\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 505,\r\n                    \"hp\": 81,\r\n                    \"attack\": 102,\r\n                    \"defense\": 77,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"nidoran♂\",\r\n                    \"nidorino\",\r\n                    \"nidoking\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/nidoking\"\r\n    },\r\n    {\r\n        \"num\": 35,\r\n        \"name\": \"Clefairy\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Clefairy\",\r\n                \"description\": \"Clefairy is a Fairy type Pokémon introduced in Generation 1. It is known as the Fairy Pokémon.\",\r\n                \"image\": \"images/clefairy.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Fairy Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 7.5,\r\n                \"abilities\": [\r\n                    \"Cute Charm\",\r\n                    \"Magic Guard\",\r\n                    \"Friend Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 323,\r\n                    \"hp\": 70,\r\n                    \"attack\": 45,\r\n                    \"defense\": 48,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"cleffa\",\r\n                    \"clefairy\",\r\n                    \"clefable\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/clefairy\"\r\n    },\r\n    {\r\n        \"num\": 36,\r\n        \"name\": \"Clefable\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Clefable\",\r\n                \"description\": \"Clefable is a Fairy type Pokémon introduced in Generation 1. It is known as the Fairy Pokémon.\",\r\n                \"image\": \"images/clefable.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Fairy Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 40,\r\n                \"abilities\": [\r\n                    \"Cute Charm\",\r\n                    \"Magic Guard\",\r\n                    \"Unaware\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 483,\r\n                    \"hp\": 95,\r\n                    \"attack\": 70,\r\n                    \"defense\": 73,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"cleffa\",\r\n                    \"clefairy\",\r\n                    \"clefable\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/clefable\"\r\n    },\r\n    {\r\n        \"num\": 37,\r\n        \"name\": \"Vulpix\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Vulpix\",\r\n                \"description\": \"Vulpix is a Fire type Pokémon introduced in Generation 1. It is known as the Fox Pokémon.\\nVulpix has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/vulpix.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Fox Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 9.9,\r\n                \"abilities\": [\r\n                    \"Flash Fire\",\r\n                    \"Drought\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 299,\r\n                    \"hp\": 38,\r\n                    \"attack\": 41,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"vulpix\",\r\n                    \"ninetales\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Vulpix\",\r\n                \"description\": \"Vulpix is a Fire type Pokémon introduced in Generation 1. It is known as the Fox Pokémon.\\nVulpix has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/vulpix-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Fox Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 9.9,\r\n                \"abilities\": [\r\n                    \"Snow Cloak\",\r\n                    \"Snow Warning\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 299,\r\n                    \"hp\": 38,\r\n                    \"attack\": 41,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"vulpix\",\r\n                    \"ninetales\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/vulpix\"\r\n    },\r\n    {\r\n        \"num\": 38,\r\n        \"name\": \"Ninetales\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ninetales\",\r\n                \"description\": \"Ninetales is a Fire type Pokémon introduced in Generation 1. It is known as the Fox Pokémon.\",\r\n                \"image\": \"images/ninetales.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Fox Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 19.9,\r\n                \"abilities\": [\r\n                    \"Flash Fire\",\r\n                    \"Drought\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 505,\r\n                    \"hp\": 73,\r\n                    \"attack\": 76,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 81,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"vulpix\",\r\n                    \"ninetales\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Ninetales\",\r\n                \"description\": \"Ninetales is a Fire type Pokémon introduced in Generation 1. It is known as the Fox Pokémon.\",\r\n                \"image\": \"images/ninetales-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Fox Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 19.9,\r\n                \"abilities\": [\r\n                    \"Snow Cloak\",\r\n                    \"Snow Warning\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 505,\r\n                    \"hp\": 73,\r\n                    \"attack\": 67,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 81,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 109\r\n                },\r\n                \"evolutions\": [\r\n                    \"vulpix\",\r\n                    \"ninetales\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ninetales\"\r\n    },\r\n    {\r\n        \"num\": 39,\r\n        \"name\": \"Jigglypuff\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Jigglypuff\",\r\n                \"description\": \"Jigglypuff is a Normal/Fairy type Pokémon introduced in Generation 1. It is known as the Balloon Pokémon.\",\r\n                \"image\": \"images/jigglypuff.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Balloon Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 5.5,\r\n                \"abilities\": [\r\n                    \"Cute Charm\",\r\n                    \"Competitive\",\r\n                    \"Friend Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 270,\r\n                    \"hp\": 115,\r\n                    \"attack\": 45,\r\n                    \"defense\": 20,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 25,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"igglybuff\",\r\n                    \"jigglypuff\",\r\n                    \"wigglytuff\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/jigglypuff\"\r\n    },\r\n    {\r\n        \"num\": 40,\r\n        \"name\": \"Wigglytuff\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Wigglytuff\",\r\n                \"description\": \"Wigglytuff is a Normal/Fairy type Pokémon introduced in Generation 1. It is known as the Balloon Pokémon.\",\r\n                \"image\": \"images/wigglytuff.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Balloon Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 12,\r\n                \"abilities\": [\r\n                    \"Cute Charm\",\r\n                    \"Competitive\",\r\n                    \"Frisk\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 435,\r\n                    \"hp\": 140,\r\n                    \"attack\": 70,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"igglybuff\",\r\n                    \"jigglypuff\",\r\n                    \"wigglytuff\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/wigglytuff\"\r\n    },\r\n    {\r\n        \"num\": 41,\r\n        \"name\": \"Zubat\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Zubat\",\r\n                \"description\": \"Zubat is a Poison/Flying type Pokémon introduced in Generation 1. It is known as the Bat Pokémon.\",\r\n                \"image\": \"images/zubat.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Bat Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 7.5,\r\n                \"abilities\": [\r\n                    \"Inner Focus\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 245,\r\n                    \"hp\": 40,\r\n                    \"attack\": 45,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"zubat\",\r\n                    \"golbat\",\r\n                    \"crobat\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/zubat\"\r\n    },\r\n    {\r\n        \"num\": 42,\r\n        \"name\": \"Golbat\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Golbat\",\r\n                \"description\": \"Golbat is a Poison/Flying type Pokémon introduced in Generation 1. It is known as the Bat Pokémon.\",\r\n                \"image\": \"images/golbat.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Bat Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 55,\r\n                \"abilities\": [\r\n                    \"Inner Focus\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 455,\r\n                    \"hp\": 75,\r\n                    \"attack\": 80,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"zubat\",\r\n                    \"golbat\",\r\n                    \"crobat\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/golbat\"\r\n    },\r\n    {\r\n        \"num\": 43,\r\n        \"name\": \"Oddish\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Oddish\",\r\n                \"description\": \"Oddish is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Weed Pokémon.\",\r\n                \"image\": \"images/oddish.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Weed Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 5.4,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Run Away\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 320,\r\n                    \"hp\": 45,\r\n                    \"attack\": 50,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"oddish\",\r\n                    \"gloom\",\r\n                    \"vileplume\",\r\n                    \"bellossom\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/oddish\"\r\n    },\r\n    {\r\n        \"num\": 44,\r\n        \"name\": \"Gloom\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gloom\",\r\n                \"description\": \"Gloom is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Weed Pokémon.\",\r\n                \"image\": \"images/gloom.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Weed Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 8.6,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Stench\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 395,\r\n                    \"hp\": 60,\r\n                    \"attack\": 65,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"oddish\",\r\n                    \"gloom\",\r\n                    \"vileplume\",\r\n                    \"bellossom\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gloom\"\r\n    },\r\n    {\r\n        \"num\": 45,\r\n        \"name\": \"Vileplume\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Vileplume\",\r\n                \"description\": \"Vileplume is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Flower Pokémon.\",\r\n                \"image\": \"images/vileplume.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Flower Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 18.6,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Effect Spore\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 75,\r\n                    \"attack\": 80,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"oddish\",\r\n                    \"gloom\",\r\n                    \"vileplume\",\r\n                    \"bellossom\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/vileplume\"\r\n    },\r\n    {\r\n        \"num\": 46,\r\n        \"name\": \"Paras\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Paras\",\r\n                \"description\": \"Paras is a Bug/Grass type Pokémon introduced in Generation 1. It is known as the Mushroom Pokémon.\",\r\n                \"image\": \"images/paras.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Mushroom Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 5.4,\r\n                \"abilities\": [\r\n                    \"Effect Spore\",\r\n                    \"Dry Skin\",\r\n                    \"Damp\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 285,\r\n                    \"hp\": 35,\r\n                    \"attack\": 70,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 25\r\n                },\r\n                \"evolutions\": [\r\n                    \"paras\",\r\n                    \"parasect\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/paras\"\r\n    },\r\n    {\r\n        \"num\": 47,\r\n        \"name\": \"Parasect\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Parasect\",\r\n                \"description\": \"Parasect is a Bug/Grass type Pokémon introduced in Generation 1. It is known as the Mushroom Pokémon.\",\r\n                \"image\": \"images/parasect.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Mushroom Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 29.5,\r\n                \"abilities\": [\r\n                    \"Effect Spore\",\r\n                    \"Dry Skin\",\r\n                    \"Damp\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 60,\r\n                    \"attack\": 95,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"paras\",\r\n                    \"parasect\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/parasect\"\r\n    },\r\n    {\r\n        \"num\": 48,\r\n        \"name\": \"Venonat\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Venonat\",\r\n                \"description\": \"Venonat is a Bug/Poison type Pokémon introduced in Generation 1. It is known as the Insect Pokémon.\",\r\n                \"image\": \"images/venonat.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Insect Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 30,\r\n                \"abilities\": [\r\n                    \"Compound Eyes\",\r\n                    \"Tinted Lens\",\r\n                    \"Run Away\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 60,\r\n                    \"attack\": 55,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"venonat\",\r\n                    \"venomoth\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/venonat\"\r\n    },\r\n    {\r\n        \"num\": 49,\r\n        \"name\": \"Venomoth\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Venomoth\",\r\n                \"description\": \"Venomoth is a Bug/Poison type Pokémon introduced in Generation 1. It is known as the Poison Moth Pokémon.\",\r\n                \"image\": \"images/venomoth.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Poison Moth Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 12.5,\r\n                \"abilities\": [\r\n                    \"Shield Dust\",\r\n                    \"Tinted Lens\",\r\n                    \"Wonder Skin\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 450,\r\n                    \"hp\": 70,\r\n                    \"attack\": 65,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"venonat\",\r\n                    \"venomoth\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/venomoth\"\r\n    },\r\n    {\r\n        \"num\": 50,\r\n        \"name\": \"Diglett\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Diglett\",\r\n                \"description\": \"Diglett is a Ground type Pokémon introduced in Generation 1. It is known as the Mole Pokémon.\",\r\n                \"image\": \"images/diglett.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Mole Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 0.8,\r\n                \"abilities\": [\r\n                    \"Sand Veil\",\r\n                    \"Arena Trap\",\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 265,\r\n                    \"hp\": 10,\r\n                    \"attack\": 55,\r\n                    \"defense\": 25,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"diglett\",\r\n                    \"dugtrio\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Diglett\",\r\n                \"description\": \"Diglett is a Ground type Pokémon introduced in Generation 1. It is known as the Mole Pokémon.\",\r\n                \"image\": \"images/diglett-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Mole Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 1,\r\n                \"abilities\": [\r\n                    \"Sand Veil\",\r\n                    \"Tangling Hair\",\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 265,\r\n                    \"hp\": 10,\r\n                    \"attack\": 55,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"diglett\",\r\n                    \"dugtrio\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/diglett\"\r\n    },\r\n    {\r\n        \"num\": 51,\r\n        \"name\": \"Dugtrio\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dugtrio\",\r\n                \"description\": \"Dugtrio is a Ground type Pokémon introduced in Generation 1. It is known as the Mole Pokémon.\",\r\n                \"image\": \"images/dugtrio.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Mole Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 33.3,\r\n                \"abilities\": [\r\n                    \"Sand Veil\",\r\n                    \"Arena Trap\",\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 425,\r\n                    \"hp\": 35,\r\n                    \"attack\": 100,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 120\r\n                },\r\n                \"evolutions\": [\r\n                    \"diglett\",\r\n                    \"dugtrio\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Dugtrio\",\r\n                \"description\": \"Dugtrio is a Ground type Pokémon introduced in Generation 1. It is known as the Mole Pokémon.\",\r\n                \"image\": \"images/dugtrio-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Mole Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 66.6,\r\n                \"abilities\": [\r\n                    \"Sand Veil\",\r\n                    \"Tangling Hair\",\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 425,\r\n                    \"hp\": 35,\r\n                    \"attack\": 100,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": [\r\n                    \"diglett\",\r\n                    \"dugtrio\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dugtrio\"\r\n    },\r\n    {\r\n        \"num\": 52,\r\n        \"name\": \"Meowth\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Meowth\",\r\n                \"description\": \"Meowth is a Normal type Pokémon introduced in Generation 1. It is known as the Scratch Cat Pokémon.\\nMeowth has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/meowth.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Scratch Cat Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 4.2,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Technician\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 290,\r\n                    \"hp\": 40,\r\n                    \"attack\": 45,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"meowth\",\r\n                    \"persian\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Meowth\",\r\n                \"description\": \"Meowth is a Normal type Pokémon introduced in Generation 1. It is known as the Scratch Cat Pokémon.\\nMeowth has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/meowth-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Scratch Cat Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 4.2,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Technician\",\r\n                    \"Rattled\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 290,\r\n                    \"hp\": 40,\r\n                    \"attack\": 35,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"meowth\",\r\n                    \"persian\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/meowth\"\r\n    },\r\n    {\r\n        \"num\": 53,\r\n        \"name\": \"Persian\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Persian\",\r\n                \"description\": \"Persian is a Normal type Pokémon introduced in Generation 1. It is known as the Classy Cat Pokémon.\\nPersian has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/persian.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Classy Cat Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 32,\r\n                \"abilities\": [\r\n                    \"Limber\",\r\n                    \"Technician\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 440,\r\n                    \"hp\": 65,\r\n                    \"attack\": 70,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 115\r\n                },\r\n                \"evolutions\": [\r\n                    \"meowth\",\r\n                    \"persian\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Persian\",\r\n                \"description\": \"Persian is a Normal type Pokémon introduced in Generation 1. It is known as the Classy Cat Pokémon.\\nPersian has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/persian-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Classy Cat Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 33,\r\n                \"abilities\": [\r\n                    \"Fur Coat\",\r\n                    \"Technician\",\r\n                    \"Rattled\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 440,\r\n                    \"hp\": 65,\r\n                    \"attack\": 60,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 115\r\n                },\r\n                \"evolutions\": [\r\n                    \"meowth\",\r\n                    \"persian\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/persian\"\r\n    },\r\n    {\r\n        \"num\": 54,\r\n        \"name\": \"Psyduck\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Psyduck\",\r\n                \"description\": \"Psyduck is a Water type Pokémon introduced in Generation 1. It is known as the Duck Pokémon.\",\r\n                \"image\": \"images/psyduck.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Duck Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 19.6,\r\n                \"abilities\": [\r\n                    \"Damp\",\r\n                    \"Cloud Nine\",\r\n                    \"Swift Swim\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 320,\r\n                    \"hp\": 50,\r\n                    \"attack\": 52,\r\n                    \"defense\": 48,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"psyduck\",\r\n                    \"golduck\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/psyduck\"\r\n    },\r\n    {\r\n        \"num\": 55,\r\n        \"name\": \"Golduck\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Golduck\",\r\n                \"description\": \"Golduck is a Water type Pokémon introduced in Generation 1. It is known as the Duck Pokémon.\",\r\n                \"image\": \"images/golduck.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Duck Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 76.6,\r\n                \"abilities\": [\r\n                    \"Damp\",\r\n                    \"Cloud Nine\",\r\n                    \"Swift Swim\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 80,\r\n                    \"attack\": 82,\r\n                    \"defense\": 78,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"psyduck\",\r\n                    \"golduck\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/golduck\"\r\n    },\r\n    {\r\n        \"num\": 56,\r\n        \"name\": \"Mankey\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mankey\",\r\n                \"description\": \"Mankey is a Fighting type Pokémon introduced in Generation 1. It is known as the Pig Monkey Pokémon.\",\r\n                \"image\": \"images/mankey.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Pig Monkey Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 28,\r\n                \"abilities\": [\r\n                    \"Vital Spirit\",\r\n                    \"Anger Point\",\r\n                    \"Defiant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 40,\r\n                    \"attack\": 80,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"mankey\",\r\n                    \"primeape\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mankey\"\r\n    },\r\n    {\r\n        \"num\": 57,\r\n        \"name\": \"Primeape\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Primeape\",\r\n                \"description\": \"Primeape is a Fighting type Pokémon introduced in Generation 1. It is known as the Pig Monkey Pokémon.\",\r\n                \"image\": \"images/primeape.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Pig Monkey Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 32,\r\n                \"abilities\": [\r\n                    \"Vital Spirit\",\r\n                    \"Anger Point\",\r\n                    \"Defiant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 455,\r\n                    \"hp\": 65,\r\n                    \"attack\": 105,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"mankey\",\r\n                    \"primeape\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/primeape\"\r\n    },\r\n    {\r\n        \"num\": 58,\r\n        \"name\": \"Growlithe\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Growlithe\",\r\n                \"description\": \"Growlithe is a Fire type Pokémon introduced in Generation 1. It is known as the Puppy Pokémon.\",\r\n                \"image\": \"images/growlithe.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Puppy Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 19,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Flash Fire\",\r\n                    \"Justified\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 350,\r\n                    \"hp\": 55,\r\n                    \"attack\": 70,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"growlithe\",\r\n                    \"arcanine\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/growlithe\"\r\n    },\r\n    {\r\n        \"num\": 59,\r\n        \"name\": \"Arcanine\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Arcanine\",\r\n                \"description\": \"Arcanine is a Fire type Pokémon introduced in Generation 1. It is known as the Legendary Pokémon.\",\r\n                \"image\": \"images/arcanine.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Legendary Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 155,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Flash Fire\",\r\n                    \"Justified\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 555,\r\n                    \"hp\": 90,\r\n                    \"attack\": 110,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"growlithe\",\r\n                    \"arcanine\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/arcanine\"\r\n    },\r\n    {\r\n        \"num\": 60,\r\n        \"name\": \"Poliwag\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Poliwag\",\r\n                \"description\": \"Poliwag is a Water type Pokémon introduced in Generation 1. It is known as the Tadpole Pokémon.\",\r\n                \"image\": \"images/poliwag.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Tadpole Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 12.4,\r\n                \"abilities\": [\r\n                    \"Water Absorb\",\r\n                    \"Damp\",\r\n                    \"Swift Swim\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 40,\r\n                    \"attack\": 50,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"poliwag\",\r\n                    \"poliwhirl\",\r\n                    \"poliwrath\",\r\n                    \"politoed\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/poliwag\"\r\n    },\r\n    {\r\n        \"num\": 61,\r\n        \"name\": \"Poliwhirl\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Poliwhirl\",\r\n                \"description\": \"Poliwhirl is a Water type Pokémon introduced in Generation 1. It is known as the Tadpole Pokémon.\",\r\n                \"image\": \"images/poliwhirl.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Tadpole Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 20,\r\n                \"abilities\": [\r\n                    \"Water Absorb\",\r\n                    \"Damp\",\r\n                    \"Swift Swim\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 385,\r\n                    \"hp\": 65,\r\n                    \"attack\": 65,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"poliwag\",\r\n                    \"poliwhirl\",\r\n                    \"poliwrath\",\r\n                    \"politoed\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/poliwhirl\"\r\n    },\r\n    {\r\n        \"num\": 62,\r\n        \"name\": \"Poliwrath\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Poliwrath\",\r\n                \"description\": \"Poliwrath is a Water/Fighting type Pokémon introduced in Generation 1. It is known as the Tadpole Pokémon.\",\r\n                \"image\": \"images/poliwrath.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Tadpole Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 54,\r\n                \"abilities\": [\r\n                    \"Water Absorb\",\r\n                    \"Damp\",\r\n                    \"Swift Swim\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 510,\r\n                    \"hp\": 90,\r\n                    \"attack\": 95,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"poliwag\",\r\n                    \"poliwhirl\",\r\n                    \"poliwrath\",\r\n                    \"politoed\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/poliwrath\"\r\n    },\r\n    {\r\n        \"num\": 63,\r\n        \"name\": \"Abra\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Abra\",\r\n                \"description\": \"Abra is a Psychic type Pokémon introduced in Generation 1. It is known as the Psi Pokémon.\",\r\n                \"image\": \"images/abra.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Psi Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 19.5,\r\n                \"abilities\": [\r\n                    \"Synchronize\",\r\n                    \"Inner Focus\",\r\n                    \"Magic Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 310,\r\n                    \"hp\": 25,\r\n                    \"attack\": 20,\r\n                    \"defense\": 15,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"abra\",\r\n                    \"kadabra\",\r\n                    \"alakazam\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/abra\"\r\n    },\r\n    {\r\n        \"num\": 64,\r\n        \"name\": \"Kadabra\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kadabra\",\r\n                \"description\": \"Kadabra is a Psychic type Pokémon introduced in Generation 1. It is known as the Psi Pokémon.\",\r\n                \"image\": \"images/kadabra.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Psi Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 56.5,\r\n                \"abilities\": [\r\n                    \"Synchronize\",\r\n                    \"Inner Focus\",\r\n                    \"Magic Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 400,\r\n                    \"hp\": 40,\r\n                    \"attack\": 35,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 105\r\n                },\r\n                \"evolutions\": [\r\n                    \"abra\",\r\n                    \"kadabra\",\r\n                    \"alakazam\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kadabra\"\r\n    },\r\n    {\r\n        \"num\": 65,\r\n        \"name\": \"Alakazam\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Alakazam\",\r\n                \"description\": \"Alakazam is a Psychic type Pokémon introduced in Generation 1. It is known as the Psi Pokémon.\\nAlakazam has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/alakazam.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Psi Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 48,\r\n                \"abilities\": [\r\n                    \"Synchronize\",\r\n                    \"Inner Focus\",\r\n                    \"Magic Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 55,\r\n                    \"attack\": 50,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 135,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 120\r\n                },\r\n                \"evolutions\": [\r\n                    \"abra\",\r\n                    \"kadabra\",\r\n                    \"alakazam\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Alakazam\",\r\n                \"description\": \"Alakazam is a Psychic type Pokémon introduced in Generation 1. It is known as the Psi Pokémon.\\nAlakazam has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/alakazam-mega.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Psi Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 48,\r\n                \"abilities\": [\r\n                    \"Trace\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 55,\r\n                    \"attack\": 50,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 175,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 150\r\n                },\r\n                \"evolutions\": [\r\n                    \"abra\",\r\n                    \"kadabra\",\r\n                    \"alakazam\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/alakazam\"\r\n    },\r\n    {\r\n        \"num\": 66,\r\n        \"name\": \"Machop\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Machop\",\r\n                \"description\": \"Machop is a Fighting type Pokémon introduced in Generation 1. It is known as the Superpower Pokémon.\",\r\n                \"image\": \"images/machop.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Superpower Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 19.5,\r\n                \"abilities\": [\r\n                    \"Guts\",\r\n                    \"No Guard\",\r\n                    \"Steadfast\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 70,\r\n                    \"attack\": 80,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"machop\",\r\n                    \"machoke\",\r\n                    \"machamp\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/machop\"\r\n    },\r\n    {\r\n        \"num\": 67,\r\n        \"name\": \"Machoke\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Machoke\",\r\n                \"description\": \"Machoke is a Fighting type Pokémon introduced in Generation 1. It is known as the Superpower Pokémon.\",\r\n                \"image\": \"images/machoke.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Superpower Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 70.5,\r\n                \"abilities\": [\r\n                    \"Guts\",\r\n                    \"No Guard\",\r\n                    \"Steadfast\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 80,\r\n                    \"attack\": 100,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"machop\",\r\n                    \"machoke\",\r\n                    \"machamp\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/machoke\"\r\n    },\r\n    {\r\n        \"num\": 68,\r\n        \"name\": \"Machamp\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Machamp\",\r\n                \"description\": \"Machamp is a Fighting type Pokémon introduced in Generation 1. It is known as the Superpower Pokémon.\",\r\n                \"image\": \"images/machamp.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Superpower Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 130,\r\n                \"abilities\": [\r\n                    \"Guts\",\r\n                    \"No Guard\",\r\n                    \"Steadfast\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 505,\r\n                    \"hp\": 90,\r\n                    \"attack\": 130,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"machop\",\r\n                    \"machoke\",\r\n                    \"machamp\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/machamp\"\r\n    },\r\n    {\r\n        \"num\": 69,\r\n        \"name\": \"Bellsprout\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bellsprout\",\r\n                \"description\": \"Bellsprout is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Flower Pokémon.\",\r\n                \"image\": \"images/bellsprout.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Flower Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 4,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Gluttony\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 50,\r\n                    \"attack\": 75,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"bellsprout\",\r\n                    \"weepinbell\",\r\n                    \"victreebel\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bellsprout\"\r\n    },\r\n    {\r\n        \"num\": 70,\r\n        \"name\": \"Weepinbell\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Weepinbell\",\r\n                \"description\": \"Weepinbell is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Flycatcher Pokémon.\",\r\n                \"image\": \"images/weepinbell.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Flycatcher Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 6.4,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Gluttony\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 390,\r\n                    \"hp\": 65,\r\n                    \"attack\": 90,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"bellsprout\",\r\n                    \"weepinbell\",\r\n                    \"victreebel\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/weepinbell\"\r\n    },\r\n    {\r\n        \"num\": 71,\r\n        \"name\": \"Victreebel\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Victreebel\",\r\n                \"description\": \"Victreebel is a Grass/Poison type Pokémon introduced in Generation 1. It is known as the Flycatcher Pokémon.\",\r\n                \"image\": \"images/victreebel.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Flycatcher Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 15.5,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Gluttony\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 80,\r\n                    \"attack\": 105,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"bellsprout\",\r\n                    \"weepinbell\",\r\n                    \"victreebel\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/victreebel\"\r\n    },\r\n    {\r\n        \"num\": 72,\r\n        \"name\": \"Tentacool\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tentacool\",\r\n                \"description\": \"Tentacool is a Water/Poison type Pokémon introduced in Generation 1. It is known as the Jellyfish Pokémon.\",\r\n                \"image\": \"images/tentacool.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Jellyfish Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 45.5,\r\n                \"abilities\": [\r\n                    \"Clear Body\",\r\n                    \"Liquid Ooze\",\r\n                    \"Rain Dish\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 335,\r\n                    \"hp\": 40,\r\n                    \"attack\": 40,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"tentacool\",\r\n                    \"tentacruel\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tentacool\"\r\n    },\r\n    {\r\n        \"num\": 73,\r\n        \"name\": \"Tentacruel\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tentacruel\",\r\n                \"description\": \"Tentacruel is a Water/Poison type Pokémon introduced in Generation 1. It is known as the Jellyfish Pokémon.\",\r\n                \"image\": \"images/tentacruel.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Jellyfish Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 55,\r\n                \"abilities\": [\r\n                    \"Clear Body\",\r\n                    \"Liquid Ooze\",\r\n                    \"Rain Dish\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 515,\r\n                    \"hp\": 80,\r\n                    \"attack\": 70,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 120,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"tentacool\",\r\n                    \"tentacruel\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tentacruel\"\r\n    },\r\n    {\r\n        \"num\": 74,\r\n        \"name\": \"Geodude\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Geodude\",\r\n                \"description\": \"Geodude is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Rock Pokémon.\",\r\n                \"image\": \"images/geodude.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Rock Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 20,\r\n                \"abilities\": [\r\n                    \"Rock Head\",\r\n                    \"Sturdy\",\r\n                    \"Sand Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 40,\r\n                    \"attack\": 80,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"geodude\",\r\n                    \"graveler\",\r\n                    \"golem\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Geodude\",\r\n                \"description\": \"Geodude is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Rock Pokémon.\",\r\n                \"image\": \"images/geodude-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Rock Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 20.3,\r\n                \"abilities\": [\r\n                    \"Magnet Pull\",\r\n                    \"Sturdy\",\r\n                    \"Galvanize\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 40,\r\n                    \"attack\": 80,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"geodude\",\r\n                    \"graveler\",\r\n                    \"golem\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/geodude\"\r\n    },\r\n    {\r\n        \"num\": 75,\r\n        \"name\": \"Graveler\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Graveler\",\r\n                \"description\": \"Graveler is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Rock Pokémon.\",\r\n                \"image\": \"images/graveler.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Rock Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 105,\r\n                \"abilities\": [\r\n                    \"Rock Head\",\r\n                    \"Sturdy\",\r\n                    \"Sand Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 390,\r\n                    \"hp\": 55,\r\n                    \"attack\": 95,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"geodude\",\r\n                    \"graveler\",\r\n                    \"golem\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Graveler\",\r\n                \"description\": \"Graveler is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Rock Pokémon.\",\r\n                \"image\": \"images/graveler-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Rock Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 110,\r\n                \"abilities\": [\r\n                    \"Magnet Pull\",\r\n                    \"Sturdy\",\r\n                    \"Galvanize\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 390,\r\n                    \"hp\": 55,\r\n                    \"attack\": 95,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"geodude\",\r\n                    \"graveler\",\r\n                    \"golem\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/graveler\"\r\n    },\r\n    {\r\n        \"num\": 76,\r\n        \"name\": \"Golem\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Golem\",\r\n                \"description\": \"Golem is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Megaton Pokémon.\",\r\n                \"image\": \"images/golem.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Megaton Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 300,\r\n                \"abilities\": [\r\n                    \"Rock Head\",\r\n                    \"Sturdy\",\r\n                    \"Sand Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 80,\r\n                    \"attack\": 120,\r\n                    \"defense\": 130,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"geodude\",\r\n                    \"graveler\",\r\n                    \"golem\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Golem\",\r\n                \"description\": \"Golem is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Megaton Pokémon.\",\r\n                \"image\": \"images/golem-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Megaton Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 316,\r\n                \"abilities\": [\r\n                    \"Magnet Pull\",\r\n                    \"Sturdy\",\r\n                    \"Galvanize\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 80,\r\n                    \"attack\": 120,\r\n                    \"defense\": 130,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"geodude\",\r\n                    \"graveler\",\r\n                    \"golem\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/golem\"\r\n    },\r\n    {\r\n        \"num\": 77,\r\n        \"name\": \"Ponyta\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ponyta\",\r\n                \"description\": \"Ponyta is a Fire type Pokémon introduced in Generation 1. It is known as the Fire Horse Pokémon.\",\r\n                \"image\": \"images/ponyta.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Fire Horse Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 30,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Flash Fire\",\r\n                    \"Flame Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 410,\r\n                    \"hp\": 50,\r\n                    \"attack\": 85,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"ponyta\",\r\n                    \"rapidash\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ponyta\"\r\n    },\r\n    {\r\n        \"num\": 78,\r\n        \"name\": \"Rapidash\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Rapidash\",\r\n                \"description\": \"Rapidash is a Fire type Pokémon introduced in Generation 1. It is known as the Fire Horse Pokémon.\",\r\n                \"image\": \"images/rapidash.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Fire Horse Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 95,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Flash Fire\",\r\n                    \"Flame Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 65,\r\n                    \"attack\": 100,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 105\r\n                },\r\n                \"evolutions\": [\r\n                    \"ponyta\",\r\n                    \"rapidash\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/rapidash\"\r\n    },\r\n    {\r\n        \"num\": 79,\r\n        \"name\": \"Slowpoke\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Slowpoke\",\r\n                \"description\": \"Slowpoke is a Water/Psychic type Pokémon introduced in Generation 1. It is known as the Dopey Pokémon.\",\r\n                \"image\": \"images/slowpoke.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Dopey Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 36,\r\n                \"abilities\": [\r\n                    \"Oblivious\",\r\n                    \"Own Tempo\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 315,\r\n                    \"hp\": 90,\r\n                    \"attack\": 65,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 15\r\n                },\r\n                \"evolutions\": [\r\n                    \"slowpoke\",\r\n                    \"slowbro\",\r\n                    \"slowking\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/slowpoke\"\r\n    },\r\n    {\r\n        \"num\": 80,\r\n        \"name\": \"Slowbro\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Slowbro\",\r\n                \"description\": \"Slowbro is a Water/Psychic type Pokémon introduced in Generation 1. It is known as the Hermit Crab Pokémon.\\nSlowbro has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/slowbro.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Hermit Crab Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 78.5,\r\n                \"abilities\": [\r\n                    \"Oblivious\",\r\n                    \"Own Tempo\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 95,\r\n                    \"attack\": 75,\r\n                    \"defense\": 110,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"slowpoke\",\r\n                    \"slowbro\",\r\n                    \"slowking\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Slowbro\",\r\n                \"description\": \"Slowbro is a Water/Psychic type Pokémon introduced in Generation 1. It is known as the Hermit Crab Pokémon.\\nSlowbro has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/slowbro-mega.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Hermit Crab Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 120,\r\n                \"abilities\": [\r\n                    \"Shell Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 590,\r\n                    \"hp\": 95,\r\n                    \"attack\": 75,\r\n                    \"defense\": 180,\r\n                    \"speedAttack\": 130,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"slowpoke\",\r\n                    \"slowbro\",\r\n                    \"slowking\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/slowbro\"\r\n    },\r\n    {\r\n        \"num\": 81,\r\n        \"name\": \"Magnemite\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Magnemite\",\r\n                \"description\": \"Magnemite is an Electric/Steel type Pokémon introduced in Generation 1. It is known as the Magnet Pokémon.\",\r\n                \"image\": \"images/magnemite.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Magnet Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 6,\r\n                \"abilities\": [\r\n                    \"Magnet Pull\",\r\n                    \"Sturdy\",\r\n                    \"Analytic\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 325,\r\n                    \"hp\": 25,\r\n                    \"attack\": 35,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"magnemite\",\r\n                    \"magneton\",\r\n                    \"magnezone\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/magnemite\"\r\n    },\r\n    {\r\n        \"num\": 82,\r\n        \"name\": \"Magneton\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Magneton\",\r\n                \"description\": \"Magneton is an Electric/Steel type Pokémon introduced in Generation 1. It is known as the Magnet Pokémon.\",\r\n                \"image\": \"images/magneton.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Magnet Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 60,\r\n                \"abilities\": [\r\n                    \"Magnet Pull\",\r\n                    \"Sturdy\",\r\n                    \"Analytic\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 465,\r\n                    \"hp\": 50,\r\n                    \"attack\": 60,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"magnemite\",\r\n                    \"magneton\",\r\n                    \"magnezone\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/magneton\"\r\n    },\r\n    {\r\n        \"num\": 83,\r\n        \"name\": \"Farfetch'd\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Farfetch'd\",\r\n                \"description\": \"Farfetch'd is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Wild Duck Pokémon.\",\r\n                \"image\": \"images/farfetchd.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Wild Duck Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 15,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Inner Focus\",\r\n                    \"Defiant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 377,\r\n                    \"hp\": 52,\r\n                    \"attack\": 90,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 58,\r\n                    \"speedDefense\": 62,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/farfetchd\"\r\n    },\r\n    {\r\n        \"num\": 84,\r\n        \"name\": \"Doduo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Doduo\",\r\n                \"description\": \"Doduo is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Twin Bird Pokémon.\",\r\n                \"image\": \"images/doduo.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Twin Bird Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 39.2,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Early Bird\",\r\n                    \"Tangled Feet\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 310,\r\n                    \"hp\": 35,\r\n                    \"attack\": 85,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": [\r\n                    \"doduo\",\r\n                    \"dodrio\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/doduo\"\r\n    },\r\n    {\r\n        \"num\": 85,\r\n        \"name\": \"Dodrio\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dodrio\",\r\n                \"description\": \"Dodrio is a Normal/Flying type Pokémon introduced in Generation 1. It is known as the Triple Bird Pokémon.\",\r\n                \"image\": \"images/dodrio.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Triple Bird Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 85.2,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Early Bird\",\r\n                    \"Tangled Feet\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 470,\r\n                    \"hp\": 60,\r\n                    \"attack\": 110,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": [\r\n                    \"doduo\",\r\n                    \"dodrio\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dodrio\"\r\n    },\r\n    {\r\n        \"num\": 86,\r\n        \"name\": \"Seel\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Seel\",\r\n                \"description\": \"Seel is a Water type Pokémon introduced in Generation 1. It is known as the Sea Lion Pokémon.\",\r\n                \"image\": \"images/seel.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Sea Lion Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 90,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Hydration\",\r\n                    \"Ice Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 325,\r\n                    \"hp\": 65,\r\n                    \"attack\": 45,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"seel\",\r\n                    \"dewgong\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/seel\"\r\n    },\r\n    {\r\n        \"num\": 87,\r\n        \"name\": \"Dewgong\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dewgong\",\r\n                \"description\": \"Dewgong is a Water/Ice type Pokémon introduced in Generation 1. It is known as the Sea Lion Pokémon.\",\r\n                \"image\": \"images/dewgong.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Sea Lion Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 120,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Hydration\",\r\n                    \"Ice Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 475,\r\n                    \"hp\": 90,\r\n                    \"attack\": 70,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"seel\",\r\n                    \"dewgong\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dewgong\"\r\n    },\r\n    {\r\n        \"num\": 88,\r\n        \"name\": \"Grimer\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Grimer\",\r\n                \"description\": \"Grimer is a Poison type Pokémon introduced in Generation 1. It is known as the Sludge Pokémon.\\nGrimer has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/grimer.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Sludge Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 30,\r\n                \"abilities\": [\r\n                    \"Stench\",\r\n                    \"Sticky Hold\",\r\n                    \"Poison Touch\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 325,\r\n                    \"hp\": 80,\r\n                    \"attack\": 80,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 25\r\n                },\r\n                \"evolutions\": [\r\n                    \"grimer\",\r\n                    \"muk\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Grimer\",\r\n                \"description\": \"Grimer is a Poison type Pokémon introduced in Generation 1. It is known as the Sludge Pokémon.\\nGrimer has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/grimer-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Sludge Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 42,\r\n                \"abilities\": [\r\n                    \"Poison Touch\",\r\n                    \"Gluttony\",\r\n                    \"Power of Alchemy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 325,\r\n                    \"hp\": 80,\r\n                    \"attack\": 80,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 25\r\n                },\r\n                \"evolutions\": [\r\n                    \"grimer\",\r\n                    \"muk\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/grimer\"\r\n    },\r\n    {\r\n        \"num\": 89,\r\n        \"name\": \"Muk\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Muk\",\r\n                \"description\": \"Muk is a Poison type Pokémon introduced in Generation 1. It is known as the Sludge Pokémon.\\nMuk has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/muk.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Sludge Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 30,\r\n                \"abilities\": [\r\n                    \"Stench\",\r\n                    \"Sticky Hold\",\r\n                    \"Poison Touch\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 105,\r\n                    \"attack\": 105,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"grimer\",\r\n                    \"muk\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Muk\",\r\n                \"description\": \"Muk is a Poison type Pokémon introduced in Generation 1. It is known as the Sludge Pokémon.\\nMuk has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/muk-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Sludge Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 52,\r\n                \"abilities\": [\r\n                    \"Poison Touch\",\r\n                    \"Gluttony\",\r\n                    \"Power of Alchemy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 105,\r\n                    \"attack\": 105,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"grimer\",\r\n                    \"muk\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/muk\"\r\n    },\r\n    {\r\n        \"num\": 90,\r\n        \"name\": \"Shellder\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Shellder\",\r\n                \"description\": \"Shellder is a Water type Pokémon introduced in Generation 1. It is known as the Bivalve Pokémon.\",\r\n                \"image\": \"images/shellder.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Bivalve Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 4,\r\n                \"abilities\": [\r\n                    \"Shell Armor\",\r\n                    \"Skill Link\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 30,\r\n                    \"attack\": 65,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 25,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"shellder\",\r\n                    \"cloyster\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/shellder\"\r\n    },\r\n    {\r\n        \"num\": 91,\r\n        \"name\": \"Cloyster\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cloyster\",\r\n                \"description\": \"Cloyster is a Water/Ice type Pokémon introduced in Generation 1. It is known as the Bivalve Pokémon.\",\r\n                \"image\": \"images/cloyster.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Bivalve Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 132.5,\r\n                \"abilities\": [\r\n                    \"Shell Armor\",\r\n                    \"Skill Link\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 50,\r\n                    \"attack\": 95,\r\n                    \"defense\": 180,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"shellder\",\r\n                    \"cloyster\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cloyster\"\r\n    },\r\n    {\r\n        \"num\": 92,\r\n        \"name\": \"Gastly\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gastly\",\r\n                \"description\": \"Gastly is a Ghost/Poison type Pokémon introduced in Generation 1. It is known as the Gas Pokémon.\",\r\n                \"image\": \"images/gastly.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Gas Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 0.1,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 310,\r\n                    \"hp\": 30,\r\n                    \"attack\": 35,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"gastly\",\r\n                    \"haunter\",\r\n                    \"gengar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gastly\"\r\n    },\r\n    {\r\n        \"num\": 93,\r\n        \"name\": \"Haunter\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Haunter\",\r\n                \"description\": \"Haunter is a Ghost/Poison type Pokémon introduced in Generation 1. It is known as the Gas Pokémon.\",\r\n                \"image\": \"images/haunter.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Gas Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 0.1,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 45,\r\n                    \"attack\": 50,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 115,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"gastly\",\r\n                    \"haunter\",\r\n                    \"gengar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/haunter\"\r\n    },\r\n    {\r\n        \"num\": 94,\r\n        \"name\": \"Gengar\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gengar\",\r\n                \"description\": \"Gengar is a Ghost/Poison type Pokémon introduced in Generation 1. It is known as the Shadow Pokémon.\\nGengar has a Mega Evolution, available from X & Y onwards.\\nPrior to Generation 7, Gengar had the Levitate ability.\",\r\n                \"image\": \"images/gengar.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Shadow Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 40.5,\r\n                \"abilities\": [\r\n                    \"Cursed Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 60,\r\n                    \"attack\": 65,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 130,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": [\r\n                    \"gastly\",\r\n                    \"haunter\",\r\n                    \"gengar\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Gengar\",\r\n                \"description\": \"Gengar is a Ghost/Poison type Pokémon introduced in Generation 1. It is known as the Shadow Pokémon.\\nGengar has a Mega Evolution, available from X & Y onwards.\\nPrior to Generation 7, Gengar had the Levitate ability.\",\r\n                \"image\": \"images/gengar-mega.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Shadow Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 40.5,\r\n                \"abilities\": [\r\n                    \"Shadow Tag\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 60,\r\n                    \"attack\": 65,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 170,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 130\r\n                },\r\n                \"evolutions\": [\r\n                    \"gastly\",\r\n                    \"haunter\",\r\n                    \"gengar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gengar\"\r\n    },\r\n    {\r\n        \"num\": 95,\r\n        \"name\": \"Onix\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Onix\",\r\n                \"description\": \"Onix is a Rock/Ground type Pokémon introduced in Generation 1. It is known as the Rock Snake Pokémon.\",\r\n                \"image\": \"images/onix.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Rock Snake Pokémon\",\r\n                \"height\": 8.8,\r\n                \"weight\": 210,\r\n                \"abilities\": [\r\n                    \"Rock Head\",\r\n                    \"Sturdy\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 385,\r\n                    \"hp\": 35,\r\n                    \"attack\": 45,\r\n                    \"defense\": 160,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"onix\",\r\n                    \"steelix\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/onix\"\r\n    },\r\n    {\r\n        \"num\": 96,\r\n        \"name\": \"Drowzee\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Drowzee\",\r\n                \"description\": \"Drowzee is a Psychic type Pokémon introduced in Generation 1. It is known as the Hypnosis Pokémon.\",\r\n                \"image\": \"images/drowzee.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Hypnosis Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 32.4,\r\n                \"abilities\": [\r\n                    \"Insomnia\",\r\n                    \"Forewarn\",\r\n                    \"Inner Focus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 328,\r\n                    \"hp\": 60,\r\n                    \"attack\": 48,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 43,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 42\r\n                },\r\n                \"evolutions\": [\r\n                    \"drowzee\",\r\n                    \"hypno\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/drowzee\"\r\n    },\r\n    {\r\n        \"num\": 97,\r\n        \"name\": \"Hypno\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Hypno\",\r\n                \"description\": \"Hypno is a Psychic type Pokémon introduced in Generation 1. It is known as the Hypnosis Pokémon.\",\r\n                \"image\": \"images/hypno.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Hypnosis Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 75.6,\r\n                \"abilities\": [\r\n                    \"Insomnia\",\r\n                    \"Forewarn\",\r\n                    \"Inner Focus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 483,\r\n                    \"hp\": 85,\r\n                    \"attack\": 73,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 73,\r\n                    \"speedDefense\": 115,\r\n                    \"speed\": 67\r\n                },\r\n                \"evolutions\": [\r\n                    \"drowzee\",\r\n                    \"hypno\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/hypno\"\r\n    },\r\n    {\r\n        \"num\": 98,\r\n        \"name\": \"Krabby\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Krabby\",\r\n                \"description\": \"Krabby is a Water type Pokémon introduced in Generation 1. It is known as the River Crab Pokémon.\",\r\n                \"image\": \"images/krabby.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"River Crab Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 6.5,\r\n                \"abilities\": [\r\n                    \"Hyper Cutter\",\r\n                    \"Shell Armor\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 325,\r\n                    \"hp\": 30,\r\n                    \"attack\": 105,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 25,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"krabby\",\r\n                    \"kingler\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/krabby\"\r\n    },\r\n    {\r\n        \"num\": 99,\r\n        \"name\": \"Kingler\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kingler\",\r\n                \"description\": \"Kingler is a Water type Pokémon introduced in Generation 1. It is known as the Pincer Pokémon.\",\r\n                \"image\": \"images/kingler.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Pincer Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 60,\r\n                \"abilities\": [\r\n                    \"Hyper Cutter\",\r\n                    \"Shell Armor\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 475,\r\n                    \"hp\": 55,\r\n                    \"attack\": 130,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": [\r\n                    \"krabby\",\r\n                    \"kingler\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kingler\"\r\n    },\r\n    {\r\n        \"num\": 100,\r\n        \"name\": \"Voltorb\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Voltorb\",\r\n                \"description\": \"Voltorb is an Electric type Pokémon introduced in Generation 1. It is known as the Ball Pokémon.\",\r\n                \"image\": \"images/voltorb.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Ball Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 10.4,\r\n                \"abilities\": [\r\n                    \"Soundproof\",\r\n                    \"Static\",\r\n                    \"Aftermath\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 40,\r\n                    \"attack\": 30,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"voltorb\",\r\n                    \"electrode\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/voltorb\"\r\n    },\r\n    {\r\n        \"num\": 101,\r\n        \"name\": \"Electrode\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Electrode\",\r\n                \"description\": \"Electrode is an Electric type Pokémon introduced in Generation 1. It is known as the Ball Pokémon.\",\r\n                \"image\": \"images/electrode.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Ball Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 66.6,\r\n                \"abilities\": [\r\n                    \"Soundproof\",\r\n                    \"Static\",\r\n                    \"Aftermath\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 60,\r\n                    \"attack\": 50,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 150\r\n                },\r\n                \"evolutions\": [\r\n                    \"voltorb\",\r\n                    \"electrode\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/electrode\"\r\n    },\r\n    {\r\n        \"num\": 102,\r\n        \"name\": \"Exeggcute\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Exeggcute\",\r\n                \"description\": \"Exeggcute is a Grass/Psychic type Pokémon introduced in Generation 1. It is known as the Egg Pokémon.\",\r\n                \"image\": \"images/exeggcute.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Egg Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 2.5,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Harvest\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 325,\r\n                    \"hp\": 60,\r\n                    \"attack\": 40,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"exeggcute\",\r\n                    \"exeggutor\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/exeggcute\"\r\n    },\r\n    {\r\n        \"num\": 103,\r\n        \"name\": \"Exeggutor\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Exeggutor\",\r\n                \"description\": \"Exeggutor is a Grass/Psychic type Pokémon introduced in Generation 1. It is known as the Coconut Pokémon.\\nExeggutor has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/exeggutor.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Coconut Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 120,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Harvest\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 95,\r\n                    \"attack\": 95,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"exeggcute\",\r\n                    \"exeggutor\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Exeggutor\",\r\n                \"description\": \"Exeggutor is a Grass/Psychic type Pokémon introduced in Generation 1. It is known as the Coconut Pokémon.\\nExeggutor has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/exeggutor-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Coconut Pokémon\",\r\n                \"height\": 10.9,\r\n                \"weight\": 415.6,\r\n                \"abilities\": [\r\n                    \"Frisk\",\r\n                    \"Harvest\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 95,\r\n                    \"attack\": 105,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"exeggcute\",\r\n                    \"exeggutor\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/exeggutor\"\r\n    },\r\n    {\r\n        \"num\": 104,\r\n        \"name\": \"Cubone\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cubone\",\r\n                \"description\": \"Cubone is a Ground type Pokémon introduced in Generation 1. It is known as the Lonely Pokémon.\",\r\n                \"image\": \"images/cubone.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Lonely Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 6.5,\r\n                \"abilities\": [\r\n                    \"Rock Head\",\r\n                    \"Lightning Rod\",\r\n                    \"Battle Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 320,\r\n                    \"hp\": 50,\r\n                    \"attack\": 50,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"cubone\",\r\n                    \"marowak\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cubone\"\r\n    },\r\n    {\r\n        \"num\": 105,\r\n        \"name\": \"Marowak\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Marowak\",\r\n                \"description\": \"Marowak is a Ground type Pokémon introduced in Generation 1. It is known as the Bone Keeper Pokémon.\\nMarowak has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/marowak.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Bone Keeper Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 45,\r\n                \"abilities\": [\r\n                    \"Rock Head\",\r\n                    \"Lightning Rod\",\r\n                    \"Battle Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 425,\r\n                    \"hp\": 60,\r\n                    \"attack\": 80,\r\n                    \"defense\": 110,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"cubone\",\r\n                    \"marowak\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Alolan Marowak\",\r\n                \"description\": \"Marowak is a Ground type Pokémon introduced in Generation 1. It is known as the Bone Keeper Pokémon.\\nMarowak has a new Alolan form introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/marowak-alolan.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Bone Keeper Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 34,\r\n                \"abilities\": [\r\n                    \"Cursed Body\",\r\n                    \"Lightning Rod\",\r\n                    \"Rock Head\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 425,\r\n                    \"hp\": 60,\r\n                    \"attack\": 80,\r\n                    \"defense\": 110,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"cubone\",\r\n                    \"marowak\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/marowak\"\r\n    },\r\n    {\r\n        \"num\": 106,\r\n        \"name\": \"Hitmonlee\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Hitmonlee\",\r\n                \"description\": \"Hitmonlee is a Fighting type Pokémon introduced in Generation 1. It is known as the Kicking Pokémon.\",\r\n                \"image\": \"images/hitmonlee.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Kicking Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 49.8,\r\n                \"abilities\": [\r\n                    \"Limber\",\r\n                    \"Reckless\",\r\n                    \"Unburden\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 455,\r\n                    \"hp\": 50,\r\n                    \"attack\": 120,\r\n                    \"defense\": 53,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 87\r\n                },\r\n                \"evolutions\": [\r\n                    \"tyrogue\",\r\n                    \"hitmonlee\",\r\n                    \"hitmonchan\",\r\n                    \"hitmontop\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/hitmonlee\"\r\n    },\r\n    {\r\n        \"num\": 107,\r\n        \"name\": \"Hitmonchan\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Hitmonchan\",\r\n                \"description\": \"Hitmonchan is a Fighting type Pokémon introduced in Generation 1. It is known as the Punching Pokémon.\",\r\n                \"image\": \"images/hitmonchan.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Punching Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 50.2,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Iron Fist\",\r\n                    \"Inner Focus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 455,\r\n                    \"hp\": 50,\r\n                    \"attack\": 105,\r\n                    \"defense\": 79,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 76\r\n                },\r\n                \"evolutions\": [\r\n                    \"tyrogue\",\r\n                    \"hitmonlee\",\r\n                    \"hitmonchan\",\r\n                    \"hitmontop\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/hitmonchan\"\r\n    },\r\n    {\r\n        \"num\": 108,\r\n        \"name\": \"Lickitung\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lickitung\",\r\n                \"description\": \"Lickitung is a Normal type Pokémon introduced in Generation 1. It is known as the Licking Pokémon.\",\r\n                \"image\": \"images/lickitung.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Licking Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 65.5,\r\n                \"abilities\": [\r\n                    \"Own Tempo\",\r\n                    \"Oblivious\",\r\n                    \"Cloud Nine\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 385,\r\n                    \"hp\": 90,\r\n                    \"attack\": 55,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"lickitung\",\r\n                    \"lickilicky\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lickitung\"\r\n    },\r\n    {\r\n        \"num\": 109,\r\n        \"name\": \"Koffing\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Koffing\",\r\n                \"description\": \"Koffing is a Poison type Pokémon introduced in Generation 1. It is known as the Poison Gas Pokémon.\",\r\n                \"image\": \"images/koffing.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Poison Gas Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 1,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 340,\r\n                    \"hp\": 40,\r\n                    \"attack\": 65,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"koffing\",\r\n                    \"weezing\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/koffing\"\r\n    },\r\n    {\r\n        \"num\": 110,\r\n        \"name\": \"Weezing\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Weezing\",\r\n                \"description\": \"Weezing is a Poison type Pokémon introduced in Generation 1. It is known as the Poison Gas Pokémon.\",\r\n                \"image\": \"images/weezing.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Poison Gas Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 9.5,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 65,\r\n                    \"attack\": 90,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"koffing\",\r\n                    \"weezing\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/weezing\"\r\n    },\r\n    {\r\n        \"num\": 111,\r\n        \"name\": \"Rhyhorn\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Rhyhorn\",\r\n                \"description\": \"Rhyhorn is a Ground/Rock type Pokémon introduced in Generation 1. It is known as the Spikes Pokémon.\",\r\n                \"image\": \"images/rhyhorn.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Spikes Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 115,\r\n                \"abilities\": [\r\n                    \"Lightning Rod\",\r\n                    \"Rock Head\",\r\n                    \"Reckless\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 345,\r\n                    \"hp\": 80,\r\n                    \"attack\": 85,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 25\r\n                },\r\n                \"evolutions\": [\r\n                    \"rhyhorn\",\r\n                    \"rhydon\",\r\n                    \"rhyperior\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/rhyhorn\"\r\n    },\r\n    {\r\n        \"num\": 112,\r\n        \"name\": \"Rhydon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Rhydon\",\r\n                \"description\": \"Rhydon is a Ground/Rock type Pokémon introduced in Generation 1. It is known as the Drill Pokémon.\",\r\n                \"image\": \"images/rhydon.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Drill Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 120,\r\n                \"abilities\": [\r\n                    \"Lightning Rod\",\r\n                    \"Rock Head\",\r\n                    \"Reckless\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 105,\r\n                    \"attack\": 130,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"rhyhorn\",\r\n                    \"rhydon\",\r\n                    \"rhyperior\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/rhydon\"\r\n    },\r\n    {\r\n        \"num\": 113,\r\n        \"name\": \"Chansey\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Chansey\",\r\n                \"description\": \"Chansey is a Normal type Pokémon introduced in Generation 1. It is known as the Egg Pokémon.\",\r\n                \"image\": \"images/chansey.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Egg Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 34.6,\r\n                \"abilities\": [\r\n                    \"Natural Cure\",\r\n                    \"Serene Grace\",\r\n                    \"Healer\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 450,\r\n                    \"hp\": 250,\r\n                    \"attack\": 5,\r\n                    \"defense\": 5,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"happiny\",\r\n                    \"chansey\",\r\n                    \"blissey\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/chansey\"\r\n    },\r\n    {\r\n        \"num\": 114,\r\n        \"name\": \"Tangela\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tangela\",\r\n                \"description\": \"Tangela is a Grass type Pokémon introduced in Generation 1. It is known as the Vine Pokémon.\",\r\n                \"image\": \"images/tangela.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Vine Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 35,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Leaf Guard\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 435,\r\n                    \"hp\": 65,\r\n                    \"attack\": 55,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"tangela\",\r\n                    \"tangrowth\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tangela\"\r\n    },\r\n    {\r\n        \"num\": 115,\r\n        \"name\": \"Kangaskhan\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kangaskhan\",\r\n                \"description\": \"Kangaskhan is a Normal type Pokémon introduced in Generation 1. It is known as the Parent Pokémon.\\nKangaskhan has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/kangaskhan.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Parent Pokémon\",\r\n                \"height\": 2.2,\r\n                \"weight\": 80,\r\n                \"abilities\": [\r\n                    \"Early Bird\",\r\n                    \"Scrappy\",\r\n                    \"Inner Focus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 105,\r\n                    \"attack\": 95,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Kangaskhan\",\r\n                \"description\": \"Kangaskhan is a Normal type Pokémon introduced in Generation 1. It is known as the Parent Pokémon.\\nKangaskhan has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/kangaskhan-mega.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Parent Pokémon\",\r\n                \"height\": 2.2,\r\n                \"weight\": 100,\r\n                \"abilities\": [\r\n                    \"Parental Bond\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 590,\r\n                    \"hp\": 105,\r\n                    \"attack\": 125,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kangaskhan\"\r\n    },\r\n    {\r\n        \"num\": 116,\r\n        \"name\": \"Horsea\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Horsea\",\r\n                \"description\": \"Horsea is a Water type Pokémon introduced in Generation 1. It is known as the Dragon Pokémon.\",\r\n                \"image\": \"images/horsea.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Dragon Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 8,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Sniper\",\r\n                    \"Damp\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 295,\r\n                    \"hp\": 30,\r\n                    \"attack\": 40,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 25,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"horsea\",\r\n                    \"seadra\",\r\n                    \"kingdra\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/horsea\"\r\n    },\r\n    {\r\n        \"num\": 117,\r\n        \"name\": \"Seadra\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Seadra\",\r\n                \"description\": \"Seadra is a Water type Pokémon introduced in Generation 1. It is known as the Dragon Pokémon.\",\r\n                \"image\": \"images/seadra.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Dragon Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 25,\r\n                \"abilities\": [\r\n                    \"Poison Point\",\r\n                    \"Sniper\",\r\n                    \"Damp\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 440,\r\n                    \"hp\": 55,\r\n                    \"attack\": 65,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"horsea\",\r\n                    \"seadra\",\r\n                    \"kingdra\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/seadra\"\r\n    },\r\n    {\r\n        \"num\": 118,\r\n        \"name\": \"Goldeen\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Goldeen\",\r\n                \"description\": \"Goldeen is a Water type Pokémon introduced in Generation 1. It is known as the Goldfish Pokémon.\",\r\n                \"image\": \"images/goldeen.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Goldfish Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 15,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Water Veil\",\r\n                    \"Lightning Rod\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 320,\r\n                    \"hp\": 45,\r\n                    \"attack\": 67,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 63\r\n                },\r\n                \"evolutions\": [\r\n                    \"goldeen\",\r\n                    \"seaking\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/goldeen\"\r\n    },\r\n    {\r\n        \"num\": 119,\r\n        \"name\": \"Seaking\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Seaking\",\r\n                \"description\": \"Seaking is a Water type Pokémon introduced in Generation 1. It is known as the Goldfish Pokémon.\",\r\n                \"image\": \"images/seaking.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Goldfish Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 39,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Water Veil\",\r\n                    \"Lightning Rod\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 450,\r\n                    \"hp\": 80,\r\n                    \"attack\": 92,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 68\r\n                },\r\n                \"evolutions\": [\r\n                    \"goldeen\",\r\n                    \"seaking\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/seaking\"\r\n    },\r\n    {\r\n        \"num\": 120,\r\n        \"name\": \"Staryu\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Staryu\",\r\n                \"description\": \"Staryu is a Water type Pokémon introduced in Generation 1. It is known as the Star Shape Pokémon.\",\r\n                \"image\": \"images/staryu.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Star Shape Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 34.5,\r\n                \"abilities\": [\r\n                    \"Illuminate\",\r\n                    \"Natural Cure\",\r\n                    \"Analytic\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 340,\r\n                    \"hp\": 30,\r\n                    \"attack\": 45,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"staryu\",\r\n                    \"starmie\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/staryu\"\r\n    },\r\n    {\r\n        \"num\": 121,\r\n        \"name\": \"Starmie\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Starmie\",\r\n                \"description\": \"Starmie is a Water/Psychic type Pokémon introduced in Generation 1. It is known as the Mysterious Pokémon.\",\r\n                \"image\": \"images/starmie.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Mysterious Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 80,\r\n                \"abilities\": [\r\n                    \"Illuminate\",\r\n                    \"Natural Cure\",\r\n                    \"Analytic\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 520,\r\n                    \"hp\": 60,\r\n                    \"attack\": 75,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 115\r\n                },\r\n                \"evolutions\": [\r\n                    \"staryu\",\r\n                    \"starmie\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/starmie\"\r\n    },\r\n    {\r\n        \"num\": 122,\r\n        \"name\": \"Mr. Mime\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mr. Mime\",\r\n                \"description\": \"Mr. Mime is a Psychic/Fairy type Pokémon introduced in Generation 1. It is known as the Barrier Pokémon.\",\r\n                \"image\": \"images/mr-mime.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Barrier Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 54.5,\r\n                \"abilities\": [\r\n                    \"Soundproof\",\r\n                    \"Filter\",\r\n                    \"Technician\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 460,\r\n                    \"hp\": 40,\r\n                    \"attack\": 45,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 120,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"mime jr.\",\r\n                    \"mr. mime\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mr-mime\"\r\n    },\r\n    {\r\n        \"num\": 123,\r\n        \"name\": \"Scyther\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Scyther\",\r\n                \"description\": \"Scyther is a Bug/Flying type Pokémon introduced in Generation 1. It is known as the Mantis Pokémon.\",\r\n                \"image\": \"images/scyther.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Mantis Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 56,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Technician\",\r\n                    \"Steadfast\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 70,\r\n                    \"attack\": 110,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 105\r\n                },\r\n                \"evolutions\": [\r\n                    \"scyther\",\r\n                    \"scizor\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/scyther\"\r\n    },\r\n    {\r\n        \"num\": 124,\r\n        \"name\": \"Jynx\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Jynx\",\r\n                \"description\": \"Jynx is an Ice/Psychic type Pokémon introduced in Generation 1. It is known as the Human Shape Pokémon.\",\r\n                \"image\": \"images/jynx.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Human Shape Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 40.6,\r\n                \"abilities\": [\r\n                    \"Oblivious\",\r\n                    \"Forewarn\",\r\n                    \"Dry Skin\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 455,\r\n                    \"hp\": 65,\r\n                    \"attack\": 50,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 115,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"smoochum\",\r\n                    \"jynx\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/jynx\"\r\n    },\r\n    {\r\n        \"num\": 125,\r\n        \"name\": \"Electabuzz\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Electabuzz\",\r\n                \"description\": \"Electabuzz is an Electric type Pokémon introduced in Generation 1. It is known as the Electric Pokémon.\",\r\n                \"image\": \"images/electabuzz.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Electric Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 30,\r\n                \"abilities\": [\r\n                    \"Static\",\r\n                    \"Vital Spirit\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 65,\r\n                    \"attack\": 83,\r\n                    \"defense\": 57,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 105\r\n                },\r\n                \"evolutions\": [\r\n                    \"elekid\",\r\n                    \"electabuzz\",\r\n                    \"electivire\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/electabuzz\"\r\n    },\r\n    {\r\n        \"num\": 126,\r\n        \"name\": \"Magmar\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Magmar\",\r\n                \"description\": \"Magmar is a Fire type Pokémon introduced in Generation 1. It is known as the Spitfire Pokémon.\",\r\n                \"image\": \"images/magmar.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Spitfire Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 44.5,\r\n                \"abilities\": [\r\n                    \"Flame Body\",\r\n                    \"Vital Spirit\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 65,\r\n                    \"attack\": 95,\r\n                    \"defense\": 57,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 93\r\n                },\r\n                \"evolutions\": [\r\n                    \"magby\",\r\n                    \"magmar\",\r\n                    \"magmortar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/magmar\"\r\n    },\r\n    {\r\n        \"num\": 127,\r\n        \"name\": \"Pinsir\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pinsir\",\r\n                \"description\": \"Pinsir is a Bug type Pokémon introduced in Generation 1. It is known as the Stag Beetle Pokémon.\\nPinsir has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/pinsir.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Stag Beetle Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 55,\r\n                \"abilities\": [\r\n                    \"Hyper Cutter\",\r\n                    \"Mold Breaker\",\r\n                    \"Moxie\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 65,\r\n                    \"attack\": 125,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Pinsir\",\r\n                \"description\": \"Pinsir is a Bug type Pokémon introduced in Generation 1. It is known as the Stag Beetle Pokémon.\\nPinsir has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/pinsir-mega.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Stag Beetle Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 59,\r\n                \"abilities\": [\r\n                    \"Aerilate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 65,\r\n                    \"attack\": 155,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 105\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pinsir\"\r\n    },\r\n    {\r\n        \"num\": 128,\r\n        \"name\": \"Tauros\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tauros\",\r\n                \"description\": \"Tauros is a Normal type Pokémon introduced in Generation 1. It is known as the Wild Bull Pokémon.\",\r\n                \"image\": \"images/tauros.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Wild Bull Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 88.4,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Anger Point\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 75,\r\n                    \"attack\": 100,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tauros\"\r\n    },\r\n    {\r\n        \"num\": 129,\r\n        \"name\": \"Magikarp\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Magikarp\",\r\n                \"description\": \"Magikarp is a Water type Pokémon introduced in Generation 1. It is known as the Fish Pokémon.\",\r\n                \"image\": \"images/magikarp.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Fish Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 10,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Rattled\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 200,\r\n                    \"hp\": 20,\r\n                    \"attack\": 10,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 15,\r\n                    \"speedDefense\": 20,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"magikarp\",\r\n                    \"gyarados\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/magikarp\"\r\n    },\r\n    {\r\n        \"num\": 130,\r\n        \"name\": \"Gyarados\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gyarados\",\r\n                \"description\": \"Gyarados is a Water/Flying type Pokémon introduced in Generation 1. It is known as the Atrocious Pokémon.\\nGyarados has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/gyarados.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Atrocious Pokémon\",\r\n                \"height\": 6.5,\r\n                \"weight\": 235,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Moxie\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 540,\r\n                    \"hp\": 95,\r\n                    \"attack\": 125,\r\n                    \"defense\": 79,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 81\r\n                },\r\n                \"evolutions\": [\r\n                    \"magikarp\",\r\n                    \"gyarados\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Gyarados\",\r\n                \"description\": \"Gyarados is a Water/Flying type Pokémon introduced in Generation 1. It is known as the Atrocious Pokémon.\\nGyarados has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/gyarados-mega.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Atrocious Pokémon\",\r\n                \"height\": 6.5,\r\n                \"weight\": 305,\r\n                \"abilities\": [\r\n                    \"Mold Breaker\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 640,\r\n                    \"hp\": 95,\r\n                    \"attack\": 155,\r\n                    \"defense\": 109,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 130,\r\n                    \"speed\": 81\r\n                },\r\n                \"evolutions\": [\r\n                    \"magikarp\",\r\n                    \"gyarados\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gyarados\"\r\n    },\r\n    {\r\n        \"num\": 131,\r\n        \"name\": \"Lapras\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lapras\",\r\n                \"description\": \"Lapras is a Water/Ice type Pokémon introduced in Generation 1. It is known as the Transport Pokémon.\",\r\n                \"image\": \"images/lapras.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Transport Pokémon\",\r\n                \"height\": 2.5,\r\n                \"weight\": 220,\r\n                \"abilities\": [\r\n                    \"Water Absorb\",\r\n                    \"Shell Armor\",\r\n                    \"Hydration\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 535,\r\n                    \"hp\": 130,\r\n                    \"attack\": 85,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lapras\"\r\n    },\r\n    {\r\n        \"num\": 132,\r\n        \"name\": \"Ditto\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ditto\",\r\n                \"description\": \"Ditto is a Normal type Pokémon introduced in Generation 1. It is known as the Transform Pokémon.\",\r\n                \"image\": \"images/ditto.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Transform Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 4,\r\n                \"abilities\": [\r\n                    \"Limber\",\r\n                    \"Imposter\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 288,\r\n                    \"hp\": 48,\r\n                    \"attack\": 48,\r\n                    \"defense\": 48,\r\n                    \"speedAttack\": 48,\r\n                    \"speedDefense\": 48,\r\n                    \"speed\": 48\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ditto\"\r\n    },\r\n    {\r\n        \"num\": 133,\r\n        \"name\": \"Eevee\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Eevee\",\r\n                \"description\": \"Eevee is a Normal type Pokémon introduced in Generation 1. It is known as the Evolution Pokémon.\",\r\n                \"image\": \"images/eevee.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Evolution Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 6.5,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Adaptability\",\r\n                    \"Anticipation\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 325,\r\n                    \"hp\": 55,\r\n                    \"attack\": 55,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"eevee\",\r\n                    \"vaporeon\",\r\n                    \"jolteon\",\r\n                    \"flareon\",\r\n                    \"eevee\",\r\n                    \"espeon\",\r\n                    \"umbreon\",\r\n                    \"eevee\",\r\n                    \"leafeon\",\r\n                    \"glaceon\",\r\n                    \"eevee\",\r\n                    \"sylveon\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Partner Eevee\",\r\n                \"description\": \"Eevee is a Normal type Pokémon introduced in Generation 1. It is known as the Evolution Pokémon.\",\r\n                \"image\": \"images/eevee-lets-go.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Evolution Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 6.5,\r\n                \"abilities\": [],\r\n                \"stats\": {\r\n                    \"total\": 435,\r\n                    \"hp\": 65,\r\n                    \"attack\": 75,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": [\r\n                    \"eevee\",\r\n                    \"vaporeon\",\r\n                    \"jolteon\",\r\n                    \"flareon\",\r\n                    \"eevee\",\r\n                    \"espeon\",\r\n                    \"umbreon\",\r\n                    \"eevee\",\r\n                    \"leafeon\",\r\n                    \"glaceon\",\r\n                    \"eevee\",\r\n                    \"sylveon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/eevee\"\r\n    },\r\n    {\r\n        \"num\": 134,\r\n        \"name\": \"Vaporeon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Vaporeon\",\r\n                \"description\": \"Vaporeon is a Water type Pokémon introduced in Generation 1. It is known as the Bubble Jet Pokémon.\",\r\n                \"image\": \"images/vaporeon.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Bubble Jet Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 29,\r\n                \"abilities\": [\r\n                    \"Water Absorb\",\r\n                    \"Hydration\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 130,\r\n                    \"attack\": 65,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"eevee\",\r\n                    \"vaporeon\",\r\n                    \"jolteon\",\r\n                    \"flareon\",\r\n                    \"eevee\",\r\n                    \"espeon\",\r\n                    \"umbreon\",\r\n                    \"eevee\",\r\n                    \"leafeon\",\r\n                    \"glaceon\",\r\n                    \"eevee\",\r\n                    \"sylveon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/vaporeon\"\r\n    },\r\n    {\r\n        \"num\": 135,\r\n        \"name\": \"Jolteon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Jolteon\",\r\n                \"description\": \"Jolteon is an Electric type Pokémon introduced in Generation 1. It is known as the Lightning Pokémon.\",\r\n                \"image\": \"images/jolteon.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Lightning Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 24.5,\r\n                \"abilities\": [\r\n                    \"Volt Absorb\",\r\n                    \"Quick Feet\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 65,\r\n                    \"attack\": 65,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 130\r\n                },\r\n                \"evolutions\": [\r\n                    \"eevee\",\r\n                    \"vaporeon\",\r\n                    \"jolteon\",\r\n                    \"flareon\",\r\n                    \"eevee\",\r\n                    \"espeon\",\r\n                    \"umbreon\",\r\n                    \"eevee\",\r\n                    \"leafeon\",\r\n                    \"glaceon\",\r\n                    \"eevee\",\r\n                    \"sylveon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/jolteon\"\r\n    },\r\n    {\r\n        \"num\": 136,\r\n        \"name\": \"Flareon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Flareon\",\r\n                \"description\": \"Flareon is a Fire type Pokémon introduced in Generation 1. It is known as the Flame Pokémon.\",\r\n                \"image\": \"images/flareon.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Flame Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 25,\r\n                \"abilities\": [\r\n                    \"Flash Fire\",\r\n                    \"Guts\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 65,\r\n                    \"attack\": 130,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"eevee\",\r\n                    \"vaporeon\",\r\n                    \"jolteon\",\r\n                    \"flareon\",\r\n                    \"eevee\",\r\n                    \"espeon\",\r\n                    \"umbreon\",\r\n                    \"eevee\",\r\n                    \"leafeon\",\r\n                    \"glaceon\",\r\n                    \"eevee\",\r\n                    \"sylveon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/flareon\"\r\n    },\r\n    {\r\n        \"num\": 137,\r\n        \"name\": \"Porygon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Porygon\",\r\n                \"description\": \"Porygon is a Normal type Pokémon introduced in Generation 1. It is known as the Virtual Pokémon.\",\r\n                \"image\": \"images/porygon.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Virtual Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 36.5,\r\n                \"abilities\": [\r\n                    \"Trace\",\r\n                    \"Download\",\r\n                    \"Analytic\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 395,\r\n                    \"hp\": 65,\r\n                    \"attack\": 60,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"porygon\",\r\n                    \"porygon2\",\r\n                    \"porygon-z\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/porygon\"\r\n    },\r\n    {\r\n        \"num\": 138,\r\n        \"name\": \"Omanyte\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Omanyte\",\r\n                \"description\": \"Omanyte is a Rock/Water type Pokémon introduced in Generation 1. It is known as the Spiral Pokémon.\",\r\n                \"image\": \"images/omanyte.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Spiral Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 7.5,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Shell Armor\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 355,\r\n                    \"hp\": 35,\r\n                    \"attack\": 40,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"omanyte\",\r\n                    \"omastar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/omanyte\"\r\n    },\r\n    {\r\n        \"num\": 139,\r\n        \"name\": \"Omastar\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Omastar\",\r\n                \"description\": \"Omastar is a Rock/Water type Pokémon introduced in Generation 1. It is known as the Spiral Pokémon.\",\r\n                \"image\": \"images/omastar.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Spiral Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 35,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Shell Armor\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 70,\r\n                    \"attack\": 60,\r\n                    \"defense\": 125,\r\n                    \"speedAttack\": 115,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"omanyte\",\r\n                    \"omastar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/omastar\"\r\n    },\r\n    {\r\n        \"num\": 140,\r\n        \"name\": \"Kabuto\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kabuto\",\r\n                \"description\": \"Kabuto is a Rock/Water type Pokémon introduced in Generation 1. It is known as the Shellfish Pokémon.\",\r\n                \"image\": \"images/kabuto.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Shellfish Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 11.5,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Battle Armor\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 355,\r\n                    \"hp\": 30,\r\n                    \"attack\": 80,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"kabuto\",\r\n                    \"kabutops\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kabuto\"\r\n    },\r\n    {\r\n        \"num\": 141,\r\n        \"name\": \"Kabutops\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kabutops\",\r\n                \"description\": \"Kabutops is a Rock/Water type Pokémon introduced in Generation 1. It is known as the Shellfish Pokémon.\",\r\n                \"image\": \"images/kabutops.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Shellfish Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 40.5,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Battle Armor\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 60,\r\n                    \"attack\": 115,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"kabuto\",\r\n                    \"kabutops\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kabutops\"\r\n    },\r\n    {\r\n        \"num\": 142,\r\n        \"name\": \"Aerodactyl\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Aerodactyl\",\r\n                \"description\": \"Aerodactyl is a Rock/Flying type Pokémon introduced in Generation 1. It is known as the Fossil Pokémon.\\nAerodactyl has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/aerodactyl.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Fossil Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 59,\r\n                \"abilities\": [\r\n                    \"Rock Head\",\r\n                    \"Pressure\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 515,\r\n                    \"hp\": 80,\r\n                    \"attack\": 105,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 130\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Aerodactyl\",\r\n                \"description\": \"Aerodactyl is a Rock/Flying type Pokémon introduced in Generation 1. It is known as the Fossil Pokémon.\\nAerodactyl has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/aerodactyl-mega.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Fossil Pokémon\",\r\n                \"height\": 2.1,\r\n                \"weight\": 79,\r\n                \"abilities\": [\r\n                    \"Tough Claws\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 615,\r\n                    \"hp\": 80,\r\n                    \"attack\": 135,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 150\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/aerodactyl\"\r\n    },\r\n    {\r\n        \"num\": 143,\r\n        \"name\": \"Snorlax\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Snorlax\",\r\n                \"description\": \"Snorlax is a Normal type Pokémon introduced in Generation 1. It is known as the Sleeping Pokémon.\",\r\n                \"image\": \"images/snorlax.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Sleeping Pokémon\",\r\n                \"height\": 2.1,\r\n                \"weight\": 460,\r\n                \"abilities\": [\r\n                    \"Immunity\",\r\n                    \"Thick Fat\",\r\n                    \"Gluttony\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 540,\r\n                    \"hp\": 160,\r\n                    \"attack\": 110,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"munchlax\",\r\n                    \"snorlax\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/snorlax\"\r\n    },\r\n    {\r\n        \"num\": 144,\r\n        \"name\": \"Articuno\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Articuno\",\r\n                \"description\": \"Articuno is an Ice/Flying type Pokémon introduced in Generation 1. It is known as the Freeze Pokémon.\",\r\n                \"image\": \"images/articuno.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Freeze Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 55.4,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Snow Cloak\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 90,\r\n                    \"attack\": 85,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 125,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/articuno\"\r\n    },\r\n    {\r\n        \"num\": 145,\r\n        \"name\": \"Zapdos\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Zapdos\",\r\n                \"description\": \"Zapdos is an Electric/Flying type Pokémon introduced in Generation 1. It is known as the Electric Pokémon.\",\r\n                \"image\": \"images/zapdos.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Electric Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 52.6,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Static\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 90,\r\n                    \"attack\": 90,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/zapdos\"\r\n    },\r\n    {\r\n        \"num\": 146,\r\n        \"name\": \"Moltres\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Moltres\",\r\n                \"description\": \"Moltres is a Fire/Flying type Pokémon introduced in Generation 1. It is known as the Flame Pokémon.\",\r\n                \"image\": \"images/moltres.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Flame Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 60,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Flame Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 90,\r\n                    \"attack\": 100,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/moltres\"\r\n    },\r\n    {\r\n        \"num\": 147,\r\n        \"name\": \"Dratini\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dratini\",\r\n                \"description\": \"Dratini is a Dragon type Pokémon introduced in Generation 1. It is known as the Dragon Pokémon.\",\r\n                \"image\": \"images/dratini.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Dragon Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 3.3,\r\n                \"abilities\": [\r\n                    \"Shed Skin\",\r\n                    \"Marvel Scale\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 41,\r\n                    \"attack\": 64,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"dratini\",\r\n                    \"dragonair\",\r\n                    \"dragonite\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dratini\"\r\n    },\r\n    {\r\n        \"num\": 148,\r\n        \"name\": \"Dragonair\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dragonair\",\r\n                \"description\": \"Dragonair is a Dragon type Pokémon introduced in Generation 1. It is known as the Dragon Pokémon.\",\r\n                \"image\": \"images/dragonair.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Dragon Pokémon\",\r\n                \"height\": 4,\r\n                \"weight\": 16.5,\r\n                \"abilities\": [\r\n                    \"Shed Skin\",\r\n                    \"Marvel Scale\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 61,\r\n                    \"attack\": 84,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"dratini\",\r\n                    \"dragonair\",\r\n                    \"dragonite\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dragonair\"\r\n    },\r\n    {\r\n        \"num\": 149,\r\n        \"name\": \"Dragonite\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dragonite\",\r\n                \"description\": \"Dragonite is a Dragon/Flying type Pokémon introduced in Generation 1. It is known as the Dragon Pokémon.\",\r\n                \"image\": \"images/dragonite.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Dragon Pokémon\",\r\n                \"height\": 2.2,\r\n                \"weight\": 210,\r\n                \"abilities\": [\r\n                    \"Inner Focus\",\r\n                    \"Multiscale\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 91,\r\n                    \"attack\": 134,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"dratini\",\r\n                    \"dragonair\",\r\n                    \"dragonite\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dragonite\"\r\n    },\r\n    {\r\n        \"num\": 150,\r\n        \"name\": \"Mewtwo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mewtwo\",\r\n                \"description\": \"Mewtwo is a Psychic type Pokémon introduced in Generation 1. It is known as the Genetic Pokémon.\\nMewtwo has two Mega Evolutions, available from X & Y onwards. They can be activated in battle when holding the Mega Stones, Mewtwonite X and Mewtwonite Y respectively.\",\r\n                \"image\": \"images/mewtwo.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Genetic Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 122,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 106,\r\n                    \"attack\": 110,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 154,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 130\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Mewtwo X\",\r\n                \"description\": \"Mewtwo is a Psychic type Pokémon introduced in Generation 1. It is known as the Genetic Pokémon.\\nMewtwo has two Mega Evolutions, available from X & Y onwards. They can be activated in battle when holding the Mega Stones, Mewtwonite X and Mewtwonite Y respectively.\",\r\n                \"image\": \"images/mewtwo-mega-x.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Genetic Pokémon\",\r\n                \"height\": 2.3,\r\n                \"weight\": 127,\r\n                \"abilities\": [\r\n                    \"Steadfast\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 780,\r\n                    \"hp\": 106,\r\n                    \"attack\": 190,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 154,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 130\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Mewtwo Y\",\r\n                \"description\": \"Mewtwo is a Psychic type Pokémon introduced in Generation 1. It is known as the Genetic Pokémon.\\nMewtwo has two Mega Evolutions, available from X & Y onwards. They can be activated in battle when holding the Mega Stones, Mewtwonite X and Mewtwonite Y respectively.\",\r\n                \"image\": \"images/mewtwo-mega-y.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Genetic Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 33,\r\n                \"abilities\": [\r\n                    \"Insomnia\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 780,\r\n                    \"hp\": 106,\r\n                    \"attack\": 150,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 194,\r\n                    \"speedDefense\": 120,\r\n                    \"speed\": 140\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mewtwo\"\r\n    },\r\n    {\r\n        \"num\": 151,\r\n        \"name\": \"Mew\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mew\",\r\n                \"description\": \"Mew is a Psychic type Pokémon introduced in Generation 1. It is known as the New Species Pokémon.\",\r\n                \"image\": \"images/mew.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"New Species Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 4,\r\n                \"abilities\": [\r\n                    \"Synchronize\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 100,\r\n                    \"attack\": 100,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mew\"\r\n    },\r\n    {\r\n        \"num\": 152,\r\n        \"name\": \"Chikorita\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Chikorita\",\r\n                \"description\": \"Chikorita is a Grass type Pokémon introduced in Generation 2. It is known as the Leaf Pokémon.\",\r\n                \"image\": \"images/chikorita.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Leaf Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 6.4,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Leaf Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 318,\r\n                    \"hp\": 45,\r\n                    \"attack\": 49,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 49,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"chikorita\",\r\n                    \"bayleef\",\r\n                    \"meganium\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/chikorita\"\r\n    },\r\n    {\r\n        \"num\": 153,\r\n        \"name\": \"Bayleef\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bayleef\",\r\n                \"description\": \"Bayleef is a Grass type Pokémon introduced in Generation 2. It is known as the Leaf Pokémon.\",\r\n                \"image\": \"images/bayleef.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Leaf Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 15.8,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Leaf Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 60,\r\n                    \"attack\": 62,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 63,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"chikorita\",\r\n                    \"bayleef\",\r\n                    \"meganium\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bayleef\"\r\n    },\r\n    {\r\n        \"num\": 154,\r\n        \"name\": \"Meganium\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Meganium\",\r\n                \"description\": \"Meganium is a Grass type Pokémon introduced in Generation 2. It is known as the Herb Pokémon.\",\r\n                \"image\": \"images/meganium.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Herb Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 100.5,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Leaf Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 80,\r\n                    \"attack\": 82,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 83,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"chikorita\",\r\n                    \"bayleef\",\r\n                    \"meganium\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/meganium\"\r\n    },\r\n    {\r\n        \"num\": 155,\r\n        \"name\": \"Cyndaquil\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cyndaquil\",\r\n                \"description\": \"Cyndaquil is a Fire type Pokémon introduced in Generation 2. It is known as the Fire Mouse Pokémon.\",\r\n                \"image\": \"images/cyndaquil.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Fire Mouse Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 7.9,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Flash Fire\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 309,\r\n                    \"hp\": 39,\r\n                    \"attack\": 52,\r\n                    \"defense\": 43,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"cyndaquil\",\r\n                    \"quilava\",\r\n                    \"typhlosion\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cyndaquil\"\r\n    },\r\n    {\r\n        \"num\": 156,\r\n        \"name\": \"Quilava\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Quilava\",\r\n                \"description\": \"Quilava is a Fire type Pokémon introduced in Generation 2. It is known as the Volcano Pokémon.\",\r\n                \"image\": \"images/quilava.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Volcano Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 19,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Flash Fire\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 58,\r\n                    \"attack\": 64,\r\n                    \"defense\": 58,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"cyndaquil\",\r\n                    \"quilava\",\r\n                    \"typhlosion\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/quilava\"\r\n    },\r\n    {\r\n        \"num\": 157,\r\n        \"name\": \"Typhlosion\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Typhlosion\",\r\n                \"description\": \"Typhlosion is a Fire type Pokémon introduced in Generation 2. It is known as the Volcano Pokémon.\",\r\n                \"image\": \"images/typhlosion.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Volcano Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 79.5,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Flash Fire\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 534,\r\n                    \"hp\": 78,\r\n                    \"attack\": 84,\r\n                    \"defense\": 78,\r\n                    \"speedAttack\": 109,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"cyndaquil\",\r\n                    \"quilava\",\r\n                    \"typhlosion\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/typhlosion\"\r\n    },\r\n    {\r\n        \"num\": 158,\r\n        \"name\": \"Totodile\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Totodile\",\r\n                \"description\": \"Totodile is a Water type Pokémon introduced in Generation 2. It is known as the Big Jaw Pokémon.\",\r\n                \"image\": \"images/totodile.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Big Jaw Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 9.5,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 314,\r\n                    \"hp\": 50,\r\n                    \"attack\": 65,\r\n                    \"defense\": 64,\r\n                    \"speedAttack\": 44,\r\n                    \"speedDefense\": 48,\r\n                    \"speed\": 43\r\n                },\r\n                \"evolutions\": [\r\n                    \"totodile\",\r\n                    \"croconaw\",\r\n                    \"feraligatr\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/totodile\"\r\n    },\r\n    {\r\n        \"num\": 159,\r\n        \"name\": \"Croconaw\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Croconaw\",\r\n                \"description\": \"Croconaw is a Water type Pokémon introduced in Generation 2. It is known as the Big Jaw Pokémon.\",\r\n                \"image\": \"images/croconaw.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Big Jaw Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 25,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 65,\r\n                    \"attack\": 80,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 59,\r\n                    \"speedDefense\": 63,\r\n                    \"speed\": 58\r\n                },\r\n                \"evolutions\": [\r\n                    \"totodile\",\r\n                    \"croconaw\",\r\n                    \"feraligatr\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/croconaw\"\r\n    },\r\n    {\r\n        \"num\": 160,\r\n        \"name\": \"Feraligatr\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Feraligatr\",\r\n                \"description\": \"Feraligatr is a Water type Pokémon introduced in Generation 2. It is known as the Big Jaw Pokémon.\",\r\n                \"image\": \"images/feraligatr.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Big Jaw Pokémon\",\r\n                \"height\": 2.3,\r\n                \"weight\": 88.8,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 85,\r\n                    \"attack\": 105,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 79,\r\n                    \"speedDefense\": 83,\r\n                    \"speed\": 78\r\n                },\r\n                \"evolutions\": [\r\n                    \"totodile\",\r\n                    \"croconaw\",\r\n                    \"feraligatr\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/feraligatr\"\r\n    },\r\n    {\r\n        \"num\": 161,\r\n        \"name\": \"Sentret\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sentret\",\r\n                \"description\": \"Sentret is a Normal type Pokémon introduced in Generation 2. It is known as the Scout Pokémon.\",\r\n                \"image\": \"images/sentret.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Scout Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 6,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Keen Eye\",\r\n                    \"Frisk\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 215,\r\n                    \"hp\": 35,\r\n                    \"attack\": 46,\r\n                    \"defense\": 34,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"sentret\",\r\n                    \"furret\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sentret\"\r\n    },\r\n    {\r\n        \"num\": 162,\r\n        \"name\": \"Furret\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Furret\",\r\n                \"description\": \"Furret is a Normal type Pokémon introduced in Generation 2. It is known as the Long Body Pokémon.\",\r\n                \"image\": \"images/furret.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Long Body Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 32.5,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Keen Eye\",\r\n                    \"Frisk\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 415,\r\n                    \"hp\": 85,\r\n                    \"attack\": 76,\r\n                    \"defense\": 64,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"sentret\",\r\n                    \"furret\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/furret\"\r\n    },\r\n    {\r\n        \"num\": 163,\r\n        \"name\": \"Hoothoot\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Hoothoot\",\r\n                \"description\": \"Hoothoot is a Normal/Flying type Pokémon introduced in Generation 2. It is known as the Owl Pokémon.\",\r\n                \"image\": \"images/hoothoot.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Owl Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 21.2,\r\n                \"abilities\": [\r\n                    \"Insomnia\",\r\n                    \"Keen Eye\",\r\n                    \"Tinted Lens\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 262,\r\n                    \"hp\": 60,\r\n                    \"attack\": 30,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 36,\r\n                    \"speedDefense\": 56,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"hoothoot\",\r\n                    \"noctowl\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/hoothoot\"\r\n    },\r\n    {\r\n        \"num\": 164,\r\n        \"name\": \"Noctowl\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Noctowl\",\r\n                \"description\": \"Noctowl is a Normal/Flying type Pokémon introduced in Generation 2. It is known as the Owl Pokémon.\",\r\n                \"image\": \"images/noctowl.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Owl Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 40.8,\r\n                \"abilities\": [\r\n                    \"Insomnia\",\r\n                    \"Keen Eye\",\r\n                    \"Tinted Lens\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 452,\r\n                    \"hp\": 100,\r\n                    \"attack\": 50,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 86,\r\n                    \"speedDefense\": 96,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"hoothoot\",\r\n                    \"noctowl\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/noctowl\"\r\n    },\r\n    {\r\n        \"num\": 165,\r\n        \"name\": \"Ledyba\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ledyba\",\r\n                \"description\": \"Ledyba is a Bug/Flying type Pokémon introduced in Generation 2. It is known as the Five Star Pokémon.\",\r\n                \"image\": \"images/ledyba.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Five Star Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 10.8,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Early Bird\",\r\n                    \"Rattled\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 265,\r\n                    \"hp\": 40,\r\n                    \"attack\": 20,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"ledyba\",\r\n                    \"ledian\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ledyba\"\r\n    },\r\n    {\r\n        \"num\": 166,\r\n        \"name\": \"Ledian\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ledian\",\r\n                \"description\": \"Ledian is a Bug/Flying type Pokémon introduced in Generation 2. It is known as the Five Star Pokémon.\",\r\n                \"image\": \"images/ledian.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Five Star Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 35.6,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Early Bird\",\r\n                    \"Iron Fist\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 390,\r\n                    \"hp\": 55,\r\n                    \"attack\": 35,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"ledyba\",\r\n                    \"ledian\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ledian\"\r\n    },\r\n    {\r\n        \"num\": 167,\r\n        \"name\": \"Spinarak\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Spinarak\",\r\n                \"description\": \"Spinarak is a Bug/Poison type Pokémon introduced in Generation 2. It is known as the String Spit Pokémon.\",\r\n                \"image\": \"images/spinarak.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"String Spit Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 8.5,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Insomnia\",\r\n                    \"Sniper\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 250,\r\n                    \"hp\": 40,\r\n                    \"attack\": 60,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"spinarak\",\r\n                    \"ariados\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/spinarak\"\r\n    },\r\n    {\r\n        \"num\": 168,\r\n        \"name\": \"Ariados\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ariados\",\r\n                \"description\": \"Ariados is a Bug/Poison type Pokémon introduced in Generation 2. It is known as the Long Leg Pokémon.\",\r\n                \"image\": \"images/ariados.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Long Leg Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 33.5,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Insomnia\",\r\n                    \"Sniper\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 400,\r\n                    \"hp\": 70,\r\n                    \"attack\": 90,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"spinarak\",\r\n                    \"ariados\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ariados\"\r\n    },\r\n    {\r\n        \"num\": 169,\r\n        \"name\": \"Crobat\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Crobat\",\r\n                \"description\": \"Crobat is a Poison/Flying type Pokémon introduced in Generation 2. It is known as the Bat Pokémon.\",\r\n                \"image\": \"images/crobat.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Bat Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 75,\r\n                \"abilities\": [\r\n                    \"Inner Focus\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 535,\r\n                    \"hp\": 85,\r\n                    \"attack\": 90,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 130\r\n                },\r\n                \"evolutions\": [\r\n                    \"zubat\",\r\n                    \"golbat\",\r\n                    \"crobat\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/crobat\"\r\n    },\r\n    {\r\n        \"num\": 170,\r\n        \"name\": \"Chinchou\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Chinchou\",\r\n                \"description\": \"Chinchou is a Water/Electric type Pokémon introduced in Generation 2. It is known as the Angler Pokémon.\",\r\n                \"image\": \"images/chinchou.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Angler Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 12,\r\n                \"abilities\": [\r\n                    \"Volt Absorb\",\r\n                    \"Illuminate\",\r\n                    \"Water Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 75,\r\n                    \"attack\": 38,\r\n                    \"defense\": 38,\r\n                    \"speedAttack\": 56,\r\n                    \"speedDefense\": 56,\r\n                    \"speed\": 67\r\n                },\r\n                \"evolutions\": [\r\n                    \"chinchou\",\r\n                    \"lanturn\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/chinchou\"\r\n    },\r\n    {\r\n        \"num\": 171,\r\n        \"name\": \"Lanturn\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lanturn\",\r\n                \"description\": \"Lanturn is a Water/Electric type Pokémon introduced in Generation 2. It is known as the Light Pokémon.\",\r\n                \"image\": \"images/lanturn.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Light Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 22.5,\r\n                \"abilities\": [\r\n                    \"Volt Absorb\",\r\n                    \"Illuminate\",\r\n                    \"Water Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 460,\r\n                    \"hp\": 125,\r\n                    \"attack\": 58,\r\n                    \"defense\": 58,\r\n                    \"speedAttack\": 76,\r\n                    \"speedDefense\": 76,\r\n                    \"speed\": 67\r\n                },\r\n                \"evolutions\": [\r\n                    \"chinchou\",\r\n                    \"lanturn\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lanturn\"\r\n    },\r\n    {\r\n        \"num\": 172,\r\n        \"name\": \"Pichu\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pichu\",\r\n                \"description\": \"Pichu is an Electric type Pokémon introduced in Generation 2. It is known as the Tiny Mouse Pokémon.\",\r\n                \"image\": \"images/pichu.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Tiny Mouse Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 2,\r\n                \"abilities\": [\r\n                    \"Static\",\r\n                    \"Lightning Rod\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 205,\r\n                    \"hp\": 20,\r\n                    \"attack\": 40,\r\n                    \"defense\": 15,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"pichu\",\r\n                    \"pikachu\",\r\n                    \"raichu\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pichu\"\r\n    },\r\n    {\r\n        \"num\": 173,\r\n        \"name\": \"Cleffa\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cleffa\",\r\n                \"description\": \"Cleffa is a Fairy type Pokémon introduced in Generation 2. It is known as the Star Shape Pokémon.\",\r\n                \"image\": \"images/cleffa.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Star Shape Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 3,\r\n                \"abilities\": [\r\n                    \"Cute Charm\",\r\n                    \"Magic Guard\",\r\n                    \"Friend Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 218,\r\n                    \"hp\": 50,\r\n                    \"attack\": 25,\r\n                    \"defense\": 28,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 15\r\n                },\r\n                \"evolutions\": [\r\n                    \"cleffa\",\r\n                    \"clefairy\",\r\n                    \"clefable\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cleffa\"\r\n    },\r\n    {\r\n        \"num\": 174,\r\n        \"name\": \"Igglybuff\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Igglybuff\",\r\n                \"description\": \"Igglybuff is a Normal/Fairy type Pokémon introduced in Generation 2. It is known as the Balloon Pokémon.\",\r\n                \"image\": \"images/igglybuff.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Balloon Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 1,\r\n                \"abilities\": [\r\n                    \"Cute Charm\",\r\n                    \"Competitive\",\r\n                    \"Friend Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 210,\r\n                    \"hp\": 90,\r\n                    \"attack\": 30,\r\n                    \"defense\": 15,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 20,\r\n                    \"speed\": 15\r\n                },\r\n                \"evolutions\": [\r\n                    \"igglybuff\",\r\n                    \"jigglypuff\",\r\n                    \"wigglytuff\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/igglybuff\"\r\n    },\r\n    {\r\n        \"num\": 175,\r\n        \"name\": \"Togepi\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Togepi\",\r\n                \"description\": \"Togepi is a Fairy type Pokémon introduced in Generation 2. It is known as the Spike Ball Pokémon.\",\r\n                \"image\": \"images/togepi.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Spike Ball Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 1.5,\r\n                \"abilities\": [\r\n                    \"Hustle\",\r\n                    \"Serene Grace\",\r\n                    \"Super Luck\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 245,\r\n                    \"hp\": 35,\r\n                    \"attack\": 20,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"togepi\",\r\n                    \"togetic\",\r\n                    \"togekiss\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/togepi\"\r\n    },\r\n    {\r\n        \"num\": 176,\r\n        \"name\": \"Togetic\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Togetic\",\r\n                \"description\": \"Togetic is a Fairy/Flying type Pokémon introduced in Generation 2. It is known as the Happiness Pokémon.\",\r\n                \"image\": \"images/togetic.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Happiness Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 3.2,\r\n                \"abilities\": [\r\n                    \"Hustle\",\r\n                    \"Serene Grace\",\r\n                    \"Super Luck\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 55,\r\n                    \"attack\": 40,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"togepi\",\r\n                    \"togetic\",\r\n                    \"togekiss\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/togetic\"\r\n    },\r\n    {\r\n        \"num\": 177,\r\n        \"name\": \"Natu\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Natu\",\r\n                \"description\": \"Natu is a Psychic/Flying type Pokémon introduced in Generation 2. It is known as the Tiny Bird Pokémon.\",\r\n                \"image\": \"images/natu.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Tiny Bird Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 2,\r\n                \"abilities\": [\r\n                    \"Synchronize\",\r\n                    \"Early Bird\",\r\n                    \"Magic Bounce\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 320,\r\n                    \"hp\": 40,\r\n                    \"attack\": 50,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"natu\",\r\n                    \"xatu\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/natu\"\r\n    },\r\n    {\r\n        \"num\": 178,\r\n        \"name\": \"Xatu\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Xatu\",\r\n                \"description\": \"Xatu is a Psychic/Flying type Pokémon introduced in Generation 2. It is known as the Mystic Pokémon.\",\r\n                \"image\": \"images/xatu.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Mystic Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 15,\r\n                \"abilities\": [\r\n                    \"Synchronize\",\r\n                    \"Early Bird\",\r\n                    \"Magic Bounce\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 470,\r\n                    \"hp\": 65,\r\n                    \"attack\": 75,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"natu\",\r\n                    \"xatu\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/xatu\"\r\n    },\r\n    {\r\n        \"num\": 179,\r\n        \"name\": \"Mareep\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mareep\",\r\n                \"description\": \"Mareep is an Electric type Pokémon introduced in Generation 2. It is known as the Wool Pokémon.\",\r\n                \"image\": \"images/mareep.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Wool Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 7.8,\r\n                \"abilities\": [\r\n                    \"Static\",\r\n                    \"Plus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 280,\r\n                    \"hp\": 55,\r\n                    \"attack\": 40,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"mareep\",\r\n                    \"flaaffy\",\r\n                    \"ampharos\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mareep\"\r\n    },\r\n    {\r\n        \"num\": 180,\r\n        \"name\": \"Flaaffy\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Flaaffy\",\r\n                \"description\": \"Flaaffy is an Electric type Pokémon introduced in Generation 2. It is known as the Wool Pokémon.\",\r\n                \"image\": \"images/flaaffy.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Wool Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 13.3,\r\n                \"abilities\": [\r\n                    \"Static\",\r\n                    \"Plus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 365,\r\n                    \"hp\": 70,\r\n                    \"attack\": 55,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"mareep\",\r\n                    \"flaaffy\",\r\n                    \"ampharos\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/flaaffy\"\r\n    },\r\n    {\r\n        \"num\": 181,\r\n        \"name\": \"Ampharos\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ampharos\",\r\n                \"description\": \"Ampharos is an Electric type Pokémon introduced in Generation 2. It is known as the Light Pokémon.\",\r\n                \"image\": \"images/ampharos.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Light Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 61.5,\r\n                \"abilities\": [\r\n                    \"Static\",\r\n                    \"Plus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 510,\r\n                    \"hp\": 90,\r\n                    \"attack\": 75,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 115,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"mareep\",\r\n                    \"flaaffy\",\r\n                    \"ampharos\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Ampharos\",\r\n                \"description\": \"Ampharos is an Electric type Pokémon introduced in Generation 2. It is known as the Light Pokémon.\",\r\n                \"image\": \"images/ampharos-mega.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Light Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 61.5,\r\n                \"abilities\": [\r\n                    \"Mold Breaker\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 610,\r\n                    \"hp\": 90,\r\n                    \"attack\": 95,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 165,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"mareep\",\r\n                    \"flaaffy\",\r\n                    \"ampharos\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ampharos\"\r\n    },\r\n    {\r\n        \"num\": 182,\r\n        \"name\": \"Bellossom\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bellossom\",\r\n                \"description\": \"Bellossom is a Grass type Pokémon introduced in Generation 2. It is known as the Flower Pokémon.\",\r\n                \"image\": \"images/bellossom.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Flower Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 5.8,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Healer\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 75,\r\n                    \"attack\": 80,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"oddish\",\r\n                    \"gloom\",\r\n                    \"vileplume\",\r\n                    \"bellossom\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bellossom\"\r\n    },\r\n    {\r\n        \"num\": 183,\r\n        \"name\": \"Marill\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Marill\",\r\n                \"description\": \"Marill is a Water/Fairy type Pokémon introduced in Generation 2. It is known as the Aqua Mouse Pokémon.\",\r\n                \"image\": \"images/marill.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Aqua Mouse Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 8.5,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Huge Power\",\r\n                    \"Sap Sipper\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 250,\r\n                    \"hp\": 70,\r\n                    \"attack\": 20,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 20,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"azurill\",\r\n                    \"marill\",\r\n                    \"azumarill\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/marill\"\r\n    },\r\n    {\r\n        \"num\": 184,\r\n        \"name\": \"Azumarill\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Azumarill\",\r\n                \"description\": \"Azumarill is a Water/Fairy type Pokémon introduced in Generation 2. It is known as the Aqua Rabbit Pokémon.\",\r\n                \"image\": \"images/azumarill.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Aqua Rabbit Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 28.5,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Huge Power\",\r\n                    \"Sap Sipper\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 100,\r\n                    \"attack\": 50,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"azurill\",\r\n                    \"marill\",\r\n                    \"azumarill\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/azumarill\"\r\n    },\r\n    {\r\n        \"num\": 185,\r\n        \"name\": \"Sudowoodo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sudowoodo\",\r\n                \"description\": \"Sudowoodo is a Rock type Pokémon introduced in Generation 2. It is known as the Imitation Pokémon.\",\r\n                \"image\": \"images/sudowoodo.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Imitation Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 38,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Rock Head\",\r\n                    \"Rattled\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 410,\r\n                    \"hp\": 70,\r\n                    \"attack\": 100,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"bonsly\",\r\n                    \"sudowoodo\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sudowoodo\"\r\n    },\r\n    {\r\n        \"num\": 186,\r\n        \"name\": \"Politoed\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Politoed\",\r\n                \"description\": \"Politoed is a Water type Pokémon introduced in Generation 2. It is known as the Frog Pokémon.\",\r\n                \"image\": \"images/politoed.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Frog Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 33.9,\r\n                \"abilities\": [\r\n                    \"Water Absorb\",\r\n                    \"Damp\",\r\n                    \"Drizzle\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 90,\r\n                    \"attack\": 75,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"poliwag\",\r\n                    \"poliwhirl\",\r\n                    \"poliwrath\",\r\n                    \"politoed\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/politoed\"\r\n    },\r\n    {\r\n        \"num\": 187,\r\n        \"name\": \"Hoppip\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Hoppip\",\r\n                \"description\": \"Hoppip is a Grass/Flying type Pokémon introduced in Generation 2. It is known as the Cottonweed Pokémon.\",\r\n                \"image\": \"images/hoppip.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Cottonweed Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 0.5,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Leaf Guard\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 250,\r\n                    \"hp\": 35,\r\n                    \"attack\": 35,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"hoppip\",\r\n                    \"skiploom\",\r\n                    \"jumpluff\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/hoppip\"\r\n    },\r\n    {\r\n        \"num\": 188,\r\n        \"name\": \"Skiploom\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Skiploom\",\r\n                \"description\": \"Skiploom is a Grass/Flying type Pokémon introduced in Generation 2. It is known as the Cottonweed Pokémon.\",\r\n                \"image\": \"images/skiploom.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Cottonweed Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 1,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Leaf Guard\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 340,\r\n                    \"hp\": 55,\r\n                    \"attack\": 45,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"hoppip\",\r\n                    \"skiploom\",\r\n                    \"jumpluff\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/skiploom\"\r\n    },\r\n    {\r\n        \"num\": 189,\r\n        \"name\": \"Jumpluff\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Jumpluff\",\r\n                \"description\": \"Jumpluff is a Grass/Flying type Pokémon introduced in Generation 2. It is known as the Cottonweed Pokémon.\",\r\n                \"image\": \"images/jumpluff.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Cottonweed Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 3,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Leaf Guard\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 460,\r\n                    \"hp\": 75,\r\n                    \"attack\": 55,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": [\r\n                    \"hoppip\",\r\n                    \"skiploom\",\r\n                    \"jumpluff\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/jumpluff\"\r\n    },\r\n    {\r\n        \"num\": 190,\r\n        \"name\": \"Aipom\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Aipom\",\r\n                \"description\": \"Aipom is a Normal type Pokémon introduced in Generation 2. It is known as the Long Tail Pokémon.\",\r\n                \"image\": \"images/aipom.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Long Tail Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 11.5,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Pickup\",\r\n                    \"Skill Link\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 360,\r\n                    \"hp\": 55,\r\n                    \"attack\": 70,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"aipom\",\r\n                    \"ambipom\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/aipom\"\r\n    },\r\n    {\r\n        \"num\": 191,\r\n        \"name\": \"Sunkern\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sunkern\",\r\n                \"description\": \"Sunkern is a Grass type Pokémon introduced in Generation 2. It is known as the Seed Pokémon.\",\r\n                \"image\": \"images/sunkern.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Seed Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 1.8,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Solar Power\",\r\n                    \"Early Bird\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 180,\r\n                    \"hp\": 30,\r\n                    \"attack\": 30,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"sunkern\",\r\n                    \"sunflora\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sunkern\"\r\n    },\r\n    {\r\n        \"num\": 192,\r\n        \"name\": \"Sunflora\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sunflora\",\r\n                \"description\": \"Sunflora is a Grass type Pokémon introduced in Generation 2. It is known as the Sun Pokémon.\",\r\n                \"image\": \"images/sunflora.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Sun Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 8.5,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Solar Power\",\r\n                    \"Early Bird\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 425,\r\n                    \"hp\": 75,\r\n                    \"attack\": 75,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"sunkern\",\r\n                    \"sunflora\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sunflora\"\r\n    },\r\n    {\r\n        \"num\": 193,\r\n        \"name\": \"Yanma\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Yanma\",\r\n                \"description\": \"Yanma is a Bug/Flying type Pokémon introduced in Generation 2. It is known as the Clear Wing Pokémon.\",\r\n                \"image\": \"images/yanma.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Clear Wing Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 38,\r\n                \"abilities\": [\r\n                    \"Speed Boost\",\r\n                    \"Compound Eyes\",\r\n                    \"Frisk\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 390,\r\n                    \"hp\": 65,\r\n                    \"attack\": 65,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"yanma\",\r\n                    \"yanmega\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/yanma\"\r\n    },\r\n    {\r\n        \"num\": 194,\r\n        \"name\": \"Wooper\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Wooper\",\r\n                \"description\": \"Wooper is a Water/Ground type Pokémon introduced in Generation 2. It is known as the Water Fish Pokémon.\",\r\n                \"image\": \"images/wooper.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Water Fish Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 8.5,\r\n                \"abilities\": [\r\n                    \"Damp\",\r\n                    \"Water Absorb\",\r\n                    \"Unaware\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 210,\r\n                    \"hp\": 55,\r\n                    \"attack\": 45,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 25,\r\n                    \"speed\": 15\r\n                },\r\n                \"evolutions\": [\r\n                    \"wooper\",\r\n                    \"quagsire\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/wooper\"\r\n    },\r\n    {\r\n        \"num\": 195,\r\n        \"name\": \"Quagsire\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Quagsire\",\r\n                \"description\": \"Quagsire is a Water/Ground type Pokémon introduced in Generation 2. It is known as the Water Fish Pokémon.\",\r\n                \"image\": \"images/quagsire.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Water Fish Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 75,\r\n                \"abilities\": [\r\n                    \"Damp\",\r\n                    \"Water Absorb\",\r\n                    \"Unaware\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 430,\r\n                    \"hp\": 95,\r\n                    \"attack\": 85,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"wooper\",\r\n                    \"quagsire\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/quagsire\"\r\n    },\r\n    {\r\n        \"num\": 196,\r\n        \"name\": \"Espeon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Espeon\",\r\n                \"description\": \"Espeon is a Psychic type Pokémon introduced in Generation 2. It is known as the Sun Pokémon.\",\r\n                \"image\": \"images/espeon.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Sun Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 26.5,\r\n                \"abilities\": [\r\n                    \"Synchronize\",\r\n                    \"Magic Bounce\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 65,\r\n                    \"attack\": 65,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 130,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": [\r\n                    \"eevee\",\r\n                    \"vaporeon\",\r\n                    \"jolteon\",\r\n                    \"flareon\",\r\n                    \"eevee\",\r\n                    \"espeon\",\r\n                    \"umbreon\",\r\n                    \"eevee\",\r\n                    \"leafeon\",\r\n                    \"glaceon\",\r\n                    \"eevee\",\r\n                    \"sylveon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/espeon\"\r\n    },\r\n    {\r\n        \"num\": 197,\r\n        \"name\": \"Umbreon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Umbreon\",\r\n                \"description\": \"Umbreon is a Dark type Pokémon introduced in Generation 2. It is known as the Moonlight Pokémon.\",\r\n                \"image\": \"images/umbreon.jpg\",\r\n                \"types\": [\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Moonlight Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 27,\r\n                \"abilities\": [\r\n                    \"Synchronize\",\r\n                    \"Inner Focus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 95,\r\n                    \"attack\": 65,\r\n                    \"defense\": 110,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 130,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"eevee\",\r\n                    \"vaporeon\",\r\n                    \"jolteon\",\r\n                    \"flareon\",\r\n                    \"eevee\",\r\n                    \"espeon\",\r\n                    \"umbreon\",\r\n                    \"eevee\",\r\n                    \"leafeon\",\r\n                    \"glaceon\",\r\n                    \"eevee\",\r\n                    \"sylveon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/umbreon\"\r\n    },\r\n    {\r\n        \"num\": 198,\r\n        \"name\": \"Murkrow\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Murkrow\",\r\n                \"description\": \"Murkrow is a Dark/Flying type Pokémon introduced in Generation 2. It is known as the Darkness Pokémon.\",\r\n                \"image\": \"images/murkrow.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Darkness Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 2.1,\r\n                \"abilities\": [\r\n                    \"Insomnia\",\r\n                    \"Super Luck\",\r\n                    \"Prankster\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 60,\r\n                    \"attack\": 85,\r\n                    \"defense\": 42,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 42,\r\n                    \"speed\": 91\r\n                },\r\n                \"evolutions\": [\r\n                    \"murkrow\",\r\n                    \"honchkrow\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/murkrow\"\r\n    },\r\n    {\r\n        \"num\": 199,\r\n        \"name\": \"Slowking\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Slowking\",\r\n                \"description\": \"Slowking is a Water/Psychic type Pokémon introduced in Generation 2. It is known as the Royal Pokémon.\",\r\n                \"image\": \"images/slowking.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Royal Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 79.5,\r\n                \"abilities\": [\r\n                    \"Oblivious\",\r\n                    \"Own Tempo\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 95,\r\n                    \"attack\": 75,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"slowpoke\",\r\n                    \"slowbro\",\r\n                    \"slowking\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/slowking\"\r\n    },\r\n    {\r\n        \"num\": 200,\r\n        \"name\": \"Misdreavus\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Misdreavus\",\r\n                \"description\": \"Misdreavus is a Ghost type Pokémon introduced in Generation 2. It is known as the Screech Pokémon.\",\r\n                \"image\": \"images/misdreavus.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Screech Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 1,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 435,\r\n                    \"hp\": 60,\r\n                    \"attack\": 60,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"misdreavus\",\r\n                    \"mismagius\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/misdreavus\"\r\n    },\r\n    {\r\n        \"num\": 201,\r\n        \"name\": \"Unown\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Unown\",\r\n                \"description\": \"Unown is a Psychic type Pokémon introduced in Generation 2. It is known as the Symbol Pokémon.\",\r\n                \"image\": \"images/unown.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Symbol Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 5,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 336,\r\n                    \"hp\": 48,\r\n                    \"attack\": 72,\r\n                    \"defense\": 48,\r\n                    \"speedAttack\": 72,\r\n                    \"speedDefense\": 48,\r\n                    \"speed\": 48\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/unown\"\r\n    },\r\n    {\r\n        \"num\": 202,\r\n        \"name\": \"Wobbuffet\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Wobbuffet\",\r\n                \"description\": \"Wobbuffet is a Psychic type Pokémon introduced in Generation 2. It is known as the Patient Pokémon.\",\r\n                \"image\": \"images/wobbuffet.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Patient Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 28.5,\r\n                \"abilities\": [\r\n                    \"Shadow Tag\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 190,\r\n                    \"attack\": 33,\r\n                    \"defense\": 58,\r\n                    \"speedAttack\": 33,\r\n                    \"speedDefense\": 58,\r\n                    \"speed\": 33\r\n                },\r\n                \"evolutions\": [\r\n                    \"wynaut\",\r\n                    \"wobbuffet\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/wobbuffet\"\r\n    },\r\n    {\r\n        \"num\": 203,\r\n        \"name\": \"Girafarig\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Girafarig\",\r\n                \"description\": \"Girafarig is a Normal/Psychic type Pokémon introduced in Generation 2. It is known as the Long Neck Pokémon.\",\r\n                \"image\": \"images/girafarig.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Long Neck Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 41.5,\r\n                \"abilities\": [\r\n                    \"Inner Focus\",\r\n                    \"Early Bird\",\r\n                    \"Sap Sipper\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 455,\r\n                    \"hp\": 70,\r\n                    \"attack\": 80,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/girafarig\"\r\n    },\r\n    {\r\n        \"num\": 204,\r\n        \"name\": \"Pineco\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pineco\",\r\n                \"description\": \"Pineco is a Bug type Pokémon introduced in Generation 2. It is known as the Bagworm Pokémon.\",\r\n                \"image\": \"images/pineco.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Bagworm Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 7.2,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 290,\r\n                    \"hp\": 50,\r\n                    \"attack\": 65,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 15\r\n                },\r\n                \"evolutions\": [\r\n                    \"pineco\",\r\n                    \"forretress\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pineco\"\r\n    },\r\n    {\r\n        \"num\": 205,\r\n        \"name\": \"Forretress\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Forretress\",\r\n                \"description\": \"Forretress is a Bug/Steel type Pokémon introduced in Generation 2. It is known as the Bagworm Pokémon.\",\r\n                \"image\": \"images/forretress.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Bagworm Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 125.8,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 465,\r\n                    \"hp\": 75,\r\n                    \"attack\": 90,\r\n                    \"defense\": 140,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"pineco\",\r\n                    \"forretress\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/forretress\"\r\n    },\r\n    {\r\n        \"num\": 206,\r\n        \"name\": \"Dunsparce\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dunsparce\",\r\n                \"description\": \"Dunsparce is a Normal type Pokémon introduced in Generation 2. It is known as the Land Snake Pokémon.\",\r\n                \"image\": \"images/dunsparce.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Land Snake Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 14,\r\n                \"abilities\": [\r\n                    \"Serene Grace\",\r\n                    \"Run Away\",\r\n                    \"Rattled\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 415,\r\n                    \"hp\": 100,\r\n                    \"attack\": 70,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dunsparce\"\r\n    },\r\n    {\r\n        \"num\": 207,\r\n        \"name\": \"Gligar\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gligar\",\r\n                \"description\": \"Gligar is a Ground/Flying type Pokémon introduced in Generation 2. It is known as the FlyScorpion Pokémon.\",\r\n                \"image\": \"images/gligar.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"FlyScorpion Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 64.8,\r\n                \"abilities\": [\r\n                    \"Hyper Cutter\",\r\n                    \"Sand Veil\",\r\n                    \"Immunity\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 430,\r\n                    \"hp\": 65,\r\n                    \"attack\": 75,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"gligar\",\r\n                    \"gliscor\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gligar\"\r\n    },\r\n    {\r\n        \"num\": 208,\r\n        \"name\": \"Steelix\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Steelix\",\r\n                \"description\": \"Steelix is a Steel/Ground type Pokémon introduced in Generation 2. It is known as the Iron Snake Pokémon.\\nSteelix has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/steelix.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Iron Snake Pokémon\",\r\n                \"height\": 9.2,\r\n                \"weight\": 400,\r\n                \"abilities\": [\r\n                    \"Rock Head\",\r\n                    \"Sturdy\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 510,\r\n                    \"hp\": 75,\r\n                    \"attack\": 85,\r\n                    \"defense\": 200,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"onix\",\r\n                    \"steelix\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Steelix\",\r\n                \"description\": \"Steelix is a Steel/Ground type Pokémon introduced in Generation 2. It is known as the Iron Snake Pokémon.\\nSteelix has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/steelix-mega.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Iron Snake Pokémon\",\r\n                \"height\": 10.5,\r\n                \"weight\": 740,\r\n                \"abilities\": [\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 610,\r\n                    \"hp\": 75,\r\n                    \"attack\": 125,\r\n                    \"defense\": 230,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"onix\",\r\n                    \"steelix\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/steelix\"\r\n    },\r\n    {\r\n        \"num\": 209,\r\n        \"name\": \"Snubbull\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Snubbull\",\r\n                \"description\": \"Snubbull is a Fairy type Pokémon introduced in Generation 2. It is known as the Fairy Pokémon.\",\r\n                \"image\": \"images/snubbull.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Fairy Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 7.8,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Run Away\",\r\n                    \"Rattled\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 60,\r\n                    \"attack\": 80,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"snubbull\",\r\n                    \"granbull\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/snubbull\"\r\n    },\r\n    {\r\n        \"num\": 210,\r\n        \"name\": \"Granbull\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Granbull\",\r\n                \"description\": \"Granbull is a Fairy type Pokémon introduced in Generation 2. It is known as the Fairy Pokémon.\",\r\n                \"image\": \"images/granbull.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Fairy Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 48.7,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Quick Feet\",\r\n                    \"Rattled\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 450,\r\n                    \"hp\": 90,\r\n                    \"attack\": 120,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"snubbull\",\r\n                    \"granbull\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/granbull\"\r\n    },\r\n    {\r\n        \"num\": 211,\r\n        \"name\": \"Qwilfish\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Qwilfish\",\r\n                \"description\": \"Qwilfish is a Water/Poison type Pokémon introduced in Generation 2. It is known as the Balloon Pokémon.\",\r\n                \"image\": \"images/qwilfish.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Balloon Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 3.9,\r\n                \"abilities\": [\r\n                    \"Poison Point\",\r\n                    \"Swift Swim\",\r\n                    \"Intimidate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 440,\r\n                    \"hp\": 65,\r\n                    \"attack\": 95,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/qwilfish\"\r\n    },\r\n    {\r\n        \"num\": 212,\r\n        \"name\": \"Scizor\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Scizor\",\r\n                \"description\": \"Scizor is a Bug/Steel type Pokémon introduced in Generation 2. It is known as the Pincer Pokémon.\\nScizor is a red, metal, ant-like Pokémon with yellow and black patterns on its pincers which resemble an eye pattern. Its body consists of three main parts: the torso, the abdomen and the head. It stands on two legs and has a pair of small wings located on its back which are used to control its body temperature, rather than flying. Scizor's habitat is lush and vast where it can reside with the rest of the swarm.\\nScizor evolves from the Bug/Flying type Scyther, thus losing its Flying type upon evolution - a rare occurrence for Pokémon.\\nScizor has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/scizor.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Pincer Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 118,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Technician\",\r\n                    \"Light Metal\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 70,\r\n                    \"attack\": 130,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"scyther\",\r\n                    \"scizor\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Scizor\",\r\n                \"description\": \"Scizor is a Bug/Steel type Pokémon introduced in Generation 2. It is known as the Pincer Pokémon.\\nScizor is a red, metal, ant-like Pokémon with yellow and black patterns on its pincers which resemble an eye pattern. Its body consists of three main parts: the torso, the abdomen and the head. It stands on two legs and has a pair of small wings located on its back which are used to control its body temperature, rather than flying. Scizor's habitat is lush and vast where it can reside with the rest of the swarm.\\nScizor evolves from the Bug/Flying type Scyther, thus losing its Flying type upon evolution - a rare occurrence for Pokémon.\\nScizor has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/scizor-mega.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Pincer Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 125,\r\n                \"abilities\": [\r\n                    \"Technician\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 70,\r\n                    \"attack\": 150,\r\n                    \"defense\": 140,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": [\r\n                    \"scyther\",\r\n                    \"scizor\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/scizor\"\r\n    },\r\n    {\r\n        \"num\": 213,\r\n        \"name\": \"Shuckle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Shuckle\",\r\n                \"description\": \"Shuckle is a Bug/Rock type Pokémon introduced in Generation 2. It is known as the Mold Pokémon.\",\r\n                \"image\": \"images/shuckle.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Mold Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 20.5,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Gluttony\",\r\n                    \"Contrary\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 505,\r\n                    \"hp\": 20,\r\n                    \"attack\": 10,\r\n                    \"defense\": 230,\r\n                    \"speedAttack\": 10,\r\n                    \"speedDefense\": 230,\r\n                    \"speed\": 5\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/shuckle\"\r\n    },\r\n    {\r\n        \"num\": 214,\r\n        \"name\": \"Heracross\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Heracross\",\r\n                \"description\": \"Heracross is a Bug/Fighting type Pokémon introduced in Generation 2. It is known as the Single Horn Pokémon.\\nHeracross has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/heracross.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Single Horn Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 54,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Guts\",\r\n                    \"Moxie\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 80,\r\n                    \"attack\": 125,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Heracross\",\r\n                \"description\": \"Heracross is a Bug/Fighting type Pokémon introduced in Generation 2. It is known as the Single Horn Pokémon.\\nHeracross has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/heracross-mega.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Single Horn Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 62.5,\r\n                \"abilities\": [\r\n                    \"Skill Link\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 80,\r\n                    \"attack\": 185,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/heracross\"\r\n    },\r\n    {\r\n        \"num\": 215,\r\n        \"name\": \"Sneasel\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sneasel\",\r\n                \"description\": \"Sneasel is a Dark/Ice type Pokémon introduced in Generation 2. It is known as the Sharp Claw Pokémon.\",\r\n                \"image\": \"images/sneasel.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Sharp Claw Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 28,\r\n                \"abilities\": [\r\n                    \"Inner Focus\",\r\n                    \"Keen Eye\",\r\n                    \"Pickpocket\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 430,\r\n                    \"hp\": 55,\r\n                    \"attack\": 95,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 115\r\n                },\r\n                \"evolutions\": [\r\n                    \"sneasel\",\r\n                    \"weavile\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sneasel\"\r\n    },\r\n    {\r\n        \"num\": 216,\r\n        \"name\": \"Teddiursa\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Teddiursa\",\r\n                \"description\": \"Teddiursa is a Normal type Pokémon introduced in Generation 2. It is known as the Little Bear Pokémon.\",\r\n                \"image\": \"images/teddiursa.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Little Bear Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 8.8,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Quick Feet\",\r\n                    \"Honey Gather\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 60,\r\n                    \"attack\": 80,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"teddiursa\",\r\n                    \"ursaring\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/teddiursa\"\r\n    },\r\n    {\r\n        \"num\": 217,\r\n        \"name\": \"Ursaring\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ursaring\",\r\n                \"description\": \"Ursaring is a Normal type Pokémon introduced in Generation 2. It is known as the Hibernator Pokémon.\",\r\n                \"image\": \"images/ursaring.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Hibernator Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 125.8,\r\n                \"abilities\": [\r\n                    \"Guts\",\r\n                    \"Quick Feet\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 90,\r\n                    \"attack\": 130,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"teddiursa\",\r\n                    \"ursaring\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ursaring\"\r\n    },\r\n    {\r\n        \"num\": 218,\r\n        \"name\": \"Slugma\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Slugma\",\r\n                \"description\": \"Slugma is a Fire type Pokémon introduced in Generation 2. It is known as the Lava Pokémon.\",\r\n                \"image\": \"images/slugma.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Lava Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 35,\r\n                \"abilities\": [\r\n                    \"Magma Armor\",\r\n                    \"Flame Body\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 250,\r\n                    \"hp\": 40,\r\n                    \"attack\": 40,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"slugma\",\r\n                    \"magcargo\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/slugma\"\r\n    },\r\n    {\r\n        \"num\": 219,\r\n        \"name\": \"Magcargo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Magcargo\",\r\n                \"description\": \"Magcargo is a Fire/Rock type Pokémon introduced in Generation 2. It is known as the Lava Pokémon.\",\r\n                \"image\": \"images/magcargo.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Lava Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 55,\r\n                \"abilities\": [\r\n                    \"Magma Armor\",\r\n                    \"Flame Body\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 430,\r\n                    \"hp\": 60,\r\n                    \"attack\": 50,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"slugma\",\r\n                    \"magcargo\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/magcargo\"\r\n    },\r\n    {\r\n        \"num\": 220,\r\n        \"name\": \"Swinub\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Swinub\",\r\n                \"description\": \"Swinub is an Ice/Ground type Pokémon introduced in Generation 2. It is known as the Pig Pokémon.\",\r\n                \"image\": \"images/swinub.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Pig Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 6.5,\r\n                \"abilities\": [\r\n                    \"Oblivious\",\r\n                    \"Snow Cloak\",\r\n                    \"Thick Fat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 250,\r\n                    \"hp\": 50,\r\n                    \"attack\": 50,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"swinub\",\r\n                    \"piloswine\",\r\n                    \"mamoswine\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/swinub\"\r\n    },\r\n    {\r\n        \"num\": 221,\r\n        \"name\": \"Piloswine\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Piloswine\",\r\n                \"description\": \"Piloswine is an Ice/Ground type Pokémon introduced in Generation 2. It is known as the Swine Pokémon.\",\r\n                \"image\": \"images/piloswine.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Swine Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 55.8,\r\n                \"abilities\": [\r\n                    \"Oblivious\",\r\n                    \"Snow Cloak\",\r\n                    \"Thick Fat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 450,\r\n                    \"hp\": 100,\r\n                    \"attack\": 100,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"swinub\",\r\n                    \"piloswine\",\r\n                    \"mamoswine\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/piloswine\"\r\n    },\r\n    {\r\n        \"num\": 222,\r\n        \"name\": \"Corsola\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Corsola\",\r\n                \"description\": \"Corsola is a Water/Rock type Pokémon introduced in Generation 2. It is known as the Coral Pokémon.\",\r\n                \"image\": \"images/corsola.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Coral Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 5,\r\n                \"abilities\": [\r\n                    \"Hustle\",\r\n                    \"Natural Cure\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 410,\r\n                    \"hp\": 65,\r\n                    \"attack\": 55,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/corsola\"\r\n    },\r\n    {\r\n        \"num\": 223,\r\n        \"name\": \"Remoraid\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Remoraid\",\r\n                \"description\": \"Remoraid is a Water type Pokémon introduced in Generation 2. It is known as the Jet Pokémon.\",\r\n                \"image\": \"images/remoraid.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Jet Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 12,\r\n                \"abilities\": [\r\n                    \"Hustle\",\r\n                    \"Sniper\",\r\n                    \"Moody\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 35,\r\n                    \"attack\": 65,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"remoraid\",\r\n                    \"octillery\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/remoraid\"\r\n    },\r\n    {\r\n        \"num\": 224,\r\n        \"name\": \"Octillery\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Octillery\",\r\n                \"description\": \"Octillery is a Water type Pokémon introduced in Generation 2. It is known as the Jet Pokémon.\",\r\n                \"image\": \"images/octillery.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Jet Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 28.5,\r\n                \"abilities\": [\r\n                    \"Suction Cups\",\r\n                    \"Sniper\",\r\n                    \"Moody\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 75,\r\n                    \"attack\": 105,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"remoraid\",\r\n                    \"octillery\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/octillery\"\r\n    },\r\n    {\r\n        \"num\": 225,\r\n        \"name\": \"Delibird\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Delibird\",\r\n                \"description\": \"Delibird is an Ice/Flying type Pokémon introduced in Generation 2. It is known as the Delivery Pokémon.\",\r\n                \"image\": \"images/delibird.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Delivery Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 16,\r\n                \"abilities\": [\r\n                    \"Vital Spirit\",\r\n                    \"Hustle\",\r\n                    \"Insomnia\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 45,\r\n                    \"attack\": 55,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/delibird\"\r\n    },\r\n    {\r\n        \"num\": 226,\r\n        \"name\": \"Mantine\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mantine\",\r\n                \"description\": \"Mantine is a Water/Flying type Pokémon introduced in Generation 2. It is known as the Kite Pokémon.\",\r\n                \"image\": \"images/mantine.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Kite Pokémon\",\r\n                \"height\": 2.1,\r\n                \"weight\": 220,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Water Absorb\",\r\n                    \"Water Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 85,\r\n                    \"attack\": 40,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 140,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"mantyke\",\r\n                    \"mantine\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mantine\"\r\n    },\r\n    {\r\n        \"num\": 227,\r\n        \"name\": \"Skarmory\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Skarmory\",\r\n                \"description\": \"Skarmory is a Steel/Flying type Pokémon introduced in Generation 2. It is known as the Armor Bird Pokémon.\",\r\n                \"image\": \"images/skarmory.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Armor Bird Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 50.5,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Sturdy\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 465,\r\n                    \"hp\": 65,\r\n                    \"attack\": 80,\r\n                    \"defense\": 140,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/skarmory\"\r\n    },\r\n    {\r\n        \"num\": 228,\r\n        \"name\": \"Houndour\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Houndour\",\r\n                \"description\": \"Houndour is a Dark/Fire type Pokémon introduced in Generation 2. It is known as the Dark Pokémon.\",\r\n                \"image\": \"images/houndour.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Dark Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 10.8,\r\n                \"abilities\": [\r\n                    \"Early Bird\",\r\n                    \"Flash Fire\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 45,\r\n                    \"attack\": 60,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"houndour\",\r\n                    \"houndoom\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/houndour\"\r\n    },\r\n    {\r\n        \"num\": 229,\r\n        \"name\": \"Houndoom\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Houndoom\",\r\n                \"description\": \"Houndoom is a Dark/Fire type Pokémon introduced in Generation 2. It is known as the Dark Pokémon.\\nHoundoom has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/houndoom.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Dark Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 35,\r\n                \"abilities\": [\r\n                    \"Early Bird\",\r\n                    \"Flash Fire\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 75,\r\n                    \"attack\": 90,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"houndour\",\r\n                    \"houndoom\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Houndoom\",\r\n                \"description\": \"Houndoom is a Dark/Fire type Pokémon introduced in Generation 2. It is known as the Dark Pokémon.\\nHoundoom has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/houndoom-mega.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Dark Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 49.5,\r\n                \"abilities\": [\r\n                    \"Solar Power\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 75,\r\n                    \"attack\": 90,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 140,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 115\r\n                },\r\n                \"evolutions\": [\r\n                    \"houndour\",\r\n                    \"houndoom\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/houndoom\"\r\n    },\r\n    {\r\n        \"num\": 230,\r\n        \"name\": \"Kingdra\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kingdra\",\r\n                \"description\": \"Kingdra is a Water/Dragon type Pokémon introduced in Generation 2. It is known as the Dragon Pokémon.\",\r\n                \"image\": \"images/kingdra.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Dragon Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 152,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Sniper\",\r\n                    \"Damp\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 540,\r\n                    \"hp\": 75,\r\n                    \"attack\": 95,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"horsea\",\r\n                    \"seadra\",\r\n                    \"kingdra\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kingdra\"\r\n    },\r\n    {\r\n        \"num\": 231,\r\n        \"name\": \"Phanpy\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Phanpy\",\r\n                \"description\": \"Phanpy is a Ground type Pokémon introduced in Generation 2. It is known as the Long Nose Pokémon.\",\r\n                \"image\": \"images/phanpy.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Long Nose Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 33.5,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Sand Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 90,\r\n                    \"attack\": 60,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"phanpy\",\r\n                    \"donphan\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/phanpy\"\r\n    },\r\n    {\r\n        \"num\": 232,\r\n        \"name\": \"Donphan\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Donphan\",\r\n                \"description\": \"Donphan is a Ground type Pokémon introduced in Generation 2. It is known as the Armor Pokémon.\",\r\n                \"image\": \"images/donphan.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Armor Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 120,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Sand Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 90,\r\n                    \"attack\": 120,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"phanpy\",\r\n                    \"donphan\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/donphan\"\r\n    },\r\n    {\r\n        \"num\": 233,\r\n        \"name\": \"Porygon2\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Porygon2\",\r\n                \"description\": \"Porygon2 is a Normal type Pokémon introduced in Generation 2. It is known as the Virtual Pokémon.\",\r\n                \"image\": \"images/porygon2.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Virtual Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 32.5,\r\n                \"abilities\": [\r\n                    \"Trace\",\r\n                    \"Download\",\r\n                    \"Analytic\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 515,\r\n                    \"hp\": 85,\r\n                    \"attack\": 80,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"porygon\",\r\n                    \"porygon2\",\r\n                    \"porygon-z\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/porygon2\"\r\n    },\r\n    {\r\n        \"num\": 234,\r\n        \"name\": \"Stantler\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Stantler\",\r\n                \"description\": \"Stantler is a Normal type Pokémon introduced in Generation 2. It is known as the Big Horn Pokémon.\",\r\n                \"image\": \"images/stantler.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Big Horn Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 71.2,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Frisk\",\r\n                    \"Sap Sipper\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 465,\r\n                    \"hp\": 73,\r\n                    \"attack\": 95,\r\n                    \"defense\": 62,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/stantler\"\r\n    },\r\n    {\r\n        \"num\": 235,\r\n        \"name\": \"Smeargle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Smeargle\",\r\n                \"description\": \"Smeargle is a Normal type Pokémon introduced in Generation 2. It is known as the Painter Pokémon.\",\r\n                \"image\": \"images/smeargle.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Painter Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 58,\r\n                \"abilities\": [\r\n                    \"Own Tempo\",\r\n                    \"Technician\",\r\n                    \"Moody\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 250,\r\n                    \"hp\": 55,\r\n                    \"attack\": 20,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 20,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/smeargle\"\r\n    },\r\n    {\r\n        \"num\": 236,\r\n        \"name\": \"Tyrogue\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tyrogue\",\r\n                \"description\": \"Tyrogue is a Fighting type Pokémon introduced in Generation 2. It is known as the Scuffle Pokémon.\",\r\n                \"image\": \"images/tyrogue.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Scuffle Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 21,\r\n                \"abilities\": [\r\n                    \"Guts\",\r\n                    \"Steadfast\",\r\n                    \"Vital Spirit\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 210,\r\n                    \"hp\": 35,\r\n                    \"attack\": 35,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"tyrogue\",\r\n                    \"hitmonlee\",\r\n                    \"hitmonchan\",\r\n                    \"hitmontop\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tyrogue\"\r\n    },\r\n    {\r\n        \"num\": 237,\r\n        \"name\": \"Hitmontop\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Hitmontop\",\r\n                \"description\": \"Hitmontop is a Fighting type Pokémon introduced in Generation 2. It is known as the Handstand Pokémon.\",\r\n                \"image\": \"images/hitmontop.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Handstand Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 48,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Technician\",\r\n                    \"Steadfast\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 455,\r\n                    \"hp\": 50,\r\n                    \"attack\": 95,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"tyrogue\",\r\n                    \"hitmonlee\",\r\n                    \"hitmonchan\",\r\n                    \"hitmontop\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/hitmontop\"\r\n    },\r\n    {\r\n        \"num\": 238,\r\n        \"name\": \"Smoochum\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Smoochum\",\r\n                \"description\": \"Smoochum is an Ice/Psychic type Pokémon introduced in Generation 2. It is known as the Kiss Pokémon.\",\r\n                \"image\": \"images/smoochum.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Kiss Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 6,\r\n                \"abilities\": [\r\n                    \"Oblivious\",\r\n                    \"Forewarn\",\r\n                    \"Hydration\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 45,\r\n                    \"attack\": 30,\r\n                    \"defense\": 15,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"smoochum\",\r\n                    \"jynx\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/smoochum\"\r\n    },\r\n    {\r\n        \"num\": 239,\r\n        \"name\": \"Elekid\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Elekid\",\r\n                \"description\": \"Elekid is an Electric type Pokémon introduced in Generation 2. It is known as the Electric Pokémon.\",\r\n                \"image\": \"images/elekid.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Electric Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 23.5,\r\n                \"abilities\": [\r\n                    \"Static\",\r\n                    \"Vital Spirit\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 360,\r\n                    \"hp\": 45,\r\n                    \"attack\": 63,\r\n                    \"defense\": 37,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"elekid\",\r\n                    \"electabuzz\",\r\n                    \"electivire\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/elekid\"\r\n    },\r\n    {\r\n        \"num\": 240,\r\n        \"name\": \"Magby\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Magby\",\r\n                \"description\": \"Magby is a Fire type Pokémon introduced in Generation 2. It is known as the Live Coal Pokémon.\",\r\n                \"image\": \"images/magby.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Live Coal Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 21.4,\r\n                \"abilities\": [\r\n                    \"Flame Body\",\r\n                    \"Vital Spirit\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 365,\r\n                    \"hp\": 45,\r\n                    \"attack\": 75,\r\n                    \"defense\": 37,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 83\r\n                },\r\n                \"evolutions\": [\r\n                    \"magby\",\r\n                    \"magmar\",\r\n                    \"magmortar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/magby\"\r\n    },\r\n    {\r\n        \"num\": 241,\r\n        \"name\": \"Miltank\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Miltank\",\r\n                \"description\": \"Miltank is a Normal type Pokémon introduced in Generation 2. It is known as the Milk Cow Pokémon.\",\r\n                \"image\": \"images/miltank.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Milk Cow Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 75.5,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Scrappy\",\r\n                    \"Sap Sipper\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 95,\r\n                    \"attack\": 80,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/miltank\"\r\n    },\r\n    {\r\n        \"num\": 242,\r\n        \"name\": \"Blissey\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Blissey\",\r\n                \"description\": \"Blissey is a Normal type Pokémon introduced in Generation 2. It is known as the Happiness Pokémon.\",\r\n                \"image\": \"images/blissey.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Happiness Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 46.8,\r\n                \"abilities\": [\r\n                    \"Natural Cure\",\r\n                    \"Serene Grace\",\r\n                    \"Healer\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 540,\r\n                    \"hp\": 255,\r\n                    \"attack\": 10,\r\n                    \"defense\": 10,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 135,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"happiny\",\r\n                    \"chansey\",\r\n                    \"blissey\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/blissey\"\r\n    },\r\n    {\r\n        \"num\": 243,\r\n        \"name\": \"Raikou\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Raikou\",\r\n                \"description\": \"Raikou is an Electric type Pokémon introduced in Generation 2. It is known as the Thunder Pokémon.\\nPrior to Generation 7, Raikou had Volt Absorb as its hidden ability.\",\r\n                \"image\": \"images/raikou.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Thunder Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 178,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Inner Focus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 90,\r\n                    \"attack\": 85,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 115,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 115\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/raikou\"\r\n    },\r\n    {\r\n        \"num\": 244,\r\n        \"name\": \"Entei\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Entei\",\r\n                \"description\": \"Entei is a Fire type Pokémon introduced in Generation 2. It is known as the Volcano Pokémon.\\nPrior to Generation 7, Entei had Flash Fire as its hidden ability.\",\r\n                \"image\": \"images/entei.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Volcano Pokémon\",\r\n                \"height\": 2.1,\r\n                \"weight\": 198,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Inner Focus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 115,\r\n                    \"attack\": 115,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/entei\"\r\n    },\r\n    {\r\n        \"num\": 245,\r\n        \"name\": \"Suicune\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Suicune\",\r\n                \"description\": \"Suicune is a Water type Pokémon introduced in Generation 2. It is known as the Aurora Pokémon.\\nPrior to Generation 7, Suicune has Water Absorb as its hidden ability.\",\r\n                \"image\": \"images/suicune.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Aurora Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 187,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Inner Focus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 100,\r\n                    \"attack\": 75,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 115,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/suicune\"\r\n    },\r\n    {\r\n        \"num\": 246,\r\n        \"name\": \"Larvitar\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Larvitar\",\r\n                \"description\": \"Larvitar is a Rock/Ground type Pokémon introduced in Generation 2. It is known as the Rock Skin Pokémon.\",\r\n                \"image\": \"images/larvitar.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Rock Skin Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 72,\r\n                \"abilities\": [\r\n                    \"Guts\",\r\n                    \"Sand Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 50,\r\n                    \"attack\": 64,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 41\r\n                },\r\n                \"evolutions\": [\r\n                    \"larvitar\",\r\n                    \"pupitar\",\r\n                    \"tyranitar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/larvitar\"\r\n    },\r\n    {\r\n        \"num\": 247,\r\n        \"name\": \"Pupitar\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pupitar\",\r\n                \"description\": \"Pupitar is a Rock/Ground type Pokémon introduced in Generation 2. It is known as the Hard Shell Pokémon.\",\r\n                \"image\": \"images/pupitar.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Hard Shell Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 152,\r\n                \"abilities\": [\r\n                    \"Shed Skin\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 410,\r\n                    \"hp\": 70,\r\n                    \"attack\": 84,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 51\r\n                },\r\n                \"evolutions\": [\r\n                    \"larvitar\",\r\n                    \"pupitar\",\r\n                    \"tyranitar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pupitar\"\r\n    },\r\n    {\r\n        \"num\": 248,\r\n        \"name\": \"Tyranitar\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tyranitar\",\r\n                \"description\": \"Tyranitar is a Rock/Dark type Pokémon introduced in Generation 2. It is known as the Armor Pokémon.\\nTyranitar has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/tyranitar.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Armor Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 202,\r\n                \"abilities\": [\r\n                    \"Sand Stream\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 100,\r\n                    \"attack\": 134,\r\n                    \"defense\": 110,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 61\r\n                },\r\n                \"evolutions\": [\r\n                    \"larvitar\",\r\n                    \"pupitar\",\r\n                    \"tyranitar\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Tyranitar\",\r\n                \"description\": \"Tyranitar is a Rock/Dark type Pokémon introduced in Generation 2. It is known as the Armor Pokémon.\\nTyranitar has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/tyranitar-mega.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Armor Pokémon\",\r\n                \"height\": 2.5,\r\n                \"weight\": 255,\r\n                \"abilities\": [\r\n                    \"Sand Stream\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 700,\r\n                    \"hp\": 100,\r\n                    \"attack\": 164,\r\n                    \"defense\": 150,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 120,\r\n                    \"speed\": 71\r\n                },\r\n                \"evolutions\": [\r\n                    \"larvitar\",\r\n                    \"pupitar\",\r\n                    \"tyranitar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tyranitar\"\r\n    },\r\n    {\r\n        \"num\": 249,\r\n        \"name\": \"Lugia\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lugia\",\r\n                \"description\": \"Lugia is a Psychic/Flying type Pokémon introduced in Generation 2. It is known as the Diving Pokémon.\",\r\n                \"image\": \"images/lugia.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Diving Pokémon\",\r\n                \"height\": 5.2,\r\n                \"weight\": 216,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Multiscale\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 106,\r\n                    \"attack\": 90,\r\n                    \"defense\": 130,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 154,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lugia\"\r\n    },\r\n    {\r\n        \"num\": 250,\r\n        \"name\": \"Ho-oh\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ho-oh\",\r\n                \"description\": \"Ho-oh is a Fire/Flying type Pokémon introduced in Generation 2. It is known as the Rainbow Pokémon.\",\r\n                \"image\": \"images/ho-oh.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Rainbow Pokémon\",\r\n                \"height\": 3.8,\r\n                \"weight\": 199,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 106,\r\n                    \"attack\": 130,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 154,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ho-oh\"\r\n    },\r\n    {\r\n        \"num\": 251,\r\n        \"name\": \"Celebi\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Celebi\",\r\n                \"description\": \"Celebi is a Psychic/Grass type Pokémon introduced in Generation 2. It is known as the Time Travel Pokémon.\",\r\n                \"image\": \"images/celebi.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Time Travel Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 5,\r\n                \"abilities\": [\r\n                    \"Natural Cure\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 100,\r\n                    \"attack\": 100,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/celebi\"\r\n    },\r\n    {\r\n        \"num\": 252,\r\n        \"name\": \"Treecko\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Treecko\",\r\n                \"description\": \"Treecko is a Grass type Pokémon introduced in Generation 3. It is known as the Wood Gecko Pokémon.\",\r\n                \"image\": \"images/treecko.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Wood Gecko Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 5,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Unburden\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 310,\r\n                    \"hp\": 40,\r\n                    \"attack\": 45,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"treecko\",\r\n                    \"grovyle\",\r\n                    \"sceptile\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/treecko\"\r\n    },\r\n    {\r\n        \"num\": 253,\r\n        \"name\": \"Grovyle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Grovyle\",\r\n                \"description\": \"Grovyle is a Grass type Pokémon introduced in Generation 3. It is known as the Wood Gecko Pokémon.\",\r\n                \"image\": \"images/grovyle.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Wood Gecko Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 21.6,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Unburden\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 50,\r\n                    \"attack\": 65,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"treecko\",\r\n                    \"grovyle\",\r\n                    \"sceptile\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/grovyle\"\r\n    },\r\n    {\r\n        \"num\": 254,\r\n        \"name\": \"Sceptile\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sceptile\",\r\n                \"description\": \"Sceptile is a Grass type Pokémon introduced in Generation 3. It is known as the Forest Pokémon.\\nSceptile has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/sceptile.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Forest Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 52.2,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Unburden\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 70,\r\n                    \"attack\": 85,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 120\r\n                },\r\n                \"evolutions\": [\r\n                    \"treecko\",\r\n                    \"grovyle\",\r\n                    \"sceptile\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Sceptile\",\r\n                \"description\": \"Sceptile is a Grass type Pokémon introduced in Generation 3. It is known as the Forest Pokémon.\\nSceptile has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/sceptile-mega.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Forest Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 55.2,\r\n                \"abilities\": [\r\n                    \"Lightning Rod\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 630,\r\n                    \"hp\": 70,\r\n                    \"attack\": 110,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 145,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 145\r\n                },\r\n                \"evolutions\": [\r\n                    \"treecko\",\r\n                    \"grovyle\",\r\n                    \"sceptile\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sceptile\"\r\n    },\r\n    {\r\n        \"num\": 255,\r\n        \"name\": \"Torchic\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Torchic\",\r\n                \"description\": \"Torchic is a Fire type Pokémon introduced in Generation 3. It is known as the Chick Pokémon.\",\r\n                \"image\": \"images/torchic.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Chick Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 2.5,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Speed Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 310,\r\n                    \"hp\": 45,\r\n                    \"attack\": 60,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"torchic\",\r\n                    \"combusken\",\r\n                    \"blaziken\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/torchic\"\r\n    },\r\n    {\r\n        \"num\": 256,\r\n        \"name\": \"Combusken\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Combusken\",\r\n                \"description\": \"Combusken is a Fire/Fighting type Pokémon introduced in Generation 3. It is known as the Young Fowl Pokémon.\",\r\n                \"image\": \"images/combusken.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Young Fowl Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 19.5,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Speed Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 60,\r\n                    \"attack\": 85,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"torchic\",\r\n                    \"combusken\",\r\n                    \"blaziken\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/combusken\"\r\n    },\r\n    {\r\n        \"num\": 257,\r\n        \"name\": \"Blaziken\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Blaziken\",\r\n                \"description\": \"Blaziken is a Fire/Fighting type Pokémon introduced in Generation 3. It is known as the Blaze Pokémon.\\nBlaziken has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/blaziken.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Blaze Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 52,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Speed Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 80,\r\n                    \"attack\": 120,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"torchic\",\r\n                    \"combusken\",\r\n                    \"blaziken\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Blaziken\",\r\n                \"description\": \"Blaziken is a Fire/Fighting type Pokémon introduced in Generation 3. It is known as the Blaze Pokémon.\\nBlaziken has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/blaziken-mega.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Blaze Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 52,\r\n                \"abilities\": [\r\n                    \"Speed Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 630,\r\n                    \"hp\": 80,\r\n                    \"attack\": 160,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 130,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"torchic\",\r\n                    \"combusken\",\r\n                    \"blaziken\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/blaziken\"\r\n    },\r\n    {\r\n        \"num\": 258,\r\n        \"name\": \"Mudkip\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mudkip\",\r\n                \"description\": \"Mudkip is a Water type Pokémon introduced in Generation 3. It is known as the Mud Fish Pokémon.\",\r\n                \"image\": \"images/mudkip.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Mud Fish Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 7.6,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Damp\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 310,\r\n                    \"hp\": 50,\r\n                    \"attack\": 70,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"mudkip\",\r\n                    \"marshtomp\",\r\n                    \"swampert\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mudkip\"\r\n    },\r\n    {\r\n        \"num\": 259,\r\n        \"name\": \"Marshtomp\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Marshtomp\",\r\n                \"description\": \"Marshtomp is a Water/Ground type Pokémon introduced in Generation 3. It is known as the Mud Fish Pokémon.\",\r\n                \"image\": \"images/marshtomp.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Mud Fish Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 28,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Damp\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 70,\r\n                    \"attack\": 85,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"mudkip\",\r\n                    \"marshtomp\",\r\n                    \"swampert\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/marshtomp\"\r\n    },\r\n    {\r\n        \"num\": 260,\r\n        \"name\": \"Swampert\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Swampert\",\r\n                \"description\": \"Swampert is a Water/Ground type Pokémon introduced in Generation 3. It is known as the Mud Fish Pokémon.\\nSwampert has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/swampert.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Mud Fish Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 81.9,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Damp\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 535,\r\n                    \"hp\": 100,\r\n                    \"attack\": 110,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"mudkip\",\r\n                    \"marshtomp\",\r\n                    \"swampert\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Swampert\",\r\n                \"description\": \"Swampert is a Water/Ground type Pokémon introduced in Generation 3. It is known as the Mud Fish Pokémon.\\nSwampert has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/swampert-mega.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Mud Fish Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 102,\r\n                \"abilities\": [\r\n                    \"Swift Swim\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 635,\r\n                    \"hp\": 100,\r\n                    \"attack\": 150,\r\n                    \"defense\": 110,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"mudkip\",\r\n                    \"marshtomp\",\r\n                    \"swampert\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/swampert\"\r\n    },\r\n    {\r\n        \"num\": 261,\r\n        \"name\": \"Poochyena\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Poochyena\",\r\n                \"description\": \"Poochyena is a Dark type Pokémon introduced in Generation 3. It is known as the Bite Pokémon.\",\r\n                \"image\": \"images/poochyena.jpg\",\r\n                \"types\": [\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Bite Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 13.6,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Quick Feet\",\r\n                    \"Rattled\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 220,\r\n                    \"hp\": 35,\r\n                    \"attack\": 55,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"poochyena\",\r\n                    \"mightyena\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/poochyena\"\r\n    },\r\n    {\r\n        \"num\": 262,\r\n        \"name\": \"Mightyena\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mightyena\",\r\n                \"description\": \"Mightyena is a Dark type Pokémon introduced in Generation 3. It is known as the Bite Pokémon.\",\r\n                \"image\": \"images/mightyena.jpg\",\r\n                \"types\": [\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Bite Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 37,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Quick Feet\",\r\n                    \"Moxie\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 70,\r\n                    \"attack\": 90,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"poochyena\",\r\n                    \"mightyena\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mightyena\"\r\n    },\r\n    {\r\n        \"num\": 263,\r\n        \"name\": \"Zigzagoon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Zigzagoon\",\r\n                \"description\": \"Zigzagoon is a Normal type Pokémon introduced in Generation 3. It is known as the TinyRaccoon Pokémon.\",\r\n                \"image\": \"images/zigzagoon.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"TinyRaccoon Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 17.5,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Gluttony\",\r\n                    \"Quick Feet\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 240,\r\n                    \"hp\": 38,\r\n                    \"attack\": 30,\r\n                    \"defense\": 41,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 41,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"zigzagoon\",\r\n                    \"linoone\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/zigzagoon\"\r\n    },\r\n    {\r\n        \"num\": 264,\r\n        \"name\": \"Linoone\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Linoone\",\r\n                \"description\": \"Linoone is a Normal type Pokémon introduced in Generation 3. It is known as the Rushing Pokémon.\",\r\n                \"image\": \"images/linoone.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Rushing Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 32.5,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Gluttony\",\r\n                    \"Quick Feet\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 78,\r\n                    \"attack\": 70,\r\n                    \"defense\": 61,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 61,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"zigzagoon\",\r\n                    \"linoone\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/linoone\"\r\n    },\r\n    {\r\n        \"num\": 265,\r\n        \"name\": \"Wurmple\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Wurmple\",\r\n                \"description\": \"Wurmple is a Bug type Pokémon introduced in Generation 3. It is known as the Worm Pokémon.\",\r\n                \"image\": \"images/wurmple.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Worm Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 3.6,\r\n                \"abilities\": [\r\n                    \"Shield Dust\",\r\n                    \"Run Away\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 195,\r\n                    \"hp\": 45,\r\n                    \"attack\": 45,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 20,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"wurmple\",\r\n                    \"silcoon\",\r\n                    \"beautifly\",\r\n                    \"cascoon\",\r\n                    \"dustox\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/wurmple\"\r\n    },\r\n    {\r\n        \"num\": 266,\r\n        \"name\": \"Silcoon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Silcoon\",\r\n                \"description\": \"Silcoon is a Bug type Pokémon introduced in Generation 3. It is known as the Cocoon Pokémon.\",\r\n                \"image\": \"images/silcoon.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Cocoon Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 10,\r\n                \"abilities\": [\r\n                    \"Shed Skin\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 205,\r\n                    \"hp\": 50,\r\n                    \"attack\": 35,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 25,\r\n                    \"speed\": 15\r\n                },\r\n                \"evolutions\": [\r\n                    \"wurmple\",\r\n                    \"silcoon\",\r\n                    \"beautifly\",\r\n                    \"cascoon\",\r\n                    \"dustox\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/silcoon\"\r\n    },\r\n    {\r\n        \"num\": 267,\r\n        \"name\": \"Beautifly\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Beautifly\",\r\n                \"description\": \"Beautifly is a Bug/Flying type Pokémon introduced in Generation 3. It is known as the Butterfly Pokémon.\",\r\n                \"image\": \"images/beautifly.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Butterfly Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 28.4,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Rivalry\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 395,\r\n                    \"hp\": 60,\r\n                    \"attack\": 70,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"wurmple\",\r\n                    \"silcoon\",\r\n                    \"beautifly\",\r\n                    \"cascoon\",\r\n                    \"dustox\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/beautifly\"\r\n    },\r\n    {\r\n        \"num\": 268,\r\n        \"name\": \"Cascoon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cascoon\",\r\n                \"description\": \"Cascoon is a Bug type Pokémon introduced in Generation 3. It is known as the Cocoon Pokémon.\",\r\n                \"image\": \"images/cascoon.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Cocoon Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 11.5,\r\n                \"abilities\": [\r\n                    \"Shed Skin\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 205,\r\n                    \"hp\": 50,\r\n                    \"attack\": 35,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 25,\r\n                    \"speed\": 15\r\n                },\r\n                \"evolutions\": [\r\n                    \"wurmple\",\r\n                    \"silcoon\",\r\n                    \"beautifly\",\r\n                    \"cascoon\",\r\n                    \"dustox\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cascoon\"\r\n    },\r\n    {\r\n        \"num\": 269,\r\n        \"name\": \"Dustox\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dustox\",\r\n                \"description\": \"Dustox is a Bug/Poison type Pokémon introduced in Generation 3. It is known as the Poison Moth Pokémon.\",\r\n                \"image\": \"images/dustox.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Poison Moth Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 31.6,\r\n                \"abilities\": [\r\n                    \"Shield Dust\",\r\n                    \"Compound Eyes\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 385,\r\n                    \"hp\": 60,\r\n                    \"attack\": 50,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"wurmple\",\r\n                    \"silcoon\",\r\n                    \"beautifly\",\r\n                    \"cascoon\",\r\n                    \"dustox\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dustox\"\r\n    },\r\n    {\r\n        \"num\": 270,\r\n        \"name\": \"Lotad\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lotad\",\r\n                \"description\": \"Lotad is a Water/Grass type Pokémon introduced in Generation 3. It is known as the Water Weed Pokémon.\",\r\n                \"image\": \"images/lotad.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Water Weed Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 2.6,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Rain Dish\",\r\n                    \"Own Tempo\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 220,\r\n                    \"hp\": 40,\r\n                    \"attack\": 30,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"lotad\",\r\n                    \"lombre\",\r\n                    \"ludicolo\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lotad\"\r\n    },\r\n    {\r\n        \"num\": 271,\r\n        \"name\": \"Lombre\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lombre\",\r\n                \"description\": \"Lombre is a Water/Grass type Pokémon introduced in Generation 3. It is known as the Jolly Pokémon.\",\r\n                \"image\": \"images/lombre.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Jolly Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 32.5,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Rain Dish\",\r\n                    \"Own Tempo\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 340,\r\n                    \"hp\": 60,\r\n                    \"attack\": 50,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"lotad\",\r\n                    \"lombre\",\r\n                    \"ludicolo\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lombre\"\r\n    },\r\n    {\r\n        \"num\": 272,\r\n        \"name\": \"Ludicolo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ludicolo\",\r\n                \"description\": \"Ludicolo is a Water/Grass type Pokémon introduced in Generation 3. It is known as the Carefree Pokémon.\",\r\n                \"image\": \"images/ludicolo.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Carefree Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 55,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Rain Dish\",\r\n                    \"Own Tempo\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 80,\r\n                    \"attack\": 70,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"lotad\",\r\n                    \"lombre\",\r\n                    \"ludicolo\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ludicolo\"\r\n    },\r\n    {\r\n        \"num\": 273,\r\n        \"name\": \"Seedot\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Seedot\",\r\n                \"description\": \"Seedot is a Grass type Pokémon introduced in Generation 3. It is known as the Acorn Pokémon.\",\r\n                \"image\": \"images/seedot.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Acorn Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 4,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Early Bird\",\r\n                    \"Pickpocket\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 220,\r\n                    \"hp\": 40,\r\n                    \"attack\": 40,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"seedot\",\r\n                    \"nuzleaf\",\r\n                    \"shiftry\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/seedot\"\r\n    },\r\n    {\r\n        \"num\": 274,\r\n        \"name\": \"Nuzleaf\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Nuzleaf\",\r\n                \"description\": \"Nuzleaf is a Grass/Dark type Pokémon introduced in Generation 3. It is known as the Wily Pokémon.\",\r\n                \"image\": \"images/nuzleaf.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Wily Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 28,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Early Bird\",\r\n                    \"Pickpocket\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 340,\r\n                    \"hp\": 70,\r\n                    \"attack\": 70,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"seedot\",\r\n                    \"nuzleaf\",\r\n                    \"shiftry\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/nuzleaf\"\r\n    },\r\n    {\r\n        \"num\": 275,\r\n        \"name\": \"Shiftry\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Shiftry\",\r\n                \"description\": \"Shiftry is a Grass/Dark type Pokémon introduced in Generation 3. It is known as the Wicked Pokémon.\",\r\n                \"image\": \"images/shiftry.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Wicked Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 59.6,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Early Bird\",\r\n                    \"Pickpocket\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 90,\r\n                    \"attack\": 100,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"seedot\",\r\n                    \"nuzleaf\",\r\n                    \"shiftry\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/shiftry\"\r\n    },\r\n    {\r\n        \"num\": 276,\r\n        \"name\": \"Taillow\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Taillow\",\r\n                \"description\": \"Taillow is a Normal/Flying type Pokémon introduced in Generation 3. It is known as the TinySwallow Pokémon.\",\r\n                \"image\": \"images/taillow.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"TinySwallow Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 2.3,\r\n                \"abilities\": [\r\n                    \"Guts\",\r\n                    \"Scrappy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 270,\r\n                    \"hp\": 40,\r\n                    \"attack\": 55,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"taillow\",\r\n                    \"swellow\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/taillow\"\r\n    },\r\n    {\r\n        \"num\": 277,\r\n        \"name\": \"Swellow\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Swellow\",\r\n                \"description\": \"Swellow is a Normal/Flying type Pokémon introduced in Generation 3. It is known as the Swallow Pokémon.\",\r\n                \"image\": \"images/swellow.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Swallow Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 19.8,\r\n                \"abilities\": [\r\n                    \"Guts\",\r\n                    \"Scrappy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 455,\r\n                    \"hp\": 60,\r\n                    \"attack\": 85,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 125\r\n                },\r\n                \"evolutions\": [\r\n                    \"taillow\",\r\n                    \"swellow\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/swellow\"\r\n    },\r\n    {\r\n        \"num\": 278,\r\n        \"name\": \"Wingull\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Wingull\",\r\n                \"description\": \"Wingull is a Water/Flying type Pokémon introduced in Generation 3. It is known as the Seagull Pokémon.\",\r\n                \"image\": \"images/wingull.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Seagull Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 9.5,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Hydration\",\r\n                    \"Rain Dish\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 270,\r\n                    \"hp\": 40,\r\n                    \"attack\": 30,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"wingull\",\r\n                    \"pelipper\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/wingull\"\r\n    },\r\n    {\r\n        \"num\": 279,\r\n        \"name\": \"Pelipper\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pelipper\",\r\n                \"description\": \"Pelipper is a Water/Flying type Pokémon introduced in Generation 3. It is known as the Water Bird Pokémon.\",\r\n                \"image\": \"images/pelipper.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Water Bird Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 28,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Drizzle\",\r\n                    \"Rain Dish\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 440,\r\n                    \"hp\": 60,\r\n                    \"attack\": 50,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"wingull\",\r\n                    \"pelipper\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pelipper\"\r\n    },\r\n    {\r\n        \"num\": 280,\r\n        \"name\": \"Ralts\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ralts\",\r\n                \"description\": \"Ralts is a Psychic/Fairy type Pokémon introduced in Generation 3. It is known as the Feeling Pokémon.\",\r\n                \"image\": \"images/ralts.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Feeling Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 6.6,\r\n                \"abilities\": [\r\n                    \"Synchronize\",\r\n                    \"Trace\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 198,\r\n                    \"hp\": 28,\r\n                    \"attack\": 25,\r\n                    \"defense\": 25,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"ralts\",\r\n                    \"kirlia\",\r\n                    \"gardevoir\",\r\n                    \"gallade\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ralts\"\r\n    },\r\n    {\r\n        \"num\": 281,\r\n        \"name\": \"Kirlia\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kirlia\",\r\n                \"description\": \"Kirlia is a Psychic/Fairy type Pokémon introduced in Generation 3. It is known as the Emotion Pokémon.\",\r\n                \"image\": \"images/kirlia.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Emotion Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 20.2,\r\n                \"abilities\": [\r\n                    \"Synchronize\",\r\n                    \"Trace\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 278,\r\n                    \"hp\": 38,\r\n                    \"attack\": 35,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"ralts\",\r\n                    \"kirlia\",\r\n                    \"gardevoir\",\r\n                    \"gallade\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kirlia\"\r\n    },\r\n    {\r\n        \"num\": 282,\r\n        \"name\": \"Gardevoir\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gardevoir\",\r\n                \"description\": \"Gardevoir is a Psychic/Fairy type Pokémon introduced in Generation 3. It is known as the Embrace Pokémon.\\nGardevoir has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/gardevoir.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Embrace Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 48.4,\r\n                \"abilities\": [\r\n                    \"Synchronize\",\r\n                    \"Trace\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 518,\r\n                    \"hp\": 68,\r\n                    \"attack\": 65,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 115,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"ralts\",\r\n                    \"kirlia\",\r\n                    \"gardevoir\",\r\n                    \"gallade\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Gardevoir\",\r\n                \"description\": \"Gardevoir is a Psychic/Fairy type Pokémon introduced in Generation 3. It is known as the Embrace Pokémon.\\nGardevoir has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/gardevoir-mega.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Embrace Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 48.4,\r\n                \"abilities\": [\r\n                    \"Pixilate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 618,\r\n                    \"hp\": 68,\r\n                    \"attack\": 85,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 165,\r\n                    \"speedDefense\": 135,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"ralts\",\r\n                    \"kirlia\",\r\n                    \"gardevoir\",\r\n                    \"gallade\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gardevoir\"\r\n    },\r\n    {\r\n        \"num\": 283,\r\n        \"name\": \"Surskit\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Surskit\",\r\n                \"description\": \"Surskit is a Bug/Water type Pokémon introduced in Generation 3. It is known as the Pond Skater Pokémon.\",\r\n                \"image\": \"images/surskit.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Pond Skater Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 1.7,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Rain Dish\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 269,\r\n                    \"hp\": 40,\r\n                    \"attack\": 30,\r\n                    \"defense\": 32,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 52,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"surskit\",\r\n                    \"masquerain\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/surskit\"\r\n    },\r\n    {\r\n        \"num\": 284,\r\n        \"name\": \"Masquerain\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Masquerain\",\r\n                \"description\": \"Masquerain is a Bug/Flying type Pokémon introduced in Generation 3. It is known as the Eyeball Pokémon.\",\r\n                \"image\": \"images/masquerain.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Eyeball Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 3.6,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 454,\r\n                    \"hp\": 70,\r\n                    \"attack\": 60,\r\n                    \"defense\": 62,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 82,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"surskit\",\r\n                    \"masquerain\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/masquerain\"\r\n    },\r\n    {\r\n        \"num\": 285,\r\n        \"name\": \"Shroomish\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Shroomish\",\r\n                \"description\": \"Shroomish is a Grass type Pokémon introduced in Generation 3. It is known as the Mushroom Pokémon.\",\r\n                \"image\": \"images/shroomish.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Mushroom Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 4.5,\r\n                \"abilities\": [\r\n                    \"Effect Spore\",\r\n                    \"Poison Heal\",\r\n                    \"Quick Feet\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 295,\r\n                    \"hp\": 60,\r\n                    \"attack\": 40,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"shroomish\",\r\n                    \"breloom\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/shroomish\"\r\n    },\r\n    {\r\n        \"num\": 286,\r\n        \"name\": \"Breloom\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Breloom\",\r\n                \"description\": \"Breloom is a Grass/Fighting type Pokémon introduced in Generation 3. It is known as the Mushroom Pokémon.\",\r\n                \"image\": \"images/breloom.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Mushroom Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 39.2,\r\n                \"abilities\": [\r\n                    \"Effect Spore\",\r\n                    \"Poison Heal\",\r\n                    \"Technician\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 460,\r\n                    \"hp\": 60,\r\n                    \"attack\": 130,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"shroomish\",\r\n                    \"breloom\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/breloom\"\r\n    },\r\n    {\r\n        \"num\": 287,\r\n        \"name\": \"Slakoth\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Slakoth\",\r\n                \"description\": \"Slakoth is a Normal type Pokémon introduced in Generation 3. It is known as the Slacker Pokémon.\",\r\n                \"image\": \"images/slakoth.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Slacker Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 24,\r\n                \"abilities\": [\r\n                    \"Truant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 280,\r\n                    \"hp\": 60,\r\n                    \"attack\": 60,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"slakoth\",\r\n                    \"vigoroth\",\r\n                    \"slaking\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/slakoth\"\r\n    },\r\n    {\r\n        \"num\": 288,\r\n        \"name\": \"Vigoroth\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Vigoroth\",\r\n                \"description\": \"Vigoroth is a Normal type Pokémon introduced in Generation 3. It is known as the Wild Monkey Pokémon.\",\r\n                \"image\": \"images/vigoroth.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Wild Monkey Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 46.5,\r\n                \"abilities\": [\r\n                    \"Vital Spirit\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 440,\r\n                    \"hp\": 80,\r\n                    \"attack\": 80,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"slakoth\",\r\n                    \"vigoroth\",\r\n                    \"slaking\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/vigoroth\"\r\n    },\r\n    {\r\n        \"num\": 289,\r\n        \"name\": \"Slaking\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Slaking\",\r\n                \"description\": \"Slaking is a Normal type Pokémon introduced in Generation 3. It is known as the Lazy Pokémon.\",\r\n                \"image\": \"images/slaking.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Lazy Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 130.5,\r\n                \"abilities\": [\r\n                    \"Truant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 670,\r\n                    \"hp\": 150,\r\n                    \"attack\": 160,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"slakoth\",\r\n                    \"vigoroth\",\r\n                    \"slaking\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/slaking\"\r\n    },\r\n    {\r\n        \"num\": 290,\r\n        \"name\": \"Nincada\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Nincada\",\r\n                \"description\": \"Nincada is a Bug/Ground type Pokémon introduced in Generation 3. It is known as the Trainee Pokémon.\",\r\n                \"image\": \"images/nincada.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Trainee Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 5.5,\r\n                \"abilities\": [\r\n                    \"Compound Eyes\",\r\n                    \"Run Away\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 266,\r\n                    \"hp\": 31,\r\n                    \"attack\": 45,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"nincada\",\r\n                    \"ninjask\",\r\n                    \"ninjask\",\r\n                    \"shedinja\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/nincada\"\r\n    },\r\n    {\r\n        \"num\": 291,\r\n        \"name\": \"Ninjask\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ninjask\",\r\n                \"description\": \"Ninjask is a Bug/Flying type Pokémon introduced in Generation 3. It is known as the Ninja Pokémon.\",\r\n                \"image\": \"images/ninjask.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Ninja Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 12,\r\n                \"abilities\": [\r\n                    \"Speed Boost\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 456,\r\n                    \"hp\": 61,\r\n                    \"attack\": 90,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 160\r\n                },\r\n                \"evolutions\": [\r\n                    \"nincada\",\r\n                    \"ninjask\",\r\n                    \"ninjask\",\r\n                    \"shedinja\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ninjask\"\r\n    },\r\n    {\r\n        \"num\": 292,\r\n        \"name\": \"Shedinja\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Shedinja\",\r\n                \"description\": \"Shedinja is a Bug/Ghost type Pokémon introduced in Generation 3. It is known as the Shed Pokémon.\",\r\n                \"image\": \"images/shedinja.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Shed Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 1.2,\r\n                \"abilities\": [\r\n                    \"Wonder Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 236,\r\n                    \"hp\": 1,\r\n                    \"attack\": 90,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"nincada\",\r\n                    \"ninjask\",\r\n                    \"ninjask\",\r\n                    \"shedinja\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/shedinja\"\r\n    },\r\n    {\r\n        \"num\": 293,\r\n        \"name\": \"Whismur\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Whismur\",\r\n                \"description\": \"Whismur is a Normal type Pokémon introduced in Generation 3. It is known as the Whisper Pokémon.\",\r\n                \"image\": \"images/whismur.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Whisper Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 16.3,\r\n                \"abilities\": [\r\n                    \"Soundproof\",\r\n                    \"Rattled\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 240,\r\n                    \"hp\": 64,\r\n                    \"attack\": 51,\r\n                    \"defense\": 23,\r\n                    \"speedAttack\": 51,\r\n                    \"speedDefense\": 23,\r\n                    \"speed\": 28\r\n                },\r\n                \"evolutions\": [\r\n                    \"whismur\",\r\n                    \"loudred\",\r\n                    \"exploud\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/whismur\"\r\n    },\r\n    {\r\n        \"num\": 294,\r\n        \"name\": \"Loudred\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Loudred\",\r\n                \"description\": \"Loudred is a Normal type Pokémon introduced in Generation 3. It is known as the Big Voice Pokémon.\",\r\n                \"image\": \"images/loudred.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Big Voice Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 40.5,\r\n                \"abilities\": [\r\n                    \"Soundproof\",\r\n                    \"Scrappy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 360,\r\n                    \"hp\": 84,\r\n                    \"attack\": 71,\r\n                    \"defense\": 43,\r\n                    \"speedAttack\": 71,\r\n                    \"speedDefense\": 43,\r\n                    \"speed\": 48\r\n                },\r\n                \"evolutions\": [\r\n                    \"whismur\",\r\n                    \"loudred\",\r\n                    \"exploud\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/loudred\"\r\n    },\r\n    {\r\n        \"num\": 295,\r\n        \"name\": \"Exploud\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Exploud\",\r\n                \"description\": \"Exploud is a Normal type Pokémon introduced in Generation 3. It is known as the Loud Noise Pokémon.\",\r\n                \"image\": \"images/exploud.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Loud Noise Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 84,\r\n                \"abilities\": [\r\n                    \"Soundproof\",\r\n                    \"Scrappy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 104,\r\n                    \"attack\": 91,\r\n                    \"defense\": 63,\r\n                    \"speedAttack\": 91,\r\n                    \"speedDefense\": 73,\r\n                    \"speed\": 68\r\n                },\r\n                \"evolutions\": [\r\n                    \"whismur\",\r\n                    \"loudred\",\r\n                    \"exploud\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/exploud\"\r\n    },\r\n    {\r\n        \"num\": 296,\r\n        \"name\": \"Makuhita\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Makuhita\",\r\n                \"description\": \"Makuhita is a Fighting type Pokémon introduced in Generation 3. It is known as the Guts Pokémon.\",\r\n                \"image\": \"images/makuhita.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Guts Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 86.4,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Guts\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 237,\r\n                    \"hp\": 72,\r\n                    \"attack\": 60,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 20,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 25\r\n                },\r\n                \"evolutions\": [\r\n                    \"makuhita\",\r\n                    \"hariyama\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/makuhita\"\r\n    },\r\n    {\r\n        \"num\": 297,\r\n        \"name\": \"Hariyama\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Hariyama\",\r\n                \"description\": \"Hariyama is a Fighting type Pokémon introduced in Generation 3. It is known as the Arm Thrust Pokémon.\",\r\n                \"image\": \"images/hariyama.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Arm Thrust Pokémon\",\r\n                \"height\": 2.3,\r\n                \"weight\": 253.8,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Guts\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 474,\r\n                    \"hp\": 144,\r\n                    \"attack\": 120,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"makuhita\",\r\n                    \"hariyama\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/hariyama\"\r\n    },\r\n    {\r\n        \"num\": 298,\r\n        \"name\": \"Azurill\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Azurill\",\r\n                \"description\": \"Azurill is a Normal/Fairy type Pokémon introduced in Generation 3. It is known as the Polka Dot Pokémon.\",\r\n                \"image\": \"images/azurill.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Polka Dot Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 2,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Huge Power\",\r\n                    \"Sap Sipper\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 190,\r\n                    \"hp\": 50,\r\n                    \"attack\": 20,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 20,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"azurill\",\r\n                    \"marill\",\r\n                    \"azumarill\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/azurill\"\r\n    },\r\n    {\r\n        \"num\": 299,\r\n        \"name\": \"Nosepass\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Nosepass\",\r\n                \"description\": \"Nosepass is a Rock type Pokémon introduced in Generation 3. It is known as the Compass Pokémon.\",\r\n                \"image\": \"images/nosepass.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Compass Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 97,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Magnet Pull\",\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 375,\r\n                    \"hp\": 30,\r\n                    \"attack\": 45,\r\n                    \"defense\": 135,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"nosepass\",\r\n                    \"probopass\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/nosepass\"\r\n    },\r\n    {\r\n        \"num\": 300,\r\n        \"name\": \"Skitty\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Skitty\",\r\n                \"description\": \"Skitty is a Normal type Pokémon introduced in Generation 3. It is known as the Kitten Pokémon.\",\r\n                \"image\": \"images/skitty.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Kitten Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 11,\r\n                \"abilities\": [\r\n                    \"Cute Charm\",\r\n                    \"Normalize\",\r\n                    \"Wonder Skin\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 260,\r\n                    \"hp\": 50,\r\n                    \"attack\": 45,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"skitty\",\r\n                    \"delcatty\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/skitty\"\r\n    },\r\n    {\r\n        \"num\": 301,\r\n        \"name\": \"Delcatty\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Delcatty\",\r\n                \"description\": \"Delcatty is a Normal type Pokémon introduced in Generation 3. It is known as the Prim Pokémon.\",\r\n                \"image\": \"images/delcatty.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Prim Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 32.6,\r\n                \"abilities\": [\r\n                    \"Cute Charm\",\r\n                    \"Normalize\",\r\n                    \"Wonder Skin\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 400,\r\n                    \"hp\": 70,\r\n                    \"attack\": 65,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"skitty\",\r\n                    \"delcatty\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/delcatty\"\r\n    },\r\n    {\r\n        \"num\": 302,\r\n        \"name\": \"Sableye\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sableye\",\r\n                \"description\": \"Sableye is a Dark/Ghost type Pokémon introduced in Generation 3. It is known as the Darkness Pokémon.\\nSableye has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/sableye.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Darkness Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 11,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Stall\",\r\n                    \"Prankster\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 380,\r\n                    \"hp\": 50,\r\n                    \"attack\": 75,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Sableye\",\r\n                \"description\": \"Sableye is a Dark/Ghost type Pokémon introduced in Generation 3. It is known as the Darkness Pokémon.\\nSableye has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/sableye-mega.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Darkness Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 161,\r\n                \"abilities\": [\r\n                    \"Magic Bounce\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 50,\r\n                    \"attack\": 85,\r\n                    \"defense\": 125,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 115,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sableye\"\r\n    },\r\n    {\r\n        \"num\": 303,\r\n        \"name\": \"Mawile\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mawile\",\r\n                \"description\": \"Mawile is a Steel/Fairy type Pokémon introduced in Generation 3. It is known as the Deceiver Pokémon.\\nMawile has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/mawile.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Deceiver Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 11.5,\r\n                \"abilities\": [\r\n                    \"Hyper Cutter\",\r\n                    \"Intimidate\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 380,\r\n                    \"hp\": 50,\r\n                    \"attack\": 85,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Mawile\",\r\n                \"description\": \"Mawile is a Steel/Fairy type Pokémon introduced in Generation 3. It is known as the Deceiver Pokémon.\\nMawile has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/mawile-mega.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Deceiver Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 23.5,\r\n                \"abilities\": [\r\n                    \"Huge Power\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 50,\r\n                    \"attack\": 105,\r\n                    \"defense\": 125,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mawile\"\r\n    },\r\n    {\r\n        \"num\": 304,\r\n        \"name\": \"Aron\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Aron\",\r\n                \"description\": \"Aron is a Steel/Rock type Pokémon introduced in Generation 3. It is known as the Iron Armor Pokémon.\",\r\n                \"image\": \"images/aron.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Iron Armor Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 60,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Rock Head\",\r\n                    \"Heavy Metal\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 50,\r\n                    \"attack\": 70,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"aron\",\r\n                    \"lairon\",\r\n                    \"aggron\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/aron\"\r\n    },\r\n    {\r\n        \"num\": 305,\r\n        \"name\": \"Lairon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lairon\",\r\n                \"description\": \"Lairon is a Steel/Rock type Pokémon introduced in Generation 3. It is known as the Iron Armor Pokémon.\",\r\n                \"image\": \"images/lairon.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Iron Armor Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 120,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Rock Head\",\r\n                    \"Heavy Metal\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 430,\r\n                    \"hp\": 60,\r\n                    \"attack\": 90,\r\n                    \"defense\": 140,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"aron\",\r\n                    \"lairon\",\r\n                    \"aggron\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lairon\"\r\n    },\r\n    {\r\n        \"num\": 306,\r\n        \"name\": \"Aggron\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Aggron\",\r\n                \"description\": \"Aggron is a Steel/Rock type Pokémon introduced in Generation 3. It is known as the Iron Armor Pokémon.\\nAggron has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/aggron.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Iron Armor Pokémon\",\r\n                \"height\": 2.1,\r\n                \"weight\": 360,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Rock Head\",\r\n                    \"Heavy Metal\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 70,\r\n                    \"attack\": 110,\r\n                    \"defense\": 180,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"aron\",\r\n                    \"lairon\",\r\n                    \"aggron\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Aggron\",\r\n                \"description\": \"Aggron is a Steel/Rock type Pokémon introduced in Generation 3. It is known as the Iron Armor Pokémon.\\nAggron has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/aggron-mega.jpg\",\r\n                \"types\": [\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Iron Armor Pokémon\",\r\n                \"height\": 2.2,\r\n                \"weight\": 395,\r\n                \"abilities\": [\r\n                    \"Filter\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 630,\r\n                    \"hp\": 70,\r\n                    \"attack\": 140,\r\n                    \"defense\": 230,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"aron\",\r\n                    \"lairon\",\r\n                    \"aggron\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/aggron\"\r\n    },\r\n    {\r\n        \"num\": 307,\r\n        \"name\": \"Meditite\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Meditite\",\r\n                \"description\": \"Meditite is a Fighting/Psychic type Pokémon introduced in Generation 3. It is known as the Meditate Pokémon.\",\r\n                \"image\": \"images/meditite.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Meditate Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 11.2,\r\n                \"abilities\": [\r\n                    \"Pure Power\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 280,\r\n                    \"hp\": 30,\r\n                    \"attack\": 40,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"meditite\",\r\n                    \"medicham\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/meditite\"\r\n    },\r\n    {\r\n        \"num\": 308,\r\n        \"name\": \"Medicham\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Medicham\",\r\n                \"description\": \"Medicham is a Fighting/Psychic type Pokémon introduced in Generation 3. It is known as the Meditate Pokémon.\\nMedicham has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/medicham.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Meditate Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 31.5,\r\n                \"abilities\": [\r\n                    \"Pure Power\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 410,\r\n                    \"hp\": 60,\r\n                    \"attack\": 60,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"meditite\",\r\n                    \"medicham\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Medicham\",\r\n                \"description\": \"Medicham is a Fighting/Psychic type Pokémon introduced in Generation 3. It is known as the Meditate Pokémon.\\nMedicham has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/medicham-mega.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Meditate Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 31.5,\r\n                \"abilities\": [\r\n                    \"Pure Power\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 510,\r\n                    \"hp\": 60,\r\n                    \"attack\": 100,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"meditite\",\r\n                    \"medicham\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/medicham\"\r\n    },\r\n    {\r\n        \"num\": 309,\r\n        \"name\": \"Electrike\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Electrike\",\r\n                \"description\": \"Electrike is an Electric type Pokémon introduced in Generation 3. It is known as the Lightning Pokémon.\",\r\n                \"image\": \"images/electrike.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Lightning Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 15.2,\r\n                \"abilities\": [\r\n                    \"Static\",\r\n                    \"Lightning Rod\",\r\n                    \"Minus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 295,\r\n                    \"hp\": 40,\r\n                    \"attack\": 45,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"electrike\",\r\n                    \"manectric\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/electrike\"\r\n    },\r\n    {\r\n        \"num\": 310,\r\n        \"name\": \"Manectric\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Manectric\",\r\n                \"description\": \"Manectric is an Electric type Pokémon introduced in Generation 3. It is known as the Discharge Pokémon.\\nManectric has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/manectric.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Discharge Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 40.2,\r\n                \"abilities\": [\r\n                    \"Static\",\r\n                    \"Lightning Rod\",\r\n                    \"Minus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 475,\r\n                    \"hp\": 70,\r\n                    \"attack\": 75,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 105\r\n                },\r\n                \"evolutions\": [\r\n                    \"electrike\",\r\n                    \"manectric\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Manectric\",\r\n                \"description\": \"Manectric is an Electric type Pokémon introduced in Generation 3. It is known as the Discharge Pokémon.\\nManectric has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/manectric-mega.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Discharge Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 44,\r\n                \"abilities\": [\r\n                    \"Intimidate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 575,\r\n                    \"hp\": 70,\r\n                    \"attack\": 75,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 135,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 135\r\n                },\r\n                \"evolutions\": [\r\n                    \"electrike\",\r\n                    \"manectric\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/manectric\"\r\n    },\r\n    {\r\n        \"num\": 311,\r\n        \"name\": \"Plusle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Plusle\",\r\n                \"description\": \"Plusle is an Electric type Pokémon introduced in Generation 3. It is known as the Cheering Pokémon.\",\r\n                \"image\": \"images/plusle.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Cheering Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 4.2,\r\n                \"abilities\": [\r\n                    \"Plus\",\r\n                    \"Lightning Rod\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 60,\r\n                    \"attack\": 50,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/plusle\"\r\n    },\r\n    {\r\n        \"num\": 312,\r\n        \"name\": \"Minun\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Minun\",\r\n                \"description\": \"Minun is an Electric type Pokémon introduced in Generation 3. It is known as the Cheering Pokémon.\",\r\n                \"image\": \"images/minun.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Cheering Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 4.2,\r\n                \"abilities\": [\r\n                    \"Minus\",\r\n                    \"Volt Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 60,\r\n                    \"attack\": 40,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/minun\"\r\n    },\r\n    {\r\n        \"num\": 313,\r\n        \"name\": \"Volbeat\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Volbeat\",\r\n                \"description\": \"Volbeat is a Bug type Pokémon introduced in Generation 3. It is known as the Firefly Pokémon.\",\r\n                \"image\": \"images/volbeat.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Firefly Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 17.7,\r\n                \"abilities\": [\r\n                    \"Illuminate\",\r\n                    \"Swarm\",\r\n                    \"Prankster\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 430,\r\n                    \"hp\": 65,\r\n                    \"attack\": 73,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 47,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/volbeat\"\r\n    },\r\n    {\r\n        \"num\": 314,\r\n        \"name\": \"Illumise\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Illumise\",\r\n                \"description\": \"Illumise is a Bug type Pokémon introduced in Generation 3. It is known as the Firefly Pokémon.\",\r\n                \"image\": \"images/illumise.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Firefly Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 17.7,\r\n                \"abilities\": [\r\n                    \"Oblivious\",\r\n                    \"Tinted Lens\",\r\n                    \"Prankster\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 430,\r\n                    \"hp\": 65,\r\n                    \"attack\": 47,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 73,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/illumise\"\r\n    },\r\n    {\r\n        \"num\": 315,\r\n        \"name\": \"Roselia\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Roselia\",\r\n                \"description\": \"Roselia is a Grass/Poison type Pokémon introduced in Generation 3. It is known as the Thorn Pokémon.\",\r\n                \"image\": \"images/roselia.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Thorn Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 2,\r\n                \"abilities\": [\r\n                    \"Natural Cure\",\r\n                    \"Poison Point\",\r\n                    \"Leaf Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 400,\r\n                    \"hp\": 50,\r\n                    \"attack\": 60,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"budew\",\r\n                    \"roselia\",\r\n                    \"roserade\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/roselia\"\r\n    },\r\n    {\r\n        \"num\": 316,\r\n        \"name\": \"Gulpin\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gulpin\",\r\n                \"description\": \"Gulpin is a Poison type Pokémon introduced in Generation 3. It is known as the Stomach Pokémon.\",\r\n                \"image\": \"images/gulpin.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Stomach Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 10.3,\r\n                \"abilities\": [\r\n                    \"Liquid Ooze\",\r\n                    \"Sticky Hold\",\r\n                    \"Gluttony\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 302,\r\n                    \"hp\": 70,\r\n                    \"attack\": 43,\r\n                    \"defense\": 53,\r\n                    \"speedAttack\": 43,\r\n                    \"speedDefense\": 53,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"gulpin\",\r\n                    \"swalot\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gulpin\"\r\n    },\r\n    {\r\n        \"num\": 317,\r\n        \"name\": \"Swalot\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Swalot\",\r\n                \"description\": \"Swalot is a Poison type Pokémon introduced in Generation 3. It is known as the Poison Bag Pokémon.\",\r\n                \"image\": \"images/swalot.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Poison Bag Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 80,\r\n                \"abilities\": [\r\n                    \"Liquid Ooze\",\r\n                    \"Sticky Hold\",\r\n                    \"Gluttony\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 467,\r\n                    \"hp\": 100,\r\n                    \"attack\": 73,\r\n                    \"defense\": 83,\r\n                    \"speedAttack\": 73,\r\n                    \"speedDefense\": 83,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"gulpin\",\r\n                    \"swalot\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/swalot\"\r\n    },\r\n    {\r\n        \"num\": 318,\r\n        \"name\": \"Carvanha\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Carvanha\",\r\n                \"description\": \"Carvanha is a Water/Dark type Pokémon introduced in Generation 3. It is known as the Savage Pokémon.\",\r\n                \"image\": \"images/carvanha.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Savage Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 20.8,\r\n                \"abilities\": [\r\n                    \"Rough Skin\",\r\n                    \"Speed Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 45,\r\n                    \"attack\": 90,\r\n                    \"defense\": 20,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 20,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"carvanha\",\r\n                    \"sharpedo\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/carvanha\"\r\n    },\r\n    {\r\n        \"num\": 319,\r\n        \"name\": \"Sharpedo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sharpedo\",\r\n                \"description\": \"Sharpedo is a Water/Dark type Pokémon introduced in Generation 3. It is known as the Brutal Pokémon.\\nSharpedo has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/sharpedo.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Brutal Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 88.8,\r\n                \"abilities\": [\r\n                    \"Rough Skin\",\r\n                    \"Speed Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 460,\r\n                    \"hp\": 70,\r\n                    \"attack\": 120,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"carvanha\",\r\n                    \"sharpedo\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Sharpedo\",\r\n                \"description\": \"Sharpedo is a Water/Dark type Pokémon introduced in Generation 3. It is known as the Brutal Pokémon.\\nSharpedo has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/sharpedo-mega.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Brutal Pokémon\",\r\n                \"height\": 2.5,\r\n                \"weight\": 130.3,\r\n                \"abilities\": [\r\n                    \"Strong Jaw\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 560,\r\n                    \"hp\": 70,\r\n                    \"attack\": 140,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 105\r\n                },\r\n                \"evolutions\": [\r\n                    \"carvanha\",\r\n                    \"sharpedo\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sharpedo\"\r\n    },\r\n    {\r\n        \"num\": 320,\r\n        \"name\": \"Wailmer\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Wailmer\",\r\n                \"description\": \"Wailmer is a Water type Pokémon introduced in Generation 3. It is known as the Ball Whale Pokémon.\",\r\n                \"image\": \"images/wailmer.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Ball Whale Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 130,\r\n                \"abilities\": [\r\n                    \"Water Veil\",\r\n                    \"Oblivious\",\r\n                    \"Pressure\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 400,\r\n                    \"hp\": 130,\r\n                    \"attack\": 70,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"wailmer\",\r\n                    \"wailord\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/wailmer\"\r\n    },\r\n    {\r\n        \"num\": 321,\r\n        \"name\": \"Wailord\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Wailord\",\r\n                \"description\": \"Wailord is a Water type Pokémon introduced in Generation 3. It is known as the Float Whale Pokémon.\",\r\n                \"image\": \"images/wailord.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Float Whale Pokémon\",\r\n                \"height\": 14.5,\r\n                \"weight\": 398,\r\n                \"abilities\": [\r\n                    \"Water Veil\",\r\n                    \"Oblivious\",\r\n                    \"Pressure\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 170,\r\n                    \"attack\": 90,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"wailmer\",\r\n                    \"wailord\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/wailord\"\r\n    },\r\n    {\r\n        \"num\": 322,\r\n        \"name\": \"Numel\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Numel\",\r\n                \"description\": \"Numel is a Fire/Ground type Pokémon introduced in Generation 3. It is known as the Numb Pokémon.\",\r\n                \"image\": \"images/numel.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Numb Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 24,\r\n                \"abilities\": [\r\n                    \"Oblivious\",\r\n                    \"Simple\",\r\n                    \"Own Tempo\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 60,\r\n                    \"attack\": 60,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"numel\",\r\n                    \"camerupt\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/numel\"\r\n    },\r\n    {\r\n        \"num\": 323,\r\n        \"name\": \"Camerupt\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Camerupt\",\r\n                \"description\": \"Camerupt is a Fire/Ground type Pokémon introduced in Generation 3. It is known as the Eruption Pokémon.\\nCamerupt has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/camerupt.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Eruption Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 220,\r\n                \"abilities\": [\r\n                    \"Magma Armor\",\r\n                    \"Solid Rock\",\r\n                    \"Anger Point\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 460,\r\n                    \"hp\": 70,\r\n                    \"attack\": 100,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"numel\",\r\n                    \"camerupt\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Camerupt\",\r\n                \"description\": \"Camerupt is a Fire/Ground type Pokémon introduced in Generation 3. It is known as the Eruption Pokémon.\\nCamerupt has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/camerupt-mega.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Eruption Pokémon\",\r\n                \"height\": 2.5,\r\n                \"weight\": 320.5,\r\n                \"abilities\": [\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 560,\r\n                    \"hp\": 70,\r\n                    \"attack\": 120,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 145,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"numel\",\r\n                    \"camerupt\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/camerupt\"\r\n    },\r\n    {\r\n        \"num\": 324,\r\n        \"name\": \"Torkoal\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Torkoal\",\r\n                \"description\": \"Torkoal is a Fire type Pokémon introduced in Generation 3. It is known as the Coal Pokémon.\",\r\n                \"image\": \"images/torkoal.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Coal Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 80.4,\r\n                \"abilities\": [\r\n                    \"White Smoke\",\r\n                    \"Drought\",\r\n                    \"Shell Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 470,\r\n                    \"hp\": 70,\r\n                    \"attack\": 85,\r\n                    \"defense\": 140,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/torkoal\"\r\n    },\r\n    {\r\n        \"num\": 325,\r\n        \"name\": \"Spoink\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Spoink\",\r\n                \"description\": \"Spoink is a Psychic type Pokémon introduced in Generation 3. It is known as the Bounce Pokémon.\",\r\n                \"image\": \"images/spoink.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Bounce Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 30.6,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Own Tempo\",\r\n                    \"Gluttony\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 60,\r\n                    \"attack\": 25,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"spoink\",\r\n                    \"grumpig\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/spoink\"\r\n    },\r\n    {\r\n        \"num\": 326,\r\n        \"name\": \"Grumpig\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Grumpig\",\r\n                \"description\": \"Grumpig is a Psychic type Pokémon introduced in Generation 3. It is known as the Manipulate Pokémon.\",\r\n                \"image\": \"images/grumpig.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Manipulate Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 71.5,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Own Tempo\",\r\n                    \"Gluttony\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 470,\r\n                    \"hp\": 80,\r\n                    \"attack\": 45,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"spoink\",\r\n                    \"grumpig\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/grumpig\"\r\n    },\r\n    {\r\n        \"num\": 327,\r\n        \"name\": \"Spinda\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Spinda\",\r\n                \"description\": \"Spinda is a Normal type Pokémon introduced in Generation 3. It is known as the Spot Panda Pokémon.\",\r\n                \"image\": \"images/spinda.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Spot Panda Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 5,\r\n                \"abilities\": [\r\n                    \"Own Tempo\",\r\n                    \"Tangled Feet\",\r\n                    \"Contrary\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 360,\r\n                    \"hp\": 60,\r\n                    \"attack\": 60,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/spinda\"\r\n    },\r\n    {\r\n        \"num\": 328,\r\n        \"name\": \"Trapinch\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Trapinch\",\r\n                \"description\": \"Trapinch is a Ground type Pokémon introduced in Generation 3. It is known as the Ant Pit Pokémon.\",\r\n                \"image\": \"images/trapinch.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Ant Pit Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 15,\r\n                \"abilities\": [\r\n                    \"Hyper Cutter\",\r\n                    \"Arena Trap\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 290,\r\n                    \"hp\": 45,\r\n                    \"attack\": 100,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 10\r\n                },\r\n                \"evolutions\": [\r\n                    \"trapinch\",\r\n                    \"vibrava\",\r\n                    \"flygon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/trapinch\"\r\n    },\r\n    {\r\n        \"num\": 329,\r\n        \"name\": \"Vibrava\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Vibrava\",\r\n                \"description\": \"Vibrava is a Ground/Dragon type Pokémon introduced in Generation 3. It is known as the Vibration Pokémon.\",\r\n                \"image\": \"images/vibrava.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Vibration Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 15.3,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 340,\r\n                    \"hp\": 50,\r\n                    \"attack\": 70,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"trapinch\",\r\n                    \"vibrava\",\r\n                    \"flygon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/vibrava\"\r\n    },\r\n    {\r\n        \"num\": 330,\r\n        \"name\": \"Flygon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Flygon\",\r\n                \"description\": \"Flygon is a Ground/Dragon type Pokémon introduced in Generation 3. It is known as the Mystic Pokémon.\",\r\n                \"image\": \"images/flygon.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Mystic Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 82,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 520,\r\n                    \"hp\": 80,\r\n                    \"attack\": 100,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"trapinch\",\r\n                    \"vibrava\",\r\n                    \"flygon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/flygon\"\r\n    },\r\n    {\r\n        \"num\": 331,\r\n        \"name\": \"Cacnea\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cacnea\",\r\n                \"description\": \"Cacnea is a Grass type Pokémon introduced in Generation 3. It is known as the Cactus Pokémon.\",\r\n                \"image\": \"images/cacnea.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Cactus Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 51.3,\r\n                \"abilities\": [\r\n                    \"Sand Veil\",\r\n                    \"Water Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 335,\r\n                    \"hp\": 50,\r\n                    \"attack\": 85,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"cacnea\",\r\n                    \"cacturne\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cacnea\"\r\n    },\r\n    {\r\n        \"num\": 332,\r\n        \"name\": \"Cacturne\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cacturne\",\r\n                \"description\": \"Cacturne is a Grass/Dark type Pokémon introduced in Generation 3. It is known as the Scarecrow Pokémon.\",\r\n                \"image\": \"images/cacturne.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Scarecrow Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 77.4,\r\n                \"abilities\": [\r\n                    \"Sand Veil\",\r\n                    \"Water Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 475,\r\n                    \"hp\": 70,\r\n                    \"attack\": 115,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 115,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"cacnea\",\r\n                    \"cacturne\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cacturne\"\r\n    },\r\n    {\r\n        \"num\": 333,\r\n        \"name\": \"Swablu\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Swablu\",\r\n                \"description\": \"Swablu is a Normal/Flying type Pokémon introduced in Generation 3. It is known as the Cotton Bird Pokémon.\",\r\n                \"image\": \"images/swablu.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Cotton Bird Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 1.2,\r\n                \"abilities\": [\r\n                    \"Natural Cure\",\r\n                    \"Cloud Nine\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 310,\r\n                    \"hp\": 45,\r\n                    \"attack\": 40,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"swablu\",\r\n                    \"altaria\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/swablu\"\r\n    },\r\n    {\r\n        \"num\": 334,\r\n        \"name\": \"Altaria\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Altaria\",\r\n                \"description\": \"Altaria is a Dragon/Flying type Pokémon introduced in Generation 3. It is known as the Humming Pokémon.\\nAltaria has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/altaria.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Humming Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 20.6,\r\n                \"abilities\": [\r\n                    \"Natural Cure\",\r\n                    \"Cloud Nine\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 75,\r\n                    \"attack\": 70,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"swablu\",\r\n                    \"altaria\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Altaria\",\r\n                \"description\": \"Altaria is a Dragon/Flying type Pokémon introduced in Generation 3. It is known as the Humming Pokémon.\\nAltaria has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/altaria-mega.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Humming Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 20.6,\r\n                \"abilities\": [\r\n                    \"Pixilate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 590,\r\n                    \"hp\": 75,\r\n                    \"attack\": 110,\r\n                    \"defense\": 110,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"swablu\",\r\n                    \"altaria\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/altaria\"\r\n    },\r\n    {\r\n        \"num\": 335,\r\n        \"name\": \"Zangoose\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Zangoose\",\r\n                \"description\": \"Zangoose is a Normal type Pokémon introduced in Generation 3. It is known as the Cat Ferret Pokémon.\",\r\n                \"image\": \"images/zangoose.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Cat Ferret Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 40.3,\r\n                \"abilities\": [\r\n                    \"Immunity\",\r\n                    \"Toxic Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 458,\r\n                    \"hp\": 73,\r\n                    \"attack\": 115,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/zangoose\"\r\n    },\r\n    {\r\n        \"num\": 336,\r\n        \"name\": \"Seviper\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Seviper\",\r\n                \"description\": \"Seviper is a Poison type Pokémon introduced in Generation 3. It is known as the Fang Snake Pokémon.\",\r\n                \"image\": \"images/seviper.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Fang Snake Pokémon\",\r\n                \"height\": 2.7,\r\n                \"weight\": 52.5,\r\n                \"abilities\": [\r\n                    \"Shed Skin\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 458,\r\n                    \"hp\": 73,\r\n                    \"attack\": 100,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/seviper\"\r\n    },\r\n    {\r\n        \"num\": 337,\r\n        \"name\": \"Lunatone\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lunatone\",\r\n                \"description\": \"Lunatone is a Rock/Psychic type Pokémon introduced in Generation 3. It is known as the Meteorite Pokémon.\",\r\n                \"image\": \"images/lunatone.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Meteorite Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 168,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 460,\r\n                    \"hp\": 90,\r\n                    \"attack\": 55,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lunatone\"\r\n    },\r\n    {\r\n        \"num\": 338,\r\n        \"name\": \"Solrock\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Solrock\",\r\n                \"description\": \"Solrock is a Rock/Psychic type Pokémon introduced in Generation 3. It is known as the Meteorite Pokémon.\",\r\n                \"image\": \"images/solrock.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Meteorite Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 154,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 460,\r\n                    \"hp\": 90,\r\n                    \"attack\": 95,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/solrock\"\r\n    },\r\n    {\r\n        \"num\": 339,\r\n        \"name\": \"Barboach\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Barboach\",\r\n                \"description\": \"Barboach is a Water/Ground type Pokémon introduced in Generation 3. It is known as the Whiskers Pokémon.\",\r\n                \"image\": \"images/barboach.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Whiskers Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 1.9,\r\n                \"abilities\": [\r\n                    \"Oblivious\",\r\n                    \"Anticipation\",\r\n                    \"Hydration\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 288,\r\n                    \"hp\": 50,\r\n                    \"attack\": 48,\r\n                    \"defense\": 43,\r\n                    \"speedAttack\": 46,\r\n                    \"speedDefense\": 41,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"barboach\",\r\n                    \"whiscash\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/barboach\"\r\n    },\r\n    {\r\n        \"num\": 340,\r\n        \"name\": \"Whiscash\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Whiscash\",\r\n                \"description\": \"Whiscash is a Water/Ground type Pokémon introduced in Generation 3. It is known as the Whiskers Pokémon.\",\r\n                \"image\": \"images/whiscash.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Whiskers Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 23.6,\r\n                \"abilities\": [\r\n                    \"Oblivious\",\r\n                    \"Anticipation\",\r\n                    \"Hydration\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 468,\r\n                    \"hp\": 110,\r\n                    \"attack\": 78,\r\n                    \"defense\": 73,\r\n                    \"speedAttack\": 76,\r\n                    \"speedDefense\": 71,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"barboach\",\r\n                    \"whiscash\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/whiscash\"\r\n    },\r\n    {\r\n        \"num\": 341,\r\n        \"name\": \"Corphish\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Corphish\",\r\n                \"description\": \"Corphish is a Water type Pokémon introduced in Generation 3. It is known as the Ruffian Pokémon.\",\r\n                \"image\": \"images/corphish.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Ruffian Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 11.5,\r\n                \"abilities\": [\r\n                    \"Hyper Cutter\",\r\n                    \"Shell Armor\",\r\n                    \"Adaptability\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 308,\r\n                    \"hp\": 43,\r\n                    \"attack\": 80,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"corphish\",\r\n                    \"crawdaunt\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/corphish\"\r\n    },\r\n    {\r\n        \"num\": 342,\r\n        \"name\": \"Crawdaunt\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Crawdaunt\",\r\n                \"description\": \"Crawdaunt is a Water/Dark type Pokémon introduced in Generation 3. It is known as the Rogue Pokémon.\",\r\n                \"image\": \"images/crawdaunt.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Rogue Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 32.8,\r\n                \"abilities\": [\r\n                    \"Hyper Cutter\",\r\n                    \"Shell Armor\",\r\n                    \"Adaptability\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 468,\r\n                    \"hp\": 63,\r\n                    \"attack\": 120,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"corphish\",\r\n                    \"crawdaunt\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/crawdaunt\"\r\n    },\r\n    {\r\n        \"num\": 343,\r\n        \"name\": \"Baltoy\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Baltoy\",\r\n                \"description\": \"Baltoy is a Ground/Psychic type Pokémon introduced in Generation 3. It is known as the Clay Doll Pokémon.\",\r\n                \"image\": \"images/baltoy.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Clay Doll Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 21.5,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 40,\r\n                    \"attack\": 40,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"baltoy\",\r\n                    \"claydol\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/baltoy\"\r\n    },\r\n    {\r\n        \"num\": 344,\r\n        \"name\": \"Claydol\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Claydol\",\r\n                \"description\": \"Claydol is a Ground/Psychic type Pokémon introduced in Generation 3. It is known as the Clay Doll Pokémon.\",\r\n                \"image\": \"images/claydol.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Clay Doll Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 108,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 60,\r\n                    \"attack\": 70,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 120,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": [\r\n                    \"baltoy\",\r\n                    \"claydol\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/claydol\"\r\n    },\r\n    {\r\n        \"num\": 345,\r\n        \"name\": \"Lileep\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lileep\",\r\n                \"description\": \"Lileep is a Rock/Grass type Pokémon introduced in Generation 3. It is known as the Sea Lily Pokémon.\",\r\n                \"image\": \"images/lileep.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Sea Lily Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 23.8,\r\n                \"abilities\": [\r\n                    \"Suction Cups\",\r\n                    \"Storm Drain\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 355,\r\n                    \"hp\": 66,\r\n                    \"attack\": 41,\r\n                    \"defense\": 77,\r\n                    \"speedAttack\": 61,\r\n                    \"speedDefense\": 87,\r\n                    \"speed\": 23\r\n                },\r\n                \"evolutions\": [\r\n                    \"lileep\",\r\n                    \"cradily\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lileep\"\r\n    },\r\n    {\r\n        \"num\": 346,\r\n        \"name\": \"Cradily\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cradily\",\r\n                \"description\": \"Cradily is a Rock/Grass type Pokémon introduced in Generation 3. It is known as the Barnacle Pokémon.\",\r\n                \"image\": \"images/cradily.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Barnacle Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 60.4,\r\n                \"abilities\": [\r\n                    \"Suction Cups\",\r\n                    \"Storm Drain\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 86,\r\n                    \"attack\": 81,\r\n                    \"defense\": 97,\r\n                    \"speedAttack\": 81,\r\n                    \"speedDefense\": 107,\r\n                    \"speed\": 43\r\n                },\r\n                \"evolutions\": [\r\n                    \"lileep\",\r\n                    \"cradily\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cradily\"\r\n    },\r\n    {\r\n        \"num\": 347,\r\n        \"name\": \"Anorith\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Anorith\",\r\n                \"description\": \"Anorith is a Rock/Bug type Pokémon introduced in Generation 3. It is known as the Old Shrimp Pokémon.\",\r\n                \"image\": \"images/anorith.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Old Shrimp Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 12.5,\r\n                \"abilities\": [\r\n                    \"Battle Armor\",\r\n                    \"Swift Swim\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 355,\r\n                    \"hp\": 45,\r\n                    \"attack\": 95,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": [\r\n                    \"anorith\",\r\n                    \"armaldo\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/anorith\"\r\n    },\r\n    {\r\n        \"num\": 348,\r\n        \"name\": \"Armaldo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Armaldo\",\r\n                \"description\": \"Armaldo is a Rock/Bug type Pokémon introduced in Generation 3. It is known as the Plate Pokémon.\",\r\n                \"image\": \"images/armaldo.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Plate Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 68.2,\r\n                \"abilities\": [\r\n                    \"Battle Armor\",\r\n                    \"Swift Swim\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 75,\r\n                    \"attack\": 125,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"anorith\",\r\n                    \"armaldo\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/armaldo\"\r\n    },\r\n    {\r\n        \"num\": 349,\r\n        \"name\": \"Feebas\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Feebas\",\r\n                \"description\": \"Feebas is a Water type Pokémon introduced in Generation 3. It is known as the Fish Pokémon.\\nFeebas is very rare in Ruby/Sapphire/Emerald, being available by fishing in one of only six random squares on Route 119. Similarly in Diamond/Pearl/Platinum it can only be found in one of four random squares in Mt. Coronet.\\nFeebas also has a unique evolution. In RSE, DPPt and Omega Ruby/Alpha Sapphire it will evolve into Milotic by maximizing its Beauty stat with Poffins. From Black/White onwards Feebas will evolve when traded holding a Prism Scale, however it can also evolve if migrated from an earlier game already having maximum Beauty.\",\r\n                \"image\": \"images/feebas.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Fish Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 7.4,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Oblivious\",\r\n                    \"Adaptability\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 200,\r\n                    \"hp\": 20,\r\n                    \"attack\": 15,\r\n                    \"defense\": 20,\r\n                    \"speedAttack\": 10,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"feebas\",\r\n                    \"milotic\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/feebas\"\r\n    },\r\n    {\r\n        \"num\": 350,\r\n        \"name\": \"Milotic\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Milotic\",\r\n                \"description\": \"Milotic is a Water type Pokémon introduced in Generation 3. It is known as the Tender Pokémon.\\nMilotic evolves from Feebas when traded holding a Prism Scale or, prior to Black/White, by maximizing its Beauty stat with Poffins.\",\r\n                \"image\": \"images/milotic.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Tender Pokémon\",\r\n                \"height\": 6.2,\r\n                \"weight\": 162,\r\n                \"abilities\": [\r\n                    \"Marvel Scale\",\r\n                    \"Competitive\",\r\n                    \"Cute Charm\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 540,\r\n                    \"hp\": 95,\r\n                    \"attack\": 60,\r\n                    \"defense\": 79,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 125,\r\n                    \"speed\": 81\r\n                },\r\n                \"evolutions\": [\r\n                    \"feebas\",\r\n                    \"milotic\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/milotic\"\r\n    },\r\n    {\r\n        \"num\": 351,\r\n        \"name\": \"Castform\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Castform\",\r\n                \"description\": \"Castform is a Normal type Pokémon introduced in Generation 3. It is known as the Weather Pokémon.\",\r\n                \"image\": \"images/castform.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Weather Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.8,\r\n                \"abilities\": [\r\n                    \"Forecast\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 70,\r\n                    \"attack\": 70,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Sunny Form\",\r\n                \"description\": \"Castform is a Normal type Pokémon introduced in Generation 3. It is known as the Weather Pokémon.\",\r\n                \"image\": \"images/castform-sunny.png\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Weather Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.8,\r\n                \"abilities\": [\r\n                    \"Forecast\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 70,\r\n                    \"attack\": 70,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Rainy Form\",\r\n                \"description\": \"Castform is a Normal type Pokémon introduced in Generation 3. It is known as the Weather Pokémon.\",\r\n                \"image\": \"images/castform-rainy.png\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Weather Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.8,\r\n                \"abilities\": [\r\n                    \"Forecast\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 70,\r\n                    \"attack\": 70,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Snowy Form\",\r\n                \"description\": \"Castform is a Normal type Pokémon introduced in Generation 3. It is known as the Weather Pokémon.\",\r\n                \"image\": \"images/castform-snowy.png\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Weather Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.8,\r\n                \"abilities\": [\r\n                    \"Forecast\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 70,\r\n                    \"attack\": 70,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/castform\"\r\n    },\r\n    {\r\n        \"num\": 352,\r\n        \"name\": \"Kecleon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kecleon\",\r\n                \"description\": \"Kecleon is a Normal type Pokémon introduced in Generation 3. It is known as the Color Swap Pokémon.\",\r\n                \"image\": \"images/kecleon.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Color Swap Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 22,\r\n                \"abilities\": [\r\n                    \"Color Change\",\r\n                    \"Protean\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 440,\r\n                    \"hp\": 60,\r\n                    \"attack\": 90,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 120,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kecleon\"\r\n    },\r\n    {\r\n        \"num\": 353,\r\n        \"name\": \"Shuppet\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Shuppet\",\r\n                \"description\": \"Shuppet is a Ghost type Pokémon introduced in Generation 3. It is known as the Puppet Pokémon.\",\r\n                \"image\": \"images/shuppet.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Puppet Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 2.3,\r\n                \"abilities\": [\r\n                    \"Insomnia\",\r\n                    \"Frisk\",\r\n                    \"Cursed Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 295,\r\n                    \"hp\": 44,\r\n                    \"attack\": 75,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 63,\r\n                    \"speedDefense\": 33,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"shuppet\",\r\n                    \"banette\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/shuppet\"\r\n    },\r\n    {\r\n        \"num\": 354,\r\n        \"name\": \"Banette\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Banette\",\r\n                \"description\": \"Banette is a Ghost type Pokémon introduced in Generation 3. It is known as the Marionette Pokémon.\\nBanette has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/banette.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Marionette Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 12.5,\r\n                \"abilities\": [\r\n                    \"Insomnia\",\r\n                    \"Frisk\",\r\n                    \"Cursed Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 455,\r\n                    \"hp\": 64,\r\n                    \"attack\": 115,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 83,\r\n                    \"speedDefense\": 63,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"shuppet\",\r\n                    \"banette\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Banette\",\r\n                \"description\": \"Banette is a Ghost type Pokémon introduced in Generation 3. It is known as the Marionette Pokémon.\\nBanette has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/banette-mega.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Marionette Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 13,\r\n                \"abilities\": [\r\n                    \"Prankster\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 555,\r\n                    \"hp\": 64,\r\n                    \"attack\": 165,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 93,\r\n                    \"speedDefense\": 83,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": [\r\n                    \"shuppet\",\r\n                    \"banette\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/banette\"\r\n    },\r\n    {\r\n        \"num\": 355,\r\n        \"name\": \"Duskull\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Duskull\",\r\n                \"description\": \"Duskull is a Ghost type Pokémon introduced in Generation 3. It is known as the Requiem Pokémon.\",\r\n                \"image\": \"images/duskull.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Requiem Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 15,\r\n                \"abilities\": [\r\n                    \"Levitate\",\r\n                    \"Frisk\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 295,\r\n                    \"hp\": 20,\r\n                    \"attack\": 40,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 25\r\n                },\r\n                \"evolutions\": [\r\n                    \"duskull\",\r\n                    \"dusclops\",\r\n                    \"dusknoir\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/duskull\"\r\n    },\r\n    {\r\n        \"num\": 356,\r\n        \"name\": \"Dusclops\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dusclops\",\r\n                \"description\": \"Dusclops is a Ghost type Pokémon introduced in Generation 3. It is known as the Beckon Pokémon.\",\r\n                \"image\": \"images/dusclops.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Beckon Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 30.6,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Frisk\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 455,\r\n                    \"hp\": 40,\r\n                    \"attack\": 70,\r\n                    \"defense\": 130,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 130,\r\n                    \"speed\": 25\r\n                },\r\n                \"evolutions\": [\r\n                    \"duskull\",\r\n                    \"dusclops\",\r\n                    \"dusknoir\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dusclops\"\r\n    },\r\n    {\r\n        \"num\": 357,\r\n        \"name\": \"Tropius\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tropius\",\r\n                \"description\": \"Tropius is a Grass/Flying type Pokémon introduced in Generation 3. It is known as the Fruit Pokémon.\",\r\n                \"image\": \"images/tropius.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Fruit Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 100,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Solar Power\",\r\n                    \"Harvest\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 460,\r\n                    \"hp\": 99,\r\n                    \"attack\": 68,\r\n                    \"defense\": 83,\r\n                    \"speedAttack\": 72,\r\n                    \"speedDefense\": 87,\r\n                    \"speed\": 51\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tropius\"\r\n    },\r\n    {\r\n        \"num\": 358,\r\n        \"name\": \"Chimecho\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Chimecho\",\r\n                \"description\": \"Chimecho is a Psychic type Pokémon introduced in Generation 3. It is known as the Wind Chime Pokémon.\",\r\n                \"image\": \"images/chimecho.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Wind Chime Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 1,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 455,\r\n                    \"hp\": 75,\r\n                    \"attack\": 50,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"chingling\",\r\n                    \"chimecho\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/chimecho\"\r\n    },\r\n    {\r\n        \"num\": 359,\r\n        \"name\": \"Absol\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Absol\",\r\n                \"description\": \"Absol is a Dark type Pokémon introduced in Generation 3. It is known as the Disaster Pokémon.\\nAbsol has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/absol.jpg\",\r\n                \"types\": [\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Disaster Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 47,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Super Luck\",\r\n                    \"Justified\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 465,\r\n                    \"hp\": 65,\r\n                    \"attack\": 130,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Absol\",\r\n                \"description\": \"Absol is a Dark type Pokémon introduced in Generation 3. It is known as the Disaster Pokémon.\\nAbsol has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/absol-mega.jpg\",\r\n                \"types\": [\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Disaster Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 49,\r\n                \"abilities\": [\r\n                    \"Magic Bounce\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 565,\r\n                    \"hp\": 65,\r\n                    \"attack\": 150,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 115,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 115\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/absol\"\r\n    },\r\n    {\r\n        \"num\": 360,\r\n        \"name\": \"Wynaut\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Wynaut\",\r\n                \"description\": \"Wynaut is a Psychic type Pokémon introduced in Generation 3. It is known as the Bright Pokémon.\",\r\n                \"image\": \"images/wynaut.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Bright Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 14,\r\n                \"abilities\": [\r\n                    \"Shadow Tag\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 260,\r\n                    \"hp\": 95,\r\n                    \"attack\": 23,\r\n                    \"defense\": 48,\r\n                    \"speedAttack\": 23,\r\n                    \"speedDefense\": 48,\r\n                    \"speed\": 23\r\n                },\r\n                \"evolutions\": [\r\n                    \"wynaut\",\r\n                    \"wobbuffet\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/wynaut\"\r\n    },\r\n    {\r\n        \"num\": 361,\r\n        \"name\": \"Snorunt\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Snorunt\",\r\n                \"description\": \"Snorunt is an Ice type Pokémon introduced in Generation 3. It is known as the Snow Hat Pokémon.\",\r\n                \"image\": \"images/snorunt.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Snow Hat Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 16.8,\r\n                \"abilities\": [\r\n                    \"Inner Focus\",\r\n                    \"Ice Body\",\r\n                    \"Moody\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 50,\r\n                    \"attack\": 50,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"snorunt\",\r\n                    \"glalie\",\r\n                    \"froslass\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/snorunt\"\r\n    },\r\n    {\r\n        \"num\": 362,\r\n        \"name\": \"Glalie\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Glalie\",\r\n                \"description\": \"Glalie is an Ice type Pokémon introduced in Generation 3. It is known as the Face Pokémon.\\nGlalie has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/glalie.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Face Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 256.5,\r\n                \"abilities\": [\r\n                    \"Inner Focus\",\r\n                    \"Ice Body\",\r\n                    \"Moody\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 80,\r\n                    \"attack\": 80,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"snorunt\",\r\n                    \"glalie\",\r\n                    \"froslass\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Glalie\",\r\n                \"description\": \"Glalie is an Ice type Pokémon introduced in Generation 3. It is known as the Face Pokémon.\\nGlalie has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/glalie-mega.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Face Pokémon\",\r\n                \"height\": 2.1,\r\n                \"weight\": 350.2,\r\n                \"abilities\": [\r\n                    \"Refrigerate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 80,\r\n                    \"attack\": 120,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"snorunt\",\r\n                    \"glalie\",\r\n                    \"froslass\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/glalie\"\r\n    },\r\n    {\r\n        \"num\": 363,\r\n        \"name\": \"Spheal\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Spheal\",\r\n                \"description\": \"Spheal is an Ice/Water type Pokémon introduced in Generation 3. It is known as the Clap Pokémon.\",\r\n                \"image\": \"images/spheal.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Clap Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 39.5,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Ice Body\",\r\n                    \"Oblivious\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 290,\r\n                    \"hp\": 70,\r\n                    \"attack\": 40,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 25\r\n                },\r\n                \"evolutions\": [\r\n                    \"spheal\",\r\n                    \"sealeo\",\r\n                    \"walrein\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/spheal\"\r\n    },\r\n    {\r\n        \"num\": 364,\r\n        \"name\": \"Sealeo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sealeo\",\r\n                \"description\": \"Sealeo is an Ice/Water type Pokémon introduced in Generation 3. It is known as the Ball Roll Pokémon.\",\r\n                \"image\": \"images/sealeo.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Ball Roll Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 87.6,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Ice Body\",\r\n                    \"Oblivious\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 410,\r\n                    \"hp\": 90,\r\n                    \"attack\": 60,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"spheal\",\r\n                    \"sealeo\",\r\n                    \"walrein\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sealeo\"\r\n    },\r\n    {\r\n        \"num\": 365,\r\n        \"name\": \"Walrein\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Walrein\",\r\n                \"description\": \"Walrein is an Ice/Water type Pokémon introduced in Generation 3. It is known as the Ice Break Pokémon.\",\r\n                \"image\": \"images/walrein.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Ice Break Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 150.6,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Ice Body\",\r\n                    \"Oblivious\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 110,\r\n                    \"attack\": 80,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"spheal\",\r\n                    \"sealeo\",\r\n                    \"walrein\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/walrein\"\r\n    },\r\n    {\r\n        \"num\": 366,\r\n        \"name\": \"Clamperl\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Clamperl\",\r\n                \"description\": \"Clamperl is a Water type Pokémon introduced in Generation 3. It is known as the Bivalve Pokémon.\",\r\n                \"image\": \"images/clamperl.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Bivalve Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 52.5,\r\n                \"abilities\": [\r\n                    \"Shell Armor\",\r\n                    \"Rattled\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 345,\r\n                    \"hp\": 35,\r\n                    \"attack\": 64,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 74,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 32\r\n                },\r\n                \"evolutions\": [\r\n                    \"clamperl\",\r\n                    \"huntail\",\r\n                    \"gorebyss\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/clamperl\"\r\n    },\r\n    {\r\n        \"num\": 367,\r\n        \"name\": \"Huntail\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Huntail\",\r\n                \"description\": \"Huntail is a Water type Pokémon introduced in Generation 3. It is known as the Deep Sea Pokémon.\",\r\n                \"image\": \"images/huntail.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Deep Sea Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 27,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Water Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 55,\r\n                    \"attack\": 104,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 94,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 52\r\n                },\r\n                \"evolutions\": [\r\n                    \"clamperl\",\r\n                    \"huntail\",\r\n                    \"gorebyss\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/huntail\"\r\n    },\r\n    {\r\n        \"num\": 368,\r\n        \"name\": \"Gorebyss\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gorebyss\",\r\n                \"description\": \"Gorebyss is a Water type Pokémon introduced in Generation 3. It is known as the South Sea Pokémon.\",\r\n                \"image\": \"images/gorebyss.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"South Sea Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 22.6,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Hydration\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 55,\r\n                    \"attack\": 84,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 114,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 52\r\n                },\r\n                \"evolutions\": [\r\n                    \"clamperl\",\r\n                    \"huntail\",\r\n                    \"gorebyss\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gorebyss\"\r\n    },\r\n    {\r\n        \"num\": 369,\r\n        \"name\": \"Relicanth\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Relicanth\",\r\n                \"description\": \"Relicanth is a Water/Rock type Pokémon introduced in Generation 3. It is known as the Longevity Pokémon.\",\r\n                \"image\": \"images/relicanth.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Longevity Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 23.4,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Rock Head\",\r\n                    \"Sturdy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 100,\r\n                    \"attack\": 90,\r\n                    \"defense\": 130,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/relicanth\"\r\n    },\r\n    {\r\n        \"num\": 370,\r\n        \"name\": \"Luvdisc\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Luvdisc\",\r\n                \"description\": \"Luvdisc is a Water type Pokémon introduced in Generation 3. It is known as the Rendezvous Pokémon.\",\r\n                \"image\": \"images/luvdisc.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Rendezvous Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 8.7,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Hydration\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 43,\r\n                    \"attack\": 30,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 97\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/luvdisc\"\r\n    },\r\n    {\r\n        \"num\": 371,\r\n        \"name\": \"Bagon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bagon\",\r\n                \"description\": \"Bagon is a Dragon type Pokémon introduced in Generation 3. It is known as the Rock Head Pokémon.\",\r\n                \"image\": \"images/bagon.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Rock Head Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 42.1,\r\n                \"abilities\": [\r\n                    \"Rock Head\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 45,\r\n                    \"attack\": 75,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"bagon\",\r\n                    \"shelgon\",\r\n                    \"salamence\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bagon\"\r\n    },\r\n    {\r\n        \"num\": 372,\r\n        \"name\": \"Shelgon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Shelgon\",\r\n                \"description\": \"Shelgon is a Dragon type Pokémon introduced in Generation 3. It is known as the Endurance Pokémon.\",\r\n                \"image\": \"images/shelgon.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Endurance Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 110.5,\r\n                \"abilities\": [\r\n                    \"Rock Head\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 65,\r\n                    \"attack\": 95,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"bagon\",\r\n                    \"shelgon\",\r\n                    \"salamence\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/shelgon\"\r\n    },\r\n    {\r\n        \"num\": 373,\r\n        \"name\": \"Salamence\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Salamence\",\r\n                \"description\": \"Salamence is a Dragon/Flying type Pokémon introduced in Generation 3. It is known as the Dragon Pokémon.\\nSalamence has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/salamence.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Dragon Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 102.6,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Moxie\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 95,\r\n                    \"attack\": 135,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"bagon\",\r\n                    \"shelgon\",\r\n                    \"salamence\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Salamence\",\r\n                \"description\": \"Salamence is a Dragon/Flying type Pokémon introduced in Generation 3. It is known as the Dragon Pokémon.\\nSalamence has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/salamence-mega.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Dragon Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 112.6,\r\n                \"abilities\": [\r\n                    \"Aerilate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 700,\r\n                    \"hp\": 95,\r\n                    \"attack\": 145,\r\n                    \"defense\": 130,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 120\r\n                },\r\n                \"evolutions\": [\r\n                    \"bagon\",\r\n                    \"shelgon\",\r\n                    \"salamence\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/salamence\"\r\n    },\r\n    {\r\n        \"num\": 374,\r\n        \"name\": \"Beldum\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Beldum\",\r\n                \"description\": \"Beldum is a Steel/Psychic type Pokémon introduced in Generation 3. It is known as the Iron Ball Pokémon.\",\r\n                \"image\": \"images/beldum.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Iron Ball Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 95.2,\r\n                \"abilities\": [\r\n                    \"Clear Body\",\r\n                    \"Light Metal\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 40,\r\n                    \"attack\": 55,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"beldum\",\r\n                    \"metang\",\r\n                    \"metagross\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/beldum\"\r\n    },\r\n    {\r\n        \"num\": 375,\r\n        \"name\": \"Metang\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Metang\",\r\n                \"description\": \"Metang is a Steel/Psychic type Pokémon introduced in Generation 3. It is known as the Iron Claw Pokémon.\",\r\n                \"image\": \"images/metang.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Iron Claw Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 202.5,\r\n                \"abilities\": [\r\n                    \"Clear Body\",\r\n                    \"Light Metal\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 60,\r\n                    \"attack\": 75,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"beldum\",\r\n                    \"metang\",\r\n                    \"metagross\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/metang\"\r\n    },\r\n    {\r\n        \"num\": 376,\r\n        \"name\": \"Metagross\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Metagross\",\r\n                \"description\": \"Metagross is a Steel/Psychic type Pokémon introduced in Generation 3. It is known as the Iron Leg Pokémon.\\nMetagross has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/metagross.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Iron Leg Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 550,\r\n                \"abilities\": [\r\n                    \"Clear Body\",\r\n                    \"Light Metal\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 80,\r\n                    \"attack\": 135,\r\n                    \"defense\": 130,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"beldum\",\r\n                    \"metang\",\r\n                    \"metagross\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Metagross\",\r\n                \"description\": \"Metagross is a Steel/Psychic type Pokémon introduced in Generation 3. It is known as the Iron Leg Pokémon.\\nMetagross has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/metagross-mega.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Iron Leg Pokémon\",\r\n                \"height\": 2.5,\r\n                \"weight\": 942.9,\r\n                \"abilities\": [\r\n                    \"Tough Claws\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 700,\r\n                    \"hp\": 80,\r\n                    \"attack\": 145,\r\n                    \"defense\": 150,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": [\r\n                    \"beldum\",\r\n                    \"metang\",\r\n                    \"metagross\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/metagross\"\r\n    },\r\n    {\r\n        \"num\": 377,\r\n        \"name\": \"Regirock\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Regirock\",\r\n                \"description\": \"Regirock is a Rock type Pokémon introduced in Generation 3. It is known as the Rock Peak Pokémon.\",\r\n                \"image\": \"images/regirock.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Rock Peak Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 230,\r\n                \"abilities\": [\r\n                    \"Clear Body\",\r\n                    \"Sturdy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 80,\r\n                    \"attack\": 100,\r\n                    \"defense\": 200,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/regirock\"\r\n    },\r\n    {\r\n        \"num\": 378,\r\n        \"name\": \"Regice\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Regice\",\r\n                \"description\": \"Regice is an Ice type Pokémon introduced in Generation 3. It is known as the Iceberg Pokémon.\",\r\n                \"image\": \"images/regice.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Iceberg Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 175,\r\n                \"abilities\": [\r\n                    \"Clear Body\",\r\n                    \"Ice Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 80,\r\n                    \"attack\": 50,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 200,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/regice\"\r\n    },\r\n    {\r\n        \"num\": 379,\r\n        \"name\": \"Registeel\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Registeel\",\r\n                \"description\": \"Registeel is a Steel type Pokémon introduced in Generation 3. It is known as the Iron Pokémon.\",\r\n                \"image\": \"images/registeel.jpg\",\r\n                \"types\": [\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Iron Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 205,\r\n                \"abilities\": [\r\n                    \"Clear Body\",\r\n                    \"Light Metal\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 80,\r\n                    \"attack\": 75,\r\n                    \"defense\": 150,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 150,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/registeel\"\r\n    },\r\n    {\r\n        \"num\": 380,\r\n        \"name\": \"Latias\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Latias\",\r\n                \"description\": \"Latias is a Dragon/Psychic type Pokémon introduced in Generation 3. It is known as the Eon Pokémon.\\nLatias has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/latias.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Eon Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 40,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 80,\r\n                    \"attack\": 80,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 130,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Latias\",\r\n                \"description\": \"Latias is a Dragon/Psychic type Pokémon introduced in Generation 3. It is known as the Eon Pokémon.\\nLatias has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/latias-mega.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Eon Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 52,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 700,\r\n                    \"hp\": 80,\r\n                    \"attack\": 100,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 140,\r\n                    \"speedDefense\": 150,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/latias\"\r\n    },\r\n    {\r\n        \"num\": 381,\r\n        \"name\": \"Latios\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Latios\",\r\n                \"description\": \"Latios is a Dragon/Psychic type Pokémon introduced in Generation 3. It is known as the Eon Pokémon.\\nLatios has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/latios.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Eon Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 60,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 80,\r\n                    \"attack\": 90,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 130,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Latios\",\r\n                \"description\": \"Latios is a Dragon/Psychic type Pokémon introduced in Generation 3. It is known as the Eon Pokémon.\\nLatios has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/latios-mega.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Eon Pokémon\",\r\n                \"height\": 2.3,\r\n                \"weight\": 70,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 700,\r\n                    \"hp\": 80,\r\n                    \"attack\": 130,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 160,\r\n                    \"speedDefense\": 120,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/latios\"\r\n    },\r\n    {\r\n        \"num\": 382,\r\n        \"name\": \"Kyogre\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kyogre\",\r\n                \"description\": \"Kyogre is a Water type Pokémon introduced in Generation 3. It is known as the Sea Basin Pokémon.\",\r\n                \"image\": \"images/kyogre.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Sea Basin Pokémon\",\r\n                \"height\": 4.5,\r\n                \"weight\": 352,\r\n                \"abilities\": [\r\n                    \"Drizzle\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 670,\r\n                    \"hp\": 100,\r\n                    \"attack\": 100,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 150,\r\n                    \"speedDefense\": 140,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Primal Kyogre\",\r\n                \"description\": \"Kyogre is a Water type Pokémon introduced in Generation 3. It is known as the Sea Basin Pokémon.\",\r\n                \"image\": \"images/kyogre-primal.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Sea Basin Pokémon\",\r\n                \"height\": 9.8,\r\n                \"weight\": 430,\r\n                \"abilities\": [\r\n                    \"Primordial Sea\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 770,\r\n                    \"hp\": 100,\r\n                    \"attack\": 150,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 180,\r\n                    \"speedDefense\": 160,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kyogre\"\r\n    },\r\n    {\r\n        \"num\": 383,\r\n        \"name\": \"Groudon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Groudon\",\r\n                \"description\": \"Groudon is a Ground type Pokémon introduced in Generation 3. It is known as the Continent Pokémon.\",\r\n                \"image\": \"images/groudon.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Continent Pokémon\",\r\n                \"height\": 3.5,\r\n                \"weight\": 950,\r\n                \"abilities\": [\r\n                    \"Drought\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 670,\r\n                    \"hp\": 100,\r\n                    \"attack\": 150,\r\n                    \"defense\": 140,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Primal Groudon\",\r\n                \"description\": \"Groudon is a Ground type Pokémon introduced in Generation 3. It is known as the Continent Pokémon.\",\r\n                \"image\": \"images/groudon-primal.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Continent Pokémon\",\r\n                \"height\": 5,\r\n                \"weight\": 999.7,\r\n                \"abilities\": [\r\n                    \"Desolate Land\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 770,\r\n                    \"hp\": 100,\r\n                    \"attack\": 180,\r\n                    \"defense\": 160,\r\n                    \"speedAttack\": 150,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/groudon\"\r\n    },\r\n    {\r\n        \"num\": 384,\r\n        \"name\": \"Rayquaza\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Rayquaza\",\r\n                \"description\": \"Rayquaza is a Dragon/Flying type Pokémon introduced in Generation 3. It is known as the Sky High Pokémon.\\nRayquaza has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/rayquaza.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Sky High Pokémon\",\r\n                \"height\": 7,\r\n                \"weight\": 206.5,\r\n                \"abilities\": [\r\n                    \"Air Lock\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 105,\r\n                    \"attack\": 150,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 150,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Rayquaza\",\r\n                \"description\": \"Rayquaza is a Dragon/Flying type Pokémon introduced in Generation 3. It is known as the Sky High Pokémon.\\nRayquaza has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/rayquaza-mega.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Sky High Pokémon\",\r\n                \"height\": 10.8,\r\n                \"weight\": 392,\r\n                \"abilities\": [\r\n                    \"Delta Stream\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 780,\r\n                    \"hp\": 105,\r\n                    \"attack\": 180,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 180,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 115\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/rayquaza\"\r\n    },\r\n    {\r\n        \"num\": 385,\r\n        \"name\": \"Jirachi\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Jirachi\",\r\n                \"description\": \"Jirachi is a Steel/Psychic type Pokémon introduced in Generation 3. It is known as the Wish Pokémon.\",\r\n                \"image\": \"images/jirachi.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Wish Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 1.1,\r\n                \"abilities\": [\r\n                    \"Serene Grace\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 100,\r\n                    \"attack\": 100,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/jirachi\"\r\n    },\r\n    {\r\n        \"num\": 386,\r\n        \"name\": \"Deoxys\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Normal Forme\",\r\n                \"description\": \"Deoxys is a Psychic type Pokémon introduced in Generation 3. It is known as the DNA Pokémon.\",\r\n                \"image\": \"images/deoxys-normal.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"DNA Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 60.8,\r\n                \"abilities\": [\r\n                    \"Pressure\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 50,\r\n                    \"attack\": 150,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 150,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 150\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Attack Forme\",\r\n                \"description\": \"Deoxys is a Psychic type Pokémon introduced in Generation 3. It is known as the DNA Pokémon.\",\r\n                \"image\": \"images/deoxys-attack.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"DNA Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 60.8,\r\n                \"abilities\": [\r\n                    \"Pressure\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 50,\r\n                    \"attack\": 180,\r\n                    \"defense\": 20,\r\n                    \"speedAttack\": 180,\r\n                    \"speedDefense\": 20,\r\n                    \"speed\": 150\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Defense Forme\",\r\n                \"description\": \"Deoxys is a Psychic type Pokémon introduced in Generation 3. It is known as the DNA Pokémon.\",\r\n                \"image\": \"images/deoxys-defense.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"DNA Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 60.8,\r\n                \"abilities\": [\r\n                    \"Pressure\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 50,\r\n                    \"attack\": 70,\r\n                    \"defense\": 160,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 160,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Speed Forme\",\r\n                \"description\": \"Deoxys is a Psychic type Pokémon introduced in Generation 3. It is known as the DNA Pokémon.\",\r\n                \"image\": \"images/deoxys-speed.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"DNA Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 60.8,\r\n                \"abilities\": [\r\n                    \"Pressure\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 50,\r\n                    \"attack\": 95,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 180\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/deoxys\"\r\n    },\r\n    {\r\n        \"num\": 387,\r\n        \"name\": \"Turtwig\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Turtwig\",\r\n                \"description\": \"Turtwig is a Grass type Pokémon introduced in Generation 4. It is known as the Tiny Leaf Pokémon.\",\r\n                \"image\": \"images/turtwig.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Tiny Leaf Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 10.2,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Shell Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 318,\r\n                    \"hp\": 55,\r\n                    \"attack\": 68,\r\n                    \"defense\": 64,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 31\r\n                },\r\n                \"evolutions\": [\r\n                    \"turtwig\",\r\n                    \"grotle\",\r\n                    \"torterra\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/turtwig\"\r\n    },\r\n    {\r\n        \"num\": 388,\r\n        \"name\": \"Grotle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Grotle\",\r\n                \"description\": \"Grotle is a Grass type Pokémon introduced in Generation 4. It is known as the Grove Pokémon.\",\r\n                \"image\": \"images/grotle.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Grove Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 97,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Shell Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 75,\r\n                    \"attack\": 89,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 36\r\n                },\r\n                \"evolutions\": [\r\n                    \"turtwig\",\r\n                    \"grotle\",\r\n                    \"torterra\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/grotle\"\r\n    },\r\n    {\r\n        \"num\": 389,\r\n        \"name\": \"Torterra\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Torterra\",\r\n                \"description\": \"Torterra is a Grass/Ground type Pokémon introduced in Generation 4. It is known as the Continent Pokémon.\",\r\n                \"image\": \"images/torterra.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Continent Pokémon\",\r\n                \"height\": 2.2,\r\n                \"weight\": 310,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Shell Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 95,\r\n                    \"attack\": 109,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 56\r\n                },\r\n                \"evolutions\": [\r\n                    \"turtwig\",\r\n                    \"grotle\",\r\n                    \"torterra\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/torterra\"\r\n    },\r\n    {\r\n        \"num\": 390,\r\n        \"name\": \"Chimchar\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Chimchar\",\r\n                \"description\": \"Chimchar is a Fire type Pokémon introduced in Generation 4. It is known as the Chimp Pokémon.\",\r\n                \"image\": \"images/chimchar.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Chimp Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 6.2,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Iron Fist\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 309,\r\n                    \"hp\": 44,\r\n                    \"attack\": 58,\r\n                    \"defense\": 44,\r\n                    \"speedAttack\": 58,\r\n                    \"speedDefense\": 44,\r\n                    \"speed\": 61\r\n                },\r\n                \"evolutions\": [\r\n                    \"chimchar\",\r\n                    \"monferno\",\r\n                    \"infernape\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/chimchar\"\r\n    },\r\n    {\r\n        \"num\": 391,\r\n        \"name\": \"Monferno\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Monferno\",\r\n                \"description\": \"Monferno is a Fire/Fighting type Pokémon introduced in Generation 4. It is known as the Playful Pokémon.\",\r\n                \"image\": \"images/monferno.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Playful Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 22,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Iron Fist\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 64,\r\n                    \"attack\": 78,\r\n                    \"defense\": 52,\r\n                    \"speedAttack\": 78,\r\n                    \"speedDefense\": 52,\r\n                    \"speed\": 81\r\n                },\r\n                \"evolutions\": [\r\n                    \"chimchar\",\r\n                    \"monferno\",\r\n                    \"infernape\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/monferno\"\r\n    },\r\n    {\r\n        \"num\": 392,\r\n        \"name\": \"Infernape\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Infernape\",\r\n                \"description\": \"Infernape is a Fire/Fighting type Pokémon introduced in Generation 4. It is known as the Flame Pokémon.\",\r\n                \"image\": \"images/infernape.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Flame Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 55,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Iron Fist\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 534,\r\n                    \"hp\": 76,\r\n                    \"attack\": 104,\r\n                    \"defense\": 71,\r\n                    \"speedAttack\": 104,\r\n                    \"speedDefense\": 71,\r\n                    \"speed\": 108\r\n                },\r\n                \"evolutions\": [\r\n                    \"chimchar\",\r\n                    \"monferno\",\r\n                    \"infernape\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/infernape\"\r\n    },\r\n    {\r\n        \"num\": 393,\r\n        \"name\": \"Piplup\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Piplup\",\r\n                \"description\": \"Piplup is a Water type Pokémon introduced in Generation 4. It is known as the Penguin Pokémon.\",\r\n                \"image\": \"images/piplup.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Penguin Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 5.2,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Defiant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 314,\r\n                    \"hp\": 53,\r\n                    \"attack\": 51,\r\n                    \"defense\": 53,\r\n                    \"speedAttack\": 61,\r\n                    \"speedDefense\": 56,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"piplup\",\r\n                    \"prinplup\",\r\n                    \"empoleon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/piplup\"\r\n    },\r\n    {\r\n        \"num\": 394,\r\n        \"name\": \"Prinplup\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Prinplup\",\r\n                \"description\": \"Prinplup is a Water type Pokémon introduced in Generation 4. It is known as the Penguin Pokémon.\",\r\n                \"image\": \"images/prinplup.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Penguin Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 23,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Defiant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 64,\r\n                    \"attack\": 66,\r\n                    \"defense\": 68,\r\n                    \"speedAttack\": 81,\r\n                    \"speedDefense\": 76,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"piplup\",\r\n                    \"prinplup\",\r\n                    \"empoleon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/prinplup\"\r\n    },\r\n    {\r\n        \"num\": 395,\r\n        \"name\": \"Empoleon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Empoleon\",\r\n                \"description\": \"Empoleon is a Water/Steel type Pokémon introduced in Generation 4. It is known as the Emperor Pokémon.\",\r\n                \"image\": \"images/empoleon.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Emperor Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 84.5,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Defiant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 84,\r\n                    \"attack\": 86,\r\n                    \"defense\": 88,\r\n                    \"speedAttack\": 111,\r\n                    \"speedDefense\": 101,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"piplup\",\r\n                    \"prinplup\",\r\n                    \"empoleon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/empoleon\"\r\n    },\r\n    {\r\n        \"num\": 396,\r\n        \"name\": \"Starly\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Starly\",\r\n                \"description\": \"Starly is a Normal/Flying type Pokémon introduced in Generation 4. It is known as the Starling Pokémon.\",\r\n                \"image\": \"images/starly.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Starling Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 2,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Reckless\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 245,\r\n                    \"hp\": 40,\r\n                    \"attack\": 55,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"starly\",\r\n                    \"staravia\",\r\n                    \"staraptor\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/starly\"\r\n    },\r\n    {\r\n        \"num\": 397,\r\n        \"name\": \"Staravia\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Staravia\",\r\n                \"description\": \"Staravia is a Normal/Flying type Pokémon introduced in Generation 4. It is known as the Starling Pokémon.\",\r\n                \"image\": \"images/staravia.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Starling Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 15.5,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Reckless\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 340,\r\n                    \"hp\": 55,\r\n                    \"attack\": 75,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"starly\",\r\n                    \"staravia\",\r\n                    \"staraptor\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/staravia\"\r\n    },\r\n    {\r\n        \"num\": 398,\r\n        \"name\": \"Staraptor\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Staraptor\",\r\n                \"description\": \"Staraptor is a Normal/Flying type Pokémon introduced in Generation 4. It is known as the Predator Pokémon.\",\r\n                \"image\": \"images/staraptor.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Predator Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 24.9,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Reckless\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 85,\r\n                    \"attack\": 120,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"starly\",\r\n                    \"staravia\",\r\n                    \"staraptor\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/staraptor\"\r\n    },\r\n    {\r\n        \"num\": 399,\r\n        \"name\": \"Bidoof\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bidoof\",\r\n                \"description\": \"Bidoof is a Normal type Pokémon introduced in Generation 4. It is known as the Plump Mouse Pokémon.\",\r\n                \"image\": \"images/bidoof.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Plump Mouse Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 20,\r\n                \"abilities\": [\r\n                    \"Simple\",\r\n                    \"Unaware\",\r\n                    \"Moody\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 250,\r\n                    \"hp\": 59,\r\n                    \"attack\": 45,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 31\r\n                },\r\n                \"evolutions\": [\r\n                    \"bidoof\",\r\n                    \"bibarel\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bidoof\"\r\n    },\r\n    {\r\n        \"num\": 400,\r\n        \"name\": \"Bibarel\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bibarel\",\r\n                \"description\": \"Bibarel is a Normal/Water type Pokémon introduced in Generation 4. It is known as the Beaver Pokémon.\",\r\n                \"image\": \"images/bibarel.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Beaver Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 31.5,\r\n                \"abilities\": [\r\n                    \"Simple\",\r\n                    \"Unaware\",\r\n                    \"Moody\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 410,\r\n                    \"hp\": 79,\r\n                    \"attack\": 85,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 71\r\n                },\r\n                \"evolutions\": [\r\n                    \"bidoof\",\r\n                    \"bibarel\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bibarel\"\r\n    },\r\n    {\r\n        \"num\": 401,\r\n        \"name\": \"Kricketot\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kricketot\",\r\n                \"description\": \"Kricketot is a Bug type Pokémon introduced in Generation 4. It is known as the Cricket Pokémon.\",\r\n                \"image\": \"images/kricketot.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Cricket Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 2.2,\r\n                \"abilities\": [\r\n                    \"Shed Skin\",\r\n                    \"Run Away\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 194,\r\n                    \"hp\": 37,\r\n                    \"attack\": 25,\r\n                    \"defense\": 41,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 41,\r\n                    \"speed\": 25\r\n                },\r\n                \"evolutions\": [\r\n                    \"kricketot\",\r\n                    \"kricketune\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kricketot\"\r\n    },\r\n    {\r\n        \"num\": 402,\r\n        \"name\": \"Kricketune\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kricketune\",\r\n                \"description\": \"Kricketune is a Bug type Pokémon introduced in Generation 4. It is known as the Cricket Pokémon.\",\r\n                \"image\": \"images/kricketune.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Cricket Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 25.5,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Technician\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 384,\r\n                    \"hp\": 77,\r\n                    \"attack\": 85,\r\n                    \"defense\": 51,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 51,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"kricketot\",\r\n                    \"kricketune\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kricketune\"\r\n    },\r\n    {\r\n        \"num\": 403,\r\n        \"name\": \"Shinx\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Shinx\",\r\n                \"description\": \"Shinx is an Electric type Pokémon introduced in Generation 4. It is known as the Flash Pokémon.\",\r\n                \"image\": \"images/shinx.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Flash Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 9.5,\r\n                \"abilities\": [\r\n                    \"Rivalry\",\r\n                    \"Intimidate\",\r\n                    \"Guts\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 263,\r\n                    \"hp\": 45,\r\n                    \"attack\": 65,\r\n                    \"defense\": 34,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 34,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"shinx\",\r\n                    \"luxio\",\r\n                    \"luxray\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/shinx\"\r\n    },\r\n    {\r\n        \"num\": 404,\r\n        \"name\": \"Luxio\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Luxio\",\r\n                \"description\": \"Luxio is an Electric type Pokémon introduced in Generation 4. It is known as the Spark Pokémon.\",\r\n                \"image\": \"images/luxio.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Spark Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 30.5,\r\n                \"abilities\": [\r\n                    \"Rivalry\",\r\n                    \"Intimidate\",\r\n                    \"Guts\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 363,\r\n                    \"hp\": 60,\r\n                    \"attack\": 85,\r\n                    \"defense\": 49,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 49,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"shinx\",\r\n                    \"luxio\",\r\n                    \"luxray\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/luxio\"\r\n    },\r\n    {\r\n        \"num\": 405,\r\n        \"name\": \"Luxray\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Luxray\",\r\n                \"description\": \"Luxray is an Electric type Pokémon introduced in Generation 4. It is known as the Gleam Eyes Pokémon.\",\r\n                \"image\": \"images/luxray.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Gleam Eyes Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 42,\r\n                \"abilities\": [\r\n                    \"Rivalry\",\r\n                    \"Intimidate\",\r\n                    \"Guts\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 523,\r\n                    \"hp\": 80,\r\n                    \"attack\": 120,\r\n                    \"defense\": 79,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 79,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"shinx\",\r\n                    \"luxio\",\r\n                    \"luxray\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/luxray\"\r\n    },\r\n    {\r\n        \"num\": 406,\r\n        \"name\": \"Budew\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Budew\",\r\n                \"description\": \"Budew is a Grass/Poison type Pokémon introduced in Generation 4. It is known as the Bud Pokémon.\",\r\n                \"image\": \"images/budew.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Bud Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 1.2,\r\n                \"abilities\": [\r\n                    \"Natural Cure\",\r\n                    \"Poison Point\",\r\n                    \"Leaf Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 280,\r\n                    \"hp\": 40,\r\n                    \"attack\": 30,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"budew\",\r\n                    \"roselia\",\r\n                    \"roserade\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/budew\"\r\n    },\r\n    {\r\n        \"num\": 407,\r\n        \"name\": \"Roserade\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Roserade\",\r\n                \"description\": \"Roserade is a Grass/Poison type Pokémon introduced in Generation 4. It is known as the Bouquet Pokémon.\",\r\n                \"image\": \"images/roserade.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Bouquet Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 14.5,\r\n                \"abilities\": [\r\n                    \"Natural Cure\",\r\n                    \"Poison Point\",\r\n                    \"Technician\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 515,\r\n                    \"hp\": 60,\r\n                    \"attack\": 70,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"budew\",\r\n                    \"roselia\",\r\n                    \"roserade\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/roserade\"\r\n    },\r\n    {\r\n        \"num\": 408,\r\n        \"name\": \"Cranidos\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cranidos\",\r\n                \"description\": \"Cranidos is a Rock type Pokémon introduced in Generation 4. It is known as the Head Butt Pokémon.\",\r\n                \"image\": \"images/cranidos.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Head Butt Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 31.5,\r\n                \"abilities\": [\r\n                    \"Mold Breaker\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 350,\r\n                    \"hp\": 67,\r\n                    \"attack\": 125,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 58\r\n                },\r\n                \"evolutions\": [\r\n                    \"cranidos\",\r\n                    \"rampardos\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cranidos\"\r\n    },\r\n    {\r\n        \"num\": 409,\r\n        \"name\": \"Rampardos\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Rampardos\",\r\n                \"description\": \"Rampardos is a Rock type Pokémon introduced in Generation 4. It is known as the Head Butt Pokémon.\",\r\n                \"image\": \"images/rampardos.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Head Butt Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 102.5,\r\n                \"abilities\": [\r\n                    \"Mold Breaker\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 97,\r\n                    \"attack\": 165,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 58\r\n                },\r\n                \"evolutions\": [\r\n                    \"cranidos\",\r\n                    \"rampardos\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/rampardos\"\r\n    },\r\n    {\r\n        \"num\": 410,\r\n        \"name\": \"Shieldon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Shieldon\",\r\n                \"description\": \"Shieldon is a Rock/Steel type Pokémon introduced in Generation 4. It is known as the Shield Pokémon.\",\r\n                \"image\": \"images/shieldon.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Shield Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 57,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Soundproof\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 350,\r\n                    \"hp\": 30,\r\n                    \"attack\": 42,\r\n                    \"defense\": 118,\r\n                    \"speedAttack\": 42,\r\n                    \"speedDefense\": 88,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"shieldon\",\r\n                    \"bastiodon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/shieldon\"\r\n    },\r\n    {\r\n        \"num\": 411,\r\n        \"name\": \"Bastiodon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bastiodon\",\r\n                \"description\": \"Bastiodon is a Rock/Steel type Pokémon introduced in Generation 4. It is known as the Shield Pokémon.\",\r\n                \"image\": \"images/bastiodon.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Shield Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 149.5,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Soundproof\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 60,\r\n                    \"attack\": 52,\r\n                    \"defense\": 168,\r\n                    \"speedAttack\": 47,\r\n                    \"speedDefense\": 138,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"shieldon\",\r\n                    \"bastiodon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bastiodon\"\r\n    },\r\n    {\r\n        \"num\": 412,\r\n        \"name\": \"Burmy\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Burmy\",\r\n                \"description\": \"Burmy is a Bug type Pokémon introduced in Generation 4. It is known as the Bagworm Pokémon.\",\r\n                \"image\": \"images/burmy.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Bagworm Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 3.4,\r\n                \"abilities\": [\r\n                    \"Shed Skin\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 224,\r\n                    \"hp\": 40,\r\n                    \"attack\": 29,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 29,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 36\r\n                },\r\n                \"evolutions\": [\r\n                    \"burmy\",\r\n                    \"mothim\",\r\n                    \"burmy\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/burmy\"\r\n    },\r\n    {\r\n        \"num\": 413,\r\n        \"name\": \"Wormadam\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Plant Cloak\",\r\n                \"description\": \"Wormadam is a Bug/Grass type Pokémon introduced in Generation 4. It is known as the Bagworm Pokémon.\",\r\n                \"image\": \"images/wormadam-plant.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Bagworm Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 6.5,\r\n                \"abilities\": [\r\n                    \"Anticipation\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 424,\r\n                    \"hp\": 60,\r\n                    \"attack\": 59,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 79,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 36\r\n                },\r\n                \"evolutions\": [\r\n                    \"burmy\",\r\n                    \"mothim\",\r\n                    \"burmy\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Sandy Cloak\",\r\n                \"description\": \"Wormadam is a Bug/Grass type Pokémon introduced in Generation 4. It is known as the Bagworm Pokémon.\",\r\n                \"image\": \"images/wormadam-sandy.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Bagworm Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 6.5,\r\n                \"abilities\": [\r\n                    \"Anticipation\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 424,\r\n                    \"hp\": 60,\r\n                    \"attack\": 79,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 59,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 36\r\n                },\r\n                \"evolutions\": [\r\n                    \"burmy\",\r\n                    \"mothim\",\r\n                    \"burmy\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Trash Cloak\",\r\n                \"description\": \"Wormadam is a Bug/Grass type Pokémon introduced in Generation 4. It is known as the Bagworm Pokémon.\",\r\n                \"image\": \"images/wormadam-trash.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Bagworm Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 6.5,\r\n                \"abilities\": [\r\n                    \"Anticipation\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 424,\r\n                    \"hp\": 60,\r\n                    \"attack\": 69,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 69,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 36\r\n                },\r\n                \"evolutions\": [\r\n                    \"burmy\",\r\n                    \"mothim\",\r\n                    \"burmy\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/wormadam\"\r\n    },\r\n    {\r\n        \"num\": 414,\r\n        \"name\": \"Mothim\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mothim\",\r\n                \"description\": \"Mothim is a Bug/Flying type Pokémon introduced in Generation 4. It is known as the Moth Pokémon.\",\r\n                \"image\": \"images/mothim.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Moth Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 23.3,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Tinted Lens\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 424,\r\n                    \"hp\": 70,\r\n                    \"attack\": 94,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 94,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 66\r\n                },\r\n                \"evolutions\": [\r\n                    \"burmy\",\r\n                    \"mothim\",\r\n                    \"burmy\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mothim\"\r\n    },\r\n    {\r\n        \"num\": 415,\r\n        \"name\": \"Combee\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Combee\",\r\n                \"description\": \"Combee is a Bug/Flying type Pokémon introduced in Generation 4. It is known as the Tiny Bee Pokémon.\",\r\n                \"image\": \"images/combee.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Tiny Bee Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 5.5,\r\n                \"abilities\": [\r\n                    \"Honey Gather\",\r\n                    \"Hustle\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 244,\r\n                    \"hp\": 30,\r\n                    \"attack\": 30,\r\n                    \"defense\": 42,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 42,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"combee\",\r\n                    \"vespiquen\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/combee\"\r\n    },\r\n    {\r\n        \"num\": 416,\r\n        \"name\": \"Vespiquen\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Vespiquen\",\r\n                \"description\": \"Vespiquen is a Bug/Flying type Pokémon introduced in Generation 4. It is known as the Beehive Pokémon.\",\r\n                \"image\": \"images/vespiquen.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Beehive Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 38.5,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 474,\r\n                    \"hp\": 70,\r\n                    \"attack\": 80,\r\n                    \"defense\": 102,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 102,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"combee\",\r\n                    \"vespiquen\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/vespiquen\"\r\n    },\r\n    {\r\n        \"num\": 417,\r\n        \"name\": \"Pachirisu\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pachirisu\",\r\n                \"description\": \"Pachirisu is an Electric type Pokémon introduced in Generation 4. It is known as the EleSquirrel Pokémon.\",\r\n                \"image\": \"images/pachirisu.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"EleSquirrel Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 3.9,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Pickup\",\r\n                    \"Volt Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 60,\r\n                    \"attack\": 45,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pachirisu\"\r\n    },\r\n    {\r\n        \"num\": 418,\r\n        \"name\": \"Buizel\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Buizel\",\r\n                \"description\": \"Buizel is a Water type Pokémon introduced in Generation 4. It is known as the Sea Weasel Pokémon.\",\r\n                \"image\": \"images/buizel.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Sea Weasel Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 29.5,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Water Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 55,\r\n                    \"attack\": 65,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"buizel\",\r\n                    \"floatzel\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/buizel\"\r\n    },\r\n    {\r\n        \"num\": 419,\r\n        \"name\": \"Floatzel\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Floatzel\",\r\n                \"description\": \"Floatzel is a Water type Pokémon introduced in Generation 4. It is known as the Sea Weasel Pokémon.\",\r\n                \"image\": \"images/floatzel.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Sea Weasel Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 33.5,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Water Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 85,\r\n                    \"attack\": 105,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 115\r\n                },\r\n                \"evolutions\": [\r\n                    \"buizel\",\r\n                    \"floatzel\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/floatzel\"\r\n    },\r\n    {\r\n        \"num\": 420,\r\n        \"name\": \"Cherubi\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cherubi\",\r\n                \"description\": \"Cherubi is a Grass type Pokémon introduced in Generation 4. It is known as the Cherry Pokémon.\",\r\n                \"image\": \"images/cherubi.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Cherry Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 3.3,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 275,\r\n                    \"hp\": 45,\r\n                    \"attack\": 35,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 62,\r\n                    \"speedDefense\": 53,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"cherubi\",\r\n                    \"cherrim\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cherubi\"\r\n    },\r\n    {\r\n        \"num\": 421,\r\n        \"name\": \"Cherrim\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cherrim\",\r\n                \"description\": \"Cherrim is a Grass type Pokémon introduced in Generation 4. It is known as the Blossom Pokémon.\",\r\n                \"image\": \"images/cherrim.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Blossom Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 9.3,\r\n                \"abilities\": [\r\n                    \"Flower Gift\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 450,\r\n                    \"hp\": 70,\r\n                    \"attack\": 60,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 87,\r\n                    \"speedDefense\": 78,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"cherubi\",\r\n                    \"cherrim\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cherrim\"\r\n    },\r\n    {\r\n        \"num\": 422,\r\n        \"name\": \"Shellos\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Shellos\",\r\n                \"description\": \"Shellos is a Water type Pokémon introduced in Generation 4. It is known as the Sea Slug Pokémon.\",\r\n                \"image\": \"images/shellos.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Sea Slug Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 6.3,\r\n                \"abilities\": [\r\n                    \"Sticky Hold\",\r\n                    \"Storm Drain\",\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 325,\r\n                    \"hp\": 76,\r\n                    \"attack\": 48,\r\n                    \"defense\": 48,\r\n                    \"speedAttack\": 57,\r\n                    \"speedDefense\": 62,\r\n                    \"speed\": 34\r\n                },\r\n                \"evolutions\": [\r\n                    \"shellos\",\r\n                    \"gastrodon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/shellos\"\r\n    },\r\n    {\r\n        \"num\": 423,\r\n        \"name\": \"Gastrodon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gastrodon\",\r\n                \"description\": \"Gastrodon is a Water/Ground type Pokémon introduced in Generation 4. It is known as the Sea Slug Pokémon.\",\r\n                \"image\": \"images/gastrodon.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Sea Slug Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 29.9,\r\n                \"abilities\": [\r\n                    \"Sticky Hold\",\r\n                    \"Storm Drain\",\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 475,\r\n                    \"hp\": 111,\r\n                    \"attack\": 83,\r\n                    \"defense\": 68,\r\n                    \"speedAttack\": 92,\r\n                    \"speedDefense\": 82,\r\n                    \"speed\": 39\r\n                },\r\n                \"evolutions\": [\r\n                    \"shellos\",\r\n                    \"gastrodon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gastrodon\"\r\n    },\r\n    {\r\n        \"num\": 424,\r\n        \"name\": \"Ambipom\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ambipom\",\r\n                \"description\": \"Ambipom is a Normal type Pokémon introduced in Generation 4. It is known as the Long Tail Pokémon.\",\r\n                \"image\": \"images/ambipom.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Long Tail Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 20.3,\r\n                \"abilities\": [\r\n                    \"Technician\",\r\n                    \"Pickup\",\r\n                    \"Skill Link\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 482,\r\n                    \"hp\": 75,\r\n                    \"attack\": 100,\r\n                    \"defense\": 66,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 66,\r\n                    \"speed\": 115\r\n                },\r\n                \"evolutions\": [\r\n                    \"aipom\",\r\n                    \"ambipom\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ambipom\"\r\n    },\r\n    {\r\n        \"num\": 425,\r\n        \"name\": \"Drifloon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Drifloon\",\r\n                \"description\": \"Drifloon is a Ghost/Flying type Pokémon introduced in Generation 4. It is known as the Balloon Pokémon.\",\r\n                \"image\": \"images/drifloon.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Balloon Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 1.2,\r\n                \"abilities\": [\r\n                    \"Aftermath\",\r\n                    \"Unburden\",\r\n                    \"Flare Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 348,\r\n                    \"hp\": 90,\r\n                    \"attack\": 50,\r\n                    \"defense\": 34,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 44,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"drifloon\",\r\n                    \"drifblim\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/drifloon\"\r\n    },\r\n    {\r\n        \"num\": 426,\r\n        \"name\": \"Drifblim\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Drifblim\",\r\n                \"description\": \"Drifblim is a Ghost/Flying type Pokémon introduced in Generation 4. It is known as the Blimp Pokémon.\",\r\n                \"image\": \"images/drifblim.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Blimp Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 15,\r\n                \"abilities\": [\r\n                    \"Aftermath\",\r\n                    \"Unburden\",\r\n                    \"Flare Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 498,\r\n                    \"hp\": 150,\r\n                    \"attack\": 80,\r\n                    \"defense\": 44,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 54,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"drifloon\",\r\n                    \"drifblim\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/drifblim\"\r\n    },\r\n    {\r\n        \"num\": 427,\r\n        \"name\": \"Buneary\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Buneary\",\r\n                \"description\": \"Buneary is a Normal type Pokémon introduced in Generation 4. It is known as the Rabbit Pokémon.\",\r\n                \"image\": \"images/buneary.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Rabbit Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 5.5,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Klutz\",\r\n                    \"Limber\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 350,\r\n                    \"hp\": 55,\r\n                    \"attack\": 66,\r\n                    \"defense\": 44,\r\n                    \"speedAttack\": 44,\r\n                    \"speedDefense\": 56,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"buneary\",\r\n                    \"lopunny\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/buneary\"\r\n    },\r\n    {\r\n        \"num\": 428,\r\n        \"name\": \"Lopunny\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lopunny\",\r\n                \"description\": \"Lopunny is a Normal type Pokémon introduced in Generation 4. It is known as the Rabbit Pokémon.\\nLopunny has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/lopunny.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Rabbit Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 33.3,\r\n                \"abilities\": [\r\n                    \"Cute Charm\",\r\n                    \"Klutz\",\r\n                    \"Limber\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 65,\r\n                    \"attack\": 76,\r\n                    \"defense\": 84,\r\n                    \"speedAttack\": 54,\r\n                    \"speedDefense\": 96,\r\n                    \"speed\": 105\r\n                },\r\n                \"evolutions\": [\r\n                    \"buneary\",\r\n                    \"lopunny\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Lopunny\",\r\n                \"description\": \"Lopunny is a Normal type Pokémon introduced in Generation 4. It is known as the Rabbit Pokémon.\\nLopunny has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/lopunny-mega.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Rabbit Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 28.3,\r\n                \"abilities\": [\r\n                    \"Scrappy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 65,\r\n                    \"attack\": 136,\r\n                    \"defense\": 94,\r\n                    \"speedAttack\": 54,\r\n                    \"speedDefense\": 96,\r\n                    \"speed\": 135\r\n                },\r\n                \"evolutions\": [\r\n                    \"buneary\",\r\n                    \"lopunny\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lopunny\"\r\n    },\r\n    {\r\n        \"num\": 429,\r\n        \"name\": \"Mismagius\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mismagius\",\r\n                \"description\": \"Mismagius is a Ghost type Pokémon introduced in Generation 4. It is known as the Magical Pokémon.\",\r\n                \"image\": \"images/mismagius.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Magical Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 4.4,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 60,\r\n                    \"attack\": 60,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 105\r\n                },\r\n                \"evolutions\": [\r\n                    \"misdreavus\",\r\n                    \"mismagius\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mismagius\"\r\n    },\r\n    {\r\n        \"num\": 430,\r\n        \"name\": \"Honchkrow\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Honchkrow\",\r\n                \"description\": \"Honchkrow is a Dark/Flying type Pokémon introduced in Generation 4. It is known as the Big Boss Pokémon.\",\r\n                \"image\": \"images/honchkrow.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Big Boss Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 27.3,\r\n                \"abilities\": [\r\n                    \"Insomnia\",\r\n                    \"Super Luck\",\r\n                    \"Moxie\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 505,\r\n                    \"hp\": 100,\r\n                    \"attack\": 125,\r\n                    \"defense\": 52,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 52,\r\n                    \"speed\": 71\r\n                },\r\n                \"evolutions\": [\r\n                    \"murkrow\",\r\n                    \"honchkrow\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/honchkrow\"\r\n    },\r\n    {\r\n        \"num\": 431,\r\n        \"name\": \"Glameow\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Glameow\",\r\n                \"description\": \"Glameow is a Normal type Pokémon introduced in Generation 4. It is known as the Catty Pokémon.\",\r\n                \"image\": \"images/glameow.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Catty Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 3.9,\r\n                \"abilities\": [\r\n                    \"Limber\",\r\n                    \"Own Tempo\",\r\n                    \"Keen Eye\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 310,\r\n                    \"hp\": 49,\r\n                    \"attack\": 55,\r\n                    \"defense\": 42,\r\n                    \"speedAttack\": 42,\r\n                    \"speedDefense\": 37,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"glameow\",\r\n                    \"purugly\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/glameow\"\r\n    },\r\n    {\r\n        \"num\": 432,\r\n        \"name\": \"Purugly\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Purugly\",\r\n                \"description\": \"Purugly is a Normal type Pokémon introduced in Generation 4. It is known as the Tiger Cat Pokémon.\",\r\n                \"image\": \"images/purugly.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Tiger Cat Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 43.8,\r\n                \"abilities\": [\r\n                    \"Thick Fat\",\r\n                    \"Own Tempo\",\r\n                    \"Defiant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 452,\r\n                    \"hp\": 71,\r\n                    \"attack\": 82,\r\n                    \"defense\": 64,\r\n                    \"speedAttack\": 64,\r\n                    \"speedDefense\": 59,\r\n                    \"speed\": 112\r\n                },\r\n                \"evolutions\": [\r\n                    \"glameow\",\r\n                    \"purugly\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/purugly\"\r\n    },\r\n    {\r\n        \"num\": 433,\r\n        \"name\": \"Chingling\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Chingling\",\r\n                \"description\": \"Chingling is a Psychic type Pokémon introduced in Generation 4. It is known as the Bell Pokémon.\",\r\n                \"image\": \"images/chingling.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Bell Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 0.6,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 285,\r\n                    \"hp\": 45,\r\n                    \"attack\": 30,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"chingling\",\r\n                    \"chimecho\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/chingling\"\r\n    },\r\n    {\r\n        \"num\": 434,\r\n        \"name\": \"Stunky\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Stunky\",\r\n                \"description\": \"Stunky is a Poison/Dark type Pokémon introduced in Generation 4. It is known as the Skunk Pokémon.\",\r\n                \"image\": \"images/stunky.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Skunk Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 19.2,\r\n                \"abilities\": [\r\n                    \"Stench\",\r\n                    \"Aftermath\",\r\n                    \"Keen Eye\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 329,\r\n                    \"hp\": 63,\r\n                    \"attack\": 63,\r\n                    \"defense\": 47,\r\n                    \"speedAttack\": 41,\r\n                    \"speedDefense\": 41,\r\n                    \"speed\": 74\r\n                },\r\n                \"evolutions\": [\r\n                    \"stunky\",\r\n                    \"skuntank\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/stunky\"\r\n    },\r\n    {\r\n        \"num\": 435,\r\n        \"name\": \"Skuntank\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Skuntank\",\r\n                \"description\": \"Skuntank is a Poison/Dark type Pokémon introduced in Generation 4. It is known as the Skunk Pokémon.\",\r\n                \"image\": \"images/skuntank.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Skunk Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 38,\r\n                \"abilities\": [\r\n                    \"Stench\",\r\n                    \"Aftermath\",\r\n                    \"Keen Eye\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 479,\r\n                    \"hp\": 103,\r\n                    \"attack\": 93,\r\n                    \"defense\": 67,\r\n                    \"speedAttack\": 71,\r\n                    \"speedDefense\": 61,\r\n                    \"speed\": 84\r\n                },\r\n                \"evolutions\": [\r\n                    \"stunky\",\r\n                    \"skuntank\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/skuntank\"\r\n    },\r\n    {\r\n        \"num\": 436,\r\n        \"name\": \"Bronzor\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bronzor\",\r\n                \"description\": \"Bronzor is a Steel/Psychic type Pokémon introduced in Generation 4. It is known as the Bronze Pokémon.\",\r\n                \"image\": \"images/bronzor.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Bronze Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 60.5,\r\n                \"abilities\": [\r\n                    \"Levitate\",\r\n                    \"Heatproof\",\r\n                    \"Heavy Metal\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 57,\r\n                    \"attack\": 24,\r\n                    \"defense\": 86,\r\n                    \"speedAttack\": 24,\r\n                    \"speedDefense\": 86,\r\n                    \"speed\": 23\r\n                },\r\n                \"evolutions\": [\r\n                    \"bronzor\",\r\n                    \"bronzong\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bronzor\"\r\n    },\r\n    {\r\n        \"num\": 437,\r\n        \"name\": \"Bronzong\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bronzong\",\r\n                \"description\": \"Bronzong is a Steel/Psychic type Pokémon introduced in Generation 4. It is known as the Bronze Bell Pokémon.\",\r\n                \"image\": \"images/bronzong.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Bronze Bell Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 187,\r\n                \"abilities\": [\r\n                    \"Levitate\",\r\n                    \"Heatproof\",\r\n                    \"Heavy Metal\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 67,\r\n                    \"attack\": 89,\r\n                    \"defense\": 116,\r\n                    \"speedAttack\": 79,\r\n                    \"speedDefense\": 116,\r\n                    \"speed\": 33\r\n                },\r\n                \"evolutions\": [\r\n                    \"bronzor\",\r\n                    \"bronzong\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bronzong\"\r\n    },\r\n    {\r\n        \"num\": 438,\r\n        \"name\": \"Bonsly\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bonsly\",\r\n                \"description\": \"Bonsly is a Rock type Pokémon introduced in Generation 4. It is known as the Bonsai Pokémon.\",\r\n                \"image\": \"images/bonsly.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Bonsai Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 15,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Rock Head\",\r\n                    \"Rattled\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 290,\r\n                    \"hp\": 50,\r\n                    \"attack\": 80,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 10,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 10\r\n                },\r\n                \"evolutions\": [\r\n                    \"bonsly\",\r\n                    \"sudowoodo\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bonsly\"\r\n    },\r\n    {\r\n        \"num\": 439,\r\n        \"name\": \"Mime Jr.\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mime Jr.\",\r\n                \"description\": \"Mime Jr. is a Psychic/Fairy type Pokémon introduced in Generation 4. It is known as the Mime Pokémon.\",\r\n                \"image\": \"images/mime-jr.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Mime Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 13,\r\n                \"abilities\": [\r\n                    \"Soundproof\",\r\n                    \"Filter\",\r\n                    \"Technician\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 310,\r\n                    \"hp\": 20,\r\n                    \"attack\": 25,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"mime jr.\",\r\n                    \"mr. mime\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mime-jr\"\r\n    },\r\n    {\r\n        \"num\": 440,\r\n        \"name\": \"Happiny\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Happiny\",\r\n                \"description\": \"Happiny is a Normal type Pokémon introduced in Generation 4. It is known as the Playhouse Pokémon.\",\r\n                \"image\": \"images/happiny.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Playhouse Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 24.4,\r\n                \"abilities\": [\r\n                    \"Natural Cure\",\r\n                    \"Serene Grace\",\r\n                    \"Friend Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 220,\r\n                    \"hp\": 100,\r\n                    \"attack\": 5,\r\n                    \"defense\": 5,\r\n                    \"speedAttack\": 15,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"happiny\",\r\n                    \"chansey\",\r\n                    \"blissey\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/happiny\"\r\n    },\r\n    {\r\n        \"num\": 441,\r\n        \"name\": \"Chatot\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Chatot\",\r\n                \"description\": \"Chatot is a Normal/Flying type Pokémon introduced in Generation 4. It is known as the Music Note Pokémon.\",\r\n                \"image\": \"images/chatot.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Music Note Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 1.9,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Tangled Feet\",\r\n                    \"Big Pecks\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 411,\r\n                    \"hp\": 76,\r\n                    \"attack\": 65,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 92,\r\n                    \"speedDefense\": 42,\r\n                    \"speed\": 91\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/chatot\"\r\n    },\r\n    {\r\n        \"num\": 442,\r\n        \"name\": \"Spiritomb\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Spiritomb\",\r\n                \"description\": \"Spiritomb is a Ghost/Dark type Pokémon introduced in Generation 4. It is known as the Forbidden Pokémon.\",\r\n                \"image\": \"images/spiritomb.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Forbidden Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 108,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 50,\r\n                    \"attack\": 92,\r\n                    \"defense\": 108,\r\n                    \"speedAttack\": 92,\r\n                    \"speedDefense\": 108,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/spiritomb\"\r\n    },\r\n    {\r\n        \"num\": 443,\r\n        \"name\": \"Gible\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gible\",\r\n                \"description\": \"Gible is a Dragon/Ground type Pokémon introduced in Generation 4. It is known as the Land Shark Pokémon.\",\r\n                \"image\": \"images/gible.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Land Shark Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 20.5,\r\n                \"abilities\": [\r\n                    \"Sand Veil\",\r\n                    \"Rough Skin\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 58,\r\n                    \"attack\": 70,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 42\r\n                },\r\n                \"evolutions\": [\r\n                    \"gible\",\r\n                    \"gabite\",\r\n                    \"garchomp\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gible\"\r\n    },\r\n    {\r\n        \"num\": 444,\r\n        \"name\": \"Gabite\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gabite\",\r\n                \"description\": \"Gabite is a Dragon/Ground type Pokémon introduced in Generation 4. It is known as the Cave Pokémon.\",\r\n                \"image\": \"images/gabite.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Cave Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 56,\r\n                \"abilities\": [\r\n                    \"Sand Veil\",\r\n                    \"Rough Skin\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 410,\r\n                    \"hp\": 68,\r\n                    \"attack\": 90,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 82\r\n                },\r\n                \"evolutions\": [\r\n                    \"gible\",\r\n                    \"gabite\",\r\n                    \"garchomp\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gabite\"\r\n    },\r\n    {\r\n        \"num\": 445,\r\n        \"name\": \"Garchomp\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Garchomp\",\r\n                \"description\": \"Garchomp is a Dragon/Ground type Pokémon introduced in Generation 4. It is known as the Mach Pokémon.\\nGarchomp has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/garchomp.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Mach Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 95,\r\n                \"abilities\": [\r\n                    \"Sand Veil\",\r\n                    \"Rough Skin\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 108,\r\n                    \"attack\": 130,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 102\r\n                },\r\n                \"evolutions\": [\r\n                    \"gible\",\r\n                    \"gabite\",\r\n                    \"garchomp\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Garchomp\",\r\n                \"description\": \"Garchomp is a Dragon/Ground type Pokémon introduced in Generation 4. It is known as the Mach Pokémon.\\nGarchomp has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/garchomp-mega.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Mach Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 95,\r\n                \"abilities\": [\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 700,\r\n                    \"hp\": 108,\r\n                    \"attack\": 170,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 92\r\n                },\r\n                \"evolutions\": [\r\n                    \"gible\",\r\n                    \"gabite\",\r\n                    \"garchomp\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/garchomp\"\r\n    },\r\n    {\r\n        \"num\": 446,\r\n        \"name\": \"Munchlax\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Munchlax\",\r\n                \"description\": \"Munchlax is a Normal type Pokémon introduced in Generation 4. It is known as the Big Eater Pokémon.\",\r\n                \"image\": \"images/munchlax.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Big Eater Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 105,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Thick Fat\",\r\n                    \"Gluttony\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 390,\r\n                    \"hp\": 135,\r\n                    \"attack\": 85,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 5\r\n                },\r\n                \"evolutions\": [\r\n                    \"munchlax\",\r\n                    \"snorlax\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/munchlax\"\r\n    },\r\n    {\r\n        \"num\": 447,\r\n        \"name\": \"Riolu\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Riolu\",\r\n                \"description\": \"Riolu is a Fighting type Pokémon introduced in Generation 4. It is known as the Emanation Pokémon.\",\r\n                \"image\": \"images/riolu.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Emanation Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 20.2,\r\n                \"abilities\": [\r\n                    \"Steadfast\",\r\n                    \"Inner Focus\",\r\n                    \"Prankster\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 285,\r\n                    \"hp\": 40,\r\n                    \"attack\": 70,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"riolu\",\r\n                    \"lucario\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/riolu\"\r\n    },\r\n    {\r\n        \"num\": 448,\r\n        \"name\": \"Lucario\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lucario\",\r\n                \"description\": \"Lucario is a Fighting/Steel type Pokémon introduced in Generation 4. It is known as the Aura Pokémon.\\nLucario has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/lucario.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Aura Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 54,\r\n                \"abilities\": [\r\n                    \"Steadfast\",\r\n                    \"Inner Focus\",\r\n                    \"Justified\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 70,\r\n                    \"attack\": 110,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 115,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"riolu\",\r\n                    \"lucario\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Lucario\",\r\n                \"description\": \"Lucario is a Fighting/Steel type Pokémon introduced in Generation 4. It is known as the Aura Pokémon.\\nLucario has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/lucario-mega.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Aura Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 57.5,\r\n                \"abilities\": [\r\n                    \"Adaptability\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 625,\r\n                    \"hp\": 70,\r\n                    \"attack\": 145,\r\n                    \"defense\": 88,\r\n                    \"speedAttack\": 140,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 112\r\n                },\r\n                \"evolutions\": [\r\n                    \"riolu\",\r\n                    \"lucario\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lucario\"\r\n    },\r\n    {\r\n        \"num\": 449,\r\n        \"name\": \"Hippopotas\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Hippopotas\",\r\n                \"description\": \"Hippopotas is a Ground type Pokémon introduced in Generation 4. It is known as the Hippo Pokémon.\",\r\n                \"image\": \"images/hippopotas.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Hippo Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 49.5,\r\n                \"abilities\": [\r\n                    \"Sand Stream\",\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 68,\r\n                    \"attack\": 72,\r\n                    \"defense\": 78,\r\n                    \"speedAttack\": 38,\r\n                    \"speedDefense\": 42,\r\n                    \"speed\": 32\r\n                },\r\n                \"evolutions\": [\r\n                    \"hippopotas\",\r\n                    \"hippowdon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/hippopotas\"\r\n    },\r\n    {\r\n        \"num\": 450,\r\n        \"name\": \"Hippowdon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Hippowdon\",\r\n                \"description\": \"Hippowdon is a Ground type Pokémon introduced in Generation 4. It is known as the Heavyweight Pokémon.\",\r\n                \"image\": \"images/hippowdon.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Heavyweight Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 300,\r\n                \"abilities\": [\r\n                    \"Sand Stream\",\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 108,\r\n                    \"attack\": 112,\r\n                    \"defense\": 118,\r\n                    \"speedAttack\": 68,\r\n                    \"speedDefense\": 72,\r\n                    \"speed\": 47\r\n                },\r\n                \"evolutions\": [\r\n                    \"hippopotas\",\r\n                    \"hippowdon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/hippowdon\"\r\n    },\r\n    {\r\n        \"num\": 451,\r\n        \"name\": \"Skorupi\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Skorupi\",\r\n                \"description\": \"Skorupi is a Poison/Bug type Pokémon introduced in Generation 4. It is known as the Scorpion Pokémon.\",\r\n                \"image\": \"images/skorupi.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Scorpion Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 12,\r\n                \"abilities\": [\r\n                    \"Battle Armor\",\r\n                    \"Sniper\",\r\n                    \"Keen Eye\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 40,\r\n                    \"attack\": 50,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"skorupi\",\r\n                    \"drapion\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/skorupi\"\r\n    },\r\n    {\r\n        \"num\": 452,\r\n        \"name\": \"Drapion\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Drapion\",\r\n                \"description\": \"Drapion is a Poison/Dark type Pokémon introduced in Generation 4. It is known as the Ogre Scorp Pokémon.\\nDrapion is a purple, scorpion-like Pokémon. Its body is segmented and it stands on four pointed legs. It has two large claws at the front, the tips of which release poison, and a similar large pincer on its tail. It can rotate its head 180 degrees. Drapion typically reside in the desert, although they have been spotted in marshland.\\nAlthough Drapion is Poison/Dark type, it evolves from Skorupi which is Poison/Bug type, thus loses its Bug type upon evolution - a rare occurrence for Pokémon.\",\r\n                \"image\": \"images/drapion.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Ogre Scorp Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 61.5,\r\n                \"abilities\": [\r\n                    \"Battle Armor\",\r\n                    \"Sniper\",\r\n                    \"Keen Eye\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 70,\r\n                    \"attack\": 90,\r\n                    \"defense\": 110,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"skorupi\",\r\n                    \"drapion\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/drapion\"\r\n    },\r\n    {\r\n        \"num\": 453,\r\n        \"name\": \"Croagunk\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Croagunk\",\r\n                \"description\": \"Croagunk is a Poison/Fighting type Pokémon introduced in Generation 4. It is known as the Toxic Mouth Pokémon.\",\r\n                \"image\": \"images/croagunk.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Toxic Mouth Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 23,\r\n                \"abilities\": [\r\n                    \"Anticipation\",\r\n                    \"Dry Skin\",\r\n                    \"Poison Touch\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 48,\r\n                    \"attack\": 61,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 61,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"croagunk\",\r\n                    \"toxicroak\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/croagunk\"\r\n    },\r\n    {\r\n        \"num\": 454,\r\n        \"name\": \"Toxicroak\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Toxicroak\",\r\n                \"description\": \"Toxicroak is a Poison/Fighting type Pokémon introduced in Generation 4. It is known as the Toxic Mouth Pokémon.\",\r\n                \"image\": \"images/toxicroak.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Toxic Mouth Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 44.4,\r\n                \"abilities\": [\r\n                    \"Anticipation\",\r\n                    \"Dry Skin\",\r\n                    \"Poison Touch\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 83,\r\n                    \"attack\": 106,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 86,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"croagunk\",\r\n                    \"toxicroak\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/toxicroak\"\r\n    },\r\n    {\r\n        \"num\": 455,\r\n        \"name\": \"Carnivine\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Carnivine\",\r\n                \"description\": \"Carnivine is a Grass type Pokémon introduced in Generation 4. It is known as the Bug Catcher Pokémon.\",\r\n                \"image\": \"images/carnivine.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Bug Catcher Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 27,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 454,\r\n                    \"hp\": 74,\r\n                    \"attack\": 100,\r\n                    \"defense\": 72,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 72,\r\n                    \"speed\": 46\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/carnivine\"\r\n    },\r\n    {\r\n        \"num\": 456,\r\n        \"name\": \"Finneon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Finneon\",\r\n                \"description\": \"Finneon is a Water type Pokémon introduced in Generation 4. It is known as the Wing Fish Pokémon.\",\r\n                \"image\": \"images/finneon.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Wing Fish Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 7,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Storm Drain\",\r\n                    \"Water Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 49,\r\n                    \"attack\": 49,\r\n                    \"defense\": 56,\r\n                    \"speedAttack\": 49,\r\n                    \"speedDefense\": 61,\r\n                    \"speed\": 66\r\n                },\r\n                \"evolutions\": [\r\n                    \"finneon\",\r\n                    \"lumineon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/finneon\"\r\n    },\r\n    {\r\n        \"num\": 457,\r\n        \"name\": \"Lumineon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lumineon\",\r\n                \"description\": \"Lumineon is a Water type Pokémon introduced in Generation 4. It is known as the Neon Pokémon.\",\r\n                \"image\": \"images/lumineon.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Neon Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 24,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Storm Drain\",\r\n                    \"Water Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 460,\r\n                    \"hp\": 69,\r\n                    \"attack\": 69,\r\n                    \"defense\": 76,\r\n                    \"speedAttack\": 69,\r\n                    \"speedDefense\": 86,\r\n                    \"speed\": 91\r\n                },\r\n                \"evolutions\": [\r\n                    \"finneon\",\r\n                    \"lumineon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lumineon\"\r\n    },\r\n    {\r\n        \"num\": 458,\r\n        \"name\": \"Mantyke\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mantyke\",\r\n                \"description\": \"Mantyke is a Water/Flying type Pokémon introduced in Generation 4. It is known as the Kite Pokémon.\",\r\n                \"image\": \"images/mantyke.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Kite Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 65,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Water Absorb\",\r\n                    \"Water Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 345,\r\n                    \"hp\": 45,\r\n                    \"attack\": 20,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 120,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"mantyke\",\r\n                    \"mantine\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mantyke\"\r\n    },\r\n    {\r\n        \"num\": 459,\r\n        \"name\": \"Snover\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Snover\",\r\n                \"description\": \"Snover is a Grass/Ice type Pokémon introduced in Generation 4. It is known as the Frost Tree Pokémon.\",\r\n                \"image\": \"images/snover.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Frost Tree Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 50.5,\r\n                \"abilities\": [\r\n                    \"Snow Warning\",\r\n                    \"Soundproof\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 334,\r\n                    \"hp\": 60,\r\n                    \"attack\": 62,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 62,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"snover\",\r\n                    \"abomasnow\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/snover\"\r\n    },\r\n    {\r\n        \"num\": 460,\r\n        \"name\": \"Abomasnow\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Abomasnow\",\r\n                \"description\": \"Abomasnow is a Grass/Ice type Pokémon introduced in Generation 4. It is known as the Frost Tree Pokémon.\\nAbomasnow has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/abomasnow.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Frost Tree Pokémon\",\r\n                \"height\": 2.2,\r\n                \"weight\": 135.5,\r\n                \"abilities\": [\r\n                    \"Snow Warning\",\r\n                    \"Soundproof\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 494,\r\n                    \"hp\": 90,\r\n                    \"attack\": 92,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 92,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"snover\",\r\n                    \"abomasnow\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Abomasnow\",\r\n                \"description\": \"Abomasnow is a Grass/Ice type Pokémon introduced in Generation 4. It is known as the Frost Tree Pokémon.\\nAbomasnow has a Mega Evolution, available from X & Y onwards.\",\r\n                \"image\": \"images/abomasnow-mega.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Frost Tree Pokémon\",\r\n                \"height\": 2.7,\r\n                \"weight\": 185,\r\n                \"abilities\": [\r\n                    \"Snow Warning\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 594,\r\n                    \"hp\": 90,\r\n                    \"attack\": 132,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 132,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"snover\",\r\n                    \"abomasnow\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/abomasnow\"\r\n    },\r\n    {\r\n        \"num\": 461,\r\n        \"name\": \"Weavile\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Weavile\",\r\n                \"description\": \"Weavile is a Dark/Ice type Pokémon introduced in Generation 4. It is known as the Sharp Claw Pokémon.\",\r\n                \"image\": \"images/weavile.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Sharp Claw Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 34,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Pickpocket\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 510,\r\n                    \"hp\": 70,\r\n                    \"attack\": 120,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 125\r\n                },\r\n                \"evolutions\": [\r\n                    \"sneasel\",\r\n                    \"weavile\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/weavile\"\r\n    },\r\n    {\r\n        \"num\": 462,\r\n        \"name\": \"Magnezone\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Magnezone\",\r\n                \"description\": \"Magnezone is an Electric/Steel type Pokémon introduced in Generation 4. It is known as the Magnet Area Pokémon.\",\r\n                \"image\": \"images/magnezone.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Magnet Area Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 180,\r\n                \"abilities\": [\r\n                    \"Magnet Pull\",\r\n                    \"Sturdy\",\r\n                    \"Analytic\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 535,\r\n                    \"hp\": 70,\r\n                    \"attack\": 70,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 130,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"magnemite\",\r\n                    \"magneton\",\r\n                    \"magnezone\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/magnezone\"\r\n    },\r\n    {\r\n        \"num\": 463,\r\n        \"name\": \"Lickilicky\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lickilicky\",\r\n                \"description\": \"Lickilicky is a Normal type Pokémon introduced in Generation 4. It is known as the Licking Pokémon.\",\r\n                \"image\": \"images/lickilicky.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Licking Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 140,\r\n                \"abilities\": [\r\n                    \"Own Tempo\",\r\n                    \"Oblivious\",\r\n                    \"Cloud Nine\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 515,\r\n                    \"hp\": 110,\r\n                    \"attack\": 85,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"lickitung\",\r\n                    \"lickilicky\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lickilicky\"\r\n    },\r\n    {\r\n        \"num\": 464,\r\n        \"name\": \"Rhyperior\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Rhyperior\",\r\n                \"description\": \"Rhyperior is a Ground/Rock type Pokémon introduced in Generation 4. It is known as the Drill Pokémon.\",\r\n                \"image\": \"images/rhyperior.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Drill Pokémon\",\r\n                \"height\": 2.4,\r\n                \"weight\": 282.8,\r\n                \"abilities\": [\r\n                    \"Lightning Rod\",\r\n                    \"Solid Rock\",\r\n                    \"Reckless\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 535,\r\n                    \"hp\": 115,\r\n                    \"attack\": 140,\r\n                    \"defense\": 130,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"rhyhorn\",\r\n                    \"rhydon\",\r\n                    \"rhyperior\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/rhyperior\"\r\n    },\r\n    {\r\n        \"num\": 465,\r\n        \"name\": \"Tangrowth\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tangrowth\",\r\n                \"description\": \"Tangrowth is a Grass type Pokémon introduced in Generation 4. It is known as the Vine Pokémon.\",\r\n                \"image\": \"images/tangrowth.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Vine Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 128.6,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Leaf Guard\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 535,\r\n                    \"hp\": 100,\r\n                    \"attack\": 100,\r\n                    \"defense\": 125,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"tangela\",\r\n                    \"tangrowth\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tangrowth\"\r\n    },\r\n    {\r\n        \"num\": 466,\r\n        \"name\": \"Electivire\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Electivire\",\r\n                \"description\": \"Electivire is an Electric type Pokémon introduced in Generation 4. It is known as the Thunderbolt Pokémon.\",\r\n                \"image\": \"images/electivire.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Thunderbolt Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 138.6,\r\n                \"abilities\": [\r\n                    \"Motor Drive\",\r\n                    \"Vital Spirit\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 540,\r\n                    \"hp\": 75,\r\n                    \"attack\": 123,\r\n                    \"defense\": 67,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"elekid\",\r\n                    \"electabuzz\",\r\n                    \"electivire\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/electivire\"\r\n    },\r\n    {\r\n        \"num\": 467,\r\n        \"name\": \"Magmortar\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Magmortar\",\r\n                \"description\": \"Magmortar is a Fire type Pokémon introduced in Generation 4. It is known as the Blast Pokémon.\",\r\n                \"image\": \"images/magmortar.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Blast Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 68,\r\n                \"abilities\": [\r\n                    \"Flame Body\",\r\n                    \"Vital Spirit\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 540,\r\n                    \"hp\": 75,\r\n                    \"attack\": 95,\r\n                    \"defense\": 67,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 83\r\n                },\r\n                \"evolutions\": [\r\n                    \"magby\",\r\n                    \"magmar\",\r\n                    \"magmortar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/magmortar\"\r\n    },\r\n    {\r\n        \"num\": 468,\r\n        \"name\": \"Togekiss\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Togekiss\",\r\n                \"description\": \"Togekiss is a Fairy/Flying type Pokémon introduced in Generation 4. It is known as the Jubilee Pokémon.\",\r\n                \"image\": \"images/togekiss.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Jubilee Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 38,\r\n                \"abilities\": [\r\n                    \"Hustle\",\r\n                    \"Serene Grace\",\r\n                    \"Super Luck\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 545,\r\n                    \"hp\": 85,\r\n                    \"attack\": 50,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 115,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"togepi\",\r\n                    \"togetic\",\r\n                    \"togekiss\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/togekiss\"\r\n    },\r\n    {\r\n        \"num\": 469,\r\n        \"name\": \"Yanmega\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Yanmega\",\r\n                \"description\": \"Yanmega is a Bug/Flying type Pokémon introduced in Generation 4. It is known as the Ogre Darner Pokémon.\",\r\n                \"image\": \"images/yanmega.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Ogre Darner Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 51.5,\r\n                \"abilities\": [\r\n                    \"Speed Boost\",\r\n                    \"Tinted Lens\",\r\n                    \"Frisk\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 515,\r\n                    \"hp\": 86,\r\n                    \"attack\": 76,\r\n                    \"defense\": 86,\r\n                    \"speedAttack\": 116,\r\n                    \"speedDefense\": 56,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"yanma\",\r\n                    \"yanmega\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/yanmega\"\r\n    },\r\n    {\r\n        \"num\": 470,\r\n        \"name\": \"Leafeon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Leafeon\",\r\n                \"description\": \"Leafeon is a Grass type Pokémon introduced in Generation 4. It is known as the Verdant Pokémon.\",\r\n                \"image\": \"images/leafeon.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Verdant Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 25.5,\r\n                \"abilities\": [\r\n                    \"Leaf Guard\",\r\n                    \"Chlorophyll\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 65,\r\n                    \"attack\": 110,\r\n                    \"defense\": 130,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"eevee\",\r\n                    \"vaporeon\",\r\n                    \"jolteon\",\r\n                    \"flareon\",\r\n                    \"eevee\",\r\n                    \"espeon\",\r\n                    \"umbreon\",\r\n                    \"eevee\",\r\n                    \"leafeon\",\r\n                    \"glaceon\",\r\n                    \"eevee\",\r\n                    \"sylveon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/leafeon\"\r\n    },\r\n    {\r\n        \"num\": 471,\r\n        \"name\": \"Glaceon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Glaceon\",\r\n                \"description\": \"Glaceon is an Ice type Pokémon introduced in Generation 4. It is known as the Fresh Snow Pokémon.\",\r\n                \"image\": \"images/glaceon.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Fresh Snow Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 25.9,\r\n                \"abilities\": [\r\n                    \"Snow Cloak\",\r\n                    \"Ice Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 65,\r\n                    \"attack\": 60,\r\n                    \"defense\": 110,\r\n                    \"speedAttack\": 130,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"eevee\",\r\n                    \"vaporeon\",\r\n                    \"jolteon\",\r\n                    \"flareon\",\r\n                    \"eevee\",\r\n                    \"espeon\",\r\n                    \"umbreon\",\r\n                    \"eevee\",\r\n                    \"leafeon\",\r\n                    \"glaceon\",\r\n                    \"eevee\",\r\n                    \"sylveon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/glaceon\"\r\n    },\r\n    {\r\n        \"num\": 472,\r\n        \"name\": \"Gliscor\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gliscor\",\r\n                \"description\": \"Gliscor is a Ground/Flying type Pokémon introduced in Generation 4. It is known as the Fang Scorp Pokémon.\",\r\n                \"image\": \"images/gliscor.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Fang Scorp Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 42.5,\r\n                \"abilities\": [\r\n                    \"Hyper Cutter\",\r\n                    \"Sand Veil\",\r\n                    \"Poison Heal\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 510,\r\n                    \"hp\": 75,\r\n                    \"attack\": 95,\r\n                    \"defense\": 125,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"gligar\",\r\n                    \"gliscor\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gliscor\"\r\n    },\r\n    {\r\n        \"num\": 473,\r\n        \"name\": \"Mamoswine\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mamoswine\",\r\n                \"description\": \"Mamoswine is an Ice/Ground type Pokémon introduced in Generation 4. It is known as the Twin Tusk Pokémon.\",\r\n                \"image\": \"images/mamoswine.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Twin Tusk Pokémon\",\r\n                \"height\": 2.5,\r\n                \"weight\": 291,\r\n                \"abilities\": [\r\n                    \"Oblivious\",\r\n                    \"Snow Cloak\",\r\n                    \"Thick Fat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 110,\r\n                    \"attack\": 130,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"swinub\",\r\n                    \"piloswine\",\r\n                    \"mamoswine\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mamoswine\"\r\n    },\r\n    {\r\n        \"num\": 474,\r\n        \"name\": \"Porygon-Z\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Porygon-Z\",\r\n                \"description\": \"Porygon-Z is a Normal type Pokémon introduced in Generation 4. It is known as the Virtual Pokémon.\",\r\n                \"image\": \"images/porygon-z.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Virtual Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 34,\r\n                \"abilities\": [\r\n                    \"Adaptability\",\r\n                    \"Download\",\r\n                    \"Analytic\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 535,\r\n                    \"hp\": 85,\r\n                    \"attack\": 80,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 135,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"porygon\",\r\n                    \"porygon2\",\r\n                    \"porygon-z\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/porygon-z\"\r\n    },\r\n    {\r\n        \"num\": 475,\r\n        \"name\": \"Gallade\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gallade\",\r\n                \"description\": \"Gallade is a Psychic/Fighting type Pokémon introduced in Generation 4. It is known as the Blade Pokémon.\\nGallade has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/gallade.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Blade Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 52,\r\n                \"abilities\": [\r\n                    \"Steadfast\",\r\n                    \"Justified\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 518,\r\n                    \"hp\": 68,\r\n                    \"attack\": 125,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 115,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"ralts\",\r\n                    \"kirlia\",\r\n                    \"gardevoir\",\r\n                    \"gallade\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Mega Gallade\",\r\n                \"description\": \"Gallade is a Psychic/Fighting type Pokémon introduced in Generation 4. It is known as the Blade Pokémon.\\nGallade has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/gallade-mega.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Blade Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 56.4,\r\n                \"abilities\": [\r\n                    \"Inner Focus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 618,\r\n                    \"hp\": 68,\r\n                    \"attack\": 165,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 115,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": [\r\n                    \"ralts\",\r\n                    \"kirlia\",\r\n                    \"gardevoir\",\r\n                    \"gallade\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gallade\"\r\n    },\r\n    {\r\n        \"num\": 476,\r\n        \"name\": \"Probopass\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Probopass\",\r\n                \"description\": \"Probopass is a Rock/Steel type Pokémon introduced in Generation 4. It is known as the Compass Pokémon.\",\r\n                \"image\": \"images/probopass.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Compass Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 340,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Magnet Pull\",\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 60,\r\n                    \"attack\": 55,\r\n                    \"defense\": 145,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 150,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"nosepass\",\r\n                    \"probopass\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/probopass\"\r\n    },\r\n    {\r\n        \"num\": 477,\r\n        \"name\": \"Dusknoir\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dusknoir\",\r\n                \"description\": \"Dusknoir is a Ghost type Pokémon introduced in Generation 4. It is known as the Gripper Pokémon.\",\r\n                \"image\": \"images/dusknoir.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Gripper Pokémon\",\r\n                \"height\": 2.2,\r\n                \"weight\": 106.6,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Frisk\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 45,\r\n                    \"attack\": 100,\r\n                    \"defense\": 135,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 135,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"duskull\",\r\n                    \"dusclops\",\r\n                    \"dusknoir\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dusknoir\"\r\n    },\r\n    {\r\n        \"num\": 478,\r\n        \"name\": \"Froslass\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Froslass\",\r\n                \"description\": \"Froslass is an Ice/Ghost type Pokémon introduced in Generation 4. It is known as the Snow Land Pokémon.\",\r\n                \"image\": \"images/froslass.jpg\",\r\n                \"types\": [\r\n                    \"Ice\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Snow Land Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 26.6,\r\n                \"abilities\": [\r\n                    \"Snow Cloak\",\r\n                    \"Cursed Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 70,\r\n                    \"attack\": 80,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": [\r\n                    \"snorunt\",\r\n                    \"glalie\",\r\n                    \"froslass\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/froslass\"\r\n    },\r\n    {\r\n        \"num\": 479,\r\n        \"name\": \"Rotom\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Rotom\",\r\n                \"description\": \"Rotom is an Electric/Ghost type Pokémon introduced in Generation 4. It is known as the Plasma Pokémon.\\nRotom has 5 alternate forms introduced in Pokémon Platinum. Rotom transforms when it possesses different household appliances: an oven (Heat Rotom), a washing machine (Wash Rotom), a refrigerator (Frost Rotom), a fan (Fan Rotom), and a lawnmower (Mow Rotom).\\nIn Generation 4, all Rotom forms were Electric/Ghost type. From Generation 5 onwards, they each have their own secondary type.\",\r\n                \"image\": \"images/rotom.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Plasma Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.3,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 440,\r\n                    \"hp\": 50,\r\n                    \"attack\": 50,\r\n                    \"defense\": 77,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 77,\r\n                    \"speed\": 91\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Heat Rotom\",\r\n                \"description\": \"Rotom is an Electric/Ghost type Pokémon introduced in Generation 4. It is known as the Plasma Pokémon.\\nRotom has 5 alternate forms introduced in Pokémon Platinum. Rotom transforms when it possesses different household appliances: an oven (Heat Rotom), a washing machine (Wash Rotom), a refrigerator (Frost Rotom), a fan (Fan Rotom), and a lawnmower (Mow Rotom).\\nIn Generation 4, all Rotom forms were Electric/Ghost type. From Generation 5 onwards, they each have their own secondary type.\",\r\n                \"image\": \"images/rotom-heat.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Plasma Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.3,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 520,\r\n                    \"hp\": 50,\r\n                    \"attack\": 65,\r\n                    \"defense\": 107,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 107,\r\n                    \"speed\": 86\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Wash Rotom\",\r\n                \"description\": \"Rotom is an Electric/Ghost type Pokémon introduced in Generation 4. It is known as the Plasma Pokémon.\\nRotom has 5 alternate forms introduced in Pokémon Platinum. Rotom transforms when it possesses different household appliances: an oven (Heat Rotom), a washing machine (Wash Rotom), a refrigerator (Frost Rotom), a fan (Fan Rotom), and a lawnmower (Mow Rotom).\\nIn Generation 4, all Rotom forms were Electric/Ghost type. From Generation 5 onwards, they each have their own secondary type.\",\r\n                \"image\": \"images/rotom-wash.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Plasma Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.3,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 520,\r\n                    \"hp\": 50,\r\n                    \"attack\": 65,\r\n                    \"defense\": 107,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 107,\r\n                    \"speed\": 86\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Frost Rotom\",\r\n                \"description\": \"Rotom is an Electric/Ghost type Pokémon introduced in Generation 4. It is known as the Plasma Pokémon.\\nRotom has 5 alternate forms introduced in Pokémon Platinum. Rotom transforms when it possesses different household appliances: an oven (Heat Rotom), a washing machine (Wash Rotom), a refrigerator (Frost Rotom), a fan (Fan Rotom), and a lawnmower (Mow Rotom).\\nIn Generation 4, all Rotom forms were Electric/Ghost type. From Generation 5 onwards, they each have their own secondary type.\",\r\n                \"image\": \"images/rotom-frost.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Plasma Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.3,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 520,\r\n                    \"hp\": 50,\r\n                    \"attack\": 65,\r\n                    \"defense\": 107,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 107,\r\n                    \"speed\": 86\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Fan Rotom\",\r\n                \"description\": \"Rotom is an Electric/Ghost type Pokémon introduced in Generation 4. It is known as the Plasma Pokémon.\\nRotom has 5 alternate forms introduced in Pokémon Platinum. Rotom transforms when it possesses different household appliances: an oven (Heat Rotom), a washing machine (Wash Rotom), a refrigerator (Frost Rotom), a fan (Fan Rotom), and a lawnmower (Mow Rotom).\\nIn Generation 4, all Rotom forms were Electric/Ghost type. From Generation 5 onwards, they each have their own secondary type.\",\r\n                \"image\": \"images/rotom-fan.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Plasma Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.3,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 520,\r\n                    \"hp\": 50,\r\n                    \"attack\": 65,\r\n                    \"defense\": 107,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 107,\r\n                    \"speed\": 86\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mow Rotom\",\r\n                \"description\": \"Rotom is an Electric/Ghost type Pokémon introduced in Generation 4. It is known as the Plasma Pokémon.\\nRotom has 5 alternate forms introduced in Pokémon Platinum. Rotom transforms when it possesses different household appliances: an oven (Heat Rotom), a washing machine (Wash Rotom), a refrigerator (Frost Rotom), a fan (Fan Rotom), and a lawnmower (Mow Rotom).\\nIn Generation 4, all Rotom forms were Electric/Ghost type. From Generation 5 onwards, they each have their own secondary type.\",\r\n                \"image\": \"images/rotom-mow.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Plasma Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.3,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 520,\r\n                    \"hp\": 50,\r\n                    \"attack\": 65,\r\n                    \"defense\": 107,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 107,\r\n                    \"speed\": 86\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/rotom\"\r\n    },\r\n    {\r\n        \"num\": 480,\r\n        \"name\": \"Uxie\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Uxie\",\r\n                \"description\": \"Uxie is a Psychic type Pokémon introduced in Generation 4. It is known as the Knowledge Pokémon.\",\r\n                \"image\": \"images/uxie.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Knowledge Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.3,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 75,\r\n                    \"attack\": 75,\r\n                    \"defense\": 130,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 130,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/uxie\"\r\n    },\r\n    {\r\n        \"num\": 481,\r\n        \"name\": \"Mesprit\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mesprit\",\r\n                \"description\": \"Mesprit is a Psychic type Pokémon introduced in Generation 4. It is known as the Emotion Pokémon.\",\r\n                \"image\": \"images/mesprit.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Emotion Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.3,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 80,\r\n                    \"attack\": 105,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mesprit\"\r\n    },\r\n    {\r\n        \"num\": 482,\r\n        \"name\": \"Azelf\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Azelf\",\r\n                \"description\": \"Azelf is a Psychic type Pokémon introduced in Generation 4. It is known as the Willpower Pokémon.\",\r\n                \"image\": \"images/azelf.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Willpower Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.3,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 75,\r\n                    \"attack\": 125,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 115\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/azelf\"\r\n    },\r\n    {\r\n        \"num\": 483,\r\n        \"name\": \"Dialga\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dialga\",\r\n                \"description\": \"Dialga is a Steel/Dragon type Pokémon introduced in Generation 4. It is known as the Temporal Pokémon.\",\r\n                \"image\": \"images/dialga.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Temporal Pokémon\",\r\n                \"height\": 5.4,\r\n                \"weight\": 683,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 100,\r\n                    \"attack\": 120,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 150,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dialga\"\r\n    },\r\n    {\r\n        \"num\": 484,\r\n        \"name\": \"Palkia\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Palkia\",\r\n                \"description\": \"Palkia is a Water/Dragon type Pokémon introduced in Generation 4. It is known as the Spatial Pokémon.\",\r\n                \"image\": \"images/palkia.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Spatial Pokémon\",\r\n                \"height\": 4.2,\r\n                \"weight\": 336,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 90,\r\n                    \"attack\": 120,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 150,\r\n                    \"speedDefense\": 120,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/palkia\"\r\n    },\r\n    {\r\n        \"num\": 485,\r\n        \"name\": \"Heatran\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Heatran\",\r\n                \"description\": \"Heatran is a Fire/Steel type Pokémon introduced in Generation 4. It is known as the Lava Dome Pokémon.\",\r\n                \"image\": \"images/heatran.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Lava Dome Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 430,\r\n                \"abilities\": [\r\n                    \"Flash Fire\",\r\n                    \"Flame Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 91,\r\n                    \"attack\": 90,\r\n                    \"defense\": 106,\r\n                    \"speedAttack\": 130,\r\n                    \"speedDefense\": 106,\r\n                    \"speed\": 77\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/heatran\"\r\n    },\r\n    {\r\n        \"num\": 486,\r\n        \"name\": \"Regigigas\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Regigigas\",\r\n                \"description\": \"Regigigas is a Normal type Pokémon introduced in Generation 4. It is known as the Colossal Pokémon.\",\r\n                \"image\": \"images/regigigas.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Colossal Pokémon\",\r\n                \"height\": 3.7,\r\n                \"weight\": 420,\r\n                \"abilities\": [\r\n                    \"Slow Start\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 670,\r\n                    \"hp\": 110,\r\n                    \"attack\": 160,\r\n                    \"defense\": 110,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/regigigas\"\r\n    },\r\n    {\r\n        \"num\": 487,\r\n        \"name\": \"Giratina\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Altered Forme\",\r\n                \"description\": \"Giratina is a Ghost/Dragon type Pokémon introduced in Generation 4. It is known as the Renegade Pokémon.\",\r\n                \"image\": \"images/giratina-altered.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Renegade Pokémon\",\r\n                \"height\": 4.5,\r\n                \"weight\": 750,\r\n                \"abilities\": [\r\n                    \"Pressure\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 150,\r\n                    \"attack\": 100,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 120,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Origin Forme\",\r\n                \"description\": \"Giratina is a Ghost/Dragon type Pokémon introduced in Generation 4. It is known as the Renegade Pokémon.\",\r\n                \"image\": \"images/giratina-origin.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Renegade Pokémon\",\r\n                \"height\": 6.9,\r\n                \"weight\": 650,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 150,\r\n                    \"attack\": 120,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/giratina\"\r\n    },\r\n    {\r\n        \"num\": 488,\r\n        \"name\": \"Cresselia\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cresselia\",\r\n                \"description\": \"Cresselia is a Psychic type Pokémon introduced in Generation 4. It is known as the Lunar Pokémon.\",\r\n                \"image\": \"images/cresselia.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Lunar Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 85.6,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 120,\r\n                    \"attack\": 70,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 130,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cresselia\"\r\n    },\r\n    {\r\n        \"num\": 489,\r\n        \"name\": \"Phione\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Phione\",\r\n                \"description\": \"Phione is a Water type Pokémon introduced in Generation 4. It is known as the Sea Drifter Pokémon.\",\r\n                \"image\": \"images/phione.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Sea Drifter Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 3.1,\r\n                \"abilities\": [\r\n                    \"Hydration\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 80,\r\n                    \"attack\": 80,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/phione\"\r\n    },\r\n    {\r\n        \"num\": 490,\r\n        \"name\": \"Manaphy\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Manaphy\",\r\n                \"description\": \"Manaphy is a Water type Pokémon introduced in Generation 4. It is known as the Seafaring Pokémon.\",\r\n                \"image\": \"images/manaphy.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Seafaring Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 1.4,\r\n                \"abilities\": [\r\n                    \"Hydration\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 100,\r\n                    \"attack\": 100,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/manaphy\"\r\n    },\r\n    {\r\n        \"num\": 491,\r\n        \"name\": \"Darkrai\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Darkrai\",\r\n                \"description\": \"Darkrai is a Dark type Pokémon introduced in Generation 4. It is known as the Pitch-Black Pokémon.\",\r\n                \"image\": \"images/darkrai.jpg\",\r\n                \"types\": [\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Pitch-Black Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 50.5,\r\n                \"abilities\": [\r\n                    \"Bad Dreams\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 70,\r\n                    \"attack\": 90,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 135,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 125\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/darkrai\"\r\n    },\r\n    {\r\n        \"num\": 492,\r\n        \"name\": \"Shaymin\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Land Forme\",\r\n                \"description\": \"Shaymin is a Grass type Pokémon introduced in Generation 4. It is known as the Gratitude Pokémon.\",\r\n                \"image\": \"images/shaymin-land.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Gratitude Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 2.1,\r\n                \"abilities\": [\r\n                    \"Natural Cure\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 100,\r\n                    \"attack\": 100,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Sky Forme\",\r\n                \"description\": \"Shaymin is a Grass type Pokémon introduced in Generation 4. It is known as the Gratitude Pokémon.\",\r\n                \"image\": \"images/shaymin-sky.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Gratitude Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 5.2,\r\n                \"abilities\": [\r\n                    \"Serene Grace\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 100,\r\n                    \"attack\": 103,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 127\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/shaymin\"\r\n    },\r\n    {\r\n        \"num\": 493,\r\n        \"name\": \"Arceus\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Arceus\",\r\n                \"description\": \"Arceus is a Normal type Pokémon introduced in Generation 4. It is known as the Alpha Pokémon.\",\r\n                \"image\": \"images/arceus.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Alpha Pokémon\",\r\n                \"height\": 3.2,\r\n                \"weight\": 320,\r\n                \"abilities\": [\r\n                    \"Multitype\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 720,\r\n                    \"hp\": 120,\r\n                    \"attack\": 120,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 120,\r\n                    \"speed\": 120\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/arceus\"\r\n    },\r\n    {\r\n        \"num\": 494,\r\n        \"name\": \"Victini\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Victini\",\r\n                \"description\": \"Victini is a Psychic/Fire type Pokémon introduced in Generation 5. It is known as the Victory Pokémon.\",\r\n                \"image\": \"images/victini.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Victory Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 4,\r\n                \"abilities\": [\r\n                    \"Victory Star\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 100,\r\n                    \"attack\": 100,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/victini\"\r\n    },\r\n    {\r\n        \"num\": 495,\r\n        \"name\": \"Snivy\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Snivy\",\r\n                \"description\": \"Snivy is a Grass type Pokémon introduced in Generation 5. It is known as the Grass Snake Pokémon.\",\r\n                \"image\": \"images/snivy.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Grass Snake Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 8.1,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Contrary\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 308,\r\n                    \"hp\": 45,\r\n                    \"attack\": 45,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 63\r\n                },\r\n                \"evolutions\": [\r\n                    \"snivy\",\r\n                    \"servine\",\r\n                    \"serperior\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/snivy\"\r\n    },\r\n    {\r\n        \"num\": 496,\r\n        \"name\": \"Servine\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Servine\",\r\n                \"description\": \"Servine is a Grass type Pokémon introduced in Generation 5. It is known as the Grass Snake Pokémon.\",\r\n                \"image\": \"images/servine.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Grass Snake Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 16,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Contrary\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 413,\r\n                    \"hp\": 60,\r\n                    \"attack\": 60,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 83\r\n                },\r\n                \"evolutions\": [\r\n                    \"snivy\",\r\n                    \"servine\",\r\n                    \"serperior\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/servine\"\r\n    },\r\n    {\r\n        \"num\": 497,\r\n        \"name\": \"Serperior\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Serperior\",\r\n                \"description\": \"Serperior is a Grass type Pokémon introduced in Generation 5. It is known as the Regal Pokémon.\",\r\n                \"image\": \"images/serperior.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Regal Pokémon\",\r\n                \"height\": 3.3,\r\n                \"weight\": 63,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Contrary\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 528,\r\n                    \"hp\": 75,\r\n                    \"attack\": 75,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 113\r\n                },\r\n                \"evolutions\": [\r\n                    \"snivy\",\r\n                    \"servine\",\r\n                    \"serperior\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/serperior\"\r\n    },\r\n    {\r\n        \"num\": 498,\r\n        \"name\": \"Tepig\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tepig\",\r\n                \"description\": \"Tepig is a Fire type Pokémon introduced in Generation 5. It is known as the Fire Pig Pokémon.\",\r\n                \"image\": \"images/tepig.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Fire Pig Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 9.9,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Thick Fat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 308,\r\n                    \"hp\": 65,\r\n                    \"attack\": 63,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"tepig\",\r\n                    \"pignite\",\r\n                    \"emboar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tepig\"\r\n    },\r\n    {\r\n        \"num\": 499,\r\n        \"name\": \"Pignite\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pignite\",\r\n                \"description\": \"Pignite is a Fire/Fighting type Pokémon introduced in Generation 5. It is known as the Fire Pig Pokémon.\",\r\n                \"image\": \"images/pignite.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Fire Pig Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 55.5,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Thick Fat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 418,\r\n                    \"hp\": 90,\r\n                    \"attack\": 93,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"tepig\",\r\n                    \"pignite\",\r\n                    \"emboar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pignite\"\r\n    },\r\n    {\r\n        \"num\": 500,\r\n        \"name\": \"Emboar\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Emboar\",\r\n                \"description\": \"Emboar is a Fire/Fighting type Pokémon introduced in Generation 5. It is known as the Mega Fire Pig Pokémon.\",\r\n                \"image\": \"images/emboar.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Mega Fire Pig Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 150,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Reckless\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 528,\r\n                    \"hp\": 110,\r\n                    \"attack\": 123,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"tepig\",\r\n                    \"pignite\",\r\n                    \"emboar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/emboar\"\r\n    },\r\n    {\r\n        \"num\": 501,\r\n        \"name\": \"Oshawott\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Oshawott\",\r\n                \"description\": \"Oshawott is a Water type Pokémon introduced in Generation 5. It is known as the Sea Otter Pokémon.\",\r\n                \"image\": \"images/oshawott.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Sea Otter Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 5.9,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Shell Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 308,\r\n                    \"hp\": 55,\r\n                    \"attack\": 55,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 63,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"oshawott\",\r\n                    \"dewott\",\r\n                    \"samurott\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/oshawott\"\r\n    },\r\n    {\r\n        \"num\": 502,\r\n        \"name\": \"Dewott\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dewott\",\r\n                \"description\": \"Dewott is a Water type Pokémon introduced in Generation 5. It is known as the Discipline Pokémon.\",\r\n                \"image\": \"images/dewott.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Discipline Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 24.5,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Shell Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 413,\r\n                    \"hp\": 75,\r\n                    \"attack\": 75,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 83,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"oshawott\",\r\n                    \"dewott\",\r\n                    \"samurott\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dewott\"\r\n    },\r\n    {\r\n        \"num\": 503,\r\n        \"name\": \"Samurott\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Samurott\",\r\n                \"description\": \"Samurott is a Water type Pokémon introduced in Generation 5. It is known as the Formidable Pokémon.\",\r\n                \"image\": \"images/samurott.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Formidable Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 94.6,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Shell Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 528,\r\n                    \"hp\": 95,\r\n                    \"attack\": 100,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 108,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"oshawott\",\r\n                    \"dewott\",\r\n                    \"samurott\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/samurott\"\r\n    },\r\n    {\r\n        \"num\": 504,\r\n        \"name\": \"Patrat\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Patrat\",\r\n                \"description\": \"Patrat is a Normal type Pokémon introduced in Generation 5. It is known as the Scout Pokémon.\",\r\n                \"image\": \"images/patrat.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Scout Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 11.6,\r\n                \"abilities\": [\r\n                    \"Run Away\",\r\n                    \"Keen Eye\",\r\n                    \"Analytic\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 255,\r\n                    \"hp\": 45,\r\n                    \"attack\": 55,\r\n                    \"defense\": 39,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 39,\r\n                    \"speed\": 42\r\n                },\r\n                \"evolutions\": [\r\n                    \"patrat\",\r\n                    \"watchog\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/patrat\"\r\n    },\r\n    {\r\n        \"num\": 505,\r\n        \"name\": \"Watchog\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Watchog\",\r\n                \"description\": \"Watchog is a Normal type Pokémon introduced in Generation 5. It is known as the Lookout Pokémon.\",\r\n                \"image\": \"images/watchog.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Lookout Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 27,\r\n                \"abilities\": [\r\n                    \"Illuminate\",\r\n                    \"Keen Eye\",\r\n                    \"Analytic\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 60,\r\n                    \"attack\": 85,\r\n                    \"defense\": 69,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 69,\r\n                    \"speed\": 77\r\n                },\r\n                \"evolutions\": [\r\n                    \"patrat\",\r\n                    \"watchog\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/watchog\"\r\n    },\r\n    {\r\n        \"num\": 506,\r\n        \"name\": \"Lillipup\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lillipup\",\r\n                \"description\": \"Lillipup is a Normal type Pokémon introduced in Generation 5. It is known as the Puppy Pokémon.\",\r\n                \"image\": \"images/lillipup.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Puppy Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 4.1,\r\n                \"abilities\": [\r\n                    \"Vital Spirit\",\r\n                    \"Pickup\",\r\n                    \"Run Away\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 275,\r\n                    \"hp\": 45,\r\n                    \"attack\": 60,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"lillipup\",\r\n                    \"herdier\",\r\n                    \"stoutland\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lillipup\"\r\n    },\r\n    {\r\n        \"num\": 507,\r\n        \"name\": \"Herdier\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Herdier\",\r\n                \"description\": \"Herdier is a Normal type Pokémon introduced in Generation 5. It is known as the Loyal Dog Pokémon.\",\r\n                \"image\": \"images/herdier.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Loyal Dog Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 14.7,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Sand Rush\",\r\n                    \"Scrappy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 370,\r\n                    \"hp\": 65,\r\n                    \"attack\": 80,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"lillipup\",\r\n                    \"herdier\",\r\n                    \"stoutland\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/herdier\"\r\n    },\r\n    {\r\n        \"num\": 508,\r\n        \"name\": \"Stoutland\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Stoutland\",\r\n                \"description\": \"Stoutland is a Normal type Pokémon introduced in Generation 5. It is known as the Big-Hearted Pokémon.\",\r\n                \"image\": \"images/stoutland.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Big-Hearted Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 61,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Sand Rush\",\r\n                    \"Scrappy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 85,\r\n                    \"attack\": 110,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"lillipup\",\r\n                    \"herdier\",\r\n                    \"stoutland\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/stoutland\"\r\n    },\r\n    {\r\n        \"num\": 509,\r\n        \"name\": \"Purrloin\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Purrloin\",\r\n                \"description\": \"Purrloin is a Dark type Pokémon introduced in Generation 5. It is known as the Devious Pokémon.\",\r\n                \"image\": \"images/purrloin.jpg\",\r\n                \"types\": [\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Devious Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 10.1,\r\n                \"abilities\": [\r\n                    \"Limber\",\r\n                    \"Unburden\",\r\n                    \"Prankster\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 281,\r\n                    \"hp\": 41,\r\n                    \"attack\": 50,\r\n                    \"defense\": 37,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 37,\r\n                    \"speed\": 66\r\n                },\r\n                \"evolutions\": [\r\n                    \"purrloin\",\r\n                    \"liepard\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/purrloin\"\r\n    },\r\n    {\r\n        \"num\": 510,\r\n        \"name\": \"Liepard\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Liepard\",\r\n                \"description\": \"Liepard is a Dark type Pokémon introduced in Generation 5. It is known as the Cruel Pokémon.\",\r\n                \"image\": \"images/liepard.jpg\",\r\n                \"types\": [\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Cruel Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 37.5,\r\n                \"abilities\": [\r\n                    \"Limber\",\r\n                    \"Unburden\",\r\n                    \"Prankster\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 446,\r\n                    \"hp\": 64,\r\n                    \"attack\": 88,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 88,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 106\r\n                },\r\n                \"evolutions\": [\r\n                    \"purrloin\",\r\n                    \"liepard\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/liepard\"\r\n    },\r\n    {\r\n        \"num\": 511,\r\n        \"name\": \"Pansage\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pansage\",\r\n                \"description\": \"Pansage is a Grass type Pokémon introduced in Generation 5. It is known as the Grass Monkey Pokémon.\",\r\n                \"image\": \"images/pansage.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Grass Monkey Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 10.5,\r\n                \"abilities\": [\r\n                    \"Gluttony\",\r\n                    \"Overgrow\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 316,\r\n                    \"hp\": 50,\r\n                    \"attack\": 53,\r\n                    \"defense\": 48,\r\n                    \"speedAttack\": 53,\r\n                    \"speedDefense\": 48,\r\n                    \"speed\": 64\r\n                },\r\n                \"evolutions\": [\r\n                    \"pansage\",\r\n                    \"simisage\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pansage\"\r\n    },\r\n    {\r\n        \"num\": 512,\r\n        \"name\": \"Simisage\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Simisage\",\r\n                \"description\": \"Simisage is a Grass type Pokémon introduced in Generation 5. It is known as the Thorn Monkey Pokémon.\",\r\n                \"image\": \"images/simisage.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Thorn Monkey Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 30.5,\r\n                \"abilities\": [\r\n                    \"Gluttony\",\r\n                    \"Overgrow\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 498,\r\n                    \"hp\": 75,\r\n                    \"attack\": 98,\r\n                    \"defense\": 63,\r\n                    \"speedAttack\": 98,\r\n                    \"speedDefense\": 63,\r\n                    \"speed\": 101\r\n                },\r\n                \"evolutions\": [\r\n                    \"pansage\",\r\n                    \"simisage\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/simisage\"\r\n    },\r\n    {\r\n        \"num\": 513,\r\n        \"name\": \"Pansear\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pansear\",\r\n                \"description\": \"Pansear is a Fire type Pokémon introduced in Generation 5. It is known as the High Temp Pokémon.\",\r\n                \"image\": \"images/pansear.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"High Temp Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 11,\r\n                \"abilities\": [\r\n                    \"Gluttony\",\r\n                    \"Blaze\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 316,\r\n                    \"hp\": 50,\r\n                    \"attack\": 53,\r\n                    \"defense\": 48,\r\n                    \"speedAttack\": 53,\r\n                    \"speedDefense\": 48,\r\n                    \"speed\": 64\r\n                },\r\n                \"evolutions\": [\r\n                    \"pansear\",\r\n                    \"simisear\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pansear\"\r\n    },\r\n    {\r\n        \"num\": 514,\r\n        \"name\": \"Simisear\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Simisear\",\r\n                \"description\": \"Simisear is a Fire type Pokémon introduced in Generation 5. It is known as the Ember Pokémon.\",\r\n                \"image\": \"images/simisear.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Ember Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 28,\r\n                \"abilities\": [\r\n                    \"Gluttony\",\r\n                    \"Blaze\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 498,\r\n                    \"hp\": 75,\r\n                    \"attack\": 98,\r\n                    \"defense\": 63,\r\n                    \"speedAttack\": 98,\r\n                    \"speedDefense\": 63,\r\n                    \"speed\": 101\r\n                },\r\n                \"evolutions\": [\r\n                    \"pansear\",\r\n                    \"simisear\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/simisear\"\r\n    },\r\n    {\r\n        \"num\": 515,\r\n        \"name\": \"Panpour\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Panpour\",\r\n                \"description\": \"Panpour is a Water type Pokémon introduced in Generation 5. It is known as the Spray Pokémon.\",\r\n                \"image\": \"images/panpour.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Spray Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 13.5,\r\n                \"abilities\": [\r\n                    \"Gluttony\",\r\n                    \"Torrent\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 316,\r\n                    \"hp\": 50,\r\n                    \"attack\": 53,\r\n                    \"defense\": 48,\r\n                    \"speedAttack\": 53,\r\n                    \"speedDefense\": 48,\r\n                    \"speed\": 64\r\n                },\r\n                \"evolutions\": [\r\n                    \"panpour\",\r\n                    \"simipour\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/panpour\"\r\n    },\r\n    {\r\n        \"num\": 516,\r\n        \"name\": \"Simipour\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Simipour\",\r\n                \"description\": \"Simipour is a Water type Pokémon introduced in Generation 5. It is known as the Geyser Pokémon.\",\r\n                \"image\": \"images/simipour.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Geyser Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 29,\r\n                \"abilities\": [\r\n                    \"Gluttony\",\r\n                    \"Torrent\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 498,\r\n                    \"hp\": 75,\r\n                    \"attack\": 98,\r\n                    \"defense\": 63,\r\n                    \"speedAttack\": 98,\r\n                    \"speedDefense\": 63,\r\n                    \"speed\": 101\r\n                },\r\n                \"evolutions\": [\r\n                    \"panpour\",\r\n                    \"simipour\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/simipour\"\r\n    },\r\n    {\r\n        \"num\": 517,\r\n        \"name\": \"Munna\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Munna\",\r\n                \"description\": \"Munna is a Psychic type Pokémon introduced in Generation 5. It is known as the Dream Eater Pokémon.\",\r\n                \"image\": \"images/munna.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Dream Eater Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 23.3,\r\n                \"abilities\": [\r\n                    \"Forewarn\",\r\n                    \"Synchronize\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 292,\r\n                    \"hp\": 76,\r\n                    \"attack\": 25,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 67,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 24\r\n                },\r\n                \"evolutions\": [\r\n                    \"munna\",\r\n                    \"musharna\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/munna\"\r\n    },\r\n    {\r\n        \"num\": 518,\r\n        \"name\": \"Musharna\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Musharna\",\r\n                \"description\": \"Musharna is a Psychic type Pokémon introduced in Generation 5. It is known as the Drowsing Pokémon.\",\r\n                \"image\": \"images/musharna.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Drowsing Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 60.5,\r\n                \"abilities\": [\r\n                    \"Forewarn\",\r\n                    \"Synchronize\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 487,\r\n                    \"hp\": 116,\r\n                    \"attack\": 55,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 107,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 29\r\n                },\r\n                \"evolutions\": [\r\n                    \"munna\",\r\n                    \"musharna\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/musharna\"\r\n    },\r\n    {\r\n        \"num\": 519,\r\n        \"name\": \"Pidove\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pidove\",\r\n                \"description\": \"Pidove is a Normal/Flying type Pokémon introduced in Generation 5. It is known as the Tiny Pigeon Pokémon.\",\r\n                \"image\": \"images/pidove.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Tiny Pigeon Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 2.1,\r\n                \"abilities\": [\r\n                    \"Big Pecks\",\r\n                    \"Super Luck\",\r\n                    \"Rivalry\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 264,\r\n                    \"hp\": 50,\r\n                    \"attack\": 55,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 36,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 43\r\n                },\r\n                \"evolutions\": [\r\n                    \"pidove\",\r\n                    \"tranquill\",\r\n                    \"unfezant\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pidove\"\r\n    },\r\n    {\r\n        \"num\": 520,\r\n        \"name\": \"Tranquill\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tranquill\",\r\n                \"description\": \"Tranquill is a Normal/Flying type Pokémon introduced in Generation 5. It is known as the Wild Pigeon Pokémon.\",\r\n                \"image\": \"images/tranquill.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Wild Pigeon Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 15,\r\n                \"abilities\": [\r\n                    \"Big Pecks\",\r\n                    \"Super Luck\",\r\n                    \"Rivalry\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 358,\r\n                    \"hp\": 62,\r\n                    \"attack\": 77,\r\n                    \"defense\": 62,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 42,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"pidove\",\r\n                    \"tranquill\",\r\n                    \"unfezant\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tranquill\"\r\n    },\r\n    {\r\n        \"num\": 521,\r\n        \"name\": \"Unfezant\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Unfezant\",\r\n                \"description\": \"Unfezant is a Normal/Flying type Pokémon introduced in Generation 5. It is known as the Proud Pokémon.\",\r\n                \"image\": \"images/unfezant.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Proud Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 29,\r\n                \"abilities\": [\r\n                    \"Big Pecks\",\r\n                    \"Super Luck\",\r\n                    \"Rivalry\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 488,\r\n                    \"hp\": 80,\r\n                    \"attack\": 115,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 93\r\n                },\r\n                \"evolutions\": [\r\n                    \"pidove\",\r\n                    \"tranquill\",\r\n                    \"unfezant\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/unfezant\"\r\n    },\r\n    {\r\n        \"num\": 522,\r\n        \"name\": \"Blitzle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Blitzle\",\r\n                \"description\": \"Blitzle is an Electric type Pokémon introduced in Generation 5. It is known as the Electrified Pokémon.\",\r\n                \"image\": \"images/blitzle.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Electrified Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 29.8,\r\n                \"abilities\": [\r\n                    \"Lightning Rod\",\r\n                    \"Motor Drive\",\r\n                    \"Sap Sipper\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 295,\r\n                    \"hp\": 45,\r\n                    \"attack\": 60,\r\n                    \"defense\": 32,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 32,\r\n                    \"speed\": 76\r\n                },\r\n                \"evolutions\": [\r\n                    \"blitzle\",\r\n                    \"zebstrika\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/blitzle\"\r\n    },\r\n    {\r\n        \"num\": 523,\r\n        \"name\": \"Zebstrika\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Zebstrika\",\r\n                \"description\": \"Zebstrika is an Electric type Pokémon introduced in Generation 5. It is known as the Thunderbolt Pokémon.\",\r\n                \"image\": \"images/zebstrika.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Thunderbolt Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 79.5,\r\n                \"abilities\": [\r\n                    \"Lightning Rod\",\r\n                    \"Motor Drive\",\r\n                    \"Sap Sipper\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 497,\r\n                    \"hp\": 75,\r\n                    \"attack\": 100,\r\n                    \"defense\": 63,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 63,\r\n                    \"speed\": 116\r\n                },\r\n                \"evolutions\": [\r\n                    \"blitzle\",\r\n                    \"zebstrika\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/zebstrika\"\r\n    },\r\n    {\r\n        \"num\": 524,\r\n        \"name\": \"Roggenrola\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Roggenrola\",\r\n                \"description\": \"Roggenrola is a Rock type Pokémon introduced in Generation 5. It is known as the Mantle Pokémon.\",\r\n                \"image\": \"images/roggenrola.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Mantle Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 18,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Weak Armor\",\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 280,\r\n                    \"hp\": 55,\r\n                    \"attack\": 75,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 25,\r\n                    \"speed\": 15\r\n                },\r\n                \"evolutions\": [\r\n                    \"roggenrola\",\r\n                    \"boldore\",\r\n                    \"gigalith\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/roggenrola\"\r\n    },\r\n    {\r\n        \"num\": 525,\r\n        \"name\": \"Boldore\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Boldore\",\r\n                \"description\": \"Boldore is a Rock type Pokémon introduced in Generation 5. It is known as the Ore Pokémon.\",\r\n                \"image\": \"images/boldore.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Ore Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 102,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Weak Armor\",\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 390,\r\n                    \"hp\": 70,\r\n                    \"attack\": 105,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"roggenrola\",\r\n                    \"boldore\",\r\n                    \"gigalith\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/boldore\"\r\n    },\r\n    {\r\n        \"num\": 526,\r\n        \"name\": \"Gigalith\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gigalith\",\r\n                \"description\": \"Gigalith is a Rock type Pokémon introduced in Generation 5. It is known as the Compressed Pokémon.\",\r\n                \"image\": \"images/gigalith.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Compressed Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 260,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Sand Stream\",\r\n                    \"Sand Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 515,\r\n                    \"hp\": 85,\r\n                    \"attack\": 135,\r\n                    \"defense\": 130,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 25\r\n                },\r\n                \"evolutions\": [\r\n                    \"roggenrola\",\r\n                    \"boldore\",\r\n                    \"gigalith\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gigalith\"\r\n    },\r\n    {\r\n        \"num\": 527,\r\n        \"name\": \"Woobat\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Woobat\",\r\n                \"description\": \"Woobat is a Psychic/Flying type Pokémon introduced in Generation 5. It is known as the Bat Pokémon.\",\r\n                \"image\": \"images/woobat.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Bat Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 2.1,\r\n                \"abilities\": [\r\n                    \"Unaware\",\r\n                    \"Klutz\",\r\n                    \"Simple\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 323,\r\n                    \"hp\": 65,\r\n                    \"attack\": 45,\r\n                    \"defense\": 43,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 43,\r\n                    \"speed\": 72\r\n                },\r\n                \"evolutions\": [\r\n                    \"woobat\",\r\n                    \"swoobat\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/woobat\"\r\n    },\r\n    {\r\n        \"num\": 528,\r\n        \"name\": \"Swoobat\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Swoobat\",\r\n                \"description\": \"Swoobat is a Psychic/Flying type Pokémon introduced in Generation 5. It is known as the Courting Pokémon.\",\r\n                \"image\": \"images/swoobat.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Courting Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 10.5,\r\n                \"abilities\": [\r\n                    \"Unaware\",\r\n                    \"Klutz\",\r\n                    \"Simple\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 425,\r\n                    \"hp\": 67,\r\n                    \"attack\": 57,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 77,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 114\r\n                },\r\n                \"evolutions\": [\r\n                    \"woobat\",\r\n                    \"swoobat\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/swoobat\"\r\n    },\r\n    {\r\n        \"num\": 529,\r\n        \"name\": \"Drilbur\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Drilbur\",\r\n                \"description\": \"Drilbur is a Ground type Pokémon introduced in Generation 5. It is known as the Mole Pokémon.\",\r\n                \"image\": \"images/drilbur.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Mole Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 8.5,\r\n                \"abilities\": [\r\n                    \"Sand Rush\",\r\n                    \"Sand Force\",\r\n                    \"Mold Breaker\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 328,\r\n                    \"hp\": 60,\r\n                    \"attack\": 85,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 68\r\n                },\r\n                \"evolutions\": [\r\n                    \"drilbur\",\r\n                    \"excadrill\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/drilbur\"\r\n    },\r\n    {\r\n        \"num\": 530,\r\n        \"name\": \"Excadrill\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Excadrill\",\r\n                \"description\": \"Excadrill is a Ground/Steel type Pokémon introduced in Generation 5. It is known as the Subterrene Pokémon.\",\r\n                \"image\": \"images/excadrill.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Subterrene Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 40.4,\r\n                \"abilities\": [\r\n                    \"Sand Rush\",\r\n                    \"Sand Force\",\r\n                    \"Mold Breaker\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 508,\r\n                    \"hp\": 110,\r\n                    \"attack\": 135,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 88\r\n                },\r\n                \"evolutions\": [\r\n                    \"drilbur\",\r\n                    \"excadrill\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/excadrill\"\r\n    },\r\n    {\r\n        \"num\": 531,\r\n        \"name\": \"Audino\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Audino\",\r\n                \"description\": \"Audino is a Normal type Pokémon introduced in Generation 5. It is known as the Hearing Pokémon.\\nAudino has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/audino.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Hearing Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 31,\r\n                \"abilities\": [\r\n                    \"Healer\",\r\n                    \"Regenerator\",\r\n                    \"Klutz\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 445,\r\n                    \"hp\": 103,\r\n                    \"attack\": 60,\r\n                    \"defense\": 86,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 86,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Audino\",\r\n                \"description\": \"Audino is a Normal type Pokémon introduced in Generation 5. It is known as the Hearing Pokémon.\\nAudino has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/audino-mega.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Hearing Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 32,\r\n                \"abilities\": [\r\n                    \"Healer\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 545,\r\n                    \"hp\": 103,\r\n                    \"attack\": 60,\r\n                    \"defense\": 126,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 126,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/audino\"\r\n    },\r\n    {\r\n        \"num\": 532,\r\n        \"name\": \"Timburr\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Timburr\",\r\n                \"description\": \"Timburr is a Fighting type Pokémon introduced in Generation 5. It is known as the Muscular Pokémon.\",\r\n                \"image\": \"images/timburr.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Muscular Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 12.5,\r\n                \"abilities\": [\r\n                    \"Guts\",\r\n                    \"Sheer Force\",\r\n                    \"Iron Fist\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 75,\r\n                    \"attack\": 80,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"timburr\",\r\n                    \"gurdurr\",\r\n                    \"conkeldurr\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/timburr\"\r\n    },\r\n    {\r\n        \"num\": 533,\r\n        \"name\": \"Gurdurr\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gurdurr\",\r\n                \"description\": \"Gurdurr is a Fighting type Pokémon introduced in Generation 5. It is known as the Muscular Pokémon.\",\r\n                \"image\": \"images/gurdurr.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Muscular Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 40,\r\n                \"abilities\": [\r\n                    \"Guts\",\r\n                    \"Sheer Force\",\r\n                    \"Iron Fist\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 85,\r\n                    \"attack\": 105,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"timburr\",\r\n                    \"gurdurr\",\r\n                    \"conkeldurr\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gurdurr\"\r\n    },\r\n    {\r\n        \"num\": 534,\r\n        \"name\": \"Conkeldurr\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Conkeldurr\",\r\n                \"description\": \"Conkeldurr is a Fighting type Pokémon introduced in Generation 5. It is known as the Muscular Pokémon.\",\r\n                \"image\": \"images/conkeldurr.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Muscular Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 87,\r\n                \"abilities\": [\r\n                    \"Guts\",\r\n                    \"Sheer Force\",\r\n                    \"Iron Fist\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 505,\r\n                    \"hp\": 105,\r\n                    \"attack\": 140,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"timburr\",\r\n                    \"gurdurr\",\r\n                    \"conkeldurr\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/conkeldurr\"\r\n    },\r\n    {\r\n        \"num\": 535,\r\n        \"name\": \"Tympole\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tympole\",\r\n                \"description\": \"Tympole is a Water type Pokémon introduced in Generation 5. It is known as the Tadpole Pokémon.\",\r\n                \"image\": \"images/tympole.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Tadpole Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 4.5,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Hydration\",\r\n                    \"Water Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 294,\r\n                    \"hp\": 50,\r\n                    \"attack\": 50,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 64\r\n                },\r\n                \"evolutions\": [\r\n                    \"tympole\",\r\n                    \"palpitoad\",\r\n                    \"seismitoad\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tympole\"\r\n    },\r\n    {\r\n        \"num\": 536,\r\n        \"name\": \"Palpitoad\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Palpitoad\",\r\n                \"description\": \"Palpitoad is a Water/Ground type Pokémon introduced in Generation 5. It is known as the Vibration Pokémon.\",\r\n                \"image\": \"images/palpitoad.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Vibration Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 17,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Hydration\",\r\n                    \"Water Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 384,\r\n                    \"hp\": 75,\r\n                    \"attack\": 65,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 69\r\n                },\r\n                \"evolutions\": [\r\n                    \"tympole\",\r\n                    \"palpitoad\",\r\n                    \"seismitoad\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/palpitoad\"\r\n    },\r\n    {\r\n        \"num\": 537,\r\n        \"name\": \"Seismitoad\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Seismitoad\",\r\n                \"description\": \"Seismitoad is a Water/Ground type Pokémon introduced in Generation 5. It is known as the Vibration Pokémon.\",\r\n                \"image\": \"images/seismitoad.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Vibration Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 62,\r\n                \"abilities\": [\r\n                    \"Swift Swim\",\r\n                    \"Poison Touch\",\r\n                    \"Water Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 509,\r\n                    \"hp\": 105,\r\n                    \"attack\": 95,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 74\r\n                },\r\n                \"evolutions\": [\r\n                    \"tympole\",\r\n                    \"palpitoad\",\r\n                    \"seismitoad\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/seismitoad\"\r\n    },\r\n    {\r\n        \"num\": 538,\r\n        \"name\": \"Throh\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Throh\",\r\n                \"description\": \"Throh is a Fighting type Pokémon introduced in Generation 5. It is known as the Judo Pokémon.\",\r\n                \"image\": \"images/throh.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Judo Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 55.5,\r\n                \"abilities\": [\r\n                    \"Guts\",\r\n                    \"Inner Focus\",\r\n                    \"Mold Breaker\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 465,\r\n                    \"hp\": 120,\r\n                    \"attack\": 100,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/throh\"\r\n    },\r\n    {\r\n        \"num\": 539,\r\n        \"name\": \"Sawk\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sawk\",\r\n                \"description\": \"Sawk is a Fighting type Pokémon introduced in Generation 5. It is known as the Karate Pokémon.\",\r\n                \"image\": \"images/sawk.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Karate Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 51,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Inner Focus\",\r\n                    \"Mold Breaker\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 465,\r\n                    \"hp\": 75,\r\n                    \"attack\": 125,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sawk\"\r\n    },\r\n    {\r\n        \"num\": 540,\r\n        \"name\": \"Sewaddle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sewaddle\",\r\n                \"description\": \"Sewaddle is a Bug/Grass type Pokémon introduced in Generation 5. It is known as the Sewing Pokémon.\",\r\n                \"image\": \"images/sewaddle.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Sewing Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 2.5,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Chlorophyll\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 310,\r\n                    \"hp\": 45,\r\n                    \"attack\": 53,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 42\r\n                },\r\n                \"evolutions\": [\r\n                    \"sewaddle\",\r\n                    \"swadloon\",\r\n                    \"leavanny\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sewaddle\"\r\n    },\r\n    {\r\n        \"num\": 541,\r\n        \"name\": \"Swadloon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Swadloon\",\r\n                \"description\": \"Swadloon is a Bug/Grass type Pokémon introduced in Generation 5. It is known as the Leaf-Wrapped Pokémon.\",\r\n                \"image\": \"images/swadloon.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Leaf-Wrapped Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 7.3,\r\n                \"abilities\": [\r\n                    \"Leaf Guard\",\r\n                    \"Chlorophyll\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 380,\r\n                    \"hp\": 55,\r\n                    \"attack\": 63,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 42\r\n                },\r\n                \"evolutions\": [\r\n                    \"sewaddle\",\r\n                    \"swadloon\",\r\n                    \"leavanny\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/swadloon\"\r\n    },\r\n    {\r\n        \"num\": 542,\r\n        \"name\": \"Leavanny\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Leavanny\",\r\n                \"description\": \"Leavanny is a Bug/Grass type Pokémon introduced in Generation 5. It is known as the Nurturing Pokémon.\",\r\n                \"image\": \"images/leavanny.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Nurturing Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 20.5,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Chlorophyll\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 75,\r\n                    \"attack\": 103,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 92\r\n                },\r\n                \"evolutions\": [\r\n                    \"sewaddle\",\r\n                    \"swadloon\",\r\n                    \"leavanny\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/leavanny\"\r\n    },\r\n    {\r\n        \"num\": 543,\r\n        \"name\": \"Venipede\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Venipede\",\r\n                \"description\": \"Venipede is a Bug/Poison type Pokémon introduced in Generation 5. It is known as the Centipede Pokémon.\",\r\n                \"image\": \"images/venipede.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Centipede Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 5.3,\r\n                \"abilities\": [\r\n                    \"Poison Point\",\r\n                    \"Swarm\",\r\n                    \"Speed Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 260,\r\n                    \"hp\": 30,\r\n                    \"attack\": 45,\r\n                    \"defense\": 59,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 39,\r\n                    \"speed\": 57\r\n                },\r\n                \"evolutions\": [\r\n                    \"venipede\",\r\n                    \"whirlipede\",\r\n                    \"scolipede\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/venipede\"\r\n    },\r\n    {\r\n        \"num\": 544,\r\n        \"name\": \"Whirlipede\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Whirlipede\",\r\n                \"description\": \"Whirlipede is a Bug/Poison type Pokémon introduced in Generation 5. It is known as the Curlipede Pokémon.\",\r\n                \"image\": \"images/whirlipede.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Curlipede Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 58.5,\r\n                \"abilities\": [\r\n                    \"Poison Point\",\r\n                    \"Swarm\",\r\n                    \"Speed Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 360,\r\n                    \"hp\": 40,\r\n                    \"attack\": 55,\r\n                    \"defense\": 99,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 79,\r\n                    \"speed\": 47\r\n                },\r\n                \"evolutions\": [\r\n                    \"venipede\",\r\n                    \"whirlipede\",\r\n                    \"scolipede\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/whirlipede\"\r\n    },\r\n    {\r\n        \"num\": 545,\r\n        \"name\": \"Scolipede\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Scolipede\",\r\n                \"description\": \"Scolipede is a Bug/Poison type Pokémon introduced in Generation 5. It is known as the Megapede Pokémon.\",\r\n                \"image\": \"images/scolipede.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Megapede Pokémon\",\r\n                \"height\": 2.5,\r\n                \"weight\": 200.5,\r\n                \"abilities\": [\r\n                    \"Poison Point\",\r\n                    \"Swarm\",\r\n                    \"Speed Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 60,\r\n                    \"attack\": 100,\r\n                    \"defense\": 89,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 69,\r\n                    \"speed\": 112\r\n                },\r\n                \"evolutions\": [\r\n                    \"venipede\",\r\n                    \"whirlipede\",\r\n                    \"scolipede\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/scolipede\"\r\n    },\r\n    {\r\n        \"num\": 546,\r\n        \"name\": \"Cottonee\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cottonee\",\r\n                \"description\": \"Cottonee is a Grass/Fairy type Pokémon introduced in Generation 5. It is known as the Cotton Puff Pokémon.\",\r\n                \"image\": \"images/cottonee.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Cotton Puff Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.6,\r\n                \"abilities\": [\r\n                    \"Prankster\",\r\n                    \"Infiltrator\",\r\n                    \"Chlorophyll\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 280,\r\n                    \"hp\": 40,\r\n                    \"attack\": 27,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 37,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 66\r\n                },\r\n                \"evolutions\": [\r\n                    \"cottonee\",\r\n                    \"whimsicott\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cottonee\"\r\n    },\r\n    {\r\n        \"num\": 547,\r\n        \"name\": \"Whimsicott\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Whimsicott\",\r\n                \"description\": \"Whimsicott is a Grass/Fairy type Pokémon introduced in Generation 5. It is known as the Windveiled Pokémon.\",\r\n                \"image\": \"images/whimsicott.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Windveiled Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 6.6,\r\n                \"abilities\": [\r\n                    \"Prankster\",\r\n                    \"Infiltrator\",\r\n                    \"Chlorophyll\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 60,\r\n                    \"attack\": 67,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 77,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 116\r\n                },\r\n                \"evolutions\": [\r\n                    \"cottonee\",\r\n                    \"whimsicott\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/whimsicott\"\r\n    },\r\n    {\r\n        \"num\": 548,\r\n        \"name\": \"Petilil\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Petilil\",\r\n                \"description\": \"Petilil is a Grass type Pokémon introduced in Generation 5. It is known as the Bulb Pokémon.\",\r\n                \"image\": \"images/petilil.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Bulb Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 6.6,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Own Tempo\",\r\n                    \"Leaf Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 280,\r\n                    \"hp\": 45,\r\n                    \"attack\": 35,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"petilil\",\r\n                    \"lilligant\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/petilil\"\r\n    },\r\n    {\r\n        \"num\": 549,\r\n        \"name\": \"Lilligant\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lilligant\",\r\n                \"description\": \"Lilligant is a Grass type Pokémon introduced in Generation 5. It is known as the Flowering Pokémon.\",\r\n                \"image\": \"images/lilligant.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Flowering Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 16.3,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Own Tempo\",\r\n                    \"Leaf Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 70,\r\n                    \"attack\": 60,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"petilil\",\r\n                    \"lilligant\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lilligant\"\r\n    },\r\n    {\r\n        \"num\": 550,\r\n        \"name\": \"Basculin\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Red-Striped Form\",\r\n                \"description\": \"Basculin is a Water type Pokémon introduced in Generation 5. It is known as the Hostile Pokémon.\",\r\n                \"image\": \"images/basculin-red-striped.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Hostile Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 18,\r\n                \"abilities\": [\r\n                    \"Reckless\",\r\n                    \"Adaptability\",\r\n                    \"Mold Breaker\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 460,\r\n                    \"hp\": 70,\r\n                    \"attack\": 92,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 98\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Blue-Striped Form\",\r\n                \"description\": \"Basculin is a Water type Pokémon introduced in Generation 5. It is known as the Hostile Pokémon.\",\r\n                \"image\": \"images/basculin-blue-striped.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Hostile Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 18,\r\n                \"abilities\": [\r\n                    \"Rock Head\",\r\n                    \"Adaptability\",\r\n                    \"Mold Breaker\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 460,\r\n                    \"hp\": 70,\r\n                    \"attack\": 92,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 98\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/basculin\"\r\n    },\r\n    {\r\n        \"num\": 551,\r\n        \"name\": \"Sandile\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sandile\",\r\n                \"description\": \"Sandile is a Ground/Dark type Pokémon introduced in Generation 5. It is known as the Desert Croc Pokémon.\",\r\n                \"image\": \"images/sandile.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Desert Croc Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 15.2,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Moxie\",\r\n                    \"Anger Point\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 292,\r\n                    \"hp\": 50,\r\n                    \"attack\": 72,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"sandile\",\r\n                    \"krokorok\",\r\n                    \"krookodile\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sandile\"\r\n    },\r\n    {\r\n        \"num\": 552,\r\n        \"name\": \"Krokorok\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Krokorok\",\r\n                \"description\": \"Krokorok is a Ground/Dark type Pokémon introduced in Generation 5. It is known as the Desert Croc Pokémon.\",\r\n                \"image\": \"images/krokorok.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Desert Croc Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 33.4,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Moxie\",\r\n                    \"Anger Point\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 351,\r\n                    \"hp\": 60,\r\n                    \"attack\": 82,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 74\r\n                },\r\n                \"evolutions\": [\r\n                    \"sandile\",\r\n                    \"krokorok\",\r\n                    \"krookodile\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/krokorok\"\r\n    },\r\n    {\r\n        \"num\": 553,\r\n        \"name\": \"Krookodile\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Krookodile\",\r\n                \"description\": \"Krookodile is a Ground/Dark type Pokémon introduced in Generation 5. It is known as the Intimidation Pokémon.\",\r\n                \"image\": \"images/krookodile.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Intimidation Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 96.3,\r\n                \"abilities\": [\r\n                    \"Intimidate\",\r\n                    \"Moxie\",\r\n                    \"Anger Point\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 519,\r\n                    \"hp\": 95,\r\n                    \"attack\": 117,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 92\r\n                },\r\n                \"evolutions\": [\r\n                    \"sandile\",\r\n                    \"krokorok\",\r\n                    \"krookodile\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/krookodile\"\r\n    },\r\n    {\r\n        \"num\": 554,\r\n        \"name\": \"Darumaka\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Darumaka\",\r\n                \"description\": \"Darumaka is a Fire type Pokémon introduced in Generation 5. It is known as the Zen Charm Pokémon.\",\r\n                \"image\": \"images/darumaka.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Zen Charm Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 37.5,\r\n                \"abilities\": [\r\n                    \"Hustle\",\r\n                    \"Inner Focus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 315,\r\n                    \"hp\": 70,\r\n                    \"attack\": 90,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 15,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"darumaka\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/darumaka\"\r\n    },\r\n    {\r\n        \"num\": 555,\r\n        \"name\": \"Darmanitan\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Standard Mode\",\r\n                \"description\": \"Darmanitan is a Fire type Pokémon introduced in Generation 5. It is known as the Blazing Pokémon.\",\r\n                \"image\": \"images/darmanitan-standard.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Blazing Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 92.9,\r\n                \"abilities\": [\r\n                    \"Sheer Force\",\r\n                    \"Zen Mode\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 105,\r\n                    \"attack\": 140,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"darumaka\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Zen Mode\",\r\n                \"description\": \"Darmanitan is a Fire type Pokémon introduced in Generation 5. It is known as the Blazing Pokémon.\",\r\n                \"image\": \"images/darmanitan-zen.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Blazing Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 92.9,\r\n                \"abilities\": [\r\n                    \"Zen Mode\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 540,\r\n                    \"hp\": 105,\r\n                    \"attack\": 30,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 140,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"darumaka\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/darmanitan\"\r\n    },\r\n    {\r\n        \"num\": 556,\r\n        \"name\": \"Maractus\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Maractus\",\r\n                \"description\": \"Maractus is a Grass type Pokémon introduced in Generation 5. It is known as the Cactus Pokémon.\",\r\n                \"image\": \"images/maractus.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Cactus Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 28,\r\n                \"abilities\": [\r\n                    \"Water Absorb\",\r\n                    \"Chlorophyll\",\r\n                    \"Storm Drain\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 461,\r\n                    \"hp\": 75,\r\n                    \"attack\": 86,\r\n                    \"defense\": 67,\r\n                    \"speedAttack\": 106,\r\n                    \"speedDefense\": 67,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/maractus\"\r\n    },\r\n    {\r\n        \"num\": 557,\r\n        \"name\": \"Dwebble\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dwebble\",\r\n                \"description\": \"Dwebble is a Bug/Rock type Pokémon introduced in Generation 5. It is known as the Rock Inn Pokémon.\",\r\n                \"image\": \"images/dwebble.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Rock Inn Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 14.5,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Shell Armor\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 325,\r\n                    \"hp\": 50,\r\n                    \"attack\": 65,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"dwebble\",\r\n                    \"crustle\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dwebble\"\r\n    },\r\n    {\r\n        \"num\": 558,\r\n        \"name\": \"Crustle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Crustle\",\r\n                \"description\": \"Crustle is a Bug/Rock type Pokémon introduced in Generation 5. It is known as the Stone Home Pokémon.\",\r\n                \"image\": \"images/crustle.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Stone Home Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 200,\r\n                \"abilities\": [\r\n                    \"Sturdy\",\r\n                    \"Shell Armor\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 70,\r\n                    \"attack\": 105,\r\n                    \"defense\": 125,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"dwebble\",\r\n                    \"crustle\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/crustle\"\r\n    },\r\n    {\r\n        \"num\": 559,\r\n        \"name\": \"Scraggy\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Scraggy\",\r\n                \"description\": \"Scraggy is a Dark/Fighting type Pokémon introduced in Generation 5. It is known as the Shedding Pokémon.\",\r\n                \"image\": \"images/scraggy.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Shedding Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 11.8,\r\n                \"abilities\": [\r\n                    \"Shed Skin\",\r\n                    \"Moxie\",\r\n                    \"Intimidate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 348,\r\n                    \"hp\": 50,\r\n                    \"attack\": 75,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 48\r\n                },\r\n                \"evolutions\": [\r\n                    \"scraggy\",\r\n                    \"scrafty\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/scraggy\"\r\n    },\r\n    {\r\n        \"num\": 560,\r\n        \"name\": \"Scrafty\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Scrafty\",\r\n                \"description\": \"Scrafty is a Dark/Fighting type Pokémon introduced in Generation 5. It is known as the Hoodlum Pokémon.\",\r\n                \"image\": \"images/scrafty.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Hoodlum Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 30,\r\n                \"abilities\": [\r\n                    \"Shed Skin\",\r\n                    \"Moxie\",\r\n                    \"Intimidate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 488,\r\n                    \"hp\": 65,\r\n                    \"attack\": 90,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 115,\r\n                    \"speed\": 58\r\n                },\r\n                \"evolutions\": [\r\n                    \"scraggy\",\r\n                    \"scrafty\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/scrafty\"\r\n    },\r\n    {\r\n        \"num\": 561,\r\n        \"name\": \"Sigilyph\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sigilyph\",\r\n                \"description\": \"Sigilyph is a Psychic/Flying type Pokémon introduced in Generation 5. It is known as the Avianoid Pokémon.\",\r\n                \"image\": \"images/sigilyph.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Avianoid Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 14,\r\n                \"abilities\": [\r\n                    \"Wonder Skin\",\r\n                    \"Magic Guard\",\r\n                    \"Tinted Lens\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 72,\r\n                    \"attack\": 58,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 103,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 97\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sigilyph\"\r\n    },\r\n    {\r\n        \"num\": 562,\r\n        \"name\": \"Yamask\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Yamask\",\r\n                \"description\": \"Yamask is a Ghost type Pokémon introduced in Generation 5. It is known as the Spirit Pokémon.\",\r\n                \"image\": \"images/yamask.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Spirit Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 1.5,\r\n                \"abilities\": [\r\n                    \"Mummy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 303,\r\n                    \"hp\": 38,\r\n                    \"attack\": 30,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"yamask\",\r\n                    \"cofagrigus\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/yamask\"\r\n    },\r\n    {\r\n        \"num\": 563,\r\n        \"name\": \"Cofagrigus\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cofagrigus\",\r\n                \"description\": \"Cofagrigus is a Ghost type Pokémon introduced in Generation 5. It is known as the Coffin Pokémon.\",\r\n                \"image\": \"images/cofagrigus.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Coffin Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 76.5,\r\n                \"abilities\": [\r\n                    \"Mummy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 483,\r\n                    \"hp\": 58,\r\n                    \"attack\": 50,\r\n                    \"defense\": 145,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"yamask\",\r\n                    \"cofagrigus\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cofagrigus\"\r\n    },\r\n    {\r\n        \"num\": 564,\r\n        \"name\": \"Tirtouga\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tirtouga\",\r\n                \"description\": \"Tirtouga is a Water/Rock type Pokémon introduced in Generation 5. It is known as the Prototurtle Pokémon.\",\r\n                \"image\": \"images/tirtouga.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Prototurtle Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 16.5,\r\n                \"abilities\": [\r\n                    \"Solid Rock\",\r\n                    \"Sturdy\",\r\n                    \"Swift Swim\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 355,\r\n                    \"hp\": 54,\r\n                    \"attack\": 78,\r\n                    \"defense\": 103,\r\n                    \"speedAttack\": 53,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 22\r\n                },\r\n                \"evolutions\": [\r\n                    \"tirtouga\",\r\n                    \"carracosta\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tirtouga\"\r\n    },\r\n    {\r\n        \"num\": 565,\r\n        \"name\": \"Carracosta\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Carracosta\",\r\n                \"description\": \"Carracosta is a Water/Rock type Pokémon introduced in Generation 5. It is known as the Prototurtle Pokémon.\",\r\n                \"image\": \"images/carracosta.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Prototurtle Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 81,\r\n                \"abilities\": [\r\n                    \"Solid Rock\",\r\n                    \"Sturdy\",\r\n                    \"Swift Swim\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 74,\r\n                    \"attack\": 108,\r\n                    \"defense\": 133,\r\n                    \"speedAttack\": 83,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 32\r\n                },\r\n                \"evolutions\": [\r\n                    \"tirtouga\",\r\n                    \"carracosta\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/carracosta\"\r\n    },\r\n    {\r\n        \"num\": 566,\r\n        \"name\": \"Archen\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Archen\",\r\n                \"description\": \"Archen is a Rock/Flying type Pokémon introduced in Generation 5. It is known as the First Bird Pokémon.\",\r\n                \"image\": \"images/archen.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"First Bird Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 9.5,\r\n                \"abilities\": [\r\n                    \"Defeatist\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 401,\r\n                    \"hp\": 55,\r\n                    \"attack\": 112,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 74,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"archen\",\r\n                    \"archeops\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/archen\"\r\n    },\r\n    {\r\n        \"num\": 567,\r\n        \"name\": \"Archeops\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Archeops\",\r\n                \"description\": \"Archeops is a Rock/Flying type Pokémon introduced in Generation 5. It is known as the First Bird Pokémon.\",\r\n                \"image\": \"images/archeops.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"First Bird Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 32,\r\n                \"abilities\": [\r\n                    \"Defeatist\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 567,\r\n                    \"hp\": 75,\r\n                    \"attack\": 140,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 112,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": [\r\n                    \"archen\",\r\n                    \"archeops\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/archeops\"\r\n    },\r\n    {\r\n        \"num\": 568,\r\n        \"name\": \"Trubbish\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Trubbish\",\r\n                \"description\": \"Trubbish is a Poison type Pokémon introduced in Generation 5. It is known as the Trash Bag Pokémon.\",\r\n                \"image\": \"images/trubbish.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Trash Bag Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 31,\r\n                \"abilities\": [\r\n                    \"Stench\",\r\n                    \"Sticky Hold\",\r\n                    \"Aftermath\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 329,\r\n                    \"hp\": 50,\r\n                    \"attack\": 50,\r\n                    \"defense\": 62,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 62,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"trubbish\",\r\n                    \"garbodor\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/trubbish\"\r\n    },\r\n    {\r\n        \"num\": 569,\r\n        \"name\": \"Garbodor\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Garbodor\",\r\n                \"description\": \"Garbodor is a Poison type Pokémon introduced in Generation 5. It is known as the Trash Heap Pokémon.\",\r\n                \"image\": \"images/garbodor.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Trash Heap Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 107.3,\r\n                \"abilities\": [\r\n                    \"Stench\",\r\n                    \"Weak Armor\",\r\n                    \"Aftermath\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 474,\r\n                    \"hp\": 80,\r\n                    \"attack\": 95,\r\n                    \"defense\": 82,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 82,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": [\r\n                    \"trubbish\",\r\n                    \"garbodor\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/garbodor\"\r\n    },\r\n    {\r\n        \"num\": 570,\r\n        \"name\": \"Zorua\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Zorua\",\r\n                \"description\": \"Zorua is a Dark type Pokémon introduced in Generation 5. It is known as the Tricky Fox Pokémon.\",\r\n                \"image\": \"images/zorua.jpg\",\r\n                \"types\": [\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Tricky Fox Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 12.5,\r\n                \"abilities\": [\r\n                    \"Illusion\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 40,\r\n                    \"attack\": 65,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"zorua\",\r\n                    \"zoroark\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/zorua\"\r\n    },\r\n    {\r\n        \"num\": 571,\r\n        \"name\": \"Zoroark\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Zoroark\",\r\n                \"description\": \"Zoroark is a Dark type Pokémon introduced in Generation 5. It is known as the Illusion Fox Pokémon.\",\r\n                \"image\": \"images/zoroark.jpg\",\r\n                \"types\": [\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Illusion Fox Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 81.1,\r\n                \"abilities\": [\r\n                    \"Illusion\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 510,\r\n                    \"hp\": 60,\r\n                    \"attack\": 105,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 105\r\n                },\r\n                \"evolutions\": [\r\n                    \"zorua\",\r\n                    \"zoroark\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/zoroark\"\r\n    },\r\n    {\r\n        \"num\": 572,\r\n        \"name\": \"Minccino\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Minccino\",\r\n                \"description\": \"Minccino is a Normal type Pokémon introduced in Generation 5. It is known as the Chinchilla Pokémon.\",\r\n                \"image\": \"images/minccino.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Chinchilla Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 5.8,\r\n                \"abilities\": [\r\n                    \"Cute Charm\",\r\n                    \"Technician\",\r\n                    \"Skill Link\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 55,\r\n                    \"attack\": 50,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": [\r\n                    \"minccino\",\r\n                    \"cinccino\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/minccino\"\r\n    },\r\n    {\r\n        \"num\": 573,\r\n        \"name\": \"Cinccino\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cinccino\",\r\n                \"description\": \"Cinccino is a Normal type Pokémon introduced in Generation 5. It is known as the Scarf Pokémon.\",\r\n                \"image\": \"images/cinccino.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Scarf Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 7.5,\r\n                \"abilities\": [\r\n                    \"Cute Charm\",\r\n                    \"Technician\",\r\n                    \"Skill Link\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 470,\r\n                    \"hp\": 75,\r\n                    \"attack\": 95,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 115\r\n                },\r\n                \"evolutions\": [\r\n                    \"minccino\",\r\n                    \"cinccino\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cinccino\"\r\n    },\r\n    {\r\n        \"num\": 574,\r\n        \"name\": \"Gothita\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gothita\",\r\n                \"description\": \"Gothita is a Psychic type Pokémon introduced in Generation 5. It is known as the Fixation Pokémon.\",\r\n                \"image\": \"images/gothita.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Fixation Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 5.8,\r\n                \"abilities\": [\r\n                    \"Frisk\",\r\n                    \"Competitive\",\r\n                    \"Shadow Tag\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 290,\r\n                    \"hp\": 45,\r\n                    \"attack\": 30,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"gothita\",\r\n                    \"gothorita\",\r\n                    \"gothitelle\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gothita\"\r\n    },\r\n    {\r\n        \"num\": 575,\r\n        \"name\": \"Gothorita\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gothorita\",\r\n                \"description\": \"Gothorita is a Psychic type Pokémon introduced in Generation 5. It is known as the Manipulate Pokémon.\",\r\n                \"image\": \"images/gothorita.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Manipulate Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 18,\r\n                \"abilities\": [\r\n                    \"Frisk\",\r\n                    \"Competitive\",\r\n                    \"Shadow Tag\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 390,\r\n                    \"hp\": 60,\r\n                    \"attack\": 45,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"gothita\",\r\n                    \"gothorita\",\r\n                    \"gothitelle\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gothorita\"\r\n    },\r\n    {\r\n        \"num\": 576,\r\n        \"name\": \"Gothitelle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gothitelle\",\r\n                \"description\": \"Gothitelle is a Psychic type Pokémon introduced in Generation 5. It is known as the Astral Body Pokémon.\",\r\n                \"image\": \"images/gothitelle.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Astral Body Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 44,\r\n                \"abilities\": [\r\n                    \"Frisk\",\r\n                    \"Competitive\",\r\n                    \"Shadow Tag\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 70,\r\n                    \"attack\": 55,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"gothita\",\r\n                    \"gothorita\",\r\n                    \"gothitelle\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gothitelle\"\r\n    },\r\n    {\r\n        \"num\": 577,\r\n        \"name\": \"Solosis\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Solosis\",\r\n                \"description\": \"Solosis is a Psychic type Pokémon introduced in Generation 5. It is known as the Cell Pokémon.\",\r\n                \"image\": \"images/solosis.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Cell Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 1,\r\n                \"abilities\": [\r\n                    \"Overcoat\",\r\n                    \"Magic Guard\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 290,\r\n                    \"hp\": 45,\r\n                    \"attack\": 30,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"solosis\",\r\n                    \"duosion\",\r\n                    \"reuniclus\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/solosis\"\r\n    },\r\n    {\r\n        \"num\": 578,\r\n        \"name\": \"Duosion\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Duosion\",\r\n                \"description\": \"Duosion is a Psychic type Pokémon introduced in Generation 5. It is known as the Mitosis Pokémon.\",\r\n                \"image\": \"images/duosion.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Mitosis Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 8,\r\n                \"abilities\": [\r\n                    \"Overcoat\",\r\n                    \"Magic Guard\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 370,\r\n                    \"hp\": 65,\r\n                    \"attack\": 40,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"solosis\",\r\n                    \"duosion\",\r\n                    \"reuniclus\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/duosion\"\r\n    },\r\n    {\r\n        \"num\": 579,\r\n        \"name\": \"Reuniclus\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Reuniclus\",\r\n                \"description\": \"Reuniclus is a Psychic type Pokémon introduced in Generation 5. It is known as the Multiplying Pokémon.\",\r\n                \"image\": \"images/reuniclus.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Multiplying Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 20.1,\r\n                \"abilities\": [\r\n                    \"Overcoat\",\r\n                    \"Magic Guard\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 110,\r\n                    \"attack\": 65,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"solosis\",\r\n                    \"duosion\",\r\n                    \"reuniclus\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/reuniclus\"\r\n    },\r\n    {\r\n        \"num\": 580,\r\n        \"name\": \"Ducklett\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ducklett\",\r\n                \"description\": \"Ducklett is a Water/Flying type Pokémon introduced in Generation 5. It is known as the Water Bird Pokémon.\",\r\n                \"image\": \"images/ducklett.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Water Bird Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 5.5,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Big Pecks\",\r\n                    \"Hydration\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 62,\r\n                    \"attack\": 44,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 44,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"ducklett\",\r\n                    \"swanna\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ducklett\"\r\n    },\r\n    {\r\n        \"num\": 581,\r\n        \"name\": \"Swanna\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Swanna\",\r\n                \"description\": \"Swanna is a Water/Flying type Pokémon introduced in Generation 5. It is known as the White Bird Pokémon.\",\r\n                \"image\": \"images/swanna.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"White Bird Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 24.2,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Big Pecks\",\r\n                    \"Hydration\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 473,\r\n                    \"hp\": 75,\r\n                    \"attack\": 87,\r\n                    \"defense\": 63,\r\n                    \"speedAttack\": 87,\r\n                    \"speedDefense\": 63,\r\n                    \"speed\": 98\r\n                },\r\n                \"evolutions\": [\r\n                    \"ducklett\",\r\n                    \"swanna\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/swanna\"\r\n    },\r\n    {\r\n        \"num\": 582,\r\n        \"name\": \"Vanillite\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Vanillite\",\r\n                \"description\": \"Vanillite is an Ice type Pokémon introduced in Generation 5. It is known as the Fresh Snow Pokémon.\",\r\n                \"image\": \"images/vanillite.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Fresh Snow Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 5.7,\r\n                \"abilities\": [\r\n                    \"Ice Body\",\r\n                    \"Snow Cloak\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 36,\r\n                    \"attack\": 50,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 44\r\n                },\r\n                \"evolutions\": [\r\n                    \"vanillite\",\r\n                    \"vanillish\",\r\n                    \"vanilluxe\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/vanillite\"\r\n    },\r\n    {\r\n        \"num\": 583,\r\n        \"name\": \"Vanillish\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Vanillish\",\r\n                \"description\": \"Vanillish is an Ice type Pokémon introduced in Generation 5. It is known as the Icy Snow Pokémon.\",\r\n                \"image\": \"images/vanillish.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Icy Snow Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 41,\r\n                \"abilities\": [\r\n                    \"Ice Body\",\r\n                    \"Snow Cloak\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 395,\r\n                    \"hp\": 51,\r\n                    \"attack\": 65,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 59\r\n                },\r\n                \"evolutions\": [\r\n                    \"vanillite\",\r\n                    \"vanillish\",\r\n                    \"vanilluxe\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/vanillish\"\r\n    },\r\n    {\r\n        \"num\": 584,\r\n        \"name\": \"Vanilluxe\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Vanilluxe\",\r\n                \"description\": \"Vanilluxe is an Ice type Pokémon introduced in Generation 5. It is known as the Snowstorm Pokémon.\",\r\n                \"image\": \"images/vanilluxe.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Snowstorm Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 57.5,\r\n                \"abilities\": [\r\n                    \"Ice Body\",\r\n                    \"Snow Warning\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 535,\r\n                    \"hp\": 71,\r\n                    \"attack\": 95,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 79\r\n                },\r\n                \"evolutions\": [\r\n                    \"vanillite\",\r\n                    \"vanillish\",\r\n                    \"vanilluxe\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/vanilluxe\"\r\n    },\r\n    {\r\n        \"num\": 585,\r\n        \"name\": \"Deerling\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Deerling\",\r\n                \"description\": \"Deerling is a Normal/Grass type Pokémon introduced in Generation 5. It is known as the Season Pokémon.\",\r\n                \"image\": \"images/deerling.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Season Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 19.5,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Sap Sipper\",\r\n                    \"Serene Grace\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 335,\r\n                    \"hp\": 60,\r\n                    \"attack\": 60,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": [\r\n                    \"deerling\",\r\n                    \"sawsbuck\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/deerling\"\r\n    },\r\n    {\r\n        \"num\": 586,\r\n        \"name\": \"Sawsbuck\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sawsbuck\",\r\n                \"description\": \"Sawsbuck is a Normal/Grass type Pokémon introduced in Generation 5. It is known as the Season Pokémon.\",\r\n                \"image\": \"images/sawsbuck.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Season Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 92.5,\r\n                \"abilities\": [\r\n                    \"Chlorophyll\",\r\n                    \"Sap Sipper\",\r\n                    \"Serene Grace\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 475,\r\n                    \"hp\": 80,\r\n                    \"attack\": 100,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"deerling\",\r\n                    \"sawsbuck\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sawsbuck\"\r\n    },\r\n    {\r\n        \"num\": 587,\r\n        \"name\": \"Emolga\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Emolga\",\r\n                \"description\": \"Emolga is an Electric/Flying type Pokémon introduced in Generation 5. It is known as the Sky Squirrel Pokémon.\",\r\n                \"image\": \"images/emolga.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Sky Squirrel Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 5,\r\n                \"abilities\": [\r\n                    \"Static\",\r\n                    \"Motor Drive\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 428,\r\n                    \"hp\": 55,\r\n                    \"attack\": 75,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 103\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/emolga\"\r\n    },\r\n    {\r\n        \"num\": 588,\r\n        \"name\": \"Karrablast\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Karrablast\",\r\n                \"description\": \"Karrablast is a Bug type Pokémon introduced in Generation 5. It is known as the Clamping Pokémon.\",\r\n                \"image\": \"images/karrablast.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Clamping Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 5.9,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Shed Skin\",\r\n                    \"No Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 315,\r\n                    \"hp\": 50,\r\n                    \"attack\": 75,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"karrablast\",\r\n                    \"escavalier\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/karrablast\"\r\n    },\r\n    {\r\n        \"num\": 589,\r\n        \"name\": \"Escavalier\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Escavalier\",\r\n                \"description\": \"Escavalier is a Bug/Steel type Pokémon introduced in Generation 5. It is known as the Cavalry Pokémon.\",\r\n                \"image\": \"images/escavalier.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Cavalry Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 33,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Shell Armor\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 70,\r\n                    \"attack\": 135,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"karrablast\",\r\n                    \"escavalier\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/escavalier\"\r\n    },\r\n    {\r\n        \"num\": 590,\r\n        \"name\": \"Foongus\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Foongus\",\r\n                \"description\": \"Foongus is a Grass/Poison type Pokémon introduced in Generation 5. It is known as the Mushroom Pokémon.\",\r\n                \"image\": \"images/foongus.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Mushroom Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 1,\r\n                \"abilities\": [\r\n                    \"Effect Spore\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 294,\r\n                    \"hp\": 69,\r\n                    \"attack\": 55,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 15\r\n                },\r\n                \"evolutions\": [\r\n                    \"foongus\",\r\n                    \"amoonguss\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/foongus\"\r\n    },\r\n    {\r\n        \"num\": 591,\r\n        \"name\": \"Amoonguss\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Amoonguss\",\r\n                \"description\": \"Amoonguss is a Grass/Poison type Pokémon introduced in Generation 5. It is known as the Mushroom Pokémon.\",\r\n                \"image\": \"images/amoonguss.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Mushroom Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 10.5,\r\n                \"abilities\": [\r\n                    \"Effect Spore\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 464,\r\n                    \"hp\": 114,\r\n                    \"attack\": 85,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"foongus\",\r\n                    \"amoonguss\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/amoonguss\"\r\n    },\r\n    {\r\n        \"num\": 592,\r\n        \"name\": \"Frillish\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Frillish\",\r\n                \"description\": \"Frillish is a Water/Ghost type Pokémon introduced in Generation 5. It is known as the Floating Pokémon.\",\r\n                \"image\": \"images/frillish.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Floating Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 33,\r\n                \"abilities\": [\r\n                    \"Water Absorb\",\r\n                    \"Cursed Body\",\r\n                    \"Damp\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 335,\r\n                    \"hp\": 55,\r\n                    \"attack\": 40,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"frillish\",\r\n                    \"jellicent\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/frillish\"\r\n    },\r\n    {\r\n        \"num\": 593,\r\n        \"name\": \"Jellicent\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Jellicent\",\r\n                \"description\": \"Jellicent is a Water/Ghost type Pokémon introduced in Generation 5. It is known as the Floating Pokémon.\",\r\n                \"image\": \"images/jellicent.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Floating Pokémon\",\r\n                \"height\": 2.2,\r\n                \"weight\": 135,\r\n                \"abilities\": [\r\n                    \"Water Absorb\",\r\n                    \"Cursed Body\",\r\n                    \"Damp\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 100,\r\n                    \"attack\": 60,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"frillish\",\r\n                    \"jellicent\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/jellicent\"\r\n    },\r\n    {\r\n        \"num\": 594,\r\n        \"name\": \"Alomomola\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Alomomola\",\r\n                \"description\": \"Alomomola is a Water type Pokémon introduced in Generation 5. It is known as the Caring Pokémon.\",\r\n                \"image\": \"images/alomomola.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Caring Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 31.6,\r\n                \"abilities\": [\r\n                    \"Healer\",\r\n                    \"Hydration\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 470,\r\n                    \"hp\": 165,\r\n                    \"attack\": 75,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/alomomola\"\r\n    },\r\n    {\r\n        \"num\": 595,\r\n        \"name\": \"Joltik\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Joltik\",\r\n                \"description\": \"Joltik is a Bug/Electric type Pokémon introduced in Generation 5. It is known as the Attaching Pokémon.\",\r\n                \"image\": \"images/joltik.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Attaching Pokémon\",\r\n                \"height\": 0.1,\r\n                \"weight\": 0.6,\r\n                \"abilities\": [\r\n                    \"Compound Eyes\",\r\n                    \"Unnerve\",\r\n                    \"Swarm\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 319,\r\n                    \"hp\": 50,\r\n                    \"attack\": 47,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 57,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"joltik\",\r\n                    \"galvantula\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/joltik\"\r\n    },\r\n    {\r\n        \"num\": 596,\r\n        \"name\": \"Galvantula\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Galvantula\",\r\n                \"description\": \"Galvantula is a Bug/Electric type Pokémon introduced in Generation 5. It is known as the EleSpider Pokémon.\",\r\n                \"image\": \"images/galvantula.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"EleSpider Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 14.3,\r\n                \"abilities\": [\r\n                    \"Compound Eyes\",\r\n                    \"Unnerve\",\r\n                    \"Swarm\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 472,\r\n                    \"hp\": 70,\r\n                    \"attack\": 77,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 97,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 108\r\n                },\r\n                \"evolutions\": [\r\n                    \"joltik\",\r\n                    \"galvantula\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/galvantula\"\r\n    },\r\n    {\r\n        \"num\": 597,\r\n        \"name\": \"Ferroseed\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ferroseed\",\r\n                \"description\": \"Ferroseed is a Grass/Steel type Pokémon introduced in Generation 5. It is known as the Thorn Seed Pokémon.\",\r\n                \"image\": \"images/ferroseed.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Thorn Seed Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 18.8,\r\n                \"abilities\": [\r\n                    \"Iron Barbs\",\r\n                    \"Anticipation\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 44,\r\n                    \"attack\": 50,\r\n                    \"defense\": 91,\r\n                    \"speedAttack\": 24,\r\n                    \"speedDefense\": 86,\r\n                    \"speed\": 10\r\n                },\r\n                \"evolutions\": [\r\n                    \"ferroseed\",\r\n                    \"ferrothorn\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ferroseed\"\r\n    },\r\n    {\r\n        \"num\": 598,\r\n        \"name\": \"Ferrothorn\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ferrothorn\",\r\n                \"description\": \"Ferrothorn is a Grass/Steel type Pokémon introduced in Generation 5. It is known as the Thorn Pod Pokémon.\",\r\n                \"image\": \"images/ferrothorn.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Thorn Pod Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 110,\r\n                \"abilities\": [\r\n                    \"Iron Barbs\",\r\n                    \"Anticipation\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 489,\r\n                    \"hp\": 74,\r\n                    \"attack\": 94,\r\n                    \"defense\": 131,\r\n                    \"speedAttack\": 54,\r\n                    \"speedDefense\": 116,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"ferroseed\",\r\n                    \"ferrothorn\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ferrothorn\"\r\n    },\r\n    {\r\n        \"num\": 599,\r\n        \"name\": \"Klink\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Klink\",\r\n                \"description\": \"Klink is a Steel type Pokémon introduced in Generation 5. It is known as the Gear Pokémon.\",\r\n                \"image\": \"images/klink.jpg\",\r\n                \"types\": [\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Gear Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 21,\r\n                \"abilities\": [\r\n                    \"Plus\",\r\n                    \"Minus\",\r\n                    \"Clear Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 40,\r\n                    \"attack\": 55,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"klink\",\r\n                    \"klang\",\r\n                    \"klinklang\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/klink\"\r\n    },\r\n    {\r\n        \"num\": 600,\r\n        \"name\": \"Klang\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Klang\",\r\n                \"description\": \"Klang is a Steel type Pokémon introduced in Generation 5. It is known as the Gear Pokémon.\",\r\n                \"image\": \"images/klang.jpg\",\r\n                \"types\": [\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Gear Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 51,\r\n                \"abilities\": [\r\n                    \"Plus\",\r\n                    \"Minus\",\r\n                    \"Clear Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 440,\r\n                    \"hp\": 60,\r\n                    \"attack\": 80,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"klink\",\r\n                    \"klang\",\r\n                    \"klinklang\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/klang\"\r\n    },\r\n    {\r\n        \"num\": 601,\r\n        \"name\": \"Klinklang\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Klinklang\",\r\n                \"description\": \"Klinklang is a Steel type Pokémon introduced in Generation 5. It is known as the Gear Pokémon.\",\r\n                \"image\": \"images/klinklang.jpg\",\r\n                \"types\": [\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Gear Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 81,\r\n                \"abilities\": [\r\n                    \"Plus\",\r\n                    \"Minus\",\r\n                    \"Clear Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 520,\r\n                    \"hp\": 60,\r\n                    \"attack\": 100,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"klink\",\r\n                    \"klang\",\r\n                    \"klinklang\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/klinklang\"\r\n    },\r\n    {\r\n        \"num\": 602,\r\n        \"name\": \"Tynamo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tynamo\",\r\n                \"description\": \"Tynamo is an Electric type Pokémon introduced in Generation 5. It is known as the EleFish Pokémon.\",\r\n                \"image\": \"images/tynamo.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"EleFish Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 0.3,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 275,\r\n                    \"hp\": 35,\r\n                    \"attack\": 55,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"tynamo\",\r\n                    \"eelektrik\",\r\n                    \"eelektross\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tynamo\"\r\n    },\r\n    {\r\n        \"num\": 603,\r\n        \"name\": \"Eelektrik\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Eelektrik\",\r\n                \"description\": \"Eelektrik is an Electric type Pokémon introduced in Generation 5. It is known as the EleFish Pokémon.\",\r\n                \"image\": \"images/eelektrik.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"EleFish Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 22,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 65,\r\n                    \"attack\": 85,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"tynamo\",\r\n                    \"eelektrik\",\r\n                    \"eelektross\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/eelektrik\"\r\n    },\r\n    {\r\n        \"num\": 604,\r\n        \"name\": \"Eelektross\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Eelektross\",\r\n                \"description\": \"Eelektross is an Electric type Pokémon introduced in Generation 5. It is known as the EleFish Pokémon.\",\r\n                \"image\": \"images/eelektross.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"EleFish Pokémon\",\r\n                \"height\": 2.1,\r\n                \"weight\": 80.5,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 515,\r\n                    \"hp\": 85,\r\n                    \"attack\": 115,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"tynamo\",\r\n                    \"eelektrik\",\r\n                    \"eelektross\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/eelektross\"\r\n    },\r\n    {\r\n        \"num\": 605,\r\n        \"name\": \"Elgyem\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Elgyem\",\r\n                \"description\": \"Elgyem is a Psychic type Pokémon introduced in Generation 5. It is known as the Cerebral Pokémon.\",\r\n                \"image\": \"images/elgyem.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Cerebral Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 9,\r\n                \"abilities\": [\r\n                    \"Telepathy\",\r\n                    \"Synchronize\",\r\n                    \"Analytic\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 335,\r\n                    \"hp\": 55,\r\n                    \"attack\": 55,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"elgyem\",\r\n                    \"beheeyem\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/elgyem\"\r\n    },\r\n    {\r\n        \"num\": 606,\r\n        \"name\": \"Beheeyem\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Beheeyem\",\r\n                \"description\": \"Beheeyem is a Psychic type Pokémon introduced in Generation 5. It is known as the Cerebral Pokémon.\",\r\n                \"image\": \"images/beheeyem.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Cerebral Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 34.5,\r\n                \"abilities\": [\r\n                    \"Telepathy\",\r\n                    \"Synchronize\",\r\n                    \"Analytic\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 75,\r\n                    \"attack\": 75,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"elgyem\",\r\n                    \"beheeyem\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/beheeyem\"\r\n    },\r\n    {\r\n        \"num\": 607,\r\n        \"name\": \"Litwick\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Litwick\",\r\n                \"description\": \"Litwick is a Ghost/Fire type Pokémon introduced in Generation 5. It is known as the Candle Pokémon.\",\r\n                \"image\": \"images/litwick.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Candle Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 3.1,\r\n                \"abilities\": [\r\n                    \"Flash Fire\",\r\n                    \"Flame Body\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 275,\r\n                    \"hp\": 50,\r\n                    \"attack\": 30,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 20\r\n                },\r\n                \"evolutions\": [\r\n                    \"litwick\",\r\n                    \"lampent\",\r\n                    \"chandelure\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/litwick\"\r\n    },\r\n    {\r\n        \"num\": 608,\r\n        \"name\": \"Lampent\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lampent\",\r\n                \"description\": \"Lampent is a Ghost/Fire type Pokémon introduced in Generation 5. It is known as the Lamp Pokémon.\",\r\n                \"image\": \"images/lampent.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Lamp Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 13,\r\n                \"abilities\": [\r\n                    \"Flash Fire\",\r\n                    \"Flame Body\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 370,\r\n                    \"hp\": 60,\r\n                    \"attack\": 40,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"litwick\",\r\n                    \"lampent\",\r\n                    \"chandelure\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lampent\"\r\n    },\r\n    {\r\n        \"num\": 609,\r\n        \"name\": \"Chandelure\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Chandelure\",\r\n                \"description\": \"Chandelure is a Ghost/Fire type Pokémon introduced in Generation 5. It is known as the Luring Pokémon.\",\r\n                \"image\": \"images/chandelure.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Luring Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 34.3,\r\n                \"abilities\": [\r\n                    \"Flash Fire\",\r\n                    \"Flame Body\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 520,\r\n                    \"hp\": 60,\r\n                    \"attack\": 55,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 145,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"litwick\",\r\n                    \"lampent\",\r\n                    \"chandelure\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/chandelure\"\r\n    },\r\n    {\r\n        \"num\": 610,\r\n        \"name\": \"Axew\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Axew\",\r\n                \"description\": \"Axew is a Dragon type Pokémon introduced in Generation 5. It is known as the Tusk Pokémon.\",\r\n                \"image\": \"images/axew.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Tusk Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 18,\r\n                \"abilities\": [\r\n                    \"Rivalry\",\r\n                    \"Mold Breaker\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 320,\r\n                    \"hp\": 46,\r\n                    \"attack\": 87,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 57\r\n                },\r\n                \"evolutions\": [\r\n                    \"axew\",\r\n                    \"fraxure\",\r\n                    \"haxorus\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/axew\"\r\n    },\r\n    {\r\n        \"num\": 611,\r\n        \"name\": \"Fraxure\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Fraxure\",\r\n                \"description\": \"Fraxure is a Dragon type Pokémon introduced in Generation 5. It is known as the Axe Jaw Pokémon.\",\r\n                \"image\": \"images/fraxure.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Axe Jaw Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 36,\r\n                \"abilities\": [\r\n                    \"Rivalry\",\r\n                    \"Mold Breaker\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 410,\r\n                    \"hp\": 66,\r\n                    \"attack\": 117,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 67\r\n                },\r\n                \"evolutions\": [\r\n                    \"axew\",\r\n                    \"fraxure\",\r\n                    \"haxorus\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/fraxure\"\r\n    },\r\n    {\r\n        \"num\": 612,\r\n        \"name\": \"Haxorus\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Haxorus\",\r\n                \"description\": \"Haxorus is a Dragon type Pokémon introduced in Generation 5. It is known as the Axe Jaw Pokémon.\",\r\n                \"image\": \"images/haxorus.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Axe Jaw Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 105.5,\r\n                \"abilities\": [\r\n                    \"Rivalry\",\r\n                    \"Mold Breaker\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 540,\r\n                    \"hp\": 76,\r\n                    \"attack\": 147,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 97\r\n                },\r\n                \"evolutions\": [\r\n                    \"axew\",\r\n                    \"fraxure\",\r\n                    \"haxorus\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/haxorus\"\r\n    },\r\n    {\r\n        \"num\": 613,\r\n        \"name\": \"Cubchoo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cubchoo\",\r\n                \"description\": \"Cubchoo is an Ice type Pokémon introduced in Generation 5. It is known as the Chill Pokémon.\",\r\n                \"image\": \"images/cubchoo.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Chill Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 8.5,\r\n                \"abilities\": [\r\n                    \"Snow Cloak\",\r\n                    \"Slush Rush\",\r\n                    \"Rattled\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 55,\r\n                    \"attack\": 70,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"cubchoo\",\r\n                    \"beartic\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cubchoo\"\r\n    },\r\n    {\r\n        \"num\": 614,\r\n        \"name\": \"Beartic\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Beartic\",\r\n                \"description\": \"Beartic is an Ice type Pokémon introduced in Generation 5. It is known as the Freezing Pokémon.\",\r\n                \"image\": \"images/beartic.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Freezing Pokémon\",\r\n                \"height\": 2.6,\r\n                \"weight\": 260,\r\n                \"abilities\": [\r\n                    \"Snow Cloak\",\r\n                    \"Slush Rush\",\r\n                    \"Swift Swim\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 505,\r\n                    \"hp\": 95,\r\n                    \"attack\": 130,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"cubchoo\",\r\n                    \"beartic\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/beartic\"\r\n    },\r\n    {\r\n        \"num\": 615,\r\n        \"name\": \"Cryogonal\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cryogonal\",\r\n                \"description\": \"Cryogonal is an Ice type Pokémon introduced in Generation 5. It is known as the Crystallizing Pokémon.\",\r\n                \"image\": \"images/cryogonal.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Crystallizing Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 148,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 515,\r\n                    \"hp\": 80,\r\n                    \"attack\": 50,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 135,\r\n                    \"speed\": 105\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cryogonal\"\r\n    },\r\n    {\r\n        \"num\": 616,\r\n        \"name\": \"Shelmet\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Shelmet\",\r\n                \"description\": \"Shelmet is a Bug type Pokémon introduced in Generation 5. It is known as the Snail Pokémon.\",\r\n                \"image\": \"images/shelmet.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Snail Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 7.7,\r\n                \"abilities\": [\r\n                    \"Hydration\",\r\n                    \"Shell Armor\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 50,\r\n                    \"attack\": 40,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 25\r\n                },\r\n                \"evolutions\": [\r\n                    \"shelmet\",\r\n                    \"accelgor\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/shelmet\"\r\n    },\r\n    {\r\n        \"num\": 617,\r\n        \"name\": \"Accelgor\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Accelgor\",\r\n                \"description\": \"Accelgor is a Bug type Pokémon introduced in Generation 5. It is known as the Shell Out Pokémon.\",\r\n                \"image\": \"images/accelgor.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Shell Out Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 25.3,\r\n                \"abilities\": [\r\n                    \"Hydration\",\r\n                    \"Sticky Hold\",\r\n                    \"Unburden\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 80,\r\n                    \"attack\": 70,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 145\r\n                },\r\n                \"evolutions\": [\r\n                    \"shelmet\",\r\n                    \"accelgor\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/accelgor\"\r\n    },\r\n    {\r\n        \"num\": 618,\r\n        \"name\": \"Stunfisk\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Stunfisk\",\r\n                \"description\": \"Stunfisk is a Ground/Electric type Pokémon introduced in Generation 5. It is known as the Trap Pokémon.\",\r\n                \"image\": \"images/stunfisk.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Trap Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 11,\r\n                \"abilities\": [\r\n                    \"Static\",\r\n                    \"Limber\",\r\n                    \"Sand Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 471,\r\n                    \"hp\": 109,\r\n                    \"attack\": 66,\r\n                    \"defense\": 84,\r\n                    \"speedAttack\": 81,\r\n                    \"speedDefense\": 99,\r\n                    \"speed\": 32\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/stunfisk\"\r\n    },\r\n    {\r\n        \"num\": 619,\r\n        \"name\": \"Mienfoo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mienfoo\",\r\n                \"description\": \"Mienfoo is a Fighting type Pokémon introduced in Generation 5. It is known as the Martial Arts Pokémon.\",\r\n                \"image\": \"images/mienfoo.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Martial Arts Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 20,\r\n                \"abilities\": [\r\n                    \"Inner Focus\",\r\n                    \"Regenerator\",\r\n                    \"Reckless\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 350,\r\n                    \"hp\": 45,\r\n                    \"attack\": 85,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"mienfoo\",\r\n                    \"mienshao\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mienfoo\"\r\n    },\r\n    {\r\n        \"num\": 620,\r\n        \"name\": \"Mienshao\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mienshao\",\r\n                \"description\": \"Mienshao is a Fighting type Pokémon introduced in Generation 5. It is known as the Martial Arts Pokémon.\",\r\n                \"image\": \"images/mienshao.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Martial Arts Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 35.5,\r\n                \"abilities\": [\r\n                    \"Inner Focus\",\r\n                    \"Regenerator\",\r\n                    \"Reckless\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 510,\r\n                    \"hp\": 65,\r\n                    \"attack\": 125,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 105\r\n                },\r\n                \"evolutions\": [\r\n                    \"mienfoo\",\r\n                    \"mienshao\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mienshao\"\r\n    },\r\n    {\r\n        \"num\": 621,\r\n        \"name\": \"Druddigon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Druddigon\",\r\n                \"description\": \"Druddigon is a Dragon type Pokémon introduced in Generation 5. It is known as the Cave Pokémon.\",\r\n                \"image\": \"images/druddigon.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Cave Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 139,\r\n                \"abilities\": [\r\n                    \"Rough Skin\",\r\n                    \"Sheer Force\",\r\n                    \"Mold Breaker\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 77,\r\n                    \"attack\": 120,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 48\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/druddigon\"\r\n    },\r\n    {\r\n        \"num\": 622,\r\n        \"name\": \"Golett\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Golett\",\r\n                \"description\": \"Golett is a Ground/Ghost type Pokémon introduced in Generation 5. It is known as the Automaton Pokémon.\",\r\n                \"image\": \"images/golett.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Automaton Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 92,\r\n                \"abilities\": [\r\n                    \"Iron Fist\",\r\n                    \"Klutz\",\r\n                    \"No Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 303,\r\n                    \"hp\": 59,\r\n                    \"attack\": 74,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"golett\",\r\n                    \"golurk\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/golett\"\r\n    },\r\n    {\r\n        \"num\": 623,\r\n        \"name\": \"Golurk\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Golurk\",\r\n                \"description\": \"Golurk is a Ground/Ghost type Pokémon introduced in Generation 5. It is known as the Automaton Pokémon.\",\r\n                \"image\": \"images/golurk.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Automaton Pokémon\",\r\n                \"height\": 2.8,\r\n                \"weight\": 330,\r\n                \"abilities\": [\r\n                    \"Iron Fist\",\r\n                    \"Klutz\",\r\n                    \"No Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 483,\r\n                    \"hp\": 89,\r\n                    \"attack\": 124,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"golett\",\r\n                    \"golurk\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/golurk\"\r\n    },\r\n    {\r\n        \"num\": 624,\r\n        \"name\": \"Pawniard\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pawniard\",\r\n                \"description\": \"Pawniard is a Dark/Steel type Pokémon introduced in Generation 5. It is known as the Sharp Blade Pokémon.\",\r\n                \"image\": \"images/pawniard.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Sharp Blade Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 10.2,\r\n                \"abilities\": [\r\n                    \"Defiant\",\r\n                    \"Inner Focus\",\r\n                    \"Pressure\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 340,\r\n                    \"hp\": 45,\r\n                    \"attack\": 85,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"pawniard\",\r\n                    \"bisharp\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pawniard\"\r\n    },\r\n    {\r\n        \"num\": 625,\r\n        \"name\": \"Bisharp\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bisharp\",\r\n                \"description\": \"Bisharp is a Dark/Steel type Pokémon introduced in Generation 5. It is known as the Sword Blade Pokémon.\",\r\n                \"image\": \"images/bisharp.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Sword Blade Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 70,\r\n                \"abilities\": [\r\n                    \"Defiant\",\r\n                    \"Inner Focus\",\r\n                    \"Pressure\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 65,\r\n                    \"attack\": 125,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"pawniard\",\r\n                    \"bisharp\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bisharp\"\r\n    },\r\n    {\r\n        \"num\": 626,\r\n        \"name\": \"Bouffalant\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bouffalant\",\r\n                \"description\": \"Bouffalant is a Normal type Pokémon introduced in Generation 5. It is known as the Bash Buffalo Pokémon.\",\r\n                \"image\": \"images/bouffalant.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Bash Buffalo Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 94.6,\r\n                \"abilities\": [\r\n                    \"Reckless\",\r\n                    \"Sap Sipper\",\r\n                    \"Soundproof\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 95,\r\n                    \"attack\": 110,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bouffalant\"\r\n    },\r\n    {\r\n        \"num\": 627,\r\n        \"name\": \"Rufflet\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Rufflet\",\r\n                \"description\": \"Rufflet is a Normal/Flying type Pokémon introduced in Generation 5. It is known as the Eaglet Pokémon.\",\r\n                \"image\": \"images/rufflet.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Eaglet Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 10.5,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Sheer Force\",\r\n                    \"Hustle\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 350,\r\n                    \"hp\": 70,\r\n                    \"attack\": 83,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 37,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"rufflet\",\r\n                    \"braviary\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/rufflet\"\r\n    },\r\n    {\r\n        \"num\": 628,\r\n        \"name\": \"Braviary\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Braviary\",\r\n                \"description\": \"Braviary is a Normal/Flying type Pokémon introduced in Generation 5. It is known as the Valiant Pokémon.\",\r\n                \"image\": \"images/braviary.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Valiant Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 41,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Sheer Force\",\r\n                    \"Defiant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 510,\r\n                    \"hp\": 100,\r\n                    \"attack\": 123,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 57,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"rufflet\",\r\n                    \"braviary\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/braviary\"\r\n    },\r\n    {\r\n        \"num\": 629,\r\n        \"name\": \"Vullaby\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Vullaby\",\r\n                \"description\": \"Vullaby is a Dark/Flying type Pokémon introduced in Generation 5. It is known as the Diapered Pokémon.\",\r\n                \"image\": \"images/vullaby.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Diapered Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 9,\r\n                \"abilities\": [\r\n                    \"Big Pecks\",\r\n                    \"Overcoat\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 370,\r\n                    \"hp\": 70,\r\n                    \"attack\": 55,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"vullaby\",\r\n                    \"mandibuzz\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/vullaby\"\r\n    },\r\n    {\r\n        \"num\": 630,\r\n        \"name\": \"Mandibuzz\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mandibuzz\",\r\n                \"description\": \"Mandibuzz is a Dark/Flying type Pokémon introduced in Generation 5. It is known as the Bone Vulture Pokémon.\",\r\n                \"image\": \"images/mandibuzz.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Bone Vulture Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 39.5,\r\n                \"abilities\": [\r\n                    \"Big Pecks\",\r\n                    \"Overcoat\",\r\n                    \"Weak Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 510,\r\n                    \"hp\": 110,\r\n                    \"attack\": 65,\r\n                    \"defense\": 105,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"vullaby\",\r\n                    \"mandibuzz\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mandibuzz\"\r\n    },\r\n    {\r\n        \"num\": 631,\r\n        \"name\": \"Heatmor\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Heatmor\",\r\n                \"description\": \"Heatmor is a Fire type Pokémon introduced in Generation 5. It is known as the Anteater Pokémon.\",\r\n                \"image\": \"images/heatmor.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Anteater Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 58,\r\n                \"abilities\": [\r\n                    \"Gluttony\",\r\n                    \"Flash Fire\",\r\n                    \"White Smoke\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 484,\r\n                    \"hp\": 85,\r\n                    \"attack\": 97,\r\n                    \"defense\": 66,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 66,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/heatmor\"\r\n    },\r\n    {\r\n        \"num\": 632,\r\n        \"name\": \"Durant\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Durant\",\r\n                \"description\": \"Durant is a Bug/Steel type Pokémon introduced in Generation 5. It is known as the Iron Ant Pokémon.\",\r\n                \"image\": \"images/durant.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Iron Ant Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 33,\r\n                \"abilities\": [\r\n                    \"Swarm\",\r\n                    \"Hustle\",\r\n                    \"Truant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 484,\r\n                    \"hp\": 58,\r\n                    \"attack\": 109,\r\n                    \"defense\": 112,\r\n                    \"speedAttack\": 48,\r\n                    \"speedDefense\": 48,\r\n                    \"speed\": 109\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/durant\"\r\n    },\r\n    {\r\n        \"num\": 633,\r\n        \"name\": \"Deino\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Deino\",\r\n                \"description\": \"Deino is a Dark/Dragon type Pokémon introduced in Generation 5. It is known as the Irate Pokémon.\",\r\n                \"image\": \"images/deino.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Irate Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 17.3,\r\n                \"abilities\": [\r\n                    \"Hustle\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 52,\r\n                    \"attack\": 65,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 38\r\n                },\r\n                \"evolutions\": [\r\n                    \"deino\",\r\n                    \"zweilous\",\r\n                    \"hydreigon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/deino\"\r\n    },\r\n    {\r\n        \"num\": 634,\r\n        \"name\": \"Zweilous\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Zweilous\",\r\n                \"description\": \"Zweilous is a Dark/Dragon type Pokémon introduced in Generation 5. It is known as the Hostile Pokémon.\",\r\n                \"image\": \"images/zweilous.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Hostile Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 50,\r\n                \"abilities\": [\r\n                    \"Hustle\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 72,\r\n                    \"attack\": 85,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 58\r\n                },\r\n                \"evolutions\": [\r\n                    \"deino\",\r\n                    \"zweilous\",\r\n                    \"hydreigon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/zweilous\"\r\n    },\r\n    {\r\n        \"num\": 635,\r\n        \"name\": \"Hydreigon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Hydreigon\",\r\n                \"description\": \"Hydreigon is a Dark/Dragon type Pokémon introduced in Generation 5. It is known as the Brutal Pokémon.\",\r\n                \"image\": \"images/hydreigon.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Brutal Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 160,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 92,\r\n                    \"attack\": 105,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 98\r\n                },\r\n                \"evolutions\": [\r\n                    \"deino\",\r\n                    \"zweilous\",\r\n                    \"hydreigon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/hydreigon\"\r\n    },\r\n    {\r\n        \"num\": 636,\r\n        \"name\": \"Larvesta\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Larvesta\",\r\n                \"description\": \"Larvesta is a Bug/Fire type Pokémon introduced in Generation 5. It is known as the Torch Pokémon.\",\r\n                \"image\": \"images/larvesta.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Torch Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 28.8,\r\n                \"abilities\": [\r\n                    \"Flame Body\",\r\n                    \"Swarm\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 360,\r\n                    \"hp\": 55,\r\n                    \"attack\": 85,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"larvesta\",\r\n                    \"volcarona\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/larvesta\"\r\n    },\r\n    {\r\n        \"num\": 637,\r\n        \"name\": \"Volcarona\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Volcarona\",\r\n                \"description\": \"Volcarona is a Bug/Fire type Pokémon introduced in Generation 5. It is known as the Sun Pokémon.\",\r\n                \"image\": \"images/volcarona.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Sun Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 46,\r\n                \"abilities\": [\r\n                    \"Flame Body\",\r\n                    \"Swarm\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 550,\r\n                    \"hp\": 85,\r\n                    \"attack\": 60,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 135,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": [\r\n                    \"larvesta\",\r\n                    \"volcarona\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/volcarona\"\r\n    },\r\n    {\r\n        \"num\": 638,\r\n        \"name\": \"Cobalion\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cobalion\",\r\n                \"description\": \"Cobalion is a Steel/Fighting type Pokémon introduced in Generation 5. It is known as the Iron Will Pokémon.\",\r\n                \"image\": \"images/cobalion.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Iron Will Pokémon\",\r\n                \"height\": 2.1,\r\n                \"weight\": 250,\r\n                \"abilities\": [\r\n                    \"Justified\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 91,\r\n                    \"attack\": 90,\r\n                    \"defense\": 129,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 72,\r\n                    \"speed\": 108\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cobalion\"\r\n    },\r\n    {\r\n        \"num\": 639,\r\n        \"name\": \"Terrakion\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Terrakion\",\r\n                \"description\": \"Terrakion is a Rock/Fighting type Pokémon introduced in Generation 5. It is known as the Cavern Pokémon.\",\r\n                \"image\": \"images/terrakion.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Cavern Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 260,\r\n                \"abilities\": [\r\n                    \"Justified\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 91,\r\n                    \"attack\": 129,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 72,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 108\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/terrakion\"\r\n    },\r\n    {\r\n        \"num\": 640,\r\n        \"name\": \"Virizion\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Virizion\",\r\n                \"description\": \"Virizion is a Grass/Fighting type Pokémon introduced in Generation 5. It is known as the Grassland Pokémon.\",\r\n                \"image\": \"images/virizion.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Grassland Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 200,\r\n                \"abilities\": [\r\n                    \"Justified\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 91,\r\n                    \"attack\": 90,\r\n                    \"defense\": 72,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 129,\r\n                    \"speed\": 108\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/virizion\"\r\n    },\r\n    {\r\n        \"num\": 641,\r\n        \"name\": \"Tornadus\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Incarnate Forme\",\r\n                \"description\": \"Tornadus is a Flying type Pokémon introduced in Generation 5. It is known as the Cyclone Pokémon.\",\r\n                \"image\": \"images/tornadus-incarnate.jpg\",\r\n                \"types\": [\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Cyclone Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 63,\r\n                \"abilities\": [\r\n                    \"Prankster\",\r\n                    \"Defiant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 79,\r\n                    \"attack\": 115,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 111\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Therian Forme\",\r\n                \"description\": \"Tornadus is a Flying type Pokémon introduced in Generation 5. It is known as the Cyclone Pokémon.\",\r\n                \"image\": \"images/tornadus-therian.jpg\",\r\n                \"types\": [\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Cyclone Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 63,\r\n                \"abilities\": [\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 79,\r\n                    \"attack\": 100,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 121\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tornadus\"\r\n    },\r\n    {\r\n        \"num\": 642,\r\n        \"name\": \"Thundurus\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Incarnate Forme\",\r\n                \"description\": \"Thundurus is an Electric/Flying type Pokémon introduced in Generation 5. It is known as the Bolt Strike Pokémon.\",\r\n                \"image\": \"images/thundurus-incarnate.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Bolt Strike Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 61,\r\n                \"abilities\": [\r\n                    \"Prankster\",\r\n                    \"Defiant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 79,\r\n                    \"attack\": 115,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 125,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 111\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Therian Forme\",\r\n                \"description\": \"Thundurus is an Electric/Flying type Pokémon introduced in Generation 5. It is known as the Bolt Strike Pokémon.\",\r\n                \"image\": \"images/thundurus-therian.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Bolt Strike Pokémon\",\r\n                \"height\": 3,\r\n                \"weight\": 61,\r\n                \"abilities\": [\r\n                    \"Volt Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 79,\r\n                    \"attack\": 105,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 145,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 101\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/thundurus\"\r\n    },\r\n    {\r\n        \"num\": 643,\r\n        \"name\": \"Reshiram\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Reshiram\",\r\n                \"description\": \"Reshiram is a Dragon/Fire type Pokémon introduced in Generation 5. It is known as the Vast White Pokémon.\",\r\n                \"image\": \"images/reshiram.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Vast White Pokémon\",\r\n                \"height\": 3.2,\r\n                \"weight\": 330,\r\n                \"abilities\": [\r\n                    \"Turboblaze\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 100,\r\n                    \"attack\": 120,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 150,\r\n                    \"speedDefense\": 120,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/reshiram\"\r\n    },\r\n    {\r\n        \"num\": 644,\r\n        \"name\": \"Zekrom\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Zekrom\",\r\n                \"description\": \"Zekrom is a Dragon/Electric type Pokémon introduced in Generation 5. It is known as the Deep Black Pokémon.\",\r\n                \"image\": \"images/zekrom.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Deep Black Pokémon\",\r\n                \"height\": 2.9,\r\n                \"weight\": 345,\r\n                \"abilities\": [\r\n                    \"Teravolt\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 100,\r\n                    \"attack\": 150,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/zekrom\"\r\n    },\r\n    {\r\n        \"num\": 645,\r\n        \"name\": \"Landorus\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Incarnate Forme\",\r\n                \"description\": \"Landorus is a Ground/Flying type Pokémon introduced in Generation 5. It is known as the Abundance Pokémon.\",\r\n                \"image\": \"images/landorus-incarnate.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Abundance Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 68,\r\n                \"abilities\": [\r\n                    \"Sand Force\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 89,\r\n                    \"attack\": 125,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 115,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 101\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Therian Forme\",\r\n                \"description\": \"Landorus is a Ground/Flying type Pokémon introduced in Generation 5. It is known as the Abundance Pokémon.\",\r\n                \"image\": \"images/landorus-therian.jpg\",\r\n                \"types\": [\r\n                    \"Ground\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Abundance Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 68,\r\n                \"abilities\": [\r\n                    \"Intimidate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 89,\r\n                    \"attack\": 145,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 105,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 91\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/landorus\"\r\n    },\r\n    {\r\n        \"num\": 646,\r\n        \"name\": \"Kyurem\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kyurem\",\r\n                \"description\": \"Kyurem is a Dragon/Ice type Pokémon introduced in Generation 5. It is known as the Boundary Pokémon.\",\r\n                \"image\": \"images/kyurem.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Boundary Pokémon\",\r\n                \"height\": 3,\r\n                \"weight\": 325,\r\n                \"abilities\": [\r\n                    \"Pressure\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 660,\r\n                    \"hp\": 125,\r\n                    \"attack\": 130,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 130,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Black Kyurem\",\r\n                \"description\": \"Kyurem is a Dragon/Ice type Pokémon introduced in Generation 5. It is known as the Boundary Pokémon.\",\r\n                \"image\": \"images/kyurem-black.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Boundary Pokémon\",\r\n                \"height\": 3.3,\r\n                \"weight\": 325,\r\n                \"abilities\": [\r\n                    \"Teravolt\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 700,\r\n                    \"hp\": 125,\r\n                    \"attack\": 170,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"White Kyurem\",\r\n                \"description\": \"Kyurem is a Dragon/Ice type Pokémon introduced in Generation 5. It is known as the Boundary Pokémon.\",\r\n                \"image\": \"images/kyurem-white.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Boundary Pokémon\",\r\n                \"height\": 3.6,\r\n                \"weight\": 325,\r\n                \"abilities\": [\r\n                    \"Turboblaze\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 700,\r\n                    \"hp\": 125,\r\n                    \"attack\": 120,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 170,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kyurem\"\r\n    },\r\n    {\r\n        \"num\": 647,\r\n        \"name\": \"Keldeo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ordinary Forme\",\r\n                \"description\": \"Keldeo is a Water/Fighting type Pokémon introduced in Generation 5. It is known as the Colt Pokémon.\",\r\n                \"image\": \"images/keldeo-ordinary.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Colt Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 48.5,\r\n                \"abilities\": [\r\n                    \"Justified\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 91,\r\n                    \"attack\": 72,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 129,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 108\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Resolute Forme\",\r\n                \"description\": \"Keldeo is a Water/Fighting type Pokémon introduced in Generation 5. It is known as the Colt Pokémon.\",\r\n                \"image\": \"images/keldeo-resolute.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Colt Pokémon\",\r\n                \"height\": 1.4,\r\n                \"weight\": 48.5,\r\n                \"abilities\": [\r\n                    \"Justified\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 580,\r\n                    \"hp\": 91,\r\n                    \"attack\": 72,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 129,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 108\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/keldeo\"\r\n    },\r\n    {\r\n        \"num\": 648,\r\n        \"name\": \"Meloetta\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Aria Forme\",\r\n                \"description\": \"Meloetta is a Normal/Psychic type Pokémon introduced in Generation 5. It is known as the Melody Pokémon.\",\r\n                \"image\": \"images/meloetta-aria.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Melody Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 6.5,\r\n                \"abilities\": [\r\n                    \"Serene Grace\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 100,\r\n                    \"attack\": 77,\r\n                    \"defense\": 77,\r\n                    \"speedAttack\": 128,\r\n                    \"speedDefense\": 128,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Pirouette Forme\",\r\n                \"description\": \"Meloetta is a Normal/Psychic type Pokémon introduced in Generation 5. It is known as the Melody Pokémon.\",\r\n                \"image\": \"images/meloetta-pirouette.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Melody Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 6.5,\r\n                \"abilities\": [\r\n                    \"Serene Grace\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 100,\r\n                    \"attack\": 128,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 77,\r\n                    \"speedDefense\": 77,\r\n                    \"speed\": 128\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/meloetta\"\r\n    },\r\n    {\r\n        \"num\": 649,\r\n        \"name\": \"Genesect\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Genesect\",\r\n                \"description\": \"Genesect is a Bug/Steel type Pokémon introduced in Generation 5. It is known as the Paleozoic Pokémon.\",\r\n                \"image\": \"images/genesect.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Paleozoic Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 82.5,\r\n                \"abilities\": [\r\n                    \"Download\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 71,\r\n                    \"attack\": 120,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 99\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/genesect\"\r\n    },\r\n    {\r\n        \"num\": 650,\r\n        \"name\": \"Chespin\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Chespin\",\r\n                \"description\": \"Chespin is a Grass type Pokémon introduced in Generation 6. It is known as the Spiny Nut Pokémon.\\nChespin has a tough shell covering its head and back. Despite having a curious nature that tends to get it in trouble, Chespin keeps an optimistic outlook and doesn't worry about small details.\\nChespin evolves into Quilladin at level 16.\",\r\n                \"image\": \"images/chespin.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Spiny Nut Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 9,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Bulletproof\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 313,\r\n                    \"hp\": 56,\r\n                    \"attack\": 61,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 48,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 38\r\n                },\r\n                \"evolutions\": [\r\n                    \"chespin\",\r\n                    \"quilladin\",\r\n                    \"chesnaught\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/chespin\"\r\n    },\r\n    {\r\n        \"num\": 651,\r\n        \"name\": \"Quilladin\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Quilladin\",\r\n                \"description\": \"Quilladin is a Grass type Pokémon introduced in Generation 6. It is known as the Spiny Armor Pokémon.\\nUpon evolution, the hard spikes on Quilladin's body grow even sturdier. Despite its prickly appearance, Quilladin is considered a gentle Pokémon that avoids battle.\\nQuilladin evolves from Chespin at level 16, and evolves into Chesnaught at level 36.\",\r\n                \"image\": \"images/quilladin.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Spiny Armor Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 29,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Bulletproof\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 61,\r\n                    \"attack\": 78,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 56,\r\n                    \"speedDefense\": 58,\r\n                    \"speed\": 57\r\n                },\r\n                \"evolutions\": [\r\n                    \"chespin\",\r\n                    \"quilladin\",\r\n                    \"chesnaught\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/quilladin\"\r\n    },\r\n    {\r\n        \"num\": 652,\r\n        \"name\": \"Chesnaught\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Chesnaught\",\r\n                \"description\": \"Chesnaught is a Grass/Fighting type Pokémon introduced in Generation 6. It is known as the Spiny Armor Pokémon.\\nChesnaught evolves from Quilladin at level 36.\",\r\n                \"image\": \"images/chesnaught.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Spiny Armor Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 90,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Bulletproof\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 88,\r\n                    \"attack\": 107,\r\n                    \"defense\": 122,\r\n                    \"speedAttack\": 74,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 64\r\n                },\r\n                \"evolutions\": [\r\n                    \"chespin\",\r\n                    \"quilladin\",\r\n                    \"chesnaught\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/chesnaught\"\r\n    },\r\n    {\r\n        \"num\": 653,\r\n        \"name\": \"Fennekin\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Fennekin\",\r\n                \"description\": \"Fennekin is a Fire type Pokémon introduced in Generation 6. It is known as the Fox Pokémon.\\nFennekin can be temperamental, but it tries to do its best for its Trainer. Searing heat blows from its ears. This Pokémon loves to snack on twigs.\\nFennekin evolves into Braixen at level 16.\",\r\n                \"image\": \"images/fennekin.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Fox Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 9.4,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Magician\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 307,\r\n                    \"hp\": 40,\r\n                    \"attack\": 45,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 62,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"fennekin\",\r\n                    \"braixen\",\r\n                    \"delphox\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/fennekin\"\r\n    },\r\n    {\r\n        \"num\": 654,\r\n        \"name\": \"Braixen\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Braixen\",\r\n                \"description\": \"Braixen is a Fire type Pokémon introduced in Generation 6. It is known as the Fox Pokémon.\\nBraixen no longer eats branches but it still keeps a tree branch in its tail, which seems to calm the Pokémon. It will occasionally wield the branch in battle and use friction to light it on fire.\\nBraixen evolves from Fennekin at level 16, and evolves into Delphox at level 36.\",\r\n                \"image\": \"images/braixen.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Fox Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 14.5,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Magician\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 409,\r\n                    \"hp\": 59,\r\n                    \"attack\": 59,\r\n                    \"defense\": 58,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 73\r\n                },\r\n                \"evolutions\": [\r\n                    \"fennekin\",\r\n                    \"braixen\",\r\n                    \"delphox\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/braixen\"\r\n    },\r\n    {\r\n        \"num\": 655,\r\n        \"name\": \"Delphox\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Delphox\",\r\n                \"description\": \"Delphox is a Fire/Psychic type Pokémon introduced in Generation 6. It is known as the Fox Pokémon.\\nDelphox evolves from Braixen at level 36.\",\r\n                \"image\": \"images/delphox.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Fox Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 39,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Magician\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 534,\r\n                    \"hp\": 75,\r\n                    \"attack\": 69,\r\n                    \"defense\": 72,\r\n                    \"speedAttack\": 114,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 104\r\n                },\r\n                \"evolutions\": [\r\n                    \"fennekin\",\r\n                    \"braixen\",\r\n                    \"delphox\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/delphox\"\r\n    },\r\n    {\r\n        \"num\": 656,\r\n        \"name\": \"Froakie\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Froakie\",\r\n                \"description\": \"Froakie is a Water type Pokémon introduced in Generation 6. It is known as the Bubble Frog Pokémon.\\nFroakie is both light and strong, making it capable of jumping incredibly high. The bubbles on its chest and back protect it from attacks. Froakie may appear absentminded, but in truth it pays close attention to its surroundings at all times.\\nFroakie evolves into Frogadier at level 16.\",\r\n                \"image\": \"images/froakie.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Bubble Frog Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 7,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Protean\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 314,\r\n                    \"hp\": 41,\r\n                    \"attack\": 56,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 62,\r\n                    \"speedDefense\": 44,\r\n                    \"speed\": 71\r\n                },\r\n                \"evolutions\": [\r\n                    \"froakie\",\r\n                    \"frogadier\",\r\n                    \"greninja\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/froakie\"\r\n    },\r\n    {\r\n        \"num\": 657,\r\n        \"name\": \"Frogadier\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Frogadier\",\r\n                \"description\": \"Frogadier is a Water type Pokémon introduced in Generation 6. It is known as the Bubble Frog Pokémon.\\nDuring battle, Frogadier confounds its opponents by leaping about the ceiling or into trees. Its jumping skill improves greatly.\\nFrogadier evolves from Froakie at level 16, and evolves into Greninja at level 36.\",\r\n                \"image\": \"images/frogadier.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Bubble Frog Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 10.9,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Protean\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 54,\r\n                    \"attack\": 63,\r\n                    \"defense\": 52,\r\n                    \"speedAttack\": 83,\r\n                    \"speedDefense\": 56,\r\n                    \"speed\": 97\r\n                },\r\n                \"evolutions\": [\r\n                    \"froakie\",\r\n                    \"frogadier\",\r\n                    \"greninja\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/frogadier\"\r\n    },\r\n    {\r\n        \"num\": 658,\r\n        \"name\": \"Greninja\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Greninja\",\r\n                \"description\": \"Greninja is a Water/Dark type Pokémon introduced in Generation 6. It is known as the Ninja Pokémon.\\nGreninja evolves from Frogadier at level 36.\\nGreninja has a new form Ash-Greninja introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/greninja.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Ninja Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 40,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Protean\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 72,\r\n                    \"attack\": 95,\r\n                    \"defense\": 67,\r\n                    \"speedAttack\": 103,\r\n                    \"speedDefense\": 71,\r\n                    \"speed\": 122\r\n                },\r\n                \"evolutions\": [\r\n                    \"froakie\",\r\n                    \"frogadier\",\r\n                    \"greninja\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Ash-Greninja\",\r\n                \"description\": \"Greninja is a Water/Dark type Pokémon introduced in Generation 6. It is known as the Ninja Pokémon.\\nGreninja evolves from Frogadier at level 36.\\nGreninja has a new form Ash-Greninja introduced in Pokémon Sun/Moon.\",\r\n                \"image\": \"images/greninja-ash.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Ninja Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 40,\r\n                \"abilities\": [\r\n                    \"Battle Bond\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 640,\r\n                    \"hp\": 72,\r\n                    \"attack\": 145,\r\n                    \"defense\": 67,\r\n                    \"speedAttack\": 153,\r\n                    \"speedDefense\": 71,\r\n                    \"speed\": 132\r\n                },\r\n                \"evolutions\": [\r\n                    \"froakie\",\r\n                    \"frogadier\",\r\n                    \"greninja\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/greninja\"\r\n    },\r\n    {\r\n        \"num\": 659,\r\n        \"name\": \"Bunnelby\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bunnelby\",\r\n                \"description\": \"Bunnelby is a Normal type Pokémon introduced in Generation 6. It is known as the Digging Pokémon.\\nBunnelby is based on a rabbit. It creates its den by digging in the ground with its large, shovel-shaped ears. They are strong enough to chop right through thick tree roots.\\nBunnelby evolves into Diggersby at level 20.\",\r\n                \"image\": \"images/bunnelby.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Digging Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 5,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Cheek Pouch\",\r\n                    \"Huge Power\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 237,\r\n                    \"hp\": 38,\r\n                    \"attack\": 36,\r\n                    \"defense\": 38,\r\n                    \"speedAttack\": 32,\r\n                    \"speedDefense\": 36,\r\n                    \"speed\": 57\r\n                },\r\n                \"evolutions\": [\r\n                    \"bunnelby\",\r\n                    \"diggersby\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bunnelby\"\r\n    },\r\n    {\r\n        \"num\": 660,\r\n        \"name\": \"Diggersby\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Diggersby\",\r\n                \"description\": \"Diggersby is a Normal/Ground type Pokémon introduced in Generation 6. It is known as the Digging Pokémon.\\nDiggersby evolves from Bunnelby at level 20.\",\r\n                \"image\": \"images/diggersby.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Digging Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 42.4,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Cheek Pouch\",\r\n                    \"Huge Power\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 423,\r\n                    \"hp\": 85,\r\n                    \"attack\": 56,\r\n                    \"defense\": 77,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 77,\r\n                    \"speed\": 78\r\n                },\r\n                \"evolutions\": [\r\n                    \"bunnelby\",\r\n                    \"diggersby\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/diggersby\"\r\n    },\r\n    {\r\n        \"num\": 661,\r\n        \"name\": \"Fletchling\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Fletchling\",\r\n                \"description\": \"Fletchling is a Normal/Flying type Pokémon introduced in Generation 6. It is known as the Tiny Robin Pokémon.\\nIt has a friendly nature and a beautiful chirp, but Fletchling is also known to be ferocious in battle, capable of unleashing relentless attacks.\\nIt evolves into Fletchinder at level 17.\",\r\n                \"image\": \"images/fletchling.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Tiny Robin Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 1.7,\r\n                \"abilities\": [\r\n                    \"Big Pecks\",\r\n                    \"Gale Wings\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 278,\r\n                    \"hp\": 45,\r\n                    \"attack\": 50,\r\n                    \"defense\": 43,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 38,\r\n                    \"speed\": 62\r\n                },\r\n                \"evolutions\": [\r\n                    \"fletchling\",\r\n                    \"fletchinder\",\r\n                    \"talonflame\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/fletchling\"\r\n    },\r\n    {\r\n        \"num\": 662,\r\n        \"name\": \"Fletchinder\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Fletchinder\",\r\n                \"description\": \"Fletchinder is a Fire/Flying type Pokémon introduced in Generation 6. It is known as the Ember Pokémon.\\nFletchinder evolves from Fletchling at level 17 and evolves into Talonflame at level 35.\",\r\n                \"image\": \"images/fletchinder.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Ember Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 16,\r\n                \"abilities\": [\r\n                    \"Flame Body\",\r\n                    \"Gale Wings\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 382,\r\n                    \"hp\": 62,\r\n                    \"attack\": 73,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 56,\r\n                    \"speedDefense\": 52,\r\n                    \"speed\": 84\r\n                },\r\n                \"evolutions\": [\r\n                    \"fletchling\",\r\n                    \"fletchinder\",\r\n                    \"talonflame\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/fletchinder\"\r\n    },\r\n    {\r\n        \"num\": 663,\r\n        \"name\": \"Talonflame\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Talonflame\",\r\n                \"description\": \"Talonflame is a Fire/Flying type Pokémon introduced in Generation 6. It is known as the Scorching Pokémon.\\nIt dives at foes, and then attacks with devastating kicks.\\nIt evolves from Fletchinder at level 35.\",\r\n                \"image\": \"images/talonflame.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Scorching Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 24.5,\r\n                \"abilities\": [\r\n                    \"Flame Body\",\r\n                    \"Gale Wings\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 499,\r\n                    \"hp\": 78,\r\n                    \"attack\": 81,\r\n                    \"defense\": 71,\r\n                    \"speedAttack\": 74,\r\n                    \"speedDefense\": 69,\r\n                    \"speed\": 126\r\n                },\r\n                \"evolutions\": [\r\n                    \"fletchling\",\r\n                    \"fletchinder\",\r\n                    \"talonflame\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/talonflame\"\r\n    },\r\n    {\r\n        \"num\": 664,\r\n        \"name\": \"Scatterbug\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Scatterbug\",\r\n                \"description\": \"Scatterbug is a Bug type Pokémon introduced in Generation 6. It is known as the Scatterdust Pokémon.\\nScatterbug resides mostly in forests and wild plains. It uses the fur around its neck to control its body temperature.\",\r\n                \"image\": \"images/scatterbug.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Scatterdust Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 2.5,\r\n                \"abilities\": [\r\n                    \"Shield Dust\",\r\n                    \"Compound Eyes\",\r\n                    \"Friend Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 200,\r\n                    \"hp\": 38,\r\n                    \"attack\": 35,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 27,\r\n                    \"speedDefense\": 25,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"scatterbug\",\r\n                    \"spewpa\",\r\n                    \"vivillon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/scatterbug\"\r\n    },\r\n    {\r\n        \"num\": 665,\r\n        \"name\": \"Spewpa\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Spewpa\",\r\n                \"description\": \"Spewpa is a Bug type Pokémon introduced in Generation 6. It is known as the Scatterdust Pokémon.\",\r\n                \"image\": \"images/spewpa.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Scatterdust Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 8.4,\r\n                \"abilities\": [\r\n                    \"Shed Skin\",\r\n                    \"Friend Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 213,\r\n                    \"hp\": 45,\r\n                    \"attack\": 22,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 27,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 29\r\n                },\r\n                \"evolutions\": [\r\n                    \"scatterbug\",\r\n                    \"spewpa\",\r\n                    \"vivillon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/spewpa\"\r\n    },\r\n    {\r\n        \"num\": 666,\r\n        \"name\": \"Vivillon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Vivillon\",\r\n                \"description\": \"Vivillon is a Bug/Flying type Pokémon introduced in Generation 6. It is known as the Scale Pokémon.\\nVivillon has 18 different forms, depending on the region set on the 3DS. (Once encountered, changing the region does not change the form found.) There are also two event-exclusive patterns. The forms are:\\n\\nMeadow Pattern\\nGarden Pattern\\nArchipelago Pattern\\nContinental Pattern\\nElegant Pattern\\nHigh Plains Pattern\\nIcy Snow Pattern\\nJungle Pattern\\nMarine Pattern\\nModern Pattern\\nMonsoon Pattern\\nOcean Pattern\\nPolar Pattern\\nRiver Pattern\\nSandstorm Pattern\\nSavanna Pattern\\nSun Pattern\\nTundra Pattern\\nPoké Ball Pattern (event)\\nFancy Pattern (event)\",\r\n                \"image\": \"images/vivillon.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Scale Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 17,\r\n                \"abilities\": [\r\n                    \"Shield Dust\",\r\n                    \"Compound Eyes\",\r\n                    \"Friend Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 411,\r\n                    \"hp\": 80,\r\n                    \"attack\": 52,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 89\r\n                },\r\n                \"evolutions\": [\r\n                    \"scatterbug\",\r\n                    \"spewpa\",\r\n                    \"vivillon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/vivillon\"\r\n    },\r\n    {\r\n        \"num\": 667,\r\n        \"name\": \"Litleo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Litleo\",\r\n                \"description\": \"Litleo is a Fire/Normal type Pokémon introduced in Generation 6. It is known as the Lion Cub Pokémon.\\nIts mane blazes with heat during battle, burning hotter and hotter the stronger its opponent.\",\r\n                \"image\": \"images/litleo.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Lion Cub Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 13.5,\r\n                \"abilities\": [\r\n                    \"Rivalry\",\r\n                    \"Unnerve\",\r\n                    \"Moxie\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 369,\r\n                    \"hp\": 62,\r\n                    \"attack\": 50,\r\n                    \"defense\": 58,\r\n                    \"speedAttack\": 73,\r\n                    \"speedDefense\": 54,\r\n                    \"speed\": 72\r\n                },\r\n                \"evolutions\": [\r\n                    \"litleo\",\r\n                    \"pyroar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/litleo\"\r\n    },\r\n    {\r\n        \"num\": 668,\r\n        \"name\": \"Pyroar\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pyroar\",\r\n                \"description\": \"Pyroar is a Fire/Normal type Pokémon introduced in Generation 6. It is known as the Royal Pokémon.\\nMale and female Pyroar have different forms - the male has a large mane, while the female is more sleek. Both have the same stats/attributes.\",\r\n                \"image\": \"images/pyroar.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Royal Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 81.5,\r\n                \"abilities\": [\r\n                    \"Rivalry\",\r\n                    \"Unnerve\",\r\n                    \"Moxie\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 507,\r\n                    \"hp\": 86,\r\n                    \"attack\": 68,\r\n                    \"defense\": 72,\r\n                    \"speedAttack\": 109,\r\n                    \"speedDefense\": 66,\r\n                    \"speed\": 106\r\n                },\r\n                \"evolutions\": [\r\n                    \"litleo\",\r\n                    \"pyroar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pyroar\"\r\n    },\r\n    {\r\n        \"num\": 669,\r\n        \"name\": \"Flabébé\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Flabébé\",\r\n                \"description\": \"Flabébé is a Fairy type Pokémon introduced in Generation 6. It is known as the Single Bloom Pokémon.\\nFlabébé has several forms, based on the flower it is holding. They are each found in wild flower patches corresponding to its color. The forms are: Yellow Flower, Red Flower, Orange Flower, Blue Flower and White Flower.\",\r\n                \"image\": \"images/flabebe.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Single Bloom Pokémon\",\r\n                \"height\": 0.1,\r\n                \"weight\": 0.1,\r\n                \"abilities\": [\r\n                    \"Flower Veil\",\r\n                    \"Symbiosis\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 303,\r\n                    \"hp\": 44,\r\n                    \"attack\": 38,\r\n                    \"defense\": 39,\r\n                    \"speedAttack\": 61,\r\n                    \"speedDefense\": 79,\r\n                    \"speed\": 42\r\n                },\r\n                \"evolutions\": [\r\n                    \"flabébé\",\r\n                    \"floette\",\r\n                    \"florges\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/flabebe\"\r\n    },\r\n    {\r\n        \"num\": 670,\r\n        \"name\": \"Floette\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Floette\",\r\n                \"description\": \"Floette is a Fairy type Pokémon introduced in Generation 6. It is known as the Single Bloom Pokémon.\\nLike Flabébé, Floette has several forms: Yellow Flower, Red Flower, Orange Flower, Blue Flower and White Flower.\",\r\n                \"image\": \"images/floette.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Single Bloom Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 0.9,\r\n                \"abilities\": [\r\n                    \"Flower Veil\",\r\n                    \"Symbiosis\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 371,\r\n                    \"hp\": 54,\r\n                    \"attack\": 45,\r\n                    \"defense\": 47,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 98,\r\n                    \"speed\": 52\r\n                },\r\n                \"evolutions\": [\r\n                    \"flabébé\",\r\n                    \"floette\",\r\n                    \"florges\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/floette\"\r\n    },\r\n    {\r\n        \"num\": 671,\r\n        \"name\": \"Florges\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Florges\",\r\n                \"description\": \"Florges is a Fairy type Pokémon introduced in Generation 6. It is known as the Garden Pokémon.\\nLike Flabébé, Florges has several forms: Yellow Flower, Red Flower, Orange Flower, Blue Flower and White Flower.\",\r\n                \"image\": \"images/florges.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Garden Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 10,\r\n                \"abilities\": [\r\n                    \"Flower Veil\",\r\n                    \"Symbiosis\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 552,\r\n                    \"hp\": 78,\r\n                    \"attack\": 65,\r\n                    \"defense\": 68,\r\n                    \"speedAttack\": 112,\r\n                    \"speedDefense\": 154,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": [\r\n                    \"flabébé\",\r\n                    \"floette\",\r\n                    \"florges\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/florges\"\r\n    },\r\n    {\r\n        \"num\": 672,\r\n        \"name\": \"Skiddo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Skiddo\",\r\n                \"description\": \"Skiddo is a Grass type Pokémon introduced in Generation 6. It is known as the Mount Pokémon.\\nSkiddo is said to have been the first Pokémon to live alongside humans. It has become able to read the feelings of its riders through their grip on its horns.\",\r\n                \"image\": \"images/skiddo.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Mount Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 31,\r\n                \"abilities\": [\r\n                    \"Sap Sipper\",\r\n                    \"Grass Pelt\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 350,\r\n                    \"hp\": 66,\r\n                    \"attack\": 65,\r\n                    \"defense\": 48,\r\n                    \"speedAttack\": 62,\r\n                    \"speedDefense\": 57,\r\n                    \"speed\": 52\r\n                },\r\n                \"evolutions\": [\r\n                    \"skiddo\",\r\n                    \"gogoat\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/skiddo\"\r\n    },\r\n    {\r\n        \"num\": 673,\r\n        \"name\": \"Gogoat\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gogoat\",\r\n                \"description\": \"Gogoat is a Grass type Pokémon introduced in Generation 6. It is known as the Mount Pokémon.\\nGogoat is so large that people are able to ride on its back. It's very calm, and can form a strong bond with its Trainer's feelings when its Trainer grabs onto its horns.\",\r\n                \"image\": \"images/gogoat.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Mount Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 91,\r\n                \"abilities\": [\r\n                    \"Sap Sipper\",\r\n                    \"Grass Pelt\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 531,\r\n                    \"hp\": 123,\r\n                    \"attack\": 100,\r\n                    \"defense\": 62,\r\n                    \"speedAttack\": 97,\r\n                    \"speedDefense\": 81,\r\n                    \"speed\": 68\r\n                },\r\n                \"evolutions\": [\r\n                    \"skiddo\",\r\n                    \"gogoat\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gogoat\"\r\n    },\r\n    {\r\n        \"num\": 674,\r\n        \"name\": \"Pancham\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pancham\",\r\n                \"description\": \"Pancham is a Fighting type Pokémon introduced in Generation 6. It is known as the Playful Pokémon.\\nWith its trademark leaf always sticking out of its mouth, Pancham tries to intimidate its opponents by glaring at them intensely (although this is rarely successful).\",\r\n                \"image\": \"images/pancham.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Playful Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 8,\r\n                \"abilities\": [\r\n                    \"Iron Fist\",\r\n                    \"Mold Breaker\",\r\n                    \"Scrappy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 348,\r\n                    \"hp\": 67,\r\n                    \"attack\": 82,\r\n                    \"defense\": 62,\r\n                    \"speedAttack\": 46,\r\n                    \"speedDefense\": 48,\r\n                    \"speed\": 43\r\n                },\r\n                \"evolutions\": [\r\n                    \"pancham\",\r\n                    \"pangoro\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pancham\"\r\n    },\r\n    {\r\n        \"num\": 675,\r\n        \"name\": \"Pangoro\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pangoro\",\r\n                \"description\": \"Pangoro is a Fighting/Dark type Pokémon introduced in Generation 6. It is known as the Daunting Pokémon.\\nPangoro is a cantankerous Pokémon, but it has a strong heart and doesn't forgive those who pick on the weak.\",\r\n                \"image\": \"images/pangoro.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Daunting Pokémon\",\r\n                \"height\": 2.1,\r\n                \"weight\": 136,\r\n                \"abilities\": [\r\n                    \"Iron Fist\",\r\n                    \"Mold Breaker\",\r\n                    \"Scrappy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 95,\r\n                    \"attack\": 124,\r\n                    \"defense\": 78,\r\n                    \"speedAttack\": 69,\r\n                    \"speedDefense\": 71,\r\n                    \"speed\": 58\r\n                },\r\n                \"evolutions\": [\r\n                    \"pancham\",\r\n                    \"pangoro\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pangoro\"\r\n    },\r\n    {\r\n        \"num\": 676,\r\n        \"name\": \"Furfrou\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Furfrou\",\r\n                \"description\": \"Furfrou is a Normal type Pokémon introduced in Generation 6. It is known as the Poodle Pokémon.\\nFurfrou can have its appearance changed by grooming. There are number of different appearances it can take, and the more it's groomed, the more styles become available.\\nFurfrou is also considered very intelligent and loyal to its Trainer. It's said that in ancient times, Furfrou guarded the king of Kalos.\",\r\n                \"image\": \"images/furfrou.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Poodle Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 28,\r\n                \"abilities\": [\r\n                    \"Fur Coat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 472,\r\n                    \"hp\": 75,\r\n                    \"attack\": 80,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 102\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/furfrou\"\r\n    },\r\n    {\r\n        \"num\": 677,\r\n        \"name\": \"Espurr\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Espurr\",\r\n                \"description\": \"Espurr is a Psychic type Pokémon introduced in Generation 6. It is known as the Restraint Pokémon.\\nThe organ that emits its intense psychic power is sheltered by its ears to keep power from leaking out.\",\r\n                \"image\": \"images/espurr.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Restraint Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 3.5,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Infiltrator\",\r\n                    \"Own Tempo\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 355,\r\n                    \"hp\": 62,\r\n                    \"attack\": 48,\r\n                    \"defense\": 54,\r\n                    \"speedAttack\": 63,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 68\r\n                },\r\n                \"evolutions\": [\r\n                    \"espurr\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/espurr\"\r\n    },\r\n    {\r\n        \"num\": 678,\r\n        \"name\": \"Meowstic\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Male\",\r\n                \"description\": \"Meowstic is a Psychic type Pokémon introduced in Generation 6. It is known as the Constraint Pokémon.\\nMeowstic is based on a cat. The organs within Meowstic's ears possess a formidable psychic power, so it usually keeps them clamped shut. But when Meowstic is threatened, it will lift its ears and release this power.\\nMeowstic has different forms depending on its gender. The male is mainly blue and learns more defensive moves; the female is mainly white and learns more attacking moves.\",\r\n                \"image\": \"images/meowstic-male.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Constraint Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 8.5,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Infiltrator\",\r\n                    \"Prankster\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 466,\r\n                    \"hp\": 74,\r\n                    \"attack\": 48,\r\n                    \"defense\": 76,\r\n                    \"speedAttack\": 83,\r\n                    \"speedDefense\": 81,\r\n                    \"speed\": 104\r\n                },\r\n                \"evolutions\": [\r\n                    \"espurr\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Female\",\r\n                \"description\": \"Meowstic is a Psychic type Pokémon introduced in Generation 6. It is known as the Constraint Pokémon.\\nMeowstic is based on a cat. The organs within Meowstic's ears possess a formidable psychic power, so it usually keeps them clamped shut. But when Meowstic is threatened, it will lift its ears and release this power.\\nMeowstic has different forms depending on its gender. The male is mainly blue and learns more defensive moves; the female is mainly white and learns more attacking moves.\",\r\n                \"image\": \"images/meowstic-female.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Constraint Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 8.5,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Infiltrator\",\r\n                    \"Competitive\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 466,\r\n                    \"hp\": 74,\r\n                    \"attack\": 48,\r\n                    \"defense\": 76,\r\n                    \"speedAttack\": 83,\r\n                    \"speedDefense\": 81,\r\n                    \"speed\": 104\r\n                },\r\n                \"evolutions\": [\r\n                    \"espurr\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/meowstic\"\r\n    },\r\n    {\r\n        \"num\": 679,\r\n        \"name\": \"Honedge\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Honedge\",\r\n                \"description\": \"Honedge is a Steel/Ghost type Pokémon introduced in Generation 6. It is known as the Sword Pokémon.\",\r\n                \"image\": \"images/honedge.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Sword Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 2,\r\n                \"abilities\": [\r\n                    \"No Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 325,\r\n                    \"hp\": 45,\r\n                    \"attack\": 80,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 35,\r\n                    \"speedDefense\": 37,\r\n                    \"speed\": 28\r\n                },\r\n                \"evolutions\": [\r\n                    \"honedge\",\r\n                    \"doublade\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/honedge\"\r\n    },\r\n    {\r\n        \"num\": 680,\r\n        \"name\": \"Doublade\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Doublade\",\r\n                \"description\": \"Doublade is a Steel/Ghost type Pokémon introduced in Generation 6. It is known as the Sword Pokémon.\\nDoublade is capable of carrying out intricate attacks by telepathically coordinating its two blades to deliver twice the slice in battle.\",\r\n                \"image\": \"images/doublade.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Sword Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 4.5,\r\n                \"abilities\": [\r\n                    \"No Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 448,\r\n                    \"hp\": 59,\r\n                    \"attack\": 110,\r\n                    \"defense\": 150,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 49,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"honedge\",\r\n                    \"doublade\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/doublade\"\r\n    },\r\n    {\r\n        \"num\": 681,\r\n        \"name\": \"Aegislash\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Blade Forme\",\r\n                \"description\": \"Aegislash is a Steel/Ghost type Pokémon introduced in Generation 6. It is known as the Royal Sword Pokémon.\\nAegislash has two different forms - Shield Forme, which is more defensive, and Blade Forme, which is more offensive. Its ability, Stance Change, causes Aegislash to change into Shield Forme when a defensive move is used, or change into Blade Forme when an attacking move is used.\",\r\n                \"image\": \"images/aegislash-blade.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Royal Sword Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 53,\r\n                \"abilities\": [\r\n                    \"Stance Change\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 520,\r\n                    \"hp\": 60,\r\n                    \"attack\": 150,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 150,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"honedge\",\r\n                    \"doublade\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Shield Forme\",\r\n                \"description\": \"Aegislash is a Steel/Ghost type Pokémon introduced in Generation 6. It is known as the Royal Sword Pokémon.\\nAegislash has two different forms - Shield Forme, which is more defensive, and Blade Forme, which is more offensive. Its ability, Stance Change, causes Aegislash to change into Shield Forme when a defensive move is used, or change into Blade Forme when an attacking move is used.\",\r\n                \"image\": \"images/aegislash-shield.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Royal Sword Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 53,\r\n                \"abilities\": [\r\n                    \"Stance Change\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 520,\r\n                    \"hp\": 60,\r\n                    \"attack\": 50,\r\n                    \"defense\": 150,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 150,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"honedge\",\r\n                    \"doublade\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/aegislash\"\r\n    },\r\n    {\r\n        \"num\": 682,\r\n        \"name\": \"Spritzee\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Spritzee\",\r\n                \"description\": \"Spritzee is a Fairy type Pokémon introduced in Generation 6. It is known as the Perfume Pokémon.\\nIt emits a unique fragrance from its body, and any who smell it fall under its spell.\",\r\n                \"image\": \"images/spritzee.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Perfume Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 0.5,\r\n                \"abilities\": [\r\n                    \"Healer\",\r\n                    \"Aroma Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 341,\r\n                    \"hp\": 78,\r\n                    \"attack\": 52,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 63,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 23\r\n                },\r\n                \"evolutions\": [\r\n                    \"spritzee\",\r\n                    \"aromatisse\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/spritzee\"\r\n    },\r\n    {\r\n        \"num\": 683,\r\n        \"name\": \"Aromatisse\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Aromatisse\",\r\n                \"description\": \"Aromatisse is a Fairy type Pokémon introduced in Generation 6. It is known as the Fragrance Pokémon.\\nAromatisse can give off a variety of different smells, from a pleasant fragrance to an odor so repugnant to its opponent that it can turn a battle in its favor.\",\r\n                \"image\": \"images/aromatisse.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Fragrance Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 15.5,\r\n                \"abilities\": [\r\n                    \"Healer\",\r\n                    \"Aroma Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 462,\r\n                    \"hp\": 101,\r\n                    \"attack\": 72,\r\n                    \"defense\": 72,\r\n                    \"speedAttack\": 99,\r\n                    \"speedDefense\": 89,\r\n                    \"speed\": 29\r\n                },\r\n                \"evolutions\": [\r\n                    \"spritzee\",\r\n                    \"aromatisse\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/aromatisse\"\r\n    },\r\n    {\r\n        \"num\": 684,\r\n        \"name\": \"Swirlix\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Swirlix\",\r\n                \"description\": \"Swirlix is a Fairy type Pokémon introduced in Generation 6. It is known as the Cotton Candy Pokémon.\\nIt loves sweets and eats nothing else, making its body as sweet and sticky as cotton candy.\",\r\n                \"image\": \"images/swirlix.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Cotton Candy Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 3.5,\r\n                \"abilities\": [\r\n                    \"Sweet Veil\",\r\n                    \"Unburden\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 341,\r\n                    \"hp\": 62,\r\n                    \"attack\": 48,\r\n                    \"defense\": 66,\r\n                    \"speedAttack\": 59,\r\n                    \"speedDefense\": 57,\r\n                    \"speed\": 49\r\n                },\r\n                \"evolutions\": [\r\n                    \"swirlix\",\r\n                    \"slurpuff\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/swirlix\"\r\n    },\r\n    {\r\n        \"num\": 685,\r\n        \"name\": \"Slurpuff\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Slurpuff\",\r\n                \"description\": \"Slurpuff is a Fairy type Pokémon introduced in Generation 6. It is known as the Meringue Pokémon.\\nSlurpuff has an unbelievable sense of smell - a hundred million times more sensitive than that of humans. With its highly attuned senses, it can distinguish the faintest of odors.\",\r\n                \"image\": \"images/slurpuff.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Meringue Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 5,\r\n                \"abilities\": [\r\n                    \"Sweet Veil\",\r\n                    \"Unburden\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 82,\r\n                    \"attack\": 80,\r\n                    \"defense\": 86,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 72\r\n                },\r\n                \"evolutions\": [\r\n                    \"swirlix\",\r\n                    \"slurpuff\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/slurpuff\"\r\n    },\r\n    {\r\n        \"num\": 686,\r\n        \"name\": \"Inkay\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Inkay\",\r\n                \"description\": \"Inkay is a Dark/Psychic type Pokémon introduced in Generation 6. It is known as the Revolving Pokémon.\\nTransmitters above Inkay's eyes have the ability to drain the will to fight from other Pokémon. It uses this skill to run and hide when attacked by stronger enemies.\",\r\n                \"image\": \"images/inkay.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Revolving Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 3.5,\r\n                \"abilities\": [\r\n                    \"Contrary\",\r\n                    \"Suction Cups\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 288,\r\n                    \"hp\": 53,\r\n                    \"attack\": 54,\r\n                    \"defense\": 53,\r\n                    \"speedAttack\": 37,\r\n                    \"speedDefense\": 46,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"inkay\",\r\n                    \"malamar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/inkay\"\r\n    },\r\n    {\r\n        \"num\": 687,\r\n        \"name\": \"Malamar\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Malamar\",\r\n                \"description\": \"Malamar is a Dark/Psychic type Pokémon introduced in Generation 6. It is known as the Overturning Pokémon.\\nMalamar wields some of the strongest hypnotic powers of any Pokémon and can make its opponents bend to its will.\",\r\n                \"image\": \"images/malamar.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Overturning Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 47,\r\n                \"abilities\": [\r\n                    \"Contrary\",\r\n                    \"Suction Cups\",\r\n                    \"Infiltrator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 482,\r\n                    \"hp\": 86,\r\n                    \"attack\": 92,\r\n                    \"defense\": 88,\r\n                    \"speedAttack\": 68,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 73\r\n                },\r\n                \"evolutions\": [\r\n                    \"inkay\",\r\n                    \"malamar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/malamar\"\r\n    },\r\n    {\r\n        \"num\": 688,\r\n        \"name\": \"Binacle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Binacle\",\r\n                \"description\": \"Binacle is a Rock/Water type Pokémon introduced in Generation 6. It is known as the Two-Handed Pokémon.\",\r\n                \"image\": \"images/binacle.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Two-Handed Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 31,\r\n                \"abilities\": [\r\n                    \"Sniper\",\r\n                    \"Tough Claws\",\r\n                    \"Pickpocket\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 306,\r\n                    \"hp\": 42,\r\n                    \"attack\": 52,\r\n                    \"defense\": 67,\r\n                    \"speedAttack\": 39,\r\n                    \"speedDefense\": 56,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"binacle\",\r\n                    \"barbaracle\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/binacle\"\r\n    },\r\n    {\r\n        \"num\": 689,\r\n        \"name\": \"Barbaracle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Barbaracle\",\r\n                \"description\": \"Barbaracle is a Rock/Water type Pokémon introduced in Generation 6. It is known as the Collective Pokémon.\",\r\n                \"image\": \"images/barbaracle.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Collective Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 96,\r\n                \"abilities\": [\r\n                    \"Sniper\",\r\n                    \"Tough Claws\",\r\n                    \"Pickpocket\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 72,\r\n                    \"attack\": 105,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 54,\r\n                    \"speedDefense\": 86,\r\n                    \"speed\": 68\r\n                },\r\n                \"evolutions\": [\r\n                    \"binacle\",\r\n                    \"barbaracle\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/barbaracle\"\r\n    },\r\n    {\r\n        \"num\": 690,\r\n        \"name\": \"Skrelp\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Skrelp\",\r\n                \"description\": \"Skrelp is a Poison/Water type Pokémon introduced in Generation 6. It is known as the Mock Kelp Pokémon.\\nDisguised by its shape, Skrelp pretends to be a piece of seaweed. When prey gets too close, Skrelp bathes it in poison to keep it from struggling.\",\r\n                \"image\": \"images/skrelp.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Mock Kelp Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 7.3,\r\n                \"abilities\": [\r\n                    \"Poison Point\",\r\n                    \"Poison Touch\",\r\n                    \"Adaptability\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 320,\r\n                    \"hp\": 50,\r\n                    \"attack\": 60,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"skrelp\",\r\n                    \"dragalge\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/skrelp\"\r\n    },\r\n    {\r\n        \"num\": 691,\r\n        \"name\": \"Dragalge\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dragalge\",\r\n                \"description\": \"Dragalge is a Poison/Dragon type Pokémon introduced in Generation 6. It is known as the Mock Kelp Pokémon.\\nTales are told of ships that wander into seas where Dragalge live, never to return.\\nWhen Dragalge evolves from Skrelp, its loses its Water type and gains Dragon type.\",\r\n                \"image\": \"images/dragalge.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Mock Kelp Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 81.5,\r\n                \"abilities\": [\r\n                    \"Poison Point\",\r\n                    \"Poison Touch\",\r\n                    \"Adaptability\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 494,\r\n                    \"hp\": 65,\r\n                    \"attack\": 75,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 97,\r\n                    \"speedDefense\": 123,\r\n                    \"speed\": 44\r\n                },\r\n                \"evolutions\": [\r\n                    \"skrelp\",\r\n                    \"dragalge\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dragalge\"\r\n    },\r\n    {\r\n        \"num\": 692,\r\n        \"name\": \"Clauncher\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Clauncher\",\r\n                \"description\": \"Clauncher is a Water type Pokémon introduced in Generation 6. It is known as the Water Gun Pokémon.\\nIt has an oversized claw on one of its arms. This useful claw can seize prey and shoot water at others as a projectile.\",\r\n                \"image\": \"images/clauncher.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Water Gun Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 8.3,\r\n                \"abilities\": [\r\n                    \"Mega Launcher\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 330,\r\n                    \"hp\": 50,\r\n                    \"attack\": 53,\r\n                    \"defense\": 62,\r\n                    \"speedAttack\": 58,\r\n                    \"speedDefense\": 63,\r\n                    \"speed\": 44\r\n                },\r\n                \"evolutions\": [\r\n                    \"clauncher\",\r\n                    \"clawitzer\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/clauncher\"\r\n    },\r\n    {\r\n        \"num\": 693,\r\n        \"name\": \"Clawitzer\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Clawitzer\",\r\n                \"description\": \"Clawitzer is a Water type Pokémon introduced in Generation 6. It is known as the Howitzer Pokémon.\",\r\n                \"image\": \"images/clawitzer.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Howitzer Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 35.3,\r\n                \"abilities\": [\r\n                    \"Mega Launcher\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 71,\r\n                    \"attack\": 73,\r\n                    \"defense\": 88,\r\n                    \"speedAttack\": 120,\r\n                    \"speedDefense\": 89,\r\n                    \"speed\": 59\r\n                },\r\n                \"evolutions\": [\r\n                    \"clauncher\",\r\n                    \"clawitzer\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/clawitzer\"\r\n    },\r\n    {\r\n        \"num\": 694,\r\n        \"name\": \"Helioptile\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Helioptile\",\r\n                \"description\": \"Helioptile is an Electric/Normal type Pokémon introduced in Generation 6. It is known as the Generator Pokémon.\\nIt charges itself by bathing in the light of the sun, providing it with enough energy that it doesn't need to eat.\",\r\n                \"image\": \"images/helioptile.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Generator Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 6,\r\n                \"abilities\": [\r\n                    \"Dry Skin\",\r\n                    \"Sand Veil\",\r\n                    \"Solar Power\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 289,\r\n                    \"hp\": 44,\r\n                    \"attack\": 38,\r\n                    \"defense\": 33,\r\n                    \"speedAttack\": 61,\r\n                    \"speedDefense\": 43,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"helioptile\",\r\n                    \"heliolisk\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/helioptile\"\r\n    },\r\n    {\r\n        \"num\": 695,\r\n        \"name\": \"Heliolisk\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Heliolisk\",\r\n                \"description\": \"Heliolisk is an Electric/Normal type Pokémon introduced in Generation 6. It is known as the Generator Pokémon.\",\r\n                \"image\": \"images/heliolisk.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Generator Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 21,\r\n                \"abilities\": [\r\n                    \"Dry Skin\",\r\n                    \"Sand Veil\",\r\n                    \"Solar Power\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 481,\r\n                    \"hp\": 62,\r\n                    \"attack\": 55,\r\n                    \"defense\": 52,\r\n                    \"speedAttack\": 109,\r\n                    \"speedDefense\": 94,\r\n                    \"speed\": 109\r\n                },\r\n                \"evolutions\": [\r\n                    \"helioptile\",\r\n                    \"heliolisk\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/heliolisk\"\r\n    },\r\n    {\r\n        \"num\": 696,\r\n        \"name\": \"Tyrunt\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tyrunt\",\r\n                \"description\": \"Tyrunt is a Rock/Dragon type Pokémon introduced in Generation 6. It is known as the Royal Heir Pokémon.\\nIt's believed that Tyrunt is over one hundred million years old. The Pokémon is known to be a bit selfish, and will throw a fit when it doesn't like something.\\nTyrunt is obtained by reviving it from the Jaw Fossil.\",\r\n                \"image\": \"images/tyrunt.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Royal Heir Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 26,\r\n                \"abilities\": [\r\n                    \"Strong Jaw\",\r\n                    \"Sturdy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 362,\r\n                    \"hp\": 58,\r\n                    \"attack\": 89,\r\n                    \"defense\": 77,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 48\r\n                },\r\n                \"evolutions\": [\r\n                    \"tyrunt\",\r\n                    \"tyrantrum\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tyrunt\"\r\n    },\r\n    {\r\n        \"num\": 697,\r\n        \"name\": \"Tyrantrum\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tyrantrum\",\r\n                \"description\": \"Tyrantrum is a Rock/Dragon type Pokémon introduced in Generation 6. It is known as the Despot Pokémon.\\nTyrantrum's jaws can shred thick metal plates as if they were paper.\",\r\n                \"image\": \"images/tyrantrum.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Despot Pokémon\",\r\n                \"height\": 2.5,\r\n                \"weight\": 270,\r\n                \"abilities\": [\r\n                    \"Strong Jaw\",\r\n                    \"Rock Head\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 521,\r\n                    \"hp\": 82,\r\n                    \"attack\": 121,\r\n                    \"defense\": 119,\r\n                    \"speedAttack\": 69,\r\n                    \"speedDefense\": 59,\r\n                    \"speed\": 71\r\n                },\r\n                \"evolutions\": [\r\n                    \"tyrunt\",\r\n                    \"tyrantrum\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tyrantrum\"\r\n    },\r\n    {\r\n        \"num\": 698,\r\n        \"name\": \"Amaura\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Amaura\",\r\n                \"description\": \"Amaura is a Rock/Ice type Pokémon introduced in Generation 6. It is known as the Tundra Pokémon.\\nIt's believed that Amaura is over one hundred million years old.\\nAmaura is obtained by reviving it from the Sail Fossil.\",\r\n                \"image\": \"images/amaura.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Tundra Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 25.2,\r\n                \"abilities\": [\r\n                    \"Refrigerate\",\r\n                    \"Snow Warning\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 362,\r\n                    \"hp\": 77,\r\n                    \"attack\": 59,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 67,\r\n                    \"speedDefense\": 63,\r\n                    \"speed\": 46\r\n                },\r\n                \"evolutions\": [\r\n                    \"amaura\",\r\n                    \"aurorus\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/amaura\"\r\n    },\r\n    {\r\n        \"num\": 699,\r\n        \"name\": \"Aurorus\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Aurorus\",\r\n                \"description\": \"Aurorus is a Rock/Ice type Pokémon introduced in Generation 6. It is known as the Tundra Pokémon.\\nAurorus can blast freezing cold air to form a wall of ice to protect itself from attacks.\",\r\n                \"image\": \"images/aurorus.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Tundra Pokémon\",\r\n                \"height\": 2.7,\r\n                \"weight\": 225,\r\n                \"abilities\": [\r\n                    \"Refrigerate\",\r\n                    \"Snow Warning\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 521,\r\n                    \"hp\": 123,\r\n                    \"attack\": 77,\r\n                    \"defense\": 72,\r\n                    \"speedAttack\": 99,\r\n                    \"speedDefense\": 92,\r\n                    \"speed\": 58\r\n                },\r\n                \"evolutions\": [\r\n                    \"amaura\",\r\n                    \"aurorus\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/aurorus\"\r\n    },\r\n    {\r\n        \"num\": 700,\r\n        \"name\": \"Sylveon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sylveon\",\r\n                \"description\": \"Sylveon is a Fairy type Pokémon introduced in Generation 6. It is known as the Intertwining Pokémon.\",\r\n                \"image\": \"images/sylveon.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Intertwining Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 23.5,\r\n                \"abilities\": [\r\n                    \"Cute Charm\",\r\n                    \"Pixilate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 525,\r\n                    \"hp\": 95,\r\n                    \"attack\": 65,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 130,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"eevee\",\r\n                    \"vaporeon\",\r\n                    \"jolteon\",\r\n                    \"flareon\",\r\n                    \"eevee\",\r\n                    \"espeon\",\r\n                    \"umbreon\",\r\n                    \"eevee\",\r\n                    \"leafeon\",\r\n                    \"glaceon\",\r\n                    \"eevee\",\r\n                    \"sylveon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sylveon\"\r\n    },\r\n    {\r\n        \"num\": 701,\r\n        \"name\": \"Hawlucha\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Hawlucha\",\r\n                \"description\": \"Hawlucha is a Fighting/Flying type Pokémon introduced in Generation 6. It is known as the Wrestling Pokémon.\",\r\n                \"image\": \"images/hawlucha.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Wrestling Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 21.5,\r\n                \"abilities\": [\r\n                    \"Limber\",\r\n                    \"Unburden\",\r\n                    \"Mold Breaker\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 78,\r\n                    \"attack\": 92,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 74,\r\n                    \"speedDefense\": 63,\r\n                    \"speed\": 118\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/hawlucha\"\r\n    },\r\n    {\r\n        \"num\": 702,\r\n        \"name\": \"Dedenne\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dedenne\",\r\n                \"description\": \"Dedenne is an Electric/Fairy type Pokémon introduced in Generation 6. It is known as the Antenna Pokémon.\\nBy emitting radio waves from its antenna-shaped whiskers, it can communicate with far-off allies. Dedenne can also plug its tail into outlets to drain electricity from them.\",\r\n                \"image\": \"images/dedenne.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Antenna Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 2.2,\r\n                \"abilities\": [\r\n                    \"Cheek Pouch\",\r\n                    \"Pickup\",\r\n                    \"Plus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 431,\r\n                    \"hp\": 67,\r\n                    \"attack\": 58,\r\n                    \"defense\": 57,\r\n                    \"speedAttack\": 81,\r\n                    \"speedDefense\": 67,\r\n                    \"speed\": 101\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dedenne\"\r\n    },\r\n    {\r\n        \"num\": 703,\r\n        \"name\": \"Carbink\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Carbink\",\r\n                \"description\": \"Carbink is a Rock/Fairy type Pokémon introduced in Generation 6. It is known as the Jewel Pokémon.\",\r\n                \"image\": \"images/carbink.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Jewel Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 5.7,\r\n                \"abilities\": [\r\n                    \"Clear Body\",\r\n                    \"Sturdy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 50,\r\n                    \"attack\": 50,\r\n                    \"defense\": 150,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 150,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/carbink\"\r\n    },\r\n    {\r\n        \"num\": 704,\r\n        \"name\": \"Goomy\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Goomy\",\r\n                \"description\": \"Goomy is a Dragon type Pokémon introduced in Generation 6. It is known as the Soft Tissue Pokémon.\\nGoomy is covered in a slimy membrane that makes any punches or kicks slide off it harmlessly.\",\r\n                \"image\": \"images/goomy.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Soft Tissue Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 2.8,\r\n                \"abilities\": [\r\n                    \"Sap Sipper\",\r\n                    \"Hydration\",\r\n                    \"Gooey\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 45,\r\n                    \"attack\": 50,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"goomy\",\r\n                    \"sliggoo\",\r\n                    \"goodra\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/goomy\"\r\n    },\r\n    {\r\n        \"num\": 705,\r\n        \"name\": \"Sliggoo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sliggoo\",\r\n                \"description\": \"Sliggoo is a Dragon type Pokémon introduced in Generation 6. It is known as the Soft Tissue Pokémon.\\nIts four horns are a high-performance radar system. It uses them to sense sounds and smells.\",\r\n                \"image\": \"images/sliggoo.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Soft Tissue Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 17.5,\r\n                \"abilities\": [\r\n                    \"Sap Sipper\",\r\n                    \"Hydration\",\r\n                    \"Gooey\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 452,\r\n                    \"hp\": 68,\r\n                    \"attack\": 75,\r\n                    \"defense\": 53,\r\n                    \"speedAttack\": 83,\r\n                    \"speedDefense\": 113,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"goomy\",\r\n                    \"sliggoo\",\r\n                    \"goodra\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sliggoo\"\r\n    },\r\n    {\r\n        \"num\": 706,\r\n        \"name\": \"Goodra\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Goodra\",\r\n                \"description\": \"Goodra is a Dragon type Pokémon introduced in Generation 6. It is known as the Dragon Pokémon.\",\r\n                \"image\": \"images/goodra.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Dragon Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 150.5,\r\n                \"abilities\": [\r\n                    \"Sap Sipper\",\r\n                    \"Hydration\",\r\n                    \"Gooey\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 90,\r\n                    \"attack\": 100,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 110,\r\n                    \"speedDefense\": 150,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"goomy\",\r\n                    \"sliggoo\",\r\n                    \"goodra\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/goodra\"\r\n    },\r\n    {\r\n        \"num\": 707,\r\n        \"name\": \"Klefki\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Klefki\",\r\n                \"description\": \"Klefki is a Steel/Fairy type Pokémon introduced in Generation 6. It is known as the Key Ring Pokémon.\\nKlefki never lets go of a key that it likes, so people give it the keys to vaults and safes as a way to prevent crime.\",\r\n                \"image\": \"images/klefki.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Key Ring Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 3,\r\n                \"abilities\": [\r\n                    \"Prankster\",\r\n                    \"Magician\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 470,\r\n                    \"hp\": 57,\r\n                    \"attack\": 80,\r\n                    \"defense\": 91,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 87,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/klefki\"\r\n    },\r\n    {\r\n        \"num\": 708,\r\n        \"name\": \"Phantump\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Phantump\",\r\n                \"description\": \"Phantump is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Stump Pokémon.\\nAccording to old tales, Phantump are stumps possessed by the spirits of children who died while lost in the forest.\",\r\n                \"image\": \"images/phantump.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Stump Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 7,\r\n                \"abilities\": [\r\n                    \"Natural Cure\",\r\n                    \"Frisk\",\r\n                    \"Harvest\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 309,\r\n                    \"hp\": 43,\r\n                    \"attack\": 70,\r\n                    \"defense\": 48,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 38\r\n                },\r\n                \"evolutions\": [\r\n                    \"phantump\",\r\n                    \"trevenant\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/phantump\"\r\n    },\r\n    {\r\n        \"num\": 709,\r\n        \"name\": \"Trevenant\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Trevenant\",\r\n                \"description\": \"Trevenant is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Elder Tree Pokémon.\",\r\n                \"image\": \"images/trevenant.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Elder Tree Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 71,\r\n                \"abilities\": [\r\n                    \"Natural Cure\",\r\n                    \"Frisk\",\r\n                    \"Harvest\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 474,\r\n                    \"hp\": 85,\r\n                    \"attack\": 110,\r\n                    \"defense\": 76,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 82,\r\n                    \"speed\": 56\r\n                },\r\n                \"evolutions\": [\r\n                    \"phantump\",\r\n                    \"trevenant\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/trevenant\"\r\n    },\r\n    {\r\n        \"num\": 710,\r\n        \"name\": \"Pumpkaboo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Average Size\",\r\n                \"description\": \"Pumpkaboo is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.\\nPumpkaboo are said to carry wandering spirits to the place where they belong so they can move on.\",\r\n                \"image\": \"images/pumpkaboo.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Pumpkin Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 5,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Frisk\",\r\n                    \"Insomnia\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 335,\r\n                    \"hp\": 49,\r\n                    \"attack\": 66,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 44,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 51\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Small Size\",\r\n                \"description\": \"Pumpkaboo is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.\\nPumpkaboo are said to carry wandering spirits to the place where they belong so they can move on.\",\r\n                \"image\": \"images/pumpkaboo.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Pumpkin Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 3.5,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Frisk\",\r\n                    \"Insomnia\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 335,\r\n                    \"hp\": 44,\r\n                    \"attack\": 66,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 44,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 56\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Large Size\",\r\n                \"description\": \"Pumpkaboo is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.\\nPumpkaboo are said to carry wandering spirits to the place where they belong so they can move on.\",\r\n                \"image\": \"images/pumpkaboo.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Pumpkin Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 7.5,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Frisk\",\r\n                    \"Insomnia\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 335,\r\n                    \"hp\": 54,\r\n                    \"attack\": 66,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 44,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 46\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Super Size\",\r\n                \"description\": \"Pumpkaboo is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.\\nPumpkaboo are said to carry wandering spirits to the place where they belong so they can move on.\",\r\n                \"image\": \"images/pumpkaboo.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Pumpkin Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 15,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Frisk\",\r\n                    \"Insomnia\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 335,\r\n                    \"hp\": 59,\r\n                    \"attack\": 66,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 44,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 41\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pumpkaboo\"\r\n    },\r\n    {\r\n        \"num\": 711,\r\n        \"name\": \"Gourgeist\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Average Size\",\r\n                \"description\": \"Gourgeist is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.\",\r\n                \"image\": \"images/gourgeist.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Pumpkin Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 12.5,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Frisk\",\r\n                    \"Insomnia\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 494,\r\n                    \"hp\": 65,\r\n                    \"attack\": 90,\r\n                    \"defense\": 122,\r\n                    \"speedAttack\": 58,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 84\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Small Size\",\r\n                \"description\": \"Gourgeist is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.\",\r\n                \"image\": \"images/gourgeist.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Pumpkin Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 9.5,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Frisk\",\r\n                    \"Insomnia\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 494,\r\n                    \"hp\": 55,\r\n                    \"attack\": 85,\r\n                    \"defense\": 122,\r\n                    \"speedAttack\": 58,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 99\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Large Size\",\r\n                \"description\": \"Gourgeist is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.\",\r\n                \"image\": \"images/gourgeist.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Pumpkin Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 14,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Frisk\",\r\n                    \"Insomnia\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 494,\r\n                    \"hp\": 75,\r\n                    \"attack\": 95,\r\n                    \"defense\": 122,\r\n                    \"speedAttack\": 58,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 69\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Super Size\",\r\n                \"description\": \"Gourgeist is a Ghost/Grass type Pokémon introduced in Generation 6. It is known as the Pumpkin Pokémon.\",\r\n                \"image\": \"images/gourgeist.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Pumpkin Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 39,\r\n                \"abilities\": [\r\n                    \"Pickup\",\r\n                    \"Frisk\",\r\n                    \"Insomnia\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 494,\r\n                    \"hp\": 85,\r\n                    \"attack\": 100,\r\n                    \"defense\": 122,\r\n                    \"speedAttack\": 58,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 54\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gourgeist\"\r\n    },\r\n    {\r\n        \"num\": 712,\r\n        \"name\": \"Bergmite\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bergmite\",\r\n                \"description\": \"Bergmite is an Ice type Pokémon introduced in Generation 6. It is known as the Ice Chunk Pokémon.\\nUsing air of -150 degrees Farenheit, they freeze opponents solid.\",\r\n                \"image\": \"images/bergmite.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Ice Chunk Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 99.5,\r\n                \"abilities\": [\r\n                    \"Own Tempo\",\r\n                    \"Ice Body\",\r\n                    \"Sturdy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 304,\r\n                    \"hp\": 55,\r\n                    \"attack\": 69,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 32,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 28\r\n                },\r\n                \"evolutions\": [\r\n                    \"bergmite\",\r\n                    \"avalugg\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bergmite\"\r\n    },\r\n    {\r\n        \"num\": 713,\r\n        \"name\": \"Avalugg\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Avalugg\",\r\n                \"description\": \"Avalugg is an Ice type Pokémon introduced in Generation 6. It is known as the Iceberg Pokémon.\",\r\n                \"image\": \"images/avalugg.jpg\",\r\n                \"types\": [\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Iceberg Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 505,\r\n                \"abilities\": [\r\n                    \"Own Tempo\",\r\n                    \"Ice Body\",\r\n                    \"Sturdy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 514,\r\n                    \"hp\": 95,\r\n                    \"attack\": 117,\r\n                    \"defense\": 184,\r\n                    \"speedAttack\": 44,\r\n                    \"speedDefense\": 46,\r\n                    \"speed\": 28\r\n                },\r\n                \"evolutions\": [\r\n                    \"bergmite\",\r\n                    \"avalugg\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/avalugg\"\r\n    },\r\n    {\r\n        \"num\": 714,\r\n        \"name\": \"Noibat\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Noibat\",\r\n                \"description\": \"Noibat is a Flying/Dragon type Pokémon introduced in Generation 6. It is known as the Sound Wave Pokémon.\",\r\n                \"image\": \"images/noibat.jpg\",\r\n                \"types\": [\r\n                    \"Flying\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Sound Wave Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 8,\r\n                \"abilities\": [\r\n                    \"Frisk\",\r\n                    \"Infiltrator\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 245,\r\n                    \"hp\": 40,\r\n                    \"attack\": 30,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 55\r\n                },\r\n                \"evolutions\": [\r\n                    \"noibat\",\r\n                    \"noivern\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/noibat\"\r\n    },\r\n    {\r\n        \"num\": 715,\r\n        \"name\": \"Noivern\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Noivern\",\r\n                \"description\": \"Noivern is a Flying/Dragon type Pokémon introduced in Generation 6. It is known as the Sound Wave Pokémon.\\nIt is extremely combative toward anything that wanders too close to it. It flies through even the darkest nights using ultrasonic waves it emits from its ears. Noivern loves fruit, and feeding it fruit will keep it calm.\",\r\n                \"image\": \"images/noivern.jpg\",\r\n                \"types\": [\r\n                    \"Flying\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Sound Wave Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 85,\r\n                \"abilities\": [\r\n                    \"Frisk\",\r\n                    \"Infiltrator\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 535,\r\n                    \"hp\": 85,\r\n                    \"attack\": 70,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 97,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 123\r\n                },\r\n                \"evolutions\": [\r\n                    \"noibat\",\r\n                    \"noivern\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/noivern\"\r\n    },\r\n    {\r\n        \"num\": 716,\r\n        \"name\": \"Xerneas\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Xerneas\",\r\n                \"description\": \"Xerneas is a Fairy type Pokémon introduced in Generation 6. It is known as the Life Pokémon.\\nXerneas is a legendary Pokémon exclusive to Pokémon X.\",\r\n                \"image\": \"images/xerneas.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Life Pokémon\",\r\n                \"height\": 3,\r\n                \"weight\": 215,\r\n                \"abilities\": [\r\n                    \"Fairy Aura\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 126,\r\n                    \"attack\": 131,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 131,\r\n                    \"speedDefense\": 98,\r\n                    \"speed\": 99\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/xerneas\"\r\n    },\r\n    {\r\n        \"num\": 717,\r\n        \"name\": \"Yveltal\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Yveltal\",\r\n                \"description\": \"Yveltal is a Dark/Flying type Pokémon introduced in Generation 6. It is known as the Destruction Pokémon.\\nYveltal is a legendary Pokémon exclusive to Pokémon Y.\",\r\n                \"image\": \"images/yveltal.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Destruction Pokémon\",\r\n                \"height\": 5.8,\r\n                \"weight\": 203,\r\n                \"abilities\": [\r\n                    \"Dark Aura\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 126,\r\n                    \"attack\": 131,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 131,\r\n                    \"speedDefense\": 98,\r\n                    \"speed\": 99\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/yveltal\"\r\n    },\r\n    {\r\n        \"num\": 718,\r\n        \"name\": \"Zygarde\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"50% Forme\",\r\n                \"description\": \"Zygarde is a Dragon/Ground type Pokémon introduced in Generation 6. It is known as the Order Pokémon.\\nZygarde is a snake-like legendary Pokémon. Its ability Aura Break counters the effects of the abilities of Xerneas and Yveltal.\\nIt was later revealed that Zygarde as seen in Pokémon X & Y is in fact an alternate Forme. Zygarde has five different Formes in total:\\n\\nZygarde Cell are single cells that make up Zygarde. They cannot use any moves.\\nZygarde Core is part of Zygarde's brain, and they are known to take action when the ecosystem changes.\\nZygarde 10% Forme occurs when Zygarde Core gathers 10% of the Cells nearby. Capable of travelling over 60mph.\\nZygarde 50% Forme occurs when Zygarde Core gathers 50% of the Cells nearby. This is the standard form.\\nZygarde Complete Forme is the perfect form, which is more powerful than Xerneas and Yveltal. Zygarde takes this form when the ecosystem is under threat.\",\r\n                \"image\": \"images/zygarde-50.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Order Pokémon\",\r\n                \"height\": 5,\r\n                \"weight\": 305,\r\n                \"abilities\": [\r\n                    \"Aura Break\",\r\n                    \"Power Construct\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 108,\r\n                    \"attack\": 100,\r\n                    \"defense\": 121,\r\n                    \"speedAttack\": 81,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"10% Forme\",\r\n                \"description\": \"Zygarde is a Dragon/Ground type Pokémon introduced in Generation 6. It is known as the Order Pokémon.\\nZygarde is a snake-like legendary Pokémon. Its ability Aura Break counters the effects of the abilities of Xerneas and Yveltal.\\nIt was later revealed that Zygarde as seen in Pokémon X & Y is in fact an alternate Forme. Zygarde has five different Formes in total:\\n\\nZygarde Cell are single cells that make up Zygarde. They cannot use any moves.\\nZygarde Core is part of Zygarde's brain, and they are known to take action when the ecosystem changes.\\nZygarde 10% Forme occurs when Zygarde Core gathers 10% of the Cells nearby. Capable of travelling over 60mph.\\nZygarde 50% Forme occurs when Zygarde Core gathers 50% of the Cells nearby. This is the standard form.\\nZygarde Complete Forme is the perfect form, which is more powerful than Xerneas and Yveltal. Zygarde takes this form when the ecosystem is under threat.\",\r\n                \"image\": \"images/zygarde-10.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Order Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 33.5,\r\n                \"abilities\": [\r\n                    \"Aura Break\",\r\n                    \"Power Construct\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 486,\r\n                    \"hp\": 54,\r\n                    \"attack\": 100,\r\n                    \"defense\": 71,\r\n                    \"speedAttack\": 61,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 115\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Complete Forme\",\r\n                \"description\": \"Zygarde is a Dragon/Ground type Pokémon introduced in Generation 6. It is known as the Order Pokémon.\\nZygarde is a snake-like legendary Pokémon. Its ability Aura Break counters the effects of the abilities of Xerneas and Yveltal.\\nIt was later revealed that Zygarde as seen in Pokémon X & Y is in fact an alternate Forme. Zygarde has five different Formes in total:\\n\\nZygarde Cell are single cells that make up Zygarde. They cannot use any moves.\\nZygarde Core is part of Zygarde's brain, and they are known to take action when the ecosystem changes.\\nZygarde 10% Forme occurs when Zygarde Core gathers 10% of the Cells nearby. Capable of travelling over 60mph.\\nZygarde 50% Forme occurs when Zygarde Core gathers 50% of the Cells nearby. This is the standard form.\\nZygarde Complete Forme is the perfect form, which is more powerful than Xerneas and Yveltal. Zygarde takes this form when the ecosystem is under threat.\",\r\n                \"image\": \"images/zygarde-complete.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Order Pokémon\",\r\n                \"height\": 4.5,\r\n                \"weight\": 610,\r\n                \"abilities\": [\r\n                    \"Power Construct\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 708,\r\n                    \"hp\": 216,\r\n                    \"attack\": 100,\r\n                    \"defense\": 121,\r\n                    \"speedAttack\": 91,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/zygarde\"\r\n    },\r\n    {\r\n        \"num\": 719,\r\n        \"name\": \"Diancie\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Diancie\",\r\n                \"description\": \"Diancie is a Rock/Fairy type Pokémon introduced in Generation 6. It is known as the Jewel Pokémon.\\nDiancie is an event-exclusive Pokémon. It also has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/diancie.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Jewel Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 8.8,\r\n                \"abilities\": [\r\n                    \"Clear Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 50,\r\n                    \"attack\": 100,\r\n                    \"defense\": 150,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 150,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Mega Diancie\",\r\n                \"description\": \"Diancie is a Rock/Fairy type Pokémon introduced in Generation 6. It is known as the Jewel Pokémon.\\nDiancie is an event-exclusive Pokémon. It also has a Mega Evolution, available from Omega Ruby & Alpha Sapphire onwards.\",\r\n                \"image\": \"images/diancie-mega.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Jewel Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 27.8,\r\n                \"abilities\": [\r\n                    \"Magic Bounce\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 700,\r\n                    \"hp\": 50,\r\n                    \"attack\": 160,\r\n                    \"defense\": 110,\r\n                    \"speedAttack\": 160,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/diancie\"\r\n    },\r\n    {\r\n        \"num\": 720,\r\n        \"name\": \"Hoopa\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Hoopa Confined\",\r\n                \"description\": \"Hoopa is a Psychic/Ghost type Pokémon introduced in Generation 6. It is known as the Mischief Pokémon.\\nHoopa is an event-exclusive Pokémon.\",\r\n                \"image\": \"images/hoopa-confined.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Mischief Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 9,\r\n                \"abilities\": [\r\n                    \"Magician\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 80,\r\n                    \"attack\": 110,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 150,\r\n                    \"speedDefense\": 130,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Hoopa Unbound\",\r\n                \"description\": \"Hoopa is a Psychic/Ghost type Pokémon introduced in Generation 6. It is known as the Mischief Pokémon.\\nHoopa is an event-exclusive Pokémon.\",\r\n                \"image\": \"images/hoopa-unbound.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Djinn Pokémon\",\r\n                \"height\": 6.5,\r\n                \"weight\": 490,\r\n                \"abilities\": [\r\n                    \"Magician\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 80,\r\n                    \"attack\": 160,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 170,\r\n                    \"speedDefense\": 130,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/hoopa\"\r\n    },\r\n    {\r\n        \"num\": 721,\r\n        \"name\": \"Volcanion\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Volcanion\",\r\n                \"description\": \"Volcanion is a Fire/Water type Pokémon introduced in Generation 6. It is known as the Steam Pokémon.\\nVolcanion is an event-exclusive Pokémon; full details are not yet known.\",\r\n                \"image\": \"images/volcanion.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Steam Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 195,\r\n                \"abilities\": [\r\n                    \"Water Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 80,\r\n                    \"attack\": 110,\r\n                    \"defense\": 120,\r\n                    \"speedAttack\": 130,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/volcanion\"\r\n    },\r\n    {\r\n        \"num\": 722,\r\n        \"name\": \"Rowlet\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Rowlet\",\r\n                \"description\": \"Rowlet is a Grass/Flying type Pokémon introduced in Generation 7. It is known as the Grass Quill Pokémon.\\nRowlet can fly silently through the skies, sneaking up on its opponent without being noticed. It can attack its opponents using powerful kicks, and it can also attack from a distance using the razor-sharp leaves that form part of its feathers.\\nRowlet can survey its environment and turn its neck nearly 180 degrees from front to back, so it can see directly behind itself. When in battle, Rowlet turns its head to face its Trainer when waiting for instructions.\\nRowlet starts with the move Leafage.\",\r\n                \"image\": \"images/rowlet.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Grass Quill Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 1.5,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Long Reach\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 320,\r\n                    \"hp\": 68,\r\n                    \"attack\": 55,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 42\r\n                },\r\n                \"evolutions\": [\r\n                    \"rowlet\",\r\n                    \"dartrix\",\r\n                    \"decidueye\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/rowlet\"\r\n    },\r\n    {\r\n        \"num\": 723,\r\n        \"name\": \"Dartrix\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dartrix\",\r\n                \"description\": \"Dartrix is a Grass/Flying type Pokémon introduced in Generation 7. It is known as the Blade Quill Pokémon.\\nDartrix is extremely sensitive to other presences in the area and can detect opponents behind it and throw feathers to strike them without even seeing them. This Pokémon conceals sharp-bladed feathers inside its wings, showing astounding precision as it sends them flying in attack.\",\r\n                \"image\": \"images/dartrix.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Blade Quill Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 16,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Long Reach\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 78,\r\n                    \"attack\": 75,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 52\r\n                },\r\n                \"evolutions\": [\r\n                    \"rowlet\",\r\n                    \"dartrix\",\r\n                    \"decidueye\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dartrix\"\r\n    },\r\n    {\r\n        \"num\": 724,\r\n        \"name\": \"Decidueye\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Decidueye\",\r\n                \"description\": \"Decidueye is a Grass/Ghost type Pokémon introduced in Generation 7. It is known as the Arrow Quill Pokémon.\\nDecidueye is able to move about while completely masking its presence from others. Once an opponent has lost sight of it, Decidueye seizes the chance to attack it unawares. In a tenth of a second, Decidueye plucks an arrow quill from within its wing and sends its hurtling toward its target.\",\r\n                \"image\": \"images/decidueye.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Arrow Quill Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 36.6,\r\n                \"abilities\": [\r\n                    \"Overgrow\",\r\n                    \"Long Reach\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 78,\r\n                    \"attack\": 107,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"rowlet\",\r\n                    \"dartrix\",\r\n                    \"decidueye\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/decidueye\"\r\n    },\r\n    {\r\n        \"num\": 725,\r\n        \"name\": \"Litten\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Litten\",\r\n                \"description\": \"Litten is a Fire type Pokémon introduced in Generation 7. It is known as the Fire Cat Pokémon.\\nThe cool-headed Fire Cat Pokémon, Litten, is the next choice for a first-partner Pokémon. Litten's fur is rich in oils and is immensely flammable. It constantly grooms itself by licking its coat, collecting loose fur into balls. It then ignites these hairballs to create fireball attacks. When the time comes for Litten to molt, it burns off all of its fur in one glorious blaze.\\nLitten starts with the move Ember.\",\r\n                \"image\": \"images/litten.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Fire Cat Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 4.3,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Intimidate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 320,\r\n                    \"hp\": 45,\r\n                    \"attack\": 65,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 70\r\n                },\r\n                \"evolutions\": [\r\n                    \"litten\",\r\n                    \"torracat\",\r\n                    \"incineroar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/litten\"\r\n    },\r\n    {\r\n        \"num\": 726,\r\n        \"name\": \"Torracat\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Torracat\",\r\n                \"description\": \"Torracat is a Fire type Pokémon introduced in Generation 7. It is known as the Fire Cat Pokémon.\\nThe bell-like object attached at the base of Torracat's neck is a flame sac, an organ that can produce flames. Torracat's emotions cause a rise in the organ’s temperature, and when the organ spits flames, it rings with the high, clear sound of a bell. Torracat attacks using the flames emitted from this bell.\",\r\n                \"image\": \"images/torracat.jpg\",\r\n                \"types\": [\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Fire Cat Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 25,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Intimidate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 65,\r\n                    \"attack\": 85,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 90\r\n                },\r\n                \"evolutions\": [\r\n                    \"litten\",\r\n                    \"torracat\",\r\n                    \"incineroar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/torracat\"\r\n    },\r\n    {\r\n        \"num\": 727,\r\n        \"name\": \"Incineroar\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Incineroar\",\r\n                \"description\": \"Incineroar is a Fire/Dark type Pokémon introduced in Generation 7. It is known as the Heel Pokémon.\\nAs its fighting spirit increases, the flames that Incineroar produces within its body burst from its navel and waistline. In the heat of battle, Incineroar shows no concern for its opponents - and sometimes even launches attacks that strike the opposing Trainer! As a result, many tend to dislike this Pokémon and keep it at a distance.\",\r\n                \"image\": \"images/incineroar.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Dark\"\r\n                ],\r\n                \"specie\": \"Heel Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 83,\r\n                \"abilities\": [\r\n                    \"Blaze\",\r\n                    \"Intimidate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 95,\r\n                    \"attack\": 115,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"litten\",\r\n                    \"torracat\",\r\n                    \"incineroar\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/incineroar\"\r\n    },\r\n    {\r\n        \"num\": 728,\r\n        \"name\": \"Popplio\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Popplio\",\r\n                \"description\": \"Popplio is a Water type Pokémon introduced in Generation 7. It is known as the Sea Lion Pokémon.\\nPopplio can create balloons made of water from its nose and utilize them to create a variety of different strategies and attacks in battle. This Pokémon is better at moving in the water than on land, and can swim at speeds over 25 mph. On land, it uses the elasticity of the balloons it creates to perform jumps and acrobatic stunts.\\nPopplio starts with the move Water Gun.\",\r\n                \"image\": \"images/popplio.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Sea Lion Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 7.5,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Liquid Voice\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 320,\r\n                    \"hp\": 50,\r\n                    \"attack\": 54,\r\n                    \"defense\": 54,\r\n                    \"speedAttack\": 66,\r\n                    \"speedDefense\": 56,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"popplio\",\r\n                    \"brionne\",\r\n                    \"primarina\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/popplio\"\r\n    },\r\n    {\r\n        \"num\": 729,\r\n        \"name\": \"Brionne\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Brionne\",\r\n                \"description\": \"Brionne is a Water type Pokémon introduced in Generation 7. It is known as the Pop Star Pokémon.\\nBrionne learns its dances by imitating the other members of its colony. It sometimes even learns dances from humans. This Pokémon is a hard worker and pours itself into its efforts until it has memorized each dance. As it dances, Brionne creates balloon after balloon. In battle, it first sends its opponent into disarray with its dancing, and then slaps its balloons into its target, causing the balloons to explode and deal damage.\",\r\n                \"image\": \"images/brionne.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Pop Star Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 17.5,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Liquid Voice\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 60,\r\n                    \"attack\": 69,\r\n                    \"defense\": 69,\r\n                    \"speedAttack\": 91,\r\n                    \"speedDefense\": 81,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"popplio\",\r\n                    \"brionne\",\r\n                    \"primarina\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/brionne\"\r\n    },\r\n    {\r\n        \"num\": 730,\r\n        \"name\": \"Primarina\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Primarina\",\r\n                \"description\": \"Primarina is a Water/Fairy type Pokémon introduced in Generation 7. It is known as the Soloist Pokémon.\\nAs it dances, Primarina releases balloons of water into the area around itself, moving them using the sound waves from its voice. The sight of moonlight reflecting off its glittering balloons creates a magical scene. Since Primarina controls its balloons using its voice, any injury to its throat can become a grave problem. Its greatest enemies are arid environments and the overuse of its voice during back-to-back battles.\",\r\n                \"image\": \"images/primarina.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Soloist Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 44,\r\n                \"abilities\": [\r\n                    \"Torrent\",\r\n                    \"Liquid Voice\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 80,\r\n                    \"attack\": 74,\r\n                    \"defense\": 74,\r\n                    \"speedAttack\": 126,\r\n                    \"speedDefense\": 116,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"popplio\",\r\n                    \"brionne\",\r\n                    \"primarina\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/primarina\"\r\n    },\r\n    {\r\n        \"num\": 731,\r\n        \"name\": \"Pikipek\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pikipek\",\r\n                \"description\": \"Pikipek is a Normal/Flying type Pokémon introduced in Generation 7. It is known as the Woodpecker Pokémon.\\nPikipek can strike 16 times a second with its beak. These strikes are powerful enough to not only drill through hard wood but even shatter stone. Pikipek will attack distant opponents by zipping seeds at them. These shots have enough strength to embed the seeds in tree trunks.\",\r\n                \"image\": \"images/pikipek.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Woodpecker Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 1.2,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Skill Link\",\r\n                    \"Pickup\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 265,\r\n                    \"hp\": 35,\r\n                    \"attack\": 75,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"pikipek\",\r\n                    \"trumbeak\",\r\n                    \"toucannon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pikipek\"\r\n    },\r\n    {\r\n        \"num\": 732,\r\n        \"name\": \"Trumbeak\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Trumbeak\",\r\n                \"description\": \"Trumbeak is a Normal/Flying type Pokémon introduced in Generation 7. It is known as the Bugle Beak Pokémon.\",\r\n                \"image\": \"images/trumbeak.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Bugle Beak Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 14.8,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Skill Link\",\r\n                    \"Pickup\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 355,\r\n                    \"hp\": 55,\r\n                    \"attack\": 85,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": [\r\n                    \"pikipek\",\r\n                    \"trumbeak\",\r\n                    \"toucannon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/trumbeak\"\r\n    },\r\n    {\r\n        \"num\": 733,\r\n        \"name\": \"Toucannon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Toucannon\",\r\n                \"description\": \"Toucannon is a Normal/Flying type Pokémon introduced in Generation 7. It is known as the Cannon Pokémon.\",\r\n                \"image\": \"images/toucannon.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Cannon Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 26,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Skill Link\",\r\n                    \"Sheer Force\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 80,\r\n                    \"attack\": 120,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"pikipek\",\r\n                    \"trumbeak\",\r\n                    \"toucannon\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/toucannon\"\r\n    },\r\n    {\r\n        \"num\": 734,\r\n        \"name\": \"Yungoos\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Yungoos\",\r\n                \"description\": \"Yungoos is a Normal type Pokémon introduced in Generation 7. It is known as the Loitering Pokémon.\\nYungoos is a big eater that is never satisfied. The majority of its long body is given over to its stomach, and its digestion is swift, so it’s always hungry. It has strong fangs, so it can crush and consume the hardest of objects.\",\r\n                \"image\": \"images/yungoos.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Loitering Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 6,\r\n                \"abilities\": [\r\n                    \"Strong Jaw\",\r\n                    \"Stakeout\",\r\n                    \"Adaptability\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 253,\r\n                    \"hp\": 48,\r\n                    \"attack\": 70,\r\n                    \"defense\": 30,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"yungoos\",\r\n                    \"gumshoos\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/yungoos\"\r\n    },\r\n    {\r\n        \"num\": 735,\r\n        \"name\": \"Gumshoos\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Gumshoos\",\r\n                \"description\": \"Gumshoos is a Normal type Pokémon introduced in Generation 7. It is known as the Stakeout Pokémon.\\nGumshoos' method of targeting prey is the exact opposite of Yungoos's strategy. While Yungoos prowls around, Gumshoos stakes out its prey's usual routes and waits patiently for it to come by.\\nGumshoos has a tenacious personality, which is why it targets one prey for so long without wavering. But when the sun goes down, it runs low on stamina, falling asleep right on the spot. Gumshoos can withstand a great deal of hunger. It's able to stay perfectly still while waiting for its prey, keeping watch without eating a thing.\\nGumshoos evolves from Yungoos.\",\r\n                \"image\": \"images/gumshoos.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Stakeout Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 14.2,\r\n                \"abilities\": [\r\n                    \"Strong Jaw\",\r\n                    \"Stakeout\",\r\n                    \"Adaptability\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 418,\r\n                    \"hp\": 88,\r\n                    \"attack\": 110,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"yungoos\",\r\n                    \"gumshoos\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/gumshoos\"\r\n    },\r\n    {\r\n        \"num\": 736,\r\n        \"name\": \"Grubbin\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Grubbin\",\r\n                \"description\": \"Grubbin is a Bug type Pokémon introduced in Generation 7. It is known as the Larva Pokémon.\\nGrubbin relies on its sturdy jaw as a weapon in battle and as a tool for burrowing through the earth. Grubbin loves electricity, which is why it can be found near power plants and substations. By wrapping tree branches in the sticky threads that it spews from its mouth, Grubbin can swing around like an actor on suspension wires!\\nGrubbin evolves into Charjabug.\",\r\n                \"image\": \"images/grubbin.jpg\",\r\n                \"types\": [\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Larva Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 4.4,\r\n                \"abilities\": [\r\n                    \"Swarm\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 47,\r\n                    \"attack\": 62,\r\n                    \"defense\": 45,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 46\r\n                },\r\n                \"evolutions\": [\r\n                    \"grubbin\",\r\n                    \"charjabug\",\r\n                    \"vikavolt\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/grubbin\"\r\n    },\r\n    {\r\n        \"num\": 737,\r\n        \"name\": \"Charjabug\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Charjabug\",\r\n                \"description\": \"Charjabug is a Bug/Electric type Pokémon introduced in Generation 7. It is known as the Battery Pokémon.\\nCharjabug stays perfectly still in preparation for Evolution, and often spends time with its body half-buried in the earth. Charjabug is able to store up electricity. It can store enough power to run a household for a whole day. The power it stores can be provided to other Pokémon, so it can also serve as a battery!\\nCharjabug evolves from Grubbin and evolves into Vikavolt.\",\r\n                \"image\": \"images/charjabug.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Battery Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 10.5,\r\n                \"abilities\": [\r\n                    \"Battery\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 400,\r\n                    \"hp\": 57,\r\n                    \"attack\": 82,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 36\r\n                },\r\n                \"evolutions\": [\r\n                    \"grubbin\",\r\n                    \"charjabug\",\r\n                    \"vikavolt\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/charjabug\"\r\n    },\r\n    {\r\n        \"num\": 738,\r\n        \"name\": \"Vikavolt\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Vikavolt\",\r\n                \"description\": \"Vikavolt is a Bug/Electric type Pokémon introduced in Generation 7. It is known as the Stag Beetle Pokémon.\\nVikavolt is like a fortress that zooms through the forest, firing a beam of electricity from its mouth. Its huge jaws control the electricity it blasts out. Vikavolt is adept at acrobatic flight maneuvers like tailspins and sharp turns. It can fly at high speeds even as it weaves its way through the complicated tangle of branches in the forest.\\nVikavolt evolves from Charjabug.\",\r\n                \"image\": \"images/vikavolt.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Stag Beetle Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 45,\r\n                \"abilities\": [\r\n                    \"Levitate\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 77,\r\n                    \"attack\": 70,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 145,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 43\r\n                },\r\n                \"evolutions\": [\r\n                    \"grubbin\",\r\n                    \"charjabug\",\r\n                    \"vikavolt\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/vikavolt\"\r\n    },\r\n    {\r\n        \"num\": 739,\r\n        \"name\": \"Crabrawler\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Crabrawler\",\r\n                \"description\": \"Crabrawler is a Fighting type Pokémon introduced in Generation 7. It is known as the Boxing Pokémon.\\nCrabrawler has a personality that really hates to lose, and it's driven not only to aim for a higher position than its fellows in terms of social standing, but literally to aim for a higher position in the landscape.\\nCrabrawler punches the trunks of trees to give the branches a good shake and knock any ripe Berries to the ground so it can feast.\",\r\n                \"image\": \"images/crabrawler.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Boxing Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 7,\r\n                \"abilities\": [\r\n                    \"Hyper Cutter\",\r\n                    \"Iron Fist\",\r\n                    \"Anger Point\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 338,\r\n                    \"hp\": 47,\r\n                    \"attack\": 82,\r\n                    \"defense\": 57,\r\n                    \"speedAttack\": 42,\r\n                    \"speedDefense\": 47,\r\n                    \"speed\": 63\r\n                },\r\n                \"evolutions\": [\r\n                    \"crabrawler\",\r\n                    \"crabominable\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/crabrawler\"\r\n    },\r\n    {\r\n        \"num\": 740,\r\n        \"name\": \"Crabominable\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Crabominable\",\r\n                \"description\": \"Crabominable is a Fighting/Ice type Pokémon introduced in Generation 7. It is known as the Woolly Crab Pokémon.\",\r\n                \"image\": \"images/crabominable.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\",\r\n                    \"Ice\"\r\n                ],\r\n                \"specie\": \"Woolly Crab Pokémon\",\r\n                \"height\": 1.7,\r\n                \"weight\": 180,\r\n                \"abilities\": [\r\n                    \"Hyper Cutter\",\r\n                    \"Iron Fist\",\r\n                    \"Anger Point\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 478,\r\n                    \"hp\": 97,\r\n                    \"attack\": 132,\r\n                    \"defense\": 77,\r\n                    \"speedAttack\": 62,\r\n                    \"speedDefense\": 67,\r\n                    \"speed\": 43\r\n                },\r\n                \"evolutions\": [\r\n                    \"crabrawler\",\r\n                    \"crabominable\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/crabominable\"\r\n    },\r\n    {\r\n        \"num\": 741,\r\n        \"name\": \"Oricorio\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Baile Style\",\r\n                \"description\": \"Oricorio is a Fire/Flying type Pokémon introduced in Generation 7. It is known as the Dancing Pokémon.\\nOricorio has four different forms - one for each of Alola's islands. Oricorio changes its form by sipping the nectar of certain flowers.\\nThe Baile Style Oricorio is very passionate, and power fills its body when it dances. It sends downy fluff flying during its intense dances.\\nThe Pom-Pom Style Oricorio is very friendly toward people, and it uses dancing to encourage Trainers who are feeling glum. When it dances, its feathers are charged with static electricity.\\nThe Pa'u Style Oricorio acts at its own pace, which sometimes makes it difficult to deal with. It sharpens its spirited moves through dance, which increases its psychic power.\\nThe Sensu Style Oricorio is quiet and collected. By means of its dance, it gathers the spirits drifting about in an area and borrows their power to fight.\",\r\n                \"image\": \"images/oricorio-baile.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Dancing Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 3.4,\r\n                \"abilities\": [\r\n                    \"Dancer\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 476,\r\n                    \"hp\": 75,\r\n                    \"attack\": 70,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 98,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 93\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Pom-Pom Style\",\r\n                \"description\": \"Oricorio is a Fire/Flying type Pokémon introduced in Generation 7. It is known as the Dancing Pokémon.\\nOricorio has four different forms - one for each of Alola's islands. Oricorio changes its form by sipping the nectar of certain flowers.\\nThe Baile Style Oricorio is very passionate, and power fills its body when it dances. It sends downy fluff flying during its intense dances.\\nThe Pom-Pom Style Oricorio is very friendly toward people, and it uses dancing to encourage Trainers who are feeling glum. When it dances, its feathers are charged with static electricity.\\nThe Pa'u Style Oricorio acts at its own pace, which sometimes makes it difficult to deal with. It sharpens its spirited moves through dance, which increases its psychic power.\\nThe Sensu Style Oricorio is quiet and collected. By means of its dance, it gathers the spirits drifting about in an area and borrows their power to fight.\",\r\n                \"image\": \"images/oricorio-pom-pom.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Dancing Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 3.4,\r\n                \"abilities\": [\r\n                    \"Dancer\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 476,\r\n                    \"hp\": 75,\r\n                    \"attack\": 70,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 98,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 93\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Pa'u Style\",\r\n                \"description\": \"Oricorio is a Fire/Flying type Pokémon introduced in Generation 7. It is known as the Dancing Pokémon.\\nOricorio has four different forms - one for each of Alola's islands. Oricorio changes its form by sipping the nectar of certain flowers.\\nThe Baile Style Oricorio is very passionate, and power fills its body when it dances. It sends downy fluff flying during its intense dances.\\nThe Pom-Pom Style Oricorio is very friendly toward people, and it uses dancing to encourage Trainers who are feeling glum. When it dances, its feathers are charged with static electricity.\\nThe Pa'u Style Oricorio acts at its own pace, which sometimes makes it difficult to deal with. It sharpens its spirited moves through dance, which increases its psychic power.\\nThe Sensu Style Oricorio is quiet and collected. By means of its dance, it gathers the spirits drifting about in an area and borrows their power to fight.\",\r\n                \"image\": \"images/oricorio-pau.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Dancing Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 3.4,\r\n                \"abilities\": [\r\n                    \"Dancer\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 476,\r\n                    \"hp\": 75,\r\n                    \"attack\": 70,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 98,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 93\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Sensu Style\",\r\n                \"description\": \"Oricorio is a Fire/Flying type Pokémon introduced in Generation 7. It is known as the Dancing Pokémon.\\nOricorio has four different forms - one for each of Alola's islands. Oricorio changes its form by sipping the nectar of certain flowers.\\nThe Baile Style Oricorio is very passionate, and power fills its body when it dances. It sends downy fluff flying during its intense dances.\\nThe Pom-Pom Style Oricorio is very friendly toward people, and it uses dancing to encourage Trainers who are feeling glum. When it dances, its feathers are charged with static electricity.\\nThe Pa'u Style Oricorio acts at its own pace, which sometimes makes it difficult to deal with. It sharpens its spirited moves through dance, which increases its psychic power.\\nThe Sensu Style Oricorio is quiet and collected. By means of its dance, it gathers the spirits drifting about in an area and borrows their power to fight.\",\r\n                \"image\": \"images/oricorio-sensu.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Dancing Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 3.4,\r\n                \"abilities\": [\r\n                    \"Dancer\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 476,\r\n                    \"hp\": 75,\r\n                    \"attack\": 70,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 98,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 93\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/oricorio\"\r\n    },\r\n    {\r\n        \"num\": 742,\r\n        \"name\": \"Cutiefly\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cutiefly\",\r\n                \"description\": \"Cutiefly is a Bug/Fairy type Pokémon introduced in Generation 7. It is known as the Bee Fly Pokémon.\\nCutiefly can detect the auras of living things, including people, Pokémon, and plants. They search out flowers by the color and brightness of their auras and then gather their nectar and pollen.\\nWhen living creatures are excited, it seems that their auras resemble those of flowers in full bloom. As a result, these Pokémon tend to gather near people or Pokémon feeling particularly happy or sad.\",\r\n                \"image\": \"images/cutiefly.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Bee Fly Pokémon\",\r\n                \"height\": 0.1,\r\n                \"weight\": 0.2,\r\n                \"abilities\": [\r\n                    \"Honey Gather\",\r\n                    \"Shield Dust\",\r\n                    \"Sweet Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 304,\r\n                    \"hp\": 40,\r\n                    \"attack\": 45,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 84\r\n                },\r\n                \"evolutions\": [\r\n                    \"cutiefly\",\r\n                    \"ribombee\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cutiefly\"\r\n    },\r\n    {\r\n        \"num\": 743,\r\n        \"name\": \"Ribombee\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Ribombee\",\r\n                \"description\": \"Ribombee is a Bug/Fairy type Pokémon introduced in Generation 7. It is known as the Bee Fly Pokémon.\\nRibombee collect flower nectar and pollen to make into balls known as Pollen Puffs. These serve as food, and what’s more, they also can cause effects like paralysis or dizziness. Ribombee may use puffs to strike their opponents during battles.\",\r\n                \"image\": \"images/ribombee.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Bee Fly Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 0.5,\r\n                \"abilities\": [\r\n                    \"Honey Gather\",\r\n                    \"Shield Dust\",\r\n                    \"Sweet Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 464,\r\n                    \"hp\": 60,\r\n                    \"attack\": 55,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 124\r\n                },\r\n                \"evolutions\": [\r\n                    \"cutiefly\",\r\n                    \"ribombee\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/ribombee\"\r\n    },\r\n    {\r\n        \"num\": 744,\r\n        \"name\": \"Rockruff\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Rockruff\",\r\n                \"description\": \"Rockruff is a Rock type Pokémon introduced in Generation 7. It is known as the Puppy Pokémon.\\nRockruff has an excellent sense of smell, and once it has smelled an odor, it doesn’t forget it! There are tales of these Pokémon getting separated from their Trainers, then using the faintest traces of their scent to track them for days until they are reunited!\\nRockruff is a sociable Pokémon, but as it grows, its disposition gets wilder. If it begins to howl when the sun goes down, that is proof that it’s close to evolving. It’s said that it leaves its Trainer’s side to evolve and returns again when fully evolved.\",\r\n                \"image\": \"images/rockruff.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Puppy Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 9.2,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Vital Spirit\",\r\n                    \"Steadfast\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 280,\r\n                    \"hp\": 45,\r\n                    \"attack\": 65,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"rockruff\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Own Tempo Rockruff\",\r\n                \"description\": \"Rockruff is a Rock type Pokémon introduced in Generation 7. It is known as the Puppy Pokémon.\\nRockruff has an excellent sense of smell, and once it has smelled an odor, it doesn’t forget it! There are tales of these Pokémon getting separated from their Trainers, then using the faintest traces of their scent to track them for days until they are reunited!\\nRockruff is a sociable Pokémon, but as it grows, its disposition gets wilder. If it begins to howl when the sun goes down, that is proof that it’s close to evolving. It’s said that it leaves its Trainer’s side to evolve and returns again when fully evolved.\",\r\n                \"image\": \"images/rockruff.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Puppy Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 9.2,\r\n                \"abilities\": [\r\n                    \"Own Tempo\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 280,\r\n                    \"hp\": 45,\r\n                    \"attack\": 65,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"rockruff\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/rockruff\"\r\n    },\r\n    {\r\n        \"num\": 745,\r\n        \"name\": \"Lycanroc\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Midday Form\",\r\n                \"description\": \"Lycanroc is a Rock type Pokémon introduced in Generation 7. It is known as the Wolf Pokémon.\\nLycanroc has three forms. Midday Form and Midnight Form were available in Pokémon Sun & Moon, while Dusk Form was added in Ultra Sun & Ultra Moon. Lycanroc evolves from Rockruff into one of the forms:\\n\\nIn Pokémon Sun, influenced by Solgaleo, Rockruff evolves into Lycanroc Midday Form.\\nIn Pokémon Moon, influenced by Lunala, Rockruff evolves into Lycanroc Midnight Form.\\nIn Pokémon Ultra Sun/Moon, a special event Rockruff (from Mystery Gift) evolves into Lycanroc Dusk Form.\",\r\n                \"image\": \"images/lycanroc-midday.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Wolf Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 25,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Sand Rush\",\r\n                    \"Steadfast\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 487,\r\n                    \"hp\": 75,\r\n                    \"attack\": 115,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 112\r\n                },\r\n                \"evolutions\": [\r\n                    \"rockruff\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Midnight Form\",\r\n                \"description\": \"Lycanroc is a Rock type Pokémon introduced in Generation 7. It is known as the Wolf Pokémon.\\nLycanroc has three forms. Midday Form and Midnight Form were available in Pokémon Sun & Moon, while Dusk Form was added in Ultra Sun & Ultra Moon. Lycanroc evolves from Rockruff into one of the forms:\\n\\nIn Pokémon Sun, influenced by Solgaleo, Rockruff evolves into Lycanroc Midday Form.\\nIn Pokémon Moon, influenced by Lunala, Rockruff evolves into Lycanroc Midnight Form.\\nIn Pokémon Ultra Sun/Moon, a special event Rockruff (from Mystery Gift) evolves into Lycanroc Dusk Form.\",\r\n                \"image\": \"images/lycanroc-midnight.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Wolf Pokémon\",\r\n                \"height\": 1.1,\r\n                \"weight\": 25,\r\n                \"abilities\": [\r\n                    \"Keen Eye\",\r\n                    \"Vital Spirit\",\r\n                    \"No Guard\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 487,\r\n                    \"hp\": 85,\r\n                    \"attack\": 115,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 82\r\n                },\r\n                \"evolutions\": [\r\n                    \"rockruff\"\r\n                ]\r\n            },\r\n            {\r\n                \"name\": \"Dusk Form\",\r\n                \"description\": \"Lycanroc is a Rock type Pokémon introduced in Generation 7. It is known as the Wolf Pokémon.\\nLycanroc has three forms. Midday Form and Midnight Form were available in Pokémon Sun & Moon, while Dusk Form was added in Ultra Sun & Ultra Moon. Lycanroc evolves from Rockruff into one of the forms:\\n\\nIn Pokémon Sun, influenced by Solgaleo, Rockruff evolves into Lycanroc Midday Form.\\nIn Pokémon Moon, influenced by Lunala, Rockruff evolves into Lycanroc Midnight Form.\\nIn Pokémon Ultra Sun/Moon, a special event Rockruff (from Mystery Gift) evolves into Lycanroc Dusk Form.\",\r\n                \"image\": \"images/lycanroc-dusk.jpg\",\r\n                \"types\": [\r\n                    \"Rock\"\r\n                ],\r\n                \"specie\": \"Wolf Pokémon\",\r\n                \"height\": 0.8,\r\n                \"weight\": 25,\r\n                \"abilities\": [\r\n                    \"Tough Claws\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 487,\r\n                    \"hp\": 75,\r\n                    \"attack\": 117,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 110\r\n                },\r\n                \"evolutions\": [\r\n                    \"rockruff\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lycanroc\"\r\n    },\r\n    {\r\n        \"num\": 746,\r\n        \"name\": \"Wishiwashi\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Solo Form\",\r\n                \"description\": \"Wishiwashi is a Water type Pokémon introduced in Generation 7. It is known as the Small Fry Pokémon.\\nWishiwashi is very small, yet the people of the Alola region seem to view it as a terrifying Pokémon. When it’s in danger, Wishiwashi's glistening eyes catch the light and shine out, sending an SOS signal to its allies.\",\r\n                \"image\": \"images/wishiwashi-solo.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Small Fry Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 0.3,\r\n                \"abilities\": [\r\n                    \"Schooling\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 175,\r\n                    \"hp\": 45,\r\n                    \"attack\": 20,\r\n                    \"defense\": 20,\r\n                    \"speedAttack\": 25,\r\n                    \"speedDefense\": 25,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"School Form\",\r\n                \"description\": \"Wishiwashi is a Water type Pokémon introduced in Generation 7. It is known as the Small Fry Pokémon.\\nWishiwashi is very small, yet the people of the Alola region seem to view it as a terrifying Pokémon. When it’s in danger, Wishiwashi's glistening eyes catch the light and shine out, sending an SOS signal to its allies.\",\r\n                \"image\": \"images/wishiwashi-school.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Small Fry Pokémon\",\r\n                \"height\": 8.2,\r\n                \"weight\": 78.6,\r\n                \"abilities\": [\r\n                    \"Schooling\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 620,\r\n                    \"hp\": 45,\r\n                    \"attack\": 140,\r\n                    \"defense\": 130,\r\n                    \"speedAttack\": 140,\r\n                    \"speedDefense\": 135,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/wishiwashi\"\r\n    },\r\n    {\r\n        \"num\": 747,\r\n        \"name\": \"Mareanie\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mareanie\",\r\n                \"description\": \"Mareanie is a Poison/Water type Pokémon introduced in Generation 7. It is known as the Brutal Star Pokémon.\",\r\n                \"image\": \"images/mareanie.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Brutal Star Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 8,\r\n                \"abilities\": [\r\n                    \"Merciless\",\r\n                    \"Limber\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 305,\r\n                    \"hp\": 50,\r\n                    \"attack\": 53,\r\n                    \"defense\": 62,\r\n                    \"speedAttack\": 43,\r\n                    \"speedDefense\": 52,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"mareanie\",\r\n                    \"toxapex\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mareanie\"\r\n    },\r\n    {\r\n        \"num\": 748,\r\n        \"name\": \"Toxapex\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Toxapex\",\r\n                \"description\": \"Toxapex is a Poison/Water type Pokémon introduced in Generation 7. It is known as the Brutal Star Pokémon.\",\r\n                \"image\": \"images/toxapex.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Brutal Star Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 14.5,\r\n                \"abilities\": [\r\n                    \"Merciless\",\r\n                    \"Limber\",\r\n                    \"Regenerator\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 495,\r\n                    \"hp\": 50,\r\n                    \"attack\": 63,\r\n                    \"defense\": 152,\r\n                    \"speedAttack\": 53,\r\n                    \"speedDefense\": 142,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"mareanie\",\r\n                    \"toxapex\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/toxapex\"\r\n    },\r\n    {\r\n        \"num\": 749,\r\n        \"name\": \"Mudbray\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mudbray\",\r\n                \"description\": \"Mudbray is a Ground type Pokémon introduced in Generation 7. It is known as the Donkey Pokémon.\\nMudbray could once be found all over the world, but it was over-hunted and ended up on the verge of extinction. It’s said that the Alola region is the only place in the world where Mudbray can still be found in the wild.\\nMudbray boasts superhuman strength—a surprise, considering its small body. Mudbray can carry loads up to 50 times its own weight on its back or dragging behind it.\\nMudbray evolves into Mudsdale.\",\r\n                \"image\": \"images/mudbray.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Donkey Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 110,\r\n                \"abilities\": [\r\n                    \"Own Tempo\",\r\n                    \"Stamina\",\r\n                    \"Inner Focus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 385,\r\n                    \"hp\": 70,\r\n                    \"attack\": 100,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 55,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"mudbray\",\r\n                    \"mudsdale\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mudbray\"\r\n    },\r\n    {\r\n        \"num\": 750,\r\n        \"name\": \"Mudsdale\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mudsdale\",\r\n                \"description\": \"Mudsdale is a Ground type Pokémon introduced in Generation 7. It is known as the Draft Horse Pokémon.\\nMudsdale is known for its powerful body as well as its emotional fortitude, which keeps it from being agitated by anything. It never cries out, no matter what kind of trouble it’s in, and it defeats its opponents with a single powerful blow. Its legs are coated in protective mud, and the weight of this coating increases the force of its kicks.\\nWhen Mudsdale gallops in earnest, the power of each hoof-clop can dig out huge holes, even in asphalt. Mudsdale is forbidden to run on some of Alola’s public roads.\",\r\n                \"image\": \"images/mudsdale.jpg\",\r\n                \"types\": [\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Draft Horse Pokémon\",\r\n                \"height\": 2.5,\r\n                \"weight\": 920,\r\n                \"abilities\": [\r\n                    \"Own Tempo\",\r\n                    \"Stamina\",\r\n                    \"Inner Focus\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 100,\r\n                    \"attack\": 125,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"mudbray\",\r\n                    \"mudsdale\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mudsdale\"\r\n    },\r\n    {\r\n        \"num\": 751,\r\n        \"name\": \"Dewpider\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dewpider\",\r\n                \"description\": \"Dewpider is a Water/Bug type Pokémon introduced in Generation 7. It is known as the Water Bubble Pokémon.\",\r\n                \"image\": \"images/dewpider.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Water Bubble Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 4,\r\n                \"abilities\": [\r\n                    \"Water Bubble\",\r\n                    \"Water Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 269,\r\n                    \"hp\": 38,\r\n                    \"attack\": 40,\r\n                    \"defense\": 52,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 72,\r\n                    \"speed\": 27\r\n                },\r\n                \"evolutions\": [\r\n                    \"dewpider\",\r\n                    \"araquanid\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dewpider\"\r\n    },\r\n    {\r\n        \"num\": 752,\r\n        \"name\": \"Araquanid\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Araquanid\",\r\n                \"description\": \"Araquanid is a Water/Bug type Pokémon introduced in Generation 7. It is known as the Water Bubble Pokémon.\",\r\n                \"image\": \"images/araquanid.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Bug\"\r\n                ],\r\n                \"specie\": \"Water Bubble Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 82,\r\n                \"abilities\": [\r\n                    \"Water Bubble\",\r\n                    \"Water Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 454,\r\n                    \"hp\": 68,\r\n                    \"attack\": 70,\r\n                    \"defense\": 92,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 132,\r\n                    \"speed\": 42\r\n                },\r\n                \"evolutions\": [\r\n                    \"dewpider\",\r\n                    \"araquanid\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/araquanid\"\r\n    },\r\n    {\r\n        \"num\": 753,\r\n        \"name\": \"Fomantis\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Fomantis\",\r\n                \"description\": \"Fomantis is a Grass type Pokémon introduced in Generation 7. It is known as the Sickle Grass Pokémon.\\nFomantis is nocturnal, and it performs photosynthesis while it sleeps during the day by spreading out its leaves in all directions. Because of the danger of staying in the same location two days in a row, Fomantis begins its search for the next day's spot as soon as the sun sets.\\nFomantis evolves into Lurantis.\",\r\n                \"image\": \"images/fomantis.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Sickle Grass Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 1.5,\r\n                \"abilities\": [\r\n                    \"Leaf Guard\",\r\n                    \"Contrary\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 250,\r\n                    \"hp\": 40,\r\n                    \"attack\": 55,\r\n                    \"defense\": 35,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"fomantis\",\r\n                    \"lurantis\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/fomantis\"\r\n    },\r\n    {\r\n        \"num\": 754,\r\n        \"name\": \"Lurantis\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lurantis\",\r\n                \"description\": \"Lurantis is a Grass type Pokémon introduced in Generation 7. It is known as the Bloom Sickle Pokémon.\\nLurantis draws opponents near to itself with its flowerlike appearance and aroma—and then it takes them down. It’s said to be the most gorgeous of all Grass-type Pokémon, due to its brilliant coloration and elegant moves. Lurantis' appearance is maintained through detailed grooming. It will trust a Trainer who does a good job of caring for it, but it will apparently have a difficult time growing closer to a lazy Trainer.\\nLurantis evolves from Fomantis.\",\r\n                \"image\": \"images/lurantis.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Bloom Sickle Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 18.5,\r\n                \"abilities\": [\r\n                    \"Leaf Guard\",\r\n                    \"Contrary\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 70,\r\n                    \"attack\": 105,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"fomantis\",\r\n                    \"lurantis\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lurantis\"\r\n    },\r\n    {\r\n        \"num\": 755,\r\n        \"name\": \"Morelull\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Morelull\",\r\n                \"description\": \"Morelull is a Grass/Fairy type Pokémon introduced in Generation 7. It is known as the Illuminating Pokémon.\\nMorelull are nocturnal Pokémon that walk around at night on their leg-like roots. They move because staying in one spot and sucking all the nutrients from the soil would cause surrounding plants to wither. Morelull uses its roots to make contact with its fellows and communicate with them.\",\r\n                \"image\": \"images/morelull.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Illuminating Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 1.5,\r\n                \"abilities\": [\r\n                    \"Illuminate\",\r\n                    \"Effect Spore\",\r\n                    \"Rain Dish\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 285,\r\n                    \"hp\": 40,\r\n                    \"attack\": 35,\r\n                    \"defense\": 55,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 15\r\n                },\r\n                \"evolutions\": [\r\n                    \"morelull\",\r\n                    \"shiinotic\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/morelull\"\r\n    },\r\n    {\r\n        \"num\": 756,\r\n        \"name\": \"Shiinotic\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Shiinotic\",\r\n                \"description\": \"Shiinotic is a Grass/Fairy type Pokémon introduced in Generation 7. It is known as the Illuminating Pokémon.\",\r\n                \"image\": \"images/shiinotic.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Illuminating Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 11.5,\r\n                \"abilities\": [\r\n                    \"Illuminate\",\r\n                    \"Effect Spore\",\r\n                    \"Rain Dish\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 405,\r\n                    \"hp\": 60,\r\n                    \"attack\": 45,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 30\r\n                },\r\n                \"evolutions\": [\r\n                    \"morelull\",\r\n                    \"shiinotic\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/shiinotic\"\r\n    },\r\n    {\r\n        \"num\": 757,\r\n        \"name\": \"Salandit\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Salandit\",\r\n                \"description\": \"Salandit is a Poison/Fire type Pokémon introduced in Generation 7. It is known as the Toxic Lizard Pokémon.\\nSalandit emits toxic gas, together with flames, from the base of its tail. This poisonous gas has a sweet smell, and anyone who unknowingly breathes it in will become dizzy. Salandit is not a very powerful Pokémon, but its cunning nature allows it to battle fiercely by throwing its opponents off balance. \\nSalandit females not only release toxic gases, they can also emit pheromones that attract males of all species, including Pokémon and humans. Inhaling these pheromones may cause opponents to be controlled by Salandit's will.\",\r\n                \"image\": \"images/salandit.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Toxic Lizard Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 4.8,\r\n                \"abilities\": [\r\n                    \"Corrosion\",\r\n                    \"Oblivious\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 320,\r\n                    \"hp\": 48,\r\n                    \"attack\": 44,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 71,\r\n                    \"speedDefense\": 40,\r\n                    \"speed\": 77\r\n                },\r\n                \"evolutions\": [\r\n                    \"salandit\",\r\n                    \"salazzle\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/salandit\"\r\n    },\r\n    {\r\n        \"num\": 758,\r\n        \"name\": \"Salazzle\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Salazzle\",\r\n                \"description\": \"Salazzle is a Poison/Fire type Pokémon introduced in Generation 7. It is known as the Toxic Lizard Pokémon.\",\r\n                \"image\": \"images/salazzle.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Fire\"\r\n                ],\r\n                \"specie\": \"Toxic Lizard Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 22.2,\r\n                \"abilities\": [\r\n                    \"Corrosion\",\r\n                    \"Oblivious\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 68,\r\n                    \"attack\": 64,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 111,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 117\r\n                },\r\n                \"evolutions\": [\r\n                    \"salandit\",\r\n                    \"salazzle\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/salazzle\"\r\n    },\r\n    {\r\n        \"num\": 759,\r\n        \"name\": \"Stufful\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Stufful\",\r\n                \"description\": \"Stufful is a Normal/Fighting type Pokémon introduced in Generation 7. It is known as the Flailing Pokémon.\\nStufful's cute appearance and movements - plus the fluffy feel of its fur - all combine to make it super popular. Stufful may have a small body, but its strength is extraordinary. Receiving one of its powerful hits without being prepared for it can bring down even well-trained Pokémon.\",\r\n                \"image\": \"images/stufful.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Flailing Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 6.8,\r\n                \"abilities\": [\r\n                    \"Fluffy\",\r\n                    \"Klutz\",\r\n                    \"Cute Charm\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 340,\r\n                    \"hp\": 70,\r\n                    \"attack\": 75,\r\n                    \"defense\": 50,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 50,\r\n                    \"speed\": 50\r\n                },\r\n                \"evolutions\": [\r\n                    \"stufful\",\r\n                    \"bewear\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/stufful\"\r\n    },\r\n    {\r\n        \"num\": 760,\r\n        \"name\": \"Bewear\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bewear\",\r\n                \"description\": \"Bewear is a Normal/Fighting type Pokémon introduced in Generation 7. It is known as the Strong Arm Pokémon.\\nWhen Bewear is acting in a friendly fashion, just swinging its arms around, you must never dare to approach it carelessly. It is acknowledged to be a dangerous Pokémon, even within the Alola region. You may see warning signs posted near places it resides.\\nWhen Bewear grows fond of its Trainer, it may show that feeling in a fond embrace—but the force of that hug is tremendous! Trainers must teach these Pokémon how to restrain their strength when showing affection.\",\r\n                \"image\": \"images/bewear.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Strong Arm Pokémon\",\r\n                \"height\": 2.1,\r\n                \"weight\": 135,\r\n                \"abilities\": [\r\n                    \"Fluffy\",\r\n                    \"Klutz\",\r\n                    \"Unnerve\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 120,\r\n                    \"attack\": 125,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": [\r\n                    \"stufful\",\r\n                    \"bewear\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bewear\"\r\n    },\r\n    {\r\n        \"num\": 761,\r\n        \"name\": \"Bounsweet\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bounsweet\",\r\n                \"description\": \"Bounsweet is a Grass type Pokémon introduced in Generation 7. It is known as the Fruit Pokémon.\\nBecause it exudes a delicious smell from its entire body, Bounsweet is popular with Pokémon and people of the Alola region. Bounsweet's scent has a calming effect on humans, so many people let them live inside their homes as a sort of air freshener. Unfortunately, it’s sometimes swallowed whole by Pokémon drawn to its aroma.\\nWhen running away from other Pokémon, Bounsweet flees danger by skipping along the ground. Since its bouncy movements don’t convey to others that it’s actually in desperate flight, no one ever comes to its aid.\",\r\n                \"image\": \"images/bounsweet.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Fruit Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 3.2,\r\n                \"abilities\": [\r\n                    \"Leaf Guard\",\r\n                    \"Oblivious\",\r\n                    \"Sweet Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 210,\r\n                    \"hp\": 42,\r\n                    \"attack\": 30,\r\n                    \"defense\": 38,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 38,\r\n                    \"speed\": 32\r\n                },\r\n                \"evolutions\": [\r\n                    \"bounsweet\",\r\n                    \"steenee\",\r\n                    \"tsareena\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bounsweet\"\r\n    },\r\n    {\r\n        \"num\": 762,\r\n        \"name\": \"Steenee\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Steenee\",\r\n                \"description\": \"Steenee is a Grass type Pokémon introduced in Generation 7. It is known as the Fruit Pokémon.\\nUpon evolving, Steenee's fragrance becomes even more delectable, but it also gains a tomboy-like personality. Living together with one is quite the ordeal. As it moves around, it spins its calyx, striking nearby objects, but Steenee couldn’t care less.\",\r\n                \"image\": \"images/steenee.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Fruit Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 8.2,\r\n                \"abilities\": [\r\n                    \"Leaf Guard\",\r\n                    \"Oblivious\",\r\n                    \"Sweet Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 290,\r\n                    \"hp\": 52,\r\n                    \"attack\": 40,\r\n                    \"defense\": 48,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 48,\r\n                    \"speed\": 62\r\n                },\r\n                \"evolutions\": [\r\n                    \"bounsweet\",\r\n                    \"steenee\",\r\n                    \"tsareena\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/steenee\"\r\n    },\r\n    {\r\n        \"num\": 763,\r\n        \"name\": \"Tsareena\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tsareena\",\r\n                \"description\": \"Tsareena is a Grass type Pokémon introduced in Generation 7. It is known as the Fruit Pokémon.\\nTsareena has the nature of high-class nobility. Any Pokémon or human that approaches it with evil in mind will be punished forthwith. It even turns its fearsome glare upon its own Trainer if the two of them are not fully in sync, or if its Trainer orders it to use a move that will be ineffective. Only the strongest of Steenee are able to evolve. When this happens, the Steenee evolves with the blessing of other Steenee. It then uses its strength to protect the Bounsweet.\",\r\n                \"image\": \"images/tsareena.jpg\",\r\n                \"types\": [\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Fruit Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 21.4,\r\n                \"abilities\": [\r\n                    \"Leaf Guard\",\r\n                    \"Queenly Majesty\",\r\n                    \"Sweet Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 510,\r\n                    \"hp\": 72,\r\n                    \"attack\": 120,\r\n                    \"defense\": 98,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 98,\r\n                    \"speed\": 72\r\n                },\r\n                \"evolutions\": [\r\n                    \"bounsweet\",\r\n                    \"steenee\",\r\n                    \"tsareena\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tsareena\"\r\n    },\r\n    {\r\n        \"num\": 764,\r\n        \"name\": \"Comfey\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Comfey\",\r\n                \"description\": \"Comfey is a Fairy type Pokémon introduced in Generation 7. It is known as the Posy Picker Pokémon.\\nComfey picks flowers and always carries them around. It makes a ring of blossoms and spreads oil from its body on it, which changes the flowers so they emit a soothing fragrance. It has a habit of giving these flower rings to those it’s fond of. The aroma can soothe both itself and its allies. Comfey also helps with the treatment of people and Pokémon at Pokémon Centers and hospitals, thanks to its aroma.\\nWhen attacked by other Pokémon, it throws its flowers at them to create an opening, and then it either flees or strikes back.\",\r\n                \"image\": \"images/comfey.jpg\",\r\n                \"types\": [\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Posy Picker Pokémon\",\r\n                \"height\": 0.1,\r\n                \"weight\": 0.3,\r\n                \"abilities\": [\r\n                    \"Flower Veil\",\r\n                    \"Triage\",\r\n                    \"Natural Cure\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 51,\r\n                    \"attack\": 52,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 82,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 100\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/comfey\"\r\n    },\r\n    {\r\n        \"num\": 765,\r\n        \"name\": \"Oranguru\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Oranguru\",\r\n                \"description\": \"Oranguru is a Normal/Psychic type Pokémon introduced in Generation 7. It is known as the Sage Pokémon.\\nOranguru live solitary lives deep in the forests and do not usually take much action. Instead, they position themselves high up in the trees to meditate. Long ago, people thought that Oranguru were humans who dwelled in the forest depths, so they called them the people of the forests. Oranguru is kind to the other Pokémon living in the forest, providing medicine for injured Pokémon and food for the hungry.\\nThe fan-like objects held by Oranguru are handmade by the Oranguru themselves. These fans appear to be made of layers of leaves bound together with Oranguru's own fur.\",\r\n                \"image\": \"images/oranguru.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Sage Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 76,\r\n                \"abilities\": [\r\n                    \"Inner Focus\",\r\n                    \"Telepathy\",\r\n                    \"Symbiosis\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 90,\r\n                    \"attack\": 60,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 110,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/oranguru\"\r\n    },\r\n    {\r\n        \"num\": 766,\r\n        \"name\": \"Passimian\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Passimian\",\r\n                \"description\": \"Passimian is a Fighting type Pokémon introduced in Generation 7. It is known as the Teamwork Pokémon.\\nPassimian live in troops of 20 to 30 individuals, all following a leader. This leader will take 10 of the individuals in the best condition to search for food. The troop's teamwork is strong, and the boss of each troop decides what mark members will wear on their arms to distinguish the troops.\\nThe boss puts the troop members through training to improve their coordination with one another and their skill in handling Berries.\",\r\n                \"image\": \"images/passimian.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Teamwork Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 82.8,\r\n                \"abilities\": [\r\n                    \"Receiver\",\r\n                    \"Defiant\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 490,\r\n                    \"hp\": 100,\r\n                    \"attack\": 120,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/passimian\"\r\n    },\r\n    {\r\n        \"num\": 767,\r\n        \"name\": \"Wimpod\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Wimpod\",\r\n                \"description\": \"Wimpod is a Bug/Water type Pokémon introduced in Generation 7. It is known as the Turn Tail Pokémon.\\nWimpod have a cowardly nature and are wary of noises and sudden movements. If you approach them in a group, they’ll immediately run off. When Wimpod feel threatened, they spit out a poisonous liquid. The stench of this toxic fluid signals others that danger is near. Despite their extreme cowardice, their curiosity leads Wimpod to approach people or Pokémon that are standing still.\\nWimpod eat and store anything that they find fallen on the ground. They also scavenge any garbage that’s been dropped in the sea, so they’re highly valued as cleaners. They sometimes carry pearls or other valuable items, so humans or Pokémon like Murkrow may target them.\",\r\n                \"image\": \"images/wimpod.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Turn Tail Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 12,\r\n                \"abilities\": [\r\n                    \"Wimp Out\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 230,\r\n                    \"hp\": 25,\r\n                    \"attack\": 35,\r\n                    \"defense\": 40,\r\n                    \"speedAttack\": 20,\r\n                    \"speedDefense\": 30,\r\n                    \"speed\": 80\r\n                },\r\n                \"evolutions\": [\r\n                    \"wimpod\",\r\n                    \"golisopod\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/wimpod\"\r\n    },\r\n    {\r\n        \"num\": 768,\r\n        \"name\": \"Golisopod\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Golisopod\",\r\n                \"description\": \"Golisopod is a Bug/Water type Pokémon introduced in Generation 7. It is known as the Hard Scale Pokémon.\",\r\n                \"image\": \"images/golisopod.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Hard Scale Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 108,\r\n                \"abilities\": [\r\n                    \"Emergency Exit\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 530,\r\n                    \"hp\": 75,\r\n                    \"attack\": 125,\r\n                    \"defense\": 140,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": [\r\n                    \"wimpod\",\r\n                    \"golisopod\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/golisopod\"\r\n    },\r\n    {\r\n        \"num\": 769,\r\n        \"name\": \"Sandygast\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Sandygast\",\r\n                \"description\": \"Sandygast is a Ghost/Ground type Pokémon introduced in Generation 7. It is known as the Sand Heap Pokémon.\\nA Sandygast emerges when the grudges of Pokémon and other creatures soak into the sand after they fall in battle. A Sandygast uses its power to manipulate children into gathering sand to increase the size of its body. If a Sandygast loses its shovel, it may put up a tree branch, a flag, or another item in its place.\\nThe tunnel-like mouth of a Sandygast can suck the vitality from people and Pokémon. Apparently it's a test of courage in the Alola region to put your hand in a Sandygast's mouth.\",\r\n                \"image\": \"images/sandygast.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Sand Heap Pokémon\",\r\n                \"height\": 0.5,\r\n                \"weight\": 70,\r\n                \"abilities\": [\r\n                    \"Water Compaction\",\r\n                    \"Sand Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 320,\r\n                    \"hp\": 55,\r\n                    \"attack\": 55,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 15\r\n                },\r\n                \"evolutions\": [\r\n                    \"sandygast\",\r\n                    \"palossand\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/sandygast\"\r\n    },\r\n    {\r\n        \"num\": 770,\r\n        \"name\": \"Palossand\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Palossand\",\r\n                \"description\": \"Palossand is a Ghost/Ground type Pokémon introduced in Generation 7. It is known as the Sand Castle Pokémon.\\nPalossand controls human adults, making them build a sand castle that provides camouflage and also raises its defensive abilities. Unlike Sandygast, if Palossand loses some of the sand from its body, it can restore itself on its own. When moving about in search of prey, the shovel on top of Palossand's head revolves. It’s said that the shovel could be serving as some kind of radar.\",\r\n                \"image\": \"images/palossand.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Ground\"\r\n                ],\r\n                \"specie\": \"Sand Castle Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 250,\r\n                \"abilities\": [\r\n                    \"Water Compaction\",\r\n                    \"Sand Veil\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 85,\r\n                    \"attack\": 75,\r\n                    \"defense\": 110,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 35\r\n                },\r\n                \"evolutions\": [\r\n                    \"sandygast\",\r\n                    \"palossand\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/palossand\"\r\n    },\r\n    {\r\n        \"num\": 771,\r\n        \"name\": \"Pyukumuku\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pyukumuku\",\r\n                \"description\": \"Pyukumuku is a Water type Pokémon introduced in Generation 7. It is known as the Sea Cucumber Pokémon.\\nDue to their appearance and their lifestyle, Pyukumuku are considered unappealing to tourists. Part-time work chucking Pyukumuku back into the sea is available at tourist beaches. But no matter how far they’re thrown, Pyukumuku will always return to the same spot.\\nPyukumuku hate to have their spikes and mouths touched, and if you step on one, it will hurl out its fist-like inner organs to strike at you.\",\r\n                \"image\": \"images/pyukumuku.jpg\",\r\n                \"types\": [\r\n                    \"Water\"\r\n                ],\r\n                \"specie\": \"Sea Cucumber Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 1.2,\r\n                \"abilities\": [\r\n                    \"Innards Out\",\r\n                    \"Unaware\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 410,\r\n                    \"hp\": 55,\r\n                    \"attack\": 60,\r\n                    \"defense\": 130,\r\n                    \"speedAttack\": 30,\r\n                    \"speedDefense\": 130,\r\n                    \"speed\": 5\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pyukumuku\"\r\n    },\r\n    {\r\n        \"num\": 772,\r\n        \"name\": \"Type: Null\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Type: Null\",\r\n                \"description\": \"Type: Null is a Normal type Pokémon introduced in Generation 7. It is known as the Synthetic Pokémon.\\nThe shapes of its front and hind legs are different, as Type: Null was constructed to synthesize the strengths of various Pokémon, enabling it to adapt to any situation.\\nThe mask fitted to Type: Null's head is a piece of equipment designed to control its latent powers. It's extremely heavy, so it also serves to hinder Type: Null's agility.\",\r\n                \"image\": \"images/type-null.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Synthetic Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 120.5,\r\n                \"abilities\": [\r\n                    \"Battle Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 534,\r\n                    \"hp\": 95,\r\n                    \"attack\": 95,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 59\r\n                },\r\n                \"evolutions\": [\r\n                    \"type: null\",\r\n                    \"silvally\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/type-null\"\r\n    },\r\n    {\r\n        \"num\": 773,\r\n        \"name\": \"Silvally\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Silvally\",\r\n                \"description\": \"Silvally is a Normal type Pokémon introduced in Generation 7. It is known as the Synthetic Pokémon.\\nWhen Type: Null gains a partner it can trust, it deliberately destroys the restraining device it wears. Once released from that heavy mask, the Pokémon’s speed increases substantially.\\nSilvally's ability changes its type based on the item being held.\",\r\n                \"image\": \"images/silvally.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Synthetic Pokémon\",\r\n                \"height\": 2.3,\r\n                \"weight\": 100.5,\r\n                \"abilities\": [\r\n                    \"RKS System\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 95,\r\n                    \"attack\": 95,\r\n                    \"defense\": 95,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": [\r\n                    \"type: null\",\r\n                    \"silvally\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/silvally\"\r\n    },\r\n    {\r\n        \"num\": 774,\r\n        \"name\": \"Minior\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Meteor Form\",\r\n                \"description\": \"Minior is a Rock/Flying type Pokémon introduced in Generation 7. It is known as the Meteor Pokémon.\\nMinior are formed in the stratosphere and live by absorbing the detritus around them. When they’ve consumed a large quantity of particles, their bodies become heavy, and they fall toward the planet’s surface. Minior has a hard and heavy outer shell with a core inside it.\\nWhen its shell breaks, the core in its center is revealed, which can be different colors.\",\r\n                \"image\": \"images/minior-meteor.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Meteor Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 40,\r\n                \"abilities\": [\r\n                    \"Shields Down\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 440,\r\n                    \"hp\": 60,\r\n                    \"attack\": 60,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 60,\r\n                    \"speedDefense\": 100,\r\n                    \"speed\": 60\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Core Form\",\r\n                \"description\": \"Minior is a Rock/Flying type Pokémon introduced in Generation 7. It is known as the Meteor Pokémon.\\nMinior are formed in the stratosphere and live by absorbing the detritus around them. When they’ve consumed a large quantity of particles, their bodies become heavy, and they fall toward the planet’s surface. Minior has a hard and heavy outer shell with a core inside it.\\nWhen its shell breaks, the core in its center is revealed, which can be different colors.\",\r\n                \"image\": \"images/minior-core.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Meteor Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.3,\r\n                \"abilities\": [\r\n                    \"Shields Down\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 500,\r\n                    \"hp\": 60,\r\n                    \"attack\": 100,\r\n                    \"defense\": 60,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 60,\r\n                    \"speed\": 120\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/minior\"\r\n    },\r\n    {\r\n        \"num\": 775,\r\n        \"name\": \"Komala\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Komala\",\r\n                \"description\": \"Komala is a Normal type Pokémon introduced in Generation 7. It is known as the Drowsing Pokémon.\\nNo one has ever seen a Komala awake. It eats, travels, and even battles while sound asleep! Its saliva can be used as medicine for the sick or sleepless, according to ancient people. They say if you take a small amount of the saliva remaining after it eats leaves, water the saliva down, and drink it, you’ll be able to sleep well. \\nKomala clings to a log pillow that its parents have given to it. Once it has grasped this log, it almost never releases it. If it does lose hold of its log, the Pokémon will be unable to sleep well and will thrash about wildly.\",\r\n                \"image\": \"images/komala.jpg\",\r\n                \"types\": [\r\n                    \"Normal\"\r\n                ],\r\n                \"specie\": \"Drowsing Pokémon\",\r\n                \"height\": 0.4,\r\n                \"weight\": 19.9,\r\n                \"abilities\": [\r\n                    \"Comatose\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 480,\r\n                    \"hp\": 65,\r\n                    \"attack\": 115,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 75,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/komala\"\r\n    },\r\n    {\r\n        \"num\": 776,\r\n        \"name\": \"Turtonator\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Turtonator\",\r\n                \"description\": \"Turtonator is a Fire/Dragon type Pokémon introduced in Generation 7. It is known as the Blast Turtle Pokémon.\\nBecause Turtonator lives on volcanoes, feeding on sulfur and other materials found near volcanic craters, its shell has a layer of explosive material—mostly sulfur. When something strikes this Pokémon, sparks fly from the horns on its shell, igniting an explosion! \\nIn areas around volcanic craters, this Pokémon camouflages itself as a rock and waits for prey. At the moment when its prey steps onto the back of its shell, Turtonator strikes its shell with its own tail, triggering an explosion!\",\r\n                \"image\": \"images/turtonator.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Blast Turtle Pokémon\",\r\n                \"height\": 2,\r\n                \"weight\": 212,\r\n                \"abilities\": [\r\n                    \"Shell Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 60,\r\n                    \"attack\": 78,\r\n                    \"defense\": 135,\r\n                    \"speedAttack\": 91,\r\n                    \"speedDefense\": 85,\r\n                    \"speed\": 36\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/turtonator\"\r\n    },\r\n    {\r\n        \"num\": 777,\r\n        \"name\": \"Togedemaru\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Togedemaru\",\r\n                \"description\": \"Togedemaru is an Electric/Steel type Pokémon introduced in Generation 7. It is known as the Roly-Poly Pokémon.\\nTogedemaru gathers electricity and stores it. The long needle that grows from the back of its head works as a lightning rod to attract electricity.\\nCovering its body is a pattern of fur with strands like needles. On days when lightning strikes, you can sometimes see Togedemaru gather and bristle up their needles, waiting to be struck by lightning.\",\r\n                \"image\": \"images/togedemaru.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Roly-Poly Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 3.3,\r\n                \"abilities\": [\r\n                    \"Iron Barbs\",\r\n                    \"Lightning Rod\",\r\n                    \"Sturdy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 435,\r\n                    \"hp\": 65,\r\n                    \"attack\": 98,\r\n                    \"defense\": 63,\r\n                    \"speedAttack\": 40,\r\n                    \"speedDefense\": 73,\r\n                    \"speed\": 96\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/togedemaru\"\r\n    },\r\n    {\r\n        \"num\": 778,\r\n        \"name\": \"Mimikyu\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Mimikyu\",\r\n                \"description\": \"Mimikyu is a Ghost/Fairy type Pokémon introduced in Generation 7. It is known as the Disguise Pokémon.\\nMimikyu lives its life completely covered by its cloth and is always hidden. People believe that anybody who sees its true form beneath the cloth will be stricken with a mysterious illness. People in the Alola region are convinced that you must never try to peek beneath its covering. Mimikyu's health fails when it’s bathed in the rays of the sun, so it prefers to stick to dark places. It’s rumored that the reason it covers itself with a cloth is to avoid sunlight.\",\r\n                \"image\": \"images/mimikyu.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Disguise Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 0.7,\r\n                \"abilities\": [\r\n                    \"Disguise\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 476,\r\n                    \"hp\": 55,\r\n                    \"attack\": 90,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 50,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 96\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/mimikyu\"\r\n    },\r\n    {\r\n        \"num\": 779,\r\n        \"name\": \"Bruxish\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Bruxish\",\r\n                \"description\": \"Bruxish is a Water/Psychic type Pokémon introduced in Generation 7. It is known as the Gnash Teeth Pokémon.\\nBruxish emits a strong psychic power from the protuberance on its head. When its opponents are bathed in this power, they're stricken with terrible headaches and fall unconscious. As it emits its psychic power, it grinds its teeth loudly. When nearby Pokémon hear the sound of Bruxish's teeth gnashing, they sense danger and flee immediately.\",\r\n                \"image\": \"images/bruxish.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Gnash Teeth Pokémon\",\r\n                \"height\": 0.9,\r\n                \"weight\": 19,\r\n                \"abilities\": [\r\n                    \"Dazzling\",\r\n                    \"Strong Jaw\",\r\n                    \"Wonder Skin\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 475,\r\n                    \"hp\": 68,\r\n                    \"attack\": 105,\r\n                    \"defense\": 70,\r\n                    \"speedAttack\": 70,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 92\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/bruxish\"\r\n    },\r\n    {\r\n        \"num\": 780,\r\n        \"name\": \"Drampa\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Drampa\",\r\n                \"description\": \"Drampa is a Normal/Dragon type Pokémon introduced in Generation 7. It is known as the Placid Pokémon.\\nDrampa are dragons that live alone in the mountains 10,000 feet above sea level. Since they can’t obtain the Berries they feed on at that range, they descend to the base of the mountains at dawn every day. Drampa love communicating with people and Pokémon.\\nWhile Drampa is usually a very gentle Pokémon, it can fly into a rage if a child it cares for is hurt in some way.\",\r\n                \"image\": \"images/drampa.jpg\",\r\n                \"types\": [\r\n                    \"Normal\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Placid Pokémon\",\r\n                \"height\": 3,\r\n                \"weight\": 185,\r\n                \"abilities\": [\r\n                    \"Berserk\",\r\n                    \"Sap Sipper\",\r\n                    \"Cloud Nine\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 485,\r\n                    \"hp\": 78,\r\n                    \"attack\": 60,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 135,\r\n                    \"speedDefense\": 91,\r\n                    \"speed\": 36\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/drampa\"\r\n    },\r\n    {\r\n        \"num\": 781,\r\n        \"name\": \"Dhelmise\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Dhelmise\",\r\n                \"description\": \"Dhelmise is a Ghost/Grass type Pokémon introduced in Generation 7. It is known as the Sea Creeper Pokémon.\",\r\n                \"image\": \"images/dhelmise.jpg\",\r\n                \"types\": [\r\n                    \"Ghost\",\r\n                    \"Grass\"\r\n                ],\r\n                \"specie\": \"Sea Creeper Pokémon\",\r\n                \"height\": 3.9,\r\n                \"weight\": 210,\r\n                \"abilities\": [\r\n                    \"Steelworker\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 517,\r\n                    \"hp\": 70,\r\n                    \"attack\": 131,\r\n                    \"defense\": 100,\r\n                    \"speedAttack\": 86,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 40\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/dhelmise\"\r\n    },\r\n    {\r\n        \"num\": 782,\r\n        \"name\": \"Jangmo-o\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Jangmo-o\",\r\n                \"description\": \"Jangmo-o is a Dragon type Pokémon introduced in Generation 7. It is known as the Scaly Pokémon.\\nJangmo-o has the pride of a warrior, although it remains humble about its capabilities. In its pursuit to become stronger, it never neglects its training.\\nBecause Jangmo-o uses the scales on its head for both offense and defense, it never turns its back to its enemies. Many Trainers see this behavior and take it as proof that Jangmo-o is a valiant Pokémon.\",\r\n                \"image\": \"images/jangmo-o.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Scaly Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 29.7,\r\n                \"abilities\": [\r\n                    \"Bulletproof\",\r\n                    \"Soundproof\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 45,\r\n                    \"attack\": 55,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 45,\r\n                    \"speedDefense\": 45,\r\n                    \"speed\": 45\r\n                },\r\n                \"evolutions\": [\r\n                    \"jangmo-o\",\r\n                    \"hakamo-o\",\r\n                    \"kommo-o\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/jangmo-o\"\r\n    },\r\n    {\r\n        \"num\": 783,\r\n        \"name\": \"Hakamo-o\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Hakamo-o\",\r\n                \"description\": \"Hakamo-o is a Dragon/Fighting type Pokémon introduced in Generation 7. It is known as the Scaly Pokémon.\\nHakamo-o dances before battle to show its strength, clanging its scales together to make them ring out. When this dance reaches its climax, Hakamo-o bellows a fierce war cry to challenge its opponent.\",\r\n                \"image\": \"images/hakamo-o.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Scaly Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 47,\r\n                \"abilities\": [\r\n                    \"Bulletproof\",\r\n                    \"Soundproof\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 55,\r\n                    \"attack\": 75,\r\n                    \"defense\": 90,\r\n                    \"speedAttack\": 65,\r\n                    \"speedDefense\": 70,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": [\r\n                    \"jangmo-o\",\r\n                    \"hakamo-o\",\r\n                    \"kommo-o\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/hakamo-o\"\r\n    },\r\n    {\r\n        \"num\": 784,\r\n        \"name\": \"Kommo-o\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kommo-o\",\r\n                \"description\": \"Kommo-o is a Dragon/Fighting type Pokémon introduced in Generation 7. It is known as the Scaly Pokémon.\\nThere is a legend that says Kommo-o is covered in glittering scales in order to drive away a great darkness covering the world. The reason these Pokémon seek out battle is to gain the power needed to defeat this darkness. When it detects someone approaching, Kommo-o rings the scales on its tail to announce its presence. It has no desire to battle against weak Pokémon.\",\r\n                \"image\": \"images/kommo-o.jpg\",\r\n                \"types\": [\r\n                    \"Dragon\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Scaly Pokémon\",\r\n                \"height\": 1.6,\r\n                \"weight\": 78.2,\r\n                \"abilities\": [\r\n                    \"Bulletproof\",\r\n                    \"Soundproof\",\r\n                    \"Overcoat\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 75,\r\n                    \"attack\": 110,\r\n                    \"defense\": 125,\r\n                    \"speedAttack\": 100,\r\n                    \"speedDefense\": 105,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": [\r\n                    \"jangmo-o\",\r\n                    \"hakamo-o\",\r\n                    \"kommo-o\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kommo-o\"\r\n    },\r\n    {\r\n        \"num\": 785,\r\n        \"name\": \"Tapu Koko\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tapu Koko\",\r\n                \"description\": \"Tapu Koko is an Electric/Fairy type Pokémon introduced in Generation 7. It is known as the Land Spirit Pokémon.\\nTapu Koko is a special Pokémon that protects the area where it lives. It's called the guardian deity of Melemele Island, one of the islands of the Alola region. Although it's known as a guardian deity, it's a surprisingly fickle Pokémon, and will not necessarily come to your aid if you need help.\\nDespite that, Tapu Koko has a strong sense of curiosity. If it becomes interested in a person or in other Pokémon, it may come to play or battle with them.\",\r\n                \"image\": \"images/tapu-koko.jpg\",\r\n                \"types\": [\r\n                    \"Electric\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Land Spirit Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 20.5,\r\n                \"abilities\": [\r\n                    \"Electric Surge\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 70,\r\n                    \"attack\": 115,\r\n                    \"defense\": 85,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 75,\r\n                    \"speed\": 130\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tapu-koko\"\r\n    },\r\n    {\r\n        \"num\": 786,\r\n        \"name\": \"Tapu Lele\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tapu Lele\",\r\n                \"description\": \"Tapu Lele is a Psychic/Fairy type Pokémon introduced in Generation 7. It is known as the Land Spirit Pokémon.\\nTapu Lele scatters glowing scales that physically affect others - providing stimulation to their bodies and healing their illnesses or injuries. But these scales can be dangerous as well, because a body can’t withstand the changes brought about by contact with too many scales at the same time. It will scatter its scales over humans and Pokémon for its own enjoyment; while it is innocent in one sense, there is also cruelty in the way it casually brings others to ruin.\",\r\n                \"image\": \"images/tapu-lele.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Land Spirit Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 18.6,\r\n                \"abilities\": [\r\n                    \"Psychic Surge\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 70,\r\n                    \"attack\": 85,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 130,\r\n                    \"speedDefense\": 115,\r\n                    \"speed\": 95\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tapu-lele\"\r\n    },\r\n    {\r\n        \"num\": 787,\r\n        \"name\": \"Tapu Bulu\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tapu Bulu\",\r\n                \"description\": \"Tapu Bulu is a Grass/Fairy type Pokémon introduced in Generation 7. It is known as the Land Spirit Pokémon.\\nTapu Bulu has the power to manipulate vegetation and cause it to grow. It can use this power on its own horns - which are made of wood - changing their shape or making them larger. This can come in handy in battle!\\nThis stolid Pokémon is not very active. People’s opinions differ on whether it’s as docile as it seems, or if the reason it doesn’t move much can be chalked up to simple laziness.\",\r\n                \"image\": \"images/tapu-bulu.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Land Spirit Pokémon\",\r\n                \"height\": 1.9,\r\n                \"weight\": 45.5,\r\n                \"abilities\": [\r\n                    \"Grassy Surge\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 70,\r\n                    \"attack\": 130,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 85,\r\n                    \"speedDefense\": 95,\r\n                    \"speed\": 75\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tapu-bulu\"\r\n    },\r\n    {\r\n        \"num\": 788,\r\n        \"name\": \"Tapu Fini\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Tapu Fini\",\r\n                \"description\": \"Tapu Fini is a Water/Fairy type Pokémon introduced in Generation 7. It is known as the Land Spirit Pokémon.\\nTapu Fini is able to create a special water that purifies both mind and body. But it requires that supplicants wishing to obtain the purifying water demonstrate the strength to withstand the tapu's fog.\\nSince it hates to risk harm to itself during battle, Tapu Fini prefers to create a thick fog that puts opponents in a trance and leads them to destroy themselves.\",\r\n                \"image\": \"images/tapu-fini.jpg\",\r\n                \"types\": [\r\n                    \"Water\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Land Spirit Pokémon\",\r\n                \"height\": 1.3,\r\n                \"weight\": 21.2,\r\n                \"abilities\": [\r\n                    \"Misty Surge\",\r\n                    \"Telepathy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 70,\r\n                    \"attack\": 75,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 95,\r\n                    \"speedDefense\": 130,\r\n                    \"speed\": 85\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/tapu-fini\"\r\n    },\r\n    {\r\n        \"num\": 789,\r\n        \"name\": \"Cosmog\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cosmog\",\r\n                \"description\": \"Cosmog is a Psychic type Pokémon introduced in Generation 7. It is known as the Nebula Pokémon.\\nThis extremely rare Pokémon is known to only a select few in Alola. At one time, it was known only by the kings of Alola and their heirs, and it was called the child of the stars.\\nCosmog is very curious and shows no fear of people or Pokémon. If you treat it with any consideration at all, it will take an immediate liking to you. This personality trait often leads it into danger.\",\r\n                \"image\": \"images/cosmog.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Nebula Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 0.1,\r\n                \"abilities\": [\r\n                    \"Unaware\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 200,\r\n                    \"hp\": 43,\r\n                    \"attack\": 29,\r\n                    \"defense\": 31,\r\n                    \"speedAttack\": 29,\r\n                    \"speedDefense\": 31,\r\n                    \"speed\": 37\r\n                },\r\n                \"evolutions\": [\r\n                    \"cosmog\",\r\n                    \"cosmoem\",\r\n                    \"solgaleo\",\r\n                    \"lunala\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cosmog\"\r\n    },\r\n    {\r\n        \"num\": 790,\r\n        \"name\": \"Cosmoem\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Cosmoem\",\r\n                \"description\": \"Cosmoem is a Psychic type Pokémon introduced in Generation 7. It is known as the Protostar Pokémon.\",\r\n                \"image\": \"images/cosmoem.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Protostar Pokémon\",\r\n                \"height\": 0.1,\r\n                \"weight\": 999.9,\r\n                \"abilities\": [\r\n                    \"Sturdy\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 400,\r\n                    \"hp\": 43,\r\n                    \"attack\": 29,\r\n                    \"defense\": 131,\r\n                    \"speedAttack\": 29,\r\n                    \"speedDefense\": 131,\r\n                    \"speed\": 37\r\n                },\r\n                \"evolutions\": [\r\n                    \"cosmog\",\r\n                    \"cosmoem\",\r\n                    \"solgaleo\",\r\n                    \"lunala\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/cosmoem\"\r\n    },\r\n    {\r\n        \"num\": 791,\r\n        \"name\": \"Solgaleo\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Solgaleo\",\r\n                \"description\": \"Solgaleo is a Psychic/Steel type Pokémon introduced in Generation 7. It is known as the Sunne Pokémon.\\nSince ancient times, Solgaleo has been honored as an emissary of the sun. It is referred to with reverence as the beast that devours the sun. Solgaleo's body holds a vast amount of energy, and it shines with light when it's active. It has a flowing mane with a remarkable resemblance to the sun.\\nIt has a powerful signature move, Sunsteel Strike. When it releases its mighty power it takes on a new appearance known as the Radiant Sun phase.\",\r\n                \"image\": \"images/solgaleo.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Sunne Pokémon\",\r\n                \"height\": 3.4,\r\n                \"weight\": 230,\r\n                \"abilities\": [\r\n                    \"Full Metal Body\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 137,\r\n                    \"attack\": 137,\r\n                    \"defense\": 107,\r\n                    \"speedAttack\": 113,\r\n                    \"speedDefense\": 89,\r\n                    \"speed\": 97\r\n                },\r\n                \"evolutions\": [\r\n                    \"cosmog\",\r\n                    \"cosmoem\",\r\n                    \"solgaleo\",\r\n                    \"lunala\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/solgaleo\"\r\n    },\r\n    {\r\n        \"num\": 792,\r\n        \"name\": \"Lunala\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Lunala\",\r\n                \"description\": \"Lunala is a Psychic/Ghost type Pokémon introduced in Generation 7. It is known as the Moone Pokémon.\\nSince ancient times, Lunala has been honored as an emissary of the moon. It is referred to with reverence as the beast that calls the moon. Lunala is constantly absorbing light and converting it into energy. With its wings spread to absorb the surrounding light and glittering like a crescent moon, it resembles a beautiful night sky.\\nIt has a powerful signature move, Moongeist Beam. When it releases its mighty power it takes on a new appearance known as the Full Moon phase.\",\r\n                \"image\": \"images/lunala.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Moone Pokémon\",\r\n                \"height\": 4,\r\n                \"weight\": 120,\r\n                \"abilities\": [\r\n                    \"Shadow Shield\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 137,\r\n                    \"attack\": 113,\r\n                    \"defense\": 89,\r\n                    \"speedAttack\": 137,\r\n                    \"speedDefense\": 107,\r\n                    \"speed\": 97\r\n                },\r\n                \"evolutions\": [\r\n                    \"cosmog\",\r\n                    \"cosmoem\",\r\n                    \"solgaleo\",\r\n                    \"lunala\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/lunala\"\r\n    },\r\n    {\r\n        \"num\": 793,\r\n        \"name\": \"Nihilego\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Nihilego\",\r\n                \"description\": \"Nihilego is a Rock/Poison type Pokémon introduced in Generation 7. It is known as the Parasite Pokémon.\\nNihilego is an Ultra Beast, also known by the code name UB-01 Symbiont.\",\r\n                \"image\": \"images/nihilego.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Parasite Pokémon\",\r\n                \"height\": 1.2,\r\n                \"weight\": 55.5,\r\n                \"abilities\": [\r\n                    \"Beast Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 109,\r\n                    \"attack\": 53,\r\n                    \"defense\": 47,\r\n                    \"speedAttack\": 127,\r\n                    \"speedDefense\": 131,\r\n                    \"speed\": 103\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/nihilego\"\r\n    },\r\n    {\r\n        \"num\": 794,\r\n        \"name\": \"Buzzwole\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Buzzwole\",\r\n                \"description\": \"Buzzwole is a Bug/Fighting type Pokémon introduced in Generation 7. It is known as the Swollen Pokémon.\\nBuzzwole is an Ultra Beast, also known by the code name UB-02 Absorption.\",\r\n                \"image\": \"images/buzzwole.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Swollen Pokémon\",\r\n                \"height\": 2.4,\r\n                \"weight\": 333.6,\r\n                \"abilities\": [\r\n                    \"Beast Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 107,\r\n                    \"attack\": 139,\r\n                    \"defense\": 139,\r\n                    \"speedAttack\": 53,\r\n                    \"speedDefense\": 53,\r\n                    \"speed\": 79\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/buzzwole\"\r\n    },\r\n    {\r\n        \"num\": 795,\r\n        \"name\": \"Pheromosa\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Pheromosa\",\r\n                \"description\": \"Pheromosa is a Bug/Fighting type Pokémon introduced in Generation 7. It is known as the Lissome Pokémon.\\nPheromosa is an Ultra Beast, also known by the code name UB-02 Beauty.\",\r\n                \"image\": \"images/pheromosa.jpg\",\r\n                \"types\": [\r\n                    \"Bug\",\r\n                    \"Fighting\"\r\n                ],\r\n                \"specie\": \"Lissome Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 25,\r\n                \"abilities\": [\r\n                    \"Beast Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 71,\r\n                    \"attack\": 137,\r\n                    \"defense\": 37,\r\n                    \"speedAttack\": 137,\r\n                    \"speedDefense\": 37,\r\n                    \"speed\": 151\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/pheromosa\"\r\n    },\r\n    {\r\n        \"num\": 796,\r\n        \"name\": \"Xurkitree\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Xurkitree\",\r\n                \"description\": \"Xurkitree is an Electric type Pokémon introduced in Generation 7. It is known as the Glowing Pokémon.\\nXurkitree is an Ultra Beast, also known by the code name UB-03 Lighting.\",\r\n                \"image\": \"images/xurkitree.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Glowing Pokémon\",\r\n                \"height\": 3.8,\r\n                \"weight\": 100,\r\n                \"abilities\": [\r\n                    \"Beast Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 83,\r\n                    \"attack\": 89,\r\n                    \"defense\": 71,\r\n                    \"speedAttack\": 173,\r\n                    \"speedDefense\": 71,\r\n                    \"speed\": 83\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/xurkitree\"\r\n    },\r\n    {\r\n        \"num\": 797,\r\n        \"name\": \"Celesteela\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Celesteela\",\r\n                \"description\": \"Celesteela is a Steel/Flying type Pokémon introduced in Generation 7. It is known as the Launch Pokémon.\\nCelesteela is an Ultra Beast, also known by the code name UB-04 Blaster.\",\r\n                \"image\": \"images/celesteela.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Flying\"\r\n                ],\r\n                \"specie\": \"Launch Pokémon\",\r\n                \"height\": 9.2,\r\n                \"weight\": 999.9,\r\n                \"abilities\": [\r\n                    \"Beast Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 97,\r\n                    \"attack\": 101,\r\n                    \"defense\": 103,\r\n                    \"speedAttack\": 107,\r\n                    \"speedDefense\": 101,\r\n                    \"speed\": 61\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/celesteela\"\r\n    },\r\n    {\r\n        \"num\": 798,\r\n        \"name\": \"Kartana\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Kartana\",\r\n                \"description\": \"Kartana is a Grass/Steel type Pokémon introduced in Generation 7. It is known as the Drawn Sword Pokémon.\\nKartana is an Ultra Beast, also known by the code name UB-04 Blade.\",\r\n                \"image\": \"images/kartana.jpg\",\r\n                \"types\": [\r\n                    \"Grass\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Drawn Sword Pokémon\",\r\n                \"height\": 0.3,\r\n                \"weight\": 0.1,\r\n                \"abilities\": [\r\n                    \"Beast Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 59,\r\n                    \"attack\": 181,\r\n                    \"defense\": 131,\r\n                    \"speedAttack\": 59,\r\n                    \"speedDefense\": 31,\r\n                    \"speed\": 109\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/kartana\"\r\n    },\r\n    {\r\n        \"num\": 799,\r\n        \"name\": \"Guzzlord\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Guzzlord\",\r\n                \"description\": \"Guzzlord is a Dark/Dragon type Pokémon introduced in Generation 7. It is known as the Junkivore Pokémon.\\nGuzzlord is an Ultra Beast, also known by the code name UB-05 Glutton.\",\r\n                \"image\": \"images/guzzlord.jpg\",\r\n                \"types\": [\r\n                    \"Dark\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Junkivore Pokémon\",\r\n                \"height\": 5.5,\r\n                \"weight\": 888,\r\n                \"abilities\": [\r\n                    \"Beast Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 223,\r\n                    \"attack\": 101,\r\n                    \"defense\": 53,\r\n                    \"speedAttack\": 97,\r\n                    \"speedDefense\": 53,\r\n                    \"speed\": 43\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/guzzlord\"\r\n    },\r\n    {\r\n        \"num\": 800,\r\n        \"name\": \"Necrozma\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Necrozma\",\r\n                \"description\": \"Necrozma is a Psychic type Pokémon introduced in Generation 7. It is known as the Prism Pokémon.\",\r\n                \"image\": \"images/necrozma.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\"\r\n                ],\r\n                \"specie\": \"Prism Pokémon\",\r\n                \"height\": 2.4,\r\n                \"weight\": 230,\r\n                \"abilities\": [\r\n                    \"Prism Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 97,\r\n                    \"attack\": 107,\r\n                    \"defense\": 101,\r\n                    \"speedAttack\": 127,\r\n                    \"speedDefense\": 89,\r\n                    \"speed\": 79\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Dusk Mane Necrozma\",\r\n                \"description\": \"Necrozma is a Psychic type Pokémon introduced in Generation 7. It is known as the Prism Pokémon.\",\r\n                \"image\": \"images/necrozma-dusk-mane.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Prism Pokémon\",\r\n                \"height\": 3.8,\r\n                \"weight\": 460,\r\n                \"abilities\": [\r\n                    \"Prism Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 97,\r\n                    \"attack\": 157,\r\n                    \"defense\": 127,\r\n                    \"speedAttack\": 113,\r\n                    \"speedDefense\": 109,\r\n                    \"speed\": 77\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Dawn Wings Necrozma\",\r\n                \"description\": \"Necrozma is a Psychic type Pokémon introduced in Generation 7. It is known as the Prism Pokémon.\",\r\n                \"image\": \"images/necrozma-dawn-wings.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Prism Pokémon\",\r\n                \"height\": 4.2,\r\n                \"weight\": 350,\r\n                \"abilities\": [\r\n                    \"Prism Armor\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 680,\r\n                    \"hp\": 97,\r\n                    \"attack\": 113,\r\n                    \"defense\": 109,\r\n                    \"speedAttack\": 157,\r\n                    \"speedDefense\": 127,\r\n                    \"speed\": 77\r\n                },\r\n                \"evolutions\": []\r\n            },\r\n            {\r\n                \"name\": \"Ultra Necrozma\",\r\n                \"description\": \"Necrozma is a Psychic type Pokémon introduced in Generation 7. It is known as the Prism Pokémon.\",\r\n                \"image\": \"images/necrozma-ultra.jpg\",\r\n                \"types\": [\r\n                    \"Psychic\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Prism Pokémon\",\r\n                \"height\": 7.5,\r\n                \"weight\": 230,\r\n                \"abilities\": [\r\n                    \"Neuroforce\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 754,\r\n                    \"hp\": 97,\r\n                    \"attack\": 167,\r\n                    \"defense\": 97,\r\n                    \"speedAttack\": 167,\r\n                    \"speedDefense\": 97,\r\n                    \"speed\": 129\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/necrozma\"\r\n    },\r\n    {\r\n        \"num\": 801,\r\n        \"name\": \"Magearna\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Magearna\",\r\n                \"description\": \"Magearna is a Steel/Fairy type Pokémon introduced in Generation 7. It is known as the Artificial Pokémon.\\nMagearna is a Mythical Pokémon that was created by a scientist of uncommon genius 500 years ago. Magearna has the power to perceive the emotions, thoughts, and feelings of other Pokémon. If a Pokémon is injured, Magearna will feel the other’s pain and suffering and will try as hard as it can to save that Pokémon.\\nMagearna's real body is the spherical construction in its chest called the Soul-Heart, created by a scientist who gathered the life energy from Pokémon.\\nMagearna is obtainable in Sun/Moon by scanning a special QR code.\",\r\n                \"image\": \"images/magearna.jpg\",\r\n                \"types\": [\r\n                    \"Steel\",\r\n                    \"Fairy\"\r\n                ],\r\n                \"specie\": \"Artificial Pokémon\",\r\n                \"height\": 1,\r\n                \"weight\": 80.5,\r\n                \"abilities\": [\r\n                    \"Soul-Heart\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 80,\r\n                    \"attack\": 95,\r\n                    \"defense\": 115,\r\n                    \"speedAttack\": 130,\r\n                    \"speedDefense\": 115,\r\n                    \"speed\": 65\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/magearna\"\r\n    },\r\n    {\r\n        \"num\": 802,\r\n        \"name\": \"Marshadow\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Marshadow\",\r\n                \"description\": \"Marshadow is a Fighting/Ghost type Pokémon introduced in Generation 7. It is known as the Gloomdweller Pokémon.\",\r\n                \"image\": \"images/marshadow.jpg\",\r\n                \"types\": [\r\n                    \"Fighting\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Gloomdweller Pokémon\",\r\n                \"height\": 0.7,\r\n                \"weight\": 22.2,\r\n                \"abilities\": [\r\n                    \"Technician\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 90,\r\n                    \"attack\": 125,\r\n                    \"defense\": 80,\r\n                    \"speedAttack\": 90,\r\n                    \"speedDefense\": 90,\r\n                    \"speed\": 125\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/marshadow\"\r\n    },\r\n    {\r\n        \"num\": 803,\r\n        \"name\": \"Poipole\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Poipole\",\r\n                \"description\": \"Poipole is a Poison type Pokémon introduced in Generation 7. It is known as the Poison Pin Pokémon.\\nPoipole is an Ultra Beast introduced in Pokémon Ultra Sun & Ultra Moon, also known by the code name UB Adhesive.\\nPoipole displays many emotions, and it’s said to be able to understand human speech if it spends enough time together with them. Their large heads are filled with venom, and they fire this venom from the poisonous needles on top of them.\",\r\n                \"image\": \"images/poipole.jpg\",\r\n                \"types\": [\r\n                    \"Poison\"\r\n                ],\r\n                \"specie\": \"Poison Pin Pokémon\",\r\n                \"height\": 0.6,\r\n                \"weight\": 1.8,\r\n                \"abilities\": [\r\n                    \"Beast Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 420,\r\n                    \"hp\": 67,\r\n                    \"attack\": 73,\r\n                    \"defense\": 67,\r\n                    \"speedAttack\": 73,\r\n                    \"speedDefense\": 67,\r\n                    \"speed\": 73\r\n                },\r\n                \"evolutions\": [\r\n                    \"poipole\",\r\n                    \"naganadel\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/poipole\"\r\n    },\r\n    {\r\n        \"num\": 804,\r\n        \"name\": \"Naganadel\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Naganadel\",\r\n                \"description\": \"Naganadel is a Poison/Dragon type Pokémon introduced in Generation 7. It is known as the Poison Pin Pokémon.\\nNaganadel is an Ultra Beast introduced in Pokémon Ultra Sun & Ultra Moon.\",\r\n                \"image\": \"images/naganadel.jpg\",\r\n                \"types\": [\r\n                    \"Poison\",\r\n                    \"Dragon\"\r\n                ],\r\n                \"specie\": \"Poison Pin Pokémon\",\r\n                \"height\": 3.6,\r\n                \"weight\": 150,\r\n                \"abilities\": [\r\n                    \"Beast Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 540,\r\n                    \"hp\": 73,\r\n                    \"attack\": 73,\r\n                    \"defense\": 73,\r\n                    \"speedAttack\": 127,\r\n                    \"speedDefense\": 73,\r\n                    \"speed\": 121\r\n                },\r\n                \"evolutions\": [\r\n                    \"poipole\",\r\n                    \"naganadel\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/naganadel\"\r\n    },\r\n    {\r\n        \"num\": 805,\r\n        \"name\": \"Stakataka\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Stakataka\",\r\n                \"description\": \"Stakataka is a Rock/Steel type Pokémon introduced in Generation 7. It is known as the Rampart Pokémon.\\nStakataka is an Ultra Beast introduced in Pokémon Ultra Sun & Ultra Moon, also known by the code name UB Assembly.\\nWhile Stakataka may appear to be made up of stones stacked atop one another, apparently each \\\"stone\\\" is in fact a separate life-form, and this UB is made up of an assemblage of these life-forms.\\nWhen confronting another, or when feeling particularly enraged, the eyes on each of these stones begin to glow red.\",\r\n                \"image\": \"images/stakataka.jpg\",\r\n                \"types\": [\r\n                    \"Rock\",\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Rampart Pokémon\",\r\n                \"height\": 5.5,\r\n                \"weight\": 820,\r\n                \"abilities\": [\r\n                    \"Beast Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 61,\r\n                    \"attack\": 131,\r\n                    \"defense\": 211,\r\n                    \"speedAttack\": 53,\r\n                    \"speedDefense\": 101,\r\n                    \"speed\": 13\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/stakataka\"\r\n    },\r\n    {\r\n        \"num\": 806,\r\n        \"name\": \"Blacephalon\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Blacephalon\",\r\n                \"description\": \"Blacephalon is a Fire/Ghost type Pokémon introduced in Generation 7. It is known as the Fireworks Pokémon.\\nBlacephalon is an Ultra Beast introduced in Pokémon Ultra Sun & Ultra Moon, also known by the code name UB Burst.\\nBlacephalon tricks targets into letting their guard down as it draws near with its funny gait. Its head is made up of collection of curious sparks, and it appears to have the wondrous ability to freely remove its own head and make it explode.\",\r\n                \"image\": \"images/blacephalon.jpg\",\r\n                \"types\": [\r\n                    \"Fire\",\r\n                    \"Ghost\"\r\n                ],\r\n                \"specie\": \"Fireworks Pokémon\",\r\n                \"height\": 1.8,\r\n                \"weight\": 13,\r\n                \"abilities\": [\r\n                    \"Beast Boost\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 570,\r\n                    \"hp\": 53,\r\n                    \"attack\": 127,\r\n                    \"defense\": 53,\r\n                    \"speedAttack\": 151,\r\n                    \"speedDefense\": 79,\r\n                    \"speed\": 107\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/blacephalon\"\r\n    },\r\n    {\r\n        \"num\": 807,\r\n        \"name\": \"Zeraora\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Zeraora\",\r\n                \"description\": \"Zeraora is an Electric type Pokémon introduced in Generation 7. It is known as the Thunderclap Pokémon.\\nZeraora is mythical Pokémon introduced in Pokémon Ultra Sun & Ultra Moon.\\nThis Pokémon creates a powerful magnetic field by emitting strong electric currents from the pads on its hands and feet. Unlike most Electric-type Pokémon, Zeraora doesn’t have an organ within its body that can produce electricity. However, it is able to gather and store electricity from outside sources, then use it as its own electric energy.\",\r\n                \"image\": \"images/zeraora.jpg\",\r\n                \"types\": [\r\n                    \"Electric\"\r\n                ],\r\n                \"specie\": \"Thunderclap Pokémon\",\r\n                \"height\": 1.5,\r\n                \"weight\": 44.5,\r\n                \"abilities\": [\r\n                    \"Volt Absorb\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 88,\r\n                    \"attack\": 112,\r\n                    \"defense\": 75,\r\n                    \"speedAttack\": 102,\r\n                    \"speedDefense\": 80,\r\n                    \"speed\": 143\r\n                },\r\n                \"evolutions\": []\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/zeraora\"\r\n    },\r\n    {\r\n        \"num\": 808,\r\n        \"name\": \"Meltan\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Meltan\",\r\n                \"description\": \"Meltan is a Steel type Pokémon introduced in Generation 7. It is known as the Hex Nut Pokémon.\\nMost of Meltan's body is made from liquid metal, and its shape is very fluid. It can use its liquid arms and legs to corrode metal and absorb it into its own body. Meltan generates electricity using the metal it absorbs from outside sources. It uses this electricity as an energy source and also as an attack that can be fired from its eye.\\nMeltan is a new mythical Pokémon available in Pokémon Let's Go Pikachu & Let's Go Eevee. It is obtained by connecting Let's Go Pikachu or Let's Go Eevee with the smartphone game Pokémon GO. First, send any Pokémon from GO to Let's Go to receive a Mystery Box item in GO. Opening the box causes Meltan to spawn in Pokémon GO. These Meltan can be caught and then sent over to Let's Go Pikachu/Eevee.\\nMeltan evolves into Melmetal in Pokémon GO, with 400 Meltan Candies.\\nNote: Meltan has an ability assigned in the code for Pokémon Let's Go, even though abilities are not available.\",\r\n                \"image\": \"images/meltan.jpg\",\r\n                \"types\": [\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Hex Nut Pokémon\",\r\n                \"height\": 0.2,\r\n                \"weight\": 8,\r\n                \"abilities\": [\r\n                    \"Magnet Pull\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 300,\r\n                    \"hp\": 46,\r\n                    \"attack\": 65,\r\n                    \"defense\": 65,\r\n                    \"speedAttack\": 55,\r\n                    \"speedDefense\": 35,\r\n                    \"speed\": 34\r\n                },\r\n                \"evolutions\": [\r\n                    \"meltan\",\r\n                    \"melmetal\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/meltan\"\r\n    },\r\n    {\r\n        \"num\": 809,\r\n        \"name\": \"Melmetal\",\r\n        \"variations\": [\r\n            {\r\n                \"name\": \"Melmetal\",\r\n                \"description\": \"Melmetal is a Steel type Pokémon introduced in Generation 7. It is known as the Hex Nut Pokémon.\\nMelmetal evolves from Meltan only in Pokémon GO, with 400 Meltan Candies. Candies can be obtained by catching many Meltan, have it travel as a Buddy Pokémon, or transferring some to Pokémon Let's Go.\\nMelmetal has an exclusive move, Double Iron Bash.\\nNote: Meltan has an ability assigned in the code for Pokémon Let's Go, even though abilities are not available.\",\r\n                \"image\": \"images/melmetal.jpg\",\r\n                \"types\": [\r\n                    \"Steel\"\r\n                ],\r\n                \"specie\": \"Hex Nut Pokémon\",\r\n                \"height\": 2.5,\r\n                \"weight\": 800,\r\n                \"abilities\": [\r\n                    \"Iron Fist\"\r\n                ],\r\n                \"stats\": {\r\n                    \"total\": 600,\r\n                    \"hp\": 135,\r\n                    \"attack\": 143,\r\n                    \"defense\": 143,\r\n                    \"speedAttack\": 80,\r\n                    \"speedDefense\": 65,\r\n                    \"speed\": 34\r\n                },\r\n                \"evolutions\": [\r\n                    \"meltan\",\r\n                    \"melmetal\"\r\n                ]\r\n            }\r\n        ],\r\n        \"link\": \"https://pokemondb.net/pokedex/melmetal\"\r\n    }\r\n]"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Dockerfile",
    "content": "#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.\r\n\r\nFROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base\r\nWORKDIR /app\r\nEXPOSE 80\r\nEXPOSE 443\r\n\r\nFROM mcr.microsoft.com/dotnet/sdk:6.0 AS build\r\nWORKDIR /src\r\nCOPY [\"Minimal.Api.Pokedex.csproj\", \".\"]\r\nRUN dotnet restore \"./Minimal.Api.Pokedex.csproj\"\r\nCOPY . .\r\nWORKDIR \"/src/.\"\r\nRUN dotnet build \"Minimal.Api.Pokedex.csproj\" -c Release -o /app/build\r\n\r\nFROM build AS publish\r\nRUN dotnet publish \"Minimal.Api.Pokedex.csproj\" -c Release -o /app/publish\r\n\r\nFROM base AS final\r\nWORKDIR /app\r\nCOPY --from=publish /app/publish .\r\nENTRYPOINT [\"dotnet\", \"Minimal.Api.Pokedex.dll\"]"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Extensions/DependencyInjection.cs",
    "content": "﻿using Minimal.Api.Pokedex.Services;\r\n\r\nnamespace Minimal.Api.Pokedex.Extensions\r\n{\r\n    public static class DependencyInjection\r\n    {\r\n        public static IServiceCollection AddPokedexApi(this IServiceCollection services)\r\n        {\r\n            services.AddScoped<IPokedexRepository, PokedexRepository>();\r\n            services.AddScoped<IPokedexService, PokedexService>();\r\n            return services;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Minimal.Api.Pokedex.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <ImplicitUsings>enable</ImplicitUsings>\n    <UserSecretsId>c631830b-e4be-4f6a-bc34-fe87e2fe09c9</UserSecretsId>\n    <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>\n    <DockerfileContext>.</DockerfileContext>\n    <LangVersion>preview</LangVersion>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <NoWarn>$(NoWarn);1591</NoWarn>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.VisualStudio.Azure.Containers.Tools.Targets\" Version=\"1.14.0\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" />\n    <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Models/PokedexPagedResponse.cs",
    "content": "﻿namespace Minimal.Api.Pokedex.Models\r\n{\r\n    public class PokedexPagedResponse : PokedexResponse\r\n    {\r\n        public int Page { get; set; }\r\n        public int TotalPages { get; set; }\r\n        public int TotalResults { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Models/PokedexResponse.cs",
    "content": "﻿namespace Minimal.Api.Pokedex.Models\r\n{\r\n    public class PokedexResponse\r\n    {\r\n        public PokemonListItemEntity[] Data { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Models/PokemonEntity.cs",
    "content": "﻿namespace Minimal.Api.Pokedex.Models\r\n{\r\n    public class PokemonEntity\r\n    {\r\n        public int Num { get; set; }\r\n        public string Name { get; set; }\r\n        public Variation[] Variations { get; set; }\r\n        public string Link { get; set; }\r\n    }\r\n\r\n    public class Variation\r\n    {\r\n        public string Name { get; set; }\r\n        public string Description { get; set; }\r\n        public string Image { get; set; }\r\n        public string[] Types { get; set; }\r\n        public string Specie { get; set; }\r\n        public float Height { get; set; }\r\n        public float Weight { get; set; }\r\n        public string[] Abilities { get; set; }\r\n        public Stats Stats { get; set; }\r\n        public string[] Evolutions { get; set; }\r\n    }\r\n\r\n    public class Stats\r\n    {\r\n        public int Total { get; set; }\r\n        public int Hp { get; set; }\r\n        public int Attack { get; set; }\r\n        public int Defense { get; set; }\r\n        public int SpeedAttack { get; set; }\r\n        public int SpeedDefense { get; set; }\r\n        public int Speed { get; set; }\r\n    }\r\n\r\n}"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Models/PokemonListItemEntity.cs",
    "content": "﻿namespace Minimal.Api.Pokedex.Models\r\n{\r\n    public class PokemonListItemEntity\r\n    {\r\n        public int Num { get; set; }\r\n        public string Name { get; set; }\r\n        public string Image { get; set; }\r\n\r\n    }\r\n}"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Models/RouteConstants.cs",
    "content": "﻿namespace Minimal.Api.Pokedex.Models\r\n{\r\n    public class RouteConstants\r\n    {\r\n        public const string PagedPokemonListing = \"/pokedex\";\r\n        public const string PokemonRead = \"/pokedex/{name}\";\r\n        public const string AllPokemonListing = \"/pokedex/all\";\r\n        public const string PokemonSearch = \"/pokedex/search\";\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/PokedexApiEndpoint.cs",
    "content": "﻿using Minimal.Api.Pokedex.Models;\r\nusing Minimal.Api.Pokedex.Services;\r\n\r\nnamespace Minimal.Api.Pokedex\r\n{\r\n    public static class PokedexApiEndpoint\r\n    {\r\n        public static IEndpointRouteBuilder MapPokedexApiRoutes(this IEndpointRouteBuilder builder)\r\n        {\r\n            MapPagedPokemonListing(builder);\r\n            MapPokemonRead(builder);\r\n            MapAllPokemonListing(builder);\r\n            MapSearchingPokemon(builder);\r\n            return builder;\r\n        }\r\n\r\n        private static void MapSearchingPokemon(IEndpointRouteBuilder builder)\r\n        {\r\n            builder.MapGet(RouteConstants.PokemonSearch, async (string query, int? page, int? pageSize, IPokedexService service) =>\r\n            {\r\n                if (string.IsNullOrWhiteSpace(query))\r\n                {\r\n                    return Results.BadRequest();\r\n                }\r\n                return Results.Ok(await service.SearchAsync(query, page ?? 1, pageSize ?? 20));\r\n            })\r\n            .Produces<PokedexPagedResponse>(StatusCodes.Status200OK)\r\n            .Produces<PokedexPagedResponse>(StatusCodes.Status400BadRequest);\r\n        }\r\n\r\n        private static void MapAllPokemonListing(IEndpointRouteBuilder builder)\r\n        {\r\n            builder.MapGet(RouteConstants.AllPokemonListing, async (IPokedexService service) =>\r\n            {\r\n                return await service.GetAllAsync();\r\n            })\r\n            .Produces<PokedexResponse>(StatusCodes.Status200OK);\r\n        }\r\n\r\n        private static void MapPokemonRead(IEndpointRouteBuilder builder)\r\n        {\r\n            builder.MapGet(RouteConstants.PokemonRead, async (string name, IPokedexService service) =>\r\n            {\r\n                var pokemon = await service.GetAsync(name);\r\n                if (pokemon == null)\r\n                {\r\n                    return Results.NotFound();\r\n                }\r\n                return Results.Ok(pokemon);\r\n            })\r\n            .Produces<PokemonEntity>(StatusCodes.Status200OK)\r\n            .ProducesProblem(StatusCodes.Status404NotFound);\r\n        }\r\n\r\n        private static void MapPagedPokemonListing(IEndpointRouteBuilder builder)\r\n        {\r\n            builder.MapGet(RouteConstants.PagedPokemonListing, async (int? page, int? pageSize, IPokedexService service) =>\r\n            {\r\n                return await service.GetAsync(page ?? 1, pageSize ?? 20);\r\n            })\r\n            .Produces<PokedexPagedResponse>(StatusCodes.Status200OK);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Program.cs",
    "content": "using Minimal.Api.Pokedex;\nusing Minimal.Api.Pokedex.Extensions;\nusing Scalar.AspNetCore;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddOpenApi();\nbuilder.Services.AddPokedexApi();\nvar app = builder.Build();\n\napp.UseStaticFiles();\napp.MapOpenApi();\napp.MapScalarApiReference();\napp.MapPokedexApiRoutes();\n\napp.Run();\n"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Services/IPokedexRepository.cs",
    "content": "﻿using Minimal.Api.Pokedex.Models;\r\n\r\nnamespace Minimal.Api.Pokedex.Services\r\n{\r\n    public interface IPokedexRepository\r\n    {\r\n        public Task<PokemonEntity[]> Read();\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Services/IPokedexService.cs",
    "content": "﻿using Minimal.Api.Pokedex.Models;\r\n\r\nnamespace Minimal.Api.Pokedex.Services\r\n{\r\n    public interface IPokedexService\r\n    {\r\n        public Task<PokedexPagedResponse> GetAsync(int page, int pageSize);\r\n        public Task<PokemonEntity> GetAsync(string name);\r\n        public Task<PokedexResponse> GetAllAsync();\r\n        public Task<PokedexPagedResponse> SearchAsync(string query, int page, int pageSize);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Services/PokedexRepository.cs",
    "content": "﻿using System.Text.Json;\r\nusing Microsoft.AspNetCore.Http.Json;\r\nusing Minimal.Api.Pokedex.Models;\r\n\r\nnamespace Minimal.Api.Pokedex.Services\r\n{\r\n    public class PokedexRepository : IPokedexRepository\r\n    {\r\n        private readonly string _dataFile;\r\n        private IList<PokemonEntity> _pokemons = null;\r\n        private JsonSerializerOptions _jsonOptions = new JsonSerializerOptions\r\n        {\r\n            PropertyNameCaseInsensitive = true\r\n        };\r\n        public PokedexRepository(IWebHostEnvironment environment)\r\n        {\r\n            _dataFile = Path.Combine(environment.ContentRootPath,\"Data\",\"pokemon.json\");\r\n        }\r\n\r\n        public async Task<PokemonEntity[]> Read()\r\n        {\r\n            if(_pokemons == null) \r\n                _pokemons = await LoadPokemons();\r\n            return _pokemons.ToArray();\r\n        }\r\n\r\n        private async Task<IList<PokemonEntity>> LoadPokemons()\r\n        {\r\n            var data = await File.ReadAllTextAsync(_dataFile);\r\n            var pokemons = new List<PokemonEntity>();\r\n            using (var document = JsonDocument.Parse(data))\r\n            {\r\n                foreach(var item in document.RootElement.EnumerateArray())\r\n                {\r\n                    pokemons.Add(JsonSerializer.Deserialize<PokemonEntity>(item, _jsonOptions));\r\n                }\r\n            }\r\n            return pokemons;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/Services/PokedexService.cs",
    "content": "﻿using Minimal.Api.Pokedex.Models;\r\n\r\nnamespace Minimal.Api.Pokedex.Services\r\n{\r\n    public class PokedexService : IPokedexService\r\n    {\r\n        private readonly IPokedexRepository _pokedexRepository;\r\n\r\n        public PokedexService(IPokedexRepository pokedexRepository)\r\n        {\r\n            _pokedexRepository = pokedexRepository;\r\n        }\r\n        public async Task<PokedexResponse> GetAllAsync()\r\n        {\r\n            var pokemons = await _pokedexRepository.Read();\r\n            return BuildResponse(pokemons);\r\n        }\r\n\r\n        public async Task<PokedexPagedResponse> GetAsync(int page, int pageSize)\r\n        {\r\n            var pokemons = await _pokedexRepository.Read();\r\n            return BuildPagedResponse(page, pageSize, pokemons);\r\n        }\r\n\r\n        public async Task<PokemonEntity> GetAsync(string name)\r\n        {\r\n            var pokemons = await _pokedexRepository.Read();\r\n            return pokemons.FirstOrDefault(p => p.Name.ToLowerInvariant() == name.ToLowerInvariant());\r\n        }\r\n\r\n        public async Task<PokedexPagedResponse> SearchAsync(string query, int page, int pageSize)\r\n        {\r\n            var pokemons = await _pokedexRepository.Read();\r\n            var filteredPokemons = pokemons.Where(p => {\r\n                    var variation = p.Variations[0];\r\n                    return variation.Name.ToLowerInvariant().Contains(query.ToLowerInvariant()) ||\r\n                           variation.Description.ToLowerInvariant().Contains(query.ToLowerInvariant()) ||\r\n                           variation.Image.ToLowerInvariant().Contains(query.ToLowerInvariant()) ||\r\n                           variation.Specie.ToLowerInvariant().Contains(query.ToLowerInvariant());\r\n                });\r\n            return BuildPagedResponse(page, pageSize, filteredPokemons.ToArray());\r\n        }\r\n\r\n        private PokedexPagedResponse BuildPagedResponse(int page, int pageSize, PokemonEntity[] pokemons)\r\n        {\r\n            var pokemonCount = pokemons.Count();\r\n            var totalaPages = Convert.ToInt32(Math.Ceiling((double)pokemonCount / pageSize));\r\n            int skipCount = (page - 1) * pageSize;\r\n            return new PokedexPagedResponse\r\n            {\r\n                Data = pokemons.Skip(skipCount).Take(pageSize).Select(p => new PokemonListItemEntity\r\n                {\r\n                    Num = p.Num,\r\n                    Name = p.Name,\r\n                    Image = p.Variations[0].Image\r\n                }).ToArray(),\r\n                Page = page,\r\n                TotalPages = totalaPages,\r\n                TotalResults = pokemonCount\r\n            };\r\n        }\r\n\r\n        private static PokedexResponse BuildResponse(PokemonEntity[] pokemons)\r\n        {\r\n            return new PokedexResponse\r\n            {\r\n                Data = pokemons.Select(p => new PokemonListItemEntity\r\n                {\r\n                    Num = p.Num,\r\n                    Name = p.Name,\r\n                    Image = p.Variations[0].Image\r\n                }).ToArray(),\r\n            };\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/appsettings.Development.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft.AspNetCore\": \"Warning\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/mini/minimal-api-pokedex/src/Minimal.Api.Pokedex/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft.AspNetCore\": \"Warning\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/Pages/Index.cshtml",
    "content": "@page \r\n<!DOCTYPE html>\r\n<!--\r\nCopyright 2012 Mozilla Foundation\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n    http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n\r\nAdobe CMap resources are covered by their own copyright but the same license:\r\n\r\n    Copyright 1990-2015 Adobe Systems Incorporated.\r\n\r\nSee https://github.com/adobe-type-tools/cmap-resources\r\n-->\r\n<html dir=\"ltr\" mozdisallowselectionprint>\r\n<head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\r\n    <meta name=\"google\" content=\"notranslate\">\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>PDF.js viewer</title>\r\n\r\n\r\n    <link rel=\"stylesheet\" href=\"/js/pdfjs-viewer/viewer.css\">\r\n\r\n\r\n    <!-- This snippet is used in production (included from viewer.html) -->\r\n    <link rel=\"resource\" type=\"application/l10n\" href=\"/js/pdfjs-viewer/locale/locale.properties\">\r\n    <script src=\"/js/pdfjs-viewer/pdf.worker.js\"></script>\r\n    <script src=\"/js/pdfjs-viewer/pdf.js\"></script>\r\n    <script src=\"/js/pdfjs-viewer/viewer.js\"></script>\r\n\r\n    <script>\r\n        window.addEventListener(\"webviewerloaded\", function () {\r\n            PDFViewerApplicationOptions.set('defaultUrl', '/3386325.pdf');\r\n        });\r\n    </script>\r\n</head>\r\n\r\n<body tabindex=\"1\">\r\n    <div id=\"outerContainer\">\r\n\r\n        <div id=\"sidebarContainer\">\r\n            <div id=\"toolbarSidebar\">\r\n                <div id=\"toolbarSidebarLeft\">\r\n                    <div class=\"splitToolbarButton toggled\">\r\n                        <button id=\"viewThumbnail\" class=\"toolbarButton toggled\" title=\"Show Thumbnails\" tabindex=\"2\" data-l10n-id=\"thumbs\">\r\n                            <span data-l10n-id=\"thumbs_label\">Thumbnails</span>\r\n                        </button>\r\n                        <button id=\"viewOutline\" class=\"toolbarButton\" title=\"Show Document Outline (double-click to expand/collapse all items)\" tabindex=\"3\" data-l10n-id=\"document_outline\">\r\n                            <span data-l10n-id=\"document_outline_label\">Document Outline</span>\r\n                        </button>\r\n                        <button id=\"viewAttachments\" class=\"toolbarButton\" title=\"Show Attachments\" tabindex=\"4\" data-l10n-id=\"attachments\">\r\n                            <span data-l10n-id=\"attachments_label\">Attachments</span>\r\n                        </button>\r\n                        <button id=\"viewLayers\" class=\"toolbarButton\" title=\"Show Layers (double-click to reset all layers to the default state)\" tabindex=\"5\" data-l10n-id=\"layers\">\r\n                            <span data-l10n-id=\"layers_label\">Layers</span>\r\n                        </button>\r\n                    </div>\r\n                </div>\r\n\r\n                <div id=\"toolbarSidebarRight\">\r\n                    <div id=\"outlineOptionsContainer\" class=\"hidden\">\r\n                        <div class=\"verticalToolbarSeparator\"></div>\r\n\r\n                        <button id=\"currentOutlineItem\" class=\"toolbarButton\" disabled=\"disabled\" title=\"Find Current Outline Item\" tabindex=\"6\" data-l10n-id=\"current_outline_item\">\r\n                            <span data-l10n-id=\"current_outline_item_label\">Current Outline Item</span>\r\n                        </button>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <div id=\"sidebarContent\">\r\n                <div id=\"thumbnailView\">\r\n                </div>\r\n                <div id=\"outlineView\" class=\"hidden\">\r\n                </div>\r\n                <div id=\"attachmentsView\" class=\"hidden\">\r\n                </div>\r\n                <div id=\"layersView\" class=\"hidden\">\r\n                </div>\r\n            </div>\r\n            <div id=\"sidebarResizer\"></div>\r\n        </div>  <!-- sidebarContainer -->\r\n\r\n        <div id=\"mainContainer\">\r\n            <div class=\"findbar hidden doorHanger\" id=\"findbar\">\r\n                <div id=\"findbarInputContainer\">\r\n                    <input id=\"findInput\" class=\"toolbarField\" title=\"Find\" placeholder=\"Find in document…\" tabindex=\"91\" data-l10n-id=\"find_input\">\r\n                    <div class=\"splitToolbarButton\">\r\n                        <button id=\"findPrevious\" class=\"toolbarButton findPrevious\" title=\"Find the previous occurrence of the phrase\" tabindex=\"92\" data-l10n-id=\"find_previous\">\r\n                            <span data-l10n-id=\"find_previous_label\">Previous</span>\r\n                        </button>\r\n                        <div class=\"splitToolbarButtonSeparator\"></div>\r\n                        <button id=\"findNext\" class=\"toolbarButton findNext\" title=\"Find the next occurrence of the phrase\" tabindex=\"93\" data-l10n-id=\"find_next\">\r\n                            <span data-l10n-id=\"find_next_label\">Next</span>\r\n                        </button>\r\n                    </div>\r\n                </div>\r\n\r\n                <div id=\"findbarOptionsOneContainer\">\r\n                    <input type=\"checkbox\" id=\"findHighlightAll\" class=\"toolbarField\" tabindex=\"94\">\r\n                    <label for=\"findHighlightAll\" class=\"toolbarLabel\" data-l10n-id=\"find_highlight\">Highlight all</label>\r\n                    <input type=\"checkbox\" id=\"findMatchCase\" class=\"toolbarField\" tabindex=\"95\">\r\n                    <label for=\"findMatchCase\" class=\"toolbarLabel\" data-l10n-id=\"find_match_case_label\">Match case</label>\r\n                </div>\r\n                <div id=\"findbarOptionsTwoContainer\">\r\n                    <input type=\"checkbox\" id=\"findEntireWord\" class=\"toolbarField\" tabindex=\"96\">\r\n                    <label for=\"findEntireWord\" class=\"toolbarLabel\" data-l10n-id=\"find_entire_word_label\">Whole words</label>\r\n                    <span id=\"findResultsCount\" class=\"toolbarLabel hidden\"></span>\r\n                </div>\r\n\r\n                <div id=\"findbarMessageContainer\">\r\n                    <span id=\"findMsg\" class=\"toolbarLabel\"></span>\r\n                </div>\r\n            </div>  <!-- findbar -->\r\n\r\n            <div id=\"secondaryToolbar\" class=\"secondaryToolbar hidden doorHangerRight\">\r\n                <div id=\"secondaryToolbarButtonContainer\">\r\n                    <button id=\"secondaryPresentationMode\" class=\"secondaryToolbarButton presentationMode visibleLargeView\" title=\"Switch to Presentation Mode\" tabindex=\"51\" data-l10n-id=\"presentation_mode\">\r\n                        <span data-l10n-id=\"presentation_mode_label\">Presentation Mode</span>\r\n                    </button>\r\n\r\n                    <button id=\"secondaryOpenFile\" class=\"secondaryToolbarButton openFile visibleLargeView\" title=\"Open File\" tabindex=\"52\" data-l10n-id=\"open_file\">\r\n                        <span data-l10n-id=\"open_file_label\">Open</span>\r\n                    </button>\r\n\r\n                    <button id=\"secondaryPrint\" class=\"secondaryToolbarButton print visibleMediumView\" title=\"Print\" tabindex=\"53\" data-l10n-id=\"print\">\r\n                        <span data-l10n-id=\"print_label\">Print</span>\r\n                    </button>\r\n\r\n                    <button id=\"secondaryDownload\" class=\"secondaryToolbarButton download visibleMediumView\" title=\"Download\" tabindex=\"54\" data-l10n-id=\"download\">\r\n                        <span data-l10n-id=\"download_label\">Download</span>\r\n                    </button>\r\n\r\n                    <a href=\"#\" id=\"secondaryViewBookmark\" class=\"secondaryToolbarButton bookmark visibleSmallView\" title=\"Current view (copy or open in new window)\" tabindex=\"55\" data-l10n-id=\"bookmark\">\r\n                        <span data-l10n-id=\"bookmark_label\">Current View</span>\r\n                    </a>\r\n\r\n                    <div class=\"horizontalToolbarSeparator visibleLargeView\"></div>\r\n\r\n                    <button id=\"firstPage\" class=\"secondaryToolbarButton firstPage\" title=\"Go to First Page\" tabindex=\"56\" data-l10n-id=\"first_page\">\r\n                        <span data-l10n-id=\"first_page_label\">Go to First Page</span>\r\n                    </button>\r\n                    <button id=\"lastPage\" class=\"secondaryToolbarButton lastPage\" title=\"Go to Last Page\" tabindex=\"57\" data-l10n-id=\"last_page\">\r\n                        <span data-l10n-id=\"last_page_label\">Go to Last Page</span>\r\n                    </button>\r\n\r\n                    <div class=\"horizontalToolbarSeparator\"></div>\r\n\r\n                    <button id=\"pageRotateCw\" class=\"secondaryToolbarButton rotateCw\" title=\"Rotate Clockwise\" tabindex=\"58\" data-l10n-id=\"page_rotate_cw\">\r\n                        <span data-l10n-id=\"page_rotate_cw_label\">Rotate Clockwise</span>\r\n                    </button>\r\n                    <button id=\"pageRotateCcw\" class=\"secondaryToolbarButton rotateCcw\" title=\"Rotate Counterclockwise\" tabindex=\"59\" data-l10n-id=\"page_rotate_ccw\">\r\n                        <span data-l10n-id=\"page_rotate_ccw_label\">Rotate Counterclockwise</span>\r\n                    </button>\r\n\r\n                    <div class=\"horizontalToolbarSeparator\"></div>\r\n\r\n                    <button id=\"cursorSelectTool\" class=\"secondaryToolbarButton selectTool toggled\" title=\"Enable Text Selection Tool\" tabindex=\"60\" data-l10n-id=\"cursor_text_select_tool\">\r\n                        <span data-l10n-id=\"cursor_text_select_tool_label\">Text Selection Tool</span>\r\n                    </button>\r\n                    <button id=\"cursorHandTool\" class=\"secondaryToolbarButton handTool\" title=\"Enable Hand Tool\" tabindex=\"61\" data-l10n-id=\"cursor_hand_tool\">\r\n                        <span data-l10n-id=\"cursor_hand_tool_label\">Hand Tool</span>\r\n                    </button>\r\n\r\n                    <div class=\"horizontalToolbarSeparator\"></div>\r\n\r\n                    <button id=\"scrollVertical\" class=\"secondaryToolbarButton scrollModeButtons scrollVertical toggled\" title=\"Use Vertical Scrolling\" tabindex=\"62\" data-l10n-id=\"scroll_vertical\">\r\n                        <span data-l10n-id=\"scroll_vertical_label\">Vertical Scrolling</span>\r\n                    </button>\r\n                    <button id=\"scrollHorizontal\" class=\"secondaryToolbarButton scrollModeButtons scrollHorizontal\" title=\"Use Horizontal Scrolling\" tabindex=\"63\" data-l10n-id=\"scroll_horizontal\">\r\n                        <span data-l10n-id=\"scroll_horizontal_label\">Horizontal Scrolling</span>\r\n                    </button>\r\n                    <button id=\"scrollWrapped\" class=\"secondaryToolbarButton scrollModeButtons scrollWrapped\" title=\"Use Wrapped Scrolling\" tabindex=\"64\" data-l10n-id=\"scroll_wrapped\">\r\n                        <span data-l10n-id=\"scroll_wrapped_label\">Wrapped Scrolling</span>\r\n                    </button>\r\n\r\n                    <div class=\"horizontalToolbarSeparator scrollModeButtons\"></div>\r\n\r\n                    <button id=\"spreadNone\" class=\"secondaryToolbarButton spreadModeButtons spreadNone toggled\" title=\"Do not join page spreads\" tabindex=\"65\" data-l10n-id=\"spread_none\">\r\n                        <span data-l10n-id=\"spread_none_label\">No Spreads</span>\r\n                    </button>\r\n                    <button id=\"spreadOdd\" class=\"secondaryToolbarButton spreadModeButtons spreadOdd\" title=\"Join page spreads starting with odd-numbered pages\" tabindex=\"66\" data-l10n-id=\"spread_odd\">\r\n                        <span data-l10n-id=\"spread_odd_label\">Odd Spreads</span>\r\n                    </button>\r\n                    <button id=\"spreadEven\" class=\"secondaryToolbarButton spreadModeButtons spreadEven\" title=\"Join page spreads starting with even-numbered pages\" tabindex=\"67\" data-l10n-id=\"spread_even\">\r\n                        <span data-l10n-id=\"spread_even_label\">Even Spreads</span>\r\n                    </button>\r\n\r\n                    <div class=\"horizontalToolbarSeparator spreadModeButtons\"></div>\r\n\r\n                    <button id=\"documentProperties\" class=\"secondaryToolbarButton documentProperties\" title=\"Document Properties…\" tabindex=\"68\" data-l10n-id=\"document_properties\">\r\n                        <span data-l10n-id=\"document_properties_label\">Document Properties…</span>\r\n                    </button>\r\n                </div>\r\n            </div>  <!-- secondaryToolbar -->\r\n\r\n            <div class=\"toolbar\">\r\n                <div id=\"toolbarContainer\">\r\n                    <div id=\"toolbarViewer\">\r\n                        <div id=\"toolbarViewerLeft\">\r\n                            <button id=\"sidebarToggle\" class=\"toolbarButton\" title=\"Toggle Sidebar\" tabindex=\"11\" data-l10n-id=\"toggle_sidebar\" aria-expanded=\"false\" aria-controls=\"sidebarContainer\">\r\n                                <span data-l10n-id=\"toggle_sidebar_label\">Toggle Sidebar</span>\r\n                            </button>\r\n                            <div class=\"toolbarButtonSpacer\"></div>\r\n                            <button id=\"viewFind\" class=\"toolbarButton\" title=\"Find in Document\" tabindex=\"12\" data-l10n-id=\"findbar\" aria-expanded=\"false\" aria-controls=\"findbar\">\r\n                                <span data-l10n-id=\"findbar_label\">Find</span>\r\n                            </button>\r\n                            <div class=\"splitToolbarButton hiddenSmallView\">\r\n                                <button class=\"toolbarButton pageUp\" title=\"Previous Page\" id=\"previous\" tabindex=\"13\" data-l10n-id=\"previous\">\r\n                                    <span data-l10n-id=\"previous_label\">Previous</span>\r\n                                </button>\r\n                                <div class=\"splitToolbarButtonSeparator\"></div>\r\n                                <button class=\"toolbarButton pageDown\" title=\"Next Page\" id=\"next\" tabindex=\"14\" data-l10n-id=\"next\">\r\n                                    <span data-l10n-id=\"next_label\">Next</span>\r\n                                </button>\r\n                            </div>\r\n                            <input type=\"number\" id=\"pageNumber\" class=\"toolbarField pageNumber\" title=\"Page\" value=\"1\" size=\"4\" min=\"1\" tabindex=\"15\" data-l10n-id=\"page\" autocomplete=\"off\">\r\n                            <span id=\"numPages\" class=\"toolbarLabel\"></span>\r\n                        </div>\r\n                        <div id=\"toolbarViewerRight\">\r\n                            <button id=\"presentationMode\" class=\"toolbarButton presentationMode hiddenLargeView\" title=\"Switch to Presentation Mode\" tabindex=\"31\" data-l10n-id=\"presentation_mode\">\r\n                                <span data-l10n-id=\"presentation_mode_label\">Presentation Mode</span>\r\n                            </button>\r\n\r\n                            <button id=\"openFile\" class=\"toolbarButton openFile hiddenLargeView\" title=\"Open File\" tabindex=\"32\" data-l10n-id=\"open_file\">\r\n                                <span data-l10n-id=\"open_file_label\">Open</span>\r\n                            </button>\r\n\r\n                            <button id=\"print\" class=\"toolbarButton print hiddenMediumView\" title=\"Print\" tabindex=\"33\" data-l10n-id=\"print\">\r\n                                <span data-l10n-id=\"print_label\">Print</span>\r\n                            </button>\r\n\r\n                            <button id=\"download\" class=\"toolbarButton download hiddenMediumView\" title=\"Download\" tabindex=\"34\" data-l10n-id=\"download\">\r\n                                <span data-l10n-id=\"download_label\">Download</span>\r\n                            </button>\r\n                            <a href=\"#\" id=\"viewBookmark\" class=\"toolbarButton bookmark hiddenSmallView\" title=\"Current view (copy or open in new window)\" tabindex=\"35\" data-l10n-id=\"bookmark\">\r\n                                <span data-l10n-id=\"bookmark_label\">Current View</span>\r\n                            </a>\r\n\r\n                            <div class=\"verticalToolbarSeparator hiddenSmallView\"></div>\r\n\r\n                            <button id=\"secondaryToolbarToggle\" class=\"toolbarButton\" title=\"Tools\" tabindex=\"36\" data-l10n-id=\"tools\" aria-expanded=\"false\" aria-controls=\"secondaryToolbar\">\r\n                                <span data-l10n-id=\"tools_label\">Tools</span>\r\n                            </button>\r\n                        </div>\r\n                        <div id=\"toolbarViewerMiddle\">\r\n                            <div class=\"splitToolbarButton\">\r\n                                <button id=\"zoomOut\" class=\"toolbarButton zoomOut\" title=\"Zoom Out\" tabindex=\"21\" data-l10n-id=\"zoom_out\">\r\n                                    <span data-l10n-id=\"zoom_out_label\">Zoom Out</span>\r\n                                </button>\r\n                                <div class=\"splitToolbarButtonSeparator\"></div>\r\n                                <button id=\"zoomIn\" class=\"toolbarButton zoomIn\" title=\"Zoom In\" tabindex=\"22\" data-l10n-id=\"zoom_in\">\r\n                                    <span data-l10n-id=\"zoom_in_label\">Zoom In</span>\r\n                                </button>\r\n                            </div>\r\n                            <span id=\"scaleSelectContainer\" class=\"dropdownToolbarButton\">\r\n                                <select id=\"scaleSelect\" title=\"Zoom\" tabindex=\"23\" data-l10n-id=\"zoom\">\r\n                                    <option id=\"pageAutoOption\" title=\"\" value=\"auto\" selected=\"selected\" data-l10n-id=\"page_scale_auto\">Automatic Zoom</option>\r\n                                    <option id=\"pageActualOption\" title=\"\" value=\"page-actual\" data-l10n-id=\"page_scale_actual\">Actual Size</option>\r\n                                    <option id=\"pageFitOption\" title=\"\" value=\"page-fit\" data-l10n-id=\"page_scale_fit\">Page Fit</option>\r\n                                    <option id=\"pageWidthOption\" title=\"\" value=\"page-width\" data-l10n-id=\"page_scale_width\">Page Width</option>\r\n                                    <option id=\"customScaleOption\" title=\"\" value=\"custom\" disabled=\"disabled\" hidden=\"true\"></option>\r\n                                    <option title=\"\" value=\"0.5\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 50 }'>50%</option>\r\n                                    <option title=\"\" value=\"0.75\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 75 }'>75%</option>\r\n                                    <option title=\"\" value=\"1\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 100 }'>100%</option>\r\n                                    <option title=\"\" value=\"1.25\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 125 }'>125%</option>\r\n                                    <option title=\"\" value=\"1.5\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 150 }'>150%</option>\r\n                                    <option title=\"\" value=\"2\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 200 }'>200%</option>\r\n                                    <option title=\"\" value=\"3\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 300 }'>300%</option>\r\n                                    <option title=\"\" value=\"4\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 400 }'>400%</option>\r\n                                </select>\r\n                            </span>\r\n                        </div>\r\n                    </div>\r\n                    <div id=\"loadingBar\">\r\n                        <div class=\"progress\">\r\n                            <div class=\"glimmer\">\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <menu type=\"context\" id=\"viewerContextMenu\">\r\n                <menuitem id=\"contextFirstPage\" label=\"First Page\"\r\n                          data-l10n-id=\"first_page\"></menuitem>\r\n                <menuitem id=\"contextLastPage\" label=\"Last Page\"\r\n                          data-l10n-id=\"last_page\"></menuitem>\r\n                <menuitem id=\"contextPageRotateCw\" label=\"Rotate Clockwise\"\r\n                          data-l10n-id=\"page_rotate_cw\"></menuitem>\r\n                <menuitem id=\"contextPageRotateCcw\" label=\"Rotate Counter-Clockwise\"\r\n                          data-l10n-id=\"page_rotate_ccw\"></menuitem>\r\n            </menu>\r\n\r\n            <div id=\"viewerContainer\" tabindex=\"0\">\r\n                <div id=\"viewer\" class=\"pdfViewer\"></div>\r\n            </div>\r\n\r\n            <div id=\"errorWrapper\" hidden='true'>\r\n                <div id=\"errorMessageLeft\">\r\n                    <span id=\"errorMessage\"></span>\r\n                    <button id=\"errorShowMore\" data-l10n-id=\"error_more_info\">\r\n                        More Information\r\n                    </button>\r\n                    <button id=\"errorShowLess\" data-l10n-id=\"error_less_info\" hidden='true'>\r\n                        Less Information\r\n                    </button>\r\n                </div>\r\n                <div id=\"errorMessageRight\">\r\n                    <button id=\"errorClose\" data-l10n-id=\"error_close\">\r\n                        Close\r\n                    </button>\r\n                </div>\r\n                <div class=\"clearBoth\"></div>\r\n                <textarea id=\"errorMoreInfo\" hidden='true' readonly=\"readonly\"></textarea>\r\n            </div>\r\n        </div> <!-- mainContainer -->\r\n\r\n        <div id=\"overlayContainer\" class=\"hidden\">\r\n            <div id=\"passwordOverlay\" class=\"container hidden\">\r\n                <div class=\"dialog\">\r\n                    <div class=\"row\">\r\n                        <p id=\"passwordText\" data-l10n-id=\"password_label\">Enter the password to open this PDF file:</p>\r\n                    </div>\r\n                    <div class=\"row\">\r\n                        <input type=\"password\" id=\"password\" class=\"toolbarField\">\r\n                    </div>\r\n                    <div class=\"buttonRow\">\r\n                        <button id=\"passwordCancel\" class=\"overlayButton\"><span data-l10n-id=\"password_cancel\">Cancel</span></button>\r\n                        <button id=\"passwordSubmit\" class=\"overlayButton\"><span data-l10n-id=\"password_ok\">OK</span></button>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <div id=\"documentPropertiesOverlay\" class=\"container hidden\">\r\n                <div class=\"dialog\">\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_file_name\">File name:</span> <p id=\"fileNameField\">-</p>\r\n                    </div>\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_file_size\">File size:</span> <p id=\"fileSizeField\">-</p>\r\n                    </div>\r\n                    <div class=\"separator\"></div>\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_title\">Title:</span> <p id=\"titleField\">-</p>\r\n                    </div>\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_author\">Author:</span> <p id=\"authorField\">-</p>\r\n                    </div>\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_subject\">Subject:</span> <p id=\"subjectField\">-</p>\r\n                    </div>\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_keywords\">Keywords:</span> <p id=\"keywordsField\">-</p>\r\n                    </div>\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_creation_date\">Creation Date:</span> <p id=\"creationDateField\">-</p>\r\n                    </div>\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_modification_date\">Modification Date:</span> <p id=\"modificationDateField\">-</p>\r\n                    </div>\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_creator\">Creator:</span> <p id=\"creatorField\">-</p>\r\n                    </div>\r\n                    <div class=\"separator\"></div>\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_producer\">PDF Producer:</span> <p id=\"producerField\">-</p>\r\n                    </div>\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_version\">PDF Version:</span> <p id=\"versionField\">-</p>\r\n                    </div>\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_page_count\">Page Count:</span> <p id=\"pageCountField\">-</p>\r\n                    </div>\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_page_size\">Page Size:</span> <p id=\"pageSizeField\">-</p>\r\n                    </div>\r\n                    <div class=\"separator\"></div>\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"document_properties_linearized\">Fast Web View:</span> <p id=\"linearizedField\">-</p>\r\n                    </div>\r\n                    <div class=\"buttonRow\">\r\n                        <button id=\"documentPropertiesClose\" class=\"overlayButton\"><span data-l10n-id=\"document_properties_close\">Close</span></button>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <div id=\"printServiceOverlay\" class=\"container hidden\">\r\n                <div class=\"dialog\">\r\n                    <div class=\"row\">\r\n                        <span data-l10n-id=\"print_progress_message\">Preparing document for printing…</span>\r\n                    </div>\r\n                    <div class=\"row\">\r\n                        <progress value=\"0\" max=\"100\"></progress>\r\n                        <span data-l10n-id=\"print_progress_percent\" data-l10n-args='{ \"progress\": 0 }' class=\"relative-progress\">0%</span>\r\n                    </div>\r\n                    <div class=\"buttonRow\">\r\n                        <button id=\"printCancel\" class=\"overlayButton\"><span data-l10n-id=\"print_progress_close\">Cancel</span></button>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>  <!-- overlayContainer -->\r\n\r\n    </div> <!-- outerContainer -->\r\n    <div id=\"printContainer\"></div>\r\n</body>\r\n</html>\r\n\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/Program.cs",
    "content": "using Microsoft.AspNetCore.StaticFiles;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\n\r\nvar provider = new FileExtensionContentTypeProvider();\r\nprovider.Mappings[\".properties\"] = \"application/octet-stream\";\r\napp.UseStaticFiles(new StaticFileOptions\r\n{\r\n    ContentTypeProvider = provider\r\n});\r\n\r\napp.MapRazorPages();\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/README.md",
    "content": "# Create a PDF Viewer using PDF.js\r\n\r\nThis sample shows you how to create a PDF Viewer using [PDF.js](https://mozilla.github.io/pdf.js/). The viewer code is based on their [sample code](https://github.com/mozilla/pdf.js/archive/gh-pages.zip) as outlined [here](https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#gh-pages).\r\n\r\nThe sample PDF is [The early history of F#](https://dl.acm.org/doi/10.1145/3386325).\r\n\r\nThe ASP.NET Core code is a straightforward Razor Pages code.\r\n\r\n![How it looks like](screenshot.png)"
  },
  {
    "path": "projects/mini/pdf-viewer/pdf-viewer.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/cmaps/CNS2-V.bcmap",
    "content": "\u0003RCopyright 1990-2009 Adobe Systems Incorporated.\nAll rights reserved.\nSee ./LICENSE\u0006CNS2-H"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/cmaps/ETenms-B5-H.bcmap",
    "content": "\u0002RCopyright 1990-2009 Adobe Systems Incorporated.\nAll rights reserved.\nSee ./LICENSE\tETen-B5-H`\u0001 ^\u0001"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/cmaps/GB-H.bcmap",
    "content": "\u0002RCopyright 1990-2009 Adobe Systems Incorporated.\nAll rights reserved.\nSee ./LICENSE\u0001\u0001!!]aX!!]`21>\u0002\tp\u0002\u000bz$]\u0006\"Rd-U7*\u0017\r\b4%+ Z\u000f {/\u001f\u001c\u0004%<9Kb1].\"\u001f\f`],\"]\n\"]h\"]F\"]$\"]\u0002\"]`\"]>\"]\u001c\"]z\"]X\"]6\"]\u0014\"]r\"]P\"].\"]\f\"]j\"]H\"]&\"]\u0004\"]b\"]@\"]\u001e\"]|\"]Z\"]8\"]\u0016\"]t\"]R\"]0\"]\u000e\"]l\"]J\"](\"]\u0006\"]d\"]B\"] \"X~']W\"]5\"]\u0013\"]q\"]O\"]-\"]\u000b\"]i\"]G\"]%\"]\u0003\"]a\"]?\"]\u001d\"]{\"]Y\"]7\"]\u0015\"]s\"]Q\"]/\"]\r\"]k\"]I\"]'\"]\u0005\"]c\"]A\"]\u001f\"]}\"][\"]9"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/cmaps/LICENSE",
    "content": "%%Copyright: -----------------------------------------------------------\r\n%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated.\r\n%%Copyright: All rights reserved.\r\n%%Copyright:\r\n%%Copyright: Redistribution and use in source and binary forms, with or\r\n%%Copyright: without modification, are permitted provided that the\r\n%%Copyright: following conditions are met:\r\n%%Copyright:\r\n%%Copyright: Redistributions of source code must retain the above\r\n%%Copyright: copyright notice, this list of conditions and the following\r\n%%Copyright: disclaimer.\r\n%%Copyright:\r\n%%Copyright: Redistributions in binary form must reproduce the above\r\n%%Copyright: copyright notice, this list of conditions and the following\r\n%%Copyright: disclaimer in the documentation and/or other materials\r\n%%Copyright: provided with the distribution. \r\n%%Copyright:\r\n%%Copyright: Neither the name of Adobe Systems Incorporated nor the names\r\n%%Copyright: of its contributors may be used to endorse or promote\r\n%%Copyright: products derived from this software without specific prior\r\n%%Copyright: written permission. \r\n%%Copyright:\r\n%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND\r\n%%Copyright: CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\r\n%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r\n%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR\r\n%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r\n%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\n%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r\n%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r\n%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n%%Copyright: -----------------------------------------------------------\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/debugger.js",
    "content": "/* Copyright 2012 Mozilla Foundation\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *     http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/* eslint-disable no-var */\r\n\r\n\"use strict\";\r\n\r\nvar FontInspector = (function FontInspectorClosure() {\r\n  var fonts;\r\n  var active = false;\r\n  var fontAttribute = \"data-font-name\";\r\n  function removeSelection() {\r\n    const divs = document.querySelectorAll(`span[${fontAttribute}]`);\r\n    for (const div of divs) {\r\n      div.className = \"\";\r\n    }\r\n  }\r\n  function resetSelection() {\r\n    const divs = document.querySelectorAll(`span[${fontAttribute}]`);\r\n    for (const div of divs) {\r\n      div.className = \"debuggerHideText\";\r\n    }\r\n  }\r\n  function selectFont(fontName, show) {\r\n    const divs = document.querySelectorAll(\r\n      `span[${fontAttribute}=${fontName}]`\r\n    );\r\n    for (const div of divs) {\r\n      div.className = show ? \"debuggerShowText\" : \"debuggerHideText\";\r\n    }\r\n  }\r\n  function textLayerClick(e) {\r\n    if (\r\n      !e.target.dataset.fontName ||\r\n      e.target.tagName.toUpperCase() !== \"SPAN\"\r\n    ) {\r\n      return;\r\n    }\r\n    var fontName = e.target.dataset.fontName;\r\n    var selects = document.getElementsByTagName(\"input\");\r\n    for (var i = 0; i < selects.length; ++i) {\r\n      var select = selects[i];\r\n      if (select.dataset.fontName !== fontName) {\r\n        continue;\r\n      }\r\n      select.checked = !select.checked;\r\n      selectFont(fontName, select.checked);\r\n      select.scrollIntoView();\r\n    }\r\n  }\r\n  return {\r\n    // Properties/functions needed by PDFBug.\r\n    id: \"FontInspector\",\r\n    name: \"Font Inspector\",\r\n    panel: null,\r\n    manager: null,\r\n    init: function init(pdfjsLib) {\r\n      var panel = this.panel;\r\n      var tmp = document.createElement(\"button\");\r\n      tmp.addEventListener(\"click\", resetSelection);\r\n      tmp.textContent = \"Refresh\";\r\n      panel.appendChild(tmp);\r\n\r\n      fonts = document.createElement(\"div\");\r\n      panel.appendChild(fonts);\r\n    },\r\n    cleanup: function cleanup() {\r\n      fonts.textContent = \"\";\r\n    },\r\n    enabled: false,\r\n    get active() {\r\n      return active;\r\n    },\r\n    set active(value) {\r\n      active = value;\r\n      if (active) {\r\n        document.body.addEventListener(\"click\", textLayerClick, true);\r\n        resetSelection();\r\n      } else {\r\n        document.body.removeEventListener(\"click\", textLayerClick, true);\r\n        removeSelection();\r\n      }\r\n    },\r\n    // FontInspector specific functions.\r\n    fontAdded: function fontAdded(fontObj, url) {\r\n      function properties(obj, list) {\r\n        var moreInfo = document.createElement(\"table\");\r\n        for (var i = 0; i < list.length; i++) {\r\n          var tr = document.createElement(\"tr\");\r\n          var td1 = document.createElement(\"td\");\r\n          td1.textContent = list[i];\r\n          tr.appendChild(td1);\r\n          var td2 = document.createElement(\"td\");\r\n          td2.textContent = obj[list[i]].toString();\r\n          tr.appendChild(td2);\r\n          moreInfo.appendChild(tr);\r\n        }\r\n        return moreInfo;\r\n      }\r\n      var moreInfo = properties(fontObj, [\"name\", \"type\"]);\r\n      const fontName = fontObj.loadedName;\r\n      var font = document.createElement(\"div\");\r\n      var name = document.createElement(\"span\");\r\n      name.textContent = fontName;\r\n      var download = document.createElement(\"a\");\r\n      if (url) {\r\n        url = /url\\(['\"]?([^)\"']+)/.exec(url);\r\n        download.href = url[1];\r\n      } else if (fontObj.data) {\r\n        download.href = URL.createObjectURL(\r\n          new Blob([fontObj.data], { type: fontObj.mimeType })\r\n        );\r\n      }\r\n      download.textContent = \"Download\";\r\n      var logIt = document.createElement(\"a\");\r\n      logIt.href = \"\";\r\n      logIt.textContent = \"Log\";\r\n      logIt.addEventListener(\"click\", function (event) {\r\n        event.preventDefault();\r\n        console.log(fontObj);\r\n      });\r\n      const select = document.createElement(\"input\");\r\n      select.setAttribute(\"type\", \"checkbox\");\r\n      select.dataset.fontName = fontName;\r\n      select.addEventListener(\"click\", function () {\r\n        selectFont(fontName, select.checked);\r\n      });\r\n      font.appendChild(select);\r\n      font.appendChild(name);\r\n      font.appendChild(document.createTextNode(\" \"));\r\n      font.appendChild(download);\r\n      font.appendChild(document.createTextNode(\" \"));\r\n      font.appendChild(logIt);\r\n      font.appendChild(moreInfo);\r\n      fonts.appendChild(font);\r\n      // Somewhat of a hack, should probably add a hook for when the text layer\r\n      // is done rendering.\r\n      setTimeout(() => {\r\n        if (this.active) {\r\n          resetSelection();\r\n        }\r\n      }, 2000);\r\n    },\r\n  };\r\n})();\r\n\r\nvar opMap;\r\n\r\n// Manages all the page steppers.\r\nvar StepperManager = (function StepperManagerClosure() {\r\n  var steppers = [];\r\n  var stepperDiv = null;\r\n  var stepperControls = null;\r\n  var stepperChooser = null;\r\n  var breakPoints = Object.create(null);\r\n  return {\r\n    // Properties/functions needed by PDFBug.\r\n    id: \"Stepper\",\r\n    name: \"Stepper\",\r\n    panel: null,\r\n    manager: null,\r\n    init: function init(pdfjsLib) {\r\n      var self = this;\r\n      stepperControls = document.createElement(\"div\");\r\n      stepperChooser = document.createElement(\"select\");\r\n      stepperChooser.addEventListener(\"change\", function (event) {\r\n        self.selectStepper(this.value);\r\n      });\r\n      stepperControls.appendChild(stepperChooser);\r\n      stepperDiv = document.createElement(\"div\");\r\n      this.panel.appendChild(stepperControls);\r\n      this.panel.appendChild(stepperDiv);\r\n      if (sessionStorage.getItem(\"pdfjsBreakPoints\")) {\r\n        breakPoints = JSON.parse(sessionStorage.getItem(\"pdfjsBreakPoints\"));\r\n      }\r\n\r\n      opMap = Object.create(null);\r\n      for (var key in pdfjsLib.OPS) {\r\n        opMap[pdfjsLib.OPS[key]] = key;\r\n      }\r\n    },\r\n    cleanup: function cleanup() {\r\n      stepperChooser.textContent = \"\";\r\n      stepperDiv.textContent = \"\";\r\n      steppers = [];\r\n    },\r\n    enabled: false,\r\n    active: false,\r\n    // Stepper specific functions.\r\n    create: function create(pageIndex) {\r\n      var debug = document.createElement(\"div\");\r\n      debug.id = \"stepper\" + pageIndex;\r\n      debug.setAttribute(\"hidden\", true);\r\n      debug.className = \"stepper\";\r\n      stepperDiv.appendChild(debug);\r\n      var b = document.createElement(\"option\");\r\n      b.textContent = \"Page \" + (pageIndex + 1);\r\n      b.value = pageIndex;\r\n      stepperChooser.appendChild(b);\r\n      var initBreakPoints = breakPoints[pageIndex] || [];\r\n      var stepper = new Stepper(debug, pageIndex, initBreakPoints);\r\n      steppers.push(stepper);\r\n      if (steppers.length === 1) {\r\n        this.selectStepper(pageIndex, false);\r\n      }\r\n      return stepper;\r\n    },\r\n    selectStepper: function selectStepper(pageIndex, selectPanel) {\r\n      var i;\r\n      pageIndex = pageIndex | 0;\r\n      if (selectPanel) {\r\n        this.manager.selectPanel(this);\r\n      }\r\n      for (i = 0; i < steppers.length; ++i) {\r\n        var stepper = steppers[i];\r\n        if (stepper.pageIndex === pageIndex) {\r\n          stepper.panel.removeAttribute(\"hidden\");\r\n        } else {\r\n          stepper.panel.setAttribute(\"hidden\", true);\r\n        }\r\n      }\r\n      var options = stepperChooser.options;\r\n      for (i = 0; i < options.length; ++i) {\r\n        var option = options[i];\r\n        option.selected = (option.value | 0) === pageIndex;\r\n      }\r\n    },\r\n    saveBreakPoints: function saveBreakPoints(pageIndex, bps) {\r\n      breakPoints[pageIndex] = bps;\r\n      sessionStorage.setItem(\"pdfjsBreakPoints\", JSON.stringify(breakPoints));\r\n    },\r\n  };\r\n})();\r\n\r\n// The stepper for each page's IRQueue.\r\nvar Stepper = (function StepperClosure() {\r\n  // Shorter way to create element and optionally set textContent.\r\n  function c(tag, textContent) {\r\n    var d = document.createElement(tag);\r\n    if (textContent) {\r\n      d.textContent = textContent;\r\n    }\r\n    return d;\r\n  }\r\n\r\n  function simplifyArgs(args) {\r\n    if (typeof args === \"string\") {\r\n      var MAX_STRING_LENGTH = 75;\r\n      return args.length <= MAX_STRING_LENGTH\r\n        ? args\r\n        : args.substring(0, MAX_STRING_LENGTH) + \"...\";\r\n    }\r\n    if (typeof args !== \"object\" || args === null) {\r\n      return args;\r\n    }\r\n    if (\"length\" in args) {\r\n      // array\r\n      var simpleArgs = [],\r\n        i,\r\n        ii;\r\n      var MAX_ITEMS = 10;\r\n      for (i = 0, ii = Math.min(MAX_ITEMS, args.length); i < ii; i++) {\r\n        simpleArgs.push(simplifyArgs(args[i]));\r\n      }\r\n      if (i < args.length) {\r\n        simpleArgs.push(\"...\");\r\n      }\r\n      return simpleArgs;\r\n    }\r\n    var simpleObj = {};\r\n    for (var key in args) {\r\n      simpleObj[key] = simplifyArgs(args[key]);\r\n    }\r\n    return simpleObj;\r\n  }\r\n\r\n  // eslint-disable-next-line no-shadow\r\n  function Stepper(panel, pageIndex, initialBreakPoints) {\r\n    this.panel = panel;\r\n    this.breakPoint = 0;\r\n    this.nextBreakPoint = null;\r\n    this.pageIndex = pageIndex;\r\n    this.breakPoints = initialBreakPoints;\r\n    this.currentIdx = -1;\r\n    this.operatorListIdx = 0;\r\n  }\r\n  Stepper.prototype = {\r\n    init: function init(operatorList) {\r\n      var panel = this.panel;\r\n      var content = c(\"div\", \"c=continue, s=step\");\r\n      var table = c(\"table\");\r\n      content.appendChild(table);\r\n      table.cellSpacing = 0;\r\n      var headerRow = c(\"tr\");\r\n      table.appendChild(headerRow);\r\n      headerRow.appendChild(c(\"th\", \"Break\"));\r\n      headerRow.appendChild(c(\"th\", \"Idx\"));\r\n      headerRow.appendChild(c(\"th\", \"fn\"));\r\n      headerRow.appendChild(c(\"th\", \"args\"));\r\n      panel.appendChild(content);\r\n      this.table = table;\r\n      this.updateOperatorList(operatorList);\r\n    },\r\n    updateOperatorList: function updateOperatorList(operatorList) {\r\n      var self = this;\r\n\r\n      function cboxOnClick() {\r\n        var x = +this.dataset.idx;\r\n        if (this.checked) {\r\n          self.breakPoints.push(x);\r\n        } else {\r\n          self.breakPoints.splice(self.breakPoints.indexOf(x), 1);\r\n        }\r\n        StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints);\r\n      }\r\n\r\n      var MAX_OPERATORS_COUNT = 15000;\r\n      if (this.operatorListIdx > MAX_OPERATORS_COUNT) {\r\n        return;\r\n      }\r\n\r\n      var chunk = document.createDocumentFragment();\r\n      var operatorsToDisplay = Math.min(\r\n        MAX_OPERATORS_COUNT,\r\n        operatorList.fnArray.length\r\n      );\r\n      for (var i = this.operatorListIdx; i < operatorsToDisplay; i++) {\r\n        var line = c(\"tr\");\r\n        line.className = \"line\";\r\n        line.dataset.idx = i;\r\n        chunk.appendChild(line);\r\n        var checked = this.breakPoints.includes(i);\r\n        var args = operatorList.argsArray[i] || [];\r\n\r\n        var breakCell = c(\"td\");\r\n        var cbox = c(\"input\");\r\n        cbox.type = \"checkbox\";\r\n        cbox.className = \"points\";\r\n        cbox.checked = checked;\r\n        cbox.dataset.idx = i;\r\n        cbox.onclick = cboxOnClick;\r\n\r\n        breakCell.appendChild(cbox);\r\n        line.appendChild(breakCell);\r\n        line.appendChild(c(\"td\", i.toString()));\r\n        var fn = opMap[operatorList.fnArray[i]];\r\n        var decArgs = args;\r\n        if (fn === \"showText\") {\r\n          var glyphs = args[0];\r\n          var newArgs = [];\r\n          var str = [];\r\n          for (var j = 0; j < glyphs.length; j++) {\r\n            var glyph = glyphs[j];\r\n            if (typeof glyph === \"object\" && glyph !== null) {\r\n              str.push(glyph.fontChar);\r\n            } else {\r\n              if (str.length > 0) {\r\n                newArgs.push(str.join(\"\"));\r\n                str = [];\r\n              }\r\n              newArgs.push(glyph); // null or number\r\n            }\r\n          }\r\n          if (str.length > 0) {\r\n            newArgs.push(str.join(\"\"));\r\n          }\r\n          decArgs = [newArgs];\r\n        }\r\n        line.appendChild(c(\"td\", fn));\r\n        line.appendChild(c(\"td\", JSON.stringify(simplifyArgs(decArgs))));\r\n      }\r\n      if (operatorsToDisplay < operatorList.fnArray.length) {\r\n        var lastCell = c(\"td\", \"...\");\r\n        lastCell.colspan = 4;\r\n        chunk.appendChild(lastCell);\r\n      }\r\n      this.operatorListIdx = operatorList.fnArray.length;\r\n      this.table.appendChild(chunk);\r\n    },\r\n    getNextBreakPoint: function getNextBreakPoint() {\r\n      this.breakPoints.sort(function (a, b) {\r\n        return a - b;\r\n      });\r\n      for (var i = 0; i < this.breakPoints.length; i++) {\r\n        if (this.breakPoints[i] > this.currentIdx) {\r\n          return this.breakPoints[i];\r\n        }\r\n      }\r\n      return null;\r\n    },\r\n    breakIt: function breakIt(idx, callback) {\r\n      StepperManager.selectStepper(this.pageIndex, true);\r\n      var self = this;\r\n      var dom = document;\r\n      self.currentIdx = idx;\r\n      var listener = function (e) {\r\n        switch (e.keyCode) {\r\n          case 83: // step\r\n            dom.removeEventListener(\"keydown\", listener);\r\n            self.nextBreakPoint = self.currentIdx + 1;\r\n            self.goTo(-1);\r\n            callback();\r\n            break;\r\n          case 67: // continue\r\n            dom.removeEventListener(\"keydown\", listener);\r\n            var breakPoint = self.getNextBreakPoint();\r\n            self.nextBreakPoint = breakPoint;\r\n            self.goTo(-1);\r\n            callback();\r\n            break;\r\n        }\r\n      };\r\n      dom.addEventListener(\"keydown\", listener);\r\n      self.goTo(idx);\r\n    },\r\n    goTo: function goTo(idx) {\r\n      var allRows = this.panel.getElementsByClassName(\"line\");\r\n      for (var x = 0, xx = allRows.length; x < xx; ++x) {\r\n        var row = allRows[x];\r\n        if ((row.dataset.idx | 0) === idx) {\r\n          row.style.backgroundColor = \"rgb(251,250,207)\";\r\n          row.scrollIntoView();\r\n        } else {\r\n          row.style.backgroundColor = null;\r\n        }\r\n      }\r\n    },\r\n  };\r\n  return Stepper;\r\n})();\r\n\r\nvar Stats = (function Stats() {\r\n  var stats = [];\r\n  function clear(node) {\r\n    while (node.hasChildNodes()) {\r\n      node.removeChild(node.lastChild);\r\n    }\r\n  }\r\n  function getStatIndex(pageNumber) {\r\n    for (var i = 0, ii = stats.length; i < ii; ++i) {\r\n      if (stats[i].pageNumber === pageNumber) {\r\n        return i;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n  return {\r\n    // Properties/functions needed by PDFBug.\r\n    id: \"Stats\",\r\n    name: \"Stats\",\r\n    panel: null,\r\n    manager: null,\r\n    init(pdfjsLib) {},\r\n    enabled: false,\r\n    active: false,\r\n    // Stats specific functions.\r\n    add(pageNumber, stat) {\r\n      if (!stat) {\r\n        return;\r\n      }\r\n      var statsIndex = getStatIndex(pageNumber);\r\n      if (statsIndex !== false) {\r\n        const b = stats[statsIndex];\r\n        this.panel.removeChild(b.div);\r\n        stats.splice(statsIndex, 1);\r\n      }\r\n      var wrapper = document.createElement(\"div\");\r\n      wrapper.className = \"stats\";\r\n      var title = document.createElement(\"div\");\r\n      title.className = \"title\";\r\n      title.textContent = \"Page: \" + pageNumber;\r\n      var statsDiv = document.createElement(\"div\");\r\n      statsDiv.textContent = stat.toString();\r\n      wrapper.appendChild(title);\r\n      wrapper.appendChild(statsDiv);\r\n      stats.push({ pageNumber, div: wrapper });\r\n      stats.sort(function (a, b) {\r\n        return a.pageNumber - b.pageNumber;\r\n      });\r\n      clear(this.panel);\r\n      for (var i = 0, ii = stats.length; i < ii; ++i) {\r\n        this.panel.appendChild(stats[i].div);\r\n      }\r\n    },\r\n    cleanup() {\r\n      stats = [];\r\n      clear(this.panel);\r\n    },\r\n  };\r\n})();\r\n\r\n// Manages all the debugging tools.\r\nwindow.PDFBug = (function PDFBugClosure() {\r\n  var panelWidth = 300;\r\n  var buttons = [];\r\n  var activePanel = null;\r\n\r\n  return {\r\n    tools: [FontInspector, StepperManager, Stats],\r\n    enable(ids) {\r\n      var all = false,\r\n        tools = this.tools;\r\n      if (ids.length === 1 && ids[0] === \"all\") {\r\n        all = true;\r\n      }\r\n      for (var i = 0; i < tools.length; ++i) {\r\n        var tool = tools[i];\r\n        if (all || ids.includes(tool.id)) {\r\n          tool.enabled = true;\r\n        }\r\n      }\r\n      if (!all) {\r\n        // Sort the tools by the order they are enabled.\r\n        tools.sort(function (a, b) {\r\n          var indexA = ids.indexOf(a.id);\r\n          indexA = indexA < 0 ? tools.length : indexA;\r\n          var indexB = ids.indexOf(b.id);\r\n          indexB = indexB < 0 ? tools.length : indexB;\r\n          return indexA - indexB;\r\n        });\r\n      }\r\n    },\r\n    init(pdfjsLib, container) {\r\n      /*\r\n       * Basic Layout:\r\n       * PDFBug\r\n       *  Controls\r\n       *  Panels\r\n       *    Panel\r\n       *    Panel\r\n       *    ...\r\n       */\r\n      var ui = document.createElement(\"div\");\r\n      ui.id = \"PDFBug\";\r\n\r\n      var controls = document.createElement(\"div\");\r\n      controls.setAttribute(\"class\", \"controls\");\r\n      ui.appendChild(controls);\r\n\r\n      var panels = document.createElement(\"div\");\r\n      panels.setAttribute(\"class\", \"panels\");\r\n      ui.appendChild(panels);\r\n\r\n      container.appendChild(ui);\r\n      container.style.right = panelWidth + \"px\";\r\n\r\n      // Initialize all the debugging tools.\r\n      var tools = this.tools;\r\n      var self = this;\r\n      for (var i = 0; i < tools.length; ++i) {\r\n        var tool = tools[i];\r\n        var panel = document.createElement(\"div\");\r\n        var panelButton = document.createElement(\"button\");\r\n        panelButton.textContent = tool.name;\r\n        panelButton.addEventListener(\r\n          \"click\",\r\n          (function (selected) {\r\n            return function (event) {\r\n              event.preventDefault();\r\n              self.selectPanel(selected);\r\n            };\r\n          })(i)\r\n        );\r\n        controls.appendChild(panelButton);\r\n        panels.appendChild(panel);\r\n        tool.panel = panel;\r\n        tool.manager = this;\r\n        if (tool.enabled) {\r\n          tool.init(pdfjsLib);\r\n        } else {\r\n          panel.textContent =\r\n            tool.name +\r\n            \" is disabled. To enable add \" +\r\n            ' \"' +\r\n            tool.id +\r\n            '\" to the pdfBug parameter ' +\r\n            \"and refresh (separate multiple by commas).\";\r\n        }\r\n        buttons.push(panelButton);\r\n      }\r\n      this.selectPanel(0);\r\n    },\r\n    cleanup() {\r\n      for (var i = 0, ii = this.tools.length; i < ii; i++) {\r\n        if (this.tools[i].enabled) {\r\n          this.tools[i].cleanup();\r\n        }\r\n      }\r\n    },\r\n    selectPanel(index) {\r\n      if (typeof index !== \"number\") {\r\n        index = this.tools.indexOf(index);\r\n      }\r\n      if (index === activePanel) {\r\n        return;\r\n      }\r\n      activePanel = index;\r\n      var tools = this.tools;\r\n      for (var j = 0; j < tools.length; ++j) {\r\n        if (j === index) {\r\n          buttons[j].setAttribute(\"class\", \"active\");\r\n          tools[j].active = true;\r\n          tools[j].panel.removeAttribute(\"hidden\");\r\n        } else {\r\n          buttons[j].setAttribute(\"class\", \"\");\r\n          tools[j].active = false;\r\n          tools[j].panel.setAttribute(\"hidden\", \"true\");\r\n        }\r\n      }\r\n    },\r\n  };\r\n})();\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ach/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Pot buk mukato\r\nprevious_label=Mukato\r\nnext.title=Pot buk malubo\r\nnext_label=Malubo\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Pot buk\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=pi {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} me {{pagesCount}})\r\n\r\nzoom_out.title=Jwik Matidi\r\nzoom_out_label=Jwik Matidi\r\nzoom_in.title=Kwot Madit\r\nzoom_in_label=Kwot Madit\r\nzoom.title=Kwoti\r\npresentation_mode.title=Lokke i kit me tyer\r\npresentation_mode_label=Kit me tyer\r\nopen_file.title=Yab Pwail\r\nopen_file_label=Yab\r\nprint.title=Go\r\nprint_label=Go\r\ndownload.title=Gam\r\ndownload_label=Gam\r\nbookmark.title=Neno ma kombedi (lok onyo yab i dirica manyen)\r\nbookmark_label=Neno ma kombedi\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Gintic\r\ntools_label=Gintic\r\nfirst_page.title=Cit i pot buk mukwongo\r\nfirst_page.label=Cit i pot buk mukwongo\r\nfirst_page_label=Cit i pot buk mukwongo\r\nlast_page.title=Cit i pot buk magiko\r\nlast_page.label=Cit i pot buk magiko\r\nlast_page_label=Cit i pot buk magiko\r\npage_rotate_cw.title=Wire i tung lacuc\r\npage_rotate_cw.label=Wire i tung lacuc\r\npage_rotate_cw_label=Wire i tung lacuc\r\npage_rotate_ccw.title=Wire i tung lacam\r\npage_rotate_ccw.label=Wire i tung lacam\r\npage_rotate_ccw_label=Wire i tung lacam\r\n\r\ncursor_text_select_tool.title=Cak gitic me yero coc\r\ncursor_text_select_tool_label=Gitic me yero coc\r\ncursor_hand_tool.title=Cak gitic me cing\r\ncursor_hand_tool_label=Gitic cing\r\n\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Jami me gin acoya…\r\ndocument_properties_label=Jami me gin acoya…\r\ndocument_properties_file_name=Nying pwail:\r\ndocument_properties_file_size=Dit pa pwail:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Wiye:\r\ndocument_properties_author=Ngat mucoyo:\r\ndocument_properties_subject=Subjek:\r\ndocument_properties_keywords=Lok mapire tek:\r\ndocument_properties_creation_date=Nino dwe me cwec:\r\ndocument_properties_modification_date=Nino dwe me yub:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Lacwec:\r\ndocument_properties_producer=Layub PDF:\r\ndocument_properties_version=Kit PDF:\r\ndocument_properties_page_count=Kwan me pot buk:\r\ndocument_properties_page_size=Dit pa potbuk:\r\ndocument_properties_page_size_unit_inches=i\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=atir\r\ndocument_properties_page_size_orientation_landscape=arii\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Waraga\r\ndocument_properties_page_size_name_legal=Cik\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized_yes=Eyo\r\ndocument_properties_linearized_no=Pe\r\ndocument_properties_close=Lor\r\n\r\nprint_progress_message=Yubo coc me agoya…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Juki\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Lok gintic ma inget\r\ntoggle_sidebar_notification.title=Lok lanyut me nget (wiyewiye tye i gin acoya/attachments)\r\ntoggle_sidebar_label=Lok gintic ma inget\r\ndocument_outline.title=Nyut Wiyewiye me Gin acoya (dii-kiryo me yaro/kano jami weng)\r\ndocument_outline_label=Pek pa gin acoya\r\nattachments.title=Nyut twec\r\nattachments_label=Twec\r\nthumbs.title=Nyut cal\r\nthumbs_label=Cal\r\nfindbar.title=Nong iye gin acoya\r\nfindbar_label=Nong\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Pot buk {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Cal me pot buk {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Nong\r\nfind_input.placeholder=Nong i dokumen…\r\nfind_previous.title=Nong timme pa lok mukato\r\nfind_previous_label=Mukato\r\nfind_next.title=Nong timme pa lok malubo\r\nfind_next_label=Malubo\r\nfind_highlight=Wer weng\r\nfind_match_case_label=Lok marwate\r\nfind_reached_top=Oo iwi gin acoya, omede ki i tere\r\nfind_reached_bottom=Oo i agiki me gin acoya, omede ki iwiye\r\nfind_not_found=Lok pe ononge\r\n\r\n# Error panel labels\r\nerror_more_info=Ngec Mukene\r\nerror_less_info=Ngec Manok\r\nerror_close=Lor\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Kwena: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Can kikore {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Pwail: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Rek: {{line}}\r\nrendering_error=Bal otime i kare me nyuto pot buk.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Lac me iye pot buk\r\npage_scale_fit=Porre me pot buk\r\npage_scale_auto=Kwot pire kene\r\npage_scale_actual=Dite kikome\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Bal\r\nloading_error=Bal otime kun cano PDF.\r\ninvalid_file_error=Pwail me PDF ma pe atir onyo obale woko.\r\nmissing_file_error=Pwail me PDF tye ka rem.\r\nunexpected_response_error=Lagam mape kigeno pa lapok tic.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Lok angea manok]\r\npassword_label=Ket mung me donyo me yabo pwail me PDF man.\r\npassword_invalid=Mung me donyo pe atir. Tim ber i tem doki.\r\npassword_ok=OK\r\npassword_cancel=Juki\r\n\r\nprinting_not_supported=Ciko: Layeny ma pe teno goyo liweng.\r\nprinting_not_ready=Ciko: PDF pe ocane weng me agoya.\r\nweb_fonts_disabled=Kijuko dit pa coc me kakube woko: pe romo tic ki dit pa coc me PDF ma kiketo i kine.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/af/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Vorige bladsy\r\nprevious_label=Vorige\r\nnext.title=Volgende bladsy\r\nnext_label=Volgende\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Bladsy\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=van {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} van {{pagesCount}})\r\n\r\nzoom_out.title=Zoem uit\r\nzoom_out_label=Zoem uit\r\nzoom_in.title=Zoem in\r\nzoom_in_label=Zoem in\r\nzoom.title=Zoem\r\npresentation_mode.title=Wissel na voorleggingsmodus\r\npresentation_mode_label=Voorleggingsmodus\r\nopen_file.title=Open lêer\r\nopen_file_label=Open\r\nprint.title=Druk\r\nprint_label=Druk\r\ndownload.title=Laai af\r\ndownload_label=Laai af\r\nbookmark.title=Huidige aansig (kopieer of open in nuwe venster)\r\nbookmark_label=Huidige aansig\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Nutsgoed\r\ntools_label=Nutsgoed\r\nfirst_page.title=Gaan na eerste bladsy\r\nfirst_page.label=Gaan na eerste bladsy\r\nfirst_page_label=Gaan na eerste bladsy\r\nlast_page.title=Gaan na laaste bladsy\r\nlast_page.label=Gaan na laaste bladsy\r\nlast_page_label=Gaan na laaste bladsy\r\npage_rotate_cw.title=Roteer kloksgewys\r\npage_rotate_cw.label=Roteer kloksgewys\r\npage_rotate_cw_label=Roteer kloksgewys\r\npage_rotate_ccw.title=Roteer anti-kloksgewys\r\npage_rotate_ccw.label=Roteer anti-kloksgewys\r\npage_rotate_ccw_label=Roteer anti-kloksgewys\r\n\r\ncursor_text_select_tool.title=Aktiveer gereedskap om teks te merk\r\ncursor_text_select_tool_label=Teksmerkgereedskap\r\ncursor_hand_tool.title=Aktiveer handjie\r\ncursor_hand_tool_label=Handjie\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumenteienskappe…\r\ndocument_properties_label=Dokumenteienskappe…\r\ndocument_properties_file_name=Lêernaam:\r\ndocument_properties_file_size=Lêergrootte:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} kG ({{size_b}} grepe)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MG ({{size_b}} grepe)\r\ndocument_properties_title=Titel:\r\ndocument_properties_author=Outeur:\r\ndocument_properties_subject=Onderwerp:\r\ndocument_properties_keywords=Sleutelwoorde:\r\ndocument_properties_creation_date=Skeppingsdatum:\r\ndocument_properties_modification_date=Wysigingsdatum:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Skepper:\r\ndocument_properties_producer=PDF-vervaardiger:\r\ndocument_properties_version=PDF-weergawe:\r\ndocument_properties_page_count=Aantal bladsye:\r\ndocument_properties_close=Sluit\r\n\r\nprint_progress_message=Berei tans dokument voor om te druk…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Kanselleer\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Sypaneel aan/af\r\ntoggle_sidebar_notification.title=Sypaneel aan/af (dokument bevat skema/aanhegsels)\r\ntoggle_sidebar_label=Sypaneel aan/af\r\ndocument_outline.title=Wys dokumentskema (dubbelklik om alle items oop/toe te vou)\r\ndocument_outline_label=Dokumentoorsig\r\nattachments.title=Wys aanhegsels\r\nattachments_label=Aanhegsels\r\nthumbs.title=Wys duimnaels\r\nthumbs_label=Duimnaels\r\nfindbar.title=Soek in dokument\r\nfindbar_label=Vind\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Bladsy {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Duimnael van bladsy {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Vind\r\nfind_input.placeholder=Soek in dokument…\r\nfind_previous.title=Vind die vorige voorkoms van die frase\r\nfind_previous_label=Vorige\r\nfind_next.title=Vind die volgende voorkoms van die frase\r\nfind_next_label=Volgende\r\nfind_highlight=Verlig almal\r\nfind_match_case_label=Kassensitief\r\nfind_reached_top=Bokant van dokument is bereik; gaan voort van onder af\r\nfind_reached_bottom=Einde van dokument is bereik; gaan voort van bo af\r\nfind_not_found=Frase nie gevind nie\r\n\r\n# Error panel labels\r\nerror_more_info=Meer inligting\r\nerror_less_info=Minder inligting\r\nerror_close=Sluit\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (ID: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Boodskap: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stapel: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Lêer: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Lyn: {{line}}\r\nrendering_error='n Fout het voorgekom toe die bladsy weergegee is.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Bladsywydte\r\npage_scale_fit=Pas bladsy\r\npage_scale_auto=Outomatiese zoem\r\npage_scale_actual=Werklike grootte\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Fout\r\nloading_error='n Fout het voorgekom met die laai van die PDF.\r\ninvalid_file_error=Ongeldige of korrupte PDF-lêer.\r\nmissing_file_error=PDF-lêer is weg.\r\nunexpected_response_error=Onverwagse antwoord van bediener.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}}-annotasie]\r\npassword_label=Gee die wagwoord om dié PDF-lêer mee te open.\r\npassword_invalid=Ongeldige wagwoord. Probeer gerus weer.\r\npassword_ok=OK\r\npassword_cancel=Kanselleer\r\n\r\nprinting_not_supported=Waarskuwing: Dié blaaier ondersteun nie drukwerk ten volle nie.\r\nprinting_not_ready=Waarskuwing: Die PDF is nog nie volledig gelaai vir drukwerk nie.\r\nweb_fonts_disabled=Webfonte is gedeaktiveer: kan nie PDF-fonte wat ingebed is, gebruik nie.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/an/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Pachina anterior\r\nprevious_label=Anterior\r\nnext.title=Pachina siguient\r\nnext_label=Siguient\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Pachina\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=de {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} de {{pagesCount}})\r\n\r\nzoom_out.title=Achiquir\r\nzoom_out_label=Achiquir\r\nzoom_in.title=Agrandir\r\nzoom_in_label=Agrandir\r\nzoom.title=Grandaria\r\npresentation_mode.title=Cambear t'o modo de presentación\r\npresentation_mode_label=Modo de presentación\r\nopen_file.title=Ubrir o fichero\r\nopen_file_label=Ubrir\r\nprint.title=Imprentar\r\nprint_label=Imprentar\r\ndownload.title=Descargar\r\ndownload_label=Descargar\r\nbookmark.title=Vista actual (copiar u ubrir en una nueva finestra)\r\nbookmark_label=Vista actual\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Ferramientas\r\ntools_label=Ferramientas\r\nfirst_page.title=Ir ta la primer pachina\r\nfirst_page.label=Ir ta la primer pachina\r\nfirst_page_label=Ir ta la primer pachina\r\nlast_page.title=Ir ta la zaguer pachina\r\nlast_page.label=Ir ta la zaguera pachina\r\nlast_page_label=Ir ta la zaguer pachina\r\npage_rotate_cw.title=Chirar enta la dreita\r\npage_rotate_cw.label=Chirar enta la dreita\r\npage_rotate_cw_label=Chira enta la dreita\r\npage_rotate_ccw.title=Chirar enta la zurda\r\npage_rotate_ccw.label=Chirar en sentiu antihorario\r\npage_rotate_ccw_label=Chirar enta la zurda\r\n\r\ncursor_text_select_tool.title=Activar la ferramienta de selección de texto\r\ncursor_text_select_tool_label=Ferramienta de selección de texto\r\ncursor_hand_tool.title=Activar la ferramienta man\r\ncursor_hand_tool_label=Ferramienta man\r\n\r\nscroll_vertical.title=Usar lo desplazamiento vertical\r\nscroll_vertical_label=Desplazamiento vertical\r\nscroll_horizontal.title=Usar lo desplazamiento horizontal\r\nscroll_horizontal_label=Desplazamiento horizontal\r\nscroll_wrapped.title=Activaar lo desplazamiento contino\r\nscroll_wrapped_label=Desplazamiento contino\r\n\r\nspread_none.title=No unir vistas de pachinas\r\nspread_none_label=Una pachina nomás\r\nspread_odd.title=Mostrar vista de pachinas, con as impars a la zurda\r\nspread_odd_label=Doble pachina, impar a la zurda\r\nspread_even.title=Amostrar vista de pachinas, con as pars a la zurda\r\nspread_even_label=Doble pachina, para a la zurda\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Propiedatz d'o documento...\r\ndocument_properties_label=Propiedatz d'o documento...\r\ndocument_properties_file_name=Nombre de fichero:\r\ndocument_properties_file_size=Grandaria d'o fichero:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Titol:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Afer:\r\ndocument_properties_keywords=Parolas clau:\r\ndocument_properties_creation_date=Calendata de creyación:\r\ndocument_properties_modification_date=Calendata de modificación:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Creyador:\r\ndocument_properties_producer=Creyador de PDF:\r\ndocument_properties_version=Versión de PDF:\r\ndocument_properties_page_count=Numero de pachinas:\r\ndocument_properties_page_size=Mida de pachina:\r\ndocument_properties_page_size_unit_inches=pulgadas\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=vertical\r\ndocument_properties_page_size_orientation_landscape=horizontal\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Carta\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} x {{height}} {{unit}} {{orientation}}\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} x {{height}} {{unit}} {{name}}, {{orientation}}\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Vista web rapida:\r\ndocument_properties_linearized_yes=Sí\r\ndocument_properties_linearized_no=No\r\ndocument_properties_close=Zarrar\r\n\r\nprint_progress_message=Se ye preparando la documentación pa imprentar…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cancelar\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Amostrar u amagar a barra lateral\r\ntoggle_sidebar_notification.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos)\r\ntoggle_sidebar_notification2.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos/capas)\r\ntoggle_sidebar_label=Amostrar a barra lateral\r\ndocument_outline.title=Amostrar esquema d'o documento (fer doble clic pa expandir/compactar totz los items)\r\ndocument_outline_label=Esquema d'o documento\r\nattachments.title=Amostrar os adchuntos\r\nattachments_label=Adchuntos\r\nlayers.title=Amostrar capas (doble clic para reiniciar totas las capas a lo estau per defecto)\r\nlayers_label=Capas\r\nthumbs.title=Amostrar as miniaturas\r\nthumbs_label=Miniaturas\r\nfindbar.title=Trobar en o documento\r\nfindbar_label=Trobar\r\n\r\nadditional_layers=Capas adicionals\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Pachina {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Pachina {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura d'a pachina {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Trobar\r\nfind_input.placeholder=Trobar en o documento…\r\nfind_previous.title=Trobar l'anterior coincidencia d'a frase\r\nfind_previous_label=Anterior\r\nfind_next.title=Trobar a siguient coincidencia d'a frase\r\nfind_next_label=Siguient\r\nfind_highlight=Resaltar-lo tot\r\nfind_match_case_label=Coincidencia de mayusclas/minusclas\r\nfind_entire_word_label=Parolas completas\r\nfind_reached_top=S'ha plegau a l'inicio d'o documento, se contina dende baixo\r\nfind_reached_bottom=S'ha plegau a la fin d'o documento, se contina dende alto\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} de {{total}} coincidencia\r\nfind_match_count[two]={{current}} de {{total}} coincidencias\r\nfind_match_count[few]={{current}} de {{total}} coincidencias\r\nfind_match_count[many]={{current}} de {{total}} coincidencias\r\nfind_match_count[other]={{current}} de {{total}} coincidencias\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Mas de {{limit}} coincidencias\r\nfind_match_count_limit[one]=Mas de {{limit}} coincidencias\r\nfind_match_count_limit[two]=Mas que {{limit}} coincidencias\r\nfind_match_count_limit[few]=Mas que {{limit}} coincidencias\r\nfind_match_count_limit[many]=Mas que {{limit}} coincidencias\r\nfind_match_count_limit[other]=Mas que {{limit}} coincidencias\r\nfind_not_found=No s'ha trobau a frase\r\n\r\n# Error panel labels\r\nerror_more_info=Mas información\r\nerror_less_info=Menos información\r\nerror_close=Zarrar\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mensache: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pila: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fichero: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linia: {{line}}\r\nrendering_error=Ha ocurriu una error en renderizar a pachina.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Amplaria d'a pachina\r\npage_scale_fit=Achuste d'a pachina\r\npage_scale_auto=Grandaria automatica\r\npage_scale_actual=Grandaria actual\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=S'ha produciu una error en cargar o PDF.\r\ninvalid_file_error=O PDF no ye valido u ye estorbau.\r\nmissing_file_error=No i ha fichero PDF.\r\nunexpected_response_error=Respuesta a lo servicio inasperada.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anotación {{type}}]\r\npassword_label=Introduzca a clau ta ubrir iste fichero PDF.\r\npassword_invalid=Clau invalida. Torna a intentar-lo.\r\npassword_ok=Acceptar\r\npassword_cancel=Cancelar\r\n\r\nprinting_not_supported=Pare cuenta: Iste navegador no maneya totalment as impresions.\r\nprinting_not_ready=Aviso: Encara no se ha cargau completament o PDF ta imprentar-lo.\r\nweb_fonts_disabled=As fuents web son desactivadas: no se puet incrustar fichers PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ar/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=الصفحة السابقة\r\nprevious_label=السابقة\r\nnext.title=الصفحة التالية\r\nnext_label=التالية\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=صفحة\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=من {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} من {{pagesCount}})\r\n\r\nzoom_out.title=بعّد\r\nzoom_out_label=بعّد\r\nzoom_in.title=قرّب\r\nzoom_in_label=قرّب\r\nzoom.title=التقريب\r\npresentation_mode.title=انتقل لوضع العرض التقديمي\r\npresentation_mode_label=وضع العرض التقديمي\r\nopen_file.title=افتح ملفًا\r\nopen_file_label=افتح\r\nprint.title=اطبع\r\nprint_label=اطبع\r\ndownload.title=نزّل\r\ndownload_label=نزّل\r\nbookmark.title=المنظور الحالي (انسخ أو افتح في نافذة جديدة)\r\nbookmark_label=المنظور الحالي\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=الأدوات\r\ntools_label=الأدوات\r\nfirst_page.title=انتقل إلى الصفحة الأولى\r\nfirst_page.label=انتقل إلى الصفحة الأولى\r\nfirst_page_label=انتقل إلى الصفحة الأولى\r\nlast_page.title=انتقل إلى الصفحة الأخيرة\r\nlast_page.label=انتقل إلى الصفحة الأخيرة\r\nlast_page_label=انتقل إلى الصفحة الأخيرة\r\npage_rotate_cw.title=أدر باتجاه عقارب الساعة\r\npage_rotate_cw.label=أدر باتجاه عقارب الساعة\r\npage_rotate_cw_label=أدر باتجاه عقارب الساعة\r\npage_rotate_ccw.title=أدر بعكس اتجاه عقارب الساعة\r\npage_rotate_ccw.label=أدر بعكس اتجاه عقارب الساعة\r\npage_rotate_ccw_label=أدر بعكس اتجاه عقارب الساعة\r\n\r\ncursor_text_select_tool.title=فعّل أداة اختيار النص\r\ncursor_text_select_tool_label=أداة اختيار النص\r\ncursor_hand_tool.title=فعّل أداة اليد\r\ncursor_hand_tool_label=أداة اليد\r\n\r\nscroll_vertical.title=استخدم التمرير الرأسي\r\nscroll_vertical_label=التمرير الرأسي\r\nscroll_horizontal.title=استخدم التمرير الأفقي\r\nscroll_horizontal_label=التمرير الأفقي\r\nscroll_wrapped.title=استخدم التمرير الملتف\r\nscroll_wrapped_label=التمرير الملتف\r\n\r\nspread_none.title=لا تدمج هوامش الصفحات مع بعضها البعض\r\nspread_none_label=بلا هوامش\r\nspread_odd.title=ادمج هوامش الصفحات الفردية\r\nspread_odd_label=هوامش الصفحات الفردية\r\nspread_even.title=ادمج هوامش الصفحات الزوجية\r\nspread_even_label=هوامش الصفحات الزوجية\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=خصائص المستند…\r\ndocument_properties_label=خصائص المستند…\r\ndocument_properties_file_name=اسم الملف:\r\ndocument_properties_file_size=حجم الملف:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} ك.بايت ({{size_b}} بايت)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} م.بايت ({{size_b}} بايت)\r\ndocument_properties_title=العنوان:\r\ndocument_properties_author=المؤلف:\r\ndocument_properties_subject=الموضوع:\r\ndocument_properties_keywords=الكلمات الأساسية:\r\ndocument_properties_creation_date=تاريخ الإنشاء:\r\ndocument_properties_modification_date=تاريخ التعديل:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}، {{time}}\r\ndocument_properties_creator=المنشئ:\r\ndocument_properties_producer=منتج PDF:\r\ndocument_properties_version=إصدارة PDF:\r\ndocument_properties_page_count=عدد الصفحات:\r\ndocument_properties_page_size=مقاس الورقة:\r\ndocument_properties_page_size_unit_inches=بوصة\r\ndocument_properties_page_size_unit_millimeters=ملم\r\ndocument_properties_page_size_orientation_portrait=طوليّ\r\ndocument_properties_page_size_orientation_landscape=عرضيّ\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=خطاب\r\ndocument_properties_page_size_name_legal=قانونيّ\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string=‏{{width}} × ‏{{height}} ‏{{unit}} (‏{{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string=‏{{width}} × ‏{{height}} ‏{{unit}} (‏{{name}}، {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=العرض السريع عبر الوِب:\r\ndocument_properties_linearized_yes=نعم\r\ndocument_properties_linearized_no=لا\r\ndocument_properties_close=أغلق\r\n\r\nprint_progress_message=يُحضّر المستند للطباعة…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}٪\r\nprint_progress_close=ألغِ\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=بدّل ظهور الشريط الجانبي\r\ntoggle_sidebar_notification.title=بدّل ظهور الشريط الجانبي (يحتوي المستند على مخطط أو مرفقات)\r\ntoggle_sidebar_notification2.title=بدّل ظهور الشريط الجانبي (يحتوي المستند على مخطط أو مرفقات أو طبقات)\r\ntoggle_sidebar_label=بدّل ظهور الشريط الجانبي\r\ndocument_outline.title=اعرض فهرس المستند (نقر مزدوج لتمديد أو تقليص كل العناصر)\r\ndocument_outline_label=مخطط المستند\r\nattachments.title=اعرض المرفقات\r\nattachments_label=المُرفقات\r\nlayers.title=اعرض الطبقات (انقر مرتين لتصفير كل الطبقات إلى الحالة المبدئية)\r\nlayers_label=‏‏الطبقات\r\nthumbs.title=اعرض مُصغرات\r\nthumbs_label=مُصغّرات\r\nfindbar.title=ابحث في المستند\r\nfindbar_label=ابحث\r\n\r\nadditional_layers=الطبقات الإضافية\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=صفحة {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=صفحة {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=مصغّرة صفحة {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=ابحث\r\nfind_input.placeholder=ابحث في المستند…\r\nfind_previous.title=ابحث عن التّواجد السّابق للعبارة\r\nfind_previous_label=السابق\r\nfind_next.title=ابحث عن التّواجد التّالي للعبارة\r\nfind_next_label=التالي\r\nfind_highlight=أبرِز الكل\r\nfind_match_case_label=طابق حالة الأحرف\r\nfind_entire_word_label=كلمات كاملة\r\nfind_reached_top=تابعت من الأسفل بعدما وصلت إلى بداية المستند\r\nfind_reached_bottom=تابعت من الأعلى بعدما وصلت إلى نهاية المستند\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} من أصل مطابقة واحدة\r\nfind_match_count[two]={{current}} من أصل مطابقتين\r\nfind_match_count[few]={{current}} من أصل {{total}} مطابقات\r\nfind_match_count[many]={{current}} من أصل {{total}} مطابقة\r\nfind_match_count[other]={{current}} من أصل {{total}} مطابقة\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=فقط\r\nfind_match_count_limit[one]=أكثر من مطابقة واحدة\r\nfind_match_count_limit[two]=أكثر من مطابقتين\r\nfind_match_count_limit[few]=أكثر من {{limit}} مطابقات\r\nfind_match_count_limit[many]=أكثر من {{limit}} مطابقة\r\nfind_match_count_limit[other]=أكثر من {{limit}} مطابقة\r\nfind_not_found=لا وجود للعبارة\r\n\r\n# Error panel labels\r\nerror_more_info=معلومات أكثر\r\nerror_less_info=معلومات أقل\r\nerror_close=أغلق\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=‏PDF.js ن{{version}} ‏(بناء: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=الرسالة: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=الرصّة: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=الملف: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=السطر: {{line}}\r\nrendering_error=حدث خطأ أثناء عرض الصفحة.\r\n\r\n# Predefined zoom values\r\npage_scale_width=عرض الصفحة\r\npage_scale_fit=ملائمة الصفحة\r\npage_scale_auto=تقريب تلقائي\r\npage_scale_actual=الحجم الفعلي\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}٪\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=عطل\r\nloading_error=حدث عطل أثناء تحميل ملف PDF.\r\ninvalid_file_error=ملف PDF تالف أو غير صحيح.\r\nmissing_file_error=ملف PDF غير موجود.\r\nunexpected_response_error=استجابة خادوم غير متوقعة.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}، {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[تعليق {{type}}]\r\npassword_label=أدخل لكلمة السر لفتح هذا الملف.\r\npassword_invalid=كلمة سر خطأ. من فضلك أعد المحاولة.\r\npassword_ok=حسنا\r\npassword_cancel=ألغِ\r\n\r\nprinting_not_supported=تحذير: لا يدعم هذا المتصفح الطباعة بشكل كامل.\r\nprinting_not_ready=تحذير: ملف PDF لم يُحمّل كاملًا للطباعة.\r\nweb_fonts_disabled=خطوط الوب مُعطّلة: تعذّر استخدام خطوط PDF المُضمّنة.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ast/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Páxina anterior\r\nprevious_label=Anterior\r\nnext.title=Páxina siguiente\r\nnext_label=Siguiente\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Páxina\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=de {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} de {{pagesCount}})\r\n\r\nzoom_out.title=Reducir\r\nzoom_out_label=Reducir\r\nzoom_in.title=Aumentar\r\nzoom_in_label=Aumentar\r\nzoom.title=Tamañu\r\nopen_file.title=Abrir ficheru\r\nopen_file_label=Abrir\r\nprint.title=Imprentar\r\nprint_label=Imprentar\r\ndownload.title=Descargar\r\ndownload_label=Descargar\r\nbookmark.title=Vista actual (copiar o abrir nuna nueva ventana)\r\nbookmark_label=Vista actual\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Ferramientes\r\ntools_label=Ferramientes\r\nfirst_page.title=Dir a la primer páxina\r\nfirst_page.label=Dir a la primer páxina\r\nfirst_page_label=Dir a la primer páxina\r\nlast_page.title=Dir a la postrer páxina\r\nlast_page.label=Dir a la cabera páxina\r\nlast_page_label=Dir a la postrer páxina\r\npage_rotate_cw.title=Xirar en sen horariu\r\npage_rotate_cw_label=Xirar en sen horariu\r\npage_rotate_ccw.title=Xirar en sen antihorariu\r\npage_rotate_ccw_label=Xirar en sen antihorariu\r\n\r\n\r\nscroll_vertical_label=Desplazamientu vertical\r\nscroll_horizontal_label=Desplazamientu horizontal\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Propiedaes del documentu…\r\ndocument_properties_label=Propiedaes del documentu…\r\ndocument_properties_file_name=Nome de ficheru:\r\ndocument_properties_file_size=Tamañu de ficheru:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Títulu:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Asuntu:\r\ndocument_properties_keywords=Pallabres clave:\r\ndocument_properties_creation_date=Data de creación:\r\ndocument_properties_modification_date=Data de modificación:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Creador:\r\ndocument_properties_producer=Productor PDF:\r\ndocument_properties_version=Versión PDF:\r\ndocument_properties_page_count=Númberu de páxines:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized_yes=Sí\r\ndocument_properties_linearized_no=Non\r\ndocument_properties_close=Zarrar\r\n\r\nprint_progress_message=Tresnando documentu pa imprentar…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Encaboxar\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Camudar barra llateral\r\ntoggle_sidebar_label=Camudar barra llateral\r\ndocument_outline.title=Amosar esquema del documentu (duble clic pa espander/contrayer tolos elementos)\r\ndocument_outline_label=Esquema del documentu\r\nattachments.title=Amosar axuntos\r\nattachments_label=Axuntos\r\nthumbs.title=Amosar miniatures\r\nthumbs_label=Miniatures\r\nfindbar.title=Guetar nel documentu\r\nfindbar_label=Guetar\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Páxina {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura de la páxina {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Guetar\r\nfind_input.placeholder=Guetar nel documentu…\r\nfind_previous.title=Alcontrar l'anterior apaición de la fras\r\nfind_previous_label=Anterior\r\nfind_next.title=Alcontrar la siguiente apaición d'esta fras\r\nfind_next_label=Siguiente\r\nfind_highlight=Remarcar toos\r\nfind_match_case_label=Coincidencia de mayús./minús.\r\nfind_entire_word_label=Pallabres enteres\r\nfind_reached_top=Algamóse'l principiu del documentu, siguir dende'l final\r\nfind_reached_bottom=Algamóse'l final del documentu, siguir dende'l principiu\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_not_found=Frase non atopada\r\n\r\n# Error panel labels\r\nerror_more_info=Más información\r\nerror_less_info=Menos información\r\nerror_close=Zarrar\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mensaxe: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pila: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Ficheru: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Llinia: {{line}}\r\nrendering_error=Hebo un fallu al renderizar la páxina.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Anchor de la páxina\r\npage_scale_fit=Axuste de la páxina\r\npage_scale_auto=Tamañu automáticu\r\npage_scale_actual=Tamañu actual\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Fallu\r\nloading_error=Hebo un fallu al cargar el PDF.\r\ninvalid_file_error=Ficheru PDF inválidu o corruptu.\r\nmissing_file_error=Nun hai ficheru PDF.\r\nunexpected_response_error=Rempuesta inesperada del sirvidor.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anotación {{type}}]\r\npassword_label=Introduz la contraseña p'abrir esti ficheru PDF\r\npassword_invalid=Contraseña non válida. Vuelvi a intentalo.\r\npassword_ok=Aceutar\r\npassword_cancel=Encaboxar\r\n\r\nprinting_not_supported=Alvertencia: La imprentación entá nun ta sofitada dafechu nesti restolador.\r\nprinting_not_ready=Avisu: Esti PDF nun se cargó completamente pa poder imprentase.\r\nweb_fonts_disabled=Les fontes web tán desactivaes: ye imposible usar les fontes PDF embebíes.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/az/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Əvvəlki səhifə\r\nprevious_label=Əvvəlkini tap\r\nnext.title=Növbəti səhifə\r\nnext_label=İrəli\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Səhifə\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=/ {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} / {{pagesCount}})\r\n\r\nzoom_out.title=Uzaqlaş\r\nzoom_out_label=Uzaqlaş\r\nzoom_in.title=Yaxınlaş\r\nzoom_in_label=Yaxınlaş\r\nzoom.title=Yaxınlaşdırma\r\npresentation_mode.title=Təqdimat Rejiminə Keç\r\npresentation_mode_label=Təqdimat Rejimi\r\nopen_file.title=Fayl Aç\r\nopen_file_label=Aç\r\nprint.title=Yazdır\r\nprint_label=Yazdır\r\ndownload.title=Endir\r\ndownload_label=Endir\r\nbookmark.title=Hazırkı görünüş (köçür və ya yeni pəncərədə aç)\r\nbookmark_label=Hazırkı görünüş\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Alətlər\r\ntools_label=Alətlər\r\nfirst_page.title=İlk Səhifəyə get\r\nfirst_page.label=İlk Səhifəyə get\r\nfirst_page_label=İlk Səhifəyə get\r\nlast_page.title=Son Səhifəyə get\r\nlast_page.label=Son Səhifəyə get\r\nlast_page_label=Son Səhifəyə get\r\npage_rotate_cw.title=Saat İstiqamətində Fırlat\r\npage_rotate_cw.label=Saat İstiqamətində Fırlat\r\npage_rotate_cw_label=Saat İstiqamətində Fırlat\r\npage_rotate_ccw.title=Saat İstiqamətinin Əksinə Fırlat\r\npage_rotate_ccw.label=Saat İstiqamətinin Əksinə Fırlat\r\npage_rotate_ccw_label=Saat İstiqamətinin Əksinə Fırlat\r\n\r\ncursor_text_select_tool.title=Yazı seçmə alətini aktivləşdir\r\ncursor_text_select_tool_label=Yazı seçmə aləti\r\ncursor_hand_tool.title=Əl alətini aktivləşdir\r\ncursor_hand_tool_label=Əl aləti\r\n\r\nscroll_vertical.title=Şaquli sürüşdürmə işlət\r\nscroll_vertical_label=Şaquli sürüşdürmə\r\nscroll_horizontal.title=Üfüqi sürüşdürmə işlət\r\nscroll_horizontal_label=Üfüqi sürüşdürmə\r\nscroll_wrapped.title=Bükülü sürüşdürmə işlət\r\nscroll_wrapped_label=Bükülü sürüşdürmə\r\n\r\nspread_none.title=Yan-yana birləşdirilmiş səhifələri işlətmə\r\nspread_none_label=Birləşdirmə\r\nspread_odd.title=Yan-yana birləşdirilmiş səhifələri tək nömrəli səhifələrdən başlat\r\nspread_odd_label=Tək nömrəli\r\nspread_even.title=Yan-yana birləşdirilmiş səhifələri cüt nömrəli səhifələrdən başlat\r\nspread_even_label=Cüt nömrəli\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Sənəd xüsusiyyətləri…\r\ndocument_properties_label=Sənəd xüsusiyyətləri…\r\ndocument_properties_file_name=Fayl adı:\r\ndocument_properties_file_size=Fayl ölçüsü:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bayt)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bayt)\r\ndocument_properties_title=Başlık:\r\ndocument_properties_author=Müəllif:\r\ndocument_properties_subject=Mövzu:\r\ndocument_properties_keywords=Açar sözlər:\r\ndocument_properties_creation_date=Yaradılış Tarixi :\r\ndocument_properties_modification_date=Dəyişdirilmə Tarixi :\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Yaradan:\r\ndocument_properties_producer=PDF yaradıcısı:\r\ndocument_properties_version=PDF versiyası:\r\ndocument_properties_page_count=Səhifə sayı:\r\ndocument_properties_page_size=Səhifə Ölçüsü:\r\ndocument_properties_page_size_unit_inches=inç\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=portret\r\ndocument_properties_page_size_orientation_landscape=albom\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Məktub\r\ndocument_properties_page_size_name_legal=Hüquqi\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Fast Web View:\r\ndocument_properties_linearized_yes=Bəli\r\ndocument_properties_linearized_no=Xeyr\r\ndocument_properties_close=Qapat\r\n\r\nprint_progress_message=Sənəd çap üçün hazırlanır…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Ləğv et\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Yan Paneli Aç/Bağla\r\ntoggle_sidebar_notification.title=Yan paneli çevir (sənəddə icmal/bağlama var)\r\ntoggle_sidebar_notification2.title=Yan paneli çevir (sənəddə icmal/bağlamalar/laylar mövcuddur)\r\ntoggle_sidebar_label=Yan Paneli Aç/Bağla\r\ndocument_outline.title=Sənədin eskizini göstər (bütün bəndləri açmaq/yığmaq üçün iki dəfə klikləyin)\r\ndocument_outline_label=Sənəd strukturu\r\nattachments.title=Bağlamaları göstər\r\nattachments_label=Bağlamalar\r\nlayers.title=Layları göstər (bütün layları ilkin halına sıfırlamaq üçün iki dəfə klikləyin)\r\nlayers_label=Laylar\r\nthumbs.title=Kiçik şəkilləri göstər\r\nthumbs_label=Kiçik şəkillər\r\nfindbar.title=Sənəddə Tap\r\nfindbar_label=Tap\r\n\r\nadditional_layers=Əlavə laylar\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Səhifə {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Səhifə{{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}} səhifəsinin kiçik vəziyyəti\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Tap\r\nfind_input.placeholder=Sənəddə tap…\r\nfind_previous.title=Bir öncəki uyğun gələn sözü tapır\r\nfind_previous_label=Geri\r\nfind_next.title=Bir sonrakı uyğun gələn sözü tapır\r\nfind_next_label=İrəli\r\nfind_highlight=İşarələ\r\nfind_match_case_label=Böyük/kiçik hərfə həssaslıq\r\nfind_entire_word_label=Tam sözlər\r\nfind_reached_top=Sənədin yuxarısına çatdı, aşağıdan davam edir\r\nfind_reached_bottom=Sənədin sonuna çatdı, yuxarıdan davam edir\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} / {{total}} uyğunluq\r\nfind_match_count[two]={{current}} / {{total}} uyğunluq\r\nfind_match_count[few]={{current}} / {{total}} uyğunluq\r\nfind_match_count[many]={{current}} / {{total}} uyğunluq\r\nfind_match_count[other]={{current}} / {{total}} uyğunluq\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]={{limit}}-dan çox uyğunluq\r\nfind_match_count_limit[one]={{limit}}-dən çox uyğunluq\r\nfind_match_count_limit[two]={{limit}}-dən çox uyğunluq\r\nfind_match_count_limit[few]={{limit}} uyğunluqdan daha çox\r\nfind_match_count_limit[many]={{limit}} uyğunluqdan daha çox\r\nfind_match_count_limit[other]={{limit}} uyğunluqdan daha çox\r\nfind_not_found=Uyğunlaşma tapılmadı\r\n\r\n# Error panel labels\r\nerror_more_info=Daha çox məlumati\r\nerror_less_info=Daha az məlumat\r\nerror_close=Qapat\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (yığma: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=İsmarıc: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stek: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fayl: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Sətir: {{line}}\r\nrendering_error=Səhifə göstərilərkən səhv yarandı.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Səhifə genişliyi\r\npage_scale_fit=Səhifəni sığdır\r\npage_scale_auto=Avtomatik yaxınlaşdır\r\npage_scale_actual=Hazırkı Həcm\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Səhv\r\nloading_error=PDF yüklenərkən bir səhv yarandı.\r\ninvalid_file_error=Səhv və ya zədələnmiş olmuş PDF fayl.\r\nmissing_file_error=PDF fayl yoxdur.\r\nunexpected_response_error=Gözlənilməz server cavabı.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotasiyası]\r\npassword_label=Bu PDF faylı açmaq üçün parolu daxil edin.\r\npassword_invalid=Parol səhvdir. Bir daha yoxlayın.\r\npassword_ok=Tamam\r\npassword_cancel=Ləğv et\r\n\r\nprinting_not_supported=Xəbərdarlıq: Çap bu səyyah tərəfindən tam olaraq dəstəklənmir.\r\nprinting_not_ready=Xəbərdarlıq: PDF çap üçün tam yüklənməyib.\r\nweb_fonts_disabled=Web Şriftlər söndürülüb: yerləşdirilmiş PDF şriftlərini istifadə etmək mümkün deyil.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/be/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Папярэдняя старонка\r\nprevious_label=Папярэдняя\r\nnext.title=Наступная старонка\r\nnext_label=Наступная\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Старонка\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=з {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} з {{pagesCount}})\r\n\r\nzoom_out.title=Паменшыць\r\nzoom_out_label=Паменшыць\r\nzoom_in.title=Павялічыць\r\nzoom_in_label=Павялічыць\r\nzoom.title=Павялічэнне тэксту\r\npresentation_mode.title=Пераключыцца ў рэжым паказу\r\npresentation_mode_label=Рэжым паказу\r\nopen_file.title=Адкрыць файл\r\nopen_file_label=Адкрыць\r\nprint.title=Друкаваць\r\nprint_label=Друкаваць\r\ndownload.title=Сцягнуць\r\ndownload_label=Сцягнуць\r\nbookmark.title=Цяперашняя праява (скапіяваць або адчыніць у новым акне)\r\nbookmark_label=Цяперашняя праява\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Прылады\r\ntools_label=Прылады\r\nfirst_page.title=Перайсці на першую старонку\r\nfirst_page.label=Перайсці на першую старонку\r\nfirst_page_label=Перайсці на першую старонку\r\nlast_page.title=Перайсці на апошнюю старонку\r\nlast_page.label=Перайсці на апошнюю старонку\r\nlast_page_label=Перайсці на апошнюю старонку\r\npage_rotate_cw.title=Павярнуць па сонцу\r\npage_rotate_cw.label=Павярнуць па сонцу\r\npage_rotate_cw_label=Павярнуць па сонцу\r\npage_rotate_ccw.title=Павярнуць супраць сонца\r\npage_rotate_ccw.label=Павярнуць супраць сонца\r\npage_rotate_ccw_label=Павярнуць супраць сонца\r\n\r\ncursor_text_select_tool.title=Уключыць прыладу выбару тэксту\r\ncursor_text_select_tool_label=Прылада выбару тэксту\r\ncursor_hand_tool.title=Уключыць ручную прыладу\r\ncursor_hand_tool_label=Ручная прылада\r\n\r\nscroll_vertical.title=Ужываць вертыкальную пракрутку\r\nscroll_vertical_label=Вертыкальная пракрутка\r\nscroll_horizontal.title=Ужываць гарызантальную пракрутку\r\nscroll_horizontal_label=Гарызантальная пракрутка\r\nscroll_wrapped.title=Ужываць маштабавальную пракрутку\r\nscroll_wrapped_label=Маштабавальная пракрутка\r\n\r\nspread_none.title=Не выкарыстоўваць разгорнутыя старонкі\r\nspread_none_label=Без разгорнутых старонак\r\nspread_odd.title=Разгорнутыя старонкі пачынаючы з няцотных нумароў\r\nspread_odd_label=Няцотныя старонкі злева\r\nspread_even.title=Разгорнутыя старонкі пачынаючы з цотных нумароў\r\nspread_even_label=Цотныя старонкі злева\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Уласцівасці дакумента…\r\ndocument_properties_label=Уласцівасці дакумента…\r\ndocument_properties_file_name=Назва файла:\r\ndocument_properties_file_size=Памер файла:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} КБ ({{size_b}} байт)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} МБ ({{size_b}} байт)\r\ndocument_properties_title=Загаловак:\r\ndocument_properties_author=Аўтар:\r\ndocument_properties_subject=Тэма:\r\ndocument_properties_keywords=Ключавыя словы:\r\ndocument_properties_creation_date=Дата стварэння:\r\ndocument_properties_modification_date=Дата змянення:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Стваральнік:\r\ndocument_properties_producer=Вырабнік PDF:\r\ndocument_properties_version=Версія PDF:\r\ndocument_properties_page_count=Колькасць старонак:\r\ndocument_properties_page_size=Памер старонкі:\r\ndocument_properties_page_size_unit_inches=цаляў\r\ndocument_properties_page_size_unit_millimeters=мм\r\ndocument_properties_page_size_orientation_portrait=кніжная\r\ndocument_properties_page_size_orientation_landscape=альбомная\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Хуткі прагляд у Інтэрнэце:\r\ndocument_properties_linearized_yes=Так\r\ndocument_properties_linearized_no=Не\r\ndocument_properties_close=Закрыць\r\n\r\nprint_progress_message=Падрыхтоўка дакумента да друку…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Скасаваць\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Паказаць/схаваць бакавую панэль\r\ntoggle_sidebar_notification.title=Паказаць/схаваць бакавую панэль (дакумент мае змест/укладанні)\r\ntoggle_sidebar_notification2.title=Паказаць/схаваць бакавую панэль (дакумент мае змест/укладанні/пласты)\r\ntoggle_sidebar_label=Паказаць/схаваць бакавую панэль\r\ndocument_outline.title=Паказаць структуру дакумента (двайная пстрычка, каб разгарнуць /згарнуць усе элементы)\r\ndocument_outline_label=Структура дакумента\r\nattachments.title=Паказаць далучэнні\r\nattachments_label=Далучэнні\r\nlayers.title=Паказаць пласты (двойчы пстрыкніце, каб скінуць усе пласты да прадвызначанага стану)\r\nlayers_label=Пласты\r\nthumbs.title=Паказ мініяцюр\r\nthumbs_label=Мініяцюры\r\nfindbar.title=Пошук у дакуменце\r\nfindbar_label=Знайсці\r\n\r\nadditional_layers=Дадатковыя пласты\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Старонка {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Старонка {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Мініяцюра старонкі {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Шукаць\r\nfind_input.placeholder=Шукаць у дакуменце…\r\nfind_previous.title=Знайсці папярэдні выпадак выразу\r\nfind_previous_label=Папярэдні\r\nfind_next.title=Знайсці наступны выпадак выразу\r\nfind_next_label=Наступны\r\nfind_highlight=Падфарбаваць усе\r\nfind_match_case_label=Адрозніваць вялікія/малыя літары\r\nfind_entire_word_label=Словы цалкам\r\nfind_reached_top=Дасягнуты пачатак дакумента, працяг з канца\r\nfind_reached_bottom=Дасягнуты канец дакумента, працяг з пачатку\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} з {{total}} супадзення\r\nfind_match_count[two]={{current}} з {{total}} супадзенняў\r\nfind_match_count[few]={{current}} з {{total}} супадзенняў\r\nfind_match_count[many]={{current}} з {{total}} супадзенняў\r\nfind_match_count[other]={{current}} з {{total}} супадзенняў\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Больш за {{limit}} супадзенняў\r\nfind_match_count_limit[one]=Больш за {{limit}} супадзенне\r\nfind_match_count_limit[two]=Больш за {{limit}} супадзенняў\r\nfind_match_count_limit[few]=Больш за {{limit}} супадзенняў\r\nfind_match_count_limit[many]=Больш за {{limit}} супадзенняў\r\nfind_match_count_limit[other]=Больш за {{limit}} супадзенняў\r\nfind_not_found=Выраз не знойдзены\r\n\r\n# Error panel labels\r\nerror_more_info=Падрабязней\r\nerror_less_info=Сцісла\r\nerror_close=Закрыць\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js в{{version}} (зборка: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Паведамленне: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Стос: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Файл: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Радок: {{line}}\r\nrendering_error=Здарылася памылка падчас адлюстравання старонкі.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Шырыня старонкі\r\npage_scale_fit=Уцісненне старонкі\r\npage_scale_auto=Аўтаматычнае павелічэнне\r\npage_scale_actual=Сапраўдны памер\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Памылка\r\nloading_error=Здарылася памылка падчас загрузкі PDF.\r\ninvalid_file_error=Няспраўны або пашкоджаны файл PDF.\r\nmissing_file_error=Адсутны файл PDF.\r\nunexpected_response_error=Нечаканы адказ сервера.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=Увядзіце пароль, каб адкрыць гэты файл PDF.\r\npassword_invalid=Нядзейсны пароль. Паспрабуйце зноў.\r\npassword_ok=Добра\r\npassword_cancel=Скасаваць\r\n\r\nprinting_not_supported=Папярэджанне: друк не падтрымліваецца цалкам гэтым браўзерам.\r\nprinting_not_ready=Увага: PDF не сцягнуты цалкам для друкавання.\r\nweb_fonts_disabled=Шрыфты Сеціва забаронены: немагчыма ўжываць укладзеныя шрыфты PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/bg/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Предишна страница\r\nprevious_label=Предишна\r\nnext.title=Следваща страница\r\nnext_label=Следваща\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Страница\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=от {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} от {{pagesCount}})\r\n\r\nzoom_out.title=Намаляване\r\nzoom_out_label=Намаляване\r\nzoom_in.title=Увеличаване\r\nzoom_in_label=Увеличаване\r\nzoom.title=Мащабиране\r\npresentation_mode.title=Превключване към режим на представяне\r\npresentation_mode_label=Режим на представяне\r\nopen_file.title=Отваряне на файл\r\nopen_file_label=Отваряне\r\nprint.title=Отпечатване\r\nprint_label=Отпечатване\r\ndownload.title=Изтегляне\r\ndownload_label=Изтегляне\r\nbookmark.title=Текущ изглед (копиране или отваряне в нов прозорец)\r\nbookmark_label=Текущ изглед\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Инструменти\r\ntools_label=Инструменти\r\nfirst_page.title=Към първата страница\r\nfirst_page.label=Към първата страница\r\nfirst_page_label=Към първата страница\r\nlast_page.title=Към последната страница\r\nlast_page.label=Към последната страница\r\nlast_page_label=Към последната страница\r\npage_rotate_cw.title=Завъртане по час. стрелка\r\npage_rotate_cw.label=Завъртане по часовниковата стрелка\r\npage_rotate_cw_label=Завъртане по часовниковата стрелка\r\npage_rotate_ccw.title=Завъртане обратно на час. стрелка\r\npage_rotate_ccw.label=Завъртане обратно на часовниковата стрелка\r\npage_rotate_ccw_label=Завъртане обратно на часовниковата стрелка\r\n\r\ncursor_text_select_tool.title=Включване на инструмента за избор на текст\r\ncursor_text_select_tool_label=Инструмент за избор на текст\r\ncursor_hand_tool.title=Включване на инструмента ръка\r\ncursor_hand_tool_label=Инструмент ръка\r\n\r\nscroll_vertical.title=Използване на вертикално плъзгане\r\nscroll_vertical_label=Вертикално плъзгане\r\nscroll_horizontal.title=Използване на хоризонтално\r\nscroll_horizontal_label=Хоризонтално плъзгане\r\nscroll_wrapped.title=Използване на мащабируемо плъзгане\r\nscroll_wrapped_label=Мащабируемо плъзгане\r\n\r\nspread_none.title=Режимът на сдвояване е изключен\r\nspread_none_label=Без сдвояване\r\nspread_odd.title=Сдвояване, започвайки от нечетните страници\r\nspread_odd_label=Нечетните отляво\r\nspread_even.title=Сдвояване, започвайки от четните страници\r\nspread_even_label=Четните отляво\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Свойства на документа…\r\ndocument_properties_label=Свойства на документа…\r\ndocument_properties_file_name=Име на файл:\r\ndocument_properties_file_size=Големина на файл:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} КБ ({{size_b}} байта)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} МБ ({{size_b}} байта)\r\ndocument_properties_title=Заглавие:\r\ndocument_properties_author=Автор:\r\ndocument_properties_subject=Тема:\r\ndocument_properties_keywords=Ключови думи:\r\ndocument_properties_creation_date=Дата на създаване:\r\ndocument_properties_modification_date=Дата на промяна:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Създател:\r\ndocument_properties_producer=PDF произведен от:\r\ndocument_properties_version=Издание на PDF:\r\ndocument_properties_page_count=Брой страници:\r\ndocument_properties_page_size=Размер на страницата:\r\ndocument_properties_page_size_unit_inches=инч\r\ndocument_properties_page_size_unit_millimeters=мм\r\ndocument_properties_page_size_orientation_portrait=портрет\r\ndocument_properties_page_size_orientation_landscape=пейзаж\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Правни въпроси\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Бърз преглед:\r\ndocument_properties_linearized_yes=Да\r\ndocument_properties_linearized_no=Не\r\ndocument_properties_close=Затваряне\r\n\r\nprint_progress_message=Подготвяне на документа за отпечатване…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Отказ\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Превключване на страничната лента\r\ntoggle_sidebar_notification.title=Превключване на страничната лента (документи със структура/прикачени файлове)\r\ntoggle_sidebar_label=Превключване на страничната лента\r\ndocument_outline.title=Показване на структурата на документа (двукратно щракване за свиване/разгъване на всичко)\r\ndocument_outline_label=Структура на документа\r\nattachments.title=Показване на притурките\r\nattachments_label=Притурки\r\nthumbs.title=Показване на миниатюрите\r\nthumbs_label=Миниатюри\r\nfindbar.title=Намиране в документа\r\nfindbar_label=Търсене\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Страница {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Миниатюра на страница {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Търсене\r\nfind_input.placeholder=Търсене в документа…\r\nfind_previous.title=Намиране на предишно съвпадение на фразата\r\nfind_previous_label=Предишна\r\nfind_next.title=Намиране на следващо съвпадение на фразата\r\nfind_next_label=Следваща\r\nfind_highlight=Открояване на всички\r\nfind_match_case_label=Съвпадение на регистъра\r\nfind_entire_word_label=Цели думи\r\nfind_reached_top=Достигнато е началото на документа, продължаване от края\r\nfind_reached_bottom=Достигнат е краят на документа, продължаване от началото\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} от {{total}} съвпадение\r\nfind_match_count[two]={{current}} от {{total}} съвпадения\r\nfind_match_count[few]={{current}} от {{total}} съвпадения\r\nfind_match_count[many]={{current}} от {{total}} съвпадения\r\nfind_match_count[other]={{current}} от {{total}} съвпадения\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Повече от {{limit}} съвпадения\r\nfind_match_count_limit[one]=Повече от {{limit}} съвпадение\r\nfind_match_count_limit[two]=Повече от {{limit}} съвпадения\r\nfind_match_count_limit[few]=Повече от {{limit}} съвпадения\r\nfind_match_count_limit[many]=Повече от {{limit}} съвпадения\r\nfind_match_count_limit[other]=Повече от {{limit}} съвпадения\r\nfind_not_found=Фразата не е намерена\r\n\r\n# Error panel labels\r\nerror_more_info=Повече информация\r\nerror_less_info=По-малко информация\r\nerror_close=Затваряне\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=Издание на PDF.js {{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Съобщение: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Стек: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Файл: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Ред: {{line}}\r\nrendering_error=Грешка при изчертаване на страницата.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Ширина на страницата\r\npage_scale_fit=Вместване в страницата\r\npage_scale_auto=Автоматично мащабиране\r\npage_scale_actual=Действителен размер\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Грешка\r\nloading_error=Получи се грешка при зареждане на PDF-а.\r\ninvalid_file_error=Невалиден или повреден PDF файл.\r\nmissing_file_error=Липсващ PDF файл.\r\nunexpected_response_error=Неочакван отговор от сървъра.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Анотация {{type}}]\r\npassword_label=Въведете парола за отваряне на този PDF файл.\r\npassword_invalid=Невалидна парола. Моля, опитайте отново.\r\npassword_ok=Добре\r\npassword_cancel=Отказ\r\n\r\nprinting_not_supported=Внимание: Този четец няма пълна поддръжка на отпечатване.\r\nprinting_not_ready=Внимание: Този PDF файл не е напълно зареден за печат.\r\nweb_fonts_disabled=Уеб-шрифтовете са забранени: разрешаване на използването на вградените PDF шрифтове.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/bn/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=পূর্ববর্তী পাতা\r\nprevious_label=পূর্ববর্তী\r\nnext.title=পরবর্তী পাতা\r\nnext_label=পরবর্তী\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=পাতা\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}} এর\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pagesCount}} এর {{pageNumber}})\r\n\r\nzoom_out.title=ছোট আকারে প্রদর্শন\r\nzoom_out_label=ছোট আকারে প্রদর্শন\r\nzoom_in.title=বড় আকারে প্রদর্শন\r\nzoom_in_label=বড় আকারে প্রদর্শন\r\nzoom.title=বড় আকারে প্রদর্শন\r\npresentation_mode.title=উপস্থাপনা মোডে স্যুইচ করুন\r\npresentation_mode_label=উপস্থাপনা মোড\r\nopen_file.title=ফাইল খুলুন\r\nopen_file_label=খুলুন\r\nprint.title=মুদ্রণ\r\nprint_label=মুদ্রণ\r\ndownload.title=ডাউনলোড\r\ndownload_label=ডাউনলোড\r\nbookmark.title=বর্তমান অবস্থা (অনুলিপি অথবা নতুন উইন্ডো তে খুলুন)\r\nbookmark_label=বর্তমান অবস্থা\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=টুল\r\ntools_label=টুল\r\nfirst_page.title=প্রথম পাতায় যাও\r\nfirst_page.label=প্রথম পাতায় যাও\r\nfirst_page_label=প্রথম পাতায় যাও\r\nlast_page.title=শেষ পাতায় যাও\r\nlast_page.label=শেষ পাতায় যাও\r\nlast_page_label=শেষ পাতায় যাও\r\npage_rotate_cw.title=ঘড়ির কাঁটার দিকে ঘোরাও\r\npage_rotate_cw.label=ঘড়ির কাঁটার দিকে ঘোরাও\r\npage_rotate_cw_label=ঘড়ির কাঁটার দিকে ঘোরাও\r\npage_rotate_ccw.title=ঘড়ির কাঁটার বিপরীতে ঘোরাও\r\npage_rotate_ccw.label=ঘড়ির কাঁটার বিপরীতে ঘোরাও\r\npage_rotate_ccw_label=ঘড়ির কাঁটার বিপরীতে ঘোরাও\r\n\r\ncursor_text_select_tool.title=লেখা নির্বাচক টুল সক্রিয় করুন\r\ncursor_text_select_tool_label=লেখা নির্বাচক টুল\r\ncursor_hand_tool.title=হ্যান্ড টুল সক্রিয় করুন\r\ncursor_hand_tool_label=হ্যান্ড টুল\r\n\r\nscroll_vertical.title=উলম্ব স্ক্রলিং ব্যবহার করুন\r\nscroll_vertical_label=উলম্ব স্ক্রলিং\r\nscroll_horizontal.title=অনুভূমিক স্ক্রলিং ব্যবহার করুন\r\nscroll_horizontal_label=অনুভূমিক স্ক্রলিং\r\nscroll_wrapped.title=Wrapped স্ক্রোলিং ব্যবহার করুন\r\nscroll_wrapped_label=Wrapped স্ক্রোলিং\r\n\r\nspread_none.title=পেজ স্প্রেডগুলোতে যোগদান করবেন না\r\nspread_none_label=Spreads নেই\r\nspread_odd_label=বিজোড় Spreads\r\nspread_even_label=জোড় Spreads\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=নথি বৈশিষ্ট্য…\r\ndocument_properties_label=নথি বৈশিষ্ট্য…\r\ndocument_properties_file_name=ফাইলের নাম:\r\ndocument_properties_file_size=ফাইলের আকার:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} কেবি ({{size_b}} বাইট)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} এমবি ({{size_b}} বাইট)\r\ndocument_properties_title=শিরোনাম:\r\ndocument_properties_author=লেখক:\r\ndocument_properties_subject=বিষয়:\r\ndocument_properties_keywords=কীওয়ার্ড:\r\ndocument_properties_creation_date=তৈরির তারিখ:\r\ndocument_properties_modification_date=পরিবর্তনের তারিখ:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=প্রস্তুতকারক:\r\ndocument_properties_producer=পিডিএফ প্রস্তুতকারক:\r\ndocument_properties_version=পিডিএফ সংষ্করণ:\r\ndocument_properties_page_count=মোট পাতা:\r\ndocument_properties_page_size=পাতার সাইজ:\r\ndocument_properties_page_size_unit_inches=এর মধ্যে\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=উলম্ব\r\ndocument_properties_page_size_orientation_landscape=অনুভূমিক\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=লেটার\r\ndocument_properties_page_size_name_legal=লীগাল\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Fast Web View:\r\ndocument_properties_linearized_yes=হ্যাঁ\r\ndocument_properties_linearized_no=না\r\ndocument_properties_close=বন্ধ\r\n\r\nprint_progress_message=মুদ্রণের জন্য নথি প্রস্তুত করা হচ্ছে…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=বাতিল\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=সাইডবার টগল করুন\r\ntoggle_sidebar_notification.title=সাইডবার টগল (নথিতে আউটলাইন/এটাচমেন্ট রয়েছে)\r\ntoggle_sidebar_label=সাইডবার টগল করুন\r\ndocument_outline.title=নথির আউটলাইন দেখাও (সব আইটেম প্রসারিত/সঙ্কুচিত করতে ডবল ক্লিক করুন)\r\ndocument_outline_label=নথির রূপরেখা\r\nattachments.title=সংযুক্তি দেখাও\r\nattachments_label=সংযুক্তি\r\nthumbs.title=থাম্বনেইল সমূহ প্রদর্শন করুন\r\nthumbs_label=থাম্বনেইল সমূহ\r\nfindbar.title=নথির মধ্যে খুঁজুন\r\nfindbar_label=খুঁজুন\r\n\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=পাতা {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=পাতা {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}} পাতার থাম্বনেইল\r\n\r\n# Find panel button title and messages\r\nfind_input.title=খুঁজুন\r\nfind_input.placeholder=নথির মধ্যে খুঁজুন…\r\nfind_previous.title=বাক্যাংশের পূর্ববর্তী উপস্থিতি অনুসন্ধান\r\nfind_previous_label=পূর্ববর্তী\r\nfind_next.title=বাক্যাংশের পরবর্তী উপস্থিতি অনুসন্ধান\r\nfind_next_label=পরবর্তী\r\nfind_highlight=সব হাইলাইট করা হবে\r\nfind_match_case_label=অক্ষরের ছাঁদ মেলানো\r\nfind_entire_word_label=সম্পূর্ণ শব্দ\r\nfind_reached_top=পাতার শুরুতে পৌছে গেছে, নীচ থেকে আরম্ভ করা হয়েছে\r\nfind_reached_bottom=পাতার শেষে পৌছে গেছে, উপর থেকে আরম্ভ করা হয়েছে\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{total}} এর {{current}} মিল\r\nfind_match_count[two]={{total}} এর {{current}} মিল\r\nfind_match_count[few]={{total}} এর {{current}} মিল\r\nfind_match_count[many]={{total}} এর {{current}} মিল\r\nfind_match_count[other]={{total}} এর {{current}} মিল\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]={{limit}} এর বেশি মিল\r\nfind_match_count_limit[one]={{limit}} এর বেশি মিল\r\nfind_match_count_limit[two]={{limit}} এর বেশি মিল\r\nfind_match_count_limit[few]={{limit}} এর বেশি মিল\r\nfind_match_count_limit[many]={{limit}} এর বেশি মিল\r\nfind_match_count_limit[other]={{limit}} এর বেশি মিল\r\nfind_not_found=বাক্যাংশ পাওয়া যায়নি\r\n\r\n# Error panel labels\r\nerror_more_info=আরও তথ্য\r\nerror_less_info=কম তথ্য\r\nerror_close=বন্ধ\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=বার্তা: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=নথি: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=লাইন: {{line}}\r\nrendering_error=পাতা উপস্থাপনার সময় ত্রুটি দেখা দিয়েছে।\r\n\r\n# Predefined zoom values\r\npage_scale_width=পাতার প্রস্থ\r\npage_scale_fit=পাতা ফিট করুন\r\npage_scale_auto=স্বয়ংক্রিয় জুম\r\npage_scale_actual=প্রকৃত আকার\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=ত্রুটি\r\nloading_error=পিডিএফ লোড করার সময় ত্রুটি দেখা দিয়েছে।\r\ninvalid_file_error=অকার্যকর অথবা ক্ষতিগ্রস্ত পিডিএফ ফাইল।\r\nmissing_file_error=নিখোঁজ PDF ফাইল।\r\nunexpected_response_error=অপ্রত্যাশীত সার্ভার প্রতিক্রিয়া।\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} টীকা]\r\npassword_label=পিডিএফ ফাইলটি ওপেন করতে পাসওয়ার্ড দিন।\r\npassword_invalid=ভুল পাসওয়ার্ড। অনুগ্রহ করে আবার চেষ্টা করুন।\r\npassword_ok=ঠিক আছে\r\npassword_cancel=বাতিল\r\n\r\nprinting_not_supported=সতর্কতা: এই ব্রাউজারে মুদ্রণ সম্পূর্ণভাবে সমর্থিত নয়।\r\nprinting_not_ready=সতর্কীকরণ: পিডিএফটি মুদ্রণের জন্য সম্পূর্ণ লোড হয়নি।\r\nweb_fonts_disabled=ওয়েব ফন্ট নিষ্ক্রিয়: সংযুক্ত পিডিএফ ফন্ট ব্যবহার করা যাচ্ছে না।\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/bo/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=དྲ་ངོས་སྔོན་མ\r\nprevious_label=སྔོན་མ\r\nnext.title=དྲ་ངོས་རྗེས་མ\r\nnext_label=རྗེས་མ\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=ཤོག་ངོས\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=of {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} of {{pagesCount}})\r\n\r\nzoom_out.title=Zoom Out\r\nzoom_out_label=Zoom Out\r\nzoom_in.title=Zoom In\r\nzoom_in_label=Zoom In\r\nzoom.title=Zoom\r\npresentation_mode.title=Switch to Presentation Mode\r\npresentation_mode_label=Presentation Mode\r\nopen_file.title=Open File\r\nopen_file_label=Open\r\nprint.title=Print\r\nprint_label=Print\r\ndownload.title=Download\r\ndownload_label=Download\r\nbookmark.title=Current view (copy or open in new window)\r\nbookmark_label=Current View\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Tools\r\ntools_label=Tools\r\nfirst_page.title=Go to First Page\r\nfirst_page.label=Go to First Page\r\nfirst_page_label=Go to First Page\r\nlast_page.title=Go to Last Page\r\nlast_page.label=Go to Last Page\r\nlast_page_label=Go to Last Page\r\npage_rotate_cw.title=Rotate Clockwise\r\npage_rotate_cw.label=Rotate Clockwise\r\npage_rotate_cw_label=Rotate Clockwise\r\npage_rotate_ccw.title=Rotate Counterclockwise\r\npage_rotate_ccw.label=Rotate Counterclockwise\r\npage_rotate_ccw_label=Rotate Counterclockwise\r\n\r\ncursor_text_select_tool.title=Enable Text Selection Tool\r\ncursor_text_select_tool_label=Text Selection Tool\r\ncursor_hand_tool.title=Enable Hand Tool\r\ncursor_hand_tool_label=Hand Tool\r\n\r\nscroll_vertical.title=Use Vertical Scrolling\r\nscroll_vertical_label=Vertical Scrolling\r\nscroll_horizontal.title=Use Horizontal Scrolling\r\nscroll_horizontal_label=Horizontal Scrolling\r\nscroll_wrapped.title=Use Wrapped Scrolling\r\nscroll_wrapped_label=Wrapped Scrolling\r\n\r\nspread_none.title=Do not join page spreads\r\nspread_none_label=No Spreads\r\nspread_odd.title=Join page spreads starting with odd-numbered pages\r\nspread_odd_label=Odd Spreads\r\nspread_even.title=Join page spreads starting with even-numbered pages\r\nspread_even_label=Even Spreads\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Document Properties…\r\ndocument_properties_label=Document Properties…\r\ndocument_properties_file_name=File name:\r\ndocument_properties_file_size=File size:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Title:\r\ndocument_properties_author=Author:\r\ndocument_properties_subject=Subject:\r\ndocument_properties_keywords=Keywords:\r\ndocument_properties_creation_date=Creation Date:\r\ndocument_properties_modification_date=Modification Date:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Creator:\r\ndocument_properties_producer=PDF Producer:\r\ndocument_properties_version=PDF Version:\r\ndocument_properties_page_count=Page Count:\r\ndocument_properties_page_size=Page Size:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=portrait\r\ndocument_properties_page_size_orientation_landscape=landscape\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Fast Web View:\r\ndocument_properties_linearized_yes=Yes\r\ndocument_properties_linearized_no=No\r\ndocument_properties_close=Close\r\n\r\nprint_progress_message=Preparing document for printing…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cancel\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Toggle Sidebar\r\ntoggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)\r\ntoggle_sidebar_label=Toggle Sidebar\r\ndocument_outline.title=Show Document Outline (double-click to expand/collapse all items)\r\ndocument_outline_label=Document Outline\r\nattachments.title=Show Attachments\r\nattachments_label=Attachments\r\nthumbs.title=Show Thumbnails\r\nthumbs_label=Thumbnails\r\nfindbar.title=Find in Document\r\nfindbar_label=Find\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Page {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Thumbnail of Page {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Find\r\nfind_input.placeholder=Find in document…\r\nfind_previous.title=Find the previous occurrence of the phrase\r\nfind_previous_label=Previous\r\nfind_next.title=Find the next occurrence of the phrase\r\nfind_next_label=Next\r\nfind_highlight=Highlight all\r\nfind_match_case_label=Match case\r\nfind_entire_word_label=Whole words\r\nfind_reached_top=Reached top of document, continued from bottom\r\nfind_reached_bottom=Reached end of document, continued from top\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} of {{total}} match\r\nfind_match_count[two]={{current}} of {{total}} matches\r\nfind_match_count[few]={{current}} of {{total}} matches\r\nfind_match_count[many]={{current}} of {{total}} matches\r\nfind_match_count[other]={{current}} of {{total}} matches\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=More than {{limit}} matches\r\nfind_match_count_limit[one]=More than {{limit}} match\r\nfind_match_count_limit[two]=More than {{limit}} matches\r\nfind_match_count_limit[few]=More than {{limit}} matches\r\nfind_match_count_limit[many]=More than {{limit}} matches\r\nfind_match_count_limit[other]=More than {{limit}} matches\r\nfind_not_found=Phrase not found\r\n\r\n# Error panel labels\r\nerror_more_info=More Information\r\nerror_less_info=Less Information\r\nerror_close=Close\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Message: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=File: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Line: {{line}}\r\nrendering_error=An error occurred while rendering the page.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Page Width\r\npage_scale_fit=Page Fit\r\npage_scale_auto=Automatic Zoom\r\npage_scale_actual=Actual Size\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=An error occurred while loading the PDF.\r\ninvalid_file_error=Invalid or corrupted PDF file.\r\nmissing_file_error=Missing PDF file.\r\nunexpected_response_error=Unexpected server response.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=Enter the password to open this PDF file.\r\npassword_invalid=Invalid password. Please try again.\r\npassword_ok=OK\r\npassword_cancel=Cancel\r\n\r\nprinting_not_supported=Warning: Printing is not fully supported by this browser.\r\nprinting_not_ready=Warning: The PDF is not fully loaded for printing.\r\nweb_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/br/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Pajenn a-raok\r\nprevious_label=A-raok\r\nnext.title=Pajenn war-lerc'h\r\nnext_label=War-lerc'h\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Pajenn\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=eus {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} war {{pagesCount}})\r\n\r\nzoom_out.title=Zoum bihanaat\r\nzoom_out_label=Zoum bihanaat\r\nzoom_in.title=Zoum brasaat\r\nzoom_in_label=Zoum brasaat\r\nzoom.title=Zoum\r\npresentation_mode.title=Trec'haoliñ etrezek ar mod kinnigadenn\r\npresentation_mode_label=Mod kinnigadenn\r\nopen_file.title=Digeriñ ur restr\r\nopen_file_label=Digeriñ ur restr\r\nprint.title=Moullañ\r\nprint_label=Moullañ\r\ndownload.title=Pellgargañ\r\ndownload_label=Pellgargañ\r\nbookmark.title=Gwel bremanel (eilañ pe zigeriñ e-barzh ur prenestr nevez)\r\nbookmark_label=Gwel bremanel\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Ostilhoù\r\ntools_label=Ostilhoù\r\nfirst_page.title=Mont d'ar bajenn gentañ\r\nfirst_page.label=Mont d'ar bajenn gentañ\r\nfirst_page_label=Mont d'ar bajenn gentañ\r\nlast_page.title=Mont d'ar bajenn diwezhañ\r\nlast_page.label=Mont d'ar bajenn diwezhañ\r\nlast_page_label=Mont d'ar bajenn diwezhañ\r\npage_rotate_cw.title=C'hwelañ gant roud ar bizied\r\npage_rotate_cw.label=C'hwelañ gant roud ar bizied\r\npage_rotate_cw_label=C'hwelañ gant roud ar bizied\r\npage_rotate_ccw.title=C'hwelañ gant roud gin ar bizied\r\npage_rotate_ccw.label=C'hwelañ gant roud gin ar bizied\r\npage_rotate_ccw_label=C'hwelañ gant roud gin ar bizied\r\n\r\ncursor_text_select_tool.title=Gweredekaat an ostilh diuzañ testenn\r\ncursor_text_select_tool_label=Ostilh diuzañ testenn\r\ncursor_hand_tool.title=Gweredekaat an ostilh dorn\r\ncursor_hand_tool_label=Ostilh dorn\r\n\r\nscroll_vertical.title=Arverañ an dibunañ a-blom\r\nscroll_vertical_label=Dibunañ a-serzh\r\nscroll_horizontal.title=Arverañ an dibunañ a-blaen\r\nscroll_horizontal_label=Dibunañ a-blaen\r\nscroll_wrapped.title=Arverañ an dibunañ paket\r\nscroll_wrapped_label=Dibunañ paket\r\n\r\nspread_none.title=Chom hep stagañ ar skignadurioù\r\nspread_none_label=Skignadenn ebet\r\nspread_odd.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù ampar\r\nspread_odd_label=Pajennoù ampar\r\nspread_even.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù par\r\nspread_even_label=Pajennoù par\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Perzhioù an teul…\r\ndocument_properties_label=Perzhioù an teul…\r\ndocument_properties_file_name=Anv restr:\r\ndocument_properties_file_size=Ment ar restr:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} Ke ({{size_b}} eizhbit)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} Me ({{size_b}} eizhbit)\r\ndocument_properties_title=Titl:\r\ndocument_properties_author=Aozer:\r\ndocument_properties_subject=Danvez:\r\ndocument_properties_keywords=Gerioù-alc'hwez:\r\ndocument_properties_creation_date=Deiziad krouiñ:\r\ndocument_properties_modification_date=Deiziad kemmañ:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Krouer:\r\ndocument_properties_producer=Kenderc'her PDF:\r\ndocument_properties_version=Handelv PDF:\r\ndocument_properties_page_count=Niver a bajennoù:\r\ndocument_properties_page_size=Ment ar bajenn:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=poltred\r\ndocument_properties_page_size_orientation_landscape=gweledva\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Lizher\r\ndocument_properties_page_size_name_legal=Lezennel\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Gwel Web Herrek:\r\ndocument_properties_linearized_yes=Ya\r\ndocument_properties_linearized_no=Ket\r\ndocument_properties_close=Serriñ\r\n\r\nprint_progress_message=O prientiñ an teul evit moullañ...\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Nullañ\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Diskouez/kuzhat ar varrenn gostez\r\ntoggle_sidebar_notification.title=Trec'haoliñ ar verrenn-gostez (ur steuñv pe stagadennoù a zo en teul)\r\ntoggle_sidebar_notification2.title=Trec'haoliñ ar varrenn-gostez (ur steuñv pe stagadennoù a zo en teul)\r\ntoggle_sidebar_label=Diskouez/kuzhat ar varrenn gostez\r\ndocument_outline.title=Diskouez steuñv an teul (daouglikit evit brasaat/bihanaat an holl elfennoù)\r\ndocument_outline_label=Sinedoù an teuliad\r\nattachments.title=Diskouez ar c'henstagadurioù\r\nattachments_label=Kenstagadurioù\r\nlayers_label=Gwiskadoù\r\nthumbs.title=Diskouez ar melvennoù\r\nthumbs_label=Melvennoù\r\nfindbar.title=Klask e-barzh an teuliad\r\nfindbar_label=Klask\r\n\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Pajenn {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Pajenn {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Melvenn ar bajenn {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Klask\r\nfind_input.placeholder=Klask e-barzh an teuliad\r\nfind_previous.title=Kavout an tamm frazenn kent o klotañ ganti\r\nfind_previous_label=Kent\r\nfind_next.title=Kavout an tamm frazenn war-lerc'h o klotañ ganti\r\nfind_next_label=War-lerc'h\r\nfind_highlight=Usskediñ pep tra\r\nfind_match_case_label=Teurel evezh ouzh ar pennlizherennoù\r\nfind_entire_word_label=Gerioù a-bezh\r\nfind_reached_top=Tizhet eo bet derou ar bajenn, kenderc'hel diouzh an diaz\r\nfind_reached_bottom=Tizhet eo bet dibenn ar bajenn, kenderc'hel diouzh ar c'hrec'h\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]=Klotadenn {{current}} war {{total}}\r\nfind_match_count[two]=Klotadenn {{current}} war {{total}}\r\nfind_match_count[few]=Klotadenn {{current}} war {{total}}\r\nfind_match_count[many]=Klotadenn {{current}} war {{total}}\r\nfind_match_count[other]=Klotadenn {{current}} war {{total}}\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Muioc'h eget {{limit}} a glotadennoù\r\nfind_match_count_limit[one]=Muioc'h eget {{limit}} a glotadennoù\r\nfind_match_count_limit[two]=Muioc'h eget {{limit}} a glotadennoù\r\nfind_match_count_limit[few]=Muioc'h eget {{limit}} a glotadennoù\r\nfind_match_count_limit[many]=Muioc'h eget {{limit}} a glotadennoù\r\nfind_match_count_limit[other]=Muioc'h eget {{limit}} a glotadennoù\r\nfind_not_found=N'haller ket kavout ar frazenn\r\n\r\n# Error panel labels\r\nerror_more_info=Muioc'h a ditouroù\r\nerror_less_info=Nebeutoc'h a ditouroù\r\nerror_close=Serriñ\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js handelv {{version}} (kempunadur: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Kemennadenn: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Torn: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Restr: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linenn: {{line}}\r\nrendering_error=Degouezhet ez eus bet ur fazi e-pad skrammañ ar bajennad.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Led ar bajenn\r\npage_scale_fit=Pajenn a-bezh\r\npage_scale_auto=Zoum emgefreek\r\npage_scale_actual=Ment wir\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Fazi\r\nloading_error=Degouezhet ez eus bet ur fazi e-pad kargañ ar PDF.\r\ninvalid_file_error=Restr PDF didalvoudek pe kontronet.\r\nmissing_file_error=Restr PDF o vankout.\r\nunexpected_response_error=Respont dic'hortoz a-berzh an dafariad\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Notennañ]\r\npassword_label=Enankit ar ger-tremen evit digeriñ ar restr PDF-mañ.\r\npassword_invalid=Ger-tremen didalvoudek. Klaskit en-dro mar plij.\r\npassword_ok=Mat eo\r\npassword_cancel=Nullañ\r\n\r\nprinting_not_supported=Kemenn: N'eo ket skoret penn-da-benn ar moullañ gant ar merdeer-mañ.\r\nprinting_not_ready=Kemenn: N'hall ket bezañ moullet ar restr PDF rak n'eo ket karget penn-da-benn.\r\nweb_fonts_disabled=Diweredekaet eo an nodrezhoù web: n'haller ket arverañ an nodrezhoù PDF enframmet.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/brx/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=आगोलनि बिलाइ\r\nprevious_label=आगोलनि\r\nnext.title=उननि बिलाइ\r\nnext_label=उननि\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=बिलाइ\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}} नि\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pagesCount}} नि {{pageNumber}})\r\n\r\nzoom_out.title=फिसायै जुम खालाम\r\nzoom_out_label=फिसायै जुम खालाम\r\nzoom_in.title=गेदेरै जुम खालाम\r\nzoom_in_label=गेदेरै जुम खालाम\r\nzoom.title=जुम खालाम\r\npresentation_mode.title=दिन्थिफुंनाय म'डआव थां\r\npresentation_mode_label=दिन्थिफुंनाय म'ड\r\nopen_file.title=फाइलखौ खेव\r\nopen_file_label=खेव\r\nprint.title=साफाय\r\nprint_label=साफाय\r\ndownload.title=डाउनल'ड खालाम\r\ndownload_label=डाउनल'ड खालाम\r\nbookmark.title=दानि नुथाय (गोदान उइन्ड'आव कपि खालाम एबा खेव)\r\nbookmark_label=दानि नुथाय\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=टुल\r\ntools_label=टुल\r\nfirst_page.title=गिबि बिलाइआव थां\r\nfirst_page.label=गिबि बिलाइआव थां\r\nfirst_page_label=गिबि बिलाइआव थां\r\nlast_page.title=जोबथा बिलाइआव थां\r\nlast_page.label=जोबथा बिलाइआव थां\r\nlast_page_label=जोबथा बिलाइआव थां\r\npage_rotate_cw.title=घरि गिदिंनाय फार्से फिदिं\r\npage_rotate_cw.label=घरि गिदिंनाय फार्से फिदिं\r\npage_rotate_cw_label=घरि गिदिंनाय फार्से फिदिं\r\npage_rotate_ccw.title=घरि गिदिंनाय उल्था फार्से फिदिं\r\npage_rotate_ccw.label=घरि गिदिंनाय उल्था फार्से फिदिं\r\npage_rotate_ccw_label=घरि गिदिंनाय उल्था फार्से फिदिं\r\n\r\n\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=फोरमान बिलाइनि आखुथाय...\r\ndocument_properties_label=फोरमान बिलाइनि आखुथाय...\r\ndocument_properties_file_name=फाइलनि मुं:\r\ndocument_properties_file_size=फाइलनि महर:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} बाइट)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} बाइट)\r\ndocument_properties_title=बिमुं:\r\ndocument_properties_author=लिरगिरि:\r\ndocument_properties_subject=आयदा:\r\ndocument_properties_keywords=गाहाय सोदोब:\r\ndocument_properties_creation_date=सोरजिनाय अक्ट':\r\ndocument_properties_modification_date=सुद्रायनाय अक्ट':\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=सोरजिग्रा:\r\ndocument_properties_producer=PDF दिहुनग्रा:\r\ndocument_properties_version=PDF बिसान:\r\ndocument_properties_page_count=बिलाइनि हिसाब:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=प'र्ट्रेट\r\ndocument_properties_page_size_orientation_landscape=लेण्डस्केप\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=लायजाम\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized_yes=नंगौ\r\ndocument_properties_linearized_no=नङा\r\ndocument_properties_close=बन्द खालाम\r\n\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=नेवसि\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=टग्गल साइडबार\r\ntoggle_sidebar_label=टग्गल साइडबार\r\ndocument_outline_label=फोरमान बिलाइ सिमा हांखो\r\nattachments.title=नांजाब होनायखौ दिन्थि\r\nattachments_label=नांजाब होनाय\r\nthumbs.title=थामनेइलखौ दिन्थि\r\nthumbs_label=थामनेइल\r\nfindbar.title=फोरमान बिलाइआव नागिरना दिहुन\r\nfindbar_label=नायगिरना दिहुन\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=बिलाइ {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=बिलाइ {{page}} नि थामनेइल\r\n\r\n# Find panel button title and messages\r\nfind_input.title=नायगिरना दिहुन\r\nfind_input.placeholder=फोरमान बिलाइआव नागिरना दिहुन...\r\nfind_previous.title=बाथ्रा खोन्दोबनि सिगांनि नुजाथिनायखौ नागिर\r\nfind_previous_label=आगोलनि\r\nfind_next.title=बाथ्रा खोन्दोबनि उननि नुजाथिनायखौ नागिर\r\nfind_next_label=उननि\r\nfind_highlight=गासैखौबो हाइलाइट खालाम\r\nfind_match_case_label=गोरोबनाय केस\r\nfind_reached_top=थालो निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय\r\nfind_reached_bottom=बिजौ निफ्राय जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_not_found=बाथ्रा खोन्दोब मोनाखै\r\n\r\n# Error panel labels\r\nerror_more_info=गोबां फोरमायथिहोग्रा\r\nerror_less_info=खम फोरमायथिहोग्रा\r\nerror_close=बन्द खालाम\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=खौरां: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=स्टेक: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=फाइल: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=सारि: {{line}}\r\nrendering_error=बिलाइखौ राव सोलायनाय समाव मोनसे गोरोन्थि जादों।\r\n\r\n# Predefined zoom values\r\npage_scale_width=बिलाइनि गुवार\r\npage_scale_fit=बिलाइ गोरोबनाय\r\npage_scale_auto=गावनोगाव जुम\r\npage_scale_actual=थार महर\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=गोरोन्थि\r\nloading_error=PDF ल'ड खालामनाय समाव मोनसे गोरोन्थि जाबाय।\r\ninvalid_file_error=बाहायजायै एबा गाज्रि जानाय PDF फाइल\r\nmissing_file_error=गोमानाय PDF फाइल\r\nunexpected_response_error=मिजिंथियै सार्भार फिननाय।\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} सोदोब बेखेवनाय]\r\npassword_label=बे PDF फाइलखौ खेवनो पासवार्ड हाबहो।\r\npassword_invalid=बाहायजायै पासवार्ड। अननानै फिन नाजा।\r\npassword_ok=OK\r\npassword_cancel=नेवसि\r\n\r\nprinting_not_supported=सांग्रांथि: साफायनाया बे ब्राउजारजों आबुङै हेफाजाब होजाया।\r\nprinting_not_ready=सांग्रांथि: PDF खौ साफायनायनि थाखाय फुरायै ल'ड खालामाखै।\r\nweb_fonts_disabled=वेब फन्टखौ लोरबां खालामबाय: अरजाबहोनाय PDF फन्टखौ बाहायनो हायाखै।\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/bs/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Prethodna strana\r\nprevious_label=Prethodna\r\nnext.title=Sljedeća strna\r\nnext_label=Sljedeća\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Strana\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=od {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} od {{pagesCount}})\r\n\r\nzoom_out.title=Umanji\r\nzoom_out_label=Umanji\r\nzoom_in.title=Uvećaj\r\nzoom_in_label=Uvećaj\r\nzoom.title=Uvećanje\r\npresentation_mode.title=Prebaci se u prezentacijski režim\r\npresentation_mode_label=Prezentacijski režim\r\nopen_file.title=Otvori fajl\r\nopen_file_label=Otvori\r\nprint.title=Štampaj\r\nprint_label=Štampaj\r\ndownload.title=Preuzmi\r\ndownload_label=Preuzmi\r\nbookmark.title=Trenutni prikaz (kopiraj ili otvori u novom prozoru)\r\nbookmark_label=Trenutni prikaz\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Alati\r\ntools_label=Alati\r\nfirst_page.title=Idi na prvu stranu\r\nfirst_page.label=Idi na prvu stranu\r\nfirst_page_label=Idi na prvu stranu\r\nlast_page.title=Idi na zadnju stranu\r\nlast_page.label=Idi na zadnju stranu\r\nlast_page_label=Idi na zadnju stranu\r\npage_rotate_cw.title=Rotiraj u smjeru kazaljke na satu\r\npage_rotate_cw.label=Rotiraj u smjeru kazaljke na satu\r\npage_rotate_cw_label=Rotiraj u smjeru kazaljke na satu\r\npage_rotate_ccw.title=Rotiraj suprotno smjeru kazaljke na satu\r\npage_rotate_ccw.label=Rotiraj suprotno smjeru kazaljke na satu\r\npage_rotate_ccw_label=Rotiraj suprotno smjeru kazaljke na satu\r\n\r\ncursor_text_select_tool.title=Omogući alat za označavanje teksta\r\ncursor_text_select_tool_label=Alat za označavanje teksta\r\ncursor_hand_tool.title=Omogući ručni alat\r\ncursor_hand_tool_label=Ručni alat\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Svojstva dokumenta...\r\ndocument_properties_label=Svojstva dokumenta...\r\ndocument_properties_file_name=Naziv fajla:\r\ndocument_properties_file_size=Veličina fajla:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bajta)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bajta)\r\ndocument_properties_title=Naslov:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Predmet:\r\ndocument_properties_keywords=Ključne riječi:\r\ndocument_properties_creation_date=Datum kreiranja:\r\ndocument_properties_modification_date=Datum promjene:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Kreator:\r\ndocument_properties_producer=PDF stvaratelj:\r\ndocument_properties_version=PDF verzija:\r\ndocument_properties_page_count=Broj stranica:\r\ndocument_properties_page_size=Veličina stranice:\r\ndocument_properties_page_size_unit_inches=u\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=uspravno\r\ndocument_properties_page_size_orientation_landscape=vodoravno\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Pismo\r\ndocument_properties_page_size_name_legal=Pravni\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\ndocument_properties_close=Zatvori\r\n\r\nprint_progress_message=Pripremam dokument za štampu…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Otkaži\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Uključi/isključi bočnu traku\r\ntoggle_sidebar_notification.title=Uključi/isključi sidebar (dokument sadrži outline/priloge)\r\ntoggle_sidebar_label=Uključi/isključi bočnu traku\r\ndocument_outline.title=Prikaži outline dokumenta (dvoklik za skupljanje/širenje svih stavki)\r\ndocument_outline_label=Konture dokumenta\r\nattachments.title=Prikaži priloge\r\nattachments_label=Prilozi\r\nthumbs.title=Prikaži thumbnailove\r\nthumbs_label=Thumbnailovi\r\nfindbar.title=Pronađi u dokumentu\r\nfindbar_label=Pronađi\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Strana {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Thumbnail strane {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Pronađi\r\nfind_input.placeholder=Pronađi u dokumentu…\r\nfind_previous.title=Pronađi prethodno pojavljivanje fraze\r\nfind_previous_label=Prethodno\r\nfind_next.title=Pronađi sljedeće pojavljivanje fraze\r\nfind_next_label=Sljedeće\r\nfind_highlight=Označi sve\r\nfind_match_case_label=Osjetljivost na karaktere\r\nfind_reached_top=Dostigao sam vrh dokumenta, nastavljam sa dna\r\nfind_reached_bottom=Dostigao sam kraj dokumenta, nastavljam sa vrha\r\nfind_not_found=Fraza nije pronađena\r\n\r\n# Error panel labels\r\nerror_more_info=Više informacija\r\nerror_less_info=Manje informacija\r\nerror_close=Zatvori\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Poruka: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fajl: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linija: {{line}}\r\nrendering_error=Došlo je do greške prilikom renderiranja strane.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Širina strane\r\npage_scale_fit=Uklopi stranu\r\npage_scale_auto=Automatsko uvećanje\r\npage_scale_actual=Stvarna veličina\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Greška\r\nloading_error=Došlo je do greške prilikom učitavanja PDF-a.\r\ninvalid_file_error=Neispravan ili oštećen PDF fajl.\r\nmissing_file_error=Nedostaje PDF fajl.\r\nunexpected_response_error=Neočekivani odgovor servera.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} pribilješka]\r\npassword_label=Upišite lozinku da biste otvorili ovaj PDF fajl.\r\npassword_invalid=Pogrešna lozinka. Pokušajte ponovo.\r\npassword_ok=OK\r\npassword_cancel=Otkaži\r\n\r\nprinting_not_supported=Upozorenje: Štampanje nije u potpunosti podržano u ovom browseru.\r\nprinting_not_ready=Upozorenje: PDF nije u potpunosti učitan za štampanje.\r\nweb_fonts_disabled=Web fontovi su onemogućeni: nemoguće koristiti ubačene PDF fontove.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ca/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Pàgina anterior\r\nprevious_label=Anterior\r\nnext.title=Pàgina següent\r\nnext_label=Següent\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Pàgina\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=de {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} de {{pagesCount}})\r\n\r\nzoom_out.title=Redueix\r\nzoom_out_label=Redueix\r\nzoom_in.title=Amplia\r\nzoom_in_label=Amplia\r\nzoom.title=Escala\r\npresentation_mode.title=Canvia al mode de presentació\r\npresentation_mode_label=Mode de presentació\r\nopen_file.title=Obre el fitxer\r\nopen_file_label=Obre\r\nprint.title=Imprimeix\r\nprint_label=Imprimeix\r\ndownload.title=Baixa\r\ndownload_label=Baixa\r\nbookmark.title=Vista actual (copia o obre en una finestra nova)\r\nbookmark_label=Vista actual\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Eines\r\ntools_label=Eines\r\nfirst_page.title=Vés a la primera pàgina\r\nfirst_page.label=Vés a la primera pàgina\r\nfirst_page_label=Vés a la primera pàgina\r\nlast_page.title=Vés a l'última pàgina\r\nlast_page.label=Vés a l'última pàgina\r\nlast_page_label=Vés a l'última pàgina\r\npage_rotate_cw.title=Gira cap a la dreta\r\npage_rotate_cw.label=Gira cap a la dreta\r\npage_rotate_cw_label=Gira cap a la dreta\r\npage_rotate_ccw.title=Gira cap a l'esquerra\r\npage_rotate_ccw.label=Gira cap a l'esquerra\r\npage_rotate_ccw_label=Gira cap a l'esquerra\r\n\r\ncursor_text_select_tool.title=Habilita l'eina de selecció de text\r\ncursor_text_select_tool_label=Eina de selecció de text\r\ncursor_hand_tool.title=Habilita l'eina de mà\r\ncursor_hand_tool_label=Eina de mà\r\n\r\nscroll_vertical.title=Utilitza el desplaçament vertical\r\nscroll_vertical_label=Desplaçament vertical\r\nscroll_horizontal.title=Utilitza el desplaçament horitzontal\r\nscroll_horizontal_label=Desplaçament horitzontal\r\nscroll_wrapped.title=Activa el desplaçament continu\r\nscroll_wrapped_label=Desplaçament continu\r\n\r\nspread_none.title=No agrupis les pàgines de dues en dues\r\nspread_none_label=Una sola pàgina\r\nspread_odd.title=Mostra dues pàgines començant per les pàgines de numeració senar\r\nspread_odd_label=Doble pàgina (senar)\r\nspread_even.title=Mostra dues pàgines començant per les pàgines de numeració parell\r\nspread_even_label=Doble pàgina (parell)\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Propietats del document…\r\ndocument_properties_label=Propietats del document…\r\ndocument_properties_file_name=Nom del fitxer:\r\ndocument_properties_file_size=Mida del fitxer:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Títol:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Assumpte:\r\ndocument_properties_keywords=Paraules clau:\r\ndocument_properties_creation_date=Data de creació:\r\ndocument_properties_modification_date=Data de modificació:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Creador:\r\ndocument_properties_producer=Generador de PDF:\r\ndocument_properties_version=Versió de PDF:\r\ndocument_properties_page_count=Nombre de pàgines:\r\ndocument_properties_page_size=Mida de la pàgina:\r\ndocument_properties_page_size_unit_inches=polzades\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=vertical\r\ndocument_properties_page_size_orientation_landscape=apaïsat\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Carta\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Vista web ràpida:\r\ndocument_properties_linearized_yes=Sí\r\ndocument_properties_linearized_no=No\r\ndocument_properties_close=Tanca\r\n\r\nprint_progress_message=S'està preparant la impressió del document…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cancel·la\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Mostra/amaga la barra lateral\r\ntoggle_sidebar_notification.title=Mostra/amaga la barra lateral (el document conté un esquema o adjuncions)\r\ntoggle_sidebar_label=Mostra/amaga la barra lateral\r\ndocument_outline.title=Mostra l'esquema del document (doble clic per ampliar/reduir tots els elements)\r\ndocument_outline_label=Contorn del document\r\nattachments.title=Mostra les adjuncions\r\nattachments_label=Adjuncions\r\nthumbs.title=Mostra les miniatures\r\nthumbs_label=Miniatures\r\nfindbar.title=Cerca al document\r\nfindbar_label=Cerca\r\n\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Pàgina {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Pàgina {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura de la pàgina {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Cerca\r\nfind_input.placeholder=Cerca al document…\r\nfind_previous.title=Cerca l'anterior coincidència de l'expressió\r\nfind_previous_label=Anterior\r\nfind_next.title=Cerca la següent coincidència de l'expressió\r\nfind_next_label=Següent\r\nfind_highlight=Ressalta-ho tot\r\nfind_match_case_label=Distingeix entre majúscules i minúscules\r\nfind_entire_word_label=Paraules senceres\r\nfind_reached_top=S'ha arribat al principi del document, es continua pel final\r\nfind_reached_bottom=S'ha arribat al final del document, es continua pel principi\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} de {{total}} coincidència\r\nfind_match_count[two]={{current}} de {{total}} coincidències\r\nfind_match_count[few]={{current}} de {{total}} coincidències\r\nfind_match_count[many]={{current}} de {{total}} coincidències\r\nfind_match_count[other]={{current}} de {{total}} coincidències\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Més de {{limit}} coincidències\r\nfind_match_count_limit[one]=Més d'{{limit}} coincidència\r\nfind_match_count_limit[two]=Més de {{limit}} coincidències\r\nfind_match_count_limit[few]=Més de {{limit}} coincidències\r\nfind_match_count_limit[many]=Més de {{limit}} coincidències\r\nfind_match_count_limit[other]=Més de {{limit}} coincidències\r\nfind_not_found=No s'ha trobat l'expressió\r\n\r\n# Error panel labels\r\nerror_more_info=Més informació\r\nerror_less_info=Menys informació\r\nerror_close=Tanca\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (muntatge: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Missatge: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pila: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fitxer: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Línia: {{line}}\r\nrendering_error=S'ha produït un error mentre es renderitzava la pàgina.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Amplada de la pàgina\r\npage_scale_fit=Ajusta la pàgina\r\npage_scale_auto=Zoom automàtic\r\npage_scale_actual=Mida real\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=S'ha produït un error en carregar el PDF.\r\ninvalid_file_error=El fitxer PDF no és vàlid o està malmès.\r\nmissing_file_error=Falta el fitxer PDF.\r\nunexpected_response_error=Resposta inesperada del servidor.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anotació {{type}}]\r\npassword_label=Introduïu la contrasenya per obrir aquest fitxer PDF.\r\npassword_invalid=La contrasenya no és vàlida. Torneu-ho a provar.\r\npassword_ok=D'acord\r\npassword_cancel=Cancel·la\r\n\r\nprinting_not_supported=Avís: la impressió no és plenament funcional en aquest navegador.\r\nprinting_not_ready=Atenció: el PDF no s'ha acabat de carregar per imprimir-lo.\r\nweb_fonts_disabled=Els tipus de lletra web estan desactivats: no es poden utilitzar els tipus de lletra incrustats al PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/cak/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Jun kan ruxaq\r\nprevious_label=Jun kan\r\nnext.title=Jun chik ruxaq\r\nnext_label=Jun chik\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Ruxaq\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=richin {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} richin {{pagesCount}})\r\n\r\nzoom_out.title=Tich'utinirisäx\r\nzoom_out_label=Tich'utinirisäx\r\nzoom_in.title=Tinimirisäx\r\nzoom_in_label=Tinimirisäx\r\nzoom.title=Sum\r\npresentation_mode.title=Tijal ri rub'anikil niwachin\r\npresentation_mode_label=Pa rub'eyal niwachin\r\nopen_file.title=Tijaq Yakb'äl\r\nopen_file_label=Tijaq\r\nprint.title=Titz'ajb'äx\r\nprint_label=Titz'ajb'äx\r\ndownload.title=Tiqasäx\r\ndownload_label=Tiqasäx\r\nbookmark.title=Rutz'etik wakami (tiwachib'ëx o tijaq pa jun k'ak'a' tzuwäch)\r\nbookmark_label=Rutzub'al wakami\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Samajib'äl\r\ntools_label=Samajib'äl\r\nfirst_page.title=Tib'e pa nab'ey ruxaq\r\nfirst_page.label=Tib'e pa nab'ey ruxaq\r\nfirst_page_label=Tib'e pa nab'ey ruxaq\r\nlast_page.title=Tib'e pa ruk'isib'äl ruxaq\r\nlast_page.label=Tib'e pa ruk'isib'äl ruxaq\r\nlast_page_label=Tib'e pa ruk'isib'äl ruxaq\r\npage_rotate_cw.title=Tisutïx pan ajkiq'a'\r\npage_rotate_cw.label=Tisutïx pan ajkiq'a'\r\npage_rotate_cw_label=Tisutïx pan ajkiq'a'\r\npage_rotate_ccw.title=Tisutïx pan ajxokon\r\npage_rotate_ccw.label=Tisutïx pan ajxokon\r\npage_rotate_ccw_label=Tisutïx pan ajxokon\r\n\r\ncursor_text_select_tool.title=Titzij ri rusamajib'al Rucha'ik Rucholajem Tzij\r\ncursor_text_select_tool_label=Rusamajib'al Rucha'ik Rucholajem Tzij\r\ncursor_hand_tool.title=Titzij ri q'ab'aj samajib'äl\r\ncursor_hand_tool_label=Q'ab'aj Samajib'äl\r\n\r\nscroll_vertical.title=Tokisäx Pa'äl Q'axanem\r\nscroll_vertical_label=Pa'äl Q'axanem\r\nscroll_horizontal.title=Tokisäx Kotz'öl Q'axanem\r\nscroll_horizontal_label=Kotz'öl Q'axanem\r\nscroll_wrapped.title=Tokisäx Tzub'aj Q'axanem\r\nscroll_wrapped_label=Tzub'aj Q'axanem\r\n\r\nspread_none.title=Man ketun taq ruxaq pa rub'eyal wuj\r\nspread_none_label=Majun Rub'eyal\r\nspread_odd.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun man k'ulaj ta rajilab'al\r\nspread_odd_label=Man K'ulaj Ta Rub'eyal\r\nspread_even.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun k'ulaj rajilab'al\r\nspread_even_label=K'ulaj Rub'eyal\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Taq richinil wuj…\r\ndocument_properties_label=Taq richinil wuj…\r\ndocument_properties_file_name=Rub'i' yakb'äl:\r\ndocument_properties_file_size=Runimilem yakb'äl:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=B'i'aj:\r\ndocument_properties_author=B'anel:\r\ndocument_properties_subject=Taqikil:\r\ndocument_properties_keywords=Kixe'el taq tzij:\r\ndocument_properties_creation_date=Ruq'ijul xtz'uk:\r\ndocument_properties_modification_date=Ruq'ijul xjalwachïx:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Q'inonel:\r\ndocument_properties_producer=PDF b'anöy:\r\ndocument_properties_version=PDF ruwäch:\r\ndocument_properties_page_count=Jarupe' ruxaq:\r\ndocument_properties_page_size=Runimilem ri Ruxaq:\r\ndocument_properties_page_size_unit_inches=pa\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=rupalem\r\ndocument_properties_page_size_orientation_landscape=rukotz'olem\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Loman wuj\r\ndocument_properties_page_size_name_legal=Taqanel tzijol\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Anin Rutz'etik Ajk'amaya'l:\r\ndocument_properties_linearized_yes=Ja'\r\ndocument_properties_linearized_no=Mani\r\ndocument_properties_close=Titz'apïx\r\n\r\nprint_progress_message=Ruchojmirisaxik wuj richin nitz'ajb'äx…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Tiq'at\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Tijal ri ajxikin kajtz'ik\r\ntoggle_sidebar_notification.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqoj taq yakb'äl)\r\ntoggle_sidebar_notification2.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqo/kuchuj)\r\ntoggle_sidebar_label=Tijal ri ajxikin kajtz'ik\r\ndocument_outline.title=Tik'ut pe ruch'akulal wuj (kamul-pitz'oj richin nirik'/nich'utinirisäx ronojel ruch'akulal)\r\ndocument_outline_label=Ruch'akulal wuj\r\nattachments.title=Kek'ut pe ri taq taqoj\r\nattachments_label=Taq taqoj\r\nlayers.title=Kek'ut taq Kuchuj (ka'i'-pitz' richin yetzolïx ronojel ri taq kuchuj e k'o wi)\r\nlayers_label=Taq kuchuj\r\nthumbs.title=Kek'ut pe taq ch'utiq\r\nthumbs_label=Koköj\r\nfindbar.title=Tikanöx chupam ri wuj\r\nfindbar_label=Tikanöx\r\n\r\nadditional_layers=Tz'aqat ta Kuchuj\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Ruxaq {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Ruxaq {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Ruch'utinirisaxik ruxaq {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Tikanöx\r\nfind_input.placeholder=Tikanöx pa wuj…\r\nfind_previous.title=Tib'an b'enam pa ri jun kan q'aptzij xilitäj\r\nfind_previous_label=Jun kan\r\nfind_next.title=Tib'e pa ri jun chik pajtzij xilitäj\r\nfind_next_label=Jun chik\r\nfind_highlight=Tiya' retal ronojel\r\nfind_match_case_label=Tuk'äm ri' kik'in taq nimatz'ib' chuqa' taq ch'utitz'ib'\r\nfind_entire_word_label=Tz'aqät taq tzij\r\nfind_reached_top=Xb'eq'i' ri rutikirib'al wuj, xtikanöx k'a pa ruk'isib'äl\r\nfind_reached_bottom=Xb'eq'i' ri ruk'isib'äl wuj, xtikanöx pa rutikirib'al\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} richin {{total}} nuk'äm ri'\r\nfind_match_count[two]={{current}} richin {{total}} nikik'äm ki'\r\nfind_match_count[few]={{current}} richin {{total}} nikik'äm ki'\r\nfind_match_count[many]={{current}} richin {{total}} nikik'äm ki'\r\nfind_match_count[other]={{current}} richin {{total}} nikik'äm ki'\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=K'ïy chi re {{limit}} nikik'äm ki'\r\nfind_match_count_limit[one]=K'ïy chi re {{limit}} nuk'äm ri'\r\nfind_match_count_limit[two]=K'ïy chi re {{limit}} nikik'äm ki'\r\nfind_match_count_limit[few]=K'ïy chi re {{limit}} nikik'äm ki'\r\nfind_match_count_limit[many]=K'ïy chi re {{limit}} nikik'äm ki'\r\nfind_match_count_limit[other]=K'ïy chi re {{limit}} nikik'äm ki'\r\nfind_not_found=Man xilitäj ta ri pajtzij\r\n\r\n# Error panel labels\r\nerror_more_info=Ch'aqa' chik rutzijol\r\nerror_less_info=Jub'a' ok rutzijol\r\nerror_close=Titz'apïx\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Uqxa'n: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Tzub'aj: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Yakb'äl: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=B'ey: {{line}}\r\nrendering_error=Xk'ulwachitäj jun sachoj toq ninuk'wachij ri ruxaq.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Ruwa ruxaq\r\npage_scale_fit=Tinuk' ruxaq\r\npage_scale_auto=Yonil chi nimilem\r\npage_scale_actual=Runimilem Wakami\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Sachoj\r\nloading_error=\\u0020Xk'ulwachitäj jun sach'oj toq xnuk'ux ri PDF .\r\ninvalid_file_error=Man oke ta o yujtajinäq ri PDF yakb'äl.\r\nmissing_file_error=Man xilitäj ta ri PDF yakb'äl.\r\nunexpected_response_error=Man oyob'en ta tz'olin rutzij ruk'u'x samaj.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Tz'ib'anïk]\r\npassword_label=Tatz'ib'aj ri ewan tzij richin najäq re yakb'äl re' pa PDF.\r\npassword_invalid=Man okel ta ri ewan tzij: Tatojtob'ej chik.\r\npassword_ok=Ütz\r\npassword_cancel=Tiq'at\r\n\r\nprinting_not_supported=Rutzijol k'ayewal: Ri rutz'ajb'axik man koch'el ta ronojel pa re okik'amaya'l re'.\r\nprinting_not_ready=Rutzijol k'ayewal: Ri PDF man xusamajij ta ronojel richin nitz'ajb'äx.\r\nweb_fonts_disabled=E chupül ri taq ajk'amaya'l tz'ib': man tikirel ta nokisäx ri taq tz'ib' PDF pa ch'ikenïk\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ckb/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=پەڕەی پێشوو\r\nprevious_label=پێشوو\r\nnext.title=پەڕەی دوواتر\r\nnext_label=دوواتر\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=پەرە\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=لە {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} لە {{pagesCount}})\r\n\r\nzoom_out.title=ڕۆچوونی\r\nzoom_out_label=ڕۆچوونی\r\nzoom_in.title=هێنانەپێش\r\nzoom_in_label=هێنانەپێش\r\nzoom.title=زووم\r\nopen_file.title=پەڕگە بکەرەوە\r\nopen_file_label=کردنەوە\r\nprint.title=چاپکردن\r\nprint_label=چاپکردن\r\ndownload.title=داگرتن\r\ndownload_label=داگرتن\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=ئامرازەکان\r\ntools_label=ئامرازەکان\r\nfirst_page.title=برۆ بۆ یەکەم پەڕە\r\nfirst_page.label=بڕۆ بۆ یەکەم پەڕە\r\nfirst_page_label=بڕۆ بۆ یەکەم پەڕە\r\nlast_page.title=بڕۆ بۆ کۆتا پەڕە\r\nlast_page.label=بڕۆ بۆ کۆتا پەڕە\r\nlast_page_label=بڕۆ بۆ کۆتا پەڕە\r\npage_rotate_cw.title=ئاڕاستەی میلی کاتژمێر\r\npage_rotate_cw.label=ئاڕاستەی میلی کاتژمێر\r\npage_rotate_cw_label=ئاڕاستەی میلی کاتژمێر\r\npage_rotate_ccw.title=پێچەوانەی میلی کاتژمێر\r\npage_rotate_ccw.label=پێچەوانەی میلی کاتژمێر\r\npage_rotate_ccw_label=پێچەوانەی میلی کاتژمێر\r\n\r\ncursor_text_select_tool.title=توڵامرازی نیشانکەری دەق چالاک بکە\r\ncursor_text_select_tool_label=توڵامرازی نیشانکەری دەق\r\ncursor_hand_tool.title=توڵامرازی دەستی چالاک بکە\r\ncursor_hand_tool_label=توڵامرازی دەستی\r\n\r\nscroll_vertical.title=ناردنی ئەستوونی بەکاربێنە\r\nscroll_vertical_label=ناردنی ئەستوونی\r\nscroll_horizontal.title=ناردنی ئاسۆیی بەکاربێنە\r\nscroll_horizontal_label=ناردنی ئاسۆیی \r\nscroll_wrapped.title=ناردنی لوولکراو بەکاربێنە\r\nscroll_wrapped_label=ناردنی لوولکراو \r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties_file_name=ناوی پەڕگە:\r\ndocument_properties_file_size=قەبارەی پەڕگە:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} کب ({{size_b}} بایت)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} مب ({{size_b}} بایت)\r\ndocument_properties_title=سەردێڕ:\r\ndocument_properties_author=نووسەر\r\ndocument_properties_subject=بابەت:\r\ndocument_properties_keywords=کلیلەوشە:\r\ndocument_properties_creation_date=بەرواری درووستکردن:\r\ndocument_properties_modification_date=بەرواری دەستکاریکردن:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=درووستکەر:\r\ndocument_properties_producer=بەرهەمهێنەری PDF:\r\ndocument_properties_version=وەشانی PDF:\r\ndocument_properties_page_count=ژمارەی پەرەکان:\r\ndocument_properties_page_size=قەبارەی پەڕە:\r\ndocument_properties_page_size_unit_inches=ئینچ\r\ndocument_properties_page_size_unit_millimeters=ملم\r\ndocument_properties_page_size_orientation_portrait=پۆرترەیت(درێژ)\r\ndocument_properties_page_size_orientation_landscape=پانیی\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=نامە\r\ndocument_properties_page_size_name_legal=یاسایی\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=پیشاندانی وێبی خێرا:\r\ndocument_properties_linearized_yes=بەڵێ\r\ndocument_properties_linearized_no=نەخێر\r\ndocument_properties_close=داخستن\r\n\r\nprint_progress_message=بەڵگەنامە ئامادەدەکرێت بۆ چاپکردن...\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=پاشگەزبوونەوە\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=لاتەنیشت پیشاندان/شاردنەوە\r\ntoggle_sidebar_label=لاتەنیشت پیشاندان/شاردنەوە\r\ndocument_outline_label=سنووری چوارچێوە\r\nattachments.title=پاشکۆکان پیشان بدە\r\nattachments_label=پاشکۆکان\r\nlayers_label=چینەکان\r\nthumbs.title=وێنۆچکە پیشان بدە\r\nthumbs_label=وێنۆچکە\r\nfindbar.title=لە بەڵگەنامە بگەرێ\r\nfindbar_label=دۆزینەوە\r\n\r\nadditional_layers=چینی زیاتر\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=پەڕەی {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=پەڕەی {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=وێنۆچکەی پەڕەی {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=دۆزینەوە\r\nfind_input.placeholder=لە بەڵگەنامە بگەرێ...\r\nfind_previous.title=هەبوونی پێشوو بدۆزرەوە لە ڕستەکەدا\r\nfind_previous_label=پێشوو\r\nfind_next.title=هەبوونی داهاتوو بدۆزەرەوە لە ڕستەکەدا\r\nfind_next_label=دوواتر\r\nfind_highlight=هەمووی نیشانە بکە\r\nfind_match_case_label=دۆخی لەیەکچوون\r\nfind_entire_word_label=هەموو وشەکان\r\nfind_reached_top=گەشتیتە سەرەوەی بەڵگەنامە، لە خوارەوە دەستت پێکرد\r\nfind_reached_bottom=گەشتیتە کۆتایی بەڵگەنامە. لەسەرەوە دەستت پێکرد\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} لە کۆی {{total}} لەیەکچوو\r\nfind_match_count[two]={{current}} لە کۆی {{total}} لەیەکچوو\r\nfind_match_count[few]={{current}} لە کۆی {{total}} لەیەکچوو\r\nfind_match_count[many]={{current}} لە کۆی {{total}} لەیەکچوو\r\nfind_match_count[other]={{current}} لە کۆی {{total}} لەیەکچوو\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=زیاتر لە {{limit}} لەیەکچوو\r\nfind_match_count_limit[one]=زیاتر لە {{limit}} لەیەکچوو\r\nfind_match_count_limit[two]=زیاتر لە {{limit}} لەیەکچوو\r\nfind_match_count_limit[few]=زیاتر لە {{limit}} لەیەکچوو\r\nfind_match_count_limit[many]=زیاتر لە {{limit}} لەیەکچوو\r\nfind_match_count_limit[other]=زیاتر لە {{limit}} لەیەکچوو\r\nfind_not_found=نووسین نەدۆزرایەوە\r\n\r\n# Error panel labels\r\nerror_more_info=زانیاری زیاتر\r\nerror_less_info=زانیاری کەمتر\r\nerror_close=داخستن\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=پەیام: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=لەسەریەک: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=پەڕگە: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=هێڵ: {{line}}\r\nrendering_error=هەڵەیەک ڕوویدا لە کاتی پوختەکردنی (ڕێندەر) پەڕە.\r\n\r\n# Predefined zoom values\r\npage_scale_width=پانی پەڕە\r\npage_scale_fit=پڕبوونی پەڕە\r\npage_scale_auto=زوومی خۆکار\r\npage_scale_actual=قەبارەی ڕاستی\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=هەڵە\r\nloading_error=هەڵەیەک ڕوویدا لە کاتی بارکردنی  PDF.\r\ninvalid_file_error=پەڕگەی pdf تێکچووە یان نەگونجاوە.\r\nmissing_file_error=پەڕگەی pdf بوونی نیە.\r\nunexpected_response_error=وەڵامی ڕاژەخوازی نەخوازراو.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} سەرنج]\r\npassword_label=وشەی تێپەڕ بنووسە بۆ کردنەوەی پەڕگەی pdf.\r\npassword_invalid=وشەی تێپەڕ هەڵەیە. تکایە دووبارە هەوڵ بدەرەوە.\r\npassword_ok=باشە\r\npassword_cancel=پاشگەزبوونەوە\r\n\r\nprinting_not_supported=ئاگاداربە: چاپکردن بە تەواوی پشتگیر ناکرێت لەم وێبگەڕە.\r\nprinting_not_ready=ئاگاداربە: PDF بە تەواوی بارنەبووە بۆ چاپکردن.\r\nweb_fonts_disabled=جۆرەپیتی وێب ناچالاکە: نەتوانی جۆرەپیتی تێخراوی ناو pdfـەکە بەکاربێت.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/cs/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Přejde na předchozí stránku\r\nprevious_label=Předchozí\r\nnext.title=Přejde na následující stránku\r\nnext_label=Další\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Stránka\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=z {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} z {{pagesCount}})\r\n\r\nzoom_out.title=Zmenší velikost\r\nzoom_out_label=Zmenšit\r\nzoom_in.title=Zvětší velikost\r\nzoom_in_label=Zvětšit\r\nzoom.title=Nastaví velikost\r\npresentation_mode.title=Přepne do režimu prezentace\r\npresentation_mode_label=Režim prezentace\r\nopen_file.title=Otevře soubor\r\nopen_file_label=Otevřít\r\nprint.title=Vytiskne dokument\r\nprint_label=Vytisknout\r\ndownload.title=Stáhne dokument\r\ndownload_label=Stáhnout\r\nbookmark.title=Současný pohled (kopírovat nebo otevřít v novém okně)\r\nbookmark_label=Současný pohled\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Nástroje\r\ntools_label=Nástroje\r\nfirst_page.title=Přejde na první stránku\r\nfirst_page.label=Přejít na první stránku\r\nfirst_page_label=Přejít na první stránku\r\nlast_page.title=Přejde na poslední stránku\r\nlast_page.label=Přejít na poslední stránku\r\nlast_page_label=Přejít na poslední stránku\r\npage_rotate_cw.title=Otočí po směru hodin\r\npage_rotate_cw.label=Otočit po směru hodin\r\npage_rotate_cw_label=Otočit po směru hodin\r\npage_rotate_ccw.title=Otočí proti směru hodin\r\npage_rotate_ccw.label=Otočit proti směru hodin\r\npage_rotate_ccw_label=Otočit proti směru hodin\r\n\r\ncursor_text_select_tool.title=Povolí výběr textu\r\ncursor_text_select_tool_label=Výběr textu\r\ncursor_hand_tool.title=Povolí nástroj ručička\r\ncursor_hand_tool_label=Nástroj ručička\r\n\r\nscroll_vertical.title=Použít svislé posouvání\r\nscroll_vertical_label=Svislé posouvání\r\nscroll_horizontal.title=Použít vodorovné posouvání\r\nscroll_horizontal_label=Vodorovné posouvání\r\nscroll_wrapped.title=Použít postupné posouvání\r\nscroll_wrapped_label=Postupné posouvání\r\n\r\nspread_none.title=Nesdružovat stránky\r\nspread_none_label=Žádné sdružení\r\nspread_odd.title=Sdruží stránky s umístěním lichých vlevo\r\nspread_odd_label=Sdružení stránek (liché vlevo)\r\nspread_even.title=Sdruží stránky s umístěním sudých vlevo\r\nspread_even_label=Sdružení stránek (sudé vlevo)\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Vlastnosti dokumentu…\r\ndocument_properties_label=Vlastnosti dokumentu…\r\ndocument_properties_file_name=Název souboru:\r\ndocument_properties_file_size=Velikost souboru:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bajtů)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bajtů)\r\ndocument_properties_title=Název stránky:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Předmět:\r\ndocument_properties_keywords=Klíčová slova:\r\ndocument_properties_creation_date=Datum vytvoření:\r\ndocument_properties_modification_date=Datum úpravy:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Vytvořil:\r\ndocument_properties_producer=Tvůrce PDF:\r\ndocument_properties_version=Verze PDF:\r\ndocument_properties_page_count=Počet stránek:\r\ndocument_properties_page_size=Velikost stránky:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=na výšku\r\ndocument_properties_page_size_orientation_landscape=na šířku\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Dopis\r\ndocument_properties_page_size_name_legal=Právní dokument\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Rychlé zobrazování z webu:\r\ndocument_properties_linearized_yes=Ano\r\ndocument_properties_linearized_no=Ne\r\ndocument_properties_close=Zavřít\r\n\r\nprint_progress_message=Příprava dokumentu pro tisk…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}} %\r\nprint_progress_close=Zrušit\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Postranní lišta\r\ntoggle_sidebar_notification.title=Přepne postranní lištu (dokument obsahuje osnovu/přílohy)\r\ntoggle_sidebar_notification2.title=Přepnout postranní lištu (dokument obsahuje osnovu/přílohy/vrstvy)\r\ntoggle_sidebar_label=Postranní lišta\r\ndocument_outline.title=Zobrazí osnovu dokumentu (dvojité klepnutí rozbalí/sbalí všechny položky)\r\ndocument_outline_label=Osnova dokumentu\r\nattachments.title=Zobrazí přílohy\r\nattachments_label=Přílohy\r\nlayers.title=Zobrazit vrstvy (poklepáním obnovíte všechny vrstvy do výchozího stavu)\r\nlayers_label=Vrstvy\r\nthumbs.title=Zobrazí náhledy\r\nthumbs_label=Náhledy\r\ncurrent_outline_item.title=Najít aktuální položku v osnově\r\ncurrent_outline_item_label=Aktuální položka v osnově\r\nfindbar.title=Najde v dokumentu\r\nfindbar_label=Najít\r\n\r\nadditional_layers=Další vrstvy\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Strana {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Strana {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Náhled strany {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Najít\r\nfind_input.placeholder=Najít v dokumentu…\r\nfind_previous.title=Najde předchozí výskyt hledaného textu\r\nfind_previous_label=Předchozí\r\nfind_next.title=Najde další výskyt hledaného textu\r\nfind_next_label=Další\r\nfind_highlight=Zvýraznit\r\nfind_match_case_label=Rozlišovat velikost\r\nfind_entire_word_label=Celá slova\r\nfind_reached_top=Dosažen začátek dokumentu, pokračuje se od konce\r\nfind_reached_bottom=Dosažen konec dokumentu, pokračuje se od začátku\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}}. z {{total}} výskytu\r\nfind_match_count[two]={{current}}. z {{total}} výskytů\r\nfind_match_count[few]={{current}}. z {{total}} výskytů\r\nfind_match_count[many]={{current}}. z {{total}} výskytů\r\nfind_match_count[other]={{current}}. z {{total}} výskytů\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Více než {{limit}} výskytů\r\nfind_match_count_limit[one]=Více než {{limit}} výskyt\r\nfind_match_count_limit[two]=Více než {{limit}} výskyty\r\nfind_match_count_limit[few]=Více než {{limit}} výskyty\r\nfind_match_count_limit[many]=Více než {{limit}} výskytů\r\nfind_match_count_limit[other]=Více než {{limit}} výskytů\r\nfind_not_found=Hledaný text nenalezen\r\n\r\n# Error panel labels\r\nerror_more_info=Více informací\r\nerror_less_info=Méně informací\r\nerror_close=Zavřít\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (sestavení: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Zpráva: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Zásobník: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Soubor: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Řádek: {{line}}\r\nrendering_error=Při vykreslování stránky nastala chyba.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Podle šířky\r\npage_scale_fit=Podle výšky\r\npage_scale_auto=Automatická velikost\r\npage_scale_actual=Skutečná velikost\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}} %\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Chyba\r\nloading_error=Při nahrávání PDF nastala chyba.\r\ninvalid_file_error=Neplatný nebo chybný soubor PDF.\r\nmissing_file_error=Chybí soubor PDF.\r\nunexpected_response_error=Neočekávaná odpověď serveru.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anotace typu {{type}}]\r\npassword_label=Pro otevření PDF souboru vložte heslo.\r\npassword_invalid=Neplatné heslo. Zkuste to znovu.\r\npassword_ok=OK\r\npassword_cancel=Zrušit\r\n\r\nprinting_not_supported=Upozornění: Tisk není v tomto prohlížeči plně podporován.\r\nprinting_not_ready=Upozornění: Dokument PDF není kompletně načten.\r\nweb_fonts_disabled=Webová písma jsou zakázána, proto není možné použít vložená písma PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/cy/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Tudalen Flaenorol\r\nprevious_label=Blaenorol\r\nnext.title=Tudalen Nesaf\r\nnext_label=Nesaf\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Tudalen\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=o {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} o {{pagesCount}})\r\n\r\nzoom_out.title=Chwyddo Allan\r\nzoom_out_label=Chwyddo Allan\r\nzoom_in.title=Chwyddo Mewn\r\nzoom_in_label=Chwyddo Mewn\r\nzoom.title=Chwyddo\r\npresentation_mode.title=Newid i'r Modd Cyflwyno\r\npresentation_mode_label=Modd Cyflwyno\r\nopen_file.title=Agor Ffeil\r\nopen_file_label=Agor\r\nprint.title=Argraffu\r\nprint_label=Argraffu\r\ndownload.title=Llwyth\r\ndownload_label=Llwytho i Lawr\r\nbookmark.title=Golwg cyfredol (copïo neu agor ffenestr newydd)\r\nbookmark_label=Golwg Gyfredol\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Offer\r\ntools_label=Offer\r\nfirst_page.title=Mynd i'r Dudalen Gyntaf\r\nfirst_page.label=Mynd i'r Dudalen Gyntaf\r\nfirst_page_label=Mynd i'r Dudalen Gyntaf\r\nlast_page.title=Mynd i'r Dudalen Olaf\r\nlast_page.label=Mynd i'r Dudalen Olaf\r\nlast_page_label=Mynd i'r Dudalen Olaf\r\npage_rotate_cw.title=Cylchdroi Clocwedd\r\npage_rotate_cw.label=Cylchdroi Clocwedd\r\npage_rotate_cw_label=Cylchdroi Clocwedd\r\npage_rotate_ccw.title=Cylchdroi Gwrthglocwedd\r\npage_rotate_ccw.label=Cylchdroi Gwrthglocwedd\r\npage_rotate_ccw_label=Cylchdroi Gwrthglocwedd\r\n\r\ncursor_text_select_tool.title=Galluogi Dewis Offeryn Testun\r\ncursor_text_select_tool_label=Offeryn Dewis Testun\r\ncursor_hand_tool.title=Galluogi Offeryn Llaw\r\ncursor_hand_tool_label=Offeryn Llaw\r\n\r\nscroll_vertical.title=Defnyddio Sgrolio Fertigol\r\nscroll_vertical_label=Sgrolio Fertigol\r\nscroll_horizontal.title=Defnyddio Sgrolio Fertigol\r\nscroll_horizontal_label=Sgrolio Fertigol\r\nscroll_wrapped.title=Defnyddio Sgrolio Amlapio\r\nscroll_wrapped_label=Sgrolio Amlapio\r\n\r\nspread_none.title=Peidio uno taeniadau canol\r\nspread_none_label=Dim Taeniadau\r\nspread_odd.title=Uno taeniadau tudalen yn cychwyn gyda thudalennau odrif\r\nspread_odd_label=Taeniadau Odrifau\r\nspread_even.title=Uno taeniadau tudalen yn cychwyn gyda thudalennau eilrif\r\nspread_even_label=Taeniadau Eilrif\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Priodweddau Dogfen…\r\ndocument_properties_label=Priodweddau Dogfen…\r\ndocument_properties_file_name=Enw ffeil:\r\ndocument_properties_file_size=Maint ffeil:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} beit)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} beit)\r\ndocument_properties_title=Teitl:\r\ndocument_properties_author=Awdur:\r\ndocument_properties_subject=Pwnc:\r\ndocument_properties_keywords=Allweddair:\r\ndocument_properties_creation_date=Dyddiad Creu:\r\ndocument_properties_modification_date=Dyddiad Addasu:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Crewr:\r\ndocument_properties_producer=Cynhyrchydd PDF:\r\ndocument_properties_version=Fersiwn PDF:\r\ndocument_properties_page_count=Cyfrif Tudalen:\r\ndocument_properties_page_size=Maint Tudalen:\r\ndocument_properties_page_size_unit_inches=o fewn\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=portread\r\ndocument_properties_page_size_orientation_landscape=tirlun\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Llythyr\r\ndocument_properties_page_size_name_legal=Cyfreithiol\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Golwg Gwe Cyflym:\r\ndocument_properties_linearized_yes=Iawn\r\ndocument_properties_linearized_no=Na\r\ndocument_properties_close=Cau\r\n\r\nprint_progress_message=Paratoi dogfen ar gyfer ei hargraffu…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Diddymu\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Toglo'r Bar Ochr\r\ntoggle_sidebar_notification.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys outline/attachments)\r\ntoggle_sidebar_notification2.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys amlinelliadau/atodiadau/haenau)\r\ntoggle_sidebar_label=Toglo'r Bar Ochr\r\ndocument_outline.title=Dangos Amlinell Dogfen (clic dwbl i ymestyn/cau pob eitem)\r\ndocument_outline_label=Amlinelliad Dogfen\r\nattachments.title=Dangos Atodiadau\r\nattachments_label=Atodiadau\r\nlayers.title=Dangos Haenau (cliciwch ddwywaith i ailosod yr holl haenau i'r cyflwr rhagosodedig)\r\nlayers_label=Haenau\r\nthumbs.title=Dangos Lluniau Bach\r\nthumbs_label=Lluniau Bach\r\ncurrent_outline_item.title=Canfod yr Eitem Amlinellol Gyfredol\r\ncurrent_outline_item_label=Yr Eitem Amlinellol Gyfredol\r\nfindbar.title=Canfod yn y Ddogfen\r\nfindbar_label=Canfod\r\n\r\nadditional_layers=Haenau Ychwanegol\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Tudalen {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Tudalen {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Llun Bach Tudalen {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Canfod\r\nfind_input.placeholder=Canfod yn y ddogfen…\r\nfind_previous.title=Canfod enghraifft flaenorol o'r ymadrodd\r\nfind_previous_label=Blaenorol\r\nfind_next.title=Canfod enghraifft nesaf yr ymadrodd\r\nfind_next_label=Nesaf\r\nfind_highlight=Amlygu popeth\r\nfind_match_case_label=Cydweddu maint\r\nfind_entire_word_label=Geiriau cyfan\r\nfind_reached_top=Wedi cyrraedd brig y dudalen, parhau o'r gwaelod\r\nfind_reached_bottom=Wedi cyrraedd diwedd y dudalen, parhau o'r brig\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} o {{total}} cydweddiad\r\nfind_match_count[two]={{current}} o {{total}} cydweddiad\r\nfind_match_count[few]={{current}} o {{total}} cydweddiad\r\nfind_match_count[many]={{current}} o {{total}} cydweddiad\r\nfind_match_count[other]={{current}} o {{total}} cydweddiad\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Mwy na {{limit}} cydweddiad\r\nfind_match_count_limit[one]=Mwy na {{limit}} cydweddiad\r\nfind_match_count_limit[two]=Mwy na {{limit}} cydweddiad\r\nfind_match_count_limit[few]=Mwy na {{limit}} cydweddiad\r\nfind_match_count_limit[many]=Mwy na {{limit}} cydweddiad\r\nfind_match_count_limit[other]=Mwy na {{limit}} cydweddiad\r\nfind_not_found=Heb ganfod ymadrodd\r\n\r\n# Error panel labels\r\nerror_more_info=Rhagor o Wybodaeth\r\nerror_less_info=Llai o wybodaeth\r\nerror_close=Cau\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Neges: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stac: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Ffeil: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Llinell: {{line}}\r\nrendering_error=Digwyddodd gwall wrth adeiladu'r dudalen.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Lled Tudalen\r\npage_scale_fit=Ffit Tudalen\r\npage_scale_auto=Chwyddo Awtomatig\r\npage_scale_actual=Maint Gwirioneddol\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Gwall\r\nloading_error=Digwyddodd gwall wrth lwytho'r PDF.\r\ninvalid_file_error=Ffeil PDF annilys neu llwgr.\r\nmissing_file_error=Ffeil PDF coll.\r\nunexpected_response_error=Ymateb annisgwyl gan y gweinydd.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anodiad {{type}} ]\r\npassword_label=Rhowch gyfrinair i agor y PDF.\r\npassword_invalid=Cyfrinair annilys. Ceisiwch eto.\r\npassword_ok=Iawn\r\npassword_cancel=Diddymu\r\n\r\nprinting_not_supported=Rhybudd: Nid yw argraffu yn cael ei gynnal yn llawn gan y porwr.\r\nprinting_not_ready=Rhybudd: Nid yw'r PDF wedi ei lwytho'n llawn ar gyfer argraffu.\r\nweb_fonts_disabled=Ffontiau gwe wedi eu hanalluogi: methu defnyddio ffontiau PDF mewnblanedig.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/da/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Forrige side\r\nprevious_label=Forrige\r\nnext.title=Næste side\r\nnext_label=Næste\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Side\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=af {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} af {{pagesCount}})\r\n\r\nzoom_out.title=Zoom ud\r\nzoom_out_label=Zoom ud\r\nzoom_in.title=Zoom ind\r\nzoom_in_label=Zoom ind\r\nzoom.title=Zoom\r\npresentation_mode.title=Skift til fuldskærmsvisning\r\npresentation_mode_label=Fuldskærmsvisning\r\nopen_file.title=Åbn fil\r\nopen_file_label=Åbn\r\nprint.title=Udskriv\r\nprint_label=Udskriv\r\ndownload.title=Hent\r\ndownload_label=Hent\r\nbookmark.title=Aktuel visning (kopier eller åbn i et nyt vindue)\r\nbookmark_label=Aktuel visning\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Funktioner\r\ntools_label=Funktioner\r\nfirst_page.title=Gå til første side\r\nfirst_page.label=Gå til første side\r\nfirst_page_label=Gå til første side\r\nlast_page.title=Gå til sidste side\r\nlast_page.label=Gå til sidste side\r\nlast_page_label=Gå til sidste side\r\npage_rotate_cw.title=Roter med uret\r\npage_rotate_cw.label=Roter med uret\r\npage_rotate_cw_label=Roter med uret\r\npage_rotate_ccw.title=Roter mod uret\r\npage_rotate_ccw.label=Roter mod uret\r\npage_rotate_ccw_label=Roter mod uret\r\n\r\ncursor_text_select_tool.title=Aktiver markeringsværktøj\r\ncursor_text_select_tool_label=Markeringsværktøj\r\ncursor_hand_tool.title=Aktiver håndværktøj\r\ncursor_hand_tool_label=Håndværktøj\r\n\r\nscroll_vertical.title=Brug vertikal scrolling\r\nscroll_vertical_label=Vertikal scrolling\r\nscroll_horizontal.title=Brug horisontal scrolling\r\nscroll_horizontal_label=Horisontal scrolling\r\nscroll_wrapped.title=Brug ombrudt scrolling\r\nscroll_wrapped_label=Ombrudt scrolling\r\n\r\nspread_none.title=Vis enkeltsider\r\nspread_none_label=Enkeltsider\r\nspread_odd.title=Vis opslag med ulige sidenumre til venstre\r\nspread_odd_label=Opslag med forside\r\nspread_even.title=Vis opslag med lige sidenumre til venstre\r\nspread_even_label=Opslag uden forside\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumentegenskaber…\r\ndocument_properties_label=Dokumentegenskaber…\r\ndocument_properties_file_name=Filnavn:\r\ndocument_properties_file_size=Filstørrelse:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Titel:\r\ndocument_properties_author=Forfatter:\r\ndocument_properties_subject=Emne:\r\ndocument_properties_keywords=Nøgleord:\r\ndocument_properties_creation_date=Oprettet:\r\ndocument_properties_modification_date=Redigeret:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Program:\r\ndocument_properties_producer=PDF-producent:\r\ndocument_properties_version=PDF-version:\r\ndocument_properties_page_count=Antal sider:\r\ndocument_properties_page_size=Sidestørrelse:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=stående\r\ndocument_properties_page_size_orientation_landscape=liggende\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Hurtig web-visning:\r\ndocument_properties_linearized_yes=Ja\r\ndocument_properties_linearized_no=Nej\r\ndocument_properties_close=Luk\r\n\r\nprint_progress_message=Forbereder dokument til udskrivning…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Annuller\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Slå sidepanel til eller fra\r\ntoggle_sidebar_notification.title=Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer)\r\ntoggle_sidebar_notification2.title=Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer/lag)\r\ntoggle_sidebar_label=Slå sidepanel til eller fra\r\ndocument_outline.title=Vis dokumentets disposition (dobbeltklik for at vise/skjule alle elementer)\r\ndocument_outline_label=Dokument-disposition\r\nattachments.title=Vis vedhæftede filer\r\nattachments_label=Vedhæftede filer\r\nlayers.title=Vis lag (dobbeltklik for at nulstille alle lag til standard-tilstanden)\r\nlayers_label=Lag\r\nthumbs.title=Vis miniaturer\r\nthumbs_label=Miniaturer\r\ncurrent_outline_item.title=Find det aktuelle dispositions-element\r\ncurrent_outline_item_label=Aktuelt dispositions-element\r\nfindbar.title=Find i dokument\r\nfindbar_label=Find\r\n\r\nadditional_layers=Yderligere lag\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Side {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Side {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniature af side {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Find\r\nfind_input.placeholder=Find i dokument…\r\nfind_previous.title=Find den forrige forekomst\r\nfind_previous_label=Forrige\r\nfind_next.title=Find den næste forekomst\r\nfind_next_label=Næste\r\nfind_highlight=Fremhæv alle\r\nfind_match_case_label=Forskel på store og små bogstaver\r\nfind_entire_word_label=Hele ord\r\nfind_reached_top=Toppen af siden blev nået, fortsatte fra bunden\r\nfind_reached_bottom=Bunden af siden blev nået, fortsatte fra toppen\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} af {{total}} forekomst\r\nfind_match_count[two]={{current}} af {{total}} forekomster\r\nfind_match_count[few]={{current}} af {{total}} forekomster\r\nfind_match_count[many]={{current}} af {{total}} forekomster\r\nfind_match_count[other]={{current}} af {{total}} forekomster\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Mere end {{limit}} forekomster\r\nfind_match_count_limit[one]=Mere end {{limit}} forekomst\r\nfind_match_count_limit[two]=Mere end {{limit}} forekomster\r\nfind_match_count_limit[few]=Mere end {{limit}} forekomster\r\nfind_match_count_limit[many]=Mere end {{limit}} forekomster\r\nfind_match_count_limit[other]=Mere end {{limit}} forekomster\r\nfind_not_found=Der blev ikke fundet noget\r\n\r\n# Error panel labels\r\nerror_more_info=Mere information\r\nerror_less_info=Mindre information\r\nerror_close=Luk\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Fejlmeddelelse: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fil: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linje: {{line}}\r\nrendering_error=Der opstod en fejl ved generering af siden.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Sidebredde\r\npage_scale_fit=Tilpas til side\r\npage_scale_auto=Automatisk zoom\r\npage_scale_actual=Faktisk størrelse\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Fejl\r\nloading_error=Der opstod en fejl ved indlæsning af PDF-filen.\r\ninvalid_file_error=PDF-filen er ugyldig eller ødelagt.\r\nmissing_file_error=Manglende PDF-fil.\r\nunexpected_response_error=Uventet svar fra serveren.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}}kommentar]\r\npassword_label=Angiv adgangskode til at åbne denne PDF-fil.\r\npassword_invalid=Ugyldig adgangskode. Prøv igen.\r\npassword_ok=OK\r\npassword_cancel=Fortryd\r\n\r\nprinting_not_supported=Advarsel: Udskrivning er ikke fuldt understøttet af browseren.\r\nprinting_not_ready=Advarsel: PDF-filen er ikke fuldt indlæst til udskrivning.\r\nweb_fonts_disabled=Webskrifttyper er deaktiverede. De indlejrede skrifttyper i PDF-filen kan ikke anvendes.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/de/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Eine Seite zurück\r\nprevious_label=Zurück\r\nnext.title=Eine Seite vor\r\nnext_label=Vor\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Seite\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=von {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} von {{pagesCount}})\r\n\r\nzoom_out.title=Verkleinern\r\nzoom_out_label=Verkleinern\r\nzoom_in.title=Vergrößern\r\nzoom_in_label=Vergrößern\r\nzoom.title=Zoom\r\npresentation_mode.title=In Präsentationsmodus wechseln\r\npresentation_mode_label=Präsentationsmodus\r\nopen_file.title=Datei öffnen\r\nopen_file_label=Öffnen\r\nprint.title=Drucken\r\nprint_label=Drucken\r\ndownload.title=Dokument speichern\r\ndownload_label=Speichern\r\nbookmark.title=Aktuelle Ansicht (zum Kopieren oder Öffnen in einem neuen Fenster)\r\nbookmark_label=Aktuelle Ansicht\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Werkzeuge\r\ntools_label=Werkzeuge\r\nfirst_page.title=Erste Seite anzeigen\r\nfirst_page.label=Erste Seite anzeigen\r\nfirst_page_label=Erste Seite anzeigen\r\nlast_page.title=Letzte Seite anzeigen\r\nlast_page.label=Letzte Seite anzeigen\r\nlast_page_label=Letzte Seite anzeigen\r\npage_rotate_cw.title=Im Uhrzeigersinn drehen\r\npage_rotate_cw.label=Im Uhrzeigersinn drehen\r\npage_rotate_cw_label=Im Uhrzeigersinn drehen\r\npage_rotate_ccw.title=Gegen Uhrzeigersinn drehen\r\npage_rotate_ccw.label=Gegen Uhrzeigersinn drehen\r\npage_rotate_ccw_label=Gegen Uhrzeigersinn drehen\r\n\r\ncursor_text_select_tool.title=Textauswahl-Werkzeug aktivieren\r\ncursor_text_select_tool_label=Textauswahl-Werkzeug\r\ncursor_hand_tool.title=Hand-Werkzeug aktivieren\r\ncursor_hand_tool_label=Hand-Werkzeug\r\n\r\nscroll_vertical.title=Seiten übereinander anordnen\r\nscroll_vertical_label=Vertikale Seitenanordnung\r\nscroll_horizontal.title=Seiten nebeneinander anordnen\r\nscroll_horizontal_label=Horizontale Seitenanordnung\r\nscroll_wrapped.title=Seiten neben- und übereinander anordnen, anhängig vom Platz\r\nscroll_wrapped_label=Kombinierte Seitenanordnung\r\n\r\nspread_none.title=Seiten nicht nebeneinander anzeigen\r\nspread_none_label=Einzelne Seiten\r\nspread_odd.title=Jeweils eine ungerade und eine gerade Seite nebeneinander anzeigen\r\nspread_odd_label=Ungerade + gerade Seite\r\nspread_even.title=Jeweils eine gerade und eine ungerade Seite nebeneinander anzeigen\r\nspread_even_label=Gerade + ungerade Seite\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumenteigenschaften\r\ndocument_properties_label=Dokumenteigenschaften…\r\ndocument_properties_file_name=Dateiname:\r\ndocument_properties_file_size=Dateigröße:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} Bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} Bytes)\r\ndocument_properties_title=Titel:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Thema:\r\ndocument_properties_keywords=Stichwörter:\r\ndocument_properties_creation_date=Erstelldatum:\r\ndocument_properties_modification_date=Bearbeitungsdatum:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}} {{time}}\r\ndocument_properties_creator=Anwendung:\r\ndocument_properties_producer=PDF erstellt mit:\r\ndocument_properties_version=PDF-Version:\r\ndocument_properties_page_count=Seitenzahl:\r\ndocument_properties_page_size=Seitengröße:\r\ndocument_properties_page_size_unit_inches=Zoll\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=Hochformat\r\ndocument_properties_page_size_orientation_landscape=Querformat\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Schnelle Webanzeige:\r\ndocument_properties_linearized_yes=Ja\r\ndocument_properties_linearized_no=Nein\r\ndocument_properties_close=Schließen\r\n\r\nprint_progress_message=Dokument wird für Drucken vorbereitet…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}} %\r\nprint_progress_close=Abbrechen\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Sidebar umschalten\r\ntoggle_sidebar_notification.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge)\r\ntoggle_sidebar_notification2.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge/Ebenen)\r\ntoggle_sidebar_label=Sidebar umschalten\r\ndocument_outline.title=Dokumentstruktur anzeigen (Doppelklicken, um alle Einträge aus- bzw. einzuklappen)\r\ndocument_outline_label=Dokumentstruktur\r\nattachments.title=Anhänge anzeigen\r\nattachments_label=Anhänge\r\nlayers.title=Ebenen anzeigen (Doppelklicken, um alle Ebenen auf den Standardzustand zurückzusetzen)\r\nlayers_label=Ebenen\r\nthumbs.title=Miniaturansichten anzeigen\r\nthumbs_label=Miniaturansichten\r\ncurrent_outline_item.title=Aktuelles Struktur-Element suchen\r\ncurrent_outline_item_label=Aktuelles Struktur-Element\r\nfindbar.title=Dokument durchsuchen\r\nfindbar_label=Suchen\r\n\r\nadditional_layers=Zusätzliche Ebenen\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Seite {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Seite {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniaturansicht von Seite {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Suchen\r\nfind_input.placeholder=Im Dokument suchen…\r\nfind_previous.title=Vorheriges Vorkommen des Suchbegriffs finden\r\nfind_previous_label=Zurück\r\nfind_next.title=Nächstes Vorkommen des Suchbegriffs finden\r\nfind_next_label=Weiter\r\nfind_highlight=Alle hervorheben\r\nfind_match_case_label=Groß-/Kleinschreibung beachten\r\nfind_entire_word_label=Ganze Wörter\r\nfind_reached_top=Anfang des Dokuments erreicht, fahre am Ende fort\r\nfind_reached_bottom=Ende des Dokuments erreicht, fahre am Anfang fort\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} von {{total}} Übereinstimmung\r\nfind_match_count[two]={{current}} von {{total}} Übereinstimmungen\r\nfind_match_count[few]={{current}} von {{total}} Übereinstimmungen\r\nfind_match_count[many]={{current}} von {{total}} Übereinstimmungen\r\nfind_match_count[other]={{current}} von {{total}} Übereinstimmungen\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Mehr als {{limit}} Übereinstimmungen\r\nfind_match_count_limit[one]=Mehr als {{limit}} Übereinstimmung\r\nfind_match_count_limit[two]=Mehr als {{limit}} Übereinstimmungen\r\nfind_match_count_limit[few]=Mehr als {{limit}} Übereinstimmungen\r\nfind_match_count_limit[many]=Mehr als {{limit}} Übereinstimmungen\r\nfind_match_count_limit[other]=Mehr als {{limit}} Übereinstimmungen\r\nfind_not_found=Suchbegriff nicht gefunden\r\n\r\n# Error panel labels\r\nerror_more_info=Mehr Informationen\r\nerror_less_info=Weniger Informationen\r\nerror_close=Schließen\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js Version {{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Nachricht: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Aufrufliste: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Datei: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Zeile: {{line}}\r\nrendering_error=Beim Darstellen der Seite trat ein Fehler auf.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Seitenbreite\r\npage_scale_fit=Seitengröße\r\npage_scale_auto=Automatischer Zoom\r\npage_scale_actual=Originalgröße\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}} %\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Fehler\r\nloading_error=Beim Laden der PDF-Datei trat ein Fehler auf.\r\ninvalid_file_error=Ungültige oder beschädigte PDF-Datei\r\nmissing_file_error=Fehlende PDF-Datei\r\nunexpected_response_error=Unerwartete Antwort des Servers\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anlage: {{type}}]\r\npassword_label=Geben Sie zum Öffnen der PDF-Datei deren Passwort ein.\r\npassword_invalid=Falsches Passwort. Bitte versuchen Sie es erneut.\r\npassword_ok=OK\r\npassword_cancel=Abbrechen\r\n\r\nprinting_not_supported=Warnung: Die Drucken-Funktion wird durch diesen Browser nicht vollständig unterstützt.\r\nprinting_not_ready=Warnung: Die PDF-Datei ist nicht vollständig geladen, dies ist für das Drucken aber empfohlen.\r\nweb_fonts_disabled=Web-Schriftarten sind deaktiviert: Eingebettete PDF-Schriftarten konnten nicht geladen werden.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/dsb/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Pjerwjejšny bok\r\nprevious_label=Slědk\r\nnext.title=Pśiducy bok\r\nnext_label=Dalej\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Bok\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=z {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} z {{pagesCount}})\r\n\r\nzoom_out.title=Pómjeńšyś\r\nzoom_out_label=Pómjeńšyś\r\nzoom_in.title=Pówětšyś\r\nzoom_in_label=Pówětšyś\r\nzoom.title=Skalěrowanje\r\npresentation_mode.title=Do prezentaciskego modusa pśejś\r\npresentation_mode_label=Prezentaciski modus\r\nopen_file.title=Dataju wócyniś\r\nopen_file_label=Wócyniś\r\nprint.title=Śišćaś\r\nprint_label=Śišćaś\r\ndownload.title=Ześěgnuś\r\ndownload_label=Ześěgnuś\r\nbookmark.title=Aktualny naglěd (kopěrowaś abo w nowem woknje wócyniś)\r\nbookmark_label=Aktualny naglěd\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Rědy\r\ntools_label=Rědy\r\nfirst_page.title=K prědnemu bokoju\r\nfirst_page.label=K prědnemu bokoju\r\nfirst_page_label=K prědnemu bokoju\r\nlast_page.title=K slědnemu bokoju\r\nlast_page.label=K slědnemu bokoju\r\nlast_page_label=K slědnemu bokoju\r\npage_rotate_cw.title=Wobwjertnuś ako špěra źo\r\npage_rotate_cw.label=Wobwjertnuś ako špěra źo\r\npage_rotate_cw_label=Wobwjertnuś ako špěra źo\r\npage_rotate_ccw.title=Wobwjertnuś nawopaki ako špěra źo\r\npage_rotate_ccw.label=Wobwjertnuś nawopaki ako špěra źo\r\npage_rotate_ccw_label=Wobwjertnuś nawopaki ako špěra źo\r\n\r\ncursor_text_select_tool.title=Rěd za wuběranje teksta zmóžniś\r\ncursor_text_select_tool_label=Rěd za wuběranje teksta\r\ncursor_hand_tool.title=Rucny rěd zmóžniś\r\ncursor_hand_tool_label=Rucny rěd\r\n\r\nscroll_vertical.title=Wertikalne suwanje wužywaś\r\nscroll_vertical_label=Wertikalnje suwanje\r\nscroll_horizontal.title=Horicontalne suwanje wužywaś\r\nscroll_horizontal_label=Horicontalne suwanje\r\nscroll_wrapped.title=Pózlažke suwanje wužywaś\r\nscroll_wrapped_label=Pózlažke suwanje\r\n\r\nspread_none.title=Boki njezwězaś\r\nspread_none_label=Žeden dwójny bok\r\nspread_odd.title=Boki zachopinajucy z njerownymi bokami zwězaś\r\nspread_odd_label=Njerowne boki\r\nspread_even.title=Boki zachopinajucy z rownymi bokami zwězaś\r\nspread_even_label=Rowne boki\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumentowe kakosći…\r\ndocument_properties_label=Dokumentowe kakosći…\r\ndocument_properties_file_name=Mě dataje:\r\ndocument_properties_file_size=Wjelikosć dataje:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bajtow)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bajtow)\r\ndocument_properties_title=Titel:\r\ndocument_properties_author=Awtor:\r\ndocument_properties_subject=Tema:\r\ndocument_properties_keywords=Klucowe słowa:\r\ndocument_properties_creation_date=Datum napóranja:\r\ndocument_properties_modification_date=Datum změny:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Awtor:\r\ndocument_properties_producer=PDF-gótowaŕ:\r\ndocument_properties_version=PDF-wersija:\r\ndocument_properties_page_count=Licba bokow:\r\ndocument_properties_page_size=Wjelikosć boka:\r\ndocument_properties_page_size_unit_inches=col\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=wusoki format\r\ndocument_properties_page_size_orientation_landscape=prěcny format\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Fast Web View:\r\ndocument_properties_linearized_yes=Jo\r\ndocument_properties_linearized_no=Ně\r\ndocument_properties_close=Zacyniś\r\n\r\nprint_progress_message=Dokument pśigótujo se za śišćanje…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Pśetergnuś\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Bócnicu pokazaś/schowaś\r\ntoggle_sidebar_notification.title=Bocnicu pśešaltowaś (dokument wopśimujo pśeglěd/pśipiski)\r\ntoggle_sidebar_notification2.title=Bocnicu pśešaltowaś (dokument rozrědowanje/pśipiski/warstwy wopśimujo)\r\ntoggle_sidebar_label=Bócnicu pokazaś/schowaś\r\ndocument_outline.title=Dokumentowe naraźenje pokazaś (dwójne kliknjenje, aby se wšykne zapiski pokazali/schowali)\r\ndocument_outline_label=Dokumentowa struktura\r\nattachments.title=Pśidanki pokazaś\r\nattachments_label=Pśidanki\r\nlayers.title=Warstwy pokazaś (klikniśo dwójcy, aby wšykne warstwy na standardny staw slědk stajił)\r\nlayers_label=Warstwy\r\nthumbs.title=Miniatury pokazaś\r\nthumbs_label=Miniatury\r\ncurrent_outline_item.title=Aktualny rozrědowański zapisk pytaś\r\ncurrent_outline_item_label=Aktualny rozrědowański zapisk\r\nfindbar.title=W dokumenśe pytaś\r\nfindbar_label=Pytaś\r\n\r\nadditional_layers=Dalšne warstwy\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Bok {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Bok {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura boka {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Pytaś\r\nfind_input.placeholder=W dokumenśe pytaś…\r\nfind_previous.title=Pjerwjejšne wustupowanje pytańskego wuraza pytaś\r\nfind_previous_label=Slědk\r\nfind_next.title=Pśidujuce wustupowanje pytańskego wuraza pytaś\r\nfind_next_label=Dalej\r\nfind_highlight=Wšykne wuzwignuś\r\nfind_match_case_label=Na wjelikopisanje źiwaś\r\nfind_entire_word_label=Cełe słowa\r\nfind_reached_top=Zachopjeńk dokumenta dostany, pókšacujo se z kóńcom\r\nfind_reached_bottom=Kóńc dokumenta dostany, pókšacujo se ze zachopjeńkom\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} z {{total}} wótpowědnika\r\nfind_match_count[two]={{current}} z {{total}} wótpowědnikowu\r\nfind_match_count[few]={{current}} z {{total}} wótpowědnikow\r\nfind_match_count[many]={{current}} z {{total}} wótpowědnikow\r\nfind_match_count[other]={{current}} z {{total}} wótpowědnikow\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Wěcej ako {{limit}} wótpowědnikow\r\nfind_match_count_limit[one]=Wěcej ako {{limit}} wótpowědnik\r\nfind_match_count_limit[two]=Wěcej ako {{limit}} wótpowědnika\r\nfind_match_count_limit[few]=Wěcej ako {{limit}} wótpowědniki\r\nfind_match_count_limit[many]=Wěcej ako {{limit}} wótpowědnikow\r\nfind_match_count_limit[other]=Wěcej ako {{limit}} wótpowědnikow\r\nfind_not_found=Pytański wuraz njejo se namakał\r\n\r\n# Error panel labels\r\nerror_more_info=Wěcej informacijow\r\nerror_less_info=Mjenjej informacijow\r\nerror_close=Zacyniś\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Powěźenka: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Lisćina zawołanjow: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Dataja: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Smužka: {{line}}\r\nrendering_error=Pśi zwobraznjanju boka jo zmólka nastała.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Šyrokosć boka\r\npage_scale_fit=Wjelikosć boka\r\npage_scale_auto=Awtomatiske skalěrowanje\r\npage_scale_actual=Aktualna wjelikosć\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Zmólka\r\nloading_error=Pśi zacytowanju PDF jo zmólka nastała.\r\ninvalid_file_error=Njepłaśiwa abo wobškóźona PDF-dataja.\r\nmissing_file_error=Felujuca PDF-dataja.\r\nunexpected_response_error=Njewócakane serwerowe wótegrono.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Typ pśipiskow: {{type}}]\r\npassword_label=Zapódajśo gronidło, aby PDF-dataju wócynił.\r\npassword_invalid=Njepłaśiwe gronidło. Pšosym wopytajśo hyšći raz.\r\npassword_ok=W pórěźe\r\npassword_cancel=Pśetergnuś\r\n\r\nprinting_not_supported=Warnowanje: Śišćanje njepódpěra se połnje pśez toś ten wobglědowak.\r\nprinting_not_ready=Warnowanje: PDF njejo se za śišćanje dopołnje zacytał.\r\nweb_fonts_disabled=Webpisma su znjemóžnjone: njejo móžno, zasajźone PDF-pisma wužywaś.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/el/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Προηγούμενη σελίδα\r\nprevious_label=Προηγούμενη\r\nnext.title=Επόμενη σελίδα\r\nnext_label=Επόμενη\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Σελίδα\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=από {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} από {{pagesCount}})\r\n\r\nzoom_out.title=Σμίκρυνση\r\nzoom_out_label=Σμίκρυνση\r\nzoom_in.title=Μεγέθυνση\r\nzoom_in_label=Μεγέθυνση\r\nzoom.title=Ζουμ\r\npresentation_mode.title=Εναλλαγή σε λειτουργία παρουσίασης\r\npresentation_mode_label=Λειτουργία παρουσίασης\r\nopen_file.title=Άνοιγμα αρχείου\r\nopen_file_label=Άνοιγμα\r\nprint.title=Εκτύπωση\r\nprint_label=Εκτύπωση\r\ndownload.title=Λήψη\r\ndownload_label=Λήψη\r\nbookmark.title=Τρέχουσα προβολή (αντιγραφή ή άνοιγμα σε νέο παράθυρο)\r\nbookmark_label=Τρέχουσα προβολή\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Εργαλεία\r\ntools_label=Εργαλεία\r\nfirst_page.title=Μετάβαση στην πρώτη σελίδα\r\nfirst_page.label=Μετάβαση στην πρώτη σελίδα\r\nfirst_page_label=Μετάβαση στην πρώτη σελίδα\r\nlast_page.title=Μετάβαση στην τελευταία σελίδα\r\nlast_page.label=Μετάβαση στην τελευταία σελίδα\r\nlast_page_label=Μετάβαση στην τελευταία σελίδα\r\npage_rotate_cw.title=Δεξιόστροφη περιστροφή\r\npage_rotate_cw.label=Δεξιόστροφη περιστροφή\r\npage_rotate_cw_label=Δεξιόστροφη περιστροφή\r\npage_rotate_ccw.title=Αριστερόστροφη περιστροφή\r\npage_rotate_ccw.label=Αριστερόστροφη περιστροφή\r\npage_rotate_ccw_label=Αριστερόστροφη περιστροφή\r\n\r\ncursor_text_select_tool.title=Ενεργοποίηση εργαλείου επιλογής κειμένου\r\ncursor_text_select_tool_label=Εργαλείο επιλογής κειμένου\r\ncursor_hand_tool.title=Ενεργοποίηση εργαλείου χεριού\r\ncursor_hand_tool_label=Εργαλείο χεριού\r\n\r\nscroll_vertical.title=Χρήση κάθετης κύλισης\r\nscroll_vertical_label=Κάθετη κύλιση\r\nscroll_horizontal.title=Χρήση οριζόντιας κύλισης\r\nscroll_horizontal_label=Οριζόντια κύλιση\r\nscroll_wrapped.title=Χρήση κυκλικής κύλισης\r\nscroll_wrapped_label=Κυκλική κύλιση\r\n\r\nspread_none.title=Να μην γίνει σύνδεση επεκτάσεων σελίδων\r\nspread_none_label=Χωρίς επεκτάσεις\r\nspread_odd.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις μονές σελίδες\r\nspread_odd_label=Μονές επεκτάσεις\r\nspread_even.title=Σύνδεση επεκτάσεων σελίδων ξεκινώντας από τις ζυγές σελίδες\r\nspread_even_label=Ζυγές επεκτάσεις\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Ιδιότητες εγγράφου…\r\ndocument_properties_label=Ιδιότητες εγγράφου…\r\ndocument_properties_file_name=Όνομα αρχείου:\r\ndocument_properties_file_size=Μέγεθος αρχείου:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Τίτλος:\r\ndocument_properties_author=Συγγραφέας:\r\ndocument_properties_subject=Θέμα:\r\ndocument_properties_keywords=Λέξεις κλειδιά:\r\ndocument_properties_creation_date=Ημερομηνία δημιουργίας:\r\ndocument_properties_modification_date=Ημερομηνία τροποποίησης:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Δημιουργός:\r\ndocument_properties_producer=Παραγωγός PDF:\r\ndocument_properties_version=Έκδοση PDF:\r\ndocument_properties_page_count=Αριθμός σελίδων:\r\ndocument_properties_page_size=Μέγεθος σελίδας:\r\ndocument_properties_page_size_unit_inches=ίντσες\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=κατακόρυφα\r\ndocument_properties_page_size_orientation_landscape=οριζόντια\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Επιστολή\r\ndocument_properties_page_size_name_legal=Τύπου Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Ταχεία προβολή ιστού:\r\ndocument_properties_linearized_yes=Ναι\r\ndocument_properties_linearized_no=Όχι\r\ndocument_properties_close=Κλείσιμο\r\n\r\nprint_progress_message=Προετοιμασία του εγγράφου για εκτύπωση…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Ακύρωση\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=(Απ)ενεργοποίηση πλευρικής στήλης\r\ntoggle_sidebar_notification.title=(Απ)ενεργοποίηση πλευρικής στήλης (το έγγραφο περιέχει περίγραμμα/συνημμένα)\r\ntoggle_sidebar_notification2.title=(Απ)ενεργοποίηση πλευρικής στήλης (το έγγραφο περιέχει περίγραμμα/συνημμένα/επίπεδα)\r\ntoggle_sidebar_label=(Απ)ενεργοποίηση πλευρικής στήλης\r\ndocument_outline.title=Εμφάνιση διάρθρωσης εγγράφου (διπλό κλικ για ανάπτυξη/σύμπτυξη όλων των στοιχείων)\r\ndocument_outline_label=Διάρθρωση εγγράφου\r\nattachments.title=Προβολή συνημμένων\r\nattachments_label=Συνημμένα\r\nlayers.title=Εμφάνιση επιπέδων (διπλό κλικ για επαναφορά όλων των επιπέδων στην προεπιλεγμένη κατάσταση)\r\nlayers_label=Επίπεδα\r\nthumbs.title=Προβολή μικρογραφιών\r\nthumbs_label=Μικρογραφίες\r\ncurrent_outline_item.title=Εύρεση τρέχοντος στοιχείου διάρθρωσης\r\ncurrent_outline_item_label=Τρέχον στοιχείο διάρθρωσης\r\nfindbar.title=Εύρεση στο έγγραφο\r\nfindbar_label=Εύρεση\r\n\r\nadditional_layers=Επιπρόσθετα επίπεδα\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Σελίδα {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Σελίδα {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Μικρογραφία της σελίδας {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Εύρεση\r\nfind_input.placeholder=Εύρεση στο έγγραφο…\r\nfind_previous.title=Εύρεση της προηγούμενης εμφάνισης της φράσης\r\nfind_previous_label=Προηγούμενο\r\nfind_next.title=Εύρεση της επόμενης εμφάνισης της φράσης\r\nfind_next_label=Επόμενο\r\nfind_highlight=Επισήμανση όλων\r\nfind_match_case_label=Ταίριασμα χαρακτήρα\r\nfind_entire_word_label=Ολόκληρες λέξεις\r\nfind_reached_top=Έλευση στην αρχή του εγγράφου, συνέχεια από το τέλος\r\nfind_reached_bottom=Έλευση στο τέλος του εγγράφου, συνέχεια από την αρχή\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} από {{total}} αντιστοιχία\r\nfind_match_count[two]={{current}} από {{total}} αντιστοιχίες\r\nfind_match_count[few]={{current}} από {{total}} αντιστοιχίες\r\nfind_match_count[many]={{current}} από {{total}} αντιστοιχίες\r\nfind_match_count[other]={{current}} από {{total}} αντιστοιχίες\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Περισσότερες από {{limit}} αντιστοιχίες\r\nfind_match_count_limit[one]=Περισσότερες από {{limit}} αντιστοιχία\r\nfind_match_count_limit[two]=Περισσότερες από {{limit}} αντιστοιχίες\r\nfind_match_count_limit[few]=Περισσότερες από {{limit}} αντιστοιχίες\r\nfind_match_count_limit[many]=Περισσότερες από {{limit}} αντιστοιχίες\r\nfind_match_count_limit[other]=Περισσότερες από {{limit}} αντιστοιχίες\r\nfind_not_found=Η φράση δεν βρέθηκε\r\n\r\n# Error panel labels\r\nerror_more_info=Περισσότερες πληροφορίες\r\nerror_less_info=Λιγότερες πληροφορίες\r\nerror_close=Κλείσιμο\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Μήνυμα: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Στοίβα: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Αρχείο: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Γραμμή: {{line}}\r\nrendering_error=Προέκυψε σφάλμα κατά την ανάλυση της σελίδας.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Πλάτος σελίδας\r\npage_scale_fit=Μέγεθος σελίδας\r\npage_scale_auto=Αυτόματο ζουμ\r\npage_scale_actual=Πραγματικό μέγεθος\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Σφάλμα\r\nloading_error=Προέκυψε ένα σφάλμα κατά τη φόρτωση του PDF.\r\ninvalid_file_error=Μη έγκυρο ή κατεστραμμένο αρχείο PDF.\r\nmissing_file_error=Λείπει αρχείο PDF.\r\nunexpected_response_error=Μη αναμενόμενη απόκριση από το διακομιστή.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Σχόλιο]\r\npassword_label=Εισαγωγή κωδικού για το άνοιγμα του PDF αρχείου.\r\npassword_invalid=Μη έγκυρος κωδικός. Προσπαθείστε ξανά.\r\npassword_ok=OK\r\npassword_cancel=Ακύρωση\r\n\r\nprinting_not_supported=Προειδοποίηση: Η εκτύπωση δεν υποστηρίζεται πλήρως από αυτόν τον περιηγητή.\r\nprinting_not_ready=Προειδοποίηση: Το PDF δεν φορτώθηκε πλήρως για εκτύπωση.\r\nweb_fonts_disabled=Οι γραμματοσειρές Web απενεργοποιημένες: αδυναμία χρήσης των ενσωματωμένων γραμματοσειρών PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/en-CA/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Previous Page\r\nprevious_label=Previous\r\nnext.title=Next Page\r\nnext_label=Next\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Page\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=of {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} of {{pagesCount}})\r\n\r\nzoom_out.title=Zoom Out\r\nzoom_out_label=Zoom Out\r\nzoom_in.title=Zoom In\r\nzoom_in_label=Zoom In\r\nzoom.title=Zoom\r\npresentation_mode.title=Switch to Presentation Mode\r\npresentation_mode_label=Presentation Mode\r\nopen_file.title=Open File\r\nopen_file_label=Open\r\nprint.title=Print\r\nprint_label=Print\r\ndownload.title=Download\r\ndownload_label=Download\r\nbookmark.title=Current view (copy or open in new window)\r\nbookmark_label=Current View\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Tools\r\ntools_label=Tools\r\nfirst_page.title=Go to First Page\r\nfirst_page.label=Go to First Page\r\nfirst_page_label=Go to First Page\r\nlast_page.title=Go to Last Page\r\nlast_page.label=Go to Last Page\r\nlast_page_label=Go to Last Page\r\npage_rotate_cw.title=Rotate Clockwise\r\npage_rotate_cw.label=Rotate Clockwise\r\npage_rotate_cw_label=Rotate Clockwise\r\npage_rotate_ccw.title=Rotate Counterclockwise\r\npage_rotate_ccw.label=Rotate Counterclockwise\r\npage_rotate_ccw_label=Rotate Counterclockwise\r\n\r\ncursor_text_select_tool.title=Enable Text Selection Tool\r\ncursor_text_select_tool_label=Text Selection Tool\r\ncursor_hand_tool.title=Enable Hand Tool\r\ncursor_hand_tool_label=Hand Tool\r\n\r\nscroll_vertical.title=Use Vertical Scrolling\r\nscroll_vertical_label=Vertical Scrolling\r\nscroll_horizontal.title=Use Horizontal Scrolling\r\nscroll_horizontal_label=Horizontal Scrolling\r\nscroll_wrapped.title=Use Wrapped Scrolling\r\nscroll_wrapped_label=Wrapped Scrolling\r\n\r\nspread_none.title=Do not join page spreads\r\nspread_none_label=No Spreads\r\nspread_odd.title=Join page spreads starting with odd-numbered pages\r\nspread_odd_label=Odd Spreads\r\nspread_even.title=Join page spreads starting with even-numbered pages\r\nspread_even_label=Even Spreads\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Document Properties…\r\ndocument_properties_label=Document Properties…\r\ndocument_properties_file_name=File name:\r\ndocument_properties_file_size=File size:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} kB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Title:\r\ndocument_properties_author=Author:\r\ndocument_properties_subject=Subject:\r\ndocument_properties_keywords=Keywords:\r\ndocument_properties_creation_date=Creation Date:\r\ndocument_properties_modification_date=Modification Date:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Creator:\r\ndocument_properties_producer=PDF Producer:\r\ndocument_properties_version=PDF Version:\r\ndocument_properties_page_count=Page Count:\r\ndocument_properties_page_size=Page Size:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=portrait\r\ndocument_properties_page_size_orientation_landscape=landscape\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Fast Web View:\r\ndocument_properties_linearized_yes=Yes\r\ndocument_properties_linearized_no=No\r\ndocument_properties_close=Close\r\n\r\nprint_progress_message=Preparing document for printing…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cancel\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Toggle Sidebar\r\ntoggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)\r\ntoggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)\r\ntoggle_sidebar_label=Toggle Sidebar\r\ndocument_outline.title=Show Document Outline (double-click to expand/collapse all items)\r\ndocument_outline_label=Document Outline\r\nattachments.title=Show Attachments\r\nattachments_label=Attachments\r\nlayers.title=Show Layers (double-click to reset all layers to the default state)\r\nlayers_label=Layers\r\nthumbs.title=Show Thumbnails\r\nthumbs_label=Thumbnails\r\ncurrent_outline_item.title=Find Current Outline Item\r\ncurrent_outline_item_label=Current Outline Item\r\nfindbar.title=Find in Document\r\nfindbar_label=Find\r\n\r\nadditional_layers=Additional Layers\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Page {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Page {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Thumbnail of Page {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Find\r\nfind_input.placeholder=Find in document…\r\nfind_previous.title=Find the previous occurrence of the phrase\r\nfind_previous_label=Previous\r\nfind_next.title=Find the next occurrence of the phrase\r\nfind_next_label=Next\r\nfind_highlight=Highlight all\r\nfind_match_case_label=Match case\r\nfind_entire_word_label=Whole words\r\nfind_reached_top=Reached top of document, continued from bottom\r\nfind_reached_bottom=Reached end of document, continued from top\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} of {{total}} match\r\nfind_match_count[two]={{current}} of {{total}} matches\r\nfind_match_count[few]={{current}} of {{total}} matches\r\nfind_match_count[many]={{current}} of {{total}} matches\r\nfind_match_count[other]={{current}} of {{total}} matches\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=More than {{limit}} matches\r\nfind_match_count_limit[one]=More than {{limit}} match\r\nfind_match_count_limit[two]=More than {{limit}} matches\r\nfind_match_count_limit[few]=More than {{limit}} matches\r\nfind_match_count_limit[many]=More than {{limit}} matches\r\nfind_match_count_limit[other]=More than {{limit}} matches\r\nfind_not_found=Phrase not found\r\n\r\n# Error panel labels\r\nerror_more_info=More Information\r\nerror_less_info=Less Information\r\nerror_close=Close\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Message: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=File: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Line: {{line}}\r\nrendering_error=An error occurred while rendering the page.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Page Width\r\npage_scale_fit=Page Fit\r\npage_scale_auto=Automatic Zoom\r\npage_scale_actual=Actual Size\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=An error occurred while loading the PDF.\r\ninvalid_file_error=Invalid or corrupted PDF file.\r\nmissing_file_error=Missing PDF file.\r\nunexpected_response_error=Unexpected server response.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=Enter the password to open this PDF file.\r\npassword_invalid=Invalid password. Please try again.\r\npassword_ok=OK\r\npassword_cancel=Cancel\r\n\r\nprinting_not_supported=Warning: Printing is not fully supported by this browser.\r\nprinting_not_ready=Warning: The PDF is not fully loaded for printing.\r\nweb_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/en-GB/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Previous Page\r\nprevious_label=Previous\r\nnext.title=Next Page\r\nnext_label=Next\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Page\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=of {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} of {{pagesCount}})\r\n\r\nzoom_out.title=Zoom Out\r\nzoom_out_label=Zoom Out\r\nzoom_in.title=Zoom In\r\nzoom_in_label=Zoom In\r\nzoom.title=Zoom\r\npresentation_mode.title=Switch to Presentation Mode\r\npresentation_mode_label=Presentation Mode\r\nopen_file.title=Open File\r\nopen_file_label=Open\r\nprint.title=Print\r\nprint_label=Print\r\ndownload.title=Download\r\ndownload_label=Download\r\nbookmark.title=Current view (copy or open in new window)\r\nbookmark_label=Current View\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Tools\r\ntools_label=Tools\r\nfirst_page.title=Go to First Page\r\nfirst_page.label=Go to First Page\r\nfirst_page_label=Go to First Page\r\nlast_page.title=Go to Last Page\r\nlast_page.label=Go to Last Page\r\nlast_page_label=Go to Last Page\r\npage_rotate_cw.title=Rotate Clockwise\r\npage_rotate_cw.label=Rotate Clockwise\r\npage_rotate_cw_label=Rotate Clockwise\r\npage_rotate_ccw.title=Rotate Anti-Clockwise\r\npage_rotate_ccw.label=Rotate Anti-Clockwise\r\npage_rotate_ccw_label=Rotate Anti-Clockwise\r\n\r\ncursor_text_select_tool.title=Enable Text Selection Tool\r\ncursor_text_select_tool_label=Text Selection Tool\r\ncursor_hand_tool.title=Enable Hand Tool\r\ncursor_hand_tool_label=Hand Tool\r\n\r\nscroll_vertical.title=Use Vertical Scrolling\r\nscroll_vertical_label=Vertical Scrolling\r\nscroll_horizontal.title=Use Horizontal Scrolling\r\nscroll_horizontal_label=Horizontal Scrolling\r\nscroll_wrapped.title=Use Wrapped Scrolling\r\nscroll_wrapped_label=Wrapped Scrolling\r\n\r\nspread_none.title=Do not join page spreads\r\nspread_none_label=No Spreads\r\nspread_odd.title=Join page spreads starting with odd-numbered pages\r\nspread_odd_label=Odd Spreads\r\nspread_even.title=Join page spreads starting with even-numbered pages\r\nspread_even_label=Even Spreads\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Document Properties…\r\ndocument_properties_label=Document Properties…\r\ndocument_properties_file_name=File name:\r\ndocument_properties_file_size=File size:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} kB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Title:\r\ndocument_properties_author=Author:\r\ndocument_properties_subject=Subject:\r\ndocument_properties_keywords=Keywords:\r\ndocument_properties_creation_date=Creation Date:\r\ndocument_properties_modification_date=Modification Date:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Creator:\r\ndocument_properties_producer=PDF Producer:\r\ndocument_properties_version=PDF Version:\r\ndocument_properties_page_count=Page Count:\r\ndocument_properties_page_size=Page Size:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=portrait\r\ndocument_properties_page_size_orientation_landscape=landscape\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Fast Web View:\r\ndocument_properties_linearized_yes=Yes\r\ndocument_properties_linearized_no=No\r\ndocument_properties_close=Close\r\n\r\nprint_progress_message=Preparing document for printing…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cancel\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Toggle Sidebar\r\ntoggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)\r\ntoggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)\r\ntoggle_sidebar_label=Toggle Sidebar\r\ndocument_outline.title=Show Document Outline (double-click to expand/collapse all items)\r\ndocument_outline_label=Document Outline\r\nattachments.title=Show Attachments\r\nattachments_label=Attachments\r\nlayers.title=Show Layers (double-click to reset all layers to the default state)\r\nlayers_label=Layers\r\nthumbs.title=Show Thumbnails\r\nthumbs_label=Thumbnails\r\ncurrent_outline_item.title=Find Current Outline Item\r\ncurrent_outline_item_label=Current Outline Item\r\nfindbar.title=Find in Document\r\nfindbar_label=Find\r\n\r\nadditional_layers=Additional Layers\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Page {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Page {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Thumbnail of Page {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Find\r\nfind_input.placeholder=Find in document…\r\nfind_previous.title=Find the previous occurrence of the phrase\r\nfind_previous_label=Previous\r\nfind_next.title=Find the next occurrence of the phrase\r\nfind_next_label=Next\r\nfind_highlight=Highlight all\r\nfind_match_case_label=Match case\r\nfind_entire_word_label=Whole words\r\nfind_reached_top=Reached top of document, continued from bottom\r\nfind_reached_bottom=Reached end of document, continued from top\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} of {{total}} match\r\nfind_match_count[two]={{current}} of {{total}} matches\r\nfind_match_count[few]={{current}} of {{total}} matches\r\nfind_match_count[many]={{current}} of {{total}} matches\r\nfind_match_count[other]={{current}} of {{total}} matches\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=More than {{limit}} matches\r\nfind_match_count_limit[one]=More than {{limit}} match\r\nfind_match_count_limit[two]=More than {{limit}} matches\r\nfind_match_count_limit[few]=More than {{limit}} matches\r\nfind_match_count_limit[many]=More than {{limit}} matches\r\nfind_match_count_limit[other]=More than {{limit}} matches\r\nfind_not_found=Phrase not found\r\n\r\n# Error panel labels\r\nerror_more_info=More Information\r\nerror_less_info=Less Information\r\nerror_close=Close\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Message: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=File: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Line: {{line}}\r\nrendering_error=An error occurred while rendering the page.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Page Width\r\npage_scale_fit=Page Fit\r\npage_scale_auto=Automatic Zoom\r\npage_scale_actual=Actual Size\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=An error occurred while loading the PDF.\r\ninvalid_file_error=Invalid or corrupted PDF file.\r\nmissing_file_error=Missing PDF file.\r\nunexpected_response_error=Unexpected server response.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=Enter the password to open this PDF file.\r\npassword_invalid=Invalid password. Please try again.\r\npassword_ok=OK\r\npassword_cancel=Cancel\r\n\r\nprinting_not_supported=Warning: Printing is not fully supported by this browser.\r\nprinting_not_ready=Warning: The PDF is not fully loaded for printing.\r\nweb_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/en-US/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Previous Page\r\nprevious_label=Previous\r\nnext.title=Next Page\r\nnext_label=Next\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Page\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=of {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} of {{pagesCount}})\r\n\r\nzoom_out.title=Zoom Out\r\nzoom_out_label=Zoom Out\r\nzoom_in.title=Zoom In\r\nzoom_in_label=Zoom In\r\nzoom.title=Zoom\r\npresentation_mode.title=Switch to Presentation Mode\r\npresentation_mode_label=Presentation Mode\r\nopen_file.title=Open File\r\nopen_file_label=Open\r\nprint.title=Print\r\nprint_label=Print\r\ndownload.title=Download\r\ndownload_label=Download\r\nbookmark.title=Current view (copy or open in new window)\r\nbookmark_label=Current View\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Tools\r\ntools_label=Tools\r\nfirst_page.title=Go to First Page\r\nfirst_page.label=Go to First Page\r\nfirst_page_label=Go to First Page\r\nlast_page.title=Go to Last Page\r\nlast_page.label=Go to Last Page\r\nlast_page_label=Go to Last Page\r\npage_rotate_cw.title=Rotate Clockwise\r\npage_rotate_cw.label=Rotate Clockwise\r\npage_rotate_cw_label=Rotate Clockwise\r\npage_rotate_ccw.title=Rotate Counterclockwise\r\npage_rotate_ccw.label=Rotate Counterclockwise\r\npage_rotate_ccw_label=Rotate Counterclockwise\r\n\r\ncursor_text_select_tool.title=Enable Text Selection Tool\r\ncursor_text_select_tool_label=Text Selection Tool\r\ncursor_hand_tool.title=Enable Hand Tool\r\ncursor_hand_tool_label=Hand Tool\r\n\r\nscroll_vertical.title=Use Vertical Scrolling\r\nscroll_vertical_label=Vertical Scrolling\r\nscroll_horizontal.title=Use Horizontal Scrolling\r\nscroll_horizontal_label=Horizontal Scrolling\r\nscroll_wrapped.title=Use Wrapped Scrolling\r\nscroll_wrapped_label=Wrapped Scrolling\r\n\r\nspread_none.title=Do not join page spreads\r\nspread_none_label=No Spreads\r\nspread_odd.title=Join page spreads starting with odd-numbered pages\r\nspread_odd_label=Odd Spreads\r\nspread_even.title=Join page spreads starting with even-numbered pages\r\nspread_even_label=Even Spreads\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Document Properties…\r\ndocument_properties_label=Document Properties…\r\ndocument_properties_file_name=File name:\r\ndocument_properties_file_size=File size:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Title:\r\ndocument_properties_author=Author:\r\ndocument_properties_subject=Subject:\r\ndocument_properties_keywords=Keywords:\r\ndocument_properties_creation_date=Creation Date:\r\ndocument_properties_modification_date=Modification Date:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Creator:\r\ndocument_properties_producer=PDF Producer:\r\ndocument_properties_version=PDF Version:\r\ndocument_properties_page_count=Page Count:\r\ndocument_properties_page_size=Page Size:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=portrait\r\ndocument_properties_page_size_orientation_landscape=landscape\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Fast Web View:\r\ndocument_properties_linearized_yes=Yes\r\ndocument_properties_linearized_no=No\r\ndocument_properties_close=Close\r\n\r\nprint_progress_message=Preparing document for printing…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cancel\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Toggle Sidebar\r\ntoggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)\r\ntoggle_sidebar_label=Toggle Sidebar\r\ndocument_outline.title=Show Document Outline (double-click to expand/collapse all items)\r\ndocument_outline_label=Document Outline\r\nattachments.title=Show Attachments\r\nattachments_label=Attachments\r\nlayers.title=Show Layers (double-click to reset all layers to the default state)\r\nlayers_label=Layers\r\nthumbs.title=Show Thumbnails\r\nthumbs_label=Thumbnails\r\ncurrent_outline_item.title=Find Current Outline Item\r\ncurrent_outline_item_label=Current Outline Item\r\nfindbar.title=Find in Document\r\nfindbar_label=Find\r\n\r\nadditional_layers=Additional Layers\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Page {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Page {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Thumbnail of Page {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Find\r\nfind_input.placeholder=Find in document…\r\nfind_previous.title=Find the previous occurrence of the phrase\r\nfind_previous_label=Previous\r\nfind_next.title=Find the next occurrence of the phrase\r\nfind_next_label=Next\r\nfind_highlight=Highlight all\r\nfind_match_case_label=Match case\r\nfind_entire_word_label=Whole words\r\nfind_reached_top=Reached top of document, continued from bottom\r\nfind_reached_bottom=Reached end of document, continued from top\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} of {{total}} match\r\nfind_match_count[two]={{current}} of {{total}} matches\r\nfind_match_count[few]={{current}} of {{total}} matches\r\nfind_match_count[many]={{current}} of {{total}} matches\r\nfind_match_count[other]={{current}} of {{total}} matches\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=More than {{limit}} matches\r\nfind_match_count_limit[one]=More than {{limit}} match\r\nfind_match_count_limit[two]=More than {{limit}} matches\r\nfind_match_count_limit[few]=More than {{limit}} matches\r\nfind_match_count_limit[many]=More than {{limit}} matches\r\nfind_match_count_limit[other]=More than {{limit}} matches\r\nfind_not_found=Phrase not found\r\n\r\n# Error panel labels\r\nerror_more_info=More Information\r\nerror_less_info=Less Information\r\nerror_close=Close\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Message: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=File: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Line: {{line}}\r\nrendering_error=An error occurred while rendering the page.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Page Width\r\npage_scale_fit=Page Fit\r\npage_scale_auto=Automatic Zoom\r\npage_scale_actual=Actual Size\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=An error occurred while loading the PDF.\r\ninvalid_file_error=Invalid or corrupted PDF file.\r\nmissing_file_error=Missing PDF file.\r\nunexpected_response_error=Unexpected server response.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=Enter the password to open this PDF file.\r\npassword_invalid=Invalid password. Please try again.\r\npassword_ok=OK\r\npassword_cancel=Cancel\r\n\r\nprinting_not_supported=Warning: Printing is not fully supported by this browser.\r\nprinting_not_ready=Warning: The PDF is not fully loaded for printing.\r\nweb_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/eo/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Antaŭa paĝo\r\nprevious_label=Malantaŭen\r\nnext.title=Venonta paĝo\r\nnext_label=Antaŭen\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Paĝo\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=el {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} el {{pagesCount}})\r\n\r\nzoom_out.title=Malpligrandigi\r\nzoom_out_label=Malpligrandigi\r\nzoom_in.title=Pligrandigi\r\nzoom_in_label=Pligrandigi\r\nzoom.title=Pligrandigilo\r\npresentation_mode.title=Iri al prezenta reĝimo\r\npresentation_mode_label=Prezenta reĝimo\r\nopen_file.title=Malfermi dosieron\r\nopen_file_label=Malfermi\r\nprint.title=Presi\r\nprint_label=Presi\r\ndownload.title=Elŝuti\r\ndownload_label=Elŝuti\r\nbookmark.title=Nuna vido (kopii aŭ malfermi en nova fenestro)\r\nbookmark_label=Nuna vido\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Iloj\r\ntools_label=Iloj\r\nfirst_page.title=Iri al la unua paĝo\r\nfirst_page.label=Iri al la unua paĝo\r\nfirst_page_label=Iri al la unua paĝo\r\nlast_page.title=Iri al la lasta paĝo\r\nlast_page.label=Iri al la lasta paĝo\r\nlast_page_label=Iri al la lasta paĝo\r\npage_rotate_cw.title=Rotaciigi dekstrume\r\npage_rotate_cw.label=Rotaciigi dekstrume\r\npage_rotate_cw_label=Rotaciigi dekstrume\r\npage_rotate_ccw.title=Rotaciigi maldekstrume\r\npage_rotate_ccw.label=Rotaciigi maldekstrume\r\npage_rotate_ccw_label=Rotaciigi maldekstrume\r\n\r\ncursor_text_select_tool.title=Aktivigi tekstan elektilon\r\ncursor_text_select_tool_label=Teksta elektilo\r\ncursor_hand_tool.title=Aktivigi ilon de mano\r\ncursor_hand_tool_label=Ilo de mano\r\n\r\nscroll_vertical.title=Uzi vertikalan ŝovadon\r\nscroll_vertical_label=Vertikala ŝovado\r\nscroll_horizontal.title=Uzi horizontalan ŝovadon\r\nscroll_horizontal_label=Horizontala ŝovado\r\nscroll_wrapped.title=Uzi ambaŭdirektan ŝovadon\r\nscroll_wrapped_label=Ambaŭdirekta ŝovado\r\n\r\nspread_none.title=Ne montri paĝojn po du\r\nspread_none_label=Unupaĝa vido\r\nspread_odd.title=Kunigi paĝojn komencante per nepara paĝo\r\nspread_odd_label=Po du paĝoj, neparaj maldekstre\r\nspread_even.title=Kunigi paĝojn komencante per para paĝo\r\nspread_even_label=Po du paĝoj, paraj maldekstre\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Atributoj de dokumento…\r\ndocument_properties_label=Atributoj de dokumento…\r\ndocument_properties_file_name=Nomo de dosiero:\r\ndocument_properties_file_size=Grando de dosiero:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KO ({{size_b}} oktetoj)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MO ({{size_b}} oktetoj)\r\ndocument_properties_title=Titolo:\r\ndocument_properties_author=Aŭtoro:\r\ndocument_properties_subject=Temo:\r\ndocument_properties_keywords=Ŝlosilvorto:\r\ndocument_properties_creation_date=Dato de kreado:\r\ndocument_properties_modification_date=Dato de modifo:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Kreinto:\r\ndocument_properties_producer=Produktinto de PDF:\r\ndocument_properties_version=Versio de PDF:\r\ndocument_properties_page_count=Nombro de paĝoj:\r\ndocument_properties_page_size=Grando de paĝo:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=vertikala\r\ndocument_properties_page_size_orientation_landscape=horizontala\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letera\r\ndocument_properties_page_size_name_legal=Jura\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Rapida tekstaĵa vido:\r\ndocument_properties_linearized_yes=Jes\r\ndocument_properties_linearized_no=Ne\r\ndocument_properties_close=Fermi\r\n\r\nprint_progress_message=Preparo de dokumento por presi ĝin …\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Nuligi\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Montri/kaŝi flankan strion\r\ntoggle_sidebar_notification.title=Montri/kaŝi flankan strion (la dokumento enhavas konturon/aneksaĵojn)\r\ntoggle_sidebar_notification2.title=Montri/kaŝi flankan strion (la dokumento enhavas konturon/kunsendaĵojn/tavolojn)\r\ntoggle_sidebar_label=Montri/kaŝi flankan strion\r\ndocument_outline.title=Montri la konturon de dokumento (alklaku duoble por faldi/malfaldi ĉiujn elementojn)\r\ndocument_outline_label=Konturo de dokumento\r\nattachments.title=Montri kunsendaĵojn\r\nattachments_label=Kunsendaĵojn\r\nlayers.title=Montri tavolojn (duoble alklaku por remeti ĉiujn tavolojn en la norman staton)\r\nlayers_label=Tavoloj\r\nthumbs.title=Montri miniaturojn\r\nthumbs_label=Miniaturoj\r\nfindbar.title=Serĉi en dokumento\r\nfindbar_label=Serĉi\r\n\r\nadditional_layers=Aldonaj tavoloj\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Paĝo {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Paĝo {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniaturo de paĝo {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Serĉi\r\nfind_input.placeholder=Serĉi en dokumento…\r\nfind_previous.title=Serĉi la antaŭan aperon de la frazo\r\nfind_previous_label=Malantaŭen\r\nfind_next.title=Serĉi la venontan aperon de la frazo\r\nfind_next_label=Antaŭen\r\nfind_highlight=Elstarigi ĉiujn\r\nfind_match_case_label=Distingi inter majuskloj kaj minuskloj\r\nfind_entire_word_label=Tutaj vortoj\r\nfind_reached_top=Komenco de la dokumento atingita, daŭrigado ekde la fino\r\nfind_reached_bottom=Fino de la dokumento atingita, daŭrigado ekde la komenco\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} el {{total}} kongruo\r\nfind_match_count[two]={{current}} el {{total}} kongruoj\r\nfind_match_count[few]={{current}} el {{total}} kongruoj\r\nfind_match_count[many]={{current}} el {{total}} kongruoj\r\nfind_match_count[other]={{current}} el {{total}} kongruoj\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Pli ol {{limit}} kongruoj\r\nfind_match_count_limit[one]=Pli ol {{limit}} kongruo\r\nfind_match_count_limit[two]=Pli ol {{limit}} kongruoj\r\nfind_match_count_limit[few]=Pli ol {{limit}} kongruoj\r\nfind_match_count_limit[many]=Pli ol {{limit}} kongruoj\r\nfind_match_count_limit[other]=Pli ol {{limit}} kongruoj\r\nfind_not_found=Frazo ne trovita\r\n\r\n# Error panel labels\r\nerror_more_info=Pli da informo\r\nerror_less_info=Malpli da informo\r\nerror_close=Fermi\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mesaĝo: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stako: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Dosiero: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linio: {{line}}\r\nrendering_error=Okazis eraro dum la montro de la paĝo.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Larĝo de paĝo\r\npage_scale_fit=Adapti paĝon\r\npage_scale_auto=Aŭtomata skalo\r\npage_scale_actual=Reala grando\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Eraro\r\nloading_error=Okazis eraro dum la ŝargado de la PDF dosiero.\r\ninvalid_file_error=Nevalida aŭ difektita PDF dosiero.\r\nmissing_file_error=Mankas dosiero PDF.\r\nunexpected_response_error=Neatendita respondo de servilo.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Prinoto: {{type}}]\r\npassword_label=Tajpu pasvorton por malfermi tiun ĉi dosieron PDF.\r\npassword_invalid=Nevalida pasvorto. Bonvolu provi denove.\r\npassword_ok=Akcepti\r\npassword_cancel=Nuligi\r\n\r\nprinting_not_supported=Averto: tiu ĉi retumilo ne plene subtenas presadon.\r\nprinting_not_ready=Averto: la PDF dosiero ne estas plene ŝargita por presado.\r\nweb_fonts_disabled=Neaktivaj teksaĵaj tiparoj: ne elbas uzi enmetitajn tiparojn de PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/es-AR/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Página anterior\r\nprevious_label=Anterior\r\nnext.title=Página siguiente\r\nnext_label=Siguiente\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Página\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=de {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=( {{pageNumber}} de {{pagesCount}} )\r\n\r\nzoom_out.title=Alejar\r\nzoom_out_label=Alejar\r\nzoom_in.title=Acercar\r\nzoom_in_label=Acercar\r\nzoom.title=Zoom\r\npresentation_mode.title=Cambiar a modo presentación\r\npresentation_mode_label=Modo presentación\r\nopen_file.title=Abrir archivo\r\nopen_file_label=Abrir\r\nprint.title=Imprimir\r\nprint_label=Imprimir\r\ndownload.title=Descargar\r\ndownload_label=Descargar\r\nbookmark.title=Vista actual (copiar o abrir en nueva ventana)\r\nbookmark_label=Vista actual\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Herramientas\r\ntools_label=Herramientas\r\nfirst_page.title=Ir a primera página\r\nfirst_page.label=Ir a primera página\r\nfirst_page_label=Ir a primera página\r\nlast_page.title=Ir a última página\r\nlast_page.label=Ir a última página\r\nlast_page_label=Ir a última página\r\npage_rotate_cw.title=Rotar horario\r\npage_rotate_cw.label=Rotar horario\r\npage_rotate_cw_label=Rotar horario\r\npage_rotate_ccw.title=Rotar antihorario\r\npage_rotate_ccw.label=Rotar antihorario\r\npage_rotate_ccw_label=Rotar antihorario\r\n\r\ncursor_text_select_tool.title=Habilitar herramienta de selección de texto\r\ncursor_text_select_tool_label=Herramienta de selección de texto\r\ncursor_hand_tool.title=Habilitar herramienta mano\r\ncursor_hand_tool_label=Herramienta mano\r\n\r\nscroll_vertical.title=Usar desplazamiento vertical\r\nscroll_vertical_label=Desplazamiento vertical\r\nscroll_horizontal.title=Usar desplazamiento vertical\r\nscroll_horizontal_label=Desplazamiento horizontal\r\nscroll_wrapped.title=Usar desplazamiento encapsulado\r\nscroll_wrapped_label=Desplazamiento encapsulado\r\n\r\nspread_none.title=No unir páginas dobles\r\nspread_none_label=Sin dobles\r\nspread_odd.title=Unir páginas dobles comenzando con las impares\r\nspread_odd_label=Dobles impares\r\nspread_even.title=Unir páginas dobles comenzando con las pares\r\nspread_even_label=Dobles pares\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Propiedades del documento…\r\ndocument_properties_label=Propiedades del documento…\r\ndocument_properties_file_name=Nombre de archivo:\r\ndocument_properties_file_size=Tamaño de archovo:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Título:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Asunto:\r\ndocument_properties_keywords=Palabras clave:\r\ndocument_properties_creation_date=Fecha de creación:\r\ndocument_properties_modification_date=Fecha de modificación:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Creador:\r\ndocument_properties_producer=PDF Productor:\r\ndocument_properties_version=Versión de PDF:\r\ndocument_properties_page_count=Cantidad de páginas:\r\ndocument_properties_page_size=Tamaño de página:\r\ndocument_properties_page_size_unit_inches=en\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=normal\r\ndocument_properties_page_size_orientation_landscape=apaisado\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Carta\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Vista rápida de la Web:\r\ndocument_properties_linearized_yes=Sí\r\ndocument_properties_linearized_no=No\r\ndocument_properties_close=Cerrar\r\n\r\nprint_progress_message=Preparando documento para imprimir…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cancelar\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Alternar barra lateral\r\ntoggle_sidebar_notification.title=Intercambiar barra lateral (el documento contiene esquema/adjuntos)\r\ntoggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)\r\ntoggle_sidebar_label=Alternar barra lateral\r\ndocument_outline.title=Mostrar esquema del documento (doble clic para expandir/colapsar todos los ítems)\r\ndocument_outline_label=Esquema del documento\r\nattachments.title=Mostrar adjuntos\r\nattachments_label=Adjuntos\r\nlayers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)\r\nlayers_label=Capas\r\nthumbs.title=Mostrar miniaturas\r\nthumbs_label=Miniaturas\r\ncurrent_outline_item.title=Buscar elemento de esquema actual\r\ncurrent_outline_item_label=Elemento de esquema actual\r\nfindbar.title=Buscar en documento\r\nfindbar_label=Buscar\r\n\r\nadditional_layers=Capas adicionales\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Página {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Página {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura de página {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Buscar\r\nfind_input.placeholder=Buscar en documento…\r\nfind_previous.title=Buscar la aparición anterior de la frase\r\nfind_previous_label=Anterior\r\nfind_next.title=Buscar la siguiente aparición de la frase\r\nfind_next_label=Siguiente\r\nfind_highlight=Resaltar todo\r\nfind_match_case_label=Coincidir mayúsculas\r\nfind_entire_word_label=Palabras completas\r\nfind_reached_top=Inicio de documento alcanzado, continuando desde abajo\r\nfind_reached_bottom=Fin de documento alcanzando, continuando desde arriba\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} de {{total}} coincidencias\r\nfind_match_count[two]={{current}} de {{total}} coincidencias\r\nfind_match_count[few]={{current}} de {{total}} coincidencias\r\nfind_match_count[many]={{current}} de {{total}} coincidencias\r\nfind_match_count[other]={{current}} de {{total}} coincidencias\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[one]=Más de {{limit}} coinciden\r\nfind_match_count_limit[two]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[few]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[many]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[other]=Más de {{limit}} coincidencias\r\nfind_not_found=Frase no encontrada\r\n\r\n# Error panel labels\r\nerror_more_info=Más información\r\nerror_less_info=Menos información\r\nerror_close=Cerrar\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mensaje: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pila: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Archivo: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Línea: {{line}}\r\nrendering_error=Ocurrió un error al dibujar la página.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Ancho de página\r\npage_scale_fit=Ajustar página\r\npage_scale_auto=Zoom automático\r\npage_scale_actual=Tamaño real\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=Ocurrió un error al cargar el PDF.\r\ninvalid_file_error=Archivo PDF no válido o cocrrupto.\r\nmissing_file_error=Archivo PDF faltante.\r\nunexpected_response_error=Respuesta del servidor inesperada.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Anotación]\r\npassword_label=Ingrese la contraseña para abrir este archivo PDF\r\npassword_invalid=Contraseña inválida. Intente nuevamente.\r\npassword_ok=Aceptar\r\npassword_cancel=Cancelar\r\n\r\nprinting_not_supported=Advertencia: La impresión no está totalmente soportada por este navegador.\r\nprinting_not_ready=Advertencia: El PDF no está completamente cargado para impresión.\r\nweb_fonts_disabled=Tipografía web deshabilitada: no se pueden usar tipos incrustados en PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/es-CL/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Página anterior\r\nprevious_label=Anterior\r\nnext.title=Página siguiente\r\nnext_label=Siguiente\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Página\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=de {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} de {{pagesCount}})\r\n\r\nzoom_out.title=Alejar\r\nzoom_out_label=Alejar\r\nzoom_in.title=Acercar\r\nzoom_in_label=Acercar\r\nzoom.title=Ampliación\r\npresentation_mode.title=Cambiar al modo de presentación\r\npresentation_mode_label=Modo de presentación\r\nopen_file.title=Abrir archivo\r\nopen_file_label=Abrir\r\nprint.title=Imprimir\r\nprint_label=Imprimir\r\ndownload.title=Descargar\r\ndownload_label=Descargar\r\nbookmark.title=Vista actual (copiar o abrir en nueva ventana)\r\nbookmark_label=Vista actual\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Herramientas\r\ntools_label=Herramientas\r\nfirst_page.title=Ir a la primera página\r\nfirst_page.label=Ir a la primera página\r\nfirst_page_label=Ir a la primera página\r\nlast_page.title=Ir a la última página\r\nlast_page.label=Ir a la última página\r\nlast_page_label=Ir a la última página\r\npage_rotate_cw.title=Girar a la derecha\r\npage_rotate_cw.label=Girar a la derecha\r\npage_rotate_cw_label=Girar a la derecha\r\npage_rotate_ccw.title=Girar a la izquierda\r\npage_rotate_ccw.label=Girar a la izquierda\r\npage_rotate_ccw_label=Girar a la izquierda\r\n\r\ncursor_text_select_tool.title=Activar la herramienta de selección de texto\r\ncursor_text_select_tool_label=Herramienta de selección de texto\r\ncursor_hand_tool.title=Activar la herramienta de mano\r\ncursor_hand_tool_label=Herramienta de mano\r\n\r\nscroll_vertical.title=Usar desplazamiento vertical\r\nscroll_vertical_label=Desplazamiento vertical\r\nscroll_horizontal.title=Usar desplazamiento horizontal\r\nscroll_horizontal_label=Desplazamiento horizontal\r\nscroll_wrapped.title=Usar desplazamiento en bloque\r\nscroll_wrapped_label=Desplazamiento en bloque\r\n\r\nspread_none.title=No juntar páginas a modo de libro\r\nspread_none_label=Vista de una página\r\nspread_odd.title=Junta las páginas partiendo con una de número impar\r\nspread_odd_label=Vista de libro impar\r\nspread_even.title=Junta las páginas partiendo con una de número par\r\nspread_even_label=Vista de libro par\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Propiedades del documento…\r\ndocument_properties_label=Propiedades del documento…\r\ndocument_properties_file_name=Nombre de archivo:\r\ndocument_properties_file_size=Tamaño del archivo:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Título:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Asunto:\r\ndocument_properties_keywords=Palabras clave:\r\ndocument_properties_creation_date=Fecha de creación:\r\ndocument_properties_modification_date=Fecha de modificación:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Creador:\r\ndocument_properties_producer=Productor del PDF:\r\ndocument_properties_version=Versión de PDF:\r\ndocument_properties_page_count=Cantidad de páginas:\r\ndocument_properties_page_size=Tamaño de la página:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=vertical\r\ndocument_properties_page_size_orientation_landscape=horizontal\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Carta\r\ndocument_properties_page_size_name_legal=Oficio\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Vista rápida en Web:\r\ndocument_properties_linearized_yes=Sí\r\ndocument_properties_linearized_no=No\r\ndocument_properties_close=Cerrar\r\n\r\nprint_progress_message=Preparando documento para impresión…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cancelar\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Barra lateral\r\ntoggle_sidebar_notification.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos)\r\ntoggle_sidebar_notification2.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos/capas)\r\ntoggle_sidebar_label=Mostrar u ocultar la barra lateral\r\ndocument_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)\r\ndocument_outline_label=Esquema del documento\r\nattachments.title=Mostrar adjuntos\r\nattachments_label=Adjuntos\r\nlayers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)\r\nlayers_label=Capas\r\nthumbs.title=Mostrar miniaturas\r\nthumbs_label=Miniaturas\r\ncurrent_outline_item.title=Buscar elemento de esquema actual\r\ncurrent_outline_item_label=Elemento de esquema actual\r\nfindbar.title=Buscar en el documento\r\nfindbar_label=Buscar\r\n\r\nadditional_layers=Capas adicionales\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Página {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Página {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura de la página {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Encontrar\r\nfind_input.placeholder=Encontrar en el documento…\r\nfind_previous.title=Buscar la aparición anterior de la frase\r\nfind_previous_label=Previo\r\nfind_next.title=Buscar la siguiente aparición de la frase\r\nfind_next_label=Siguiente\r\nfind_highlight=Destacar todos\r\nfind_match_case_label=Coincidir mayús./minús.\r\nfind_entire_word_label=Palabras completas\r\nfind_reached_top=Se alcanzó el inicio del documento, continuando desde el final\r\nfind_reached_bottom=Se alcanzó el final del documento, continuando desde el inicio\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} de {{total}} coincidencia\r\nfind_match_count[two]={{current}} de {{total}} coincidencias\r\nfind_match_count[few]={{current}} de {{total}} coincidencias\r\nfind_match_count[many]={{current}} de {{total}} coincidencias\r\nfind_match_count[other]={{current}} de {{total}} coincidencias\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[one]=Más de {{limit}} coincidencia\r\nfind_match_count_limit[two]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[few]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[many]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[other]=Más de {{limit}} coincidencias\r\nfind_not_found=Frase no encontrada\r\n\r\n# Error panel labels\r\nerror_more_info=Más información\r\nerror_less_info=Menos información\r\nerror_close=Cerrar\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (compilación: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mensaje: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pila: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Archivo: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Línea: {{line}}\r\nrendering_error=Ocurrió un error al renderizar la página.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Ancho de página\r\npage_scale_fit=Ajuste de página\r\npage_scale_auto=Aumento automático\r\npage_scale_actual=Tamaño actual\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=Ocurrió un error al cargar el PDF.\r\ninvalid_file_error=Archivo PDF inválido o corrupto.\r\nmissing_file_error=Falta el archivo PDF.\r\nunexpected_response_error=Respuesta del servidor inesperada.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Anotación]\r\npassword_label=Ingrese la contraseña para abrir este archivo PDF.\r\npassword_invalid=Contraseña inválida. Por favor, vuelve a intentarlo.\r\npassword_ok=Aceptar\r\npassword_cancel=Cancelar\r\n\r\nprinting_not_supported=Advertencia: Imprimir no está soportado completamente por este navegador.\r\nprinting_not_ready=Advertencia: El PDF no está completamente cargado para ser impreso.\r\nweb_fonts_disabled=Las tipografías web están desactivadas: imposible usar las fuentes PDF embebidas.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/es-ES/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Página anterior\r\nprevious_label=Anterior\r\nnext.title=Página siguiente\r\nnext_label=Siguiente\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Página\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=de {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} de {{pagesCount}})\r\n\r\nzoom_out.title=Reducir\r\nzoom_out_label=Reducir\r\nzoom_in.title=Aumentar\r\nzoom_in_label=Aumentar\r\nzoom.title=Tamaño\r\npresentation_mode.title=Cambiar al modo presentación\r\npresentation_mode_label=Modo presentación\r\nopen_file.title=Abrir archivo\r\nopen_file_label=Abrir\r\nprint.title=Imprimir\r\nprint_label=Imprimir\r\ndownload.title=Descargar\r\ndownload_label=Descargar\r\nbookmark.title=Vista actual (copiar o abrir en una nueva ventana)\r\nbookmark_label=Vista actual\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Herramientas\r\ntools_label=Herramientas\r\nfirst_page.title=Ir a la primera página\r\nfirst_page.label=Ir a la primera página\r\nfirst_page_label=Ir a la primera página\r\nlast_page.title=Ir a la última página\r\nlast_page.label=Ir a la última página\r\nlast_page_label=Ir a la última página\r\npage_rotate_cw.title=Rotar en sentido horario\r\npage_rotate_cw.label=Rotar en sentido horario\r\npage_rotate_cw_label=Rotar en sentido horario\r\npage_rotate_ccw.title=Rotar en sentido antihorario\r\npage_rotate_ccw.label=Rotar en sentido antihorario\r\npage_rotate_ccw_label=Rotar en sentido antihorario\r\n\r\ncursor_text_select_tool.title=Activar herramienta de selección de texto\r\ncursor_text_select_tool_label=Herramienta de selección de texto\r\ncursor_hand_tool.title=Activar herramienta de mano\r\ncursor_hand_tool_label=Herramienta de mano\r\n\r\nscroll_vertical.title=Usar desplazamiento vertical\r\nscroll_vertical_label=Desplazamiento vertical\r\nscroll_horizontal.title=Usar desplazamiento horizontal\r\nscroll_horizontal_label=Desplazamiento horizontal\r\nscroll_wrapped.title=Usar desplazamiento en bloque\r\nscroll_wrapped_label=Desplazamiento en bloque\r\n\r\nspread_none.title=No juntar páginas en vista de libro\r\nspread_none_label=Vista de libro\r\nspread_odd.title=Juntar las páginas partiendo de una con número impar\r\nspread_odd_label=Vista de libro impar\r\nspread_even.title=Juntar las páginas partiendo de una con número par\r\nspread_even_label=Vista de libro par\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Propiedades del documento…\r\ndocument_properties_label=Propiedades del documento…\r\ndocument_properties_file_name=Nombre de archivo:\r\ndocument_properties_file_size=Tamaño de archivo:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Título:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Asunto:\r\ndocument_properties_keywords=Palabras clave:\r\ndocument_properties_creation_date=Fecha de creación:\r\ndocument_properties_modification_date=Fecha de modificación:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Creador:\r\ndocument_properties_producer=Productor PDF:\r\ndocument_properties_version=Versión PDF:\r\ndocument_properties_page_count=Número de páginas:\r\ndocument_properties_page_size=Tamaño de la página:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=vertical\r\ndocument_properties_page_size_orientation_landscape=horizontal\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Carta\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Vista rápida de la web:\r\ndocument_properties_linearized_yes=Sí\r\ndocument_properties_linearized_no=No\r\ndocument_properties_close=Cerrar\r\n\r\nprint_progress_message=Preparando documento para impresión…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cancelar\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Cambiar barra lateral\r\ntoggle_sidebar_notification.title=Alternar panel lateral (el documento contiene un esquema o adjuntos)\r\ntoggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)\r\ntoggle_sidebar_label=Cambiar barra lateral\r\ndocument_outline.title=Mostrar resumen del documento (doble clic para expandir/contraer todos los elementos)\r\ndocument_outline_label=Resumen de documento\r\nattachments.title=Mostrar adjuntos\r\nattachments_label=Adjuntos\r\nlayers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)\r\nlayers_label=Capas\r\nthumbs.title=Mostrar miniaturas\r\nthumbs_label=Miniaturas\r\nfindbar.title=Buscar en el documento\r\nfindbar_label=Buscar\r\n\r\nadditional_layers=Capas adicionales\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Página {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Página {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura de la página {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Buscar\r\nfind_input.placeholder=Buscar en el documento…\r\nfind_previous.title=Encontrar la anterior aparición de la frase\r\nfind_previous_label=Anterior\r\nfind_next.title=Encontrar la siguiente aparición de esta frase\r\nfind_next_label=Siguiente\r\nfind_highlight=Resaltar todos\r\nfind_match_case_label=Coincidencia de mayús./minús.\r\nfind_entire_word_label=Palabras completas\r\nfind_reached_top=Se alcanzó el inicio del documento, se continúa desde el final\r\nfind_reached_bottom=Se alcanzó el final del documento, se continúa desde el inicio\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} de {{total}} coincidencia\r\nfind_match_count[two]={{current}} de {{total}} coincidencias\r\nfind_match_count[few]={{current}} de {{total}} coincidencias\r\nfind_match_count[many]={{current}} de {{total}} coincidencias\r\nfind_match_count[other]={{current}} de {{total}} coincidencias\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[one]=Más de {{limit}} coincidencia\r\nfind_match_count_limit[two]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[few]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[many]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[other]=Más de {{limit}} coincidencias\r\nfind_not_found=Frase no encontrada\r\n\r\n# Error panel labels\r\nerror_more_info=Más información\r\nerror_less_info=Menos información\r\nerror_close=Cerrar\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mensaje: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pila: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Archivo: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Línea: {{line}}\r\nrendering_error=Ocurrió un error al renderizar la página.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Anchura de la página\r\npage_scale_fit=Ajuste de la página\r\npage_scale_auto=Tamaño automático\r\npage_scale_actual=Tamaño real\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=Ocurrió un error al cargar el PDF.\r\ninvalid_file_error=Fichero PDF no válido o corrupto.\r\nmissing_file_error=No hay fichero PDF.\r\nunexpected_response_error=Respuesta inesperada del servidor.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anotación {{type}}]\r\npassword_label=Introduzca la contraseña para abrir este archivo PDF.\r\npassword_invalid=Contraseña no válida. Vuelva a intentarlo.\r\npassword_ok=Aceptar\r\npassword_cancel=Cancelar\r\n\r\nprinting_not_supported=Advertencia: Imprimir no está totalmente soportado por este navegador.\r\nprinting_not_ready=Advertencia: Este PDF no se ha cargado completamente para poder imprimirse.\r\nweb_fonts_disabled=Las tipografías web están desactivadas: es imposible usar las tipografías PDF embebidas.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/es-MX/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Página anterior\r\nprevious_label=Anterior\r\nnext.title=Página siguiente\r\nnext_label=Siguiente\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Página\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=de {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} de {{pagesCount}})\r\n\r\nzoom_out.title=Reducir\r\nzoom_out_label=Reducir\r\nzoom_in.title=Aumentar\r\nzoom_in_label=Aumentar\r\nzoom.title=Zoom\r\npresentation_mode.title=Cambiar al modo presentación\r\npresentation_mode_label=Modo presentación\r\nopen_file.title=Abrir archivo\r\nopen_file_label=Abrir\r\nprint.title=Imprimir\r\nprint_label=Imprimir\r\ndownload.title=Descargar\r\ndownload_label=Descargar\r\nbookmark.title=Vista actual (copiar o abrir en una nueva ventana)\r\nbookmark_label=Vista actual\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Herramientas\r\ntools_label=Herramientas\r\nfirst_page.title=Ir a la primera página\r\nfirst_page.label=Ir a la primera página\r\nfirst_page_label=Ir a la primera página\r\nlast_page.title=Ir a la última página\r\nlast_page.label=Ir a la última página\r\nlast_page_label=Ir a la última página\r\npage_rotate_cw.title=Girar a la derecha\r\npage_rotate_cw.label=Girar a la derecha\r\npage_rotate_cw_label=Girar a la derecha\r\npage_rotate_ccw.title=Girar a la izquierda\r\npage_rotate_ccw.label=Girar a la izquierda\r\npage_rotate_ccw_label=Girar a la izquierda\r\n\r\ncursor_text_select_tool.title=Activar la herramienta de selección de texto\r\ncursor_text_select_tool_label=Herramienta de selección de texto\r\ncursor_hand_tool.title=Activar la herramienta de mano\r\ncursor_hand_tool_label=Herramienta de mano\r\n\r\nscroll_vertical.title=Usar desplazamiento vertical\r\nscroll_vertical_label=Desplazamiento vertical\r\nscroll_horizontal.title=Usar desplazamiento horizontal\r\nscroll_horizontal_label=Desplazamiento horizontal\r\nscroll_wrapped.title=Usar desplazamiento encapsulado\r\nscroll_wrapped_label=Desplazamiento encapsulado\r\n\r\nspread_none.title=No unir páginas separadas\r\nspread_none_label=Vista de una página\r\nspread_odd.title=Unir las páginas partiendo con una de número impar\r\nspread_odd_label=Vista de libro impar\r\nspread_even.title=Juntar las páginas partiendo con una de número par\r\nspread_even_label=Vista de libro par\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Propiedades del documento…\r\ndocument_properties_label=Propiedades del documento…\r\ndocument_properties_file_name=Nombre del archivo:\r\ndocument_properties_file_size=Tamaño del archivo:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Título:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Asunto:\r\ndocument_properties_keywords=Palabras claves:\r\ndocument_properties_creation_date=Fecha de creación:\r\ndocument_properties_modification_date=Fecha de modificación:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Creador:\r\ndocument_properties_producer=Productor PDF:\r\ndocument_properties_version=Versión PDF:\r\ndocument_properties_page_count=Número de páginas:\r\ndocument_properties_page_size=Tamaño de la página:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=vertical\r\ndocument_properties_page_size_orientation_landscape=horizontal\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Carta\r\ndocument_properties_page_size_name_legal=Oficio\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Vista rápida de la web:\r\ndocument_properties_linearized_yes=Sí\r\ndocument_properties_linearized_no=No\r\ndocument_properties_close=Cerrar\r\n\r\nprint_progress_message=Preparando documento para impresión…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cancelar\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Cambiar barra lateral\r\ntoggle_sidebar_notification.title=Cambiar barra lateral (índice de contenidos del documento/adjuntos)\r\ntoggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)\r\ntoggle_sidebar_label=Cambiar barra lateral\r\ndocument_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)\r\ndocument_outline_label=Esquema del documento\r\nattachments.title=Mostrar adjuntos\r\nattachments_label=Adjuntos\r\nlayers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)\r\nlayers_label=Capas\r\nthumbs.title=Mostrar miniaturas\r\nthumbs_label=Miniaturas\r\nfindbar.title=Buscar en el documento\r\nfindbar_label=Buscar\r\n\r\nadditional_layers=Capas adicionales\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Página {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Página {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura de la página {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Buscar\r\nfind_input.placeholder=Buscar en el documento…\r\nfind_previous.title=Ir a la anterior frase encontrada\r\nfind_previous_label=Anterior\r\nfind_next.title=Ir a la siguiente frase encontrada\r\nfind_next_label=Siguiente\r\nfind_highlight=Resaltar todo\r\nfind_match_case_label=Coincidir con mayúsculas y minúsculas\r\nfind_entire_word_label=Palabras completas\r\nfind_reached_top=Se alcanzó el inicio del documento, se buscará al final\r\nfind_reached_bottom=Se alcanzó el final del documento, se buscará al inicio\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} de {{total}} coincidencia\r\nfind_match_count[two]={{current}} de {{total}} coincidencias\r\nfind_match_count[few]={{current}} de {{total}} coincidencias\r\nfind_match_count[many]={{current}} de {{total}} coincidencias\r\nfind_match_count[other]={{current}} de {{total}} coincidencias\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[one]=Más de {{limit}} coinciden\r\nfind_match_count_limit[two]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[few]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[many]=Más de {{limit}} coincidencias\r\nfind_match_count_limit[other]=Más de {{limit}} coincidencias\r\nfind_not_found=No se encontró la frase\r\n\r\n# Error panel labels\r\nerror_more_info=Más información\r\nerror_less_info=Menos información\r\nerror_close=Cerrar\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mensaje: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pila: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Archivo: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Línea: {{line}}\r\nrendering_error=Un error ocurrió al renderizar la página.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Ancho de página\r\npage_scale_fit=Ajustar página\r\npage_scale_auto=Zoom automático\r\npage_scale_actual=Tamaño real\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=Un error ocurrió al cargar el PDF.\r\ninvalid_file_error=Archivo PDF invalido o dañado.\r\nmissing_file_error=Archivo PDF no encontrado.\r\nunexpected_response_error=Respuesta inesperada del servidor.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} anotación]\r\npassword_label=Ingresa la contraseña para abrir este archivo PDF.\r\npassword_invalid=Contraseña inválida. Por favor intenta de nuevo.\r\npassword_ok=Aceptar\r\npassword_cancel=Cancelar\r\n\r\nprinting_not_supported=Advertencia: La impresión no esta completamente soportada por este navegador.\r\nprinting_not_ready=Advertencia: El PDF no cargo completamente para impresión.\r\nweb_fonts_disabled=Las fuentes web están desactivadas: es imposible usar las fuentes PDF embebidas.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/et/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Eelmine lehekülg\r\nprevious_label=Eelmine\r\nnext.title=Järgmine lehekülg\r\nnext_label=Järgmine\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Leht\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=/ {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}}/{{pagesCount}})\r\n\r\nzoom_out.title=Vähenda\r\nzoom_out_label=Vähenda\r\nzoom_in.title=Suurenda\r\nzoom_in_label=Suurenda\r\nzoom.title=Suurendamine\r\npresentation_mode.title=Lülitu esitlusrežiimi\r\npresentation_mode_label=Esitlusrežiim\r\nopen_file.title=Ava fail\r\nopen_file_label=Ava\r\nprint.title=Prindi\r\nprint_label=Prindi\r\ndownload.title=Laadi alla\r\ndownload_label=Laadi alla\r\nbookmark.title=Praegune vaade (kopeeri või ava uues aknas)\r\nbookmark_label=Praegune vaade\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Tööriistad\r\ntools_label=Tööriistad\r\nfirst_page.title=Mine esimesele leheküljele\r\nfirst_page.label=Mine esimesele leheküljele\r\nfirst_page_label=Mine esimesele leheküljele\r\nlast_page.title=Mine viimasele leheküljele\r\nlast_page.label=Mine viimasele leheküljele\r\nlast_page_label=Mine viimasele leheküljele\r\npage_rotate_cw.title=Pööra päripäeva\r\npage_rotate_cw.label=Pööra päripäeva\r\npage_rotate_cw_label=Pööra päripäeva\r\npage_rotate_ccw.title=Pööra vastupäeva\r\npage_rotate_ccw.label=Pööra vastupäeva\r\npage_rotate_ccw_label=Pööra vastupäeva\r\n\r\ncursor_text_select_tool.title=Luba teksti valimise tööriist\r\ncursor_text_select_tool_label=Teksti valimise tööriist\r\ncursor_hand_tool.title=Luba sirvimistööriist\r\ncursor_hand_tool_label=Sirvimistööriist\r\n\r\nscroll_vertical.title=Kasuta vertikaalset kerimist\r\nscroll_vertical_label=Vertikaalne kerimine\r\nscroll_horizontal.title=Kasuta horisontaalset kerimist\r\nscroll_horizontal_label=Horisontaalne kerimine\r\nscroll_wrapped.title=Kasuta rohkem mahutavat kerimist\r\nscroll_wrapped_label=Rohkem mahutav kerimine\r\n\r\nspread_none.title=Ära kõrvuta lehekülgi\r\nspread_none_label=Lehtede kõrvutamine puudub\r\nspread_odd.title=Kõrvuta leheküljed, alustades paaritute numbritega lehekülgedega\r\nspread_odd_label=Kõrvutamine paaritute numbritega alustades\r\nspread_even.title=Kõrvuta leheküljed, alustades paarisnumbritega lehekülgedega\r\nspread_even_label=Kõrvutamine paarisnumbritega alustades\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumendi omadused…\r\ndocument_properties_label=Dokumendi omadused…\r\ndocument_properties_file_name=Faili nimi:\r\ndocument_properties_file_size=Faili suurus:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KiB ({{size_b}} baiti)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MiB ({{size_b}} baiti)\r\ndocument_properties_title=Pealkiri:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Teema:\r\ndocument_properties_keywords=Märksõnad:\r\ndocument_properties_creation_date=Loodud:\r\ndocument_properties_modification_date=Muudetud:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}} {{time}}\r\ndocument_properties_creator=Looja:\r\ndocument_properties_producer=Generaator:\r\ndocument_properties_version=Generaatori versioon:\r\ndocument_properties_page_count=Lehekülgi:\r\ndocument_properties_page_size=Lehe suurus:\r\ndocument_properties_page_size_unit_inches=tolli\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=vertikaalpaigutus\r\ndocument_properties_page_size_orientation_landscape=rõhtpaigutus\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=\"Fast Web View\" tugi:\r\ndocument_properties_linearized_yes=Jah\r\ndocument_properties_linearized_no=Ei\r\ndocument_properties_close=Sulge\r\n\r\nprint_progress_message=Dokumendi ettevalmistamine printimiseks…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Loobu\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Näita külgriba\r\ntoggle_sidebar_notification.title=Näita külgriba (dokument sisaldab sisukorda/manuseid)\r\ntoggle_sidebar_label=Näita külgriba\r\ndocument_outline.title=Näita sisukorda (kõigi punktide laiendamiseks/ahendamiseks topeltklõpsa)\r\ndocument_outline_label=Näita sisukorda\r\nattachments.title=Näita manuseid\r\nattachments_label=Manused\r\nthumbs.title=Näita pisipilte\r\nthumbs_label=Pisipildid\r\nfindbar.title=Otsi dokumendist\r\nfindbar_label=Otsi\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title={{page}}. lehekülg\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}}. lehekülje pisipilt\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Otsi\r\nfind_input.placeholder=Otsi dokumendist…\r\nfind_previous.title=Otsi fraasi eelmine esinemiskoht\r\nfind_previous_label=Eelmine\r\nfind_next.title=Otsi fraasi järgmine esinemiskoht\r\nfind_next_label=Järgmine\r\nfind_highlight=Too kõik esile\r\nfind_match_case_label=Tõstutundlik\r\nfind_entire_word_label=Täissõnad\r\nfind_reached_top=Jõuti dokumendi algusesse, jätkati lõpust\r\nfind_reached_bottom=Jõuti dokumendi lõppu, jätkati algusest\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]=vaste {{current}}/{{total}}\r\nfind_match_count[two]=vaste {{current}}/{{total}}\r\nfind_match_count[few]=vaste {{current}}/{{total}}\r\nfind_match_count[many]=vaste {{current}}/{{total}}\r\nfind_match_count[other]=vaste {{current}}/{{total}}\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Rohkem kui {{limit}} vastet\r\nfind_match_count_limit[one]=Rohkem kui {{limit}} vaste\r\nfind_match_count_limit[two]=Rohkem kui {{limit}} vastet\r\nfind_match_count_limit[few]=Rohkem kui {{limit}} vastet\r\nfind_match_count_limit[many]=Rohkem kui {{limit}} vastet\r\nfind_match_count_limit[other]=Rohkem kui {{limit}} vastet\r\nfind_not_found=Fraasi ei leitud\r\n\r\n# Error panel labels\r\nerror_more_info=Rohkem teavet\r\nerror_less_info=Vähem teavet\r\nerror_close=Sulge\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Teade: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fail: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Rida: {{line}}\r\nrendering_error=Lehe renderdamisel esines viga.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Mahuta laiusele\r\npage_scale_fit=Mahuta leheküljele\r\npage_scale_auto=Automaatne suurendamine\r\npage_scale_actual=Tegelik suurus\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Viga\r\nloading_error=PDFi laadimisel esines viga.\r\ninvalid_file_error=Vigane või rikutud PDF-fail.\r\nmissing_file_error=PDF-fail puudub.\r\nunexpected_response_error=Ootamatu vastus serverilt.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}} {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=PDF-faili avamiseks sisesta parool.\r\npassword_invalid=Vigane parool. Palun proovi uuesti.\r\npassword_ok=Sobib\r\npassword_cancel=Loobu\r\n\r\nprinting_not_supported=Hoiatus: printimine pole selle brauseri poolt täielikult toetatud.\r\nprinting_not_ready=Hoiatus: PDF pole printimiseks täielikult laaditud.\r\nweb_fonts_disabled=Veebifondid on keelatud: PDFiga kaasatud fonte pole võimalik kasutada.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/eu/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Aurreko orria\r\nprevious_label=Aurrekoa\r\nnext.title=Hurrengo orria\r\nnext_label=Hurrengoa\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Orria\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=/ {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages={{pagesCount}}/{{pageNumber}}\r\n\r\nzoom_out.title=Urrundu zooma\r\nzoom_out_label=Urrundu zooma\r\nzoom_in.title=Gerturatu zooma\r\nzoom_in_label=Gerturatu zooma\r\nzoom.title=Zooma\r\npresentation_mode.title=Aldatu aurkezpen modura\r\npresentation_mode_label=Arkezpen modua\r\nopen_file.title=Ireki fitxategia\r\nopen_file_label=Ireki\r\nprint.title=Inprimatu\r\nprint_label=Inprimatu\r\ndownload.title=Deskargatu\r\ndownload_label=Deskargatu\r\nbookmark.title=Uneko ikuspegia (kopiatu edo ireki leiho berrian)\r\nbookmark_label=Uneko ikuspegia\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Tresnak\r\ntools_label=Tresnak\r\nfirst_page.title=Joan lehen orrira\r\nfirst_page.label=Joan lehen orrira\r\nfirst_page_label=Joan lehen orrira\r\nlast_page.title=Joan azken orrira\r\nlast_page.label=Joan azken orrira\r\nlast_page_label=Joan azken orrira\r\npage_rotate_cw.title=Biratu erlojuaren norantzan\r\npage_rotate_cw.label=Biratu erlojuaren norantzan\r\npage_rotate_cw_label=Biratu erlojuaren norantzan\r\npage_rotate_ccw.title=Biratu erlojuaren aurkako norantzan\r\npage_rotate_ccw.label=Biratu erlojuaren aurkako norantzan\r\npage_rotate_ccw_label=Biratu erlojuaren aurkako norantzan\r\n\r\ncursor_text_select_tool.title=Gaitu testuaren hautapen tresna\r\ncursor_text_select_tool_label=Testuaren hautapen tresna\r\ncursor_hand_tool.title=Gaitu eskuaren tresna\r\ncursor_hand_tool_label=Eskuaren tresna\r\n\r\nscroll_vertical.title=Erabili korritze bertikala\r\nscroll_vertical_label=Korritze bertikala\r\nscroll_horizontal.title=Erabili korritze horizontala\r\nscroll_horizontal_label=Korritze horizontala\r\nscroll_wrapped.title=Erabili korritze egokitua\r\nscroll_wrapped_label=Korritze egokitua\r\n\r\nspread_none.title=Ez elkartu barreiatutako orriak\r\nspread_none_label=Barreiatzerik ez\r\nspread_odd.title=Elkartu barreiatutako orriak bakoiti zenbakidunekin hasita\r\nspread_odd_label=Barreiatze bakoitia\r\nspread_even.title=Elkartu barreiatutako orriak bikoiti zenbakidunekin hasita\r\nspread_even_label=Barreiatze bikoitia\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumentuaren propietateak…\r\ndocument_properties_label=Dokumentuaren propietateak…\r\ndocument_properties_file_name=Fitxategi-izena:\r\ndocument_properties_file_size=Fitxategiaren tamaina:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} byte)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} byte)\r\ndocument_properties_title=Izenburua:\r\ndocument_properties_author=Egilea:\r\ndocument_properties_subject=Gaia:\r\ndocument_properties_keywords=Gako-hitzak:\r\ndocument_properties_creation_date=Sortze-data:\r\ndocument_properties_modification_date=Aldatze-data:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Sortzailea:\r\ndocument_properties_producer=PDFaren ekoizlea:\r\ndocument_properties_version=PDF bertsioa:\r\ndocument_properties_page_count=Orrialde kopurua:\r\ndocument_properties_page_size=Orriaren tamaina:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=bertikala\r\ndocument_properties_page_size_orientation_landscape=horizontala\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Gutuna\r\ndocument_properties_page_size_name_legal=Legala\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Webeko ikuspegi bizkorra:\r\ndocument_properties_linearized_yes=Bai\r\ndocument_properties_linearized_no=Ez\r\ndocument_properties_close=Itxi\r\n\r\nprint_progress_message=Dokumentua inprimatzeko prestatzen…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent=%{{progress}}\r\nprint_progress_close=Utzi\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Txandakatu alboko barra\r\ntoggle_sidebar_notification.title=Txandakatu alboko barra (dokumentuak eskema/eranskinak ditu)\r\ntoggle_sidebar_label=Txandakatu alboko barra\r\ndocument_outline.title=Erakutsi dokumentuaren eskema (klik bikoitza elementu guztiak zabaltzeko/tolesteko)\r\ndocument_outline_label=Dokumentuaren eskema\r\nattachments.title=Erakutsi eranskinak\r\nattachments_label=Eranskinak\r\nlayers_label=Geruzak\r\nthumbs.title=Erakutsi koadro txikiak\r\nthumbs_label=Koadro txikiak\r\nfindbar.title=Bilatu dokumentuan\r\nfindbar_label=Bilatu\r\n\r\nadditional_layers=Geruza gehigarriak\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas={{page}}. orria\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title={{page}}. orria\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}}. orriaren koadro txikia\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Bilatu\r\nfind_input.placeholder=Bilatu dokumentuan…\r\nfind_previous.title=Bilatu esaldiaren aurreko parekatzea\r\nfind_previous_label=Aurrekoa\r\nfind_next.title=Bilatu esaldiaren hurrengo parekatzea\r\nfind_next_label=Hurrengoa\r\nfind_highlight=Nabarmendu guztia\r\nfind_match_case_label=Bat etorri maiuskulekin/minuskulekin\r\nfind_entire_word_label=Hitz osoak\r\nfind_reached_top=Dokumentuaren hasierara heldu da, bukaeratik jarraitzen\r\nfind_reached_bottom=Dokumentuaren bukaerara heldu da, hasieratik jarraitzen\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{total}}/{{current}}. bat etortzea\r\nfind_match_count[two]={{total}}/{{current}}. bat etortzea\r\nfind_match_count[few]={{total}}/{{current}}. bat etortzea\r\nfind_match_count[many]={{total}}/{{current}}. bat etortzea\r\nfind_match_count[other]={{total}}/{{current}}. bat etortzea\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]={{limit}} bat-etortze baino gehiago\r\nfind_match_count_limit[one]=Bat-etortze {{limit}} baino gehiago\r\nfind_match_count_limit[two]={{limit}} bat-etortze baino gehiago\r\nfind_match_count_limit[few]={{limit}} bat-etortze baino gehiago\r\nfind_match_count_limit[many]={{limit}} bat-etortze baino gehiago\r\nfind_match_count_limit[other]={{limit}} bat-etortze baino gehiago\r\nfind_not_found=Esaldia ez da aurkitu\r\n\r\n# Error panel labels\r\nerror_more_info=Informazio gehiago\r\nerror_less_info=Informazio gutxiago\r\nerror_close=Itxi\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (eraikuntza: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mezua: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pila: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fitxategia: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Lerroa: {{line}}\r\nrendering_error=Errorea gertatu da orria errendatzean.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Orriaren zabalera\r\npage_scale_fit=Doitu orrira\r\npage_scale_auto=Zoom automatikoa\r\npage_scale_actual=Benetako tamaina\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent=%{{scale}}\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Errorea\r\nloading_error=Errorea gertatu da PDFa kargatzean.\r\ninvalid_file_error=PDF fitxategi baliogabe edo hondatua.\r\nmissing_file_error=PDF fitxategia falta da.\r\nunexpected_response_error=Espero gabeko zerbitzariaren erantzuna.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} ohartarazpena]\r\npassword_label=Idatzi PDF fitxategi hau irekitzeko pasahitza.\r\npassword_invalid=Pasahitz baliogabea. Saiatu berriro mesedez.\r\npassword_ok=Ados\r\npassword_cancel=Utzi\r\n\r\nprinting_not_supported=Abisua: inprimatzeko euskarria ez da erabatekoa nabigatzaile honetan.\r\nprinting_not_ready=Abisua: PDFa ez dago erabat kargatuta inprimatzeko.\r\nweb_fonts_disabled=Webeko letra-tipoak desgaituta daude: ezin dira kapsulatutako PDF letra-tipoak erabili.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/fa/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=صفحهٔ قبلی\r\nprevious_label=قبلی\r\nnext.title=صفحهٔ بعدی\r\nnext_label=بعدی\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=صفحه\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=از {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}}از {{pagesCount}})\r\n\r\nzoom_out.title=کوچک‌نمایی\r\nzoom_out_label=کوچک‌نمایی\r\nzoom_in.title=بزرگ‌نمایی\r\nzoom_in_label=بزرگ‌نمایی\r\nzoom.title=زوم\r\npresentation_mode.title=تغییر به حالت ارائه\r\npresentation_mode_label=حالت ارائه\r\nopen_file.title=باز کردن پرونده\r\nopen_file_label=باز کردن\r\nprint.title=چاپ\r\nprint_label=چاپ\r\ndownload.title=بارگیری\r\ndownload_label=بارگیری\r\nbookmark.title=نمای فعلی (رونوشت و یا نشان دادن در پنجره جدید)\r\nbookmark_label=نمای فعلی\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=ابزارها\r\ntools_label=ابزارها\r\nfirst_page.title=برو به اولین صفحه\r\nfirst_page.label=برو یه اولین صفحه\r\nfirst_page_label=برو به اولین صفحه\r\nlast_page.title=برو به آخرین صفحه\r\nlast_page.label=برو به آخرین صفحه\r\nlast_page_label=برو به آخرین صفحه\r\npage_rotate_cw.title=چرخش ساعتگرد\r\npage_rotate_cw.label=چرخش ساعتگرد\r\npage_rotate_cw_label=چرخش ساعتگرد\r\npage_rotate_ccw.title=چرخش پاد ساعتگرد\r\npage_rotate_ccw.label=چرخش پاد ساعتگرد\r\npage_rotate_ccw_label=چرخش پاد ساعتگرد\r\n\r\ncursor_text_select_tool.title=فعال کردن ابزارِ انتخابِ متن\r\ncursor_text_select_tool_label=ابزارِ انتخابِ متن\r\ncursor_hand_tool.title=فعال کردن ابزارِ دست\r\ncursor_hand_tool_label=ابزار دست\r\n\r\nscroll_vertical.title=استفاده از پیمایش عمودی\r\nscroll_vertical_label=پیمایش عمودی\r\nscroll_horizontal.title=استفاده از پیمایش افقی\r\nscroll_horizontal_label=پیمایش افقی\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=خصوصیات سند...\r\ndocument_properties_label=خصوصیات سند...\r\ndocument_properties_file_name=نام فایل:\r\ndocument_properties_file_size=حجم پرونده:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} کیلوبایت ({{size_b}} بایت)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} مگابایت ({{size_b}} بایت)\r\ndocument_properties_title=عنوان:\r\ndocument_properties_author=نویسنده:\r\ndocument_properties_subject=موضوع:\r\ndocument_properties_keywords=کلیدواژه‌ها:\r\ndocument_properties_creation_date=تاریخ ایجاد:\r\ndocument_properties_modification_date=تاریخ ویرایش:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}، {{time}}\r\ndocument_properties_creator=ایجاد کننده:\r\ndocument_properties_producer=ایجاد کننده PDF:\r\ndocument_properties_version=نسخه PDF:\r\ndocument_properties_page_count=تعداد صفحات:\r\ndocument_properties_page_size=اندازه صفحه:\r\ndocument_properties_page_size_unit_inches=اینچ\r\ndocument_properties_page_size_unit_millimeters=میلی‌متر\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=نامه\r\ndocument_properties_page_size_name_legal=حقوقی\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized_yes=بله\r\ndocument_properties_linearized_no=خیر\r\ndocument_properties_close=بستن\r\n\r\nprint_progress_message=آماده سازی مدارک برای چاپ کردن…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=لغو\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=باز و بسته کردن نوار کناری\r\ntoggle_sidebar_notification.title=تغییر وضعیت نوار کناری (سند حاوی طرح/پیوست است)\r\ntoggle_sidebar_label=تغییرحالت نوارکناری\r\ndocument_outline.title=نمایش رئوس مطالب مدارک(برای بازشدن/جمع شدن همه موارد دوبار کلیک کنید)\r\ndocument_outline_label=طرح نوشتار\r\nattachments.title=نمایش پیوست‌ها\r\nattachments_label=پیوست‌ها\r\nthumbs.title=نمایش تصاویر بندانگشتی\r\nthumbs_label=تصاویر بندانگشتی\r\nfindbar.title=جستجو در سند\r\nfindbar_label=پیدا کردن\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=صفحه {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=تصویر بند‌ انگشتی صفحه {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=پیدا کردن\r\nfind_input.placeholder=پیدا کردن در سند…\r\nfind_previous.title=پیدا کردن رخداد قبلی عبارت\r\nfind_previous_label=قبلی\r\nfind_next.title=پیدا کردن رخداد بعدی عبارت\r\nfind_next_label=بعدی\r\nfind_highlight=برجسته و هایلایت کردن همه موارد\r\nfind_match_case_label=تطبیق کوچکی و بزرگی حروف\r\nfind_entire_word_label=تمام کلمه‌ها\r\nfind_reached_top=به بالای صفحه رسیدیم، از پایین ادامه می‌دهیم\r\nfind_reached_bottom=به آخر صفحه رسیدیم، از بالا ادامه می‌دهیم\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count[one]={{current}} از {{total}} مطابقت دارد\r\nfind_match_count[two]={{current}} از {{total}} مطابقت دارد\r\nfind_match_count[few]={{current}} از {{total}} مطابقت دارد\r\nfind_match_count[many]={{current}} از {{total}} مطابقت دارد\r\nfind_match_count[other]={{current}} از {{total}} مطابقت دارد\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_not_found=عبارت پیدا نشد\r\n\r\n# Error panel labels\r\nerror_more_info=اطلاعات بیشتر\r\nerror_less_info=اطلاعات کمتر\r\nerror_close=بستن\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=‏PDF.js ورژن{{version}} ‏(ساخت: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=پیام: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=توده: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=پرونده: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=سطر: {{line}}\r\nrendering_error=هنگام بارگیری صفحه خطایی رخ داد.\r\n\r\n# Predefined zoom values\r\npage_scale_width=عرض صفحه\r\npage_scale_fit=اندازه کردن صفحه\r\npage_scale_auto=بزرگنمایی خودکار\r\npage_scale_actual=اندازه واقعی‌\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=خطا\r\nloading_error=هنگام بارگیری پرونده PDF خطایی رخ داد.\r\ninvalid_file_error=پرونده PDF نامعتبر یامعیوب می‌باشد.\r\nmissing_file_error=پرونده PDF یافت نشد.\r\nunexpected_response_error=پاسخ پیش بینی نشده سرور\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=جهت باز کردن پرونده PDF گذرواژه را وارد نمائید.\r\npassword_invalid=گذرواژه نامعتبر. لطفا مجددا تلاش کنید.\r\npassword_ok=تأیید\r\npassword_cancel=لغو\r\n\r\nprinting_not_supported=هشدار: قابلیت چاپ به‌طور کامل در این مرورگر پشتیبانی نمی‌شود.\r\nprinting_not_ready=اخطار: پرونده PDF بطور کامل بارگیری نشده و امکان چاپ وجود ندارد.\r\nweb_fonts_disabled=فونت های تحت وب غیر فعال شده اند: امکان استفاده از نمایش دهنده داخلی PDF وجود ندارد.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ff/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Hello Ɓennungo\r\nprevious_label=Ɓennuɗo\r\nnext.title=Hello faango\r\nnext_label=Yeeso\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Hello\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=e nder {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} of {{pagesCount}})\r\n\r\nzoom_out.title=Lonngo Woɗɗa\r\nzoom_out_label=Lonngo Woɗɗa\r\nzoom_in.title=Lonngo Ara\r\nzoom_in_label=Lonngo Ara\r\nzoom.title=Lonngo\r\npresentation_mode.title=Faytu to  Presentation Mode\r\npresentation_mode_label=Presentation Mode\r\nopen_file.title=Uddit Fiilde\r\nopen_file_label=Uddit\r\nprint.title=Winndito\r\nprint_label=Winndito\r\ndownload.title=Aawto\r\ndownload_label=Aawto\r\nbookmark.title=Jiytol gonangol (natto walla uddit e henorde)\r\nbookmark_label=Jiytol Gonangol\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Kuutorɗe\r\ntools_label=Kuutorɗe\r\nfirst_page.title=Yah to hello adanngo\r\nfirst_page.label=Yah to hello adanngo\r\nfirst_page_label=Yah to hello adanngo\r\nlast_page.title=Yah to hello wattindiingo\r\nlast_page.label=Yah to hello wattindiingo\r\nlast_page_label=Yah to hello wattindiingo\r\npage_rotate_cw.title=Yiiltu Faya Ñaamo\r\npage_rotate_cw.label=Yiiltu Faya Ñaamo\r\npage_rotate_cw_label=Yiiltu Faya Ñaamo\r\npage_rotate_ccw.title=Yiiltu Faya Nano\r\npage_rotate_ccw.label=Yiiltu Faya Nano\r\npage_rotate_ccw_label=Yiiltu Faya Nano\r\n\r\ncursor_text_select_tool.title=Gollin kaɓirgel cuɓirgel binndi\r\ncursor_text_select_tool_label=Kaɓirgel cuɓirgel binndi\r\ncursor_hand_tool.title=Hurmin kuutorgal junngo\r\ncursor_hand_tool_label=Kaɓirgel junngo\r\n\r\nscroll_vertical.title=Huutoro gorwitol daringol\r\nscroll_vertical_label=Gorwitol daringol\r\nscroll_horizontal.title=Huutoro gorwitol lelingol\r\nscroll_horizontal_label=Gorwitol daringol\r\nscroll_wrapped.title=Huutoro gorwitol coomingol\r\nscroll_wrapped_label=Gorwitol coomingol\r\n\r\nspread_none.title=Hoto tawtu kelle kelle\r\nspread_none_label=Alaa Spreads\r\nspread_odd.title=Tawtu kelle puɗɗortooɗe kelle teelɗe\r\nspread_odd_label=Kelle teelɗe\r\nspread_even.title=Tawtu ɗereeji kelle puɗɗoriiɗi kelle teeltuɗe\r\nspread_even_label=Kelle teeltuɗe\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Keeroraaɗi Winndannde…\r\ndocument_properties_label=Keeroraaɗi Winndannde…\r\ndocument_properties_file_name=Innde fiilde:\r\ndocument_properties_file_size=Ɓetol fiilde:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bite)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bite)\r\ndocument_properties_title=Tiitoonde:\r\ndocument_properties_author=Binnduɗo:\r\ndocument_properties_subject=Toɓɓere:\r\ndocument_properties_keywords=Kelmekele jiytirɗe:\r\ndocument_properties_creation_date=Ñalnde Sosaa:\r\ndocument_properties_modification_date=Ñalnde Waylaa:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Cosɗo:\r\ndocument_properties_producer=Paggiiɗo PDF:\r\ndocument_properties_version=Yamre PDF:\r\ndocument_properties_page_count=Limoore Kelle:\r\ndocument_properties_page_size=Ɓeto Hello:\r\ndocument_properties_page_size_unit_inches=nder\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=dariingo\r\ndocument_properties_page_size_orientation_landscape=wertiingo\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Ɓataake\r\ndocument_properties_page_size_name_legal=Laawol\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Ɗisngo geese yaawngo:\r\ndocument_properties_linearized_yes=Eey\r\ndocument_properties_linearized_no=Alaa\r\ndocument_properties_close=Uddu\r\n\r\nprint_progress_message=Nana heboo winnditaade fiilannde…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Haaytu\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Toggilo Palal Sawndo\r\ntoggle_sidebar_notification.title=Palal sawndo (dokimaa oo ina waɗi taarngo/cinnde)\r\ntoggle_sidebar_label=Toggilo Palal Sawndo\r\ndocument_outline.title=Hollu Ƴiyal Fiilannde (dobdobo ngam wertude/taggude teme fof)\r\ndocument_outline_label=Toɓɓe Fiilannde\r\nattachments.title=Hollu Ɗisanɗe\r\nattachments_label=Ɗisanɗe\r\nthumbs.title=Hollu Dooɓe\r\nthumbs_label=Dooɓe\r\nfindbar.title=Yiylo e fiilannde\r\nfindbar_label=Yiytu\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Hello {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Dooɓre Hello {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Yiytu\r\nfind_input.placeholder=Yiylo nder dokimaa\r\nfind_previous.title=Yiylo cilol ɓennugol konngol ngol\r\nfind_previous_label=Ɓennuɗo\r\nfind_next.title=Yiylo cilol garowol konngol ngol\r\nfind_next_label=Yeeso\r\nfind_highlight=Jalbin fof\r\nfind_match_case_label=Jaaɓnu darnde\r\nfind_entire_word_label=Kelme timmuɗe tan\r\nfind_reached_top=Heɓii fuɗɗorde fiilannde, jokku faya les\r\nfind_reached_bottom=Heɓii hoore fiilannde, jokku faya les\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} wonande laabi {{total}}\r\nfind_match_count[two]={{current}} wonande laabi {{total}}\r\nfind_match_count[few]={{current}} wonande laabi {{total}}\r\nfind_match_count[many]={{current}} wonande laabi {{total}}\r\nfind_match_count[other]={{current}} wonande laabi {{total}}\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Ko ɓuri laabi {{limit}}\r\nfind_match_count_limit[one]=Ko ɓuri laani {{limit}}\r\nfind_match_count_limit[two]=Ko ɓuri laabi {{limit}}\r\nfind_match_count_limit[few]=Ko ɓuri laabi {{limit}}\r\nfind_match_count_limit[many]=Ko ɓuri laabi {{limit}}\r\nfind_match_count_limit[other]=Ko ɓuri laabi {{limit}}\r\nfind_not_found=Konngi njiyataa\r\n\r\n# Error panel labels\r\nerror_more_info=Ɓeydu Humpito\r\nerror_less_info=Ustu Humpito\r\nerror_close=Uddu\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Ɓatakuure: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fiilde: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Gorol: {{line}}\r\nrendering_error=Juumre waɗii tuma nde yoŋkittoo hello.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Njaajeendi Hello\r\npage_scale_fit=Keƴeendi Hello\r\npage_scale_auto=Loongorde Jaajol\r\npage_scale_actual=Ɓetol Jaati\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Juumre\r\nloading_error=Juumre waɗii tuma nde loowata PDF oo.\r\ninvalid_file_error=Fiilde PDF moƴƴaani walla jiibii.\r\nmissing_file_error=Fiilde PDF ena ŋakki.\r\nunexpected_response_error=Jaabtol sarworde tijjinooka.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Siiftannde]\r\npassword_label=Naatu finnde ngam uddite ndee fiilde PDF.\r\npassword_invalid=Finnde moƴƴaani. Tiiɗno eto kadi.\r\npassword_ok=OK\r\npassword_cancel=Haaytu\r\n\r\nprinting_not_supported=Reentino: Winnditagol tammbitaaka no feewi e ndee wanngorde.\r\nprinting_not_ready=Reentino: PDF oo loowaaki haa timmi ngam winnditagol.\r\nweb_fonts_disabled=Ponte geese ko daaƴaaɗe: horiima huutoraade ponte PDF coomtoraaɗe.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/fi/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Edellinen sivu\r\nprevious_label=Edellinen\r\nnext.title=Seuraava sivu\r\nnext_label=Seuraava\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Sivu\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=/ {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} / {{pagesCount}})\r\n\r\nzoom_out.title=Loitonna\r\nzoom_out_label=Loitonna\r\nzoom_in.title=Lähennä\r\nzoom_in_label=Lähennä\r\nzoom.title=Suurennus\r\npresentation_mode.title=Siirry esitystilaan\r\npresentation_mode_label=Esitystila\r\nopen_file.title=Avaa tiedosto\r\nopen_file_label=Avaa\r\nprint.title=Tulosta\r\nprint_label=Tulosta\r\ndownload.title=Lataa\r\ndownload_label=Lataa\r\nbookmark.title=Avoin ikkuna (kopioi tai avaa uuteen ikkunaan)\r\nbookmark_label=Avoin ikkuna\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Tools\r\ntools_label=Tools\r\nfirst_page.title=Siirry ensimmäiselle sivulle\r\nfirst_page.label=Siirry ensimmäiselle sivulle\r\nfirst_page_label=Siirry ensimmäiselle sivulle\r\nlast_page.title=Siirry viimeiselle sivulle\r\nlast_page.label=Siirry viimeiselle sivulle\r\nlast_page_label=Siirry viimeiselle sivulle\r\npage_rotate_cw.title=Kierrä oikealle\r\npage_rotate_cw.label=Kierrä oikealle\r\npage_rotate_cw_label=Kierrä oikealle\r\npage_rotate_ccw.title=Kierrä vasemmalle\r\npage_rotate_ccw.label=Kierrä vasemmalle\r\npage_rotate_ccw_label=Kierrä vasemmalle\r\n\r\ncursor_text_select_tool.title=Käytä tekstinvalintatyökalua\r\ncursor_text_select_tool_label=Tekstinvalintatyökalu\r\ncursor_hand_tool.title=Käytä käsityökalua\r\ncursor_hand_tool_label=Käsityökalu\r\n\r\nscroll_vertical.title=Käytä pystysuuntaista vieritystä\r\nscroll_vertical_label=Pystysuuntainen vieritys\r\nscroll_horizontal.title=Käytä vaakasuuntaista vieritystä\r\nscroll_horizontal_label=Vaakasuuntainen vieritys\r\nscroll_wrapped.title=Käytä rivittyvää vieritystä\r\nscroll_wrapped_label=Rivittyvä vieritys\r\n\r\nspread_none.title=Älä yhdistä sivuja aukeamiksi\r\nspread_none_label=Ei aukeamia\r\nspread_odd.title=Yhdistä sivut aukeamiksi alkaen parittomalta sivulta\r\nspread_odd_label=Parittomalta alkavat aukeamat\r\nspread_even.title=Yhdistä sivut aukeamiksi alkaen parilliselta sivulta\r\nspread_even_label=Parilliselta alkavat aukeamat\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumentin ominaisuudet…\r\ndocument_properties_label=Dokumentin ominaisuudet…\r\ndocument_properties_file_name=Tiedostonimi:\r\ndocument_properties_file_size=Tiedoston koko:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} kt ({{size_b}} tavua)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} Mt ({{size_b}} tavua)\r\ndocument_properties_title=Otsikko:\r\ndocument_properties_author=Tekijä:\r\ndocument_properties_subject=Aihe:\r\ndocument_properties_keywords=Avainsanat:\r\ndocument_properties_creation_date=Luomispäivämäärä:\r\ndocument_properties_modification_date=Muokkauspäivämäärä:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Luoja:\r\ndocument_properties_producer=PDF-tuottaja:\r\ndocument_properties_version=PDF-versio:\r\ndocument_properties_page_count=Sivujen määrä:\r\ndocument_properties_page_size=Sivun koko:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=pysty\r\ndocument_properties_page_size_orientation_landscape=vaaka\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Nopea web-katselu:\r\ndocument_properties_linearized_yes=Kyllä\r\ndocument_properties_linearized_no=Ei\r\ndocument_properties_close=Sulje\r\n\r\nprint_progress_message=Valmistellaan dokumenttia tulostamista varten…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}} %\r\nprint_progress_close=Peruuta\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Näytä/piilota sivupaneeli\r\ntoggle_sidebar_notification.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys tai liitteitä)\r\ntoggle_sidebar_notification2.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys/liitteitä/tasoja)\r\ntoggle_sidebar_label=Näytä/piilota sivupaneeli\r\ndocument_outline.title=Näytä dokumentin sisällys (laajenna tai kutista kohdat kaksoisnapsauttamalla)\r\ndocument_outline_label=Dokumentin sisällys\r\nattachments.title=Näytä liitteet\r\nattachments_label=Liitteet\r\nlayers.title=Näytä tasot (kaksoisnapsauta palauttaaksesi kaikki tasot oletustilaan)\r\nlayers_label=Tasot\r\nthumbs.title=Näytä pienoiskuvat\r\nthumbs_label=Pienoiskuvat\r\nfindbar.title=Etsi dokumentista\r\nfindbar_label=Etsi\r\n\r\nadditional_layers=Lisätasot\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Sivu {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Sivu {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Pienoiskuva sivusta {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Etsi\r\nfind_input.placeholder=Etsi dokumentista…\r\nfind_previous.title=Etsi hakusanan edellinen osuma\r\nfind_previous_label=Edellinen\r\nfind_next.title=Etsi hakusanan seuraava osuma\r\nfind_next_label=Seuraava\r\nfind_highlight=Korosta kaikki\r\nfind_match_case_label=Huomioi kirjainkoko\r\nfind_entire_word_label=Kokonaiset sanat\r\nfind_reached_top=Päästiin dokumentin alkuun, jatketaan lopusta\r\nfind_reached_bottom=Päästiin dokumentin loppuun, jatketaan alusta\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} / {{total}} osuma\r\nfind_match_count[two]={{current}} / {{total}} osumaa\r\nfind_match_count[few]={{current}} / {{total}} osumaa\r\nfind_match_count[many]={{current}} / {{total}} osumaa\r\nfind_match_count[other]={{current}} / {{total}} osumaa\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Enemmän kuin {{limit}} osumaa\r\nfind_match_count_limit[one]=Enemmän kuin {{limit}} osuma\r\nfind_match_count_limit[two]=Enemmän kuin {{limit}} osumaa\r\nfind_match_count_limit[few]=Enemmän kuin {{limit}} osumaa\r\nfind_match_count_limit[many]=Enemmän kuin {{limit}} osumaa\r\nfind_match_count_limit[other]=Enemmän kuin {{limit}} osumaa\r\nfind_not_found=Hakusanaa ei löytynyt\r\n\r\n# Error panel labels\r\nerror_more_info=Lisätietoja\r\nerror_less_info=Lisätietoja\r\nerror_close=Sulje\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (kooste: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Virheilmoitus: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pino: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Tiedosto: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Rivi: {{line}}\r\nrendering_error=Tapahtui virhe piirrettäessä sivua.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Sivun leveys\r\npage_scale_fit=Koko sivu\r\npage_scale_auto=Automaattinen suurennus\r\npage_scale_actual=Todellinen koko\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}} %\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Virhe\r\nloading_error=Tapahtui virhe ladattaessa PDF-tiedostoa.\r\ninvalid_file_error=Virheellinen tai vioittunut PDF-tiedosto.\r\nmissing_file_error=Puuttuva PDF-tiedosto.\r\nunexpected_response_error=Odottamaton vastaus palvelimelta.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=Kirjoita PDF-tiedoston salasana.\r\npassword_invalid=Virheellinen salasana. Yritä uudestaan.\r\npassword_ok=OK\r\npassword_cancel=Peruuta\r\n\r\nprinting_not_supported=Varoitus: Selain ei tue kaikkia tulostustapoja.\r\nprinting_not_ready=Varoitus: PDF-tiedosto ei ole vielä latautunut kokonaan, eikä sitä voi vielä tulostaa.\r\nweb_fonts_disabled=Verkkosivujen omat kirjasinlajit on estetty: ei voida käyttää upotettuja PDF-kirjasinlajeja.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/fr/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Page précédente\r\nprevious_label=Précédent\r\nnext.title=Page suivante\r\nnext_label=Suivant\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Page\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=sur {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} sur {{pagesCount}})\r\n\r\nzoom_out.title=Zoom arrière\r\nzoom_out_label=Zoom arrière\r\nzoom_in.title=Zoom avant\r\nzoom_in_label=Zoom avant\r\nzoom.title=Zoom\r\npresentation_mode.title=Basculer en mode présentation\r\npresentation_mode_label=Mode présentation\r\nopen_file.title=Ouvrir le fichier\r\nopen_file_label=Ouvrir le fichier\r\nprint.title=Imprimer\r\nprint_label=Imprimer\r\ndownload.title=Télécharger\r\ndownload_label=Télécharger\r\nbookmark.title=Affichage courant (copier ou ouvrir dans une nouvelle fenêtre)\r\nbookmark_label=Affichage actuel\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Outils\r\ntools_label=Outils\r\nfirst_page.title=Aller à la première page\r\nfirst_page.label=Aller à la première page\r\nfirst_page_label=Aller à la première page\r\nlast_page.title=Aller à la dernière page\r\nlast_page.label=Aller à la dernière page\r\nlast_page_label=Aller à la dernière page\r\npage_rotate_cw.title=Rotation horaire\r\npage_rotate_cw.label=Rotation horaire\r\npage_rotate_cw_label=Rotation horaire\r\npage_rotate_ccw.title=Rotation antihoraire\r\npage_rotate_ccw.label=Rotation antihoraire\r\npage_rotate_ccw_label=Rotation antihoraire\r\n\r\ncursor_text_select_tool.title=Activer l’outil de sélection de texte\r\ncursor_text_select_tool_label=Outil de sélection de texte\r\ncursor_hand_tool.title=Activer l’outil main\r\ncursor_hand_tool_label=Outil main\r\n\r\nscroll_vertical.title=Utiliser le défilement vertical\r\nscroll_vertical_label=Défilement vertical\r\nscroll_horizontal.title=Utiliser le défilement horizontal\r\nscroll_horizontal_label=Défilement horizontal\r\nscroll_wrapped.title=Utiliser le défilement par bloc\r\nscroll_wrapped_label=Défilement par bloc\r\n\r\nspread_none.title=Ne pas afficher les pages deux à deux\r\nspread_none_label=Pas de double affichage\r\nspread_odd.title=Afficher les pages par deux, impaires à gauche\r\nspread_odd_label=Doubles pages, impaires à gauche\r\nspread_even.title=Afficher les pages par deux, paires à gauche\r\nspread_even_label=Doubles pages, paires à gauche\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Propriétés du document…\r\ndocument_properties_label=Propriétés du document…\r\ndocument_properties_file_name=Nom du fichier :\r\ndocument_properties_file_size=Taille du fichier :\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} Ko ({{size_b}} octets)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} Mo ({{size_b}} octets)\r\ndocument_properties_title=Titre :\r\ndocument_properties_author=Auteur :\r\ndocument_properties_subject=Sujet :\r\ndocument_properties_keywords=Mots-clés :\r\ndocument_properties_creation_date=Date de création :\r\ndocument_properties_modification_date=Modifié le :\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}} à {{time}}\r\ndocument_properties_creator=Créé par :\r\ndocument_properties_producer=Outil de conversion PDF :\r\ndocument_properties_version=Version PDF :\r\ndocument_properties_page_count=Nombre de pages :\r\ndocument_properties_page_size=Taille de la page :\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=portrait\r\ndocument_properties_page_size_orientation_landscape=paysage\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=lettre\r\ndocument_properties_page_size_name_legal=document juridique\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Affichage rapide des pages web :\r\ndocument_properties_linearized_yes=Oui\r\ndocument_properties_linearized_no=Non\r\ndocument_properties_close=Fermer\r\n\r\nprint_progress_message=Préparation du document pour l’impression…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}} %\r\nprint_progress_close=Annuler\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Afficher/Masquer le panneau latéral\r\ntoggle_sidebar_notification.title=Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes)\r\ntoggle_sidebar_notification2.title=Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes/calques)\r\ntoggle_sidebar_label=Afficher/Masquer le panneau latéral\r\ndocument_outline.title=Afficher les signets du document (double-cliquer pour développer/réduire tous les éléments)\r\ndocument_outline_label=Signets du document\r\nattachments.title=Afficher les pièces jointes\r\nattachments_label=Pièces jointes\r\nlayers.title=Afficher les calques (double-cliquer pour réinitialiser tous les calques à l’état par défaut)\r\nlayers_label=Calques\r\nthumbs.title=Afficher les vignettes\r\nthumbs_label=Vignettes\r\ncurrent_outline_item.title=Trouver l’élément de plan actuel\r\ncurrent_outline_item_label=Élément de plan actuel\r\nfindbar.title=Rechercher dans le document\r\nfindbar_label=Rechercher\r\n\r\nadditional_layers=Calques additionnels\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Page {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Page {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Vignette de la page {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Rechercher\r\nfind_input.placeholder=Rechercher dans le document…\r\nfind_previous.title=Trouver l’occurrence précédente de l’expression\r\nfind_previous_label=Précédent\r\nfind_next.title=Trouver la prochaine occurrence de l’expression\r\nfind_next_label=Suivant\r\nfind_highlight=Tout surligner\r\nfind_match_case_label=Respecter la casse\r\nfind_entire_word_label=Mots entiers\r\nfind_reached_top=Haut de la page atteint, poursuite depuis la fin\r\nfind_reached_bottom=Bas de la page atteint, poursuite au début\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]=Occurrence {{current}} sur {{total}}\r\nfind_match_count[two]=Occurrence {{current}} sur {{total}}\r\nfind_match_count[few]=Occurrence {{current}} sur {{total}}\r\nfind_match_count[many]=Occurrence {{current}} sur {{total}}\r\nfind_match_count[other]=Occurrence {{current}} sur {{total}}\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Plus de {{limit}} correspondances\r\nfind_match_count_limit[one]=Plus de {{limit}} correspondance\r\nfind_match_count_limit[two]=Plus de {{limit}} correspondances\r\nfind_match_count_limit[few]=Plus de {{limit}} correspondances\r\nfind_match_count_limit[many]=Plus de {{limit}} correspondances\r\nfind_match_count_limit[other]=Plus de {{limit}} correspondances\r\nfind_not_found=Expression non trouvée\r\n\r\n# Error panel labels\r\nerror_more_info=Plus d’informations\r\nerror_less_info=Moins d’informations\r\nerror_close=Fermer\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (identifiant de compilation : {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Message : {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pile : {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fichier : {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Ligne : {{line}}\r\nrendering_error=Une erreur s’est produite lors de l’affichage de la page.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Pleine largeur\r\npage_scale_fit=Page entière\r\npage_scale_auto=Zoom automatique\r\npage_scale_actual=Taille réelle\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}} %\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Erreur\r\nloading_error=Une erreur s’est produite lors du chargement du fichier PDF.\r\ninvalid_file_error=Fichier PDF invalide ou corrompu.\r\nmissing_file_error=Fichier PDF manquant.\r\nunexpected_response_error=Réponse inattendue du serveur.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}} à {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Annotation {{type}}]\r\npassword_label=Veuillez saisir le mot de passe pour ouvrir ce fichier PDF.\r\npassword_invalid=Mot de passe incorrect. Veuillez réessayer.\r\npassword_ok=OK\r\npassword_cancel=Annuler\r\n\r\nprinting_not_supported=Attention : l’impression n’est pas totalement prise en charge par ce navigateur.\r\nprinting_not_ready=Attention : le PDF n’est pas entièrement chargé pour pouvoir l’imprimer.\r\nweb_fonts_disabled=Les polices web sont désactivées : impossible d’utiliser les polices intégrées au PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/fy-NL/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Foarige side\r\nprevious_label=Foarige\r\nnext.title=Folgjende side\r\nnext_label=Folgjende\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Side\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=fan {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} fan {{pagesCount}})\r\n\r\nzoom_out.title=Utzoome\r\nzoom_out_label=Utzoome\r\nzoom_in.title=Ynzoome\r\nzoom_in_label=Ynzoome\r\nzoom.title=Zoome\r\npresentation_mode.title=Wikselje nei presintaasjemodus\r\npresentation_mode_label=Presintaasjemodus\r\nopen_file.title=Bestân iepenje\r\nopen_file_label=Iepenje\r\nprint.title=Ofdrukke\r\nprint_label=Ofdrukke\r\ndownload.title=Downloade\r\ndownload_label=Downloade\r\nbookmark.title=Aktuele finster (kopiearje of iepenje yn nij finster)\r\nbookmark_label=Aktuele finster\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Ark\r\ntools_label=Ark\r\nfirst_page.title=Gean nei earste side\r\nfirst_page.label=Nei earste side gean\r\nfirst_page_label=Gean nei earste side\r\nlast_page.title=Gean nei lêste side\r\nlast_page.label=Nei lêste side gean\r\nlast_page_label=Gean nei lêste side\r\npage_rotate_cw.title=Rjochtsom draaie\r\npage_rotate_cw.label=Rjochtsom draaie\r\npage_rotate_cw_label=Rjochtsom draaie\r\npage_rotate_ccw.title=Loftsom draaie\r\npage_rotate_ccw.label=Loftsom draaie\r\npage_rotate_ccw_label=Loftsom draaie\r\n\r\ncursor_text_select_tool.title=Tekstseleksjehelpmiddel ynskeakelje\r\ncursor_text_select_tool_label=Tekstseleksjehelpmiddel\r\ncursor_hand_tool.title=Hânhelpmiddel ynskeakelje\r\ncursor_hand_tool_label=Hânhelpmiddel\r\n\r\nscroll_vertical.title=Fertikaal skowe brûke\r\nscroll_vertical_label=Fertikaal skowe\r\nscroll_horizontal.title=Horizontaal skowe brûke\r\nscroll_horizontal_label=Horizontaal skowe\r\nscroll_wrapped.title=Skowe mei oersjoch brûke\r\nscroll_wrapped_label=Skowe mei oersjoch\r\n\r\nspread_none.title=Sidesprieding net gearfetsje\r\nspread_none_label=Gjin sprieding\r\nspread_odd.title=Sidesprieding gearfetsje te starten mei ûneven nûmers\r\nspread_odd_label=Uneven sprieding\r\nspread_even.title=Sidesprieding gearfetsje te starten mei even nûmers\r\nspread_even_label=Even sprieding\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokuminteigenskippen…\r\ndocument_properties_label=Dokuminteigenskippen…\r\ndocument_properties_file_name=Bestânsnamme:\r\ndocument_properties_file_size=Bestânsgrutte:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Titel:\r\ndocument_properties_author=Auteur:\r\ndocument_properties_subject=Underwerp:\r\ndocument_properties_keywords=Kaaiwurden:\r\ndocument_properties_creation_date=Oanmaakdatum:\r\ndocument_properties_modification_date=Bewurkingsdatum:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Makker:\r\ndocument_properties_producer=PDF-makker:\r\ndocument_properties_version=PDF-ferzje:\r\ndocument_properties_page_count=Siden:\r\ndocument_properties_page_size=Sideformaat:\r\ndocument_properties_page_size_unit_inches=yn\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=steand\r\ndocument_properties_page_size_orientation_landscape=lizzend\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Juridysk\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Flugge webwerjefte:\r\ndocument_properties_linearized_yes=Ja\r\ndocument_properties_linearized_no=Nee\r\ndocument_properties_close=Slute\r\n\r\nprint_progress_message=Dokumint tariede oar ôfdrukken…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Annulearje\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Sidebalke yn-/útskeakelje\r\ntoggle_sidebar_notification.title=Sidebalke yn-/útskeakelje (dokumint befettet outline/bylagen)\r\ntoggle_sidebar_notification2.title=Sidebalke yn-/útskeakelje (dokumint befettet oersjoch/bylagen/lagen)\r\ntoggle_sidebar_label=Sidebalke yn-/útskeakelje\r\ndocument_outline.title=Dokumintoersjoch toane (dûbelklik om alle items út/yn te klappen)\r\ndocument_outline_label=Dokumintoersjoch\r\nattachments.title=Bylagen toane\r\nattachments_label=Bylagen\r\nlayers.title=Lagen toane (dûbelklik om alle lagen nei de standertsteat werom te setten)\r\nlayers_label=Lagen\r\nthumbs.title=Foarbylden toane\r\nthumbs_label=Foarbylden\r\ncurrent_outline_item.title=Aktueel item yn ynhâldsopjefte sykje\r\ncurrent_outline_item_label=Aktueel item yn ynhâldsopjefte\r\nfindbar.title=Sykje yn dokumint\r\nfindbar_label=Sykje\r\n\r\nadditional_layers=Oanfoljende lagen\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Side {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Side {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Foarbyld fan side {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Sykje\r\nfind_input.placeholder=Sykje yn dokumint…\r\nfind_previous.title=It foarige foarkommen fan de tekst sykje\r\nfind_previous_label=Foarige\r\nfind_next.title=It folgjende foarkommen fan de tekst sykje\r\nfind_next_label=Folgjende\r\nfind_highlight=Alles markearje\r\nfind_match_case_label=Haadlettergefoelich\r\nfind_entire_word_label=Hiele wurden\r\nfind_reached_top=Boppekant fan dokumint berikt, trochgien fan ûnder ôf\r\nfind_reached_bottom=Ein fan dokumint berikt, trochgien fan boppe ôf\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} fan {{total}} oerienkomst\r\nfind_match_count[two]={{current}} fan {{total}} oerienkomsten\r\nfind_match_count[few]={{current}} fan {{total}} oerienkomsten\r\nfind_match_count[many]={{current}} fan {{total}} oerienkomsten\r\nfind_match_count[other]={{current}} fan {{total}} oerienkomsten\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Mear as {{limit}} oerienkomsten\r\nfind_match_count_limit[one]=Mear as {{limit}} oerienkomst\r\nfind_match_count_limit[two]=Mear as {{limit}} oerienkomsten\r\nfind_match_count_limit[few]=Mear as {{limit}} oerienkomsten\r\nfind_match_count_limit[many]=Mear as {{limit}} oerienkomsten\r\nfind_match_count_limit[other]=Mear as {{limit}} oerienkomsten\r\nfind_not_found=Tekst net fûn\r\n\r\n# Error panel labels\r\nerror_more_info=Mear ynformaasje\r\nerror_less_info=Minder ynformaasje\r\nerror_close=Slute\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js f{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Berjocht: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Bestân: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Rigel: {{line}}\r\nrendering_error=Der is in flater bard by it renderjen fan de side.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Sidebreedte\r\npage_scale_fit=Hiele side\r\npage_scale_auto=Automatysk zoome\r\npage_scale_actual=Werklike grutte\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Flater\r\nloading_error=Der is in flater bard by it laden fan de PDF.\r\ninvalid_file_error=Ynfalide of korruptearre PDF-bestân.\r\nmissing_file_error=PDF-bestân ûntbrekt.\r\nunexpected_response_error=Unferwacht serverantwurd.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}}-annotaasje]\r\npassword_label=Jou it wachtwurd om dit PDF-bestân te iepenjen.\r\npassword_invalid=Ferkeard wachtwurd. Probearje opnij.\r\npassword_ok=OK\r\npassword_cancel=Annulearje\r\n\r\nprinting_not_supported=Warning: Printen is net folslein stipe troch dizze browser.\r\nprinting_not_ready=Warning: PDF is net folslein laden om ôf te drukken.\r\nweb_fonts_disabled=Weblettertypen binne útskeakele: gebrûk fan ynsluten PDF-lettertypen is net mooglik.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ga-IE/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=An Leathanach Roimhe Seo\r\nprevious_label=Roimhe Seo\r\nnext.title=An Chéad Leathanach Eile\r\nnext_label=Ar Aghaidh\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Leathanach\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=as {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} as {{pagesCount}})\r\n\r\nzoom_out.title=Súmáil Amach\r\nzoom_out_label=Súmáil Amach\r\nzoom_in.title=Súmáil Isteach\r\nzoom_in_label=Súmáil Isteach\r\nzoom.title=Súmáil\r\npresentation_mode.title=Úsáid an Mód Láithreoireachta\r\npresentation_mode_label=Mód Láithreoireachta\r\nopen_file.title=Oscail Comhad\r\nopen_file_label=Oscail\r\nprint.title=Priontáil\r\nprint_label=Priontáil\r\ndownload.title=Íoslódáil\r\ndownload_label=Íoslódáil\r\nbookmark.title=An t-amharc reatha (cóipeáil nó oscail i bhfuinneog nua)\r\nbookmark_label=An tAmharc Reatha\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Uirlisí\r\ntools_label=Uirlisí\r\nfirst_page.title=Go dtí an chéad leathanach\r\nfirst_page.label=Go dtí an chéad leathanach\r\nfirst_page_label=Go dtí an chéad leathanach\r\nlast_page.title=Go dtí an leathanach deiridh\r\nlast_page.label=Go dtí an leathanach deiridh\r\nlast_page_label=Go dtí an leathanach deiridh\r\npage_rotate_cw.title=Rothlaigh ar deiseal\r\npage_rotate_cw.label=Rothlaigh ar deiseal\r\npage_rotate_cw_label=Rothlaigh ar deiseal\r\npage_rotate_ccw.title=Rothlaigh ar tuathal\r\npage_rotate_ccw.label=Rothlaigh ar tuathal\r\npage_rotate_ccw_label=Rothlaigh ar tuathal\r\n\r\ncursor_text_select_tool.title=Cumasaigh an Uirlis Roghnaithe Téacs\r\ncursor_text_select_tool_label=Uirlis Roghnaithe Téacs\r\ncursor_hand_tool.title=Cumasaigh an Uirlis Láimhe\r\ncursor_hand_tool_label=Uirlis Láimhe\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Airíonna na Cáipéise…\r\ndocument_properties_label=Airíonna na Cáipéise…\r\ndocument_properties_file_name=Ainm an chomhaid:\r\ndocument_properties_file_size=Méid an chomhaid:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} kB ({{size_b}} beart)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} beart)\r\ndocument_properties_title=Teideal:\r\ndocument_properties_author=Údar:\r\ndocument_properties_subject=Ábhar:\r\ndocument_properties_keywords=Eochairfhocail:\r\ndocument_properties_creation_date=Dáta Cruthaithe:\r\ndocument_properties_modification_date=Dáta Athraithe:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Cruthaitheoir:\r\ndocument_properties_producer=Cruthaitheoir an PDF:\r\ndocument_properties_version=Leagan PDF:\r\ndocument_properties_page_count=Líon Leathanach:\r\ndocument_properties_close=Dún\r\n\r\nprint_progress_message=Cáipéis á hullmhú le priontáil…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cealaigh\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Scoránaigh an Barra Taoibh\r\ntoggle_sidebar_notification.title=Scoránaigh an Barra Taoibh (achoimre/iatáin sa cháipéis)\r\ntoggle_sidebar_label=Scoránaigh an Barra Taoibh\r\ndocument_outline.title=Taispeáin Imlíne na Cáipéise (déchliceáil chun chuile rud a leathnú nó a laghdú)\r\ndocument_outline_label=Creatlach na Cáipéise\r\nattachments.title=Taispeáin Iatáin\r\nattachments_label=Iatáin\r\nthumbs.title=Taispeáin Mionsamhlacha\r\nthumbs_label=Mionsamhlacha\r\nfindbar.title=Aimsigh sa Cháipéis\r\nfindbar_label=Aimsigh\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Leathanach {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Mionsamhail Leathanaigh {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Aimsigh\r\nfind_input.placeholder=Aimsigh sa cháipéis…\r\nfind_previous.title=Aimsigh an sampla roimhe seo den nath seo\r\nfind_previous_label=Roimhe seo\r\nfind_next.title=Aimsigh an chéad sampla eile den nath sin\r\nfind_next_label=Ar aghaidh\r\nfind_highlight=Aibhsigh uile\r\nfind_match_case_label=Cásíogair\r\nfind_reached_top=Ag barr na cáipéise, ag leanúint ón mbun\r\nfind_reached_bottom=Ag bun na cáipéise, ag leanúint ón mbarr\r\nfind_not_found=Frása gan aimsiú\r\n\r\n# Error panel labels\r\nerror_more_info=Tuilleadh Eolais\r\nerror_less_info=Níos Lú Eolais\r\nerror_close=Dún\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Teachtaireacht: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Cruach: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Comhad: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Líne: {{line}}\r\nrendering_error=Tharla earráid agus an leathanach á leagan amach.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Leithead Leathanaigh\r\npage_scale_fit=Laghdaigh go dtí an Leathanach\r\npage_scale_auto=Súmáil Uathoibríoch\r\npage_scale_actual=Fíormhéid\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Earráid\r\nloading_error=Tharla earráid agus an cháipéis PDF á lódáil.\r\ninvalid_file_error=Comhad neamhbhailí nó truaillithe PDF.\r\nmissing_file_error=Comhad PDF ar iarraidh.\r\nunexpected_response_error=Freagra ón bhfreastalaí nach rabhthas ag súil leis.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anótáil {{type}}]\r\npassword_label=Cuir an focal faire isteach chun an comhad PDF seo a oscailt.\r\npassword_invalid=Focal faire mícheart. Déan iarracht eile.\r\npassword_ok=OK\r\npassword_cancel=Cealaigh\r\n\r\nprinting_not_supported=Rabhadh: Ní thacaíonn an brabhsálaí le priontáil go hiomlán.\r\nprinting_not_ready=Rabhadh: Ní féidir an PDF a phriontáil go dtí go mbeidh an cháipéis iomlán lódáilte.\r\nweb_fonts_disabled=Tá clófhoirne Gréasáin díchumasaithe: ní féidir clófhoirne leabaithe PDF a úsáid.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/gd/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=An duilleag roimhe\r\nprevious_label=Air ais\r\nnext.title=An ath-dhuilleag\r\nnext_label=Air adhart\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Duilleag\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=à {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} à {{pagesCount}})\r\n\r\nzoom_out.title=Sùm a-mach\r\nzoom_out_label=Sùm a-mach\r\nzoom_in.title=Sùm a-steach\r\nzoom_in_label=Sùm a-steach\r\nzoom.title=Sùm\r\npresentation_mode.title=Gearr leum dhan mhodh taisbeanaidh\r\npresentation_mode_label=Am modh taisbeanaidh\r\nopen_file.title=Fosgail faidhle\r\nopen_file_label=Fosgail\r\nprint.title=Clò-bhuail\r\nprint_label=Clò-bhuail\r\ndownload.title=Luchdaich a-nuas\r\ndownload_label=Luchdaich a-nuas\r\nbookmark.title=An sealladh làithreach (dèan lethbhreac no fosgail e ann an uinneag ùr)\r\nbookmark_label=An sealladh làithreach\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Innealan\r\ntools_label=Innealan\r\nfirst_page.title=Rach gun chiad duilleag\r\nfirst_page.label=Rach gun chiad duilleag\r\nfirst_page_label=Rach gun chiad duilleag\r\nlast_page.title=Rach gun duilleag mu dheireadh\r\nlast_page.label=Rach gun duilleag mu dheireadh\r\nlast_page_label=Rach gun duilleag mu dheireadh\r\npage_rotate_cw.title=Cuairtich gu deiseil\r\npage_rotate_cw.label=Cuairtich gu deiseil\r\npage_rotate_cw_label=Cuairtich gu deiseil\r\npage_rotate_ccw.title=Cuairtich gu tuathail\r\npage_rotate_ccw.label=Cuairtich gu tuathail\r\npage_rotate_ccw_label=Cuairtich gu tuathail\r\n\r\ncursor_text_select_tool.title=Cuir an comas inneal taghadh an teacsa\r\ncursor_text_select_tool_label=Inneal taghadh an teacsa\r\ncursor_hand_tool.title=Cuir inneal na làimhe an comas\r\ncursor_hand_tool_label=Inneal na làimhe\r\n\r\nscroll_vertical.title=Cleachd sgroladh inghearach\r\nscroll_vertical_label=Sgroladh inghearach\r\nscroll_horizontal.title=Cleachd sgroladh còmhnard\r\nscroll_horizontal_label=Sgroladh còmhnard\r\nscroll_wrapped.title=Cleachd sgroladh paisgte\r\nscroll_wrapped_label=Sgroladh paisgte\r\n\r\nspread_none.title=Na cuir còmhla sgoileadh dhuilleagan\r\nspread_none_label=Gun sgaoileadh dhuilleagan\r\nspread_odd.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chorr\r\nspread_odd_label=Sgaoileadh dhuilleagan corra\r\nspread_even.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil àireamh chothrom\r\nspread_even_label=Sgaoileadh dhuilleagan cothrom\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Roghainnean na sgrìobhainne…\r\ndocument_properties_label=Roghainnean na sgrìobhainne…\r\ndocument_properties_file_name=Ainm an fhaidhle:\r\ndocument_properties_file_size=Meud an fhaidhle:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Tiotal:\r\ndocument_properties_author=Ùghdar:\r\ndocument_properties_subject=Cuspair:\r\ndocument_properties_keywords=Faclan-luirg:\r\ndocument_properties_creation_date=Latha a chruthachaidh:\r\ndocument_properties_modification_date=Latha atharrachaidh:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Cruthadair:\r\ndocument_properties_producer=Saothraiche a' PDF:\r\ndocument_properties_version=Tionndadh a' PDF:\r\ndocument_properties_page_count=Àireamh de dhuilleagan:\r\ndocument_properties_page_size=Meud na duilleige:\r\ndocument_properties_page_size_unit_inches=ann an\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=portraid\r\ndocument_properties_page_size_orientation_landscape=dreach-tìre\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Litir\r\ndocument_properties_page_size_name_legal=Laghail\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Grad shealladh-lìn:\r\ndocument_properties_linearized_yes=Tha\r\ndocument_properties_linearized_no=Chan eil\r\ndocument_properties_close=Dùin\r\n\r\nprint_progress_message=Ag ullachadh na sgrìobhainn airson clò-bhualadh…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Sguir dheth\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Toglaich am bàr-taoibh\r\ntoggle_sidebar_notification.title=Toglaich am bàr-taoibh (tha oir-loidhne/ceanglachain aig an sgrìobhainn)\r\ntoggle_sidebar_label=Toglaich am bàr-taoibh\r\ndocument_outline.title=Seall oir-loidhne na sgrìobhainn (dèan briogadh dùbailte airson a h-uile nì a leudachadh/a cho-theannadh)\r\ndocument_outline_label=Oir-loidhne na sgrìobhainne\r\nattachments.title=Seall na ceanglachain\r\nattachments_label=Ceanglachain\r\nthumbs.title=Seall na dealbhagan\r\nthumbs_label=Dealbhagan\r\nfindbar.title=Lorg san sgrìobhainn\r\nfindbar_label=Lorg\r\n\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Duilleag a {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Dealbhag duilleag a {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Lorg\r\nfind_input.placeholder=Lorg san sgrìobhainn...\r\nfind_previous.title=Lorg làthair roimhe na h-abairt seo\r\nfind_previous_label=Air ais\r\nfind_next.title=Lorg ath-làthair na h-abairt seo\r\nfind_next_label=Air adhart\r\nfind_highlight=Soillsich a h-uile\r\nfind_match_case_label=Aire do litrichean mòra is beaga\r\nfind_entire_word_label=Faclan-slàna\r\nfind_reached_top=Ràinig sinn barr na duilleige, a' leantainn air adhart o bhonn na duilleige\r\nfind_reached_bottom=Ràinig sinn bonn na duilleige, a' leantainn air adhart o bharr na duilleige\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} à {{total}} mhaids\r\nfind_match_count[two]={{current}} à {{total}} mhaids\r\nfind_match_count[few]={{current}} à {{total}} maidsichean\r\nfind_match_count[many]={{current}} à {{total}} maids\r\nfind_match_count[other]={{current}} à {{total}} maids\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Barrachd air {{limit}} maids\r\nfind_match_count_limit[one]=Barrachd air {{limit}} mhaids\r\nfind_match_count_limit[two]=Barrachd air {{limit}} mhaids\r\nfind_match_count_limit[few]=Barrachd air {{limit}} maidsichean\r\nfind_match_count_limit[many]=Barrachd air {{limit}} maids\r\nfind_match_count_limit[other]=Barrachd air {{limit}} maids\r\nfind_not_found=Cha deach an abairt a lorg\r\n\r\n# Error panel labels\r\nerror_more_info=Barrachd fiosrachaidh\r\nerror_less_info=Nas lugha de dh'fhiosrachadh\r\nerror_close=Dùin\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Teachdaireachd: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stac: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Faidhle: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Loidhne: {{line}}\r\nrendering_error=Thachair mearachd rè reandaradh na duilleige.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Leud na duilleige\r\npage_scale_fit=Freagair ri meud na duilleige\r\npage_scale_auto=Sùm fèin-obrachail\r\npage_scale_actual=Am fìor-mheud\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Mearachd\r\nloading_error=Thachair mearachd rè luchdadh a' PDF.\r\ninvalid_file_error=Faidhle PDF a tha mì-dhligheach no coirbte.\r\nmissing_file_error=Faidhle PDF a tha a dhìth.\r\nunexpected_response_error=Freagairt on fhrithealaiche ris nach robh dùil.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Nòtachadh {{type}}]\r\npassword_label=Cuir a-steach am facal-faire gus am faidhle PDF seo fhosgladh.\r\npassword_invalid=Tha am facal-faire cearr. Nach fheuch thu ris a-rithist?\r\npassword_ok=Ceart ma-thà\r\npassword_cancel=Sguir dheth\r\n\r\nprinting_not_supported=Rabhadh: Chan eil am brabhsair seo a' cur làn-taic ri clò-bhualadh.\r\nprinting_not_ready=Rabhadh: Cha deach am PDF a luchdadh gu tur airson clò-bhualadh.\r\nweb_fonts_disabled=Tha cruthan-clò lìn à comas: Chan urrainn dhuinn cruthan-clò PDF leabaichte a chleachdadh.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/gl/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Páxina anterior\r\nprevious_label=Anterior\r\nnext.title=Seguinte páxina\r\nnext_label=Seguinte\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Páxina\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=de {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} de {{pagesCount}})\r\n\r\nzoom_out.title=Reducir\r\nzoom_out_label=Reducir\r\nzoom_in.title=Ampliar\r\nzoom_in_label=Ampliar\r\nzoom.title=Zoom\r\npresentation_mode.title=Cambiar ao modo presentación\r\npresentation_mode_label=Modo presentación\r\nopen_file.title=Abrir ficheiro\r\nopen_file_label=Abrir\r\nprint.title=Imprimir\r\nprint_label=Imprimir\r\ndownload.title=Descargar\r\ndownload_label=Descargar\r\nbookmark.title=Vista actual (copiar ou abrir nunha nova xanela)\r\nbookmark_label=Vista actual\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Ferramentas\r\ntools_label=Ferramentas\r\nfirst_page.title=Ir á primeira páxina\r\nfirst_page.label=Ir á primeira páxina\r\nfirst_page_label=Ir á primeira páxina\r\nlast_page.title=Ir á última páxina\r\nlast_page.label=Ir á última páxina\r\nlast_page_label=Ir á última páxina\r\npage_rotate_cw.title=Rotar no sentido das agullas do reloxo\r\npage_rotate_cw.label=Rotar no sentido das agullas do reloxo\r\npage_rotate_cw_label=Rotar no sentido das agullas do reloxo\r\npage_rotate_ccw.title=Rotar no sentido contrario ás agullas do reloxo\r\npage_rotate_ccw.label=Rotar no sentido contrario ás agullas do reloxo\r\npage_rotate_ccw_label=Rotar no sentido contrario ás agullas do reloxo\r\n\r\ncursor_text_select_tool.title=Activar a ferramenta de selección de texto\r\ncursor_text_select_tool_label=Ferramenta de selección de texto\r\ncursor_hand_tool.title=Activar a ferramenta man\r\ncursor_hand_tool_label=Ferramenta man\r\n\r\nscroll_vertical.title=Usar o desprazamento vertical\r\nscroll_vertical_label=Desprazamento vertical\r\nscroll_horizontal.title=Usar o desprazamento horizontal\r\nscroll_horizontal_label=Desprazamento horizontal\r\nscroll_wrapped.title=Usar desprazamento en bloque\r\nscroll_wrapped_label=Desprazamento en bloque\r\n\r\nspread_none.title=Non agrupar páxinas\r\nspread_none_label=Ningún agrupamento\r\nspread_odd.title=Crea grupo de páxinas que comezan con números de páxina impares\r\nspread_odd_label=Agrupamento impar\r\nspread_even.title=Crea grupo de páxinas que comezan con números de páxina pares\r\nspread_even_label=Agrupamento par\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Propiedades do documento…\r\ndocument_properties_label=Propiedades do documento…\r\ndocument_properties_file_name=Nome do ficheiro:\r\ndocument_properties_file_size=Tamaño do ficheiro:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Título:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Asunto:\r\ndocument_properties_keywords=Palabras clave:\r\ndocument_properties_creation_date=Data de creación:\r\ndocument_properties_modification_date=Data de modificación:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Creado por:\r\ndocument_properties_producer=Xenerador do PDF:\r\ndocument_properties_version=Versión de PDF:\r\ndocument_properties_page_count=Número de páxinas:\r\ndocument_properties_page_size=Tamaño da páxina:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=Vertical\r\ndocument_properties_page_size_orientation_landscape=Horizontal\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Carta\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Visualización rápida das páxinas web:\r\ndocument_properties_linearized_yes=Si\r\ndocument_properties_linearized_no=Non\r\ndocument_properties_close=Pechar\r\n\r\nprint_progress_message=Preparando documento para imprimir…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cancelar\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Amosar/agochar a barra lateral\r\ntoggle_sidebar_notification.title=Amosar/agochar a barra lateral (o documento contén un esquema ou anexos)\r\ntoggle_sidebar_notification2.title=Alternar barra lateral (o documento contén esquema/anexos/capas)\r\ntoggle_sidebar_label=Amosar/agochar a barra lateral\r\ndocument_outline.title=Amosar o esquema do documento (prema dúas veces para expandir/contraer todos os elementos)\r\ndocument_outline_label=Esquema do documento\r\nattachments.title=Amosar anexos\r\nattachments_label=Anexos\r\nlayers.title=Mostrar capas (prema dúas veces para restaurar todas as capas o estado predeterminado)\r\nlayers_label=Capas\r\nthumbs.title=Amosar miniaturas\r\nthumbs_label=Miniaturas\r\ncurrent_outline_item.title=Atopar o elemento delimitado actualmente\r\ncurrent_outline_item_label=Elemento delimitado actualmente\r\nfindbar.title=Atopar no documento\r\nfindbar_label=Atopar\r\n\r\nadditional_layers=Capas adicionais\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Páxina {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Páxina {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura da páxina {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Atopar\r\nfind_input.placeholder=Atopar no documento…\r\nfind_previous.title=Atopar a anterior aparición da frase\r\nfind_previous_label=Anterior\r\nfind_next.title=Atopar a seguinte aparición da frase\r\nfind_next_label=Seguinte\r\nfind_highlight=Realzar todo\r\nfind_match_case_label=Diferenciar maiúsculas de minúsculas\r\nfind_entire_word_label=Palabras completas\r\nfind_reached_top=Chegouse ao inicio do documento, continuar desde o final\r\nfind_reached_bottom=Chegouse ao final do documento, continuar desde o inicio\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} de {{total}} coincidencia\r\nfind_match_count[two]={{current}} de {{total}} coincidencias\r\nfind_match_count[few]={{current}} de {{total}} coincidencias\r\nfind_match_count[many]={{current}} de {{total}} coincidencias\r\nfind_match_count[other]={{current}} de {{total}} coincidencias\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Máis de {{limit}} coincidencias\r\nfind_match_count_limit[one]=Máis de {{limit}} coincidencia\r\nfind_match_count_limit[two]=Máis de {{limit}} coincidencias\r\nfind_match_count_limit[few]=Máis de {{limit}} coincidencias\r\nfind_match_count_limit[many]=Máis de {{limit}} coincidencias\r\nfind_match_count_limit[other]=Máis de {{limit}} coincidencias\r\nfind_not_found=Non se atopou a frase\r\n\r\n# Error panel labels\r\nerror_more_info=Máis información\r\nerror_less_info=Menos información\r\nerror_close=Pechar\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (Identificador da compilación: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mensaxe: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pila: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Ficheiro: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Liña: {{line}}\r\nrendering_error=Produciuse un erro ao representar a páxina.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Largura da páxina\r\npage_scale_fit=Axuste de páxina\r\npage_scale_auto=Zoom automático\r\npage_scale_actual=Tamaño actual\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Erro\r\nloading_error=Produciuse un erro ao cargar o PDF.\r\ninvalid_file_error=Ficheiro PDF danado ou non válido.\r\nmissing_file_error=Falta o ficheiro PDF.\r\nunexpected_response_error=Resposta inesperada do servidor.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anotación {{type}}]\r\npassword_label=Escriba o contrasinal para abrir este ficheiro PDF.\r\npassword_invalid=Contrasinal incorrecto. Tente de novo.\r\npassword_ok=Aceptar\r\npassword_cancel=Cancelar\r\n\r\nprinting_not_supported=Aviso: A impresión non é compatíbel de todo con este navegador.\r\nprinting_not_ready=Aviso: O PDF non se cargou completamente para imprimirse.\r\nweb_fonts_disabled=Desactiváronse as fontes web:  foi imposíbel usar as fontes incrustadas no PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/gn/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Kuatiarogue mboyvegua\r\nprevious_label=Mboyvegua\r\nnext.title=Kuatiarogue upeigua\r\nnext_label=Upeigua\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Kuatiarogue\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}} gui\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} of {{pagesCount}})\r\n\r\nzoom_out.title=Momichĩ\r\nzoom_out_label=Momichĩ\r\nzoom_in.title=Mbotuicha\r\nzoom_in_label=Mbotuicha\r\nzoom.title=Tuichakue\r\npresentation_mode.title=Jehechauka reko moambue\r\npresentation_mode_label=Jehechauka reko\r\nopen_file.title=Marandurendápe jeike\r\nopen_file_label=Jeike\r\nprint.title=Monguatia\r\nprint_label=Monguatia\r\ndownload.title=Mboguejy\r\ndownload_label=Mboguejy\r\nbookmark.title=Ag̃agua jehecha (mbohasarã térã eike peteĩ ovetã pyahúpe)\r\nbookmark_label=Ag̃agua jehecha\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Tembipuru\r\ntools_label=Tembipuru\r\nfirst_page.title=Kuatiarogue ñepyrũme jeho\r\nfirst_page.label=Kuatiarogue ñepyrũme jeho\r\nfirst_page_label=Kuatiarogue ñepyrũme jeho\r\nlast_page.title=Kuatiarogue pahápe jeho\r\nlast_page.label=Kuatiarogue pahápe jeho\r\nlast_page_label=Kuatiarogue pahápe jeho\r\npage_rotate_cw.title=Aravóicha mbojere\r\npage_rotate_cw.label=Aravóicha mbojere\r\npage_rotate_cw_label=Aravóicha mbojere\r\npage_rotate_ccw.title=Aravo rapykue gotyo mbojere\r\npage_rotate_ccw.label=Aravo rapykue gotyo mbojere\r\npage_rotate_ccw_label=Aravo rapykue gotyo mbojere\r\n\r\ncursor_text_select_tool.title=Emyandy moñe’ẽrã jeporavo rembipuru\r\ncursor_text_select_tool_label=Moñe’ẽrã jeporavo rembipuru\r\ncursor_hand_tool.title=Tembipuru po pegua myandy\r\ncursor_hand_tool_label=Tembipuru po pegua\r\n\r\nscroll_vertical.title=Eipuru jeku’e ykeguáva\r\nscroll_vertical_label=Jeku’e ykeguáva\r\nscroll_horizontal.title=Eipuru jeku’e yvate gotyo\r\nscroll_horizontal_label=Jeku’e yvate gotyo\r\nscroll_wrapped.title=Eipuru jeku’e mbohyrupyre\r\nscroll_wrapped_label=Jeku’e mbohyrupyre\r\n\r\nspread_none.title=Ani ejuaju spreads kuatiarogue ndive\r\nspread_none_label=Spreads ỹre\r\nspread_odd.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue impar-vagui\r\nspread_odd_label=Spreads impar\r\nspread_even.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue par-vagui\r\nspread_even_label=Ipukuve uvei\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Kuatia mba’etee…\r\ndocument_properties_label=Kuatia mba’etee…\r\ndocument_properties_file_name=Marandurenda réra:\r\ndocument_properties_file_size=Marandurenda tuichakue:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Teratee:\r\ndocument_properties_author=Apohára:\r\ndocument_properties_subject=Mba’egua:\r\ndocument_properties_keywords=Jehero:\r\ndocument_properties_creation_date=Teñoihague arange:\r\ndocument_properties_modification_date=Iñambue hague arange:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Apo’ypyha:\r\ndocument_properties_producer=PDF mbosako’iha:\r\ndocument_properties_version=PDF mbojuehegua:\r\ndocument_properties_page_count=Kuatiarogue papapy:\r\ndocument_properties_page_size=Kuatiarogue tuichakue:\r\ndocument_properties_page_size_unit_inches=Amo\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=Oĩháicha\r\ndocument_properties_page_size_orientation_landscape=apaisado\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Kuatiañe’ẽ\r\ndocument_properties_page_size_name_legal=Tee\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Ñanduti jahecha pya’e:\r\ndocument_properties_linearized_yes=Añete\r\ndocument_properties_linearized_no=Ahániri\r\ndocument_properties_close=Mboty\r\n\r\nprint_progress_message=Embosako’i kuatia emonguatia hag̃ua…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Heja\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Tenda yke moambue\r\ntoggle_sidebar_notification.title=Embojopyru tenda ykegua (kuatia oguereko kora/marandurenda moirũha)\r\ntoggle_sidebar_notification2.title=Embojopyru tenda ykegua (kuatia oguereko kuaakaha/moirũha/ñuãha)\r\ntoggle_sidebar_label=Tenda yke moambue\r\ndocument_outline.title=Ehechauka kuatia rape (eikutu mokõi jey embotuicha/emomichĩ hag̃ua opavavete mba’epuru)\r\ndocument_outline_label=Kuatia apopyre\r\nattachments.title=Moirũha jehechauka\r\nattachments_label=Moirũha\r\nlayers.title=Ehechauka ñuãha (eikutu jo’a emomba’apo hag̃ua opaite ñuãha tekoypýpe)\r\nlayers_label=Ñuãha\r\nthumbs.title=Mba’emirĩ jehechauka\r\nthumbs_label=Mba’emirĩ\r\ncurrent_outline_item.title=Eheka mba’epuru ag̃aguaitéva\r\ncurrent_outline_item_label=Mba’epuru ag̃aguaitéva\r\nfindbar.title=Kuatiápe jeheka\r\nfindbar_label=Juhu\r\n\r\nadditional_layers=Ñuãha moirũguáva\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Kuatiarogue {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Kuatiarogue {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Kuatiarogue mba’emirĩ {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Juhu\r\nfind_input.placeholder=Kuatiápe jejuhu…\r\nfind_previous.title=Ejuhu ñe’ẽrysýi osẽ’ypy hague\r\nfind_previous_label=Mboyvegua\r\nfind_next.title=Eho ñe’ẽ juhupyre upeiguávape\r\nfind_next_label=Upeigua\r\nfind_highlight=Embojekuaavepa\r\nfind_match_case_label=Ejesareko taiguasu/taimichĩre\r\nfind_entire_word_label=Ñe’ẽ oĩmbáva \r\nfind_reached_top=Ojehupyty kuatia ñepyrũ, oku’ejeýta kuatia paha guive\r\nfind_reached_bottom=Ojehupyty kuatia paha, oku’ejeýta kuatia ñepyrũ guive\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} {{total}} ojojoguáva\r\nfind_match_count[two]={{current}} {{total}} ojojoguáva\r\nfind_match_count[few]={{current}} {{total}} ojojoguáva\r\nfind_match_count[many]={{current}} {{total}} ojojoguáva\r\nfind_match_count[other]={{current}} {{total}} ojojoguáva\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Hetave {{limit}} ojojoguáva\r\nfind_match_count_limit[one]=Hetave {{limit}} ojojogua\r\nfind_match_count_limit[two]=Hetave {{limit}} ojojoguáva\r\nfind_match_count_limit[few]=Hetave {{limit}} ojojoguáva\r\nfind_match_count_limit[many]=Hetave {{limit}} ojojoguáva\r\nfind_match_count_limit[other]=Hetave {{limit}} ojojoguáva\r\nfind_not_found=Ñe’ẽrysýi ojejuhu’ỹva\r\n\r\n# Error panel labels\r\nerror_more_info=Maranduve\r\nerror_less_info=Sa’ive marandu\r\nerror_close=Mboty\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Ñe’ẽmondo: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Mbojo’apy: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Marandurenda: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Tairenda: {{line}}\r\nrendering_error=Oiko jejavy ehechaukasévo kuatiarogue.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Kuatiarogue pekue\r\npage_scale_fit=Kuatiarogue ñemoĩporã\r\npage_scale_auto=Tuichakue ijeheguíva\r\npage_scale_actual=Tuichakue ag̃agua\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Oĩvaíva\r\nloading_error=Oiko jejavy PDF oñemyeñyhẽnguévo.\r\ninvalid_file_error=PDF marandurenda ndoikóiva térã ivaipyréva.\r\nmissing_file_error=Ndaipóri PDF marandurenda\r\nunexpected_response_error=Mohendahavusu mbohovái ñeha’arõ’ỹva.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Jehaipy {{type}}]\r\npassword_label=Emoinge ñe’ẽñemi eipe’a hag̃ua ko marandurenda PDF.\r\npassword_invalid=Ñe’ẽñemi ndoikóiva. Eha’ã jey.\r\npassword_ok=MONEĨ\r\npassword_cancel=Heja\r\n\r\nprinting_not_supported=Kyhyjerã: Ñembokuatia ndojokupytypái ko kundahára ndive.\r\nprinting_not_ready=Kyhyjerã: Ko PDF nahenyhẽmbái oñembokuatia hag̃uáicha.\r\nweb_fonts_disabled=Ñanduti taity oñemongéma: ndaikatumo’ãi eipuru PDF jehai’íva taity.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/gu-IN/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=પહેલાનુ પાનું\r\nprevious_label=પહેલાનુ\r\nnext.title=આગળનુ પાનું\r\nnext_label=આગળનું\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=પાનું\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=નો {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} નો {{pagesCount}})\r\n\r\nzoom_out.title=મોટુ કરો\r\nzoom_out_label=મોટુ કરો\r\nzoom_in.title=નાનું કરો\r\nzoom_in_label=નાનું કરો\r\nzoom.title=નાનું મોટુ કરો\r\npresentation_mode.title=રજૂઆત સ્થિતિમાં જાવ\r\npresentation_mode_label=રજૂઆત સ્થિતિ\r\nopen_file.title=ફાઇલ ખોલો\r\nopen_file_label=ખોલો\r\nprint.title=છાપો\r\nprint_label=છારો\r\ndownload.title=ડાઉનલોડ\r\ndownload_label=ડાઉનલોડ\r\nbookmark.title=વર્તમાન દૃશ્ય (નવી વિન્ડોમાં નકલ કરો અથવા ખોલો)\r\nbookmark_label=વર્તમાન દૃશ્ય\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=સાધનો\r\ntools_label=સાધનો\r\nfirst_page.title=પહેલાં પાનામાં જાવ\r\nfirst_page.label=પહેલાં પાનામાં જાવ\r\nfirst_page_label=પ્રથમ પાનાં પર જાવ\r\nlast_page.title=છેલ્લા પાનાં પર જાવ\r\nlast_page.label=છેલ્લા પાનામાં જાવ\r\nlast_page_label=છેલ્લા પાનાં પર જાવ\r\npage_rotate_cw.title=ઘડિયાળનાં કાંટા તરફ ફેરવો\r\npage_rotate_cw.label=ઘડિયાળનાં કાંટાની જેમ ફેરવો\r\npage_rotate_cw_label=ઘડિયાળનાં કાંટા તરફ ફેરવો\r\npage_rotate_ccw.title=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો\r\npage_rotate_ccw.label=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો\r\npage_rotate_ccw_label=ઘડિયાળનાં કાંટાની વિરુદ્દ ફેરવો\r\n\r\ncursor_text_select_tool.title=ટેક્સ્ટ પસંદગી ટૂલ સક્ષમ કરો\r\ncursor_text_select_tool_label=ટેક્સ્ટ પસંદગી ટૂલ\r\ncursor_hand_tool.title=હાથનાં સાધનને સક્રિય કરો\r\ncursor_hand_tool_label=હેન્ડ ટૂલ\r\n\r\nscroll_vertical.title=ઊભી સ્ક્રોલિંગનો ઉપયોગ કરો\r\nscroll_vertical_label=ઊભી સ્ક્રોલિંગ\r\nscroll_horizontal.title=આડી સ્ક્રોલિંગનો ઉપયોગ કરો\r\nscroll_horizontal_label=આડી સ્ક્રોલિંગ\r\nscroll_wrapped.title=આવરિત સ્ક્રોલિંગનો ઉપયોગ કરો\r\nscroll_wrapped_label=આવરિત સ્ક્રોલિંગ\r\n\r\nspread_none.title=પૃષ્ઠ સ્પ્રેડમાં જોડાવશો નહીં\r\nspread_none_label=કોઈ સ્પ્રેડ નથી\r\nspread_odd.title=એકી-ક્રમાંકિત પૃષ્ઠો સાથે પ્રારંભ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ\r\nspread_odd_label=એકી સ્પ્રેડ્સ\r\nspread_even.title=નંબર-ક્રમાંકિત પૃષ્ઠોથી શરૂ થતાં પૃષ્ઠ સ્પ્રેડમાં જોડાઓ\r\nspread_even_label=સરખું ફેલાવવું\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=દસ્તાવેજ ગુણધર્મો…\r\ndocument_properties_label=દસ્તાવેજ ગુણધર્મો…\r\ndocument_properties_file_name=ફાઇલ નામ:\r\ndocument_properties_file_size=ફાઇલ માપ:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} બાઇટ)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} બાઇટ)\r\ndocument_properties_title=શીર્ષક:\r\ndocument_properties_author=લેખક:\r\ndocument_properties_subject=વિષય:\r\ndocument_properties_keywords=કિવર્ડ:\r\ndocument_properties_creation_date=નિર્માણ તારીખ:\r\ndocument_properties_modification_date=ફેરફાર તારીખ:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=નિર્માતા:\r\ndocument_properties_producer=PDF નિર્માતા:\r\ndocument_properties_version=PDF આવૃત્તિ:\r\ndocument_properties_page_count=પાનાં ગણતરી:\r\ndocument_properties_page_size=પૃષ્ઠનું કદ:\r\ndocument_properties_page_size_unit_inches=ઇંચ\r\ndocument_properties_page_size_unit_millimeters=મીમી\r\ndocument_properties_page_size_orientation_portrait=ઉભું\r\ndocument_properties_page_size_orientation_landscape=આડુ\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=પત્ર\r\ndocument_properties_page_size_name_legal=કાયદાકીય\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=ઝડપી વૅબ દૃશ્ય:\r\ndocument_properties_linearized_yes=હા\r\ndocument_properties_linearized_no=ના\r\ndocument_properties_close=બંધ કરો\r\n\r\nprint_progress_message=છાપકામ માટે દસ્તાવેજ તૈયાર કરી રહ્યા છે…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=રદ કરો\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=ટૉગલ બાજુપટ્ટી\r\ntoggle_sidebar_notification.title=સાઇડબારને ટૉગલ કરો(દસ્તાવેજની રૂપરેખા/જોડાણો શામેલ છે)\r\ntoggle_sidebar_label=ટૉગલ બાજુપટ્ટી\r\ndocument_outline.title=દસ્તાવેજની રૂપરેખા બતાવો(બધી આઇટમ્સને વિસ્તૃત/સંકુચિત કરવા માટે ડબલ-ક્લિક કરો)\r\ndocument_outline_label=દસ્તાવેજ રૂપરેખા\r\nattachments.title=જોડાણોને બતાવો\r\nattachments_label=જોડાણો\r\nthumbs.title=થંબનેલ્સ બતાવો\r\nthumbs_label=થંબનેલ્સ\r\nfindbar.title=દસ્તાવેજમાં શોધો\r\nfindbar_label=શોધો\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=પાનું {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=પાનાં {{page}} નું થંબનેલ્સ\r\n\r\n# Find panel button title and messages\r\nfind_input.title=શોધો\r\nfind_input.placeholder=દસ્તાવેજમાં શોધો…\r\nfind_previous.title=શબ્દસમૂહની પાછલી ઘટનાને શોધો\r\nfind_previous_label=પહેલાંનુ\r\nfind_next.title=શબ્દસમૂહની આગળની ઘટનાને શોધો\r\nfind_next_label=આગળનું\r\nfind_highlight=બધુ પ્રકાશિત કરો\r\nfind_match_case_label=કેસ બંધબેસાડો\r\nfind_entire_word_label=સંપૂર્ણ શબ્દો\r\nfind_reached_top=દસ્તાવેજનાં ટોચે પહોંચી ગયા, તળિયેથી ચાલુ કરેલ હતુ\r\nfind_reached_bottom=દસ્તાવેજનાં અંતે પહોંચી ગયા, ઉપરથી ચાલુ કરેલ હતુ\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{total}} માંથી {{current}} સરખું મળ્યું\r\nfind_match_count[two]={{total}} માંથી {{current}} સરખા મળ્યાં\r\nfind_match_count[few]={{total}} માંથી {{current}} સરખા મળ્યાં\r\nfind_match_count[many]={{total}} માંથી {{current}} સરખા મળ્યાં\r\nfind_match_count[other]={{total}} માંથી {{current}} સરખા મળ્યાં\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]={{limit}} કરતાં વધુ સરખા મળ્યાં\r\nfind_match_count_limit[one]={{limit}} કરતાં વધુ સરખું મળ્યું\r\nfind_match_count_limit[two]={{limit}} કરતાં વધુ સરખા મળ્યાં\r\nfind_match_count_limit[few]={{limit}} કરતાં વધુ સરખા મળ્યાં\r\nfind_match_count_limit[many]={{limit}} કરતાં વધુ સરખા મળ્યાં\r\nfind_match_count_limit[other]={{limit}} કરતાં વધુ સરખા મળ્યાં\r\nfind_not_found=શબ્દસમૂહ મળ્યુ નથી\r\n\r\n# Error panel labels\r\nerror_more_info=વધારે જાણકારી\r\nerror_less_info=ઓછી જાણકારી\r\nerror_close=બંધ કરો\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=સંદેશો: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=સ્ટેક: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=ફાઇલ: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=વાક્ય: {{line}}\r\nrendering_error=ભૂલ ઉદ્ભવી જ્યારે પાનાંનુ રેન્ડ કરી રહ્યા હોય.\r\n\r\n# Predefined zoom values\r\npage_scale_width=પાનાની પહોળાઇ\r\npage_scale_fit=પાનું બંધબેસતુ\r\npage_scale_auto=આપમેળે નાનુંમોટુ કરો\r\npage_scale_actual=ચોક્કસ માપ\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=ભૂલ\r\nloading_error=ભૂલ ઉદ્ભવી જ્યારે PDF ને લાવી રહ્યા હોય.\r\ninvalid_file_error=અયોગ્ય અથવા ભાંગેલ PDF ફાઇલ.\r\nmissing_file_error=ગુમ થયેલ PDF ફાઇલ.\r\nunexpected_response_error=અનપેક્ષિત સર્વર પ્રતિસાદ.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=આ PDF ફાઇલને ખોલવા પાસવર્ડને દાખલ કરો.\r\npassword_invalid=અયોગ્ય પાસવર્ડ. મહેરબાની કરીને ફરી પ્રયત્ન કરો.\r\npassword_ok=બરાબર\r\npassword_cancel=રદ કરો\r\n\r\nprinting_not_supported=ચેતવણી: છાપવાનું આ બ્રાઉઝર દ્દારા સંપૂર્ણપણે આધારભૂત નથી.\r\nprinting_not_ready=Warning: PDF એ છાપવા માટે સંપૂર્ણપણે લાવેલ છે.\r\nweb_fonts_disabled=વેબ ફોન્ટ નિષ્ક્રિય થયેલ છે: ઍમ્બેડ થયેલ PDF ફોન્ટને વાપરવાનું અસમર્થ.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/he/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=דף קודם\r\nprevious_label=קודם\r\nnext.title=דף הבא\r\nnext_label=הבא\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=דף\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=מתוך {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} מתוך {{pagesCount}})\r\n\r\nzoom_out.title=התרחקות\r\nzoom_out_label=התרחקות\r\nzoom_in.title=התקרבות\r\nzoom_in_label=התקרבות\r\nzoom.title=מרחק מתצוגה\r\npresentation_mode.title=מעבר למצב מצגת\r\npresentation_mode_label=מצב מצגת\r\nopen_file.title=פתיחת קובץ\r\nopen_file_label=פתיחה\r\nprint.title=הדפסה\r\nprint_label=הדפסה\r\ndownload.title=הורדה\r\ndownload_label=הורדה\r\nbookmark.title=תצוגה נוכחית (העתקה או פתיחה בחלון חדש)\r\nbookmark_label=תצוגה נוכחית\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=כלים\r\ntools_label=כלים\r\nfirst_page.title=מעבר לעמוד הראשון\r\nfirst_page.label=מעבר לעמוד הראשון\r\nfirst_page_label=מעבר לעמוד הראשון\r\nlast_page.title=מעבר לעמוד האחרון\r\nlast_page.label=מעבר לעמוד האחרון\r\nlast_page_label=מעבר לעמוד האחרון\r\npage_rotate_cw.title=הטיה עם כיוון השעון\r\npage_rotate_cw.label=הטיה עם כיוון השעון\r\npage_rotate_cw_label=הטיה עם כיוון השעון\r\npage_rotate_ccw.title=הטיה כנגד כיוון השעון\r\npage_rotate_ccw.label=הטיה כנגד כיוון השעון\r\npage_rotate_ccw_label=הטיה כנגד כיוון השעון\r\n\r\ncursor_text_select_tool.title=הפעלת כלי בחירת טקסט\r\ncursor_text_select_tool_label=כלי בחירת טקסט\r\ncursor_hand_tool.title=הפעלת כלי היד\r\ncursor_hand_tool_label=כלי יד\r\n\r\nscroll_vertical.title=שימוש בגלילה אנכית\r\nscroll_vertical_label=גלילה אנכית\r\nscroll_horizontal.title=שימוש בגלילה אופקית\r\nscroll_horizontal_label=גלילה אופקית\r\nscroll_wrapped.title=שימוש בגלילה רציפה\r\nscroll_wrapped_label=גלילה רציפה\r\n\r\nspread_none.title=לא לצרף מפתחי עמודים\r\nspread_none_label=ללא מפתחים\r\nspread_odd.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים אי־זוגיים\r\nspread_odd_label=מפתחים אי־זוגיים\r\nspread_even.title=צירוף מפתחי עמודים שמתחילים בדפים עם מספרים זוגיים\r\nspread_even_label=מפתחים זוגיים\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=מאפייני מסמך…\r\ndocument_properties_label=מאפייני מסמך…\r\ndocument_properties_file_name=שם קובץ:\r\ndocument_properties_file_size=גודל הקובץ:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} ק״ב ({{size_b}} בתים)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} מ״ב ({{size_b}} בתים)\r\ndocument_properties_title=כותרת:\r\ndocument_properties_author=מחבר:\r\ndocument_properties_subject=נושא:\r\ndocument_properties_keywords=מילות מפתח:\r\ndocument_properties_creation_date=תאריך יצירה:\r\ndocument_properties_modification_date=תאריך שינוי:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=יוצר:\r\ndocument_properties_producer=יצרן PDF:\r\ndocument_properties_version=גרסת PDF:\r\ndocument_properties_page_count=מספר דפים:\r\ndocument_properties_page_size=גודל העמוד:\r\ndocument_properties_page_size_unit_inches=אינ׳\r\ndocument_properties_page_size_unit_millimeters=מ״מ\r\ndocument_properties_page_size_orientation_portrait=לאורך\r\ndocument_properties_page_size_orientation_landscape=לרוחב\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=מכתב\r\ndocument_properties_page_size_name_legal=דף משפטי\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=תצוגת דף מהירה:\r\ndocument_properties_linearized_yes=כן\r\ndocument_properties_linearized_no=לא\r\ndocument_properties_close=סגירה\r\n\r\nprint_progress_message=מסמך בהכנה להדפסה…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=ביטול\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=הצגה/הסתרה של סרגל הצד\r\ntoggle_sidebar_notification.title=החלפת תצוגת סרגל צד (מסמך שמכיל תוכן עניינים/קבצים מצורפים)\r\ntoggle_sidebar_notification2.title=החלפת תצוגת סרגל צד (מסמך שמכיל תוכן עניינים/קבצים מצורפים/שכבות)\r\ntoggle_sidebar_label=הצגה/הסתרה של סרגל הצד\r\ndocument_outline.title=הצגת תוכן העניינים של המסמך (לחיצה כפולה כדי להרחיב או לצמצם את כל הפריטים)\r\ndocument_outline_label=תוכן העניינים של המסמך\r\nattachments.title=הצגת צרופות\r\nattachments_label=צרופות\r\nlayers.title=הצגת שכבות (יש ללחוץ לחיצה כפולה כדי לאפס את כל השכבות למצב ברירת המחדל)\r\nlayers_label=שכבות\r\nthumbs.title=הצגת תצוגה מקדימה\r\nthumbs_label=תצוגה מקדימה\r\ncurrent_outline_item.title=מציאת פריט תוכן העניינים הנוכחי\r\ncurrent_outline_item_label=פריט תוכן העניינים הנוכחי\r\nfindbar.title=חיפוש במסמך\r\nfindbar_label=חיפוש\r\n\r\nadditional_layers=שכבות נוספות\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=עמוד {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=עמוד {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=תצוגה מקדימה של עמוד {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=חיפוש\r\nfind_input.placeholder=חיפוש במסמך…\r\nfind_previous.title=מציאת המופע הקודם של הביטוי\r\nfind_previous_label=קודם\r\nfind_next.title=מציאת המופע הבא של הביטוי\r\nfind_next_label=הבא\r\nfind_highlight=הדגשת הכול\r\nfind_match_case_label=התאמת אותיות\r\nfind_entire_word_label=מילים שלמות\r\nfind_reached_top=הגיע לראש הדף, ממשיך מלמטה\r\nfind_reached_bottom=הגיע לסוף הדף, ממשיך מלמעלה\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]=תוצאה {{current}} מתוך {{total}}\r\nfind_match_count[two]={{current}} מתוך {{total}} תוצאות\r\nfind_match_count[few]={{current}} מתוך {{total}} תוצאות\r\nfind_match_count[many]={{current}} מתוך {{total}} תוצאות\r\nfind_match_count[other]={{current}} מתוך {{total}} תוצאות\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=יותר מ־{{limit}} תוצאות\r\nfind_match_count_limit[one]=יותר מתוצאה אחת\r\nfind_match_count_limit[two]=יותר מ־{{limit}} תוצאות\r\nfind_match_count_limit[few]=יותר מ־{{limit}} תוצאות\r\nfind_match_count_limit[many]=יותר מ־{{limit}} תוצאות\r\nfind_match_count_limit[other]=יותר מ־{{limit}} תוצאות\r\nfind_not_found=הביטוי לא נמצא\r\n\r\n# Error panel labels\r\nerror_more_info=מידע נוסף\r\nerror_less_info=פחות מידע\r\nerror_close=סגירה\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js גרסה {{version}} (בנייה: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=הודעה: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=תוכן מחסנית: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=קובץ: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=שורה: {{line}}\r\nrendering_error=אירעה שגיאה בעת עיבוד הדף.\r\n\r\n# Predefined zoom values\r\npage_scale_width=רוחב העמוד\r\npage_scale_fit=התאמה לעמוד\r\npage_scale_auto=מרחק מתצוגה אוטומטי\r\npage_scale_actual=גודל אמיתי\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=שגיאה\r\nloading_error=אירעה שגיאה בעת טעינת ה־PDF.\r\ninvalid_file_error=קובץ PDF פגום או לא תקין.\r\nmissing_file_error=קובץ PDF חסר.\r\nunexpected_response_error=תגובת שרת לא צפויה.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[הערת {{type}}]\r\npassword_label=נא להכניס את הססמה לפתיחת קובץ PDF זה.\r\npassword_invalid=ססמה שגויה. נא לנסות שנית.\r\npassword_ok=אישור\r\npassword_cancel=ביטול\r\n\r\nprinting_not_supported=אזהרה: הדפסה אינה נתמכת במלואה בדפדפן זה.\r\nprinting_not_ready=אזהרה: מסמך ה־PDF לא נטען לחלוטין עד מצב שמאפשר הדפסה.\r\nweb_fonts_disabled=גופני רשת מנוטרלים: לא ניתן להשתמש בגופני PDF מוטבעים.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/hi-IN/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=पिछला पृष्ठ\r\nprevious_label=पिछला\r\nnext.title=अगला पृष्ठ\r\nnext_label=आगे\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=पृष्ठ:\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}} का\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} of {{pagesCount}})\r\n\r\nzoom_out.title=\\u0020छोटा करें\r\nzoom_out_label=\\u0020छोटा करें\r\nzoom_in.title=बड़ा करें\r\nzoom_in_label=बड़ा करें\r\nzoom.title=बड़ा-छोटा करें\r\npresentation_mode.title=प्रस्तुति अवस्था में जाएँ\r\npresentation_mode_label=\\u0020प्रस्तुति अवस्था\r\nopen_file.title=फ़ाइल खोलें\r\nopen_file_label=\\u0020खोलें\r\nprint.title=छापें\r\nprint_label=\\u0020छापें\r\ndownload.title=डाउनलोड\r\ndownload_label=डाउनलोड\r\nbookmark.title=मौजूदा दृश्य (नए विंडो में नक़ल लें या खोलें)\r\nbookmark_label=\\u0020मौजूदा दृश्य\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=औज़ार\r\ntools_label=औज़ार\r\nfirst_page.title=प्रथम पृष्ठ पर जाएँ\r\nfirst_page.label=\\u0020प्रथम पृष्ठ पर जाएँ\r\nfirst_page_label=प्रथम पृष्ठ पर जाएँ\r\nlast_page.title=अंतिम पृष्ठ पर जाएँ\r\nlast_page.label=\\u0020अंतिम पृष्ठ पर जाएँ\r\nlast_page_label=\\u0020अंतिम पृष्ठ पर जाएँ\r\npage_rotate_cw.title=घड़ी की दिशा में घुमाएँ\r\npage_rotate_cw.label=घड़ी की दिशा में घुमाएँ\r\npage_rotate_cw_label=घड़ी की दिशा में घुमाएँ\r\npage_rotate_ccw.title=घड़ी की दिशा से उल्टा घुमाएँ\r\npage_rotate_ccw.label=घड़ी की दिशा से उल्टा घुमाएँ\r\npage_rotate_ccw_label=\\u0020घड़ी की दिशा से उल्टा घुमाएँ\r\n\r\ncursor_text_select_tool.title=पाठ चयन उपकरण सक्षम करें\r\ncursor_text_select_tool_label=पाठ चयन उपकरण\r\ncursor_hand_tool.title=हस्त उपकरण सक्षम करें\r\ncursor_hand_tool_label=हस्त उपकरण\r\n\r\nscroll_vertical.title=लंबवत स्क्रॉलिंग का उपयोग करें\r\nscroll_vertical_label=लंबवत स्क्रॉलिंग\r\nscroll_horizontal.title=क्षितिजिय स्क्रॉलिंग का उपयोग करें\r\nscroll_horizontal_label=क्षितिजिय स्क्रॉलिंग\r\nscroll_wrapped.title=व्राप्पेड स्क्रॉलिंग का उपयोग करें\r\n\r\nspread_none_label=कोई स्प्रेड उपलब्ध नहीं\r\nspread_odd.title=विषम-क्रमांकित पृष्ठों से प्रारंभ होने वाले पृष्ठ स्प्रेड में शामिल हों\r\nspread_odd_label=विषम फैलाव\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=दस्तावेज़ विशेषता...\r\ndocument_properties_label=दस्तावेज़ विशेषता...\r\ndocument_properties_file_name=फ़ाइल नाम:\r\ndocument_properties_file_size=फाइल आकारः\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=शीर्षक:\r\ndocument_properties_author=लेखकः\r\ndocument_properties_subject=विषय:\r\ndocument_properties_keywords=कुंजी-शब्द:\r\ndocument_properties_creation_date=निर्माण दिनांक:\r\ndocument_properties_modification_date=संशोधन दिनांक:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=निर्माता:\r\ndocument_properties_producer=PDF उत्पादक:\r\ndocument_properties_version=PDF संस्करण:\r\ndocument_properties_page_count=पृष्ठ गिनती:\r\ndocument_properties_page_size=पृष्ठ आकार:\r\ndocument_properties_page_size_unit_inches=इंच\r\ndocument_properties_page_size_unit_millimeters=मिमी\r\ndocument_properties_page_size_orientation_portrait=पोर्ट्रेट\r\ndocument_properties_page_size_orientation_landscape=लैंडस्केप\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=पत्र\r\ndocument_properties_page_size_name_legal=क़ानूनी\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=तीव्र वेब व्यू:\r\ndocument_properties_linearized_yes=हाँ\r\ndocument_properties_linearized_no=नहीं\r\ndocument_properties_close=बंद करें\r\n\r\nprint_progress_message=छपाई के लिए दस्तावेज़ को तैयार किया जा रहा है...\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=रद्द करें\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=\\u0020स्लाइडर टॉगल करें\r\ntoggle_sidebar_notification.title=साइडबार टॉगल करें (दस्तावेज़ में रूपरेखा शामिल है/attachments)\r\ntoggle_sidebar_label=स्लाइडर टॉगल करें\r\ndocument_outline.title=दस्तावेज़ की रूपरेखा दिखाइए (सारी वस्तुओं को फलने अथवा समेटने के लिए दो बार क्लिक करें)\r\ndocument_outline_label=दस्तावेज़ आउटलाइन\r\nattachments.title=संलग्नक दिखायें\r\nattachments_label=संलग्नक\r\nthumbs.title=लघुछवियाँ दिखाएँ\r\nthumbs_label=लघु छवि\r\nfindbar.title=\\u0020दस्तावेज़ में ढूँढ़ें\r\nfindbar_label=ढूँढें\r\n\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=पृष्ठ {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=पृष्ठ {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=पृष्ठ {{page}} की लघु-छवि\r\n\r\n# Find panel button title and messages\r\nfind_input.title=ढूँढें\r\nfind_input.placeholder=दस्तावेज़ में खोजें...\r\nfind_previous.title=वाक्यांश की पिछली उपस्थिति ढूँढ़ें\r\nfind_previous_label=पिछला\r\nfind_next.title=वाक्यांश की अगली उपस्थिति ढूँढ़ें\r\nfind_next_label=अगला\r\nfind_highlight=\\u0020सभी आलोकित करें\r\nfind_match_case_label=मिलान स्थिति\r\nfind_entire_word_label=संपूर्ण शब्द\r\nfind_reached_top=पृष्ठ के ऊपर पहुंच गया, नीचे से जारी रखें\r\nfind_reached_bottom=पृष्ठ के नीचे में जा पहुँचा, ऊपर से जारी\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{total}} में {{current}} मेल\r\nfind_match_count[two]={{total}} में {{current}} मेल\r\nfind_match_count[few]={{total}} में {{current}} मेल\r\nfind_match_count[many]={{total}} में {{current}} मेल\r\nfind_match_count[other]={{total}} में {{current}} मेल\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]={{limit}} से अधिक मेल\r\nfind_match_count_limit[one]={{limit}} से अधिक मेल\r\nfind_match_count_limit[two]={{limit}} से अधिक मेल\r\nfind_match_count_limit[few]={{limit}} से अधिक मेल\r\nfind_match_count_limit[many]={{limit}} से अधिक मेल\r\nfind_match_count_limit[other]={{limit}} से अधिक मेल\r\nfind_not_found=वाक्यांश नहीं मिला\r\n\r\n# Error panel labels\r\nerror_more_info=अधिक सूचना\r\nerror_less_info=कम सूचना\r\nerror_close=बंद करें\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=\\u0020संदेश: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=स्टैक: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=फ़ाइल: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=पंक्ति: {{line}}\r\nrendering_error=पृष्ठ रेंडरिंग के दौरान त्रुटि आई.\r\n\r\n# Predefined zoom values\r\npage_scale_width=\\u0020पृष्ठ चौड़ाई\r\npage_scale_fit=पृष्ठ फिट\r\npage_scale_auto=स्वचालित जूम\r\npage_scale_actual=वास्तविक आकार\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=त्रुटि\r\nloading_error=PDF लोड करते समय एक त्रुटि हुई.\r\ninvalid_file_error=अमान्य या भ्रष्ट PDF फ़ाइल.\r\nmissing_file_error=\\u0020अनुपस्थित PDF फ़ाइल.\r\nunexpected_response_error=अप्रत्याशित सर्वर प्रतिक्रिया.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=\\u0020[{{type}} Annotation]\r\npassword_label=इस PDF फ़ाइल को खोलने के लिए कृपया कूटशब्द भरें.\r\npassword_invalid=अवैध कूटशब्द, कृपया फिर कोशिश करें.\r\npassword_ok=OK\r\npassword_cancel=रद्द करें\r\n\r\nprinting_not_supported=चेतावनी: इस ब्राउज़र पर छपाई पूरी तरह से समर्थित नहीं है.\r\nprinting_not_ready=चेतावनी: PDF छपाई के लिए पूरी तरह से लोड नहीं है.\r\nweb_fonts_disabled=वेब फॉन्ट्स निष्क्रिय हैं: अंतःस्थापित PDF फॉन्टस के उपयोग में असमर्थ.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/hr/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Prethodna stranica\r\nprevious_label=Prethodna\r\nnext.title=Sljedeća stranica\r\nnext_label=Sljedeća\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Stranica\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=od {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} od {{pagesCount}})\r\n\r\nzoom_out.title=Umanji\r\nzoom_out_label=Umanji\r\nzoom_in.title=Uvećaj\r\nzoom_in_label=Uvećaj\r\nzoom.title=Zumiranje\r\npresentation_mode.title=Prebaci u prezentacijski način rada\r\npresentation_mode_label=Prezentacijski način rada\r\nopen_file.title=Otvori datoteku\r\nopen_file_label=Otvori\r\nprint.title=Ispiši\r\nprint_label=Ispiši\r\ndownload.title=Preuzmi\r\ndownload_label=Preuzmi\r\nbookmark.title=Trenutačni prikaz (kopiraj ili otvori u novom prozoru)\r\nbookmark_label=Trenutačni prikaz\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Alati\r\ntools_label=Alati\r\nfirst_page.title=Idi na prvu stranicu\r\nfirst_page.label=Idi na prvu stranicu\r\nfirst_page_label=Idi na prvu stranicu\r\nlast_page.title=Idi na posljednju stranicu\r\nlast_page.label=Idi na posljednju stranicu\r\nlast_page_label=Idi na posljednju stranicu\r\npage_rotate_cw.title=Rotiraj u smjeru kazaljke na satu\r\npage_rotate_cw.label=Rotiraj u smjeru kazaljke na satu\r\npage_rotate_cw_label=Rotiraj u smjeru kazaljke na satu\r\npage_rotate_ccw.title=Rotiraj obrnutno od smjera kazaljke na satu\r\npage_rotate_ccw.label=Rotiraj obrnutno od smjera kazaljke na satu\r\npage_rotate_ccw_label=Rotiraj obrnutno od smjera kazaljke na satu\r\n\r\ncursor_text_select_tool.title=Omogući alat za označavanje teksta\r\ncursor_text_select_tool_label=Alat za označavanje teksta\r\ncursor_hand_tool.title=Omogući ručni alat\r\ncursor_hand_tool_label=Ručni alat\r\n\r\nscroll_vertical.title=Koristi okomito pomicanje\r\nscroll_vertical_label=Okomito pomicanje\r\nscroll_horizontal.title=Koristi vodoravno pomicanje\r\nscroll_horizontal_label=Vodoravno pomicanje\r\nscroll_wrapped.title=Koristi kontinuirani raspored stranica\r\nscroll_wrapped_label=Kontinuirani raspored stranica\r\n\r\nspread_none.title=Ne izrađuj duplerice\r\nspread_none_label=Pojedinačne stranice\r\nspread_odd.title=Izradi duplerice koje počinju s neparnim stranicama\r\nspread_odd_label=Neparne duplerice\r\nspread_even.title=Izradi duplerice koje počinju s parnim stranicama\r\nspread_even_label=Parne duplerice\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Svojstva dokumenta...\r\ndocument_properties_label=Svojstva dokumenta...\r\ndocument_properties_file_name=Naziv datoteke:\r\ndocument_properties_file_size=Veličina datoteke:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bajtova)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bajtova)\r\ndocument_properties_title=Naslov:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Predmet:\r\ndocument_properties_keywords=Ključne riječi:\r\ndocument_properties_creation_date=Datum stvaranja:\r\ndocument_properties_modification_date=Datum promjene:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Stvaratelj:\r\ndocument_properties_producer=PDF stvaratelj:\r\ndocument_properties_version=PDF verzija:\r\ndocument_properties_page_count=Broj stranica:\r\ndocument_properties_page_size=Dimenzije stranice:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=uspravno\r\ndocument_properties_page_size_orientation_landscape=položeno\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Brzi web pregled:\r\ndocument_properties_linearized_yes=Da\r\ndocument_properties_linearized_no=Ne\r\ndocument_properties_close=Zatvori\r\n\r\nprint_progress_message=Pripremanje dokumenta za ispis…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Odustani\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Prikaži/sakrij bočnu traku\r\ntoggle_sidebar_notification.title=Prikazivanje i sklanjanje bočne trake (dokument sadrži strukturu/privitke)\r\ntoggle_sidebar_notification2.title=Prikazivanje i sklanjanje bočne trake (dokument sadrži strukturu/privitke/slojeve)\r\ntoggle_sidebar_label=Prikaži/sakrij bočnu traku\r\ndocument_outline.title=Prikaži strukturu dokumenta (dvostruki klik za rasklapanje/sklapanje svih stavki)\r\ndocument_outline_label=Struktura dokumenta\r\nattachments.title=Prikaži privitke\r\nattachments_label=Privitci\r\nlayers.title=Prikaži slojeve (dvoklik za vraćanje svih slojeva u zadano stanje)\r\nlayers_label=Slojevi\r\nthumbs.title=Prikaži minijature\r\nthumbs_label=Minijature\r\ncurrent_outline_item.title=Pronađi trenutačni element strukture\r\ncurrent_outline_item_label=Trenutačni element strukture\r\nfindbar.title=Pronađi u dokumentu\r\nfindbar_label=Pronađi\r\n\r\nadditional_layers=Dodatni slojevi\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Stranica br. {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Stranica {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Minijatura stranice {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Pronađi\r\nfind_input.placeholder=Pronađi u dokumentu …\r\nfind_previous.title=Pronađi prethodno pojavljivanje ovog izraza\r\nfind_previous_label=Prethodno\r\nfind_next.title=Pronađi sljedeće pojavljivanje ovog izraza\r\nfind_next_label=Sljedeće\r\nfind_highlight=Istankni sve\r\nfind_match_case_label=Razlikovanje velikih i malih slova\r\nfind_entire_word_label=Cijele riječi\r\nfind_reached_top=Dosegnut početak dokumenta, nastavak s kraja\r\nfind_reached_bottom=Dosegnut kraj dokumenta, nastavak s početka\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} od {{total}} se podudara\r\nfind_match_count[two]={{current}} od {{total}} se podudara\r\nfind_match_count[few]={{current}} od {{total}} se podudara\r\nfind_match_count[many]={{current}} od {{total}} se podudara\r\nfind_match_count[other]={{current}} od {{total}} se podudara\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Više od {{limit}} podudaranja\r\nfind_match_count_limit[one]=Više od {{limit}} podudaranja\r\nfind_match_count_limit[two]=Više od {{limit}} podudaranja\r\nfind_match_count_limit[few]=Više od {{limit}} podudaranja\r\nfind_match_count_limit[many]=Više od {{limit}} podudaranja\r\nfind_match_count_limit[other]=Više od {{limit}} podudaranja\r\nfind_not_found=Izraz nije pronađen\r\n\r\n# Error panel labels\r\nerror_more_info=Više informacija\r\nerror_less_info=Manje informacija\r\nerror_close=Zatvori\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Poruka: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stog: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Datoteka: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Redak: {{line}}\r\nrendering_error=Došlo je do greške prilikom iscrtavanja stranice.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Prilagodi širini prozora\r\npage_scale_fit=Prilagodi veličini prozora\r\npage_scale_auto=Automatsko zumiranje\r\npage_scale_actual=Stvarna veličina\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}} %\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Greška\r\nloading_error=Došlo je do greške pri učitavanju PDF-a.\r\ninvalid_file_error=Neispravna ili oštećena PDF datoteka.\r\nmissing_file_error=Nedostaje PDF datoteka.\r\nunexpected_response_error=Neočekivani odgovor poslužitelja.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Bilješka]\r\npassword_label=Za otvoranje ove PDF datoteku upiši lozinku.\r\npassword_invalid=Neispravna lozinka. Pokušaj ponovo.\r\npassword_ok=U redu\r\npassword_cancel=Odustani\r\n\r\nprinting_not_supported=Upozorenje: Ovaj preglednik ne podržava u potpunosti ispisivanje.\r\nprinting_not_ready=Upozorenje: PDF nije u potpunosti učitan za ispis.\r\nweb_fonts_disabled=Web fontovi su deaktivirani: nije moguće koristiti ugrađene PDF fontove.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/hsb/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Předchadna strona\r\nprevious_label=Wróćo\r\nnext.title=Přichodna strona\r\nnext_label=Dale\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Strona\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=z {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} z {{pagesCount}})\r\n\r\nzoom_out.title=Pomjeńšić\r\nzoom_out_label=Pomjeńšić\r\nzoom_in.title=Powjetšić\r\nzoom_in_label=Powjetšić\r\nzoom.title=Skalowanje\r\npresentation_mode.title=Do prezentaciskeho modusa přeńć\r\npresentation_mode_label=Prezentaciski modus\r\nopen_file.title=Dataju wočinić\r\nopen_file_label=Wočinić\r\nprint.title=Ćišćeć\r\nprint_label=Ćišćeć\r\ndownload.title=Sćahnyć\r\ndownload_label=Sćahnyć\r\nbookmark.title=Aktualny napohlad (kopěrować abo w nowym woknje wočinić)\r\nbookmark_label=Aktualny napohlad\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Nastroje\r\ntools_label=Nastroje\r\nfirst_page.title=K prěnjej stronje\r\nfirst_page.label=K prěnjej stronje\r\nfirst_page_label=K prěnjej stronje\r\nlast_page.title=K poslednjej stronje\r\nlast_page.label=K poslednjej stronje\r\nlast_page_label=K poslednjej stronje\r\npage_rotate_cw.title=K směrej časnika wjerćeć\r\npage_rotate_cw.label=K směrej časnika wjerćeć\r\npage_rotate_cw_label=K směrej časnika wjerćeć\r\npage_rotate_ccw.title=Přećiwo směrej časnika wjerćeć\r\npage_rotate_ccw.label=Přećiwo směrej časnika wjerćeć\r\npage_rotate_ccw_label=Přećiwo směrej časnika wjerćeć\r\n\r\ncursor_text_select_tool.title=Nastroj za wuběranje teksta zmóžnić\r\ncursor_text_select_tool_label=Nastroj za wuběranje teksta\r\ncursor_hand_tool.title=Ručny nastroj zmóžnić\r\ncursor_hand_tool_label=Ručny nastroj\r\n\r\nscroll_vertical.title=Wertikalne suwanje wužiwać\r\nscroll_vertical_label=Wertikalnje suwanje\r\nscroll_horizontal.title=Horicontalne suwanje wužiwać\r\nscroll_horizontal_label=Horicontalne suwanje\r\nscroll_wrapped.title=Postupne suwanje wužiwać\r\nscroll_wrapped_label=Postupne suwanje\r\n\r\nspread_none.title=Strony njezwjazać\r\nspread_none_label=Žana dwójna strona\r\nspread_odd.title=Strony započinajo z njerunymi stronami zwjazać\r\nspread_odd_label=Njerune strony\r\nspread_even.title=Strony započinajo z runymi stronami zwjazać\r\nspread_even_label=Rune strony\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumentowe kajkosće…\r\ndocument_properties_label=Dokumentowe kajkosće…\r\ndocument_properties_file_name=Mjeno dataje:\r\ndocument_properties_file_size=Wulkosć dataje:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bajtow)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bajtow)\r\ndocument_properties_title=Titul:\r\ndocument_properties_author=Awtor:\r\ndocument_properties_subject=Předmjet:\r\ndocument_properties_keywords=Klučowe słowa:\r\ndocument_properties_creation_date=Datum wutworjenja:\r\ndocument_properties_modification_date=Datum změny:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Awtor:\r\ndocument_properties_producer=PDF-zhotowjer:\r\ndocument_properties_version=PDF-wersija:\r\ndocument_properties_page_count=Ličba stronow:\r\ndocument_properties_page_size=Wulkosć strony:\r\ndocument_properties_page_size_unit_inches=cól\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=wysoki format\r\ndocument_properties_page_size_orientation_landscape=prěčny format\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Fast Web View:\r\ndocument_properties_linearized_yes=Haj\r\ndocument_properties_linearized_no=Ně\r\ndocument_properties_close=Začinić\r\n\r\nprint_progress_message=Dokument so za ćišćenje přihotuje…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Přetorhnyć\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Bóčnicu pokazać/schować\r\ntoggle_sidebar_notification.title=Bóčnicu přepinać (dokument wobsahuje wobrys/přiwěški)\r\ntoggle_sidebar_notification2.title=Bóčnicu přepinać (dokument rozrjad/přiwěški/woršty wobsahuje)\r\ntoggle_sidebar_label=Bóčnicu pokazać/schować\r\ndocument_outline.title=Dokumentowy naćisk pokazać (dwójne kliknjenje, zo bychu so wšě zapiski pokazali/schowali)\r\ndocument_outline_label=Dokumentowa struktura\r\nattachments.title=Přiwěški pokazać\r\nattachments_label=Přiwěški\r\nlayers.title=Woršty pokazać (klikńće dwójce, zo byšće wšě woršty na standardny staw wróćo stajił)\r\nlayers_label=Woršty\r\nthumbs.title=Miniatury pokazać\r\nthumbs_label=Miniatury\r\ncurrent_outline_item.title=Aktualny rozrjadowy zapisk pytać\r\ncurrent_outline_item_label=Aktualny rozrjadowy zapisk\r\nfindbar.title=W dokumenće pytać\r\nfindbar_label=Pytać\r\n\r\nadditional_layers=Dalše woršty\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Strona {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Strona {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura strony {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Pytać\r\nfind_input.placeholder=W dokumenće pytać…\r\nfind_previous.title=Předchadne wustupowanje pytanskeho wuraza pytać\r\nfind_previous_label=Wróćo\r\nfind_next.title=Přichodne wustupowanje pytanskeho wuraza pytać\r\nfind_next_label=Dale\r\nfind_highlight=Wšě wuzběhnyć\r\nfind_match_case_label=Wulkopisanje wobkedźbować\r\nfind_entire_word_label=Cyłe słowa\r\nfind_reached_top=Spočatk dokumenta docpěty, pokročuje so z kóncom\r\nfind_reached_bottom=Kónc dokument docpěty, pokročuje so ze spočatkom\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} z {{total}} wotpowědnika\r\nfind_match_count[two]={{current}} z {{total}} wotpowědnikow\r\nfind_match_count[few]={{current}} z {{total}} wotpowědnikow\r\nfind_match_count[many]={{current}} z {{total}} wotpowědnikow\r\nfind_match_count[other]={{current}} z {{total}} wotpowědnikow\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Wjace hač {{limit}} wotpowědnikow\r\nfind_match_count_limit[one]=Wjace hač {{limit}} wotpowědnik\r\nfind_match_count_limit[two]=Wjace hač {{limit}} wotpowědnikaj\r\nfind_match_count_limit[few]=Wjace hač {{limit}} wotpowědniki\r\nfind_match_count_limit[many]=Wjace hač {{limit}} wotpowědnikow\r\nfind_match_count_limit[other]=Wjace hač {{limit}} wotpowědnikow\r\nfind_not_found=Pytanski wuraz njeje so namakał\r\n\r\n# Error panel labels\r\nerror_more_info=Wjace informacijow\r\nerror_less_info=Mjenje informacijow\r\nerror_close=Začinić\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Zdźělenka: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Lisćina zawołanjow: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Dataja: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linka: {{line}}\r\nrendering_error=Při zwobraznjenju strony je zmylk wustupił.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Šěrokosć strony\r\npage_scale_fit=Wulkosć strony\r\npage_scale_auto=Awtomatiske skalowanje\r\npage_scale_actual=Aktualna wulkosć\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Zmylk\r\nloading_error=Při začitowanju PDF je zmylk wustupił.\r\ninvalid_file_error=Njepłaćiwa abo wobškodźena PDF-dataja.\r\nmissing_file_error=Falowaca PDF-dataja.\r\nunexpected_response_error=Njewočakowana serwerowa wotmołwa.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Typ přispomnjenki: {{type}}]\r\npassword_label=Zapodajće hesło, zo byšće PDF-dataju wočinił.\r\npassword_invalid=Njepłaćiwe hesło. Prošu spytajće hišće raz.\r\npassword_ok=W porjadku\r\npassword_cancel=Přetorhnyć\r\n\r\nprinting_not_supported=Warnowanje: Ćišćenje so přez tutón wobhladowak połnje njepodpěruje.\r\nprinting_not_ready=Warnowanje: PDF njeje so za ćišćenje dospołnje začitał.\r\nweb_fonts_disabled=Webpisma su znjemóžnjene: njeje móžno, zasadźene PDF-pisma wužiwać.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/hu/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Előző oldal\r\nprevious_label=Előző\r\nnext.title=Következő oldal\r\nnext_label=Tovább\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Oldal\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=összesen: {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} / {{pagesCount}})\r\n\r\nzoom_out.title=Kicsinyítés\r\nzoom_out_label=Kicsinyítés\r\nzoom_in.title=Nagyítás\r\nzoom_in_label=Nagyítás\r\nzoom.title=Nagyítás\r\npresentation_mode.title=Váltás bemutató módba\r\npresentation_mode_label=Bemutató mód\r\nopen_file.title=Fájl megnyitása\r\nopen_file_label=Megnyitás\r\nprint.title=Nyomtatás\r\nprint_label=Nyomtatás\r\ndownload.title=Letöltés\r\ndownload_label=Letöltés\r\nbookmark.title=Jelenlegi nézet (másolás vagy megnyitás új ablakban)\r\nbookmark_label=Aktuális nézet\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Eszközök\r\ntools_label=Eszközök\r\nfirst_page.title=Ugrás az első oldalra\r\nfirst_page.label=Ugrás az első oldalra\r\nfirst_page_label=Ugrás az első oldalra\r\nlast_page.title=Ugrás az utolsó oldalra\r\nlast_page.label=Ugrás az utolsó oldalra\r\nlast_page_label=Ugrás az utolsó oldalra\r\npage_rotate_cw.title=Forgatás az óramutató járásával egyezően\r\npage_rotate_cw.label=Forgatás az óramutató járásával egyezően\r\npage_rotate_cw_label=Forgatás az óramutató járásával egyezően\r\npage_rotate_ccw.title=Forgatás az óramutató járásával ellentétesen\r\npage_rotate_ccw.label=Forgatás az óramutató járásával ellentétesen\r\npage_rotate_ccw_label=Forgatás az óramutató járásával ellentétesen\r\n\r\ncursor_text_select_tool.title=Szövegkijelölő eszköz bekapcsolása\r\ncursor_text_select_tool_label=Szövegkijelölő eszköz\r\ncursor_hand_tool.title=Kéz eszköz bekapcsolása\r\ncursor_hand_tool_label=Kéz eszköz\r\n\r\nscroll_vertical.title=Függőleges görgetés használata\r\nscroll_vertical_label=Függőleges görgetés\r\nscroll_horizontal.title=Vízszintes görgetés használata\r\nscroll_horizontal_label=Vízszintes görgetés\r\nscroll_wrapped.title=Rácsos elrendezés használata\r\nscroll_wrapped_label=Rácsos elrendezés\r\n\r\nspread_none.title=Ne tapassza össze az oldalakat\r\nspread_none_label=Nincs összetapasztás\r\nspread_odd.title=Lapok összetapasztása, a páratlan számú oldalakkal kezdve\r\nspread_odd_label=Összetapasztás: páratlan\r\nspread_even.title=Lapok összetapasztása, a páros számú oldalakkal kezdve\r\nspread_even_label=Összetapasztás: páros\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumentum tulajdonságai…\r\ndocument_properties_label=Dokumentum tulajdonságai…\r\ndocument_properties_file_name=Fájlnév:\r\ndocument_properties_file_size=Fájlméret:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bájt)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bájt)\r\ndocument_properties_title=Cím:\r\ndocument_properties_author=Szerző:\r\ndocument_properties_subject=Tárgy:\r\ndocument_properties_keywords=Kulcsszavak:\r\ndocument_properties_creation_date=Létrehozás dátuma:\r\ndocument_properties_modification_date=Módosítás dátuma:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Létrehozta:\r\ndocument_properties_producer=PDF előállító:\r\ndocument_properties_version=PDF verzió:\r\ndocument_properties_page_count=Oldalszám:\r\ndocument_properties_page_size=Lapméret:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=álló\r\ndocument_properties_page_size_orientation_landscape=fekvő\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Jogi információk\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Gyors webes nézet:\r\ndocument_properties_linearized_yes=Igen\r\ndocument_properties_linearized_no=Nem\r\ndocument_properties_close=Bezárás\r\n\r\nprint_progress_message=Dokumentum előkészítése nyomtatáshoz…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Mégse\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Oldalsáv be/ki\r\ntoggle_sidebar_notification.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket tartalmaz)\r\ntoggle_sidebar_notification2.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket/rétegeket tartalmaz)\r\ntoggle_sidebar_label=Oldalsáv be/ki\r\ndocument_outline.title=Dokumentum megjelenítése online (dupla kattintás minden elem kinyitásához/összecsukásához)\r\ndocument_outline_label=Dokumentumvázlat\r\nattachments.title=Mellékletek megjelenítése\r\nattachments_label=Van melléklet\r\nlayers.title=Rétegek megjelenítése (dupla kattintás az összes réteg alapértelmezett állapotra visszaállításához)\r\nlayers_label=Rétegek\r\nthumbs.title=Bélyegképek megjelenítése\r\nthumbs_label=Bélyegképek\r\ncurrent_outline_item.title=Jelenlegi vázlatelem megkeresése\r\ncurrent_outline_item_label=Jelenlegi vázlatelem\r\nfindbar.title=Keresés a dokumentumban\r\nfindbar_label=Keresés\r\n\r\nadditional_layers=További rétegek\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas={{page}}. oldal\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title={{page}}. oldal\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}}. oldal bélyegképe\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Keresés\r\nfind_input.placeholder=Keresés a dokumentumban…\r\nfind_previous.title=A kifejezés előző előfordulásának keresése\r\nfind_previous_label=Előző\r\nfind_next.title=A kifejezés következő előfordulásának keresése\r\nfind_next_label=Tovább\r\nfind_highlight=Összes kiemelése\r\nfind_match_case_label=Kis- és nagybetűk megkülönböztetése\r\nfind_entire_word_label=Teljes szavak\r\nfind_reached_top=A dokumentum eleje elérve, folytatás a végétől\r\nfind_reached_bottom=A dokumentum vége elérve, folytatás az elejétől\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} / {{total}} találat\r\nfind_match_count[two]={{current}} / {{total}} találat\r\nfind_match_count[few]={{current}} / {{total}} találat\r\nfind_match_count[many]={{current}} / {{total}} találat\r\nfind_match_count[other]={{current}} / {{total}} találat\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Több mint {{limit}} találat\r\nfind_match_count_limit[one]=Több mint {{limit}} találat\r\nfind_match_count_limit[two]=Több mint {{limit}} találat\r\nfind_match_count_limit[few]=Több mint {{limit}} találat\r\nfind_match_count_limit[many]=Több mint {{limit}} találat\r\nfind_match_count_limit[other]=Több mint {{limit}} találat\r\nfind_not_found=A kifejezés nem található\r\n\r\n# Error panel labels\r\nerror_more_info=További tudnivalók\r\nerror_less_info=Kevesebb információ\r\nerror_close=Bezárás\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Üzenet: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Verem: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fájl: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Sor: {{line}}\r\nrendering_error=Hiba történt az oldal feldolgozása közben.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Oldalszélesség\r\npage_scale_fit=Teljes oldal\r\npage_scale_auto=Automatikus nagyítás\r\npage_scale_actual=Valódi méret\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Hiba\r\nloading_error=Hiba történt a PDF betöltésekor.\r\ninvalid_file_error=Érvénytelen vagy sérült PDF fájl.\r\nmissing_file_error=Hiányzó PDF fájl.\r\nunexpected_response_error=Váratlan kiszolgálóválasz.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} megjegyzés]\r\npassword_label=Adja meg a jelszót a PDF fájl megnyitásához.\r\npassword_invalid=Helytelen jelszó. Próbálja újra.\r\npassword_ok=OK\r\npassword_cancel=Mégse\r\n\r\nprinting_not_supported=Figyelmeztetés: Ez a böngésző nem teljesen támogatja a nyomtatást.\r\nprinting_not_ready=Figyelmeztetés: A PDF nincs teljesen betöltve a nyomtatáshoz.\r\nweb_fonts_disabled=Webes betűkészletek letiltva: nem használhatók a beágyazott PDF betűkészletek.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/hy-AM/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Նախորդ էջը\r\nprevious_label=Նախորդը\r\nnext.title=Հաջորդ էջը\r\nnext_label=Հաջորդը\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Էջ.\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}}-ից\\u0020\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից\r\n\r\nzoom_out.title=Փոքրացնել\r\nzoom_out_label=Փոքրացնել\r\nzoom_in.title=Խոշորացնել\r\nzoom_in_label=Խոշորացնել\r\nzoom.title=Մասշտաբը\\u0020\r\npresentation_mode.title=Անցնել Ներկայացման եղանակին\r\npresentation_mode_label=Ներկայացման եղանակ\r\nopen_file.title=Բացել նիշք\r\nopen_file_label=Բացել\r\nprint.title=Տպել\r\nprint_label=Տպել\r\ndownload.title=Բեռնել\r\ndownload_label=Բեռնել\r\nbookmark.title=Ընթացիկ տեսքով (պատճենել կամ բացել նոր պատուհանում)\r\nbookmark_label=Ընթացիկ տեսքը\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Գործիքներ\r\ntools_label=Գործիքներ\r\nfirst_page.title=Անցնել առաջին էջին\r\nfirst_page.label=Անցնել առաջին էջին\r\nfirst_page_label=Անցնել առաջին էջին\r\nlast_page.title=Անցնել վերջին էջին\r\nlast_page.label=Անցնել վերջին էջին\r\nlast_page_label=Անցնել վերջին էջին\r\npage_rotate_cw.title=Պտտել ըստ ժամացույցի սլաքի\r\npage_rotate_cw.label=Պտտել ըստ ժամացույցի սլաքի\r\npage_rotate_cw_label=Պտտել ըստ ժամացույցի սլաքի\r\npage_rotate_ccw.title=Պտտել հակառակ ժամացույցի սլաքի\r\npage_rotate_ccw.label=Պտտել հակառակ ժամացույցի սլաքի\r\npage_rotate_ccw_label=Պտտել հակառակ ժամացույցի սլաքի\r\n\r\ncursor_text_select_tool.title=Միացնել գրույթ ընտրելու գործիքը\r\ncursor_text_select_tool_label=Գրույթը ընտրելու գործիք\r\ncursor_hand_tool.title=Միացնել Ձեռքի գործիքը\r\ncursor_hand_tool_label=Ձեռքի գործիք\r\n\r\nscroll_vertical.title=Օգտագործել ուղղահայաց ոլորում\r\nscroll_vertical_label=Ուղղահայաց ոլորում\r\nscroll_horizontal.title=Օգտագործել հորիզոնական ոլորում\r\nscroll_horizontal_label=Հորիզոնական ոլորում\r\nscroll_wrapped.title=Օգտագործել փաթաթված ոլորում\r\nscroll_wrapped_label=Փաթաթված ոլորում\r\n\r\nspread_none.title=Մի միացեք էջի վերածածկերին\r\nspread_none_label=Չկա վերածածկեր\r\nspread_odd.title=Միացեք էջի վերածածկերին սկսելով՝ կենտ համարակալված էջերով\r\nspread_odd_label=Կենտ վերածածկեր\r\nspread_even.title=Միացեք էջի վերածածկերին սկսելով՝ զույգ համարակալված էջերով\r\nspread_even_label=Զույգ վերածածկեր\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Փաստաթղթի հատկությունները…\r\ndocument_properties_label=Փաստաթղթի հատկությունները…\r\ndocument_properties_file_name=Նիշքի անունը.\r\ndocument_properties_file_size=Նիշք չափը.\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ)\r\ndocument_properties_title=Վերնագիր.\r\ndocument_properties_author=Հեղինակ․\r\ndocument_properties_subject=Վերնագիր.\r\ndocument_properties_keywords=Հիմնաբառ.\r\ndocument_properties_creation_date=Ստեղծելու ամսաթիվը.\r\ndocument_properties_modification_date=Փոփոխելու ամսաթիվը.\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Ստեղծող.\r\ndocument_properties_producer=PDF-ի հեղինակը.\r\ndocument_properties_version=PDF-ի տարբերակը.\r\ndocument_properties_page_count=Էջերի քանակը.\r\ndocument_properties_page_size=Էջի չափը.\r\ndocument_properties_page_size_unit_inches=ում\r\ndocument_properties_page_size_unit_millimeters=մմ\r\ndocument_properties_page_size_orientation_portrait=ուղղաձիգ\r\ndocument_properties_page_size_orientation_landscape=հորիզոնական\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Նամակ\r\ndocument_properties_page_size_name_legal=Օրինական\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Արագ վեբ դիտում․\r\ndocument_properties_linearized_yes=Այո\r\ndocument_properties_linearized_no=Ոչ\r\ndocument_properties_close=Փակել\r\n\r\nprint_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն...\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Չեղարկել\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Բացել/Փակել Կողային վահանակը\r\ntoggle_sidebar_notification.title=Փոխարկել Կողային փեղկը (փաստաթուղթը պարունակում է ուրվագիծ/կցորդներ)\r\ntoggle_sidebar_label=Բացել/Փակել Կողային վահանակը\r\ndocument_outline.title=Ցուցադրել փաստաթղթի ուրվագիծը (կրկնակի սեղմեք՝ միավորները ընդարձակելու/կոծկելու համար)\r\ndocument_outline_label=Փաստաթղթի բովանդակությունը\r\nattachments.title=Ցուցադրել կցորդները\r\nattachments_label=Կցորդներ\r\nthumbs.title=Ցուցադրել Մանրապատկերը\r\nthumbs_label=Մանրապատկերը\r\nfindbar.title=Գտնել փաստաթղթում\r\nfindbar_label=Որոնում\r\n\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Էջ {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Էջը {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Էջի մանրապատկերը {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Որոնում\r\nfind_input.placeholder=Գտնել փաստաթղթում...\r\nfind_previous.title=Գտնել անրահայտության նախորդ հանդիպումը\r\nfind_previous_label=Նախորդը\r\nfind_next.title=Գտիր արտահայտության հաջորդ հանդիպումը\r\nfind_next_label=Հաջորդը\r\nfind_highlight=Գունանշել բոլորը\r\nfind_match_case_label=Մեծ(փոքր)ատառ հաշվի առնել\r\nfind_entire_word_label=Ամբողջ բառերը\r\nfind_reached_top=Հասել եք փաստաթղթի վերևին, կշարունակվի ներքևից\r\nfind_reached_bottom=Հասել եք փաստաթղթի վերջին, կշարունակվի վերևից\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ հոգնակի(ընդհանուր) ]}\r\nfind_match_count[one]={{current}} {{total}}-ի համընկնումից\r\nfind_match_count[two]={{current}} {{total}}-ի համընկնումներից\r\nfind_match_count[few]={{current}} {{total}}-ի համընկնումներից\r\nfind_match_count[many]={{current}} {{total}}-ի համընկնումներից\r\nfind_match_count[other]={{current}} {{total}}-ի համընկնումներից\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ հոգնակի (սահմանը) ]}\r\nfind_match_count_limit[zero]=Ավելին քան {{limit}} համընկնումները\r\nfind_match_count_limit[one]=Ավելին քան {{limit}} համընկնումը\r\nfind_match_count_limit[two]=Ավելին քան {{limit}} համընկնումներներ\r\nfind_match_count_limit[few]=Ավելին քան {{limit}} համընկնումներներ\r\nfind_match_count_limit[many]=Ավելին քան {{limit}} համընկնումներներ\r\nfind_match_count_limit[other]=Ավելին քան {{limit}} համընկնումներներ\r\nfind_not_found=Արտահայտությունը չգտնվեց\r\n\r\n# Error panel labels\r\nerror_more_info=Ավելի շատ տեղեկություն\r\nerror_less_info=Քիչ տեղեկություն\r\nerror_close=Փակել\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (կառուցումը. {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Գրությունը. {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Շեղջ. {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Ֆայլ. {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Տողը. {{line}}\r\nrendering_error=Սխալ՝ էջը ստեղծելիս:\r\n\r\n# Predefined zoom values\r\npage_scale_width=Էջի լայնքը\r\npage_scale_fit=Ձգել էջը\r\npage_scale_auto=Ինքնաշխատ\r\npage_scale_actual=Իրական չափը\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Սխալ\r\nloading_error=Սխալ՝ PDF ֆայլը բացելիս։\r\ninvalid_file_error=Սխալ կամ վնասված PDF ֆայլ:\r\nmissing_file_error=PDF ֆայլը բացակայում է:\r\nunexpected_response_error=Սպասարկիչի անսպասելի պատասխան:\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Ծանոթություն]\r\npassword_label=Մուտքագրեք PDF-ի գաղտնաբառը:\r\npassword_invalid=Գաղտնաբառը սխալ է: Կրկին փորձեք:\r\npassword_ok=Լավ\r\npassword_cancel=Չեղարկել\r\n\r\nprinting_not_supported=Զգուշացում. Տպելը ամբողջությամբ չի աջակցվում դիտարկիչի կողմից։\r\nprinting_not_ready=Զգուշացում. PDF-ը ամբողջությամբ չի բեռնավորվել տպելու համար:\r\nweb_fonts_disabled=Վեբ-տառատեսակները անջատված են. հնարավոր չէ օգտագործել ներկառուցված PDF տառատեսակները:\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/hye/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Նախորդ էջ\r\nprevious_label=Նախորդը\r\nnext.title=Յաջորդ էջ\r\nnext_label=Յաջորդը\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=էջ\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}}-ից\\u0020\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}}-ը {{pagesCount}})-ից\r\n\r\nzoom_out.title=Փոքրացնել\r\nzoom_out_label=Փոքրացնել\r\nzoom_in.title=Խոշորացնել\r\nzoom_in_label=Խոշորացնել\r\nzoom.title=Չափափոխում\r\npresentation_mode.title=Անցնել ներկայացման եղանակին\r\npresentation_mode_label=Ներկայացման եղանակ\r\nopen_file.title=Բացել նիշքը\r\nopen_file_label=Բացել\r\nprint.title=Տպել\r\nprint_label=Տպել\r\ndownload.title=Բեռնել\r\ndownload_label=Բեռնել\r\nbookmark.title=Ընթացիկ տեսքով (պատճէնել կամ բացել նոր պատուհանում)\r\nbookmark_label=Ընթացիկ տեսք\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Գործիքներ\r\ntools_label=Գործիքներ\r\nfirst_page.title=Գնալ դէպի առաջին էջ\r\nfirst_page.label=Գնալ դէպի առաջին էջ\r\nfirst_page_label=Գնալ դէպի առաջին էջ\r\nlast_page.title=Գնալ դէպի վերջին էջ\r\nlast_page.label=Գնալ դէպի վերջին էջ\r\nlast_page_label=Գնալ դէպի վերջին էջ\r\npage_rotate_cw.title=Պտտել ժամացոյցի սլաքի ուղղութեամբ\r\npage_rotate_cw.label=Պտտել ժամացոյցի սլաքի ուղղութեամբ\r\npage_rotate_cw_label=Պտտել ժամացոյցի սլաքի ուղղութեամբ\r\npage_rotate_ccw.title=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ\r\npage_rotate_ccw.label=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ\r\npage_rotate_ccw_label=Պտտել ժամացոյցի սլաքի հակառակ ուղղութեամբ\r\n\r\ncursor_text_select_tool.title=Միացնել գրոյթ ընտրելու գործիքը\r\ncursor_text_select_tool_label=Գրուածք ընտրելու գործիք\r\ncursor_hand_tool.title=Միացնել ձեռքի գործիքը\r\ncursor_hand_tool_label=Ձեռքի գործիք\r\n\r\nscroll_vertical.title=Աւգտագործել ուղղահայեաց ոլորում\r\nscroll_vertical_label=Ուղղահայեաց ոլորում\r\nscroll_horizontal.title=Աւգտագործել հորիզոնական ոլորում\r\nscroll_horizontal_label=Հորիզոնական ոլորում\r\nscroll_wrapped.title=Աւգտագործել փաթաթուած ոլորում\r\nscroll_wrapped_label=Փաթաթուած ոլորում\r\n\r\nspread_none.title=Մի միացէք էջի կոնտեքստում\r\nspread_none_label=Չկայ կոնտեքստ\r\nspread_odd.title=Միացէք էջի կոնտեքստին սկսելով՝ կենտ համարակալուած էջերով\r\nspread_odd_label=Տարաւրինակ կոնտեքստ\r\nspread_even.title=Միացէք էջի կոնտեքստին սկսելով՝ զոյգ համարակալուած էջերով\r\nspread_even_label=Հաւասար վերածածկեր\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Փաստաթղթի հատկութիւնները…\r\ndocument_properties_label=Փաստաթղթի յատկութիւնները…\r\ndocument_properties_file_name=Նիշքի անունը․\r\ndocument_properties_file_size=Նիշք չափը.\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} ԿԲ ({{size_b}} բայթ)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} ՄԲ ({{size_b}} բայթ)\r\ndocument_properties_title=Վերնագիր\r\ndocument_properties_author=Հեղինակ․\r\ndocument_properties_subject=առարկայ\r\ndocument_properties_keywords=Հիմնաբառեր\r\ndocument_properties_creation_date=Ստեղծման ամսաթիւ\r\ndocument_properties_modification_date=Փոփոխութեան ամսաթիւ.\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Ստեղծող\r\ndocument_properties_producer=PDF-ի Արտադրողը.\r\ndocument_properties_version=PDF-ի տարբերակը.\r\ndocument_properties_page_count=Էջերի քանակը.\r\ndocument_properties_page_size=Էջի չափը.\r\ndocument_properties_page_size_unit_inches=ում\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=ուղղաձիգ\r\ndocument_properties_page_size_orientation_landscape=հորիզոնական\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Նամակ\r\ndocument_properties_page_size_name_legal=Աւրինական\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Արագ վեբ դիտում․\r\ndocument_properties_linearized_yes=Այո\r\ndocument_properties_linearized_no=Ոչ\r\ndocument_properties_close=Փակել\r\n\r\nprint_progress_message=Նախապատրաստում է փաստաթուղթը տպելուն…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Չեղարկել\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Փոխարկել կողային վահանակը\r\ntoggle_sidebar_notification.title=Փոխարկել կողային վահանակը (փաստաթուղթը պարունակում է ուրուագիծ/կցորդ)\r\ntoggle_sidebar_notification2.title=Փոխանջատել կողմնասիւնը (փաստաթուղթը պարունակում է ուրուագիծ/կցորդներ/շերտեր)\r\ntoggle_sidebar_label=Փոխարկել կողային վահանակը\r\ndocument_outline.title=Ցուցադրել փաստաթղթի ուրուագիծը (կրկնակի սեղմէք՝ միաւորները ընդարձակելու/կոծկելու համար)\r\ndocument_outline_label=Փաստաթղթի ուրուագիծ\r\nattachments.title=Ցուցադրել կցորդները\r\nattachments_label=Կցորդներ\r\nlayers.title=Ցուցադրել շերտերը (կրկնահպել վերակայելու բոլոր շերտերը սկզբնադիր վիճակի)\r\nlayers_label=Շերտեր\r\nthumbs.title=Ցուցադրել մանրապատկերը\r\nthumbs_label=Մանրապատկեր\r\ncurrent_outline_item.title=Գտէք ընթացիկ գծագրման տարրը\r\ncurrent_outline_item_label=Ընթացիկ գծագրման տարր\r\nfindbar.title=Գտնել փաստաթղթում\r\nfindbar_label=Որոնում\r\n\r\nadditional_layers=Լրացուցիչ շերտեր\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Էջ {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Էջը {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Էջի մանրապատկերը {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Որոնում\r\nfind_input.placeholder=Գտնել փաստաթղթում…\r\nfind_previous.title=Գտնել արտայայտութեան նախորդ արտայայտութիւնը\r\nfind_previous_label=Նախորդը\r\nfind_next.title=Գտիր արտայայտութեան յաջորդ արտայայտութիւնը\r\nfind_next_label=Հաջորդը\r\nfind_highlight=Գունանշել բոլորը\r\nfind_match_case_label=Հաշուի առնել հանգամանքը\r\nfind_entire_word_label=Ամբողջ բառերը\r\nfind_reached_top=Հասել եք փաստաթղթի վերեւին,շարունակել ներքեւից\r\nfind_reached_bottom=Հասել էք փաստաթղթի վերջին, շարունակել վերեւից\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ հոգնակի(ընդհանուր) ]}\r\nfind_match_count[one]={{current}} {{total}}-ի համընկնումից\r\nfind_match_count[two]={{current}} {{total}}-ի համընկնումներից\r\nfind_match_count[few]={{current}} {{total}}-ի համընկնումներից\r\nfind_match_count[many]={{current}} {{total}}-ի համընկնումներից\r\nfind_match_count[other]={{current}} {{total}}-ի համընկնումներից\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ հոգնակի (սահմանը) ]}\r\nfind_match_count_limit[zero]=Աւելին քան {{limit}} համընկնումները\r\nfind_match_count_limit[one]=Աւելին քան {{limit}} համընկնումը\r\nfind_match_count_limit[two]=Աւելին քան {{limit}} համընկնումները\r\nfind_match_count_limit[few]=Աւելին քան {{limit}} համընկնումները\r\nfind_match_count_limit[many]=Աւելին քան {{limit}} համընկնումները\r\nfind_match_count_limit[other]=Աւելին քան {{limit}} համընկնումները\r\nfind_not_found=Արտայայտութիւնը չգտնուեց\r\n\r\n# Error panel labels\r\nerror_more_info=Աւելի շատ տեղեկութիւն\r\nerror_less_info=Քիչ տեղեկութիւն\r\nerror_close=Փակել\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (կառուցումը. {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Գրութիւնը. {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Շեղջ. {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=նիշք․ {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Տողը. {{line}}\r\nrendering_error=Սխալ է տեղի ունեցել էջի մեկնաբանման ժամանակ\r\n\r\n# Predefined zoom values\r\npage_scale_width=Էջի լայնութիւն\r\npage_scale_fit=Հարմարեցնել էջը\r\npage_scale_auto=Ինքնաշխատ չափափոխում\r\npage_scale_actual=Իրական չափը\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Սխալ\r\nloading_error=PDF նիշքը բացելիս սխալ է տեղի ունեցել։\r\ninvalid_file_error=Սխալ կամ վնասուած PDF նիշք։\r\nmissing_file_error=PDF նիշքը բացակաիւմ է։\r\nunexpected_response_error=Սպասարկիչի անսպասելի պատասխան։\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Ծանոթութիւն]\r\npassword_label=Մուտքագրէք  գաղտնաբառը այս PDF նիշքը բացելու համար\r\npassword_invalid=Գաղտնաբառը սխալ է: Կրկին փորձէք:\r\npassword_ok=Լաւ\r\npassword_cancel=Չեղարկել\r\n\r\nprinting_not_supported=Զգուշացում. Տպելը ամբողջութեամբ չի աջակցուում զննարկիչի կողմից։\r\nprinting_not_ready=Զգուշացում. PDF֊ը ամբողջութեամբ չի բեռնաւորուել տպելու համար։\r\nweb_fonts_disabled=Վեբ-տառատեսակները անջատուած են. հնարաւոր չէ աւգտագործել ներկառուցուած PDF տառատեսակները։\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ia/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Pagina previe\r\nprevious_label=Previe\r\nnext.title=Pagina sequente\r\nnext_label=Sequente\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Pagina\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=de {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} de {{pagesCount}})\r\n\r\nzoom_out.title=Distantiar\r\nzoom_out_label=Distantiar\r\nzoom_in.title=Approximar\r\nzoom_in_label=Approximar\r\nzoom.title=Zoom\r\npresentation_mode.title=Excambiar a modo presentation\r\npresentation_mode_label=Modo presentation\r\nopen_file.title=Aperir le file\r\nopen_file_label=Aperir\r\nprint.title=Imprimer\r\nprint_label=Imprimer\r\ndownload.title=Discargar\r\ndownload_label=Discargar\r\nbookmark.title=Vista actual (copiar o aperir in un nove fenestra)\r\nbookmark_label=Vista actual\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Instrumentos\r\ntools_label=Instrumentos\r\nfirst_page.title=Ir al prime pagina\r\nfirst_page.label=Ir al prime pagina\r\nfirst_page_label=Ir al prime pagina\r\nlast_page.title=Ir al prime pagina\r\nlast_page.label=Ir al prime pagina\r\nlast_page_label=Ir al prime pagina\r\npage_rotate_cw.title=Rotar in senso horari\r\npage_rotate_cw.label=Rotar in senso horari\r\npage_rotate_cw_label=Rotar in senso horari\r\npage_rotate_ccw.title=Rotar in senso antihorari\r\npage_rotate_ccw.label=Rotar in senso antihorari\r\npage_rotate_ccw_label=Rotar in senso antihorari\r\n\r\ncursor_text_select_tool.title=Activar le instrumento de selection de texto\r\ncursor_text_select_tool_label=Instrumento de selection de texto\r\ncursor_hand_tool.title=Activar le instrumento mano\r\ncursor_hand_tool_label=Instrumento mano\r\n\r\nscroll_vertical.title=Usar rolamento vertical\r\nscroll_vertical_label=Rolamento vertical\r\nscroll_horizontal.title=Usar rolamento horizontal\r\nscroll_horizontal_label=Rolamento horizontal\r\nscroll_wrapped.title=Usar rolamento incapsulate\r\nscroll_wrapped_label=Rolamento incapsulate\r\n\r\nspread_none.title=Non junger paginas dual\r\nspread_none_label=Sin paginas dual\r\nspread_odd.title=Junger paginas dual a partir de paginas con numeros impar\r\nspread_odd_label=Paginas dual impar\r\nspread_even.title=Junger paginas dual a partir de paginas con numeros par\r\nspread_even_label=Paginas dual par\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Proprietates del documento…\r\ndocument_properties_label=Proprietates del documento…\r\ndocument_properties_file_name=Nomine del file:\r\ndocument_properties_file_size=Dimension de file:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Titulo:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Subjecto:\r\ndocument_properties_keywords=Parolas clave:\r\ndocument_properties_creation_date=Data de creation:\r\ndocument_properties_modification_date=Data de modification:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Creator:\r\ndocument_properties_producer=Productor PDF:\r\ndocument_properties_version=Version PDF:\r\ndocument_properties_page_count=Numero de paginas:\r\ndocument_properties_page_size=Dimension del pagina:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=vertical\r\ndocument_properties_page_size_orientation_landscape=horizontal\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Littera\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Vista web rapide:\r\ndocument_properties_linearized_yes=Si\r\ndocument_properties_linearized_no=No\r\ndocument_properties_close=Clauder\r\n\r\nprint_progress_message=Preparation del documento pro le impression…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cancellar\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Monstrar/celar le barra lateral\r\ntoggle_sidebar_notification.title=Monstrar/celar le barra lateral (le documento contine structura/attachamentos)\r\ntoggle_sidebar_notification2.title=Monstrar/celar le barra lateral (le documento contine structura/attachamentos/stratos)\r\ntoggle_sidebar_label=Monstrar/celar le barra lateral\r\ndocument_outline.title=Monstrar le schema del documento (clic duple pro expander/contraher tote le elementos)\r\ndocument_outline_label=Schema del documento\r\nattachments.title=Monstrar le annexos\r\nattachments_label=Annexos\r\nlayers.title=Monstrar stratos (clicca duple pro remontar tote le stratos al stato predefinite)\r\nlayers_label=Stratos\r\nthumbs.title=Monstrar le vignettes\r\nthumbs_label=Vignettes\r\ncurrent_outline_item.title=Trovar le elemento de structura actual\r\ncurrent_outline_item_label=Elemento de structura actual\r\nfindbar.title=Cercar in le documento\r\nfindbar_label=Cercar\r\n\r\nadditional_layers=Altere stratos\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Pagina {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Pagina {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Vignette del pagina {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Cercar\r\nfind_input.placeholder=Cercar in le documento…\r\nfind_previous.title=Trovar le previe occurrentia del phrase\r\nfind_previous_label=Previe\r\nfind_next.title=Trovar le successive occurrentia del phrase\r\nfind_next_label=Sequente\r\nfind_highlight=Evidentiar toto\r\nfind_match_case_label=Distinguer majusculas/minusculas\r\nfind_entire_word_label=Parolas integre\r\nfind_reached_top=Initio del documento attingite, continuation ab fin\r\nfind_reached_bottom=Fin del documento attingite, continuation ab initio\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} de {{total}} concordantia\r\nfind_match_count[two]={{current}} de {{total}} concordantias\r\nfind_match_count[few]={{current}} de {{total}} concordantias\r\nfind_match_count[many]={{current}} de {{total}} concordantias\r\nfind_match_count[other]={{current}} de {{total}} concordantias\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Plus de {{limit}} concordantias\r\nfind_match_count_limit[one]=Plus de {{limit}} concordantia\r\nfind_match_count_limit[two]=Plus de {{limit}} concordantias\r\nfind_match_count_limit[few]=Plus de {{limit}} concordantias\r\nfind_match_count_limit[many]=Plus de {{limit}} correspondentias\r\nfind_match_count_limit[other]=Plus de {{limit}} concordantias\r\nfind_not_found=Phrase non trovate\r\n\r\n# Error panel labels\r\nerror_more_info=Plus de informationes\r\nerror_less_info=Minus de informationes\r\nerror_close=Clauder\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Message: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pila: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=File: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linea: {{line}}\r\nrendering_error=Un error occurreva durante que on processava le pagina.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Plen largor del pagina\r\npage_scale_fit=Pagina integre\r\npage_scale_auto=Zoom automatic\r\npage_scale_actual=Dimension actual\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=Un error occurreva durante que on cargava le file PDF.\r\ninvalid_file_error=File PDF corrumpite o non valide.\r\nmissing_file_error=File PDF mancante.\r\nunexpected_response_error=Responsa del servitor inexpectate.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=Insere le contrasigno pro aperir iste file PDF.\r\npassword_invalid=Contrasigno invalide. Per favor retenta.\r\npassword_ok=OK\r\npassword_cancel=Cancellar\r\n\r\nprinting_not_supported=Attention : le impression non es totalmente supportate per ce navigator.\r\nprinting_not_ready=Attention: le file PDF non es integremente cargate pro lo poter imprimer.\r\nweb_fonts_disabled=Le typos de litteras web es disactivate: impossibile usar le typos de litteras PDF incorporate.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/id/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Laman Sebelumnya\r\nprevious_label=Sebelumnya\r\nnext.title=Laman Selanjutnya\r\nnext_label=Selanjutnya\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Halaman\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=dari {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} dari {{pagesCount}})\r\n\r\nzoom_out.title=Perkecil\r\nzoom_out_label=Perkecil\r\nzoom_in.title=Perbesar\r\nzoom_in_label=Perbesar\r\nzoom.title=Perbesaran\r\npresentation_mode.title=Ganti ke Mode Presentasi\r\npresentation_mode_label=Mode Presentasi\r\nopen_file.title=Buka Berkas\r\nopen_file_label=Buka\r\nprint.title=Cetak\r\nprint_label=Cetak\r\ndownload.title=Unduh\r\ndownload_label=Unduh\r\nbookmark.title=Tampilan Sekarang (salin atau buka di jendela baru)\r\nbookmark_label=Tampilan Sekarang\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Alat\r\ntools_label=Alat\r\nfirst_page.title=Buka Halaman Pertama\r\nfirst_page.label=Ke Halaman Pertama\r\nfirst_page_label=Buka Halaman Pertama\r\nlast_page.title=Buka Halaman Terakhir\r\nlast_page.label=Ke Halaman Terakhir\r\nlast_page_label=Buka Halaman Terakhir\r\npage_rotate_cw.title=Putar Searah Jarum Jam\r\npage_rotate_cw.label=Putar Searah Jarum Jam\r\npage_rotate_cw_label=Putar Searah Jarum Jam\r\npage_rotate_ccw.title=Putar Berlawanan Arah Jarum Jam\r\npage_rotate_ccw.label=Putar Berlawanan Arah Jarum Jam\r\npage_rotate_ccw_label=Putar Berlawanan Arah Jarum Jam\r\n\r\ncursor_text_select_tool.title=Aktifkan Alat Seleksi Teks\r\ncursor_text_select_tool_label=Alat Seleksi Teks\r\ncursor_hand_tool.title=Aktifkan Alat Tangan\r\ncursor_hand_tool_label=Alat Tangan\r\n\r\nscroll_vertical.title=Gunakan Penggeseran Vertikal\r\nscroll_vertical_label=Penggeseran Vertikal\r\nscroll_horizontal.title=Gunakan Penggeseran Horizontal\r\nscroll_horizontal_label=Penggeseran Horizontal\r\nscroll_wrapped.title=Gunakan Penggeseran Terapit\r\nscroll_wrapped_label=Penggeseran Terapit\r\n\r\nspread_none.title=Jangan gabungkan lembar halaman\r\nspread_none_label=Tidak Ada Lembaran\r\nspread_odd.title=Gabungkan lembar lamanan mulai dengan halaman ganjil\r\nspread_odd_label=Lembaran Ganjil\r\nspread_even.title=Gabungkan lembar halaman dimulai dengan halaman genap\r\nspread_even_label=Lembaran Genap\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Properti Dokumen…\r\ndocument_properties_label=Properti Dokumen…\r\ndocument_properties_file_name=Nama berkas:\r\ndocument_properties_file_size=Ukuran berkas:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} byte)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} byte)\r\ndocument_properties_title=Judul:\r\ndocument_properties_author=Penyusun:\r\ndocument_properties_subject=Subjek:\r\ndocument_properties_keywords=Kata Kunci:\r\ndocument_properties_creation_date=Tanggal Dibuat:\r\ndocument_properties_modification_date=Tanggal Dimodifikasi:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Pembuat:\r\ndocument_properties_producer=Pemroduksi PDF:\r\ndocument_properties_version=Versi PDF:\r\ndocument_properties_page_count=Jumlah Halaman:\r\ndocument_properties_page_size=Ukuran Laman:\r\ndocument_properties_page_size_unit_inches=inci\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=tegak\r\ndocument_properties_page_size_orientation_landscape=mendatar\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Tampilan Web Kilat:\r\ndocument_properties_linearized_yes=Ya\r\ndocument_properties_linearized_no=Tidak\r\ndocument_properties_close=Tutup\r\n\r\nprint_progress_message=Menyiapkan dokumen untuk pencetakan…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Batalkan\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Aktif/Nonaktifkan Bilah Samping\r\ntoggle_sidebar_notification.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran)\r\ntoggle_sidebar_notification2.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran/lapisan)\r\ntoggle_sidebar_label=Aktif/Nonaktifkan Bilah Samping\r\ndocument_outline.title=Tampilkan Kerangka Dokumen (klik ganda untuk membentangkan/menciutkan semua item)\r\ndocument_outline_label=Kerangka Dokumen\r\nattachments.title=Tampilkan Lampiran\r\nattachments_label=Lampiran\r\nlayers.title=Tampilkan Lapisan (klik ganda untuk mengatur ulang semua lapisan ke keadaan baku)\r\nlayers_label=Lapisan\r\nthumbs.title=Tampilkan Miniatur\r\nthumbs_label=Miniatur\r\nfindbar.title=Temukan di Dokumen\r\nfindbar_label=Temukan\r\n\r\nadditional_layers=Lapisan Tambahan\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Laman {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Laman {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatur Laman {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Temukan\r\nfind_input.placeholder=Temukan di dokumen…\r\nfind_previous.title=Temukan kata sebelumnya\r\nfind_previous_label=Sebelumnya\r\nfind_next.title=Temukan lebih lanjut\r\nfind_next_label=Selanjutnya\r\nfind_highlight=Sorot semuanya\r\nfind_match_case_label=Cocokkan BESAR/kecil\r\nfind_entire_word_label=Seluruh teks\r\nfind_reached_top=Sampai di awal dokumen, dilanjutkan dari bawah\r\nfind_reached_bottom=Sampai di akhir dokumen, dilanjutkan dari atas\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} dari {{total}} hasil\r\nfind_match_count[two]={{current}} dari {{total}} hasil\r\nfind_match_count[few]={{current}} dari {{total}} hasil\r\nfind_match_count[many]={{current}} dari {{total}} hasil\r\nfind_match_count[other]={{current}} dari {{total}} hasil\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Ditemukan lebih dari {{limit}}\r\nfind_match_count_limit[one]=Ditemukan lebih dari {{limit}}\r\nfind_match_count_limit[two]=Ditemukan lebih dari {{limit}}\r\nfind_match_count_limit[few]=Ditemukan lebih dari {{limit}}\r\nfind_match_count_limit[many]=Ditemukan lebih dari {{limit}}\r\nfind_match_count_limit[other]=Ditemukan lebih dari {{limit}}\r\nfind_not_found=Frasa tidak ditemukan\r\n\r\n# Error panel labels\r\nerror_more_info=Lebih Banyak Informasi\r\nerror_less_info=Lebih Sedikit Informasi\r\nerror_close=Tutup\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Pesan: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Berkas: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Baris: {{line}}\r\nrendering_error=Galat terjadi saat merender laman.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Lebar Laman\r\npage_scale_fit=Muat Laman\r\npage_scale_auto=Perbesaran Otomatis\r\npage_scale_actual=Ukuran Asli\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Galat\r\nloading_error=Galat terjadi saat memuat PDF.\r\ninvalid_file_error=Berkas PDF tidak valid atau rusak.\r\nmissing_file_error=Berkas PDF tidak ada.\r\nunexpected_response_error=Balasan server yang tidak diharapkan.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anotasi {{type}}]\r\npassword_label=Masukkan sandi untuk membuka berkas PDF ini.\r\npassword_invalid=Sandi tidak valid. Silakan coba lagi.\r\npassword_ok=Oke\r\npassword_cancel=Batal\r\n\r\nprinting_not_supported=Peringatan: Pencetakan tidak didukung secara lengkap pada peramban ini.\r\nprinting_not_ready=Peringatan: Berkas PDF masih belum dimuat secara lengkap untuk dapat dicetak.\r\nweb_fonts_disabled=Font web dinonaktifkan: tidak dapat menggunakan font PDF yang tersemat.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/is/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Fyrri síða\r\nprevious_label=Fyrri\r\nnext.title=Næsta síða\r\nnext_label=Næsti\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Síða\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=af {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} af {{pagesCount}})\r\n\r\nzoom_out.title=Minnka\r\nzoom_out_label=Minnka\r\nzoom_in.title=Stækka\r\nzoom_in_label=Stækka\r\nzoom.title=Aðdráttur\r\npresentation_mode.title=Skipta yfir á kynningarham\r\npresentation_mode_label=Kynningarhamur\r\nopen_file.title=Opna skrá\r\nopen_file_label=Opna\r\nprint.title=Prenta\r\nprint_label=Prenta\r\ndownload.title=Hala niður\r\ndownload_label=Hala niður\r\nbookmark.title=Núverandi sýn (afritaðu eða opnaðu í nýjum glugga)\r\nbookmark_label=Núverandi sýn\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Verkfæri\r\ntools_label=Verkfæri\r\nfirst_page.title=Fara á fyrstu síðu\r\nfirst_page.label=Fara á fyrstu síðu\r\nfirst_page_label=Fara á fyrstu síðu\r\nlast_page.title=Fara á síðustu síðu\r\nlast_page.label=Fara á síðustu síðu\r\nlast_page_label=Fara á síðustu síðu\r\npage_rotate_cw.title=Snúa réttsælis\r\npage_rotate_cw.label=Snúa réttsælis\r\npage_rotate_cw_label=Snúa réttsælis\r\npage_rotate_ccw.title=Snúa rangsælis\r\npage_rotate_ccw.label=Snúa rangsælis\r\npage_rotate_ccw_label=Snúa rangsælis\r\n\r\ncursor_text_select_tool.title=Virkja textavalsáhald\r\ncursor_text_select_tool_label=Textavalsáhald\r\ncursor_hand_tool.title=Virkja handarverkfæri\r\ncursor_hand_tool_label=Handarverkfæri\r\n\r\nscroll_vertical.title=Nota lóðrétt skrun\r\nscroll_vertical_label=Lóðrétt skrun\r\nscroll_horizontal.title=Nota lárétt skrun\r\nscroll_horizontal_label=Lárétt skrun\r\n\r\nspread_none.title=Ekki taka þátt í dreifingu síðna\r\nspread_none_label=Engin dreifing\r\nspread_odd.title=Taka þátt í dreifingu síðna með oddatölum\r\nspread_odd_label=Oddatöludreifing\r\nspread_even.title=Taktu þátt í dreifingu síðna með jöfnuntölum\r\nspread_even_label=Jafnatöludreifing\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Eiginleikar skjals…\r\ndocument_properties_label=Eiginleikar skjals…\r\ndocument_properties_file_name=Skráarnafn:\r\ndocument_properties_file_size=Skrárstærð:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Titill:\r\ndocument_properties_author=Hönnuður:\r\ndocument_properties_subject=Efni:\r\ndocument_properties_keywords=Stikkorð:\r\ndocument_properties_creation_date=Búið til:\r\ndocument_properties_modification_date=Dags breytingar:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Höfundur:\r\ndocument_properties_producer=PDF framleiðandi:\r\ndocument_properties_version=PDF útgáfa:\r\ndocument_properties_page_count=Blaðsíðufjöldi:\r\ndocument_properties_page_size=Stærð síðu:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=skammsnið\r\ndocument_properties_page_size_orientation_landscape=langsnið\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized_yes=Já\r\ndocument_properties_linearized_no=Nei\r\ndocument_properties_close=Loka\r\n\r\nprint_progress_message=Undirbý skjal fyrir prentun…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Hætta við\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Víxla hliðslá\r\ntoggle_sidebar_notification.title=Víxla hliðarslá (skjal inniheldur yfirlit/viðhengi)\r\ntoggle_sidebar_label=Víxla hliðslá\r\ndocument_outline.title=Sýna yfirlit skjals (tvísmelltu til að opna/loka öllum hlutum)\r\ndocument_outline_label=Efnisskipan skjals\r\nattachments.title=Sýna viðhengi\r\nattachments_label=Viðhengi\r\nthumbs.title=Sýna smámyndir\r\nthumbs_label=Smámyndir\r\nfindbar.title=Leita í skjali\r\nfindbar_label=Leita\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Síða {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Smámynd af síðu {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Leita\r\nfind_input.placeholder=Leita í skjali…\r\nfind_previous.title=Leita að fyrra tilfelli þessara orða\r\nfind_previous_label=Fyrri\r\nfind_next.title=Leita að næsta tilfelli þessara orða\r\nfind_next_label=Næsti\r\nfind_highlight=Lita allt\r\nfind_match_case_label=Passa við stafstöðu\r\nfind_entire_word_label=Heil orð\r\nfind_reached_top=Náði efst í skjal, held áfram neðst\r\nfind_reached_bottom=Náði enda skjals, held áfram efst\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} af {{total}} niðurstöðu\r\nfind_match_count[two]={{current}} af {{total}} niðurstöðum\r\nfind_match_count[few]={{current}} af {{total}} niðurstöðum\r\nfind_match_count[many]={{current}} af {{total}} niðurstöðum\r\nfind_match_count[other]={{current}} af {{total}} niðurstöðum\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Fleiri en {{limit}} niðurstöður\r\nfind_match_count_limit[one]=Fleiri en {{limit}} niðurstaða\r\nfind_match_count_limit[two]=Fleiri en {{limit}} niðurstöður\r\nfind_match_count_limit[few]=Fleiri en {{limit}} niðurstöður\r\nfind_match_count_limit[many]=Fleiri en {{limit}} niðurstöður\r\nfind_match_count_limit[other]=Fleiri en {{limit}} niðurstöður\r\nfind_not_found=Fann ekki orðið\r\n\r\n# Error panel labels\r\nerror_more_info=Meiri upplýsingar\r\nerror_less_info=Minni upplýsingar\r\nerror_close=Loka\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Skilaboð: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stafli: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Skrá: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Lína: {{line}}\r\nrendering_error=Upp kom villa við að birta síðuna.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Síðubreidd\r\npage_scale_fit=Passa á síðu\r\npage_scale_auto=Sjálfvirkur aðdráttur\r\npage_scale_actual=Raunstærð\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Villa\r\nloading_error=Villa kom upp við að hlaða inn PDF.\r\ninvalid_file_error=Ógild eða skemmd PDF skrá.\r\nmissing_file_error=Vantar PDF skrá.\r\nunexpected_response_error=Óvænt svar frá netþjóni.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Skýring]\r\npassword_label=Sláðu inn lykilorð til að opna þessa PDF skrá.\r\npassword_invalid=Ógilt lykilorð. Reyndu aftur.\r\npassword_ok=Í lagi\r\npassword_cancel=Hætta við\r\n\r\nprinting_not_supported=Aðvörun: Prentun er ekki með fyllilegan stuðning á þessum vafra.\r\nprinting_not_ready=Aðvörun: Ekki er búið að hlaða inn allri PDF skránni fyrir prentun.\r\nweb_fonts_disabled=Vef leturgerðir eru óvirkar: get ekki notað innbyggðar PDF leturgerðir.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/it/viewer.properties",
    "content": "# This Source Code Form is subject to the terms of the Mozilla Public\r\n# License, v. 2.0. If a copy of the MPL was not distributed with this\r\n# file, You can obtain one at http://mozilla.org/MPL/2.0/.\r\n\r\n# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\nprevious.title = Pagina precedente\r\nprevious_label = Precedente\r\nnext.title = Pagina successiva\r\nnext_label = Successiva\r\n\r\npage.title = Pagina\r\nof_pages = di {{pagesCount}}\r\npage_of_pages = ({{pageNumber}} di {{pagesCount}})\r\n\r\nzoom_out.title = Riduci zoom\r\nzoom_out_label = Riduci zoom\r\nzoom_in.title = Aumenta zoom\r\nzoom_in_label = Aumenta zoom\r\nzoom.title = Zoom\r\npresentation_mode.title = Passa alla modalità presentazione\r\npresentation_mode_label = Modalità presentazione\r\nopen_file.title = Apri file\r\nopen_file_label = Apri\r\nprint.title = Stampa\r\nprint_label = Stampa\r\ndownload.title = Scarica questo documento\r\ndownload_label = Download\r\nbookmark.title = Visualizzazione corrente (copia o apri in una nuova finestra)\r\nbookmark_label = Visualizzazione corrente\r\n\r\ntools.title = Strumenti\r\ntools_label = Strumenti\r\nfirst_page.title = Vai alla prima pagina\r\nfirst_page.label = Vai alla prima pagina\r\nfirst_page_label = Vai alla prima pagina\r\nlast_page.title = Vai all’ultima pagina\r\nlast_page.label = Vai all’ultima pagina\r\nlast_page_label = Vai all’ultima pagina\r\npage_rotate_cw.title = Ruota in senso orario\r\npage_rotate_cw.label = Ruota in senso orario\r\npage_rotate_cw_label = Ruota in senso orario\r\npage_rotate_ccw.title = Ruota in senso antiorario\r\npage_rotate_ccw.label = Ruota in senso antiorario\r\npage_rotate_ccw_label = Ruota in senso antiorario\r\n\r\ncursor_text_select_tool.title = Attiva strumento di selezione testo\r\ncursor_text_select_tool_label = Strumento di selezione testo\r\ncursor_hand_tool.title = Attiva strumento mano\r\ncursor_hand_tool_label = Strumento mano\r\n\r\nscroll_vertical.title = Scorri le pagine in verticale\r\nscroll_vertical_label = Scorrimento verticale\r\nscroll_horizontal.title = Scorri le pagine in orizzontale\r\nscroll_horizontal_label = Scorrimento orizzontale\r\nscroll_wrapped.title = Scorri le pagine in verticale, disponendole da sinistra a destra e andando a capo automaticamente\r\nscroll_wrapped_label = Scorrimento con a capo automatico\r\n\r\nspread_none.title = Non raggruppare pagine\r\nspread_none_label = Nessun raggruppamento\r\nspread_odd.title = Crea gruppi di pagine che iniziano con numeri di pagina dispari\r\nspread_odd_label = Raggruppamento dispari\r\nspread_even.title = Crea gruppi di pagine che iniziano con numeri di pagina pari\r\nspread_even_label = Raggruppamento pari\r\n\r\ndocument_properties.title = Proprietà del documento…\r\ndocument_properties_label = Proprietà del documento…\r\ndocument_properties_file_name = Nome file:\r\ndocument_properties_file_size = Dimensione file:\r\ndocument_properties_kb = {{size_kb}} kB ({{size_b}} byte)\r\ndocument_properties_mb = {{size_mb}} MB ({{size_b}} byte)\r\ndocument_properties_title = Titolo:\r\ndocument_properties_author = Autore:\r\ndocument_properties_subject = Oggetto:\r\ndocument_properties_keywords = Parole chiave:\r\ndocument_properties_creation_date = Data creazione:\r\ndocument_properties_modification_date = Data modifica:\r\ndocument_properties_date_string = {{date}}, {{time}}\r\ndocument_properties_creator = Autore originale:\r\ndocument_properties_producer = Produttore PDF:\r\ndocument_properties_version = Versione PDF:\r\ndocument_properties_page_count = Conteggio pagine:\r\ndocument_properties_page_size = Dimensioni pagina:\r\ndocument_properties_page_size_unit_inches = in\r\ndocument_properties_page_size_unit_millimeters = mm\r\ndocument_properties_page_size_orientation_portrait = verticale\r\ndocument_properties_page_size_orientation_landscape = orizzontale\r\ndocument_properties_page_size_name_a3 = A3\r\ndocument_properties_page_size_name_a4 = A4\r\ndocument_properties_page_size_name_letter = Lettera\r\ndocument_properties_page_size_name_legal = Legale\r\ndocument_properties_page_size_dimension_string = {{width}} × {{height}} {{unit}} ({{orientation}})\r\ndocument_properties_page_size_dimension_name_string = {{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\ndocument_properties_linearized = Visualizzazione web veloce:\r\ndocument_properties_linearized_yes = Sì\r\ndocument_properties_linearized_no = No\r\ndocument_properties_close = Chiudi\r\n\r\nprint_progress_message = Preparazione documento per la stampa…\r\nprint_progress_percent = {{progress}}%\r\nprint_progress_close = Annulla\r\n\r\ntoggle_sidebar.title = Attiva/disattiva barra laterale\r\ntoggle_sidebar_notification.title = Attiva/disattiva barra laterale (il documento contiene struttura/allegati)\r\ntoggle_sidebar_notification2.title = Attiva/disattiva barra laterale (il documento contiene struttura/allegati/livelli)\r\ntoggle_sidebar_label = Attiva/disattiva barra laterale\r\ndocument_outline.title = Visualizza la struttura del documento (doppio clic per visualizzare/comprimere tutti gli elementi)\r\ndocument_outline_label = Struttura documento\r\nattachments.title = Visualizza allegati\r\nattachments_label = Allegati\r\nlayers.title = Visualizza livelli (doppio clic per ripristinare tutti i livelli allo stato predefinito)\r\nlayers_label = Livelli\r\nthumbs.title = Mostra le miniature\r\nthumbs_label = Miniature\r\ncurrent_outline_item.title = Trova elemento struttura corrente\r\ncurrent_outline_item_label = Elemento struttura corrente\r\nfindbar.title = Trova nel documento\r\nfindbar_label = Trova\r\n\r\nadditional_layers = Livelli aggiuntivi\r\npage_canvas = Pagina {{page}}\r\nthumb_page_title = Pagina {{page}}\r\nthumb_page_canvas = Miniatura della pagina {{page}}\r\n\r\nfind_input.title = Trova\r\nfind_input.placeholder = Trova nel documento…\r\nfind_previous.title = Trova l’occorrenza precedente del testo da cercare\r\nfind_previous_label = Precedente\r\nfind_next.title = Trova l’occorrenza successiva del testo da cercare\r\nfind_next_label = Successivo\r\nfind_highlight = Evidenzia\r\nfind_match_case_label = Maiuscole/minuscole\r\nfind_entire_word_label = Parole intere\r\nfind_reached_top = Raggiunto l’inizio della pagina, continua dalla fine\r\nfind_reached_bottom = Raggiunta la fine della pagina, continua dall’inizio\r\nfind_match_count = {[ plural(total) ]}\r\nfind_match_count[one] = {{current}} di {{total}} corrispondenza\r\nfind_match_count[two] = {{current}} di {{total}} corrispondenze\r\nfind_match_count[few] = {{current}} di {{total}} corrispondenze\r\nfind_match_count[many] = {{current}} di {{total}} corrispondenze\r\nfind_match_count[other] = {{current}} di {{total}} corrispondenze\r\nfind_match_count_limit = {[ plural(limit) ]}\r\nfind_match_count_limit[zero] = Più di {{limit}} corrispondenze\r\nfind_match_count_limit[one] = Più di {{limit}} corrispondenza\r\nfind_match_count_limit[two] = Più di {{limit}} corrispondenze\r\nfind_match_count_limit[few] = Più di {{limit}} corrispondenze\r\nfind_match_count_limit[many] = Più di {{limit}} corrispondenze\r\nfind_match_count_limit[other] = Più di {{limit}} corrispondenze\r\nfind_not_found = Testo non trovato\r\n\r\nerror_more_info = Ulteriori informazioni\r\nerror_less_info = Nascondi dettagli\r\nerror_close = Chiudi\r\nerror_version_info = PDF.js v{{version}} (build: {{build}})\r\nerror_message = Messaggio: {{message}}\r\nerror_stack = Stack: {{stack}}\r\nerror_file = File: {{file}}\r\nerror_line = Riga: {{line}}\r\nrendering_error = Si è verificato un errore durante il rendering della pagina.\r\n\r\npage_scale_width = Larghezza pagina\r\npage_scale_fit = Adatta a una pagina\r\npage_scale_auto = Zoom automatico\r\npage_scale_actual = Dimensioni effettive\r\npage_scale_percent = {{scale}}%\r\n\r\nloading_error_indicator = Errore\r\nloading_error = Si è verificato un errore durante il caricamento del PDF.\r\ninvalid_file_error = File PDF non valido o danneggiato.\r\nmissing_file_error = File PDF non disponibile.\r\nunexpected_response_error = Risposta imprevista del server\r\n\r\nannotation_date_string = {{date}}, {{time}}\r\n\r\ntext_annotation_type.alt = [Annotazione: {{type}}]\r\npassword_label = Inserire la password per aprire questo file PDF.\r\npassword_invalid = Password non corretta. Riprovare.\r\npassword_ok = OK\r\npassword_cancel = Annulla\r\n\r\nprinting_not_supported = Attenzione: la stampa non è completamente supportata da questo browser.\r\nprinting_not_ready = Attenzione: il PDF non è ancora stato caricato completamente per la stampa.\r\nweb_fonts_disabled = I web font risultano disattivati: impossibile utilizzare i caratteri incorporati nel PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ja/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=前のページへ戻ります\r\nprevious_label=前へ\r\nnext.title=次のページへ進みます\r\nnext_label=次へ\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=ページ\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=/ {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} / {{pagesCount}})\r\n\r\nzoom_out.title=表示を縮小します\r\nzoom_out_label=縮小\r\nzoom_in.title=表示を拡大します\r\nzoom_in_label=拡大\r\nzoom.title=拡大/縮小\r\npresentation_mode.title=プレゼンテーションモードに切り替えます\r\npresentation_mode_label=プレゼンテーションモード\r\nopen_file.title=ファイルを開きます\r\nopen_file_label=開く\r\nprint.title=印刷します\r\nprint_label=印刷\r\ndownload.title=ダウンロードします\r\ndownload_label=ダウンロード\r\nbookmark.title=現在のビューの URL です (コピーまたは新しいウィンドウに開く)\r\nbookmark_label=現在のビュー\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=ツール\r\ntools_label=ツール\r\nfirst_page.title=最初のページへ移動します\r\nfirst_page.label=最初のページへ移動\r\nfirst_page_label=最初のページへ移動\r\nlast_page.title=最後のページへ移動します\r\nlast_page.label=最後のページへ移動\r\nlast_page_label=最後のページへ移動\r\npage_rotate_cw.title=ページを右へ回転します\r\npage_rotate_cw.label=右回転\r\npage_rotate_cw_label=右回転\r\npage_rotate_ccw.title=ページを左へ回転します\r\npage_rotate_ccw.label=左回転\r\npage_rotate_ccw_label=左回転\r\n\r\ncursor_text_select_tool.title=テキスト選択ツールを有効にする\r\ncursor_text_select_tool_label=テキスト選択ツール\r\ncursor_hand_tool.title=手のひらツールを有効にする\r\ncursor_hand_tool_label=手のひらツール\r\n\r\nscroll_vertical.title=縦スクロールにする\r\nscroll_vertical_label=縦スクロール\r\nscroll_horizontal.title=横スクロールにする\r\nscroll_horizontal_label=横スクロール\r\nscroll_wrapped.title=折り返しスクロールにする\r\nscroll_wrapped_label=折り返しスクロール\r\n\r\nspread_none.title=見開きにしない\r\nspread_none_label=見開きにしない\r\nspread_odd.title=奇数ページ開始で見開きにする\r\nspread_odd_label=奇数ページ見開き\r\nspread_even.title=偶数ページ開始で見開きにする\r\nspread_even_label=偶数ページ見開き\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=文書のプロパティ...\r\ndocument_properties_label=文書のプロパティ...\r\ndocument_properties_file_name=ファイル名:\r\ndocument_properties_file_size=ファイルサイズ:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=タイトル:\r\ndocument_properties_author=作成者:\r\ndocument_properties_subject=件名:\r\ndocument_properties_keywords=キーワード:\r\ndocument_properties_creation_date=作成日:\r\ndocument_properties_modification_date=更新日:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=アプリケーション:\r\ndocument_properties_producer=PDF 作成:\r\ndocument_properties_version=PDF のバージョン:\r\ndocument_properties_page_count=ページ数:\r\ndocument_properties_page_size=ページサイズ:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=縦\r\ndocument_properties_page_size_orientation_landscape=横\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=レター\r\ndocument_properties_page_size_name_legal=リーガル\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=ウェブ表示用に最適化:\r\ndocument_properties_linearized_yes=はい\r\ndocument_properties_linearized_no=いいえ\r\ndocument_properties_close=閉じる\r\n\r\nprint_progress_message=文書の印刷を準備しています...\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=キャンセル\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=サイドバー表示を切り替えます\r\ntoggle_sidebar_notification.title=サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付)\r\ntoggle_sidebar_notification2.title=サイドバー表示を切り替えます (文書に含まれるアウトライン / 添付 / レイヤー)\r\ntoggle_sidebar_label=サイドバーの切り替え\r\ndocument_outline.title=文書の目次を表示します (ダブルクリックで項目を開閉します)\r\ndocument_outline_label=文書の目次\r\nattachments.title=添付ファイルを表示します\r\nattachments_label=添付ファイル\r\nlayers.title=レイヤーを表示します (ダブルクリックですべてのレイヤーが初期状態に戻ります)\r\nlayers_label=レイヤー\r\nthumbs.title=縮小版を表示します\r\nthumbs_label=縮小版\r\ncurrent_outline_item.title=現在のアウトライン項目を検索\r\ncurrent_outline_item_label=現在のアウトライン項目\r\nfindbar.title=文書内を検索します\r\nfindbar_label=検索\r\n\r\nadditional_layers=追加レイヤー\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas={{page}} ページ\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title={{page}} ページ\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}} ページの縮小版\r\n\r\n# Find panel button title and messages\r\nfind_input.title=検索\r\nfind_input.placeholder=文書内を検索...\r\nfind_previous.title=現在より前の位置で指定文字列が現れる部分を検索します\r\nfind_previous_label=前へ\r\nfind_next.title=現在より後の位置で指定文字列が現れる部分を検索します\r\nfind_next_label=次へ\r\nfind_highlight=すべて強調表示\r\nfind_match_case_label=大文字/小文字を区別\r\nfind_entire_word_label=単語一致\r\nfind_reached_top=文書先頭に到達したので末尾から続けて検索します\r\nfind_reached_bottom=文書末尾に到達したので先頭から続けて検索します\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{total}} 件中 {{current}} 件目\r\nfind_match_count[two]={{total}} 件中 {{current}} 件目\r\nfind_match_count[few]={{total}} 件中 {{current}} 件目\r\nfind_match_count[many]={{total}} 件中 {{current}} 件目\r\nfind_match_count[other]={{total}} 件中 {{current}} 件目\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]={{limit}} 件以上一致\r\nfind_match_count_limit[one]={{limit}} 件以上一致\r\nfind_match_count_limit[two]={{limit}} 件以上一致\r\nfind_match_count_limit[few]={{limit}} 件以上一致\r\nfind_match_count_limit[many]={{limit}} 件以上一致\r\nfind_match_count_limit[other]={{limit}} 件以上一致\r\nfind_not_found=見つかりませんでした\r\n\r\n# Error panel labels\r\nerror_more_info=詳細情報\r\nerror_less_info=詳細情報を隠す\r\nerror_close=閉じる\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (ビルド: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=メッセージ: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=スタック: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=ファイル: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=行: {{line}}\r\nrendering_error=ページのレンダリング中にエラーが発生しました。\r\n\r\n# Predefined zoom values\r\npage_scale_width=幅に合わせる\r\npage_scale_fit=ページのサイズに合わせる\r\npage_scale_auto=自動ズーム\r\npage_scale_actual=実際のサイズ\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=エラー\r\nloading_error=PDF の読み込み中にエラーが発生しました。\r\ninvalid_file_error=無効または破損した PDF ファイル。\r\nmissing_file_error=PDF ファイルが見つかりません。\r\nunexpected_response_error=サーバーから予期せぬ応答がありました。\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} 注釈]\r\npassword_label=この PDF ファイルを開くためのパスワードを入力してください。\r\npassword_invalid=無効なパスワードです。もう一度やり直してください。\r\npassword_ok=OK\r\npassword_cancel=キャンセル\r\n\r\nprinting_not_supported=警告: このブラウザーでは印刷が完全にサポートされていません。\r\nprinting_not_ready=警告: PDF を印刷するための読み込みが終了していません。\r\nweb_fonts_disabled=ウェブフォントが無効になっています: 埋め込まれた PDF のフォントを使用できません。\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ka/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=წინა გვერდი\r\nprevious_label=წინა\r\nnext.title=შემდეგი გვერდი\r\nnext_label=შემდეგი\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=გვერდი\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}}-დან\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} {{pagesCount}}-დან)\r\n\r\nzoom_out.title=ზომის შემცირება\r\nzoom_out_label=დაშორება\r\nzoom_in.title=ზომის გაზრდა\r\nzoom_in_label=მოახლოება\r\nzoom.title=ზომა\r\npresentation_mode.title=ჩვენების რეჟიმზე გადართვა\r\npresentation_mode_label=ჩვენების რეჟიმი\r\nopen_file.title=ფაილის გახსნა\r\nopen_file_label=გახსნა\r\nprint.title=ამობეჭდვა\r\nprint_label=ამობეჭდვა\r\ndownload.title=ჩამოტვირთვა\r\ndownload_label=ჩამოტვირთვა\r\nbookmark.title=მიმდინარე ხედი (ასლის აღება ან გახსნა ახალ ფანჯარაში)\r\nbookmark_label=მიმდინარე ხედი\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=ხელსაწყოები\r\ntools_label=ხელსაწყოები\r\nfirst_page.title=პირველ გვერდზე გადასვლა\r\nfirst_page.label=პირველ გვერდზე გადასვლა\r\nfirst_page_label=პირველ გვერდზე გადასვლა\r\nlast_page.title=ბოლო გვერდზე გადასვლა\r\nlast_page.label=ბოლო გვერდზე გადასვლა\r\nlast_page_label=ბოლო გვერდზე გადასვლა\r\npage_rotate_cw.title=საათის ისრის მიმართულებით შებრუნება\r\npage_rotate_cw.label=მარჯვნივ გადაბრუნება\r\npage_rotate_cw_label=მარჯვნივ გადაბრუნება\r\npage_rotate_ccw.title=საათის ისრის საპირისპიროდ შებრუნება\r\npage_rotate_ccw.label=მარცხნივ გადაბრუნება\r\npage_rotate_ccw_label=მარცხნივ გადაბრუნება\r\n\r\ncursor_text_select_tool.title=მოსანიშნი მაჩვენებლის გამოყენება\r\ncursor_text_select_tool_label=მოსანიშნი მაჩვენებელი\r\ncursor_hand_tool.title=გადასაადგილებელი მაჩვენებლის გამოყენება\r\ncursor_hand_tool_label=გადასაადგილებელი\r\n\r\nscroll_vertical.title=გვერდების შვეულად ჩვენება\r\nscroll_vertical_label=შვეული გადაადგილება\r\nscroll_horizontal.title=გვერდების თარაზულად ჩვენება\r\nscroll_horizontal_label=განივი გადაადგილება\r\nscroll_wrapped.title=გვერდების ცხრილურად ჩვენება\r\nscroll_wrapped_label=ცხრილური გადაადგილება\r\n\r\nspread_none.title=ორ გვერდზე გაშლის გარეშე\r\nspread_none_label=ცალგვერდიანი ჩვენება\r\nspread_odd.title=ორ გვერდზე გაშლა, კენტი გვერდიდან დაწყებული\r\nspread_odd_label=ორ გვერდზე კენტიდან\r\nspread_even.title=ორ გვერდზე გაშლა, ლუწი გვერდიდან დაწყებული\r\nspread_even_label=ორ გვერდზე ლუწიდან\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=დოკუმენტის შესახებ…\r\ndocument_properties_label=დოკუმენტის შესახებ…\r\ndocument_properties_file_name=ფაილის სახელი:\r\ndocument_properties_file_size=ფაილის მოცულობა:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} კბ ({{size_b}} ბაიტი)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} მბ ({{size_b}} ბაიტი)\r\ndocument_properties_title=სათაური:\r\ndocument_properties_author=შემქმნელი:\r\ndocument_properties_subject=თემა:\r\ndocument_properties_keywords=საკვანძო სიტყვები:\r\ndocument_properties_creation_date=შექმნის დრო:\r\ndocument_properties_modification_date=ჩასწორების დრო:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=გამომშვები:\r\ndocument_properties_producer=PDF-გამომშვები:\r\ndocument_properties_version=PDF-ვერსია:\r\ndocument_properties_page_count=გვერდები:\r\ndocument_properties_page_size=გვერდის ზომა:\r\ndocument_properties_page_size_unit_inches=დუიმი\r\ndocument_properties_page_size_unit_millimeters=მმ\r\ndocument_properties_page_size_orientation_portrait=შვეულად\r\ndocument_properties_page_size_orientation_landscape=თარაზულად\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=მსუბუქი ვებჩვენება:\r\ndocument_properties_linearized_yes=დიახ\r\ndocument_properties_linearized_no=არა\r\ndocument_properties_close=დახურვა\r\n\r\nprint_progress_message=დოკუმენტი მზადდება ამოსაბეჭდად…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=გაუქმება\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=გვერდითა ზოლის გამოჩენა/დამალვა\r\ntoggle_sidebar_notification.title=გვერდითა ზოლის გამოჩენა (შეიცავს სარჩევს/დანართს)\r\ntoggle_sidebar_notification2.title=გვერდითი ზოლის გამოჩენა (შეიცავს სარჩევს/დანართს/ფენებს)\r\ntoggle_sidebar_label=გვერდითა ზოლის გამოჩენა/დამალვა\r\ndocument_outline.title=დოკუმენტის სარჩევის ჩვენება (ორმაგი წკაპით თითოეულის ჩამოშლა/აკეცვა)\r\ndocument_outline_label=დოკუმენტის სარჩევი\r\nattachments.title=დანართების ჩვენება\r\nattachments_label=დანართები\r\nlayers.title=ფენების გამოჩენა (ორმაგი წკაპით ყველა ფენის ნაგულისხმევზე დაბრუნება)\r\nlayers_label=ფენები\r\nthumbs.title=შეთვალიერება\r\nthumbs_label=ესკიზები\r\ncurrent_outline_item.title=მიმდინარე გვერდის მონახვა სარჩევში\r\ncurrent_outline_item_label=მიმდინარე გვერდი სარჩევში\r\nfindbar.title=პოვნა დოკუმენტში\r\nfindbar_label=ძიება\r\n\r\nadditional_layers=დამატებითი ფენები\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=გვერდი {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=გვერდი {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=გვერდის შეთვალიერება {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=ძიება\r\nfind_input.placeholder=პოვნა დოკუმენტში…\r\nfind_previous.title=ფრაზის წინა კონტექსტის პოვნა\r\nfind_previous_label=წინა\r\nfind_next.title=ფრაზის შემდეგი კონტექსტის პოვნა\r\nfind_next_label=შემდეგი\r\nfind_highlight=ყველას მონიშვნა\r\nfind_match_case_label=ემთხვევა მთავრული\r\nfind_entire_word_label=მთლიანი სიტყვები\r\nfind_reached_top=მიღწეულია დოკუმენტის დასაწყისი, გრძელდება ბოლოდან\r\nfind_reached_bottom=მიღწეულია დოკუმენტის ბოლო, გრძელდება დასაწყისიდან\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} / {{total}} თანხვედრიდან\r\nfind_match_count[two]={{current}} / {{total}} თანხვედრიდან\r\nfind_match_count[few]={{current}} / {{total}} თანხვედრიდან\r\nfind_match_count[many]={{current}} / {{total}} თანხვედრიდან\r\nfind_match_count[other]={{current}} / {{total}} თანხვედრიდან\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]={{limit}}-ზე მეტი თანხვედრა\r\nfind_match_count_limit[one]={{limit}}-ზე მეტი თანხვედრა\r\nfind_match_count_limit[two]={{limit}}-ზე მეტი თანხვედრა\r\nfind_match_count_limit[few]={{limit}}-ზე მეტი თანხვედრა\r\nfind_match_count_limit[many]={{limit}}-ზე მეტი თანხვედრა\r\nfind_match_count_limit[other]={{limit}}-ზე მეტი თანხვედრა\r\nfind_not_found=ფრაზა ვერ მოიძებნა\r\n\r\n# Error panel labels\r\nerror_more_info=ვრცლად\r\nerror_less_info=შემოკლებულად\r\nerror_close=დახურვა\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=შეტყობინება: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=სტეკი: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=ფაილი: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=ხაზი: {{line}}\r\nrendering_error=შეცდომა, გვერდის ჩვენებისას.\r\n\r\n# Predefined zoom values\r\npage_scale_width=გვერდის სიგანეზე\r\npage_scale_fit=მთლიანი გვერდი\r\npage_scale_auto=ავტომატური\r\npage_scale_actual=საწყისი ზომა\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=შეცდომა\r\nloading_error=შეცდომა, PDF-ფაილის ჩატვირთვისას.\r\ninvalid_file_error=არამართებული ან დაზიანებული PDF-ფაილი.\r\nmissing_file_error=ნაკლული PDF-ფაილი.\r\nunexpected_response_error=სერვერის მოულოდნელი პასუხი.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} შენიშვნა]\r\npassword_label=შეიყვანეთ პაროლი PDF-ფაილის გასახსნელად.\r\npassword_invalid=არასწორი პაროლი. გთხოვთ, სცადოთ ხელახლა.\r\npassword_ok=კარგი\r\npassword_cancel=გაუქმება\r\n\r\nprinting_not_supported=გაფრთხილება: ამობეჭდვა ამ ბრაუზერში არაა სრულად მხარდაჭერილი.\r\nprinting_not_ready=გაფრთხილება: PDF სრულად ჩატვირთული არაა, ამობეჭდვის დასაწყებად.\r\nweb_fonts_disabled=ვებშრიფტები გამორთულია: ჩაშენებული PDF-შრიფტების გამოყენება ვერ ხერხდება.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/kab/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Asebter azewwar\r\nprevious_label=Azewwar\r\nnext.title=Asebter d-iteddun\r\nnext_label=Ddu ɣer zdat\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Asebter\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=ɣef {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} n {{pagesCount}})\r\n\r\nzoom_out.title=Semẓi\r\nzoom_out_label=Semẓi\r\nzoom_in.title=Semɣeṛ\r\nzoom_in_label=Semɣeṛ\r\nzoom.title=Semɣeṛ/Semẓi\r\npresentation_mode.title=Uɣal ɣer Uskar Tihawt\r\npresentation_mode_label=Askar Tihawt\r\nopen_file.title=Ldi Afaylu\r\nopen_file_label=Ldi\r\nprint.title=Siggez\r\nprint_label=Siggez\r\ndownload.title=Sader\r\ndownload_label=Azdam\r\nbookmark.title=Timeẓri tamirant (nɣel neɣ ldi ɣef usfaylu amaynut)\r\nbookmark_label=Askan amiran\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Ifecka\r\ntools_label=Ifecka\r\nfirst_page.title=Ddu ɣer usebter amezwaru\r\nfirst_page.label=Ddu ɣer usebter amezwaru\r\nfirst_page_label=Ddu ɣer usebter amezwaru\r\nlast_page.title=Ddu ɣer usebter aneggaru\r\nlast_page.label=Ddu ɣer usebter aneggaru\r\nlast_page_label=Ddu ɣer usebter aneggaru\r\npage_rotate_cw.title=Tuzzya tusrigt\r\npage_rotate_cw.label=Tuzzya tusrigt\r\npage_rotate_cw_label=Tuzzya tusrigt\r\npage_rotate_ccw.title=Tuzzya amgal-usrig\r\npage_rotate_ccw.label=Tuzzya amgal-usrig\r\npage_rotate_ccw_label=Tuzzya amgal-usrig\r\n\r\ncursor_text_select_tool.title=Rmed afecku n tefrant n uḍris\r\ncursor_text_select_tool_label=Afecku n tefrant n uḍris\r\ncursor_hand_tool.title=Rmed afecku afus\r\ncursor_hand_tool_label=Afecku afus\r\n\r\nscroll_vertical.title=Seqdec adrurem ubdid\r\nscroll_vertical_label=Adrurem ubdid\r\nscroll_horizontal.title=Seqdec adrurem aglawan\r\nscroll_horizontal_label=Adrurem aglawan\r\nscroll_wrapped.title=Seqdec adrurem yuẓen\r\nscroll_wrapped_label=Adrurem yuẓen\r\n\r\nspread_none.title=Ur sedday ara isiɣzaf n usebter\r\nspread_none_label=Ulac isiɣzaf\r\nspread_odd.title=Seddu isiɣzaf n usebter ibeddun s yisebtar irayuganen\r\nspread_odd_label=Isiɣzaf irayuganen\r\nspread_even.title=Seddu isiɣzaf n usebter ibeddun s yisebtar iyuganen\r\nspread_even_label=Isiɣzaf iyuganen\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Taɣaṛa n isemli…\r\ndocument_properties_label=Taɣaṛa n isemli…\r\ndocument_properties_file_name=Isem n ufaylu:\r\ndocument_properties_file_size=Teɣzi n ufaylu:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KAṬ ({{size_b}} ibiten)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MAṬ ({{size_b}} iṭamḍanen)\r\ndocument_properties_title=Azwel:\r\ndocument_properties_author=Ameskar:\r\ndocument_properties_subject=Amgay:\r\ndocument_properties_keywords=Awalen n tsaruţ\r\ndocument_properties_creation_date=Azemz n tmerna:\r\ndocument_properties_modification_date=Azemz n usnifel:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Yerna-t:\r\ndocument_properties_producer=Afecku n uselket PDF:\r\ndocument_properties_version=Lqem PDF:\r\ndocument_properties_page_count=Amḍan n yisebtar:\r\ndocument_properties_page_size=Tuγzi n usebter:\r\ndocument_properties_page_size_unit_inches=deg\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=s teɣzi\r\ndocument_properties_page_size_orientation_landscape=s tehri\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Asekkil\r\ndocument_properties_page_size_name_legal=Usḍif\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Taskant Web taruradt:\r\ndocument_properties_linearized_yes=Ih\r\ndocument_properties_linearized_no=Ala\r\ndocument_properties_close=Mdel\r\n\r\nprint_progress_message=Aheggi i usiggez n isemli…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Sefsex\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Sken/Fer agalis adisan\r\ntoggle_sidebar_notification.title=Ffer/Sken agalis adisan (isemli yegber aɣawas/imeddayen)\r\ntoggle_sidebar_notification2.title=Ffer/Sekn agalis adisan (isemli yegber aɣawas/ticeqqufin yeddan/tissiwin)\r\ntoggle_sidebar_label=Sken/Fer agalis adisan\r\ndocument_outline.title=Sken isemli (Senned snat tikal i wesemɣer/Afneẓ n iferdisen meṛṛa)\r\ndocument_outline_label=Isɣalen n isebtar\r\nattachments.title=Sken ticeqqufin yeddan\r\nattachments_label=Ticeqqufin yeddan\r\nlayers.title=Skeen tissiwin (sit sin yiberdan i uwennez n meṛṛa tissiwin ɣer waddad amezwer)\r\nlayers_label=Tissiwin\r\nthumbs.title=Sken tanfult.\r\nthumbs_label=Tinfulin\r\ncurrent_outline_item.title=Af-d aferdis n uɣawas amiran\r\ncurrent_outline_item_label=Aferdis n uɣawas amiran\r\nfindbar.title=Nadi deg isemli\r\nfindbar_label=Nadi\r\n\r\nadditional_layers=Tissiwin-nniḍen\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Asebter {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Asebter {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Tanfult n usebter {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Nadi\r\nfind_input.placeholder=Nadi deg isemli…\r\nfind_previous.title=Aff-d tamseḍriwt n twinest n deffir\r\nfind_previous_label=Azewwar\r\nfind_next.title=Aff-d timseḍriwt n twinest d-iteddun\r\nfind_next_label=Ddu ɣer zdat\r\nfind_highlight=Err izirig imaṛṛa\r\nfind_match_case_label=Qadeṛ amasal n isekkilen\r\nfind_entire_word_label=Awalen iččuranen\r\nfind_reached_top=Yabbeḍ s afella n usebter, tuɣalin s wadda\r\nfind_reached_bottom=Tebḍeḍ s adda n usebter, tuɣalin s afella\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} seg {{total}} n tmeɣṛuḍin\r\nfind_match_count[two]={{current}} seg {{total}} n tmeɣṛuḍin\r\nfind_match_count[few]={{current}} seg {{total}} n tmeɣṛuḍin\r\nfind_match_count[many]={{current}} seg {{total}} n tmeɣṛuḍin\r\nfind_match_count[other]={{current}} seg {{total}} n tmeɣṛuḍin\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Ugar n {{limit}} n tmeɣṛuḍin\r\nfind_match_count_limit[one]=Ugar n {{limit}} n tmeɣṛuḍin\r\nfind_match_count_limit[two]=Ugar n {{limit}} n tmeɣṛuḍin\r\nfind_match_count_limit[few]=Ugar n {{limit}} n tmeɣṛuḍin\r\nfind_match_count_limit[many]=Ugar n {{limit}} n tmeɣṛuḍin\r\nfind_match_count_limit[other]=Ugar n {{limit}} n tmeɣṛuḍin\r\nfind_not_found=Ulac tawinest\r\n\r\n# Error panel labels\r\nerror_more_info=Ugar n telɣut\r\nerror_less_info=Drus n isalen\r\nerror_close=Mdel\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Izen: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Tanebdant: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Afaylu: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Izirig: {{line}}\r\nrendering_error=Teḍra-d tuccḍa deg uskan n usebter.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Tehri n usebter\r\npage_scale_fit=Asebter imaṛṛa\r\npage_scale_auto=Asemɣeṛ/Asemẓi awurman\r\npage_scale_actual=Teɣzi tilawt\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=Teḍra-d tuccḍa deg alluy n PDF:\r\ninvalid_file_error=Afaylu PDF arameɣtu neɣ yexṣeṛ.\r\nmissing_file_error=Ulac afaylu PDF.\r\nunexpected_response_error=Aqeddac yerra-d yir tiririt ur nettwaṛǧi ara.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Tabzimt {{type}}]\r\npassword_label=Sekcem awal uffir akken ad ldiḍ afaylu-yagi PDF\r\npassword_invalid=Awal uffir mačči d ameɣtu, Ɛreḍ tikelt-nniḍen.\r\npassword_ok=IH\r\npassword_cancel=Sefsex\r\n\r\nprinting_not_supported=Ɣuṛ-k: Asiggez ur ittusefrak ara yakan imaṛṛa deg iminig-a.\r\nprinting_not_ready=Ɣuṛ-k: Afaylu PDF ur d-yuli ara imeṛṛa akken ad ittusiggez.\r\nweb_fonts_disabled=Tisefsiyin web ttwassensent; D awezɣi useqdec n tsefsiyin yettwarnan ɣer PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/kk/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Алдыңғы парақ\r\nprevious_label=Алдыңғысы\r\nnext.title=Келесі парақ\r\nnext_label=Келесі\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Парақ\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}} ішінен\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=(парақ {{pageNumber}}, {{pagesCount}} ішінен)\r\n\r\nzoom_out.title=Кішірейту\r\nzoom_out_label=Кішірейту\r\nzoom_in.title=Үлкейту\r\nzoom_in_label=Үлкейту\r\nzoom.title=Масштаб\r\npresentation_mode.title=Презентация режиміне ауысу\r\npresentation_mode_label=Презентация режимі\r\nopen_file.title=Файлды ашу\r\nopen_file_label=Ашу\r\nprint.title=Баспаға шығару\r\nprint_label=Баспаға шығару\r\ndownload.title=Жүктеп алу\r\ndownload_label=Жүктеп алу\r\nbookmark.title=Ағымдағы көрініс (көшіру не жаңа терезеде ашу)\r\nbookmark_label=Ағымдағы көрініс\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Құралдар\r\ntools_label=Құралдар\r\nfirst_page.title=Алғашқы параққа өту\r\nfirst_page.label=Алғашқы параққа өту\r\nfirst_page_label=Алғашқы параққа өту\r\nlast_page.title=Соңғы параққа өту\r\nlast_page.label=Соңғы параққа өту\r\nlast_page_label=Соңғы параққа өту\r\npage_rotate_cw.title=Сағат тілі бағытымен айналдыру\r\npage_rotate_cw.label=Сағат тілі бағытымен бұру\r\npage_rotate_cw_label=Сағат тілі бағытымен бұру\r\npage_rotate_ccw.title=Сағат тілі бағытына қарсы бұру\r\npage_rotate_ccw.label=Сағат тілі бағытына қарсы бұру\r\npage_rotate_ccw_label=Сағат тілі бағытына қарсы бұру\r\n\r\ncursor_text_select_tool.title=Мәтінді таңдау құралын іске қосу\r\ncursor_text_select_tool_label=Мәтінді таңдау құралы\r\ncursor_hand_tool.title=Қол құралын іске қосу\r\ncursor_hand_tool_label=Қол құралы\r\n\r\nscroll_vertical.title=Вертикалды айналдыруды қолдану\r\nscroll_vertical_label=Вертикалды айналдыру\r\nscroll_horizontal.title=Горизонталды айналдыруды қолдану\r\nscroll_horizontal_label=Горизонталды айналдыру\r\nscroll_wrapped.title=Масштабталатын айналдыруды қолдану\r\nscroll_wrapped_label=Масштабталатын айналдыру\r\n\r\nspread_none.title=Жазық беттер режимін қолданбау\r\nspread_none_label=Жазық беттер режимсіз\r\nspread_odd.title=Жазық беттер тақ нөмірлі беттерден басталады\r\nspread_odd_label=Тақ нөмірлі беттер сол жақтан\r\nspread_even.title=Жазық беттер жұп нөмірлі беттерден басталады\r\nspread_even_label=Жұп нөмірлі беттер сол жақтан\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Құжат қасиеттері…\r\ndocument_properties_label=Құжат қасиеттері…\r\ndocument_properties_file_name=Файл аты:\r\ndocument_properties_file_size=Файл өлшемі:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} КБ ({{size_b}} байт)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} МБ ({{size_b}} байт)\r\ndocument_properties_title=Тақырыбы:\r\ndocument_properties_author=Авторы:\r\ndocument_properties_subject=Тақырыбы:\r\ndocument_properties_keywords=Кілт сөздер:\r\ndocument_properties_creation_date=Жасалған күні:\r\ndocument_properties_modification_date=Түзету күні:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Жасаған:\r\ndocument_properties_producer=PDF өндірген:\r\ndocument_properties_version=PDF нұсқасы:\r\ndocument_properties_page_count=Беттер саны:\r\ndocument_properties_page_size=Бет өлшемі:\r\ndocument_properties_page_size_unit_inches=дюйм\r\ndocument_properties_page_size_unit_millimeters=мм\r\ndocument_properties_page_size_orientation_portrait=тік\r\ndocument_properties_page_size_orientation_landscape=жатық\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Жылдам Web көрінісі:\r\ndocument_properties_linearized_yes=Иә\r\ndocument_properties_linearized_no=Жоқ\r\ndocument_properties_close=Жабу\r\n\r\nprint_progress_message=Құжатты баспаға шығару үшін дайындау…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Бас тарту\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Бүйір панелін көрсету/жасыру\r\ntoggle_sidebar_notification.title=Бүйір панелін көрсету/жасыру (құжатта құрылымы/салынымдар бар)\r\ntoggle_sidebar_notification2.title=Бүйір панелін көрсету/жасыру (құжатта құрылымы/салынымдар/қабаттар бар)\r\ntoggle_sidebar_label=Бүйір панелін көрсету/жасыру\r\ndocument_outline.title=Құжат құрылымын көрсету (барлық нәрселерді жазық қылу/жинау үшін қос шерту керек)\r\ndocument_outline_label=Құжат құрамасы\r\nattachments.title=Салынымдарды көрсету\r\nattachments_label=Салынымдар\r\nlayers.title=Қабаттарды көрсету (барлық қабаттарды бастапқы күйге келтіру үшін екі рет шертіңіз)\r\nlayers_label=Қабаттар\r\nthumbs.title=Кіші көріністерді көрсету\r\nthumbs_label=Кіші көріністер\r\nfindbar.title=Құжаттан табу\r\nfindbar_label=Табу\r\n\r\nadditional_layers=Қосымша қабаттар\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Бет {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title={{page}} парағы\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}} парағы үшін кіші көрінісі\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Табу\r\nfind_input.placeholder=Құжаттан табу…\r\nfind_previous.title=Осы сөздердің мәтіннен алдыңғы кездесуін табу\r\nfind_previous_label=Алдыңғысы\r\nfind_next.title=Осы сөздердің мәтіннен келесі кездесуін табу\r\nfind_next_label=Келесі\r\nfind_highlight=Барлығын түспен ерекшелеу\r\nfind_match_case_label=Регистрді ескеру\r\nfind_entire_word_label=Сөздер толығымен\r\nfind_reached_top=Құжаттың басына жеттік, соңынан бастап жалғастырамыз\r\nfind_reached_bottom=Құжаттың соңына жеттік, басынан бастап жалғастырамыз\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} / {{total}} сәйкестік\r\nfind_match_count[two]={{current}} / {{total}} сәйкестік\r\nfind_match_count[few]={{current}} / {{total}} сәйкестік\r\nfind_match_count[many]={{current}} / {{total}} сәйкестік\r\nfind_match_count[other]={{current}} / {{total}} сәйкестік\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]={{limit}} сәйкестіктен көп\r\nfind_match_count_limit[one]={{limit}} сәйкестіктен көп\r\nfind_match_count_limit[two]={{limit}} сәйкестіктен көп\r\nfind_match_count_limit[few]={{limit}} сәйкестіктен көп\r\nfind_match_count_limit[many]={{limit}} сәйкестіктен көп\r\nfind_match_count_limit[other]={{limit}} сәйкестіктен көп\r\nfind_not_found=Сөз(дер) табылмады\r\n\r\n# Error panel labels\r\nerror_more_info=Көбірек ақпарат\r\nerror_less_info=Азырақ ақпарат\r\nerror_close=Жабу\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (жинақ: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Хабарлама: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Стек: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Файл: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Жол: {{line}}\r\nrendering_error=Парақты өңдеу кезінде қате кетті.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Парақ ені\r\npage_scale_fit=Парақты сыйдыру\r\npage_scale_auto=Автомасштабтау\r\npage_scale_actual=Нақты өлшемі\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Қате\r\nloading_error=PDF жүктеу кезінде қате кетті.\r\ninvalid_file_error=Зақымдалған немесе қате PDF файл.\r\nmissing_file_error=PDF файлы жоқ.\r\nunexpected_response_error=Сервердің күтпеген жауабы.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} аңдатпасы]\r\npassword_label=Бұл PDF файлын ашу үшін парольді енгізіңіз.\r\npassword_invalid=Пароль дұрыс емес. Қайталап көріңіз.\r\npassword_ok=ОК\r\npassword_cancel=Бас тарту\r\n\r\nprinting_not_supported=Ескерту: Баспаға шығаруды бұл браузер толығымен қолдамайды.\r\nprinting_not_ready=Ескерту: Баспаға шығару үшін, бұл PDF толығымен жүктеліп алынбады.\r\nweb_fonts_disabled=Веб қаріптері сөндірілген: құрамына енгізілген PDF қаріптерін қолдану мүмкін емес.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/km/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=ទំព័រ​មុន\r\nprevious_label=មុន\r\nnext.title=ទំព័រ​បន្ទាប់\r\nnext_label=បន្ទាប់\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=ទំព័រ\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=នៃ {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} នៃ {{pagesCount}})\r\n\r\nzoom_out.title=​បង្រួម\r\nzoom_out_label=​បង្រួម\r\nzoom_in.title=​ពង្រីក\r\nzoom_in_label=​ពង្រីក\r\nzoom.title=ពង្រីក\r\npresentation_mode.title=ប្ដូរ​ទៅ​របៀប​បទ​បង្ហាញ\r\npresentation_mode_label=របៀប​បទ​បង្ហាញ\r\nopen_file.title=បើក​ឯកសារ\r\nopen_file_label=បើក\r\nprint.title=បោះពុម្ព\r\nprint_label=បោះពុម្ព\r\ndownload.title=ទាញ​យក\r\ndownload_label=ទាញ​យក\r\nbookmark.title=ទិដ្ឋភាព​បច្ចុប្បន្ន (ចម្លង ឬ​បើក​នៅ​ក្នុង​បង្អួច​ថ្មី)\r\nbookmark_label=ទិដ្ឋភាព​បច្ចុប្បន្ន\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=ឧបករណ៍\r\ntools_label=ឧបករណ៍\r\nfirst_page.title=ទៅកាន់​ទំព័រ​ដំបូង​\r\nfirst_page.label=ទៅកាន់​ទំព័រ​ដំបូង​\r\nfirst_page_label=ទៅកាន់​ទំព័រ​ដំបូង​\r\nlast_page.title=ទៅកាន់​ទំព័រ​ចុងក្រោយ​\r\nlast_page.label=ទៅកាន់​ទំព័រ​ចុងក្រោយ​\r\nlast_page_label=ទៅកាន់​ទំព័រ​ចុងក្រោយ\r\npage_rotate_cw.title=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា\r\npage_rotate_cw.label=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា\r\npage_rotate_cw_label=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា\r\npage_rotate_ccw.title=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​\r\npage_rotate_ccw.label=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​\r\npage_rotate_ccw_label=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​\r\n\r\ncursor_text_select_tool.title=បើក​ឧបករណ៍​ជ្រើស​អត្ថបទ\r\ncursor_text_select_tool_label=ឧបករណ៍​ជ្រើស​អត្ថបទ\r\ncursor_hand_tool.title=បើក​ឧបករណ៍​ដៃ\r\ncursor_hand_tool_label=ឧបករណ៍​ដៃ\r\n\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=លក្ខណ​សម្បត្តិ​ឯកសារ…\r\ndocument_properties_label=លក្ខណ​សម្បត្តិ​ឯកសារ…\r\ndocument_properties_file_name=ឈ្មោះ​ឯកសារ៖\r\ndocument_properties_file_size=ទំហំ​ឯកសារ៖\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} បៃ)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} បៃ)\r\ndocument_properties_title=ចំណងជើង៖\r\ndocument_properties_author=អ្នក​និពន្ធ៖\r\ndocument_properties_subject=ប្រធានបទ៖\r\ndocument_properties_keywords=ពាក្យ​គន្លឹះ៖\r\ndocument_properties_creation_date=កាលបរិច្ឆេទ​បង្កើត៖\r\ndocument_properties_modification_date=កាលបរិច្ឆេទ​កែប្រែ៖\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=អ្នក​បង្កើត៖\r\ndocument_properties_producer=កម្មវិធី​បង្កើត PDF ៖\r\ndocument_properties_version=កំណែ PDF ៖\r\ndocument_properties_page_count=ចំនួន​ទំព័រ៖\r\ndocument_properties_page_size_unit_inches=អ៊ីញ\r\ndocument_properties_page_size_unit_millimeters=មម\r\ndocument_properties_page_size_orientation_portrait=បញ្ឈរ\r\ndocument_properties_page_size_orientation_landscape=ផ្តេក\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=សំបុត្រ\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized_yes=បាទ/ចាស\r\ndocument_properties_linearized_no=ទេ\r\ndocument_properties_close=បិទ\r\n\r\nprint_progress_message=កំពុង​រៀបចំ​ឯកសារ​សម្រាប់​បោះពុម្ព…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=បោះបង់\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=បិទ/បើក​គ្រាប់​រំកិល\r\ntoggle_sidebar_notification.title=បិទ/បើក​របារ​ចំហៀង (ឯកសារ​មាន​មាតិកា​នៅ​ក្រៅ/attachments)\r\ntoggle_sidebar_label=បិទ/បើក​គ្រាប់​រំកិល\r\ndocument_outline.title=បង្ហាញ​គ្រោង​ឯកសារ (ចុច​ទ្វេ​ដង​ដើម្បី​ពង្រីក/បង្រួម​ធាតុ​ទាំងអស់)\r\ndocument_outline_label=គ្រោង​ឯកសារ\r\nattachments.title=បង្ហាញ​ឯកសារ​ភ្ជាប់\r\nattachments_label=ឯកសារ​ភ្ជាប់\r\nthumbs.title=បង្ហាញ​រូបភាព​តូចៗ\r\nthumbs_label=រួបភាព​តូចៗ\r\nfindbar.title=រក​នៅ​ក្នុង​ឯកសារ\r\nfindbar_label=រក\r\n\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=ទំព័រ {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=រូបភាព​តូច​របស់​ទំព័រ {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=រក\r\nfind_input.placeholder=រក​នៅ​ក្នុង​ឯកសារ...\r\nfind_previous.title=រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​មុន\r\nfind_previous_label=មុន\r\nfind_next.title=រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​បន្ទាប់\r\nfind_next_label=បន្ទាប់\r\nfind_highlight=បន្លិច​ទាំងអស់\r\nfind_match_case_label=ករណី​ដំណូច\r\nfind_reached_top=បាន​បន្ត​ពី​ខាង​ក្រោម ទៅ​ដល់​ខាង​​លើ​នៃ​ឯកសារ\r\nfind_reached_bottom=បាន​បន្ត​ពី​ខាងលើ ទៅដល់​ចុង​​នៃ​ឯកសារ\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_not_found=រក​មិន​ឃើញ​ពាក្យ ឬ​ឃ្លា\r\n\r\n# Error panel labels\r\nerror_more_info=ព័ត៌មាន​បន្ថែម\r\nerror_less_info=ព័ត៌មាន​តិចតួច\r\nerror_close=បិទ\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=សារ ៖ {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=ជង់ ៖ {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=ឯកសារ ៖ {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=ជួរ ៖ {{line}}\r\nrendering_error=មាន​កំហុស​បាន​កើតឡើង​ពេល​បង្ហាញ​ទំព័រ ។\r\n\r\n# Predefined zoom values\r\npage_scale_width=ទទឹង​ទំព័រ\r\npage_scale_fit=សម​ទំព័រ\r\npage_scale_auto=ពង្រីក​ស្វ័យប្រវត្តិ\r\npage_scale_actual=ទំហំ​ជាក់ស្ដែង\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=កំហុស\r\nloading_error=មាន​កំហុស​បាន​កើតឡើង​ពេល​កំពុង​ផ្ទុក PDF ។\r\ninvalid_file_error=ឯកសារ PDF ខូច ឬ​មិន​ត្រឹមត្រូវ ។\r\nmissing_file_error=បាត់​ឯកសារ PDF\r\nunexpected_response_error=ការ​ឆ្លើយ​តម​ម៉ាស៊ីន​មេ​ដែល​មិន​បាន​រំពឹង។\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} ចំណារ​ពន្យល់]\r\npassword_label=បញ្ចូល​ពាក្យសម្ងាត់​ដើម្បី​បើក​ឯកសារ PDF នេះ។\r\npassword_invalid=ពាក្យសម្ងាត់​មិន​ត្រឹមត្រូវ។ សូម​ព្យាយាម​ម្ដងទៀត។\r\npassword_ok=យល់​ព្រម\r\npassword_cancel=បោះបង់\r\n\r\nprinting_not_supported=ការ​ព្រមាន ៖ កា​រ​បោះពុម្ព​មិន​ត្រូវ​បាន​គាំទ្រ​ពេញលេញ​ដោយ​កម្មវិធី​រុករក​នេះ​ទេ ។\r\nprinting_not_ready=ព្រមាន៖ PDF មិន​ត្រូវ​បាន​ផ្ទុក​ទាំងស្រុង​ដើម្បី​បោះពុម្ព​ទេ។\r\nweb_fonts_disabled=បាន​បិទ​ពុម្ពអក្សរ​បណ្ដាញ ៖ មិន​អាច​ប្រើ​ពុម្ពអក្សរ PDF ដែល​បាន​បង្កប់​បាន​ទេ ។\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/kn/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=ಹಿಂದಿನ ಪುಟ\r\nprevious_label=ಹಿಂದಿನ\r\nnext.title=ಮುಂದಿನ ಪುಟ\r\nnext_label=ಮುಂದಿನ\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=ಪುಟ\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}} ರಲ್ಲಿ\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pagesCount}} ರಲ್ಲಿ {{pageNumber}})\r\n\r\nzoom_out.title=ಕಿರಿದಾಗಿಸು\r\nzoom_out_label=ಕಿರಿದಾಗಿಸಿ\r\nzoom_in.title=ಹಿರಿದಾಗಿಸು\r\nzoom_in_label=ಹಿರಿದಾಗಿಸಿ\r\nzoom.title=ಗಾತ್ರಬದಲಿಸು\r\npresentation_mode.title=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮಕ್ಕೆ ಬದಲಾಯಿಸು\r\npresentation_mode_label=ಪ್ರಸ್ತುತಿ (ಪ್ರಸೆಂಟೇಶನ್) ಕ್ರಮ\r\nopen_file.title=ಕಡತವನ್ನು ತೆರೆ\r\nopen_file_label=ತೆರೆಯಿರಿ\r\nprint.title=ಮುದ್ರಿಸು\r\nprint_label=ಮುದ್ರಿಸಿ\r\ndownload.title=ಇಳಿಸು\r\ndownload_label=ಇಳಿಸಿಕೊಳ್ಳಿ\r\nbookmark.title=ಪ್ರಸಕ್ತ ನೋಟ (ಪ್ರತಿ ಮಾಡು ಅಥವ ಹೊಸ ಕಿಟಕಿಯಲ್ಲಿ ತೆರೆ)\r\nbookmark_label=ಪ್ರಸಕ್ತ ನೋಟ\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=ಉಪಕರಣಗಳು\r\ntools_label=ಉಪಕರಣಗಳು\r\nfirst_page.title=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು\r\nfirst_page.label=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು\r\nfirst_page_label=ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು\r\nlast_page.title=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು\r\nlast_page.label=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು\r\nlast_page_label=ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು\r\npage_rotate_cw.title=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು\r\npage_rotate_cw.label=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು\r\npage_rotate_cw_label=ಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು\r\npage_rotate_ccw.title=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು\r\npage_rotate_ccw.label=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು\r\npage_rotate_ccw_label=ಅಪ್ರದಕ್ಷಿಣೆಯಲ್ಲಿ ತಿರುಗಿಸು\r\n\r\ncursor_text_select_tool.title=ಪಠ್ಯ ಆಯ್ಕೆ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ\r\ncursor_text_select_tool_label=ಪಠ್ಯ ಆಯ್ಕೆಯ ಉಪಕರಣ\r\ncursor_hand_tool.title=ಕೈ ಉಪಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ\r\ncursor_hand_tool_label=ಕೈ ಉಪಕರಣ\r\n\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=ಡಾಕ್ಯುಮೆಂಟ್‌ ಗುಣಗಳು...\r\ndocument_properties_label=ಡಾಕ್ಯುಮೆಂಟ್‌ ಗುಣಗಳು...\r\ndocument_properties_file_name=ಕಡತದ ಹೆಸರು:\r\ndocument_properties_file_size=ಕಡತದ ಗಾತ್ರ:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} ಬೈಟ್‍ಗಳು)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} ಬೈಟ್‍ಗಳು)\r\ndocument_properties_title=ಶೀರ್ಷಿಕೆ:\r\ndocument_properties_author=ಕರ್ತೃ:\r\ndocument_properties_subject=ವಿಷಯ:\r\ndocument_properties_keywords=ಮುಖ್ಯಪದಗಳು:\r\ndocument_properties_creation_date=ರಚಿಸಿದ ದಿನಾಂಕ:\r\ndocument_properties_modification_date=ಮಾರ್ಪಡಿಸಲಾದ ದಿನಾಂಕ:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=ರಚಿಸಿದವರು:\r\ndocument_properties_producer=PDF ಉತ್ಪಾದಕ:\r\ndocument_properties_version=PDF ಆವೃತ್ತಿ:\r\ndocument_properties_page_count=ಪುಟದ ಎಣಿಕೆ:\r\ndocument_properties_page_size_unit_inches=ಇದರಲ್ಲಿ\r\ndocument_properties_page_size_orientation_portrait=ಭಾವಚಿತ್ರ\r\ndocument_properties_page_size_orientation_landscape=ಪ್ರಕೃತಿ ಚಿತ್ರ\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_close=ಮುಚ್ಚು\r\n\r\nprint_progress_message=ಮುದ್ರಿಸುವುದಕ್ಕಾಗಿ ದಸ್ತಾವೇಜನ್ನು ಸಿದ್ಧಗೊಳಿಸಲಾಗುತ್ತಿದೆ…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=ರದ್ದು ಮಾಡು\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು\r\ntoggle_sidebar_label=ಬದಿಪಟ್ಟಿಯನ್ನು ಹೊರಳಿಸು\r\ndocument_outline_label=ದಸ್ತಾವೇಜಿನ ಹೊರರೇಖೆ\r\nattachments.title=ಲಗತ್ತುಗಳನ್ನು ತೋರಿಸು\r\nattachments_label=ಲಗತ್ತುಗಳು\r\nthumbs.title=ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು\r\nthumbs_label=ಚಿಕ್ಕಚಿತ್ರಗಳು\r\nfindbar.title=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು\r\nfindbar_label=ಹುಡುಕು\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=ಪುಟ {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=ಪುಟವನ್ನು ಚಿಕ್ಕಚಿತ್ರದಂತೆ ತೋರಿಸು {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=ಹುಡುಕು\r\nfind_input.placeholder=ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕು…\r\nfind_previous.title=ವಾಕ್ಯದ ಹಿಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು\r\nfind_previous_label=ಹಿಂದಿನ\r\nfind_next.title=ವಾಕ್ಯದ ಮುಂದಿನ ಇರುವಿಕೆಯನ್ನು ಹುಡುಕು\r\nfind_next_label=ಮುಂದಿನ\r\nfind_highlight=ಎಲ್ಲವನ್ನು ಹೈಲೈಟ್ ಮಾಡು\r\nfind_match_case_label=ಕೇಸನ್ನು ಹೊಂದಿಸು\r\nfind_reached_top=ದಸ್ತಾವೇಜಿನ ಮೇಲ್ಭಾಗವನ್ನು ತಲುಪಿದೆ, ಕೆಳಗಿನಿಂದ ಆರಂಭಿಸು\r\nfind_reached_bottom=ದಸ್ತಾವೇಜಿನ ಕೊನೆಯನ್ನು ತಲುಪಿದೆ, ಮೇಲಿನಿಂದ ಆರಂಭಿಸು\r\nfind_not_found=ವಾಕ್ಯವು ಕಂಡು ಬಂದಿಲ್ಲ\r\n\r\n# Error panel labels\r\nerror_more_info=ಹೆಚ್ಚಿನ ಮಾಹಿತಿ\r\nerror_less_info=ಕಡಿಮೆ ಮಾಹಿತಿ\r\nerror_close=ಮುಚ್ಚು\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=ಸಂದೇಶ: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=ರಾಶಿ: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=ಕಡತ: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=ಸಾಲು: {{line}}\r\nrendering_error=ಪುಟವನ್ನು ನಿರೂಪಿಸುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ.\r\n\r\n# Predefined zoom values\r\npage_scale_width=ಪುಟದ ಅಗಲ\r\npage_scale_fit=ಪುಟದ ಸರಿಹೊಂದಿಕೆ\r\npage_scale_auto=ಸ್ವಯಂಚಾಲಿತ ಗಾತ್ರಬದಲಾವಣೆ\r\npage_scale_actual=ನಿಜವಾದ ಗಾತ್ರ\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=ದೋಷ\r\nloading_error=PDF ಅನ್ನು ಲೋಡ್ ಮಾಡುವಾಗ ಒಂದು ದೋಷ ಎದುರಾಗಿದೆ.\r\ninvalid_file_error=ಅಮಾನ್ಯವಾದ ಅಥವ ಹಾಳಾದ PDF ಕಡತ.\r\nmissing_file_error=PDF ಕಡತ ಇಲ್ಲ.\r\nunexpected_response_error=ಅನಿರೀಕ್ಷಿತವಾದ ಪೂರೈಕೆಗಣಕದ ಪ್ರತಿಕ್ರಿಯೆ.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} ಟಿಪ್ಪಣಿ]\r\npassword_label=PDF ಅನ್ನು ತೆರೆಯಲು ಗುಪ್ತಪದವನ್ನು ನಮೂದಿಸಿ.\r\npassword_invalid=ಅಮಾನ್ಯವಾದ ಗುಪ್ತಪದ, ದಯವಿಟ್ಟು ಇನ್ನೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.\r\npassword_ok=OK\r\npassword_cancel=ರದ್ದು ಮಾಡು\r\n\r\nprinting_not_supported=ಎಚ್ಚರಿಕೆ: ಈ ಜಾಲವೀಕ್ಷಕದಲ್ಲಿ ಮುದ್ರಣಕ್ಕೆ ಸಂಪೂರ್ಣ ಬೆಂಬಲವಿಲ್ಲ.\r\nprinting_not_ready=ಎಚ್ಚರಿಕೆ: PDF ಕಡತವು ಮುದ್ರಿಸಲು ಸಂಪೂರ್ಣವಾಗಿ ಲೋಡ್ ಆಗಿಲ್ಲ.\r\nweb_fonts_disabled=ಜಾಲ ಅಕ್ಷರಶೈಲಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ: ಅಡಕಗೊಳಿಸಿದ PDF ಅಕ್ಷರಶೈಲಿಗಳನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ko/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=이전 페이지\r\nprevious_label=이전\r\nnext.title=다음 페이지\r\nnext_label=다음\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=페이지\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=/ {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} / {{pagesCount}})\r\n\r\nzoom_out.title=축소\r\nzoom_out_label=축소\r\nzoom_in.title=확대\r\nzoom_in_label=확대\r\nzoom.title=확대/축소\r\npresentation_mode.title=프레젠테이션 모드로 전환\r\npresentation_mode_label=프레젠테이션 모드\r\nopen_file.title=파일 열기\r\nopen_file_label=열기\r\nprint.title=인쇄\r\nprint_label=인쇄\r\ndownload.title=다운로드\r\ndownload_label=다운로드\r\nbookmark.title=현재 보기 (복사 또는 새 창에 열기)\r\nbookmark_label=현재 보기\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=도구\r\ntools_label=도구\r\nfirst_page.title=첫 페이지로 이동\r\nfirst_page.label=첫 페이지로 이동\r\nfirst_page_label=첫 페이지로 이동\r\nlast_page.title=마지막 페이지로 이동\r\nlast_page.label=마지막 페이지로 이동\r\nlast_page_label=마지막 페이지로 이동\r\npage_rotate_cw.title=시계방향으로 회전\r\npage_rotate_cw.label=시계방향으로 회전\r\npage_rotate_cw_label=시계방향으로 회전\r\npage_rotate_ccw.title=시계 반대방향으로 회전\r\npage_rotate_ccw.label=시계 반대방향으로 회전\r\npage_rotate_ccw_label=시계 반대방향으로 회전\r\n\r\ncursor_text_select_tool.title=텍스트 선택 도구 활성화\r\ncursor_text_select_tool_label=텍스트 선택 도구\r\ncursor_hand_tool.title=손 도구 활성화\r\ncursor_hand_tool_label=손 도구\r\n\r\nscroll_vertical.title=세로 스크롤 사용\r\nscroll_vertical_label=세로 스크롤\r\nscroll_horizontal.title=가로 스크롤 사용\r\nscroll_horizontal_label=가로 스크롤\r\nscroll_wrapped.title=래핑(자동 줄 바꿈) 스크롤 사용\r\nscroll_wrapped_label=래핑 스크롤\r\n\r\nspread_none.title=한 페이지 보기\r\nspread_none_label=펼쳐짐 없음\r\nspread_odd.title=홀수 페이지로 시작하는 두 페이지 보기\r\nspread_odd_label=홀수 펼쳐짐\r\nspread_even.title=짝수 페이지로 시작하는 두 페이지 보기\r\nspread_even_label=짝수 펼쳐짐\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=문서 속성…\r\ndocument_properties_label=문서 속성…\r\ndocument_properties_file_name=파일 이름:\r\ndocument_properties_file_size=파일 크기:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}}바이트)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}}바이트)\r\ndocument_properties_title=제목:\r\ndocument_properties_author=작성자:\r\ndocument_properties_subject=주제:\r\ndocument_properties_keywords=키워드:\r\ndocument_properties_creation_date=작성 날짜:\r\ndocument_properties_modification_date=수정 날짜:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=작성 프로그램:\r\ndocument_properties_producer=PDF 변환 소프트웨어:\r\ndocument_properties_version=PDF 버전:\r\ndocument_properties_page_count=페이지 수:\r\ndocument_properties_page_size=페이지 크기:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=세로 방향\r\ndocument_properties_page_size_orientation_landscape=가로 방향\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=레터\r\ndocument_properties_page_size_name_legal=리걸\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=빠른 웹 보기:\r\ndocument_properties_linearized_yes=예\r\ndocument_properties_linearized_no=아니오\r\ndocument_properties_close=닫기\r\n\r\nprint_progress_message=인쇄 문서 준비 중…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=취소\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=탐색창 표시/숨기기\r\ntoggle_sidebar_notification.title=탐색창 표시/숨기기 (문서에 아웃라인/첨부파일 포함됨)\r\ntoggle_sidebar_notification2.title=탐색창 표시/숨기기 (문서에 아웃라인/첨부파일/레이어 포함됨)\r\ntoggle_sidebar_label=탐색창 표시/숨기기\r\ndocument_outline.title=문서 아웃라인 보기 (더블 클릭해서 모든 항목 펼치기/접기)\r\ndocument_outline_label=문서 아웃라인\r\nattachments.title=첨부파일 보기\r\nattachments_label=첨부파일\r\nlayers.title=레이어 보기 (더블 클릭해서 모든 레이어를 기본 상태로 재설정)\r\nlayers_label=레이어\r\nthumbs.title=미리보기\r\nthumbs_label=미리보기\r\ncurrent_outline_item.title=현재 아웃라인 항목 찾기\r\ncurrent_outline_item_label=현재 아웃라인 항목\r\nfindbar.title=검색\r\nfindbar_label=검색\r\n\r\nadditional_layers=추가 레이어\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas={{page}} 페이지\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title={{page}} 페이지\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}} 페이지 미리보기\r\n\r\n# Find panel button title and messages\r\nfind_input.title=찾기\r\nfind_input.placeholder=문서에서 찾기…\r\nfind_previous.title=지정 문자열에 일치하는 1개 부분을 검색\r\nfind_previous_label=이전\r\nfind_next.title=지정 문자열에 일치하는 다음 부분을 검색\r\nfind_next_label=다음\r\nfind_highlight=모두 강조 표시\r\nfind_match_case_label=대/소문자 구분\r\nfind_entire_word_label=단어 단위로\r\nfind_reached_top=문서 처음까지 검색하고 끝으로 돌아와 검색했습니다.\r\nfind_reached_bottom=문서 끝까지 검색하고 앞으로 돌아와 검색했습니다.\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{total}} 중 {{current}} 일치\r\nfind_match_count[two]={{total}} 중 {{current}} 일치\r\nfind_match_count[few]={{total}} 중 {{current}} 일치\r\nfind_match_count[many]={{total}} 중 {{current}} 일치\r\nfind_match_count[other]={{total}} 중 {{current}} 일치\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]={{limit}} 이상 일치\r\nfind_match_count_limit[one]={{limit}} 이상 일치\r\nfind_match_count_limit[two]={{limit}} 이상 일치\r\nfind_match_count_limit[few]={{limit}} 이상 일치\r\nfind_match_count_limit[many]={{limit}} 이상 일치\r\nfind_match_count_limit[other]={{limit}} 이상 일치\r\nfind_not_found=검색 결과 없음\r\n\r\n# Error panel labels\r\nerror_more_info=정보 더 보기\r\nerror_less_info=정보 간단히 보기\r\nerror_close=닫기\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (빌드: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=메시지: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=스택: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=파일: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=줄 번호: {{line}}\r\nrendering_error=페이지를 렌더링하는 동안 오류가 발생했습니다.\r\n\r\n# Predefined zoom values\r\npage_scale_width=페이지 너비에 맞추기\r\npage_scale_fit=페이지에 맞추기\r\npage_scale_auto=자동\r\npage_scale_actual=실제 크기\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=오류\r\nloading_error=PDF를 로드하는 동안 오류가 발생했습니다.\r\ninvalid_file_error=잘못되었거나 손상된 PDF 파일.\r\nmissing_file_error=PDF 파일 없음.\r\nunexpected_response_error=예상치 못한 서버 응답입니다.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}} {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} 주석]\r\npassword_label=이 PDF 파일을 열 수 있는 비밀번호를 입력하세요.\r\npassword_invalid=잘못된 비밀번호입니다. 다시 시도하세요.\r\npassword_ok=확인\r\npassword_cancel=취소\r\n\r\nprinting_not_supported=경고: 이 브라우저는 인쇄를 완전히 지원하지 않습니다.\r\nprinting_not_ready=경고: 이 PDF를 인쇄를 할 수 있을 정도로 읽어들이지 못했습니다.\r\nweb_fonts_disabled=웹 폰트가 비활성화됨: 내장된 PDF 글꼴을 사용할 수 없습니다.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/lij/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Pagina primma\r\nprevious_label=Precedente\r\nnext.title=Pagina dòppo\r\nnext_label=Pròscima\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Pagina\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=de {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} de {{pagesCount}})\r\n\r\nzoom_out.title=Diminoisci zoom\r\nzoom_out_label=Diminoisci zoom\r\nzoom_in.title=Aomenta zoom\r\nzoom_in_label=Aomenta zoom\r\nzoom.title=Zoom\r\npresentation_mode.title=Vanni into mòddo de prezentaçion\r\npresentation_mode_label=Mòddo de prezentaçion\r\nopen_file.title=Arvi file\r\nopen_file_label=Arvi\r\nprint.title=Stanpa\r\nprint_label=Stanpa\r\ndownload.title=Descaregamento\r\ndownload_label=Descaregamento\r\nbookmark.title=Vixon corente (còpia ò arvi inte 'n neuvo barcon)\r\nbookmark_label=Vixon corente\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Atressi\r\ntools_label=Atressi\r\nfirst_page.title=Vanni a-a primma pagina\r\nfirst_page.label=Vanni a-a primma pagina\r\nfirst_page_label=Vanni a-a primma pagina\r\nlast_page.title=Vanni a l'urtima pagina\r\nlast_page.label=Vanni a l'urtima pagina\r\nlast_page_label=Vanni a l'urtima pagina\r\npage_rotate_cw.title=Gia into verso oraio\r\npage_rotate_cw.label=Gia in senso do releuio\r\npage_rotate_cw_label=Gia into verso oraio\r\npage_rotate_ccw.title=Gia into verso antioraio\r\npage_rotate_ccw.label=Gia in senso do releuio a-a reversa\r\npage_rotate_ccw_label=Gia into verso antioraio\r\n\r\ncursor_text_select_tool.title=Abilita strumento de seleçion do testo\r\ncursor_text_select_tool_label=Strumento de seleçion do testo\r\ncursor_hand_tool.title=Abilita strumento man\r\ncursor_hand_tool_label=Strumento man\r\n\r\nscroll_vertical.title=Deuvia rebelamento verticale\r\nscroll_vertical_label=Rebelamento verticale\r\nscroll_horizontal.title=Deuvia rebelamento orizontâ\r\nscroll_horizontal_label=Rebelamento orizontâ\r\nscroll_wrapped.title=Deuvia rebelamento incapsolou\r\nscroll_wrapped_label=Rebelamento incapsolou\r\n\r\nspread_none.title=No unite a-a difuxon de pagina\r\nspread_none_label=No difuxon\r\nspread_odd.title=Uniscite a-a difuxon de pagina co-o numero dèspa\r\nspread_odd_label=Difuxon dèspa\r\nspread_even.title=Uniscite a-a difuxon de pagina co-o numero pari\r\nspread_even_label=Difuxon pari\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Propietæ do documento…\r\ndocument_properties_label=Propietæ do documento…\r\ndocument_properties_file_name=Nomme schedaio:\r\ndocument_properties_file_size=Dimenscion schedaio:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} kB ({{size_b}} byte)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} byte)\r\ndocument_properties_title=Titolo:\r\ndocument_properties_author=Aoto:\r\ndocument_properties_subject=Ogetto:\r\ndocument_properties_keywords=Paròlle ciave:\r\ndocument_properties_creation_date=Dæta creaçion:\r\ndocument_properties_modification_date=Dæta cangiamento:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Aotô originale:\r\ndocument_properties_producer=Produtô PDF:\r\ndocument_properties_version=Verscion PDF:\r\ndocument_properties_page_count=Contezzo pagine:\r\ndocument_properties_page_size=Dimenscion da pagina:\r\ndocument_properties_page_size_unit_inches=dii gròsci\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=drito\r\ndocument_properties_page_size_orientation_landscape=desteizo\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letia\r\ndocument_properties_page_size_name_legal=Lezze\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Vista veloce do Web:\r\ndocument_properties_linearized_yes=Sci\r\ndocument_properties_linearized_no=No\r\ndocument_properties_close=Særa\r\n\r\nprint_progress_message=Praparo o documento pe-a stanpa…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Anulla\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Ativa/dizativa bara de scianco\r\ntoggle_sidebar_notification.title=Cangia bara de löo (o documento o contegne di alegæ)\r\ntoggle_sidebar_label=Ativa/dizativa bara de scianco\r\ndocument_outline.title=Fanni vedde o contorno do documento (scicca doggio pe espande/ridue tutti i elementi)\r\ndocument_outline_label=Contorno do documento\r\nattachments.title=Fanni vedde alegæ\r\nattachments_label=Alegæ\r\nthumbs.title=Mostra miniatue\r\nthumbs_label=Miniatue\r\nfindbar.title=Treuva into documento\r\nfindbar_label=Treuva\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Pagina {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatua da pagina {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Treuva\r\nfind_input.placeholder=Treuva into documento…\r\nfind_previous.title=Treuva a ripetiçion precedente do testo da çercâ\r\nfind_previous_label=Precedente\r\nfind_next.title=Treuva a ripetiçion dòppo do testo da çercâ\r\nfind_next_label=Segoente\r\nfind_highlight=Evidençia\r\nfind_match_case_label=Maioscole/minoscole\r\nfind_entire_word_label=Poula intrega\r\nfind_reached_top=Razonto a fin da pagina, continoa da l'iniçio\r\nfind_reached_bottom=Razonto l'iniçio da pagina, continoa da-a fin\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} de {{total}} corispondensa\r\nfind_match_count[two]={{current}} de {{total}} corispondense\r\nfind_match_count[few]={{current}} de {{total}} corispondense\r\nfind_match_count[many]={{current}} de {{total}} corispondense\r\nfind_match_count[other]={{current}} de {{total}} corispondense\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Ciù de {{limit}} corispondense\r\nfind_match_count_limit[one]=Ciù de {{limit}} corispondensa\r\nfind_match_count_limit[two]=Ciù de {{limit}} corispondense\r\nfind_match_count_limit[few]=Ciù de {{limit}} corispondense\r\nfind_match_count_limit[many]=Ciù de {{limit}} corispondense\r\nfind_match_count_limit[other]=Ciù de {{limit}} corispondense\r\nfind_not_found=Testo no trovou\r\n\r\n# Error panel labels\r\nerror_more_info=Ciù informaçioin\r\nerror_less_info=Meno informaçioin\r\nerror_close=Særa\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mesaggio: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Schedaio: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linia: {{line}}\r\nrendering_error=Gh'é stæto 'n'erô itno rendering da pagina.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Larghessa pagina\r\npage_scale_fit=Adatta a una pagina\r\npage_scale_auto=Zoom aotomatico\r\npage_scale_actual=Dimenscioin efetive\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Erô\r\nloading_error=S'é verificou 'n'erô itno caregamento do PDF.\r\ninvalid_file_error=O schedaio PDF o l'é no valido ò aroinou.\r\nmissing_file_error=O schedaio PDF o no gh'é.\r\nunexpected_response_error=Risposta inprevista do-u server\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anotaçion: {{type}}]\r\npassword_label=Dimme a paròlla segreta pe arvî sto schedaio PDF.\r\npassword_invalid=Paròlla segreta sbalia. Preuva torna.\r\npassword_ok=Va ben\r\npassword_cancel=Anulla\r\n\r\nprinting_not_supported=Atençion: a stanpa a no l'é conpletamente soportâ da sto navegatô.\r\nprinting_not_ready=Atençion: o PDF o no l'é ancon caregou conpletamente pe-a stanpa.\r\nweb_fonts_disabled=I font do web en dizativæ: inposcibile adeuviâ i carateri do PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/lo/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=ຫນ້າກ່ອນຫນ້າ\r\nprevious_label=ກ່ອນຫນ້າ\r\nnext.title=ຫນ້າຖັດໄປ\r\nnext_label=ຖັດໄປ\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=ຫນ້າ\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=ຈາກ {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} ຈາກ {{pagesCount}})\r\n\r\nzoom_out.title=ຂະຫຍາຍອອກ\r\nzoom_out_label=ຂະຫຍາຍອອກ\r\nzoom_in.title=ຂະຫຍາຍເຂົ້າ\r\nzoom_in_label=ຂະຫຍາຍເຂົ້າ\r\nzoom.title=ຂະຫຍາຍ\r\npresentation_mode.title=ສັບປ່ຽນເປັນໂຫມດການນຳສະເຫນີ\r\npresentation_mode_label=ໂຫມດການນຳສະເຫນີ\r\nopen_file.title=ເປີດໄຟລ໌\r\nopen_file_label=ເປີດ\r\nprint.title=ພິມ\r\nprint_label=ພິມ\r\ndownload.title=ດາວໂຫລດ\r\ndownload_label=ດາວໂຫລດ\r\nbookmark.title=ມຸມມອງປະຈຸບັນ (ສຳເນົາ ຫລື ເປີດໃນວິນໂດໃຫມ່)\r\nbookmark_label=ມຸມມອງປະຈຸບັນ\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=ເຄື່ອງມື\r\ntools_label=ເຄື່ອງມື\r\nfirst_page.title=ໄປທີ່ຫນ້າທຳອິດ\r\nfirst_page.label=ໄປທີ່ຫນ້າທຳອິດ\r\nfirst_page_label=ໄປທີ່ຫນ້າທຳອິດ\r\nlast_page.title=ໄປທີ່ຫນ້າສຸດທ້າຍ\r\nlast_page.label=ໄປທີ່ຫນ້າສຸດທ້າຍ\r\nlast_page_label=ໄປທີ່ຫນ້າສຸດທ້າຍ\r\npage_rotate_cw.title=ຫມູນຕາມເຂັມໂມງ\r\npage_rotate_cw.label=ຫມູນຕາມເຂັມໂມງ\r\npage_rotate_cw_label=ຫມູນຕາມເຂັມໂມງ\r\npage_rotate_ccw.title=ຫມູນທວນເຂັມໂມງ\r\npage_rotate_ccw.label=ຫມູນທວນເຂັມໂມງ\r\npage_rotate_ccw_label=ຫມູນທວນເຂັມໂມງ\r\n\r\n\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties_file_name=ຊື່ໄຟລ໌:\r\ndocument_properties_file_size=ຂະຫນາດໄຟລ໌:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=ລວງຕັ້ງ\r\ndocument_properties_page_size_orientation_landscape=ລວງນອນ\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=ຈົດໝາຍ\r\ndocument_properties_page_size_name_legal=ຂໍ້ກົດຫມາຍ\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_close=ປິດ\r\n\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_close=ຍົກເລີກ\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=ເປີດ/ປິດແຖບຂ້າງ\r\ntoggle_sidebar_notification.title=ເປີດ/ປິດແຖບຂ້າງ (ເອກະສານມີເຄົ້າຮ່າງ/ໄຟລ໌ແນບ)\r\ntoggle_sidebar_label=ເປີດ/ປິດແຖບຂ້າງ\r\ndocument_outline_label=ເຄົ້າຮ່າງເອກະສານ\r\nfindbar_label=ຄົ້ນຫາ\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\n\r\n# Find panel button title and messages\r\nfind_input.title=ຄົ້ນຫາ\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\n\r\n# Error panel labels\r\nerror_more_info=ຂໍ້ມູນເພີ່ມເຕີມ\r\nerror_less_info=ຂໍ້ມູນນ້ອຍລົງ\r\nerror_close=ປິດ\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nrendering_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງເຣັນເດີຫນ້າ.\r\n\r\n# Predefined zoom values\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=ຂໍ້ຜິດພາດ\r\nloading_error=ມີຂໍ້ຜິດພາດເກີດຂື້ນຂະນະທີ່ກຳລັງໂຫລດ PDF.\r\ninvalid_file_error=ໄຟລ໌ PDF ບໍ່ຖືກຕ້ອງຫລືເສຍຫາຍ.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\npassword_ok=ຕົກລົງ\r\npassword_cancel=ຍົກເລີກ\r\n\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/locale.properties",
    "content": "[ach]\r\n@import url(ach/viewer.properties)\r\n\r\n[af]\r\n@import url(af/viewer.properties)\r\n\r\n[an]\r\n@import url(an/viewer.properties)\r\n\r\n[ar]\r\n@import url(ar/viewer.properties)\r\n\r\n[ast]\r\n@import url(ast/viewer.properties)\r\n\r\n[az]\r\n@import url(az/viewer.properties)\r\n\r\n[be]\r\n@import url(be/viewer.properties)\r\n\r\n[bg]\r\n@import url(bg/viewer.properties)\r\n\r\n[bn]\r\n@import url(bn/viewer.properties)\r\n\r\n[bo]\r\n@import url(bo/viewer.properties)\r\n\r\n[br]\r\n@import url(br/viewer.properties)\r\n\r\n[brx]\r\n@import url(brx/viewer.properties)\r\n\r\n[bs]\r\n@import url(bs/viewer.properties)\r\n\r\n[ca]\r\n@import url(ca/viewer.properties)\r\n\r\n[cak]\r\n@import url(cak/viewer.properties)\r\n\r\n[ckb]\r\n@import url(ckb/viewer.properties)\r\n\r\n[cs]\r\n@import url(cs/viewer.properties)\r\n\r\n[cy]\r\n@import url(cy/viewer.properties)\r\n\r\n[da]\r\n@import url(da/viewer.properties)\r\n\r\n[de]\r\n@import url(de/viewer.properties)\r\n\r\n[dsb]\r\n@import url(dsb/viewer.properties)\r\n\r\n[el]\r\n@import url(el/viewer.properties)\r\n\r\n[en-CA]\r\n@import url(en-CA/viewer.properties)\r\n\r\n[en-GB]\r\n@import url(en-GB/viewer.properties)\r\n\r\n[en-US]\r\n@import url(en-US/viewer.properties)\r\n\r\n[eo]\r\n@import url(eo/viewer.properties)\r\n\r\n[es-AR]\r\n@import url(es-AR/viewer.properties)\r\n\r\n[es-CL]\r\n@import url(es-CL/viewer.properties)\r\n\r\n[es-ES]\r\n@import url(es-ES/viewer.properties)\r\n\r\n[es-MX]\r\n@import url(es-MX/viewer.properties)\r\n\r\n[et]\r\n@import url(et/viewer.properties)\r\n\r\n[eu]\r\n@import url(eu/viewer.properties)\r\n\r\n[fa]\r\n@import url(fa/viewer.properties)\r\n\r\n[ff]\r\n@import url(ff/viewer.properties)\r\n\r\n[fi]\r\n@import url(fi/viewer.properties)\r\n\r\n[fr]\r\n@import url(fr/viewer.properties)\r\n\r\n[fy-NL]\r\n@import url(fy-NL/viewer.properties)\r\n\r\n[ga-IE]\r\n@import url(ga-IE/viewer.properties)\r\n\r\n[gd]\r\n@import url(gd/viewer.properties)\r\n\r\n[gl]\r\n@import url(gl/viewer.properties)\r\n\r\n[gn]\r\n@import url(gn/viewer.properties)\r\n\r\n[gu-IN]\r\n@import url(gu-IN/viewer.properties)\r\n\r\n[he]\r\n@import url(he/viewer.properties)\r\n\r\n[hi-IN]\r\n@import url(hi-IN/viewer.properties)\r\n\r\n[hr]\r\n@import url(hr/viewer.properties)\r\n\r\n[hsb]\r\n@import url(hsb/viewer.properties)\r\n\r\n[hu]\r\n@import url(hu/viewer.properties)\r\n\r\n[hy-AM]\r\n@import url(hy-AM/viewer.properties)\r\n\r\n[hye]\r\n@import url(hye/viewer.properties)\r\n\r\n[ia]\r\n@import url(ia/viewer.properties)\r\n\r\n[id]\r\n@import url(id/viewer.properties)\r\n\r\n[is]\r\n@import url(is/viewer.properties)\r\n\r\n[it]\r\n@import url(it/viewer.properties)\r\n\r\n[ja]\r\n@import url(ja/viewer.properties)\r\n\r\n[ka]\r\n@import url(ka/viewer.properties)\r\n\r\n[kab]\r\n@import url(kab/viewer.properties)\r\n\r\n[kk]\r\n@import url(kk/viewer.properties)\r\n\r\n[km]\r\n@import url(km/viewer.properties)\r\n\r\n[kn]\r\n@import url(kn/viewer.properties)\r\n\r\n[ko]\r\n@import url(ko/viewer.properties)\r\n\r\n[lij]\r\n@import url(lij/viewer.properties)\r\n\r\n[lo]\r\n@import url(lo/viewer.properties)\r\n\r\n[lt]\r\n@import url(lt/viewer.properties)\r\n\r\n[ltg]\r\n@import url(ltg/viewer.properties)\r\n\r\n[lv]\r\n@import url(lv/viewer.properties)\r\n\r\n[meh]\r\n@import url(meh/viewer.properties)\r\n\r\n[mk]\r\n@import url(mk/viewer.properties)\r\n\r\n[mr]\r\n@import url(mr/viewer.properties)\r\n\r\n[ms]\r\n@import url(ms/viewer.properties)\r\n\r\n[my]\r\n@import url(my/viewer.properties)\r\n\r\n[nb-NO]\r\n@import url(nb-NO/viewer.properties)\r\n\r\n[ne-NP]\r\n@import url(ne-NP/viewer.properties)\r\n\r\n[nl]\r\n@import url(nl/viewer.properties)\r\n\r\n[nn-NO]\r\n@import url(nn-NO/viewer.properties)\r\n\r\n[oc]\r\n@import url(oc/viewer.properties)\r\n\r\n[pa-IN]\r\n@import url(pa-IN/viewer.properties)\r\n\r\n[pl]\r\n@import url(pl/viewer.properties)\r\n\r\n[pt-BR]\r\n@import url(pt-BR/viewer.properties)\r\n\r\n[pt-PT]\r\n@import url(pt-PT/viewer.properties)\r\n\r\n[rm]\r\n@import url(rm/viewer.properties)\r\n\r\n[ro]\r\n@import url(ro/viewer.properties)\r\n\r\n[ru]\r\n@import url(ru/viewer.properties)\r\n\r\n[scn]\r\n@import url(scn/viewer.properties)\r\n\r\n[si]\r\n@import url(si/viewer.properties)\r\n\r\n[sk]\r\n@import url(sk/viewer.properties)\r\n\r\n[sl]\r\n@import url(sl/viewer.properties)\r\n\r\n[son]\r\n@import url(son/viewer.properties)\r\n\r\n[sq]\r\n@import url(sq/viewer.properties)\r\n\r\n[sr]\r\n@import url(sr/viewer.properties)\r\n\r\n[sv-SE]\r\n@import url(sv-SE/viewer.properties)\r\n\r\n[szl]\r\n@import url(szl/viewer.properties)\r\n\r\n[ta]\r\n@import url(ta/viewer.properties)\r\n\r\n[te]\r\n@import url(te/viewer.properties)\r\n\r\n[th]\r\n@import url(th/viewer.properties)\r\n\r\n[tl]\r\n@import url(tl/viewer.properties)\r\n\r\n[tr]\r\n@import url(tr/viewer.properties)\r\n\r\n[trs]\r\n@import url(trs/viewer.properties)\r\n\r\n[uk]\r\n@import url(uk/viewer.properties)\r\n\r\n[ur]\r\n@import url(ur/viewer.properties)\r\n\r\n[uz]\r\n@import url(uz/viewer.properties)\r\n\r\n[vi]\r\n@import url(vi/viewer.properties)\r\n\r\n[wo]\r\n@import url(wo/viewer.properties)\r\n\r\n[xh]\r\n@import url(xh/viewer.properties)\r\n\r\n[zh-CN]\r\n@import url(zh-CN/viewer.properties)\r\n\r\n[zh-TW]\r\n@import url(zh-TW/viewer.properties)\r\n\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/lt/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Ankstesnis puslapis\r\nprevious_label=Ankstesnis\r\nnext.title=Kitas puslapis\r\nnext_label=Kitas\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Puslapis\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=iš {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} iš {{pagesCount}})\r\n\r\nzoom_out.title=Sumažinti\r\nzoom_out_label=Sumažinti\r\nzoom_in.title=Padidinti\r\nzoom_in_label=Padidinti\r\nzoom.title=Mastelis\r\npresentation_mode.title=Pereiti į pateikties veikseną\r\npresentation_mode_label=Pateikties veiksena\r\nopen_file.title=Atverti failą\r\nopen_file_label=Atverti\r\nprint.title=Spausdinti\r\nprint_label=Spausdinti\r\ndownload.title=Parsiųsti\r\ndownload_label=Parsiųsti\r\nbookmark.title=Esamojo rodinio saitas (kopijavimui ar atvėrimui kitame lange)\r\nbookmark_label=Esamasis rodinys\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Priemonės\r\ntools_label=Priemonės\r\nfirst_page.title=Eiti į pirmą puslapį\r\nfirst_page.label=Eiti į pirmą puslapį\r\nfirst_page_label=Eiti į pirmą puslapį\r\nlast_page.title=Eiti į paskutinį puslapį\r\nlast_page.label=Eiti į paskutinį puslapį\r\nlast_page_label=Eiti į paskutinį puslapį\r\npage_rotate_cw.title=Pasukti pagal laikrodžio rodyklę\r\npage_rotate_cw.label=Pasukti pagal laikrodžio rodyklę\r\npage_rotate_cw_label=Pasukti pagal laikrodžio rodyklę\r\npage_rotate_ccw.title=Pasukti prieš laikrodžio rodyklę\r\npage_rotate_ccw.label=Pasukti prieš laikrodžio rodyklę\r\npage_rotate_ccw_label=Pasukti prieš laikrodžio rodyklę\r\n\r\ncursor_text_select_tool.title=Įjungti teksto žymėjimo įrankį\r\ncursor_text_select_tool_label=Teksto žymėjimo įrankis\r\ncursor_hand_tool.title=Įjungti vilkimo įrankį\r\ncursor_hand_tool_label=Vilkimo įrankis\r\n\r\nscroll_vertical.title=Naudoti vertikalų slinkimą\r\nscroll_vertical_label=Vertikalus slinkimas\r\nscroll_horizontal.title=Naudoti horizontalų slinkimą\r\nscroll_horizontal_label=Horizontalus slinkimas\r\nscroll_wrapped.title=Naudoti išklotą slinkimą\r\nscroll_wrapped_label=Išklotas slinkimas\r\n\r\nspread_none.title=Nejungti puslapių į dvilapius\r\nspread_none_label=Be dvilapių\r\nspread_odd.title=Sujungti į dvilapius pradedant nelyginiais puslapiais\r\nspread_odd_label=Nelyginiai dvilapiai\r\nspread_even.title=Sujungti į dvilapius pradedant lyginiais puslapiais\r\nspread_even_label=Lyginiai dvilapiai\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumento savybės…\r\ndocument_properties_label=Dokumento savybės…\r\ndocument_properties_file_name=Failo vardas:\r\ndocument_properties_file_size=Failo dydis:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} B)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} B)\r\ndocument_properties_title=Antraštė:\r\ndocument_properties_author=Autorius:\r\ndocument_properties_subject=Tema:\r\ndocument_properties_keywords=Reikšminiai žodžiai:\r\ndocument_properties_creation_date=Sukūrimo data:\r\ndocument_properties_modification_date=Modifikavimo data:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Kūrėjas:\r\ndocument_properties_producer=PDF generatorius:\r\ndocument_properties_version=PDF versija:\r\ndocument_properties_page_count=Puslapių skaičius:\r\ndocument_properties_page_size=Puslapio dydis:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=stačias\r\ndocument_properties_page_size_orientation_landscape=gulsčias\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Laiškas\r\ndocument_properties_page_size_name_legal=Dokumentas\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Spartus žiniatinklio rodinys:\r\ndocument_properties_linearized_yes=Taip\r\ndocument_properties_linearized_no=Ne\r\ndocument_properties_close=Užverti\r\n\r\nprint_progress_message=Dokumentas ruošiamas spausdinimui…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Atsisakyti\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Rodyti / slėpti šoninį polangį\r\ntoggle_sidebar_notification.title=Parankinė (dokumentas turi struktūrą / priedų)\r\ntoggle_sidebar_notification2.title=Parankinė (dokumentas turi struktūrą / priedų / sluoksnių)\r\ntoggle_sidebar_label=Šoninis polangis\r\ndocument_outline.title=Rodyti dokumento struktūrą (spustelėkite dukart norėdami išplėsti/suskleisti visus elementus)\r\ndocument_outline_label=Dokumento struktūra\r\nattachments.title=Rodyti priedus\r\nattachments_label=Priedai\r\nlayers.title=Rodyti sluoksnius (spustelėkite dukart, norėdami atstatyti visus sluoksnius į numatytąją būseną)\r\nlayers_label=Sluoksniai\r\nthumbs.title=Rodyti puslapių miniatiūras\r\nthumbs_label=Miniatiūros\r\ncurrent_outline_item.title=Rasti dabartinį struktūros elementą\r\ncurrent_outline_item_label=Dabartinis struktūros elementas\r\nfindbar.title=Ieškoti dokumente\r\nfindbar_label=Rasti\r\n\r\nadditional_layers=Papildomi sluoksniai\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas={{page}} puslapis\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title={{page}} puslapis\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}} puslapio miniatiūra\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Rasti\r\nfind_input.placeholder=Rasti dokumente…\r\nfind_previous.title=Ieškoti ankstesnio frazės egzemplioriaus\r\nfind_previous_label=Ankstesnis\r\nfind_next.title=Ieškoti tolesnio frazės egzemplioriaus\r\nfind_next_label=Tolesnis\r\nfind_highlight=Viską paryškinti\r\nfind_match_case_label=Skirti didžiąsias ir mažąsias raides\r\nfind_entire_word_label=Ištisi žodžiai\r\nfind_reached_top=Pasiekus dokumento pradžią, paieška pratęsta nuo pabaigos\r\nfind_reached_bottom=Pasiekus dokumento pabaigą, paieška pratęsta nuo pradžios\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} iš {{total}} atitikmens\r\nfind_match_count[two]={{current}} iš {{total}} atitikmenų\r\nfind_match_count[few]={{current}} iš {{total}} atitikmenų\r\nfind_match_count[many]={{current}} iš {{total}} atitikmenų\r\nfind_match_count[other]={{current}} iš {{total}} atitikmens\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Daugiau nei {{limit}} atitikmenų\r\nfind_match_count_limit[one]=Daugiau nei {{limit}} atitikmuo\r\nfind_match_count_limit[two]=Daugiau nei {{limit}} atitikmenys\r\nfind_match_count_limit[few]=Daugiau nei {{limit}} atitikmenys\r\nfind_match_count_limit[many]=Daugiau nei {{limit}} atitikmenų\r\nfind_match_count_limit[other]=Daugiau nei {{limit}} atitikmuo\r\nfind_not_found=Ieškoma frazė nerasta\r\n\r\n# Error panel labels\r\nerror_more_info=Išsamiau\r\nerror_less_info=Glausčiau\r\nerror_close=Užverti\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v. {{version}} (darinys: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Pranešimas: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Dėklas: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Failas: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Eilutė: {{line}}\r\nrendering_error=Atvaizduojant puslapį įvyko klaida.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Priderinti prie lapo pločio\r\npage_scale_fit=Pritaikyti prie lapo dydžio\r\npage_scale_auto=Automatinis mastelis\r\npage_scale_actual=Tikras dydis\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Klaida\r\nloading_error=Įkeliant PDF failą įvyko klaida.\r\ninvalid_file_error=Tai nėra PDF failas arba jis yra sugadintas.\r\nmissing_file_error=PDF failas nerastas.\r\nunexpected_response_error=Netikėtas serverio atsakas.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[„{{type}}“ tipo anotacija]\r\npassword_label=Įveskite slaptažodį šiam PDF failui atverti.\r\npassword_invalid=Slaptažodis neteisingas. Bandykite dar kartą.\r\npassword_ok=Gerai\r\npassword_cancel=Atsisakyti\r\n\r\nprinting_not_supported=Dėmesio! Spausdinimas šioje naršyklėje nėra pilnai realizuotas.\r\nprinting_not_ready=Dėmesio! PDF failas dar nėra pilnai įkeltas spausdinimui.\r\nweb_fonts_disabled=Saityno šriftai išjungti – PDF faile esančių šriftų naudoti negalima.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ltg/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Īprīkšejā lopa\r\nprevious_label=Īprīkšejā\r\nnext.title=Nuokomuo lopa\r\nnext_label=Nuokomuo\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Lopa\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=nu {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} nu {{pagesCount}})\r\n\r\nzoom_out.title=Attuolynuot \r\nzoom_out_label=Attuolynuot\r\nzoom_in.title=Pītuvynuot\r\nzoom_in_label=Pītuvynuot\r\nzoom.title=Palelynuojums\r\npresentation_mode.title=Puorslēgtīs iz Prezentacejis režymu\r\npresentation_mode_label=Prezentacejis režyms\r\nopen_file.title=Attaiseit failu\r\nopen_file_label=Attaiseit\r\nprint.title=Drukuošona\r\nprint_label=Drukōt\r\ndownload.title=Lejupīluode\r\ndownload_label=Lejupīluodeit\r\nbookmark.title=Pošreizejais skots (kopēt voi attaiseit jaunā lūgā)\r\nbookmark_label=Pošreizejais skots\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Reiki\r\ntools_label=Reiki\r\nfirst_page.title=Īt iz pyrmū lopu\r\nfirst_page.label=Īt iz pyrmū lopu\r\nfirst_page_label=Īt iz pyrmū lopu\r\nlast_page.title=Īt iz piedejū lopu\r\nlast_page.label=Īt iz piedejū lopu\r\nlast_page_label=Īt iz piedejū lopu\r\npage_rotate_cw.title=Pagrīzt pa pulksteni\r\npage_rotate_cw.label=Pagrīzt pa pulksteni\r\npage_rotate_cw_label=Pagrīzt pa pulksteni\r\npage_rotate_ccw.title=Pagrīzt pret pulksteni\r\npage_rotate_ccw.label=Pagrīzt pret pulksteni\r\npage_rotate_ccw_label=Pagrīzt pret pulksteni\r\n\r\ncursor_text_select_tool.title=Aktivizēt teksta izvieles reiku\r\ncursor_text_select_tool_label=Teksta izvieles reiks\r\ncursor_hand_tool.title=Aktivēt rūkys reiku\r\ncursor_hand_tool_label=Rūkys reiks\r\n\r\nscroll_vertical.title=Izmontōt vertikalū ritinōšonu\r\nscroll_vertical_label=Vertikalō ritinōšona\r\nscroll_horizontal.title=Izmontōt horizontalū ritinōšonu\r\nscroll_horizontal_label=Horizontalō ritinōšona\r\nscroll_wrapped.title=Izmontōt mārūgojamū ritinōšonu\r\nscroll_wrapped_label=Mārūgojamō ritinōšona\r\n\r\nspread_none.title=Naizmontōt lopu atvāruma režimu\r\nspread_none_label=Bez atvārumim\r\nspread_odd.title=Izmontōt lopu atvārumus sōkut nu napōra numeru lopom\r\nspread_odd_label=Napōra lopys pa kreisi\r\nspread_even.title=Izmontōt lopu atvārumus sōkut nu pōra numeru lopom\r\nspread_even_label=Pōra lopys pa kreisi\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumenta īstatiejumi…\r\ndocument_properties_label=Dokumenta īstatiejumi…\r\ndocument_properties_file_name=Faila nūsaukums:\r\ndocument_properties_file_size=Faila izmārs:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} biti)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} biti)\r\ndocument_properties_title=Nūsaukums:\r\ndocument_properties_author=Autors:\r\ndocument_properties_subject=Tema:\r\ndocument_properties_keywords=Atslāgi vuordi:\r\ndocument_properties_creation_date=Izveides datums:\r\ndocument_properties_modification_date=lobuošonys datums:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Radeituojs:\r\ndocument_properties_producer=PDF producents:\r\ndocument_properties_version=PDF verseja:\r\ndocument_properties_page_count=Lopu skaits:\r\ndocument_properties_page_size=Lopas izmārs:\r\ndocument_properties_page_size_unit_inches=collas\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=portreta orientaceja\r\ndocument_properties_page_size_orientation_landscape=ainovys orientaceja\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Fast Web View:\r\ndocument_properties_linearized_yes=Jā\r\ndocument_properties_linearized_no=Nā\r\ndocument_properties_close=Aiztaiseit\r\n\r\nprint_progress_message=Preparing document for printing…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Atceļt\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Puorslēgt suonu jūslu\r\ntoggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)\r\ntoggle_sidebar_label=Puorslēgt suonu jūslu\r\ndocument_outline.title=Show Document Outline (double-click to expand/collapse all items)\r\ndocument_outline_label=Dokumenta saturs\r\nattachments.title=Show Attachments\r\nattachments_label=Attachments\r\nthumbs.title=Paruodeit seiktālus\r\nthumbs_label=Seiktāli\r\nfindbar.title=Mekleit dokumentā\r\nfindbar_label=Mekleit\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Lopa {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Lopys {{page}} seiktāls\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Mekleit\r\nfind_input.placeholder=Mekleit dokumentā…\r\nfind_previous.title=Atrast īprīkšejū\r\nfind_previous_label=Īprīkšejā\r\nfind_next.title=Atrast nuokamū\r\nfind_next_label=Nuokomuo\r\nfind_highlight=Īkruosuot vysys\r\nfind_match_case_label=Lelū, mozū burtu jiuteigs\r\nfind_reached_top=Sasnīgts dokumenta suokums, turpynojom nu beigom\r\nfind_reached_bottom=Sasnīgtys dokumenta beigys, turpynojom nu suokuma\r\nfind_not_found=Frāze nav atrosta\r\n\r\n# Error panel labels\r\nerror_more_info=Vairuok informacejis\r\nerror_less_info=mozuok informacejis\r\nerror_close=Close\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Ziņuojums: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Steks: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=File: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Ryndeņa: {{line}}\r\nrendering_error=Attālojūt lopu rodās klaida\r\n\r\n# Predefined zoom values\r\npage_scale_width=Lopys plotumā\r\npage_scale_fit=Ītylpynūt lopu\r\npage_scale_auto=Automatiskais izmārs\r\npage_scale_actual=Patīsais izmārs\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Klaida\r\nloading_error=Īluodejūt PDF nūtyka klaida.\r\ninvalid_file_error=Nadereigs voi būjuots PDF fails.\r\nmissing_file_error=PDF fails nav atrosts.\r\nunexpected_response_error=Unexpected server response.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=Īvodit paroli, kab attaiseitu PDF failu.\r\npassword_invalid=Napareiza parole, raugit vēļreiz.\r\npassword_ok=Labi\r\npassword_cancel=Atceļt\r\n\r\nprinting_not_supported=Uzmaneibu: Drukuošona nu itei puorlūka dorbojās tikai daleji.\r\nprinting_not_ready=Uzmaneibu: PDF nav pilneibā īluodeits drukuošonai.\r\nweb_fonts_disabled=Šķārsteikla fonti nav aktivizāti: Navar īgult PDF fontus.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/lv/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Iepriekšējā lapa\r\nprevious_label=Iepriekšējā\r\nnext.title=Nākamā lapa\r\nnext_label=Nākamā\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Lapa\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=no {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} no {{pagesCount}})\r\n\r\nzoom_out.title=Attālināt\\u0020\r\nzoom_out_label=Attālināt\r\nzoom_in.title=Pietuvināt\r\nzoom_in_label=Pietuvināt\r\nzoom.title=Palielinājums\r\npresentation_mode.title=Pārslēgties uz Prezentācijas režīmu\r\npresentation_mode_label=Prezentācijas režīms\r\nopen_file.title=Atvērt failu\r\nopen_file_label=Atvērt\r\nprint.title=Drukāšana\r\nprint_label=Drukāt\r\ndownload.title=Lejupielāde\r\ndownload_label=Lejupielādēt\r\nbookmark.title=Pašreizējais skats (kopēt vai atvērt jaunā logā)\r\nbookmark_label=Pašreizējais skats\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Rīki\r\ntools_label=Rīki\r\nfirst_page.title=Iet uz pirmo lapu\r\nfirst_page.label=Iet uz pirmo lapu\r\nfirst_page_label=Iet uz pirmo lapu\r\nlast_page.title=Iet uz pēdējo lapu\r\nlast_page.label=Iet uz pēdējo lapu\r\nlast_page_label=Iet uz pēdējo lapu\r\npage_rotate_cw.title=Pagriezt pa pulksteni\r\npage_rotate_cw.label=Pagriezt pa pulksteni\r\npage_rotate_cw_label=Pagriezt pa pulksteni\r\npage_rotate_ccw.title=Pagriezt pret pulksteni\r\npage_rotate_ccw.label=Pagriezt pret pulksteni\r\npage_rotate_ccw_label=Pagriezt pret pulksteni\r\n\r\ncursor_text_select_tool.title=Aktivizēt teksta izvēles rīku\r\ncursor_text_select_tool_label=Teksta izvēles rīks\r\ncursor_hand_tool.title=Aktivēt rokas rīku\r\ncursor_hand_tool_label=Rokas rīks\r\n\r\nscroll_vertical.title=Izmantot vertikālo ritināšanu\r\nscroll_vertical_label=Vertikālā ritināšana\r\nscroll_horizontal.title=Izmantot horizontālo ritināšanu\r\nscroll_horizontal_label=Horizontālā ritināšana\r\nscroll_wrapped.title=Izmantot apkļauto ritināšanu\r\nscroll_wrapped_label=Apkļautā ritināšana\r\n\r\nspread_none.title=Nepievienoties lapu izpletumiem\r\nspread_none_label=Neizmantot izpletumus\r\nspread_odd.title=Izmantot lapu izpletumus sākot ar nepāra numuru lapām\r\nspread_odd_label=Nepāra izpletumi\r\nspread_even.title=Izmantot lapu izpletumus sākot ar pāra numuru lapām\r\nspread_even_label=Pāra izpletumi\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumenta iestatījumi…\r\ndocument_properties_label=Dokumenta iestatījumi…\r\ndocument_properties_file_name=Faila nosaukums:\r\ndocument_properties_file_size=Faila izmērs:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} biti)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} biti)\r\ndocument_properties_title=Nosaukums:\r\ndocument_properties_author=Autors:\r\ndocument_properties_subject=Tēma:\r\ndocument_properties_keywords=Atslēgas vārdi:\r\ndocument_properties_creation_date=Izveides datums:\r\ndocument_properties_modification_date=LAbošanas datums:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Radītājs:\r\ndocument_properties_producer=PDF producents:\r\ndocument_properties_version=PDF versija:\r\ndocument_properties_page_count=Lapu skaits:\r\ndocument_properties_page_size=Papīra izmērs:\r\ndocument_properties_page_size_unit_inches=collas\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=portretorientācija\r\ndocument_properties_page_size_orientation_landscape=ainavorientācija\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Vēstule\r\ndocument_properties_page_size_name_legal=Juridiskie teksti\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Ātrā tīmekļa skats:\r\ndocument_properties_linearized_yes=Jā\r\ndocument_properties_linearized_no=Nē\r\ndocument_properties_close=Aizvērt\r\n\r\nprint_progress_message=Gatavo dokumentu drukāšanai...\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Atcelt\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Pārslēgt sānu joslu\r\ntoggle_sidebar_notification.title=Pārslēgt sānu joslu (dokumenta saturu un pielikumus)\r\ntoggle_sidebar_label=Pārslēgt sānu joslu\r\ndocument_outline.title=Rādīt dokumenta struktūru (veiciet dubultklikšķi lai izvērstu/sakļautu visus vienumus)\r\ndocument_outline_label=Dokumenta saturs\r\nattachments.title=Rādīt pielikumus\r\nattachments_label=Pielikumi\r\nthumbs.title=Parādīt sīktēlus\r\nthumbs_label=Sīktēli\r\nfindbar.title=Meklēt dokumentā\r\nfindbar_label=Meklēt\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Lapa {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Lapas {{page}} sīktēls\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Meklēt\r\nfind_input.placeholder=Meklēt dokumentā…\r\nfind_previous.title=Atrast iepriekšējo\r\nfind_previous_label=Iepriekšējā\r\nfind_next.title=Atrast nākamo\r\nfind_next_label=Nākamā\r\nfind_highlight=Iekrāsot visas\r\nfind_match_case_label=Lielo, mazo burtu jutīgs\r\nfind_entire_word_label=Veselus vārdus\r\nfind_reached_top=Sasniegts dokumenta sākums, turpinām no beigām\r\nfind_reached_bottom=Sasniegtas dokumenta beigas, turpinām no sākuma\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} no {{total}} rezultāta\r\nfind_match_count[two]={{current}} no {{total}} rezultātiem\r\nfind_match_count[few]={{current}} no {{total}} rezultātiem\r\nfind_match_count[many]={{current}} no {{total}} rezultātiem\r\nfind_match_count[other]={{current}} no {{total}} rezultātiem\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Vairāk nekā {{limit}} rezultāti\r\nfind_match_count_limit[one]=Vairāk nekā {{limit}} rezultāti\r\nfind_match_count_limit[two]=Vairāk nekā {{limit}} rezultāti\r\nfind_match_count_limit[few]=Vairāk nekā {{limit}} rezultāti\r\nfind_match_count_limit[many]=Vairāk nekā {{limit}} rezultāti\r\nfind_match_count_limit[other]=Vairāk nekā {{limit}} rezultāti\r\nfind_not_found=Frāze nav atrasta\r\n\r\n# Error panel labels\r\nerror_more_info=Vairāk informācijas\r\nerror_less_info=MAzāk informācijas\r\nerror_close=Close\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Ziņojums: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Steks: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=File: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Rindiņa: {{line}}\r\nrendering_error=Attēlojot lapu radās kļūda\r\n\r\n# Predefined zoom values\r\npage_scale_width=Lapas platumā\r\npage_scale_fit=Ietilpinot lapu\r\npage_scale_auto=Automātiskais izmērs\r\npage_scale_actual=Patiesais izmērs\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Kļūda\r\nloading_error=Ielādējot PDF notika kļūda.\r\ninvalid_file_error=Nederīgs vai bojāts PDF fails.\r\nmissing_file_error=PDF fails nav atrasts.\r\nunexpected_response_error=Negaidīa servera atbilde.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} anotācija]\r\npassword_label=Ievadiet paroli, lai atvērtu PDF failu.\r\npassword_invalid=Nepareiza parole, mēģiniet vēlreiz.\r\npassword_ok=Labi\r\npassword_cancel=Atcelt\r\n\r\nprinting_not_supported=Uzmanību: Drukāšana no šī pārlūka darbojas tikai daļēji.\r\nprinting_not_ready=Uzmanību: PDF nav pilnībā ielādēts drukāšanai.\r\nweb_fonts_disabled=Tīmekļa fonti nav aktivizēti: Nevar iegult PDF fontus.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/meh/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Página yata\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\n\r\nzoom.title=Nasa´a ka´nu/Nasa´a luli\r\nopen_file_label=Síne\r\n\r\n# Secondary toolbar and context menu\r\n\r\n\r\n\r\n\r\n# Document properties dialog box\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized_yes=Kuvi\r\ndocument_properties_close=Nakasɨ\r\n\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Nkuvi-ka\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\nfindbar_label=Nánuku\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Nánuku\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\n\r\n# Error panel labels\r\nerror_close=Nakasɨ\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\n\r\n# Predefined zoom values\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\npassword_cancel=Nkuvi-ka\r\n\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/mk/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Претходна страница\r\nprevious_label=Претходна\r\nnext.title=Следна страница\r\nnext_label=Следна\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\n\r\nzoom_out.title=Намалување\r\nzoom_out_label=Намали\r\nzoom_in.title=Зголемување\r\nzoom_in_label=Зголеми\r\nzoom.title=Променување на големина\r\npresentation_mode.title=Премини во презентациски режим\r\npresentation_mode_label=Презентациски режим\r\nopen_file.title=Отворање датотека\r\nopen_file_label=Отвори\r\nprint.title=Печатење\r\nprint_label=Печати\r\ndownload.title=Преземање\r\ndownload_label=Преземи\r\nbookmark.title=Овој преглед (копирај или отвори во нов прозорец)\r\nbookmark_label=Овој преглед\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Алатки\r\nfirst_page.label=Оди до првата страница\r\nlast_page.label=Оди до последната страница\r\npage_rotate_cw.label=Ротирај по стрелките на часовникот\r\npage_rotate_ccw.label=Ротирај спротивно од стрелките на часовникот\r\n\r\n\r\n\r\n\r\n# Document properties dialog box\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\n\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_close=Откажи\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Вклучи странична лента\r\ntoggle_sidebar_label=Вклучи странична лента\r\nthumbs.title=Прикажување на икони\r\nthumbs_label=Икони\r\nfindbar.title=Најди во документот\r\nfindbar_label=Најди\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Страница {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Икона од страница {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_previous.title=Најди ја предходната појава на фразата\r\nfind_previous_label=Претходно\r\nfind_next.title=Најди ја следната појава на фразата\r\nfind_next_label=Следно\r\nfind_highlight=Означи сѐ\r\nfind_match_case_label=Токму така\r\nfind_reached_top=Барањето стигна до почетокот на документот и почнува од крајот\r\nfind_reached_bottom=Барањето стигна до крајот на документот и почнува од почеток\r\nfind_not_found=Фразата не е пронајдена\r\n\r\n# Error panel labels\r\nerror_more_info=Повеќе информации\r\nerror_less_info=Помалку информации\r\nerror_close=Затвори\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Порака: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Датотека: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Линија: {{line}}\r\nrendering_error=Настана грешка при прикажувањето на страницата.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Ширина на страница\r\npage_scale_fit=Цела страница\r\npage_scale_auto=Автоматска големина\r\npage_scale_actual=Вистинска големина\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Грешка\r\nloading_error=Настана грешка при вчитувањето на PDF-от.\r\ninvalid_file_error=Невалидна или корумпирана PDF датотека.\r\nmissing_file_error=Недостасува PDF документ.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\npassword_cancel=Откажи\r\n\r\nprinting_not_supported=Предупредување: Печатењето не е целосно поддржано во овој прелистувач.\r\nprinting_not_ready=Предупредување: PDF документот не е целосно вчитан за печатење.\r\nweb_fonts_disabled=Интернет фонтовите се оневозможени: не може да се користат вградените PDF фонтови.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/mr/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=मागील पृष्ठ\r\nprevious_label=मागील\r\nnext.title=पुढील पृष्ठ\r\nnext_label=पुढील\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=पृष्ठ\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}}पैकी\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pagesCount}} पैकी {{pageNumber}})\r\n\r\nzoom_out.title=छोटे करा\r\nzoom_out_label=छोटे करा\r\nzoom_in.title=मोठे करा\r\nzoom_in_label=मोठे करा\r\nzoom.title=लहान किंवा मोठे करा\r\npresentation_mode.title=प्रस्तुतिकरण मोडचा वापर करा\r\npresentation_mode_label=प्रस्तुतिकरण मोड\r\nopen_file.title=फाइल उघडा\r\nopen_file_label=उघडा\r\nprint.title=छपाई करा\r\nprint_label=छपाई करा\r\ndownload.title=डाउनलोड करा\r\ndownload_label=डाउनलोड करा\r\nbookmark.title=सध्याचे अवलोकन (नवीन पटलात प्रत बनवा किंवा उघडा)\r\nbookmark_label=सध्याचे अवलोकन\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=साधने\r\ntools_label=साधने\r\nfirst_page.title=पहिल्या पृष्ठावर जा\r\nfirst_page.label=पहिल्या पृष्ठावर जा\r\nfirst_page_label=पहिल्या पृष्ठावर जा\r\nlast_page.title=शेवटच्या पृष्ठावर जा\r\nlast_page.label=शेवटच्या पृष्ठावर जा\r\nlast_page_label=शेवटच्या पृष्ठावर जा\r\npage_rotate_cw.title=घड्याळाच्या काट्याच्या दिशेने फिरवा\r\npage_rotate_cw.label=घड्याळाच्या काट्याच्या दिशेने फिरवा\r\npage_rotate_cw_label=घड्याळाच्या काट्याच्या दिशेने फिरवा\r\npage_rotate_ccw.title=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा\r\npage_rotate_ccw.label=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा\r\npage_rotate_ccw_label=घड्याळाच्या काट्याच्या उलट दिशेने फिरवा\r\n\r\ncursor_text_select_tool.title=मजकूर निवड साधन कार्यान्वयीत करा\r\ncursor_text_select_tool_label=मजकूर निवड साधन\r\ncursor_hand_tool.title=हात साधन कार्यान्वित करा\r\ncursor_hand_tool_label=हस्त साधन\r\n\r\nscroll_vertical.title=अनुलंब स्क्रोलिंग वापरा\r\nscroll_vertical_label=अनुलंब स्क्रोलिंग\r\nscroll_horizontal.title=क्षैतिज स्क्रोलिंग वापरा\r\nscroll_horizontal_label=क्षैतिज स्क्रोलिंग\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=दस्तऐवज गुणधर्म…\r\ndocument_properties_label=दस्तऐवज गुणधर्म…\r\ndocument_properties_file_name=फाइलचे नाव:\r\ndocument_properties_file_size=फाइल आकार:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} बाइट्स)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} बाइट्स)\r\ndocument_properties_title=शिर्षक:\r\ndocument_properties_author=लेखक:\r\ndocument_properties_subject=विषय:\r\ndocument_properties_keywords=मुख्यशब्द:\r\ndocument_properties_creation_date=निर्माण दिनांक:\r\ndocument_properties_modification_date=दुरूस्ती दिनांक:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=निर्माता:\r\ndocument_properties_producer=PDF निर्माता:\r\ndocument_properties_version=PDF आवृत्ती:\r\ndocument_properties_page_count=पृष्ठ संख्या:\r\ndocument_properties_page_size=पृष्ठ आकार:\r\ndocument_properties_page_size_unit_inches=इंच\r\ndocument_properties_page_size_unit_millimeters=मीमी\r\ndocument_properties_page_size_orientation_portrait=उभी मांडणी\r\ndocument_properties_page_size_orientation_landscape=आडवे\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=जलद वेब दृष्य:\r\ndocument_properties_linearized_yes=हो\r\ndocument_properties_linearized_no=नाही\r\ndocument_properties_close=बंद करा\r\n\r\nprint_progress_message=छपाई करीता पृष्ठ तयार करीत आहे…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=रद्द करा\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=बाजूचीपट्टी टॉगल करा\r\ntoggle_sidebar_notification.title=बाजूची पट्टी टॉगल करा (दस्तऐवजामध्ये रुपरेषा/जोडण्या आहेत)\r\ntoggle_sidebar_label=बाजूचीपट्टी टॉगल करा\r\ndocument_outline.title=दस्तऐवज बाह्यरेखा दर्शवा (विस्तृत करण्यासाठी दोनवेळा क्लिक करा /सर्व घटक दाखवा)\r\ndocument_outline_label=दस्तऐवज रूपरेषा\r\nattachments.title=जोडपत्र दाखवा\r\nattachments_label=जोडपत्र\r\nthumbs.title=थंबनेल्स् दाखवा\r\nthumbs_label=थंबनेल्स्\r\nfindbar.title=दस्तऐवजात शोधा\r\nfindbar_label=शोधा\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=पृष्ठ {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=पृष्ठाचे थंबनेल {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=शोधा\r\nfind_input.placeholder=दस्तऐवजात शोधा…\r\nfind_previous.title=वाकप्रयोगची मागील घटना शोधा\r\nfind_previous_label=मागील\r\nfind_next.title=वाकप्रयोगची पुढील घटना शोधा\r\nfind_next_label=पुढील\r\nfind_highlight=सर्व ठळक करा\r\nfind_match_case_label=आकार जुळवा\r\nfind_entire_word_label=संपूर्ण शब्द\r\nfind_reached_top=दस्तऐवजाच्या शीर्षकास पोहचले, तळपासून पुढे\r\nfind_reached_bottom=दस्तऐवजाच्या तळाला पोहचले, शीर्षकापासून पुढे\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{total}} पैकी {{current}} सुसंगत\r\nfind_match_count[two]={{total}} पैकी {{current}} सुसंगत\r\nfind_match_count[few]={{total}} पैकी {{current}} सुसंगत\r\nfind_match_count[many]={{total}} पैकी {{current}} सुसंगत\r\nfind_match_count[other]={{total}} पैकी {{current}} सुसंगत\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]={{limit}} पेक्षा अधिक जुळण्या\r\nfind_match_count_limit[one]={{limit}} पेक्षा अधिक जुळण्या\r\nfind_match_count_limit[two]={{limit}} पेक्षा अधिक जुळण्या\r\nfind_match_count_limit[few]={{limit}} पेक्षा अधिक जुळण्या\r\nfind_match_count_limit[many]={{limit}} पेक्षा अधिक जुळण्या\r\nfind_match_count_limit[other]={{limit}} पेक्षा अधिक जुळण्या\r\nfind_not_found=वाकप्रयोग आढळले नाही\r\n\r\n# Error panel labels\r\nerror_more_info=आणखी माहिती\r\nerror_less_info=कमी माहिती\r\nerror_close=बंद करा\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=संदेश: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=स्टॅक: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=फाइल: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=रेष: {{line}}\r\nrendering_error=पृष्ठ दाखवतेवेळी त्रुटी आढळली.\r\n\r\n# Predefined zoom values\r\npage_scale_width=पृष्ठाची रूंदी\r\npage_scale_fit=पृष्ठ बसवा\r\npage_scale_auto=स्वयं लाहन किंवा मोठे करणे\r\npage_scale_actual=प्रत्यक्ष आकार\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=त्रुटी\r\nloading_error=PDF लोड करतेवेळी त्रुटी आढळली.\r\ninvalid_file_error=अवैध किंवा दोषीत PDF फाइल.\r\nmissing_file_error=न आढळणारी PDF फाइल.\r\nunexpected_response_error=अनपेक्षित सर्व्हर प्रतिसाद.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} टिपण्णी]\r\npassword_label=ही PDF फाइल उघडण्याकरिता पासवर्ड द्या.\r\npassword_invalid=अवैध पासवर्ड. कृपया पुन्हा प्रयत्न करा.\r\npassword_ok=ठीक आहे\r\npassword_cancel=रद्द करा\r\n\r\nprinting_not_supported=सावधानता: या ब्राउझरतर्फे छपाइ पूर्णपणे समर्थीत नाही.\r\nprinting_not_ready=सावधानता: छपाईकरिता PDF पूर्णतया लोड झाले नाही.\r\nweb_fonts_disabled=वेब टंक असमर्थीत आहेत: एम्बेडेड PDF टंक वापर अशक्य.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ms/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Halaman Dahulu\r\nprevious_label=Dahulu\r\nnext.title=Halaman Berikut\r\nnext_label=Berikut\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Halaman\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=daripada {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} daripada {{pagesCount}})\r\n\r\nzoom_out.title=Zum Keluar\r\nzoom_out_label=Zum Keluar\r\nzoom_in.title=Zum Masuk\r\nzoom_in_label=Zum Masuk\r\nzoom.title=Zum\r\npresentation_mode.title=Tukar ke Mod Persembahan\r\npresentation_mode_label=Mod Persembahan\r\nopen_file.title=Buka Fail\r\nopen_file_label=Buka\r\nprint.title=Cetak\r\nprint_label=Cetak\r\ndownload.title=Muat turun\r\ndownload_label=Muat turun\r\nbookmark.title=Paparan semasa (salin atau buka dalam tetingkap baru)\r\nbookmark_label=Paparan Semasa\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Alatan\r\ntools_label=Alatan\r\nfirst_page.title=Pergi ke Halaman Pertama\r\nfirst_page.label=Pergi ke Halaman Pertama\r\nfirst_page_label=Pergi ke Halaman Pertama\r\nlast_page.title=Pergi ke Halaman Terakhir\r\nlast_page.label=Pergi ke Halaman Terakhir\r\nlast_page_label=Pergi ke Halaman Terakhir\r\npage_rotate_cw.title=Berputar ikut arah Jam\r\npage_rotate_cw.label=Berputar ikut arah Jam\r\npage_rotate_cw_label=Berputar ikut arah Jam\r\npage_rotate_ccw.title=Pusing berlawan arah jam\r\npage_rotate_ccw.label=Pusing berlawan arah jam\r\npage_rotate_ccw_label=Pusing berlawan arah jam\r\n\r\ncursor_text_select_tool.title=Dayakan Alatan Pilihan Teks\r\ncursor_text_select_tool_label=Alatan Pilihan Teks\r\ncursor_hand_tool.title=Dayakan Alatan Tangan\r\ncursor_hand_tool_label=Alatan Tangan\r\n\r\nscroll_vertical.title=Guna Skrol Menegak\r\nscroll_vertical_label=Skrol Menegak\r\nscroll_horizontal.title=Guna Skrol Mengufuk\r\nscroll_horizontal_label=Skrol Mengufuk\r\nscroll_wrapped.title=Guna Skrol Berbalut\r\nscroll_wrapped_label=Skrol Berbalut\r\n\r\nspread_none.title=Jangan hubungkan hamparan halaman\r\nspread_none_label=Tanpa Hamparan\r\nspread_odd.title=Hubungkan hamparan halaman dengan halaman nombor ganjil\r\nspread_odd_label=Hamparan Ganjil\r\nspread_even.title=Hubungkan hamparan halaman dengan halaman nombor genap\r\nspread_even_label=Hamparan Seimbang\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Sifat Dokumen…\r\ndocument_properties_label=Sifat Dokumen…\r\ndocument_properties_file_name=Nama fail:\r\ndocument_properties_file_size=Saiz fail:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bait)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bait)\r\ndocument_properties_title=Tajuk:\r\ndocument_properties_author=Pengarang:\r\ndocument_properties_subject=Subjek:\r\ndocument_properties_keywords=Kata kunci:\r\ndocument_properties_creation_date=Masa Dicipta:\r\ndocument_properties_modification_date=Tarikh Ubahsuai:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Pencipta:\r\ndocument_properties_producer=Pengeluar PDF:\r\ndocument_properties_version=Versi PDF:\r\ndocument_properties_page_count=Kiraan Laman:\r\ndocument_properties_page_size=Saiz Halaman:\r\ndocument_properties_page_size_unit_inches=dalam\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=potret\r\ndocument_properties_page_size_orientation_landscape=landskap\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Paparan Web Pantas:\r\ndocument_properties_linearized_yes=Ya\r\ndocument_properties_linearized_no=Tidak\r\ndocument_properties_close=Tutup\r\n\r\nprint_progress_message=Menyediakan dokumen untuk dicetak…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Batal\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Togol Bar Sisi\r\ntoggle_sidebar_notification.title=Togol Sidebar (dokumen mengandungi rangka/attachments)\r\ntoggle_sidebar_label=Togol Bar Sisi\r\ndocument_outline.title=Papar Rangka Dokumen (klik-dua-kali untuk kembangkan/kolaps semua item)\r\ndocument_outline_label=Rangka Dokumen\r\nattachments.title=Papar Lampiran\r\nattachments_label=Lampiran\r\nthumbs.title=Papar Thumbnails\r\nthumbs_label=Imej kecil\r\nfindbar.title=Cari didalam Dokumen\r\nfindbar_label=Cari\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Halaman {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Halaman Imej kecil {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Cari\r\nfind_input.placeholder=Cari dalam dokumen…\r\nfind_previous.title=Cari teks frasa berkenaan yang terdahulu\r\nfind_previous_label=Dahulu\r\nfind_next.title=Cari teks frasa berkenaan yang berikut\r\nfind_next_label=Berikut\r\nfind_highlight=Serlahkan semua\r\nfind_match_case_label=Huruf sepadan\r\nfind_entire_word_label=Seluruh perkataan\r\nfind_reached_top=Mencapai teratas daripada dokumen, sambungan daripada bawah\r\nfind_reached_bottom=Mencapai terakhir daripada dokumen, sambungan daripada atas\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} daripada {{total}} padanan\r\nfind_match_count[two]={{current}} daripada {{total}} padanan\r\nfind_match_count[few]={{current}} daripada {{total}} padanan\r\nfind_match_count[many]={{current}} daripada {{total}} padanan\r\nfind_match_count[other]={{current}} daripada {{total}} padanan\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Lebih daripada {{limit}} padanan\r\nfind_match_count_limit[one]=Lebih daripada {{limit}} padanan\r\nfind_match_count_limit[two]=Lebih daripada {{limit}} padanan\r\nfind_match_count_limit[few]=Lebih daripada {{limit}} padanan\r\nfind_match_count_limit[many]=Lebih daripada {{limit}} padanan\r\nfind_match_count_limit[other]=Lebih daripada {{limit}} padanan\r\nfind_not_found=Frasa tidak ditemui\r\n\r\n# Error panel labels\r\nerror_more_info=Maklumat Lanjut\r\nerror_less_info=Kurang Informasi\r\nerror_close=Tutup\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mesej: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Timbun: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fail: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Garis: {{line}}\r\nrendering_error=Ralat berlaku ketika memberikan halaman.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Lebar Halaman\r\npage_scale_fit=Muat Halaman\r\npage_scale_auto=Zoom Automatik\r\npage_scale_actual=Saiz Sebenar\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Ralat\r\nloading_error=Masalah berlaku semasa menuatkan sebuah PDF.\r\ninvalid_file_error=Tidak sah atau fail PDF rosak.\r\nmissing_file_error=Fail PDF Hilang.\r\nunexpected_response_error=Respon pelayan yang tidak dijangka.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Anotasi]\r\npassword_label=Masukan kata kunci untuk membuka fail PDF ini.\r\npassword_invalid=Kata laluan salah. Cuba lagi.\r\npassword_ok=OK\r\npassword_cancel=Batal\r\n\r\nprinting_not_supported=Amaran: Cetakan ini tidak sepenuhnya disokong oleh pelayar ini.\r\nprinting_not_ready=Amaran: PDF tidak sepenuhnya dimuatkan untuk dicetak.\r\nweb_fonts_disabled=Fon web dinyahdayakan: tidak dapat menggunakan fon terbenam PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/my/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=အရင် စာမျက်နှာ\r\nprevious_label=အရင်နေရာ\r\nnext.title=ရှေ့ စာမျက်နှာ\r\nnext_label=နောက်တခု\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=စာမျက်နှာ\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}} ၏\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pagesCount}} ၏ {{pageNumber}})\r\n\r\nzoom_out.title=ချုံ့ပါ\r\nzoom_out_label=ချုံ့ပါ\r\nzoom_in.title=ချဲ့ပါ\r\nzoom_in_label=ချဲ့ပါ\r\nzoom.title=ချုံ့/ချဲ့ပါ\r\npresentation_mode.title=ဆွေးနွေးတင်ပြစနစ်သို့ ကူးပြောင်းပါ\r\npresentation_mode_label=ဆွေးနွေးတင်ပြစနစ်\r\nopen_file.title=ဖိုင်အားဖွင့်ပါ။\r\nopen_file_label=ဖွင့်ပါ\r\nprint.title=ပုံနှိုပ်ပါ\r\nprint_label=ပုံနှိုပ်ပါ\r\ndownload.title=ကူးဆွဲ\r\ndownload_label=ကူးဆွဲ\r\nbookmark.title=လက်ရှိ မြင်ကွင်း (ဝင်းဒိုးအသစ်မှာ ကူးပါ သို့မဟုတ် ဖွင့်ပါ)\r\nbookmark_label=လက်ရှိ မြင်ကွင်း\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=ကိရိယာများ\r\ntools_label=ကိရိယာများ\r\nfirst_page.title=ပထမ စာမျက်နှာသို့\r\nfirst_page.label=ပထမ စာမျက်နှာသို့\r\nfirst_page_label=ပထမ စာမျက်နှာသို့\r\nlast_page.title=နောက်ဆုံး စာမျက်နှာသို့\r\nlast_page.label=နောက်ဆုံး စာမျက်နှာသို့\r\nlast_page_label=နောက်ဆုံး စာမျက်နှာသို့\r\npage_rotate_cw.title=နာရီလက်တံ အတိုင်း\r\npage_rotate_cw.label=နာရီလက်တံ အတိုင်း\r\npage_rotate_cw_label=နာရီလက်တံ အတိုင်း\r\npage_rotate_ccw.title=နာရီလက်တံ ပြောင်းပြန်\r\npage_rotate_ccw.label=နာရီလက်တံ ပြောင်းပြန်\r\npage_rotate_ccw_label=နာရီလက်တံ ပြောင်းပြန်\r\n\r\n\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ\r\ndocument_properties_label=မှတ်တမ်းမှတ်ရာ ဂုဏ်သတ္တိများ\r\ndocument_properties_file_name=ဖိုင် :\r\ndocument_properties_file_size=ဖိုင်ဆိုဒ် :\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} ကီလိုဘိုတ် ({{size_b}}ဘိုတ်)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=ခေါင်းစဉ်‌ -\r\ndocument_properties_author=ရေးသားသူ:\r\ndocument_properties_subject=အကြောင်းအရာ:\\u0020\r\ndocument_properties_keywords=သော့ချက် စာလုံး:\r\ndocument_properties_creation_date=ထုတ်လုပ်ရက်စွဲ:\r\ndocument_properties_modification_date=ပြင်ဆင်ရက်စွဲ:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=ဖန်တီးသူ:\r\ndocument_properties_producer=PDF ထုတ်လုပ်သူ:\r\ndocument_properties_version=PDF ဗားရှင်း:\r\ndocument_properties_page_count=စာမျက်နှာအရေအတွက်:\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_close=ပိတ်\r\n\r\nprint_progress_message=Preparing document for printing…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=ပယ်​ဖျက်ပါ\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=ဘေးတန်းဖွင့်ပိတ်\r\ntoggle_sidebar_notification.title=ဘေးဘားတန်းကို အဖွင့်/အပိတ် လုပ်ရန် (စာတမ်းတွင် outline/attachments ပါဝင်နိုင်သည်)\r\ntoggle_sidebar_label=ဖွင့်ပိတ် ဆလိုက်ဒါ\r\ndocument_outline.title=စာတမ်းအကျဉ်းချုပ်ကို ပြပါ (စာရင်းအားလုံးကို ချုံ့/ချဲ့ရန် ကလစ်နှစ်ချက်နှိပ်ပါ)\r\ndocument_outline_label=စာတမ်းအကျဉ်းချုပ်\r\nattachments.title=တွဲချက်များ ပြပါ\r\nattachments_label=တွဲထားချက်များ\r\nthumbs.title=ပုံရိပ်ငယ်များကို ပြပါ\r\nthumbs_label=ပုံရိပ်ငယ်များ\r\nfindbar.title=Find in Document\r\nfindbar_label=ရှာဖွေပါ\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=စာမျက်နှာ {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=စာမျက်နှာရဲ့ ပုံရိပ်ငယ် {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=ရှာဖွေပါ\r\nfind_input.placeholder=စာတမ်းထဲတွင် ရှာဖွေရန်…\r\nfind_previous.title=စကားစုရဲ့ အရင် ​ဖြစ်ပွားမှုကို ရှာဖွေပါ\r\nfind_previous_label=နောက်သို့\r\nfind_next.title=စကားစုရဲ့ နောက်ထပ် ​ဖြစ်ပွားမှုကို ရှာဖွေပါ\r\nfind_next_label=ရှေ့သို့\r\nfind_highlight=အားလုံးကို မျဉ်းသားပါ\r\nfind_match_case_label=စာလုံး တိုက်ဆိုင်ပါ\r\nfind_reached_top=စာမျက်နှာထိပ် ရောက်နေပြီ၊ အဆုံးကနေ ပြန်စပါ\r\nfind_reached_bottom=စာမျက်နှာအဆုံး ရောက်နေပြီ၊ ထိပ်ကနေ ပြန်စပါ\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_not_found=စကားစု မတွေ့ရဘူး\r\n\r\n# Error panel labels\r\nerror_more_info=နောက်ထပ်အချက်အလက်များ\r\nerror_less_info=အနည်းငယ်မျှသော သတင်းအချက်အလက်\r\nerror_close=ပိတ်\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=မက်ဆေ့ - {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=အထပ် - {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=ဖိုင် {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=လိုင်း - {{line}}\r\nrendering_error=စာမျက်နှာကို ပုံဖော်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။\r\n\r\n# Predefined zoom values\r\npage_scale_width=စာမျက်နှာ အကျယ်\r\npage_scale_fit=စာမျက်နှာ ကွက်တိ\r\npage_scale_auto=အလိုအလျောက် ချုံ့ချဲ့\r\npage_scale_actual=အမှန်တကယ်ရှိတဲ့ အရွယ်\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=အမှား\r\nloading_error=PDF ဖိုင် ကိုဆွဲတင်နေချိန်မှာ အမှားတစ်ခုတွေ့ရပါတယ်။\r\ninvalid_file_error=မရသော သို့ ပျက်နေသော PDF ဖိုင်\r\nmissing_file_error=PDF ပျောက်ဆုံး\r\nunexpected_response_error=မမျှော်လင့်ထားသော ဆာဗာမှ ပြန်ကြားချက်\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} အဓိပ္ပာယ်ဖွင့်ဆိုချက်]\r\npassword_label=ယခု PDF ကို ဖွင့်ရန် စကားဝှက်ကို ရိုက်ပါ။\r\npassword_invalid=စာဝှက် မှားသည်။ ထပ်ကြိုးစားကြည့်ပါ။\r\npassword_ok=OK\r\npassword_cancel=ပယ်​ဖျက်ပါ\r\n\r\nprinting_not_supported=သတိပေးချက်၊ပရင့်ထုတ်ခြင်းကိုဤဘယောက်ဆာသည် ပြည့်ဝစွာထောက်ပံ့မထားပါ ။\r\nprinting_not_ready=သတိပေးချက်: ယခု PDF ဖိုင်သည် ပုံနှိပ်ရန် မပြည့်စုံပါ\r\nweb_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/nb-NO/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Forrige side\r\nprevious_label=Forrige\r\nnext.title=Neste side\r\nnext_label=Neste\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Side\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=av {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} av {{pagesCount}})\r\n\r\nzoom_out.title=Zoom ut\r\nzoom_out_label=Zoom ut\r\nzoom_in.title=Zoom inn\r\nzoom_in_label=Zoom inn\r\nzoom.title=Zoom\r\npresentation_mode.title=Bytt til presentasjonsmodus\r\npresentation_mode_label=Presentasjonsmodus\r\nopen_file.title=Åpne fil\r\nopen_file_label=Åpne\r\nprint.title=Skriv ut\r\nprint_label=Skriv ut\r\ndownload.title=Last ned\r\ndownload_label=Last ned\r\nbookmark.title=Nåværende visning (kopier eller åpne i et nytt vindu)\r\nbookmark_label=Nåværende visning\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Verktøy\r\ntools_label=Verktøy\r\nfirst_page.title=Gå til første side\r\nfirst_page.label=Gå til første side\r\nfirst_page_label=Gå til første side\r\nlast_page.title=Gå til siste side\r\nlast_page.label=Gå til siste side\r\nlast_page_label=Gå til siste side\r\npage_rotate_cw.title=Roter med klokken\r\npage_rotate_cw.label=Roter med klokken\r\npage_rotate_cw_label=Roter med klokken\r\npage_rotate_ccw.title=Roter mot klokken\r\npage_rotate_ccw.label=Roter mot klokken\r\npage_rotate_ccw_label=Roter mot klokken\r\n\r\ncursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy\r\ncursor_text_select_tool_label=Tekstmarkeringsverktøy\r\ncursor_hand_tool.title=Aktiver handverktøy\r\ncursor_hand_tool_label=Handverktøy\r\n\r\nscroll_vertical.title=Bruk vertikal rulling\r\nscroll_vertical_label=Vertikal rulling\r\nscroll_horizontal.title=Bruk horisontal rulling\r\nscroll_horizontal_label=Horisontal rulling\r\nscroll_wrapped.title=Bruk flersiderulling\r\nscroll_wrapped_label=Flersiderulling\r\n\r\nspread_none.title=Vis enkeltsider\r\nspread_none_label=Enkeltsider\r\nspread_odd.title=Vis oppslag med ulike sidenumre til venstre\r\nspread_odd_label=Oppslag med forside\r\nspread_even.title=Vis oppslag med like sidenumre til venstre\r\nspread_even_label=Oppslag uten forside\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumentegenskaper …\r\ndocument_properties_label=Dokumentegenskaper …\r\ndocument_properties_file_name=Filnavn:\r\ndocument_properties_file_size=Filstørrelse:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Dokumentegenskaper …\r\ndocument_properties_author=Forfatter:\r\ndocument_properties_subject=Emne:\r\ndocument_properties_keywords=Nøkkelord:\r\ndocument_properties_creation_date=Opprettet dato:\r\ndocument_properties_modification_date=Endret dato:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Opprettet av:\r\ndocument_properties_producer=PDF-verktøy:\r\ndocument_properties_version=PDF-versjon:\r\ndocument_properties_page_count=Sideantall:\r\ndocument_properties_page_size=Sidestørrelse:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=stående\r\ndocument_properties_page_size_orientation_landscape=liggende\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Hurtig nettvisning:\r\ndocument_properties_linearized_yes=Ja\r\ndocument_properties_linearized_no=Nei\r\ndocument_properties_close=Lukk\r\n\r\nprint_progress_message=Forbereder dokument for utskrift …\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Avbryt\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Slå av/på sidestolpe\r\ntoggle_sidebar_notification.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg)\r\ntoggle_sidebar_notification2.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg/lag)\r\ntoggle_sidebar_label=Slå av/på sidestolpe\r\ndocument_outline.title=Vis dokumentdisposisjonen (dobbeltklikk for å utvide/skjule alle elementer)\r\ndocument_outline_label=Dokumentdisposisjon\r\nattachments.title=Vis vedlegg\r\nattachments_label=Vedlegg\r\nlayers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand)\r\nlayers_label=Lag\r\nthumbs.title=Vis miniatyrbilde\r\nthumbs_label=Miniatyrbilde\r\ncurrent_outline_item.title=Finn gjeldende disposisjonselement\r\ncurrent_outline_item_label=Gjeldende disposisjonselement\r\nfindbar.title=Finn i dokumentet\r\nfindbar_label=Finn\r\n\r\nadditional_layers=Ytterligere lag\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Side {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Side {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatyrbilde av side {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Søk\r\nfind_input.placeholder=Søk i dokument…\r\nfind_previous.title=Finn forrige forekomst av frasen\r\nfind_previous_label=Forrige\r\nfind_next.title=Finn neste forekomst av frasen\r\nfind_next_label=Neste\r\nfind_highlight=Uthev alle\r\nfind_match_case_label=Skill store/små bokstaver\r\nfind_entire_word_label=Hele ord\r\nfind_reached_top=Nådde toppen av dokumentet, fortsetter fra bunnen\r\nfind_reached_bottom=Nådde bunnen av dokumentet, fortsetter fra toppen\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} av {{total}} treff\r\nfind_match_count[two]={{current}} av {{total}} treff\r\nfind_match_count[few]={{current}} av {{total}} treff\r\nfind_match_count[many]={{current}} av {{total}} treff\r\nfind_match_count[other]={{current}} av {{total}} treff\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Mer enn {{limit}} treff\r\nfind_match_count_limit[one]=Mer enn {{limit}} treff\r\nfind_match_count_limit[two]=Mer enn {{limit}} treff\r\nfind_match_count_limit[few]=Mer enn {{limit}} treff\r\nfind_match_count_limit[many]=Mer enn {{limit}} treff\r\nfind_match_count_limit[other]=Mer enn {{limit}} treff\r\nfind_not_found=Fant ikke teksten\r\n\r\n# Error panel labels\r\nerror_more_info=Mer info\r\nerror_less_info=Mindre info\r\nerror_close=Lukk\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (bygg: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Melding: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stakk: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fil: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linje: {{line}}\r\nrendering_error=En feil oppstod ved opptegning av siden.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Sidebredde\r\npage_scale_fit=Tilpass til siden\r\npage_scale_auto=Automatisk zoom\r\npage_scale_actual=Virkelig størrelse\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}} %\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Feil\r\nloading_error=En feil oppstod ved lasting av PDF.\r\ninvalid_file_error=Ugyldig eller skadet PDF-fil.\r\nmissing_file_error=Manglende PDF-fil.\r\nunexpected_response_error=Uventet serverrespons.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} annotasjon]\r\npassword_label=Skriv inn passordet for å åpne denne PDF-filen.\r\npassword_invalid=Ugyldig passord. Prøv igjen.\r\npassword_ok=OK\r\npassword_cancel=Avbryt\r\n\r\nprinting_not_supported=Advarsel: Utskrift er ikke fullstendig støttet av denne nettleseren.\r\nprinting_not_ready=Advarsel: PDF er ikke fullstendig innlastet for utskrift.\r\nweb_fonts_disabled=Web-fonter er avslått: Kan ikke bruke innbundne PDF-fonter.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ne-NP/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=अघिल्लो पृष्ठ\r\nprevious_label=अघिल्लो\r\nnext.title=पछिल्लो पृष्ठ\r\nnext_label=पछिल्लो\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=पृष्ठ\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}} मध्ये\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pagesCount}} को {{pageNumber}})\r\n\r\nzoom_out.title=जुम घटाउनुहोस्\r\nzoom_out_label=जुम घटाउनुहोस्\r\nzoom_in.title=जुम बढाउनुहोस्\r\nzoom_in_label=जुम बढाउनुहोस्\r\nzoom.title=जुम गर्नुहोस्\r\npresentation_mode.title=प्रस्तुति मोडमा जानुहोस्\r\npresentation_mode_label=प्रस्तुति मोड\r\nopen_file.title=फाइल खोल्नुहोस्\r\nopen_file_label=खोल्नुहोस्\r\nprint.title=मुद्रण गर्नुहोस्\r\nprint_label=मुद्रण गर्नुहोस्\r\ndownload.title=डाउनलोडहरू\r\ndownload_label=डाउनलोडहरू\r\nbookmark.title=वर्तमान दृश्य (प्रतिलिपि गर्नुहोस् वा नयाँ सञ्झ्यालमा खुल्नुहोस्)\r\nbookmark_label=हालको दृश्य\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=औजारहरू\r\ntools_label=औजारहरू\r\nfirst_page.title=पहिलो पृष्ठमा जानुहोस्\r\nfirst_page.label=पहिलो पृष्ठमा जानुहोस्\r\nfirst_page_label=पहिलो पृष्ठमा जानुहोस्\r\nlast_page.title=पछिल्लो पृष्ठमा जानुहोस्\r\nlast_page.label=पछिल्लो पृष्ठमा जानुहोस्\r\nlast_page_label=पछिल्लो पृष्ठमा जानुहोस्\r\npage_rotate_cw.title=घडीको दिशामा घुमाउनुहोस्\r\npage_rotate_cw.label=घडीको दिशामा घुमाउनुहोस्\r\npage_rotate_cw_label=घडीको दिशामा घुमाउनुहोस्\r\npage_rotate_ccw.title=घडीको विपरित दिशामा घुमाउनुहोस्\r\npage_rotate_ccw.label=घडीको विपरित दिशामा घुमाउनुहोस्\r\npage_rotate_ccw_label=घडीको विपरित दिशामा घुमाउनुहोस्\r\n\r\ncursor_text_select_tool.title=पाठ चयन उपकरण सक्षम गर्नुहोस्\r\ncursor_text_select_tool_label=पाठ चयन उपकरण\r\ncursor_hand_tool.title=हाते उपकरण सक्षम गर्नुहोस्\r\ncursor_hand_tool_label=हाते उपकरण\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=कागजात विशेषताहरू...\r\ndocument_properties_label=कागजात विशेषताहरू...\r\ndocument_properties_file_name=फाइल नाम:\r\ndocument_properties_file_size=फाइल आकार:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=शीर्षक:\r\ndocument_properties_author=लेखक:\r\ndocument_properties_subject=विषयः\r\ndocument_properties_keywords=शब्दकुञ्जीः\r\ndocument_properties_creation_date=सिर्जना गरिएको मिति:\r\ndocument_properties_modification_date=परिमार्जित मिति:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=सर्जक:\r\ndocument_properties_producer=PDF निर्माता:\r\ndocument_properties_version=PDF संस्करण\r\ndocument_properties_page_count=पृष्ठ गणना:\r\ndocument_properties_close=बन्द गर्नुहोस्\r\n\r\nprint_progress_message=मुद्रणका लागि कागजात तयारी गरिदै…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=रद्द गर्नुहोस्\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=टगल साइडबार\r\ntoggle_sidebar_notification.title=साइडबार टगल गर्नुहोस् (कागजातमा समावेश भएको कुराहरू रूपरेखा/attachments)\r\ntoggle_sidebar_label=टगल साइडबार\r\ndocument_outline.title=कागजातको रूपरेखा देखाउनुहोस् (सबै वस्तुहरू विस्तार/पतन गर्न डबल-क्लिक गर्नुहोस्)\r\ndocument_outline_label=दस्तावेजको रूपरेखा\r\nattachments.title=संलग्नहरू देखाउनुहोस्\r\nattachments_label=संलग्नकहरू\r\nthumbs.title=थम्बनेलहरू देखाउनुहोस्\r\nthumbs_label=थम्बनेलहरू\r\nfindbar.title=कागजातमा फेला पार्नुहोस्\r\nfindbar_label=फेला पार्नुहोस्\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=पृष्ठ {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}} पृष्ठको थम्बनेल\r\n\r\n# Find panel button title and messages\r\nfind_input.title=फेला पार्नुहोस्\r\nfind_input.placeholder=कागजातमा फेला पार्नुहोस्…\r\nfind_previous.title=यस वाक्यांशको अघिल्लो घटना फेला पार्नुहोस्\r\nfind_previous_label=अघिल्लो\r\nfind_next.title=यस वाक्यांशको पछिल्लो घटना फेला पार्नुहोस्\r\nfind_next_label=अर्को\r\nfind_highlight=सबै हाइलाइट गर्ने\r\nfind_match_case_label=केस जोडा मिलाउनुहोस्\r\nfind_reached_top=पृष्ठको शिर्षमा पुगीयो, तलबाट जारी गरिएको थियो\r\nfind_reached_bottom=पृष्ठको अन्त्यमा पुगीयो, शिर्षबाट जारी गरिएको थियो\r\nfind_not_found=वाक्यांश फेला परेन\r\n\r\n# Error panel labels\r\nerror_more_info=थप जानकारी\r\nerror_less_info=कम जानकारी\r\nerror_close=बन्द गर्नुहोस्\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=सन्देश: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=स्ट्याक: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=फाइल: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=लाइन: {{line}}\r\nrendering_error=पृष्ठ प्रतिपादन गर्दा एउटा त्रुटि देखापर्‍यो।\r\n\r\n# Predefined zoom values\r\npage_scale_width=पृष्ठ चौडाइ\r\npage_scale_fit=पृष्ठ ठिक्क मिल्ने\r\npage_scale_auto=स्वचालित जुम\r\npage_scale_actual=वास्तविक आकार\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=त्रुटि\r\nloading_error=यो PDF लोड गर्दा एउटा त्रुटि देखापर्‍यो।\r\ninvalid_file_error=अवैध वा दुषित PDF फाइल।\r\nmissing_file_error=हराईरहेको PDF फाइल।\r\nunexpected_response_error=अप्रत्याशित सर्भर प्रतिक्रिया।\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=यस PDF फाइललाई खोल्न गोप्यशब्द प्रविष्ट गर्नुहोस्।\r\npassword_invalid=अवैध गोप्यशब्द। पुनः प्रयास गर्नुहोस्।\r\npassword_ok=ठिक छ\r\npassword_cancel=रद्द गर्नुहोस्\r\n\r\nprinting_not_supported=चेतावनी: यो ब्राउजरमा मुद्रण पूर्णतया समर्थित छैन।\r\nprinting_not_ready=चेतावनी: PDF मुद्रणका लागि पूर्णतया लोड भएको छैन।\r\nweb_fonts_disabled=वेब फन्ट असक्षम छन्: एम्बेडेड PDF फन्ट प्रयोग गर्न असमर्थ।\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/nl/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Vorige pagina\r\nprevious_label=Vorige\r\nnext.title=Volgende pagina\r\nnext_label=Volgende\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Pagina\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=van {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} van {{pagesCount}})\r\n\r\nzoom_out.title=Uitzoomen\r\nzoom_out_label=Uitzoomen\r\nzoom_in.title=Inzoomen\r\nzoom_in_label=Inzoomen\r\nzoom.title=Zoomen\r\npresentation_mode.title=Wisselen naar presentatiemodus\r\npresentation_mode_label=Presentatiemodus\r\nopen_file.title=Bestand openen\r\nopen_file_label=Openen\r\nprint.title=Afdrukken\r\nprint_label=Afdrukken\r\ndownload.title=Downloaden\r\ndownload_label=Downloaden\r\nbookmark.title=Huidige weergave (kopiëren of openen in nieuw venster)\r\nbookmark_label=Huidige weergave\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Hulpmiddelen\r\ntools_label=Hulpmiddelen\r\nfirst_page.title=Naar eerste pagina gaan\r\nfirst_page.label=Naar eerste pagina gaan\r\nfirst_page_label=Naar eerste pagina gaan\r\nlast_page.title=Naar laatste pagina gaan\r\nlast_page.label=Naar laatste pagina gaan\r\nlast_page_label=Naar laatste pagina gaan\r\npage_rotate_cw.title=Rechtsom draaien\r\npage_rotate_cw.label=Rechtsom draaien\r\npage_rotate_cw_label=Rechtsom draaien\r\npage_rotate_ccw.title=Linksom draaien\r\npage_rotate_ccw.label=Linksom draaien\r\npage_rotate_ccw_label=Linksom draaien\r\n\r\ncursor_text_select_tool.title=Tekstselectiehulpmiddel inschakelen\r\ncursor_text_select_tool_label=Tekstselectiehulpmiddel\r\ncursor_hand_tool.title=Handhulpmiddel inschakelen\r\ncursor_hand_tool_label=Handhulpmiddel\r\n\r\nscroll_vertical.title=Verticaal scrollen gebruiken\r\nscroll_vertical_label=Verticaal scrollen\r\nscroll_horizontal.title=Horizontaal scrollen gebruiken\r\nscroll_horizontal_label=Horizontaal scrollen\r\nscroll_wrapped.title=Scrollen met terugloop gebruiken\r\nscroll_wrapped_label=Scrollen met terugloop\r\n\r\nspread_none.title=Dubbele pagina’s niet samenvoegen\r\nspread_none_label=Geen dubbele pagina’s\r\nspread_odd.title=Dubbele pagina’s samenvoegen vanaf oneven pagina’s\r\nspread_odd_label=Oneven dubbele pagina’s\r\nspread_even.title=Dubbele pagina’s samenvoegen vanaf even pagina’s\r\nspread_even_label=Even dubbele pagina’s\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Documenteigenschappen…\r\ndocument_properties_label=Documenteigenschappen…\r\ndocument_properties_file_name=Bestandsnaam:\r\ndocument_properties_file_size=Bestandsgrootte:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Titel:\r\ndocument_properties_author=Auteur:\r\ndocument_properties_subject=Onderwerp:\r\ndocument_properties_keywords=Trefwoorden:\r\ndocument_properties_creation_date=Aanmaakdatum:\r\ndocument_properties_modification_date=Wijzigingsdatum:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Maker:\r\ndocument_properties_producer=PDF-producent:\r\ndocument_properties_version=PDF-versie:\r\ndocument_properties_page_count=Aantal pagina’s:\r\ndocument_properties_page_size=Paginagrootte:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=staand\r\ndocument_properties_page_size_orientation_landscape=liggend\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Snelle webweergave:\r\ndocument_properties_linearized_yes=Ja\r\ndocument_properties_linearized_no=Nee\r\ndocument_properties_close=Sluiten\r\n\r\nprint_progress_message=Document voorbereiden voor afdrukken…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Annuleren\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Zijbalk in-/uitschakelen\r\ntoggle_sidebar_notification.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen)\r\ntoggle_sidebar_notification2.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen/lagen)\r\ntoggle_sidebar_label=Zijbalk in-/uitschakelen\r\ndocument_outline.title=Documentoverzicht tonen (dubbelklik om alle items uit/samen te vouwen)\r\ndocument_outline_label=Documentoverzicht\r\nattachments.title=Bijlagen tonen\r\nattachments_label=Bijlagen\r\nlayers.title=Lagen tonen (dubbelklik om alle lagen naar de standaardstatus terug te zetten)\r\nlayers_label=Lagen\r\nthumbs.title=Miniaturen tonen\r\nthumbs_label=Miniaturen\r\ncurrent_outline_item.title=Huidig item in inhoudsopgave zoeken\r\ncurrent_outline_item_label=Huidig item in inhoudsopgave\r\nfindbar.title=Zoeken in document\r\nfindbar_label=Zoeken\r\n\r\nadditional_layers=Aanvullende lagen\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Pagina {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Pagina {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatuur van pagina {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Zoeken\r\nfind_input.placeholder=Zoeken in document…\r\nfind_previous.title=De vorige overeenkomst van de tekst zoeken\r\nfind_previous_label=Vorige\r\nfind_next.title=De volgende overeenkomst van de tekst zoeken\r\nfind_next_label=Volgende\r\nfind_highlight=Alles markeren\r\nfind_match_case_label=Hoofdlettergevoelig\r\nfind_entire_word_label=Hele woorden\r\nfind_reached_top=Bovenkant van document bereikt, doorgegaan vanaf onderkant\r\nfind_reached_bottom=Onderkant van document bereikt, doorgegaan vanaf bovenkant\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} van {{total}} overeenkomst\r\nfind_match_count[two]={{current}} van {{total}} overeenkomsten\r\nfind_match_count[few]={{current}} van {{total}} overeenkomsten\r\nfind_match_count[many]={{current}} van {{total}} overeenkomsten\r\nfind_match_count[other]={{current}} van {{total}} overeenkomsten\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Meer dan {{limit}} overeenkomsten\r\nfind_match_count_limit[one]=Meer dan {{limit}} overeenkomst\r\nfind_match_count_limit[two]=Meer dan {{limit}} overeenkomsten\r\nfind_match_count_limit[few]=Meer dan {{limit}} overeenkomsten\r\nfind_match_count_limit[many]=Meer dan {{limit}} overeenkomsten\r\nfind_match_count_limit[other]=Meer dan {{limit}} overeenkomsten\r\nfind_not_found=Tekst niet gevonden\r\n\r\n# Error panel labels\r\nerror_more_info=Meer informatie\r\nerror_less_info=Minder informatie\r\nerror_close=Sluiten\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Bericht: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Bestand: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Regel: {{line}}\r\nrendering_error=Er is een fout opgetreden bij het weergeven van de pagina.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Paginabreedte\r\npage_scale_fit=Hele pagina\r\npage_scale_auto=Automatisch zoomen\r\npage_scale_actual=Werkelijke grootte\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Fout\r\nloading_error=Er is een fout opgetreden bij het laden van de PDF.\r\ninvalid_file_error=Ongeldig of beschadigd PDF-bestand.\r\nmissing_file_error=PDF-bestand ontbreekt. \r\nunexpected_response_error=Onverwacht serverantwoord.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}}-aantekening]\r\npassword_label=Voer het wachtwoord in om dit PDF-bestand te openen.\r\npassword_invalid=Ongeldig wachtwoord. Probeer het opnieuw.\r\npassword_ok=OK\r\npassword_cancel=Annuleren\r\n\r\nprinting_not_supported=Waarschuwing: afdrukken wordt niet volledig ondersteund door deze browser.\r\nprinting_not_ready=Waarschuwing: de PDF is niet volledig geladen voor afdrukken.\r\nweb_fonts_disabled=Weblettertypen zijn uitgeschakeld: gebruik van ingebedde PDF-lettertypen is niet mogelijk.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/nn-NO/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Føregåande side\r\nprevious_label=Føregåande\r\nnext.title=Neste side\r\nnext_label=Neste\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Side\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=av {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} av {{pagesCount}})\r\n\r\nzoom_out.title=Zoom ut\r\nzoom_out_label=Zoom ut\r\nzoom_in.title=Zoom inn\r\nzoom_in_label=Zoom inn\r\nzoom.title=Zoom\r\npresentation_mode.title=Byt til presentasjonsmodus\r\npresentation_mode_label=Presentasjonsmodus\r\nopen_file.title=Opne fil\r\nopen_file_label=Opne\r\nprint.title=Skriv ut\r\nprint_label=Skriv ut\r\ndownload.title=Last ned\r\ndownload_label=Last ned\r\nbookmark.title=Gjeldande vising (kopier eller opne i nytt vindauge)\r\nbookmark_label=Gjeldande vising\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Verktøy\r\ntools_label=Verktøy\r\nfirst_page.title=Gå til første side\r\nfirst_page.label=Gå til første side\r\nfirst_page_label=Gå til første side\r\nlast_page.title=Gå til siste side\r\nlast_page.label=Gå til siste side\r\nlast_page_label=Gå til siste side\r\npage_rotate_cw.title=Roter med klokka\r\npage_rotate_cw.label=Roter med klokka\r\npage_rotate_cw_label=Roter med klokka\r\npage_rotate_ccw.title=Roter mot klokka\r\npage_rotate_ccw.label=Roter mot klokka\r\npage_rotate_ccw_label=Roter mot klokka\r\n\r\ncursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy\r\ncursor_text_select_tool_label=Tekstmarkeringsverktøy\r\ncursor_hand_tool.title=Aktiver handverktøy\r\ncursor_hand_tool_label=Handverktøy\r\n\r\nscroll_vertical.title=Bruk vertikal rulling\r\nscroll_vertical_label=Vertikal rulling\r\nscroll_horizontal.title=Bruk horisontal rulling\r\nscroll_horizontal_label=Horisontal rulling\r\nscroll_wrapped.title=Bruk fleirsiderulling\r\nscroll_wrapped_label=Fleirsiderulling\r\n\r\nspread_none.title=Vis enkeltsider\r\nspread_none_label=Enkeltside\r\nspread_odd.title=Vis oppslag med ulike sidenummer til venstre\r\nspread_odd_label=Oppslag med framside\r\nspread_even.title=Vis oppslag med like sidenummmer til venstre\r\nspread_even_label=Oppslag utan framside\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumenteigenskapar…\r\ndocument_properties_label=Dokumenteigenskapar…\r\ndocument_properties_file_name=Filnamn:\r\ndocument_properties_file_size=Filstorleik:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Tittel:\r\ndocument_properties_author=Forfattar:\r\ndocument_properties_subject=Emne:\r\ndocument_properties_keywords=Stikkord:\r\ndocument_properties_creation_date=Dato oppretta:\r\ndocument_properties_modification_date=Dato endra:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Oppretta av:\r\ndocument_properties_producer=PDF-verktøy:\r\ndocument_properties_version=PDF-versjon:\r\ndocument_properties_page_count=Sidetal:\r\ndocument_properties_page_size=Sidestørrelse:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=ståande\r\ndocument_properties_page_size_orientation_landscape=liggande\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Brev\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Rask nettvising:\r\ndocument_properties_linearized_yes=Ja\r\ndocument_properties_linearized_no=Nei\r\ndocument_properties_close=Lat att\r\n\r\nprint_progress_message=Førebur dokumentet for utskrift…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Avbryt\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Slå av/på sidestolpe\r\ntoggle_sidebar_notification.title=Vis/gøym sidestolpen (dokumentet inneheld oversikt/vedlegg)\r\ntoggle_sidebar_notification2.title=Vis/gøym sidestolpe (dokumentet inneheld oversikt/vedlegg/lag)\r\ntoggle_sidebar_label=Slå av/på sidestolpe\r\ndocument_outline.title=Vis dokumentdisposisjonen (dobbelklikk for å utvide/gøyme alle elementa)\r\ndocument_outline_label=Dokumentdisposisjon\r\nattachments.title=Vis vedlegg\r\nattachments_label=Vedlegg\r\nlayers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand)\r\nlayers_label=Lag\r\nthumbs.title=Vis miniatyrbilde\r\nthumbs_label=Miniatyrbilde\r\nfindbar.title=Finn i dokumentet\r\nfindbar_label=Finn\r\n\r\nadditional_layers=Ytterlegare lag\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Side {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Side {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatyrbilde av side {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Søk\r\nfind_input.placeholder=Søk i dokument…\r\nfind_previous.title=Finn førre førekomst av frasen\r\nfind_previous_label=Førre\r\nfind_next.title=Finn neste førekomst av frasen\r\nfind_next_label=Neste\r\nfind_highlight=Uthev alle\r\nfind_match_case_label=Skil store/små bokstavar\r\nfind_entire_word_label=Heile ord\r\nfind_reached_top=Nådde toppen av dokumentet, fortset frå botnen\r\nfind_reached_bottom=Nådde botnen av dokumentet, fortset frå toppen\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} av {{total}} treff\r\nfind_match_count[two]={{current}} av {{total}} treff\r\nfind_match_count[few]={{current}} av {{total}} treff\r\nfind_match_count[many]={{current}} av {{total}} treff\r\nfind_match_count[other]={{current}} av {{total}} treff\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Meir enn {{limit}} treff\r\nfind_match_count_limit[one]=Meir enn {{limit}} treff\r\nfind_match_count_limit[two]=Meir enn {{limit}} treff\r\nfind_match_count_limit[few]=Meir enn {{limit}} treff\r\nfind_match_count_limit[many]=Meir enn {{limit}} treff\r\nfind_match_count_limit[other]=Meir enn {{limit}} treff\r\nfind_not_found=Fann ikkje teksten\r\n\r\n# Error panel labels\r\nerror_more_info=Meir info\r\nerror_less_info=Mindre info\r\nerror_close=Lat att\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (bygg: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Melding: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stakk: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fil: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linje: {{line}}\r\nrendering_error=Ein feil oppstod under vising av sida.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Sidebreidde\r\npage_scale_fit=Tilpass til sida\r\npage_scale_auto=Automatisk skalering\r\npage_scale_actual=Verkeleg storleik\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Feil\r\nloading_error=Ein feil oppstod ved lasting av PDF.\r\ninvalid_file_error=Ugyldig eller korrupt PDF-fil.\r\nmissing_file_error=Manglande PDF-fil.\r\nunexpected_response_error=Uventa tenarrespons.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}} {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} annotasjon]\r\npassword_label=Skriv inn passordet for å opne denne PDF-fila.\r\npassword_invalid=Ugyldig passord. Prøv igjen.\r\npassword_ok=OK\r\npassword_cancel=Avbryt\r\n\r\nprinting_not_supported=Åtvaring: Utskrift er ikkje fullstendig støtta av denne nettlesaren.\r\nprinting_not_ready=Åtvaring: PDF ikkje fullstendig innlasta for utskrift.\r\nweb_fonts_disabled=Web-skrifter er slått av: Kan ikkje bruke innbundne PDF-skrifter.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/oc/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Pagina precedenta\r\nprevious_label=Precedent\r\nnext.title=Pagina seguenta\r\nnext_label=Seguent\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Pagina\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=sus {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} sus {{pagesCount}})\r\n\r\nzoom_out.title=Zoom arrièr\r\nzoom_out_label=Zoom arrièr\r\nzoom_in.title=Zoom avant\r\nzoom_in_label=Zoom avant\r\nzoom.title=Zoom\r\npresentation_mode.title=Bascular en mòde presentacion\r\npresentation_mode_label=Mòde Presentacion\r\nopen_file.title=Dobrir lo fichièr\r\nopen_file_label=Dobrir\r\nprint.title=Imprimir\r\nprint_label=Imprimir\r\ndownload.title=Telecargar\r\ndownload_label=Telecargar\r\nbookmark.title=Afichatge corrent (copiar o dobrir dins una fenèstra novèla)\r\nbookmark_label=Afichatge actual\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Aisinas\r\ntools_label=Aisinas\r\nfirst_page.title=Anar a la primièra pagina\r\nfirst_page.label=Anar a la primièra pagina\r\nfirst_page_label=Anar a la primièra pagina\r\nlast_page.title=Anar a la darrièra pagina\r\nlast_page.label=Anar a la darrièra pagina\r\nlast_page_label=Anar a la darrièra pagina\r\npage_rotate_cw.title=Rotacion orària\r\npage_rotate_cw.label=Rotacion orària\r\npage_rotate_cw_label=Rotacion orària\r\npage_rotate_ccw.title=Rotacion antiorària\r\npage_rotate_ccw.label=Rotacion antiorària\r\npage_rotate_ccw_label=Rotacion antiorària\r\n\r\ncursor_text_select_tool.title=Activar l'aisina de seleccion de tèxte\r\ncursor_text_select_tool_label=Aisina de seleccion de tèxte\r\ncursor_hand_tool.title=Activar l’aisina man\r\ncursor_hand_tool_label=Aisina man\r\n\r\nscroll_vertical.title=Utilizar lo desfilament vertical\r\nscroll_vertical_label=Desfilament vertical\r\nscroll_horizontal.title=Utilizar lo desfilament orizontal\r\nscroll_horizontal_label=Desfilament orizontal\r\nscroll_wrapped.title=Activar lo desfilament continú\r\nscroll_wrapped_label=Desfilament continú\r\n\r\nspread_none.title=Agropar pas las paginas doas a doas\r\nspread_none_label=Una sola pagina\r\nspread_odd.title=Mostrar doas paginas en començant per las paginas imparas a esquèrra\r\nspread_odd_label=Dobla pagina, impara a drecha\r\nspread_even.title=Mostrar doas paginas en començant per las paginas paras a esquèrra\r\nspread_even_label=Dobla pagina, para a drecha\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Proprietats del document…\r\ndocument_properties_label=Proprietats del document…\r\ndocument_properties_file_name=Nom del fichièr :\r\ndocument_properties_file_size=Talha del fichièr :\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} Ko ({{size_b}} octets)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} Mo ({{size_b}} octets)\r\ndocument_properties_title=Títol :\r\ndocument_properties_author=Autor :\r\ndocument_properties_subject=Subjècte :\r\ndocument_properties_keywords=Mots claus :\r\ndocument_properties_creation_date=Data de creacion :\r\ndocument_properties_modification_date=Data de modificacion :\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, a {{time}}\r\ndocument_properties_creator=Creator :\r\ndocument_properties_producer=Aisina de conversion PDF :\r\ndocument_properties_version=Version PDF :\r\ndocument_properties_page_count=Nombre de paginas :\r\ndocument_properties_page_size=Talha de la pagina :\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=retrach\r\ndocument_properties_page_size_orientation_landscape=païsatge\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letra\r\ndocument_properties_page_size_name_legal=Document juridic\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Vista web rapida :\r\ndocument_properties_linearized_yes=Òc\r\ndocument_properties_linearized_no=Non\r\ndocument_properties_close=Tampar\r\n\r\nprint_progress_message=Preparacion del document per l’impression…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Anullar\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Afichar/amagar lo panèl lateral\r\ntoggle_sidebar_notification.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas)\r\ntoggle_sidebar_notification2.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas/calques)\r\ntoggle_sidebar_label=Afichar/amagar lo panèl lateral\r\ndocument_outline.title=Mostrar los esquèmas del document (dobleclicar per espandre/reduire totes los elements)\r\ndocument_outline_label=Marcapaginas del document\r\nattachments.title=Visualizar las pèças juntas\r\nattachments_label=Pèças juntas\r\nlayers.title=Afichar los calques (doble-clicar per reïnicializar totes los calques a l’estat per defaut)\r\nlayers_label=Calques\r\nthumbs.title=Afichar las vinhetas\r\nthumbs_label=Vinhetas\r\nfindbar.title=Cercar dins lo document\r\nfindbar_label=Recercar\r\n\r\nadditional_layers=Calques suplementaris\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Pagina {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Pagina {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Vinheta de la pagina {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Recercar\r\nfind_input.placeholder=Cercar dins lo document…\r\nfind_previous.title=Tròba l'ocurréncia precedenta de la frasa\r\nfind_previous_label=Precedent\r\nfind_next.title=Tròba l'ocurréncia venenta de la frasa\r\nfind_next_label=Seguent\r\nfind_highlight=Suslinhar tot\r\nfind_match_case_label=Respectar la cassa\r\nfind_entire_word_label=Mots entièrs\r\nfind_reached_top=Naut de la pagina atenh, perseguida del bas\r\nfind_reached_bottom=Bas de la pagina atench, perseguida al començament\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]=Occuréncia {{current}} sus {{total}}\r\nfind_match_count[two]=Occuréncia {{current}} sus {{total}}\r\nfind_match_count[few]=Occuréncia {{current}} sus {{total}}\r\nfind_match_count[many]=Occuréncia {{current}} sus {{total}}\r\nfind_match_count[other]=Occuréncia {{current}} sus {{total}}\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Mai de {{limit}} occuréncias\r\nfind_match_count_limit[one]=Mai de {{limit}} occuréncia\r\nfind_match_count_limit[two]=Mai de {{limit}} occuréncias\r\nfind_match_count_limit[few]=Mai de {{limit}} occuréncias\r\nfind_match_count_limit[many]=Mai de {{limit}} occuréncias\r\nfind_match_count_limit[other]=Mai de {{limit}} occuréncias\r\nfind_not_found=Frasa pas trobada\r\n\r\n# Error panel labels\r\nerror_more_info=Mai de detalhs\r\nerror_less_info=Mens d'informacions\r\nerror_close=Tampar\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (identificant de compilacion : {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Messatge : {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pila : {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fichièr : {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linha : {{line}}\r\nrendering_error=Una error s'es producha pendent l'afichatge de la pagina.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Largor plena\r\npage_scale_fit=Pagina entièra\r\npage_scale_auto=Zoom automatic\r\npage_scale_actual=Talha vertadièra\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=Una error s'es producha pendent lo cargament del fichièr PDF.\r\ninvalid_file_error=Fichièr PDF invalid o corromput.\r\nmissing_file_error=Fichièr PDF mancant.\r\nunexpected_response_error=Responsa de servidor imprevista.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}} a {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anotacion {{type}}]\r\npassword_label=Picatz lo senhal per dobrir aqueste fichièr PDF.\r\npassword_invalid=Senhal incorrècte. Tornatz ensajar.\r\npassword_ok=D'acòrdi\r\npassword_cancel=Anullar\r\n\r\nprinting_not_supported=Atencion : l'impression es pas completament gerida per aqueste navegador.\r\nprinting_not_ready=Atencion : lo PDF es pas entièrament cargat per lo poder imprimir.\r\nweb_fonts_disabled=Las poliças web son desactivadas : impossible d'utilizar las poliças integradas al PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/pa-IN/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=ਪਿਛਲਾ ਸਫ਼ਾ\r\nprevious_label=ਪਿੱਛੇ\r\nnext.title=ਅਗਲਾ ਸਫ਼ਾ\r\nnext_label=ਅੱਗੇ\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=ਸਫ਼ਾ\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}} ਵਿੱਚੋਂ\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages={{pagesCount}}) ਵਿੱਚੋਂ ({{pageNumber}}\r\n\r\nzoom_out.title=ਜ਼ੂਮ ਆਉਟ\r\nzoom_out_label=ਜ਼ੂਮ ਆਉਟ\r\nzoom_in.title=ਜ਼ੂਮ ਇਨ\r\nzoom_in_label=ਜ਼ੂਮ ਇਨ\r\nzoom.title=ਜ਼ੂਨ\r\npresentation_mode.title=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ ਵਿੱਚ ਜਾਓ\r\npresentation_mode_label=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ\r\nopen_file.title=ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹੋ\r\nopen_file_label=ਖੋਲ੍ਹੋ\r\nprint.title=ਪਰਿੰਟ\r\nprint_label=ਪਰਿੰਟ\r\ndownload.title=ਡਾਊਨਲੋਡ\r\ndownload_label=ਡਾਊਨਲੋਡ\r\nbookmark.title=ਮੌਜੂਦਾ ਝਲਕ (ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਕਾਪੀ ਕਰੋ ਜਾਂ ਖੋਲ੍ਹੋ)\r\nbookmark_label=ਮੌਜੂਦਾ ਝਲਕ\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=ਟੂਲ\r\ntools_label=ਟੂਲ\r\nfirst_page.title=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ\r\nfirst_page.label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ\r\nfirst_page_label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ\r\nlast_page.title=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ\r\nlast_page.label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ\r\nlast_page_label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ\r\npage_rotate_cw.title=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ\r\npage_rotate_cw.label=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਉ\r\npage_rotate_cw_label=ਸੱਜੇ ਦਾਅ ਘੁੰਮਾਓ\r\npage_rotate_ccw.title=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ\r\npage_rotate_ccw.label=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਉ\r\npage_rotate_ccw_label=ਖੱਬੇ ਦਾਅ ਘੁੰਮਾਓ\r\n\r\ncursor_text_select_tool.title=ਲਿਖਤ ਚੋਣ ਟੂਲ ਸਮਰੱਥ ਕਰੋ\r\ncursor_text_select_tool_label=ਲਿਖਤ ਚੋਣ ਟੂਲ\r\ncursor_hand_tool.title=ਹੱਥ ਟੂਲ ਸਮਰੱਥ ਕਰੋ\r\ncursor_hand_tool_label=ਹੱਥ ਟੂਲ\r\n\r\nscroll_vertical.title=ਖੜ੍ਹਵੇਂ ਸਕਰਾਉਣ ਨੂੰ ਵਰਤੋਂ\r\nscroll_vertical_label=ਖੜ੍ਹਵਾਂ ਸਰਕਾਉਣਾ\r\nscroll_horizontal.title=ਲੇਟਵੇਂ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ\r\nscroll_horizontal_label=ਲੇਟਵਾਂ ਸਰਕਾਉਣਾ\r\nscroll_wrapped.title=ਸਮੇਟੇ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ\r\nscroll_wrapped_label=ਸਮੇਟਿਆ ਸਰਕਾਉਣਾ\r\n\r\nspread_none.title=ਸਫ਼ਾ ਫੈਲਾਅ ਵਿੱਚ ਸ਼ਾਮਲ ਨਾ ਹੋਵੋ\r\nspread_none_label=ਕੋਈ ਫੈਲਾਅ ਨਹੀਂ\r\nspread_odd.title=ਟਾਂਕ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ\r\nspread_odd_label=ਟਾਂਕ ਫੈਲਾਅ\r\nspread_even.title=ਜਿਸਤ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ\r\nspread_even_label=ਜਿਸਤ ਫੈਲਾਅ\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ\r\ndocument_properties_label=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ\r\ndocument_properties_file_name=ਫਾਈਲ ਦਾ ਨਾਂ:\r\ndocument_properties_file_size=ਫਾਈਲ ਦਾ ਆਕਾਰ:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} ਬਾਈਟ)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} ਬਾਈਟ)\r\ndocument_properties_title=ਟਾਈਟਲ:\r\ndocument_properties_author=ਲੇਖਕ:\r\ndocument_properties_subject=ਵਿਸ਼ਾ:\r\ndocument_properties_keywords=ਸ਼ਬਦ:\r\ndocument_properties_creation_date=ਬਣਾਉਣ ਦੀ ਮਿਤੀ:\r\ndocument_properties_modification_date=ਸੋਧ ਦੀ ਮਿਤੀ:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=ਨਿਰਮਾਤਾ:\r\ndocument_properties_producer=PDF ਪ੍ਰੋਡਿਊਸਰ:\r\ndocument_properties_version=PDF ਵਰਜਨ:\r\ndocument_properties_page_count=ਸਫ਼ੇ ਦੀ ਗਿਣਤੀ:\r\ndocument_properties_page_size=ਸਫ਼ਾ ਆਕਾਰ:\r\ndocument_properties_page_size_unit_inches=ਇੰਚ\r\ndocument_properties_page_size_unit_millimeters=ਮਿਮੀ\r\ndocument_properties_page_size_orientation_portrait=ਪੋਰਟਰੇਟ\r\ndocument_properties_page_size_orientation_landscape=ਲੈਂਡਸਕੇਪ\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=ਲੈਟਰ\r\ndocument_properties_page_size_name_legal=ਕਨੂੰਨੀ\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=ਤੇਜ਼ ਵੈੱਬ ਝਲਕ:\r\ndocument_properties_linearized_yes=ਹਾਂ\r\ndocument_properties_linearized_no=ਨਹੀਂ\r\ndocument_properties_close=ਬੰਦ ਕਰੋ\r\n\r\nprint_progress_message=…ਪਰਿੰਟ ਕਰਨ ਲਈ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=ਰੱਦ ਕਰੋ\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=ਬਾਹੀ ਬਦਲੋ\r\ntoggle_sidebar_notification.title=ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟਾਂ ਰੱਖਦਾ ਹੈ)\r\ntoggle_sidebar_notification2.title=ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟ/ਪਰਤਾਂ ਰੱਖਦਾ ਹੈ)\r\ntoggle_sidebar_label=ਬਾਹੀ ਬਦਲੋ\r\ndocument_outline.title=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ ਦਿਖਾਓ (ਸਾਰੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਫੈਲਾਉਣ/ਸਮੇਟਣ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ)\r\ndocument_outline_label=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ\r\nattachments.title=ਅਟੈਚਮੈਂਟ ਵੇਖਾਓ\r\nattachments_label=ਅਟੈਚਮੈਂਟਾਂ\r\nlayers.title=ਪਰਤਾਂ ਵੇਖਾਓ (ਸਾਰੀਆਂ ਪਰਤਾਂ ਨੂੰ ਮੂਲ ਹਾਲਤ ਉੱਤੇ ਮੁੜ-ਸੈੱਟ ਕਰਨ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ)\r\nlayers_label=ਪਰਤਾਂ\r\nthumbs.title=ਥੰਮਨੇਲ ਨੂੰ ਵੇਖਾਓ\r\nthumbs_label=ਥੰਮਨੇਲ\r\ncurrent_outline_item.title=ਮੌੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼ ਲੱਭੋ\r\ncurrent_outline_item_label=ਮੌਜੂਦਾ ਖਾਕਾ ਚੀਜ਼\r\nfindbar.title=ਦਸਤਾਵੇਜ਼ ਵਿੱਚ ਲੱਭੋ\r\nfindbar_label=ਲੱਭੋ\r\n\r\nadditional_layers=ਵਾਧੂ ਪਰਤਾਂ\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=ਸਫ਼ਾ {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=ਸਫ਼ਾ {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}} ਸਫ਼ੇ ਦਾ ਥੰਮਨੇਲ\r\n\r\n# Find panel button title and messages\r\nfind_input.title=ਲੱਭੋ\r\nfind_input.placeholder=…ਦਸਤਾਵੇਜ਼ 'ਚ ਲੱਭੋ\r\nfind_previous.title=ਵਾਕ ਦੀ ਪਿਛਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ\r\nfind_previous_label=ਪਿੱਛੇ\r\nfind_next.title=ਵਾਕ ਦੀ ਅਗਲੀ ਮੌਜੂਦਗੀ ਲੱਭੋ\r\nfind_next_label=ਅੱਗੇ\r\nfind_highlight=ਸਭ ਉਭਾਰੋ\r\nfind_match_case_label=ਅੱਖਰ ਆਕਾਰ ਨੂੰ ਮਿਲਾਉ\r\nfind_entire_word_label=ਪੂਰੇ ਸ਼ਬਦ\r\nfind_reached_top=ਦਸਤਾਵੇਜ਼ ਦੇ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਥੱਲੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ\r\nfind_reached_bottom=ਦਸਤਾਵੇਜ਼ ਦੇ ਅੰਤ ਉੱਤੇ ਆ ਗਏ ਹਾਂ, ਉੱਤੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ\r\nfind_match_count[two]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ\r\nfind_match_count[few]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ\r\nfind_match_count[many]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ\r\nfind_match_count[other]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ\r\nfind_match_count_limit[one]={{limit}} ਮੇਲ ਤੋਂ ਵੱਧ\r\nfind_match_count_limit[two]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ\r\nfind_match_count_limit[few]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ\r\nfind_match_count_limit[many]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ\r\nfind_match_count_limit[other]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ\r\nfind_not_found=ਵਾਕ ਨਹੀਂ ਲੱਭਿਆ\r\n\r\n# Error panel labels\r\nerror_more_info=ਹੋਰ ਜਾਣਕਾਰੀ\r\nerror_less_info=ਘੱਟ ਜਾਣਕਾਰੀ\r\nerror_close=ਬੰਦ ਕਰੋ\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (ਬਿਲਡ: {{build}}\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=ਸੁਨੇਹਾ: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=ਸਟੈਕ: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=ਫਾਈਲ: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=ਲਾਈਨ: {{line}}\r\nrendering_error=ਸਫ਼ਾ ਰੈਡਰ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ।\r\n\r\n# Predefined zoom values\r\npage_scale_width=ਸਫ਼ੇ ਦੀ ਚੌੜਾਈ\r\npage_scale_fit=ਸਫ਼ਾ ਫਿੱਟ\r\npage_scale_auto=ਆਟੋਮੈਟਿਕ ਜ਼ੂਮ ਕਰੋ\r\npage_scale_actual=ਆਟੋਮੈਟਿਕ ਆਕਾਰ\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=ਗਲਤੀ\r\nloading_error=PDF ਲੋਡ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ।\r\ninvalid_file_error=ਗਲਤ ਜਾਂ ਨਿਕਾਰਾ PDF ਫਾਈਲ ਹੈ।\r\nmissing_file_error=ਨਾ-ਮੌਜੂਦ PDF ਫਾਈਲ।\r\nunexpected_response_error=ਅਣਜਾਣ ਸਰਵਰ ਜਵਾਬ।\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} ਵਿਆਖਿਆ]\r\npassword_label=ਇਹ PDF ਫਾਈਲ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ ਪਾਸਵਰਡ ਦਿਉ।\r\npassword_invalid=ਗਲਤ ਪਾਸਵਰਡ। ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।\r\npassword_ok=ਠੀਕ ਹੈ\r\npassword_cancel=ਰੱਦ ਕਰੋ\r\n\r\nprinting_not_supported=ਸਾਵਧਾਨ: ਇਹ ਬਰਾਊਜ਼ਰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।\r\nprinting_not_ready=ਸਾਵਧਾਨ: PDF ਨੂੰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਲੋਡ ਨਹੀਂ ਹੈ।\r\nweb_fonts_disabled=ਵੈਬ ਫੋਂਟ ਬੰਦ ਹਨ: ਇੰਬੈਡ PDF ਫੋਂਟ ਨੂੰ ਵਰਤਣ ਲਈ ਅਸਮਰੱਥ ਹੈ।\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/pl/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Poprzednia strona\r\nprevious_label=Poprzednia\r\nnext.title=Następna strona\r\nnext_label=Następna\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Strona\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=z {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} z {{pagesCount}})\r\n\r\nzoom_out.title=Pomniejsz\r\nzoom_out_label=Pomniejsz\r\nzoom_in.title=Powiększ\r\nzoom_in_label=Powiększ\r\nzoom.title=Skala\r\npresentation_mode.title=Przełącz na tryb prezentacji\r\npresentation_mode_label=Tryb prezentacji\r\nopen_file.title=Otwórz plik\r\nopen_file_label=Otwórz\r\nprint.title=Drukuj\r\nprint_label=Drukuj\r\ndownload.title=Pobierz\r\ndownload_label=Pobierz\r\nbookmark.title=Bieżąca pozycja (skopiuj lub otwórz jako odnośnik w nowym oknie)\r\nbookmark_label=Bieżąca pozycja\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Narzędzia\r\ntools_label=Narzędzia\r\nfirst_page.title=Przejdź do pierwszej strony\r\nfirst_page.label=Przejdź do pierwszej strony\r\nfirst_page_label=Przejdź do pierwszej strony\r\nlast_page.title=Przejdź do ostatniej strony\r\nlast_page.label=Przejdź do ostatniej strony\r\nlast_page_label=Przejdź do ostatniej strony\r\npage_rotate_cw.title=Obróć zgodnie z ruchem wskazówek zegara\r\npage_rotate_cw.label=Obróć zgodnie z ruchem wskazówek zegara\r\npage_rotate_cw_label=Obróć zgodnie z ruchem wskazówek zegara\r\npage_rotate_ccw.title=Obróć przeciwnie do ruchu wskazówek zegara\r\npage_rotate_ccw.label=Obróć przeciwnie do ruchu wskazówek zegara\r\npage_rotate_ccw_label=Obróć przeciwnie do ruchu wskazówek zegara\r\n\r\ncursor_text_select_tool.title=Włącz narzędzie zaznaczania tekstu\r\ncursor_text_select_tool_label=Narzędzie zaznaczania tekstu\r\ncursor_hand_tool.title=Włącz narzędzie rączka\r\ncursor_hand_tool_label=Narzędzie rączka\r\n\r\nscroll_vertical.title=Przewijaj dokument w pionie\r\nscroll_vertical_label=Przewijanie pionowe\r\nscroll_horizontal.title=Przewijaj dokument w poziomie\r\nscroll_horizontal_label=Przewijanie poziome\r\nscroll_wrapped.title=Strony dokumentu wyświetlaj i przewijaj w kolumnach\r\nscroll_wrapped_label=Widok dwóch stron\r\n\r\nspread_none.title=Nie ustawiaj stron obok siebie\r\nspread_none_label=Brak kolumn\r\nspread_odd.title=Strony nieparzyste ustawiaj na lewo od parzystych\r\nspread_odd_label=Nieparzyste po lewej\r\nspread_even.title=Strony parzyste ustawiaj na lewo od nieparzystych\r\nspread_even_label=Parzyste po lewej\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Właściwości dokumentu…\r\ndocument_properties_label=Właściwości dokumentu…\r\ndocument_properties_file_name=Nazwa pliku:\r\ndocument_properties_file_size=Rozmiar pliku:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} B)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} B)\r\ndocument_properties_title=Tytuł:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Temat:\r\ndocument_properties_keywords=Słowa kluczowe:\r\ndocument_properties_creation_date=Data utworzenia:\r\ndocument_properties_modification_date=Data modyfikacji:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Utworzony przez:\r\ndocument_properties_producer=PDF wyprodukowany przez:\r\ndocument_properties_version=Wersja PDF:\r\ndocument_properties_page_count=Liczba stron:\r\ndocument_properties_page_size=Wymiary strony:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=pionowa\r\ndocument_properties_page_size_orientation_landscape=pozioma\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=US Letter\r\ndocument_properties_page_size_name_legal=US Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}}×{{height}} {{unit}} (orientacja {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}}×{{height}} {{unit}} ({{name}}, orientacja {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Szybki podgląd w Internecie:\r\ndocument_properties_linearized_yes=tak\r\ndocument_properties_linearized_no=nie\r\ndocument_properties_close=Zamknij\r\n\r\nprint_progress_message=Przygotowywanie dokumentu do druku…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Anuluj\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Przełącz panel boczny\r\ntoggle_sidebar_notification.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki)\r\ntoggle_sidebar_notification2.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki/warstwy)\r\ntoggle_sidebar_label=Przełącz panel boczny\r\ndocument_outline.title=Konspekt dokumentu (podwójne kliknięcie rozwija lub zwija wszystkie pozycje)\r\ndocument_outline_label=Konspekt dokumentu\r\nattachments.title=Załączniki\r\nattachments_label=Załączniki\r\nlayers.title=Warstwy (podwójne kliknięcie przywraca wszystkie warstwy do stanu domyślnego)\r\nlayers_label=Warstwy\r\nthumbs.title=Miniatury\r\nthumbs_label=Miniatury\r\nfindbar.title=Znajdź w dokumencie\r\nfindbar_label=Znajdź\r\n\r\nadditional_layers=Dodatkowe warstwy\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas={{page}}. strona\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title={{page}}. strona\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura {{page}}. strony\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Znajdź\r\nfind_input.placeholder=Znajdź w dokumencie…\r\nfind_previous.title=Znajdź poprzednie wystąpienie tekstu\r\nfind_previous_label=Poprzednie\r\nfind_next.title=Znajdź następne wystąpienie tekstu\r\nfind_next_label=Następne\r\nfind_highlight=Wyróżnianie wszystkich\r\nfind_match_case_label=Rozróżnianie wielkości liter\r\nfind_entire_word_label=Całe słowa\r\nfind_reached_top=Początek dokumentu. Wyszukiwanie od końca.\r\nfind_reached_bottom=Koniec dokumentu. Wyszukiwanie od początku.\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]=Pierwsze z {{total}} trafień\r\nfind_match_count[two]=Drugie z {{total}} trafień\r\nfind_match_count[few]={{current}}. z {{total}} trafień\r\nfind_match_count[many]={{current}}. z {{total}} trafień\r\nfind_match_count[other]={{current}}. z {{total}} trafień\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Brak trafień.\r\nfind_match_count_limit[one]=Więcej niż jedno trafienie.\r\nfind_match_count_limit[two]=Więcej niż dwa trafienia.\r\nfind_match_count_limit[few]=Więcej niż {{limit}} trafienia.\r\nfind_match_count_limit[many]=Więcej niż {{limit}} trafień.\r\nfind_match_count_limit[other]=Więcej niż {{limit}} trafień.\r\nfind_not_found=Nie znaleziono tekstu\r\n\r\n# Error panel labels\r\nerror_more_info=Więcej informacji\r\nerror_less_info=Mniej informacji\r\nerror_close=Zamknij\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (kompilacja: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Komunikat: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stos: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Plik: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Wiersz: {{line}}\r\nrendering_error=Podczas renderowania strony wystąpił błąd.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Szerokość strony\r\npage_scale_fit=Dopasowanie strony\r\npage_scale_auto=Skala automatyczna\r\npage_scale_actual=Rozmiar oryginalny\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Błąd\r\nloading_error=Podczas wczytywania dokumentu PDF wystąpił błąd.\r\ninvalid_file_error=Nieprawidłowy lub uszkodzony plik PDF.\r\nmissing_file_error=Brak pliku PDF.\r\nunexpected_response_error=Nieoczekiwana odpowiedź serwera.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Adnotacja: {{type}}]\r\npassword_label=Wprowadź hasło, aby otworzyć ten dokument PDF.\r\npassword_invalid=Nieprawidłowe hasło. Proszę spróbować ponownie.\r\npassword_ok=OK\r\npassword_cancel=Anuluj\r\n\r\nprinting_not_supported=Ostrzeżenie: drukowanie nie jest w pełni obsługiwane przez tę przeglądarkę.\r\nprinting_not_ready=Ostrzeżenie: dokument PDF nie jest całkowicie wczytany, więc nie można go wydrukować.\r\nweb_fonts_disabled=Czcionki sieciowe są wyłączone: nie można użyć osadzonych czcionek PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/pt-BR/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Página anterior\r\nprevious_label=Anterior\r\nnext.title=Próxima página\r\nnext_label=Próxima\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Página\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=de {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} de {{pagesCount}})\r\n\r\nzoom_out.title=Reduzir\r\nzoom_out_label=Reduzir\r\nzoom_in.title=Ampliar\r\nzoom_in_label=Ampliar\r\nzoom.title=Zoom\r\npresentation_mode.title=Alternar para o modo de apresentação\r\npresentation_mode_label=Modo de apresentação\r\nopen_file.title=Abrir arquivo\r\nopen_file_label=Abrir\r\nprint.title=Imprimir\r\nprint_label=Imprimir\r\ndownload.title=Baixar\r\ndownload_label=Baixar\r\nbookmark.title=Visão atual (copiar ou abrir em nova janela)\r\nbookmark_label=Visualização atual\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Ferramentas\r\ntools_label=Ferramentas\r\nfirst_page.title=Ir para a primeira página\r\nfirst_page.label=Ir para a primeira página\r\nfirst_page_label=Ir para a primeira página\r\nlast_page.title=Ir para a última página\r\nlast_page.label=Ir para a última página\r\nlast_page_label=Ir para a última página\r\npage_rotate_cw.title=Girar no sentido horário\r\npage_rotate_cw.label=Girar no sentido horário\r\npage_rotate_cw_label=Girar no sentido horário\r\npage_rotate_ccw.title=Girar no sentido anti-horário\r\npage_rotate_ccw.label=Girar no sentido anti-horário\r\npage_rotate_ccw_label=Girar no sentido anti-horário\r\n\r\ncursor_text_select_tool.title=Ativar a ferramenta de seleção de texto\r\ncursor_text_select_tool_label=Ferramenta de seleção de texto\r\ncursor_hand_tool.title=Ativar ferramenta de deslocamento\r\ncursor_hand_tool_label=Ferramenta de deslocamento\r\n\r\nscroll_vertical.title=Usar deslocamento vertical\r\nscroll_vertical_label=Deslocamento vertical\r\nscroll_horizontal.title=Usar deslocamento horizontal\r\nscroll_horizontal_label=Deslocamento horizontal\r\nscroll_wrapped.title=Usar deslocamento contido\r\nscroll_wrapped_label=Deslocamento contido\r\n\r\nspread_none.title=Não reagrupar páginas\r\nspread_none_label=Não estender\r\nspread_odd.title=Agrupar páginas começando em páginas com números ímpares\r\nspread_odd_label=Estender ímpares\r\nspread_even.title=Agrupar páginas começando em páginas com números pares\r\nspread_even_label=Estender pares\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Propriedades do documento…\r\ndocument_properties_label=Propriedades do documento…\r\ndocument_properties_file_name=Nome do arquivo:\r\ndocument_properties_file_size=Tamanho do arquivo:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Título:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Assunto:\r\ndocument_properties_keywords=Palavras-chave:\r\ndocument_properties_creation_date=Data da criação:\r\ndocument_properties_modification_date=Data da modificação:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Criação:\r\ndocument_properties_producer=Criador do PDF:\r\ndocument_properties_version=Versão do PDF:\r\ndocument_properties_page_count=Número de páginas:\r\ndocument_properties_page_size=Tamanho da página:\r\ndocument_properties_page_size_unit_inches=pol.\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=retrato\r\ndocument_properties_page_size_orientation_landscape=paisagem\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Carta\r\ndocument_properties_page_size_name_legal=Jurídico\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Exibição web rápida:\r\ndocument_properties_linearized_yes=Sim\r\ndocument_properties_linearized_no=Não\r\ndocument_properties_close=Fechar\r\n\r\nprint_progress_message=Preparando documento para impressão…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}} %\r\nprint_progress_close=Cancelar\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Exibir/ocultar painel\r\ntoggle_sidebar_notification.title=Exibir/ocultar o painel (documento contém estrutura/anexos)\r\ntoggle_sidebar_notification2.title=Exibir/ocultar o painel (documento contém estrutura/anexos/camadas)\r\ntoggle_sidebar_label=Exibir/ocultar painel\r\ndocument_outline.title=Mostrar a estrutura do documento (dê um duplo-clique para expandir/recolher todos os itens)\r\ndocument_outline_label=Estrutura do documento\r\nattachments.title=Mostrar anexos\r\nattachments_label=Anexos\r\nlayers.title=Exibir camadas (duplo-clique para redefinir todas as camadas ao estado predefinido)\r\nlayers_label=Camadas\r\nthumbs.title=Mostrar miniaturas\r\nthumbs_label=Miniaturas\r\ncurrent_outline_item.title=Encontrar item atual da estrutura\r\ncurrent_outline_item_label=Item atual da estrutura\r\nfindbar.title=Procurar no documento\r\nfindbar_label=Procurar\r\n\r\nadditional_layers=Camadas adicionais\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Página {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Página {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura da página {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Procurar\r\nfind_input.placeholder=Procurar no documento…\r\nfind_previous.title=Procurar a ocorrência anterior da frase\r\nfind_previous_label=Anterior\r\nfind_next.title=Procurar a próxima ocorrência da frase\r\nfind_next_label=Próxima\r\nfind_highlight=Destacar tudo\r\nfind_match_case_label=Diferenciar maiúsculas/minúsculas\r\nfind_entire_word_label=Palavras completas\r\nfind_reached_top=Início do documento alcançado, continuando do fim\r\nfind_reached_bottom=Fim do documento alcançado, continuando do início\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} de {{total}} ocorrência\r\nfind_match_count[two]={{current}} de {{total}} ocorrências\r\nfind_match_count[few]={{current}} de {{total}} ocorrências\r\nfind_match_count[many]={{current}} de {{total}} ocorrências\r\nfind_match_count[other]={{current}} de {{total}} ocorrências\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Mais de {{limit}} ocorrências\r\nfind_match_count_limit[one]=Mais de {{limit}} ocorrência\r\nfind_match_count_limit[two]=Mais de {{limit}} ocorrências\r\nfind_match_count_limit[few]=Mais de {{limit}} ocorrências\r\nfind_match_count_limit[many]=Mais de {{limit}} ocorrências\r\nfind_match_count_limit[other]=Mais de {{limit}} ocorrências\r\nfind_not_found=Frase não encontrada\r\n\r\n# Error panel labels\r\nerror_more_info=Mais informações\r\nerror_less_info=Menos informações\r\nerror_close=Fechar\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (compilação: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mensagem: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Pilha: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Arquivo: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linha: {{line}}\r\nrendering_error=Ocorreu um erro ao renderizar a página.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Largura da página\r\npage_scale_fit=Ajustar à janela\r\npage_scale_auto=Zoom automático\r\npage_scale_actual=Tamanho real\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Erro\r\nloading_error=Ocorreu um erro ao carregar o PDF.\r\ninvalid_file_error=Arquivo PDF corrompido ou inválido.\r\nmissing_file_error=Arquivo PDF ausente.\r\nunexpected_response_error=Resposta inesperada do servidor.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anotação {{type}}]\r\npassword_label=Forneça a senha para abrir este arquivo PDF.\r\npassword_invalid=Senha inválida. Tente novamente.\r\npassword_ok=OK\r\npassword_cancel=Cancelar\r\n\r\nprinting_not_supported=Aviso: a impressão não é totalmente suportada neste navegador.\r\nprinting_not_ready=Aviso: o PDF não está totalmente carregado para impressão.\r\nweb_fonts_disabled=As fontes web estão desativadas: não foi possível usar fontes incorporadas do PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/pt-PT/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Página anterior\r\nprevious_label=Anterior\r\nnext.title=Página seguinte\r\nnext_label=Seguinte\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Página\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=de {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} de {{pagesCount}})\r\n\r\nzoom_out.title=Reduzir\r\nzoom_out_label=Reduzir\r\nzoom_in.title=Ampliar\r\nzoom_in_label=Ampliar\r\nzoom.title=Zoom\r\npresentation_mode.title=Trocar para o modo de apresentação\r\npresentation_mode_label=Modo de apresentação\r\nopen_file.title=Abrir ficheiro\r\nopen_file_label=Abrir\r\nprint.title=Imprimir\r\nprint_label=Imprimir\r\ndownload.title=Transferir\r\ndownload_label=Transferir\r\nbookmark.title=Vista atual (copiar ou abrir numa nova janela)\r\nbookmark_label=Visão atual\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Ferramentas\r\ntools_label=Ferramentas\r\nfirst_page.title=Ir para a primeira página\r\nfirst_page.label=Ir para a primeira página\r\nfirst_page_label=Ir para a primeira página\r\nlast_page.title=Ir para a última página\r\nlast_page.label=Ir para a última página\r\nlast_page_label=Ir para a última página\r\npage_rotate_cw.title=Rodar à direita\r\npage_rotate_cw.label=Rodar à direita\r\npage_rotate_cw_label=Rodar à direita\r\npage_rotate_ccw.title=Rodar à esquerda\r\npage_rotate_ccw.label=Rodar à esquerda\r\npage_rotate_ccw_label=Rodar à esquerda\r\n\r\ncursor_text_select_tool.title=Ativar ferramenta de seleção de texto\r\ncursor_text_select_tool_label=Ferramenta de seleção de texto\r\ncursor_hand_tool.title=Ativar ferramenta de mão\r\ncursor_hand_tool_label=Ferramenta de mão\r\n\r\nscroll_vertical.title=Utilizar deslocação vertical\r\nscroll_vertical_label=Deslocação vertical\r\nscroll_horizontal.title=Utilizar deslocação horizontal\r\nscroll_horizontal_label=Deslocação horizontal\r\nscroll_wrapped.title=Utilizar deslocação encapsulada\r\nscroll_wrapped_label=Deslocação encapsulada\r\n\r\nspread_none.title=Não juntar páginas dispersas\r\nspread_none_label=Sem spreads\r\nspread_odd.title=Juntar páginas dispersas a partir de páginas com números ímpares\r\nspread_odd_label=Spreads ímpares\r\nspread_even.title=Juntar páginas dispersas a partir de páginas com números pares\r\nspread_even_label=Spreads pares\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Propriedades do documento…\r\ndocument_properties_label=Propriedades do documento…\r\ndocument_properties_file_name=Nome do ficheiro:\r\ndocument_properties_file_size=Tamanho do ficheiro:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Título:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Assunto:\r\ndocument_properties_keywords=Palavras-chave:\r\ndocument_properties_creation_date=Data de criação:\r\ndocument_properties_modification_date=Data de modificação:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Criador:\r\ndocument_properties_producer=Produtor de PDF:\r\ndocument_properties_version=Versão do PDF:\r\ndocument_properties_page_count=N.º de páginas:\r\ndocument_properties_page_size=Tamanho da página:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=retrato\r\ndocument_properties_page_size_orientation_landscape=paisagem\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Carta\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Vista rápida web:\r\ndocument_properties_linearized_yes=Sim\r\ndocument_properties_linearized_no=Não\r\ndocument_properties_close=Fechar\r\n\r\nprint_progress_message=A preparar o documento para impressão…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Cancelar\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Alternar barra lateral\r\ntoggle_sidebar_notification.title=Alternar barra lateral (documento contém contorno/anexos)\r\ntoggle_sidebar_notification2.title=Alternar barra lateral (o documento contém contornos/anexos/camadas)\r\ntoggle_sidebar_label=Alternar barra lateral\r\ndocument_outline.title=Mostrar esquema do documento (duplo clique para expandir/colapsar todos os itens)\r\ndocument_outline_label=Esquema do documento\r\nattachments.title=Mostrar anexos\r\nattachments_label=Anexos\r\nlayers.title=Mostrar camadas (clique duas vezes para repor todas as camadas para o estado predefinido)\r\nlayers_label=Camadas\r\nthumbs.title=Mostrar miniaturas\r\nthumbs_label=Miniaturas\r\ncurrent_outline_item.title=Encontrar o item atualmente destacado\r\ncurrent_outline_item_label=Item atualmente destacado\r\nfindbar.title=Localizar em documento\r\nfindbar_label=Localizar\r\n\r\nadditional_layers=Camadas adicionais\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Página {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Página {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura da página {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Localizar\r\nfind_input.placeholder=Localizar em documento…\r\nfind_previous.title=Localizar ocorrência anterior da frase\r\nfind_previous_label=Anterior\r\nfind_next.title=Localizar ocorrência seguinte da frase\r\nfind_next_label=Seguinte\r\nfind_highlight=Destacar tudo\r\nfind_match_case_label=Correspondência\r\nfind_entire_word_label=Palavras completas\r\nfind_reached_top=Topo do documento atingido, a continuar a partir do fundo\r\nfind_reached_bottom=Fim do documento atingido, a continuar a partir do topo\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} de {{total}} correspondência\r\nfind_match_count[two]={{current}} de {{total}} correspondências\r\nfind_match_count[few]={{current}} de {{total}} correspondências\r\nfind_match_count[many]={{current}} de {{total}} correspondências\r\nfind_match_count[other]={{current}} de {{total}} correspondências\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Mais de {{limit}} correspondências\r\nfind_match_count_limit[one]=Mais de {{limit}} correspondência\r\nfind_match_count_limit[two]=Mais de {{limit}} correspondências\r\nfind_match_count_limit[few]=Mais de {{limit}} correspondências\r\nfind_match_count_limit[many]=Mais de {{limit}} correspondências\r\nfind_match_count_limit[other]=Mais de {{limit}} correspondências\r\nfind_not_found=Frase não encontrada\r\n\r\n# Error panel labels\r\nerror_more_info=Mais informação\r\nerror_less_info=Menos informação\r\nerror_close=Fechar\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (compilação: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mensagem: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Ficheiro: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linha: {{line}}\r\nrendering_error=Ocorreu um erro ao processar a página.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Ajustar à largura\r\npage_scale_fit=Ajustar à página\r\npage_scale_auto=Zoom automático\r\npage_scale_actual=Tamanho real\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Erro\r\nloading_error=Ocorreu um erro ao carregar o PDF.\r\ninvalid_file_error=Ficheiro PDF inválido ou danificado.\r\nmissing_file_error=Ficheiro PDF inexistente.\r\nunexpected_response_error=Resposta inesperada do servidor.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anotação {{type}}]\r\npassword_label=Introduza a palavra-passe para abrir este ficheiro PDF.\r\npassword_invalid=Palavra-passe inválida. Por favor, tente novamente.\r\npassword_ok=OK\r\npassword_cancel=Cancelar\r\n\r\nprinting_not_supported=Aviso: a impressão não é totalmente suportada por este navegador.\r\nprinting_not_ready=Aviso: o PDF ainda não está totalmente carregado.\r\nweb_fonts_disabled=Os tipos de letra web estão desativados: não é possível utilizar os tipos de letra PDF embutidos.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/rm/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Pagina precedenta\r\nprevious_label=Enavos\r\nnext.title=Proxima pagina\r\nnext_label=Enavant\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Pagina\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=da {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} da {{pagesCount}})\r\n\r\nzoom_out.title=Empitschnir\r\nzoom_out_label=Empitschnir\r\nzoom_in.title=Engrondir\r\nzoom_in_label=Engrondir\r\nzoom.title=Zoom\r\npresentation_mode.title=Midar en il modus da preschentaziun\r\npresentation_mode_label=Modus da preschentaziun\r\nopen_file.title=Avrir datoteca\r\nopen_file_label=Avrir\r\nprint.title=Stampar\r\nprint_label=Stampar\r\ndownload.title=Telechargiar\r\ndownload_label=Telechargiar\r\nbookmark.title=Vista actuala (copiar u avrir en ina nova fanestra)\r\nbookmark_label=Vista actuala\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Utensils\r\ntools_label=Utensils\r\nfirst_page.title=Siglir a l'emprima pagina\r\nfirst_page.label=Siglir a l'emprima pagina\r\nfirst_page_label=Siglir a l'emprima pagina\r\nlast_page.title=Siglir a la davosa pagina\r\nlast_page.label=Siglir a la davosa pagina\r\nlast_page_label=Siglir a la davosa pagina\r\npage_rotate_cw.title=Rotar en direcziun da l'ura\r\npage_rotate_cw.label=Rotar en direcziun da l'ura\r\npage_rotate_cw_label=Rotar en direcziun da l'ura\r\npage_rotate_ccw.title=Rotar en direcziun cuntraria a l'ura\r\npage_rotate_ccw.label=Rotar en direcziun cuntraria a l'ura\r\npage_rotate_ccw_label=Rotar en direcziun cuntraria a l'ura\r\n\r\ncursor_text_select_tool.title=Activar l'utensil per selecziunar text\r\ncursor_text_select_tool_label=Utensil per selecziunar text\r\ncursor_hand_tool.title=Activar l'utensil da maun\r\ncursor_hand_tool_label=Utensil da maun\r\n\r\nscroll_vertical.title=Utilisar il defilar vertical\r\nscroll_vertical_label=Defilar vertical\r\nscroll_horizontal.title=Utilisar il defilar orizontal\r\nscroll_horizontal_label=Defilar orizontal\r\nscroll_wrapped.title=Utilisar il defilar en colonnas\r\nscroll_wrapped_label=Defilar en colonnas\r\n\r\nspread_none.title=Betg parallelisar las paginas\r\nspread_none_label=Betg parallel\r\nspread_odd.title=Parallelisar las paginas cun cumenzar cun paginas spèras\r\nspread_odd_label=Parallel spèr\r\nspread_even.title=Parallelisar las paginas cun cumenzar cun paginas pèras\r\nspread_even_label=Parallel pèr\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Caracteristicas dal document…\r\ndocument_properties_label=Caracteristicas dal document…\r\ndocument_properties_file_name=Num da la datoteca:\r\ndocument_properties_file_size=Grondezza da la datoteca:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Titel:\r\ndocument_properties_author=Autur:\r\ndocument_properties_subject=Tema:\r\ndocument_properties_keywords=Chavazzins:\r\ndocument_properties_creation_date=Data da creaziun:\r\ndocument_properties_modification_date=Data da modificaziun:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}} {{time}}\r\ndocument_properties_creator=Creà da:\r\ndocument_properties_producer=Creà il PDF cun:\r\ndocument_properties_version=Versiun da PDF:\r\ndocument_properties_page_count=Dumber da paginas:\r\ndocument_properties_page_size=Grondezza da la pagina:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=vertical\r\ndocument_properties_page_size_orientation_landscape=orizontal\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Fast Web View:\r\ndocument_properties_linearized_yes=Gea\r\ndocument_properties_linearized_no=Na\r\ndocument_properties_close=Serrar\r\n\r\nprint_progress_message=Preparar il document per stampar…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Interrumper\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Activar/deactivar la trav laterala\r\ntoggle_sidebar_notification.title=Activar/deactivar la trav laterala (structura dal document/agiuntas)\r\ntoggle_sidebar_notification2.title=Activar/deactivar la trav laterala (il document cuntegna structura dal document/agiuntas/nivels)\r\ntoggle_sidebar_label=Activar/deactivar la trav laterala\r\ndocument_outline.title=Mussar la structura dal document (cliccar duas giadas per extender/cumprimer tut ils elements)\r\ndocument_outline_label=Structura dal document\r\nattachments.title=Mussar agiuntas\r\nattachments_label=Agiuntas\r\nlayers.title=Mussar ils nivels (cliccar dubel per restaurar il stadi da standard da tut ils nivels)\r\nlayers_label=Nivels\r\nthumbs.title=Mussar las miniaturas\r\nthumbs_label=Miniaturas\r\nfindbar.title=Tschertgar en il document\r\nfindbar_label=Tschertgar\r\n\r\nadditional_layers=Nivels supplementars\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Pagina {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Pagina {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura da la pagina {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Tschertgar\r\nfind_input.placeholder=Tschertgar en il document…\r\nfind_previous.title=Tschertgar la posiziun precedenta da l'expressiun\r\nfind_previous_label=Enavos\r\nfind_next.title=Tschertgar la proxima posiziun da l'expressiun\r\nfind_next_label=Enavant\r\nfind_highlight=Relevar tuts\r\nfind_match_case_label=Resguardar maiusclas/minusclas\r\nfind_entire_word_label=Pleds entirs\r\nfind_reached_top=Il cumenzament dal document è cuntanschì, la tschertga cuntinuescha a la fin dal document\r\nfind_reached_bottom=La fin dal document è cuntanschì, la tschertga cuntinuescha al cumenzament dal document\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} dad {{total}} correspundenza\r\nfind_match_count[two]={{current}} da {{total}} correspundenzas\r\nfind_match_count[few]={{current}} da {{total}} correspundenzas\r\nfind_match_count[many]={{current}} da {{total}} correspundenzas\r\nfind_match_count[other]={{current}} da {{total}} correspundenzas\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Dapli che {{limit}} correspundenzas\r\nfind_match_count_limit[one]=Dapli che {{limit}} correspundenza\r\nfind_match_count_limit[two]=Dapli che {{limit}} correspundenzas\r\nfind_match_count_limit[few]=Dapli che {{limit}} correspundenzas\r\nfind_match_count_limit[many]=Dapli che {{limit}} correspundenzas\r\nfind_match_count_limit[other]=Dapli che {{limit}} correspundenzas\r\nfind_not_found=Impussibel da chattar l'expressiun\r\n\r\n# Error panel labels\r\nerror_more_info=Dapli infurmaziuns\r\nerror_less_info=Damain infurmaziuns\r\nerror_close=Serrar\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Messadi: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Datoteca: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Lingia: {{line}}\r\nrendering_error=Ina errur è cumparida cun visualisar questa pagina.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Ladezza da la pagina\r\npage_scale_fit=Entira pagina\r\npage_scale_auto=Zoom automatic\r\npage_scale_actual=Grondezza actuala\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Errur\r\nloading_error=Ina errur è cumparida cun chargiar il PDF.\r\ninvalid_file_error=Datoteca PDF nunvalida u donnegiada.\r\nmissing_file_error=Datoteca PDF manconta.\r\nunexpected_response_error=Resposta nunspetgada dal server.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Annotaziun da {{type}}]\r\npassword_label=Endatescha il pled-clav per avrir questa datoteca da PDF.\r\npassword_invalid=Pled-clav nunvalid. Emprova anc ina giada.\r\npassword_ok=OK\r\npassword_cancel=Interrumper\r\n\r\nprinting_not_supported=Attenziun: Il stampar na funcziunescha anc betg dal tut en quest navigatur.\r\nprinting_not_ready=Attenziun: Il PDF n'è betg chargià cumplettamain per stampar.\r\nweb_fonts_disabled=Scrittiras dal web èn deactivadas: impussibel dad utilisar las scrittiras integradas en il PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ro/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Pagina precedentă\r\nprevious_label=Înapoi\r\nnext.title=Pagina următoare\r\nnext_label=Înainte\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Pagina\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=din {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} din {{pagesCount}})\r\n\r\nzoom_out.title=Micșorează\r\nzoom_out_label=Micșorează\r\nzoom_in.title=Mărește\r\nzoom_in_label=Mărește\r\nzoom.title=Zoom\r\npresentation_mode.title=Comută la modul de prezentare\r\npresentation_mode_label=Mod de prezentare\r\nopen_file.title=Deschide un fișier\r\nopen_file_label=Deschide\r\nprint.title=Tipărește\r\nprint_label=Tipărește\r\ndownload.title=Descarcă\r\ndownload_label=Descarcă\r\nbookmark.title=Vizualizare actuală (copiază sau deschide într-o fereastră nouă)\r\nbookmark_label=Vizualizare actuală\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Instrumente\r\ntools_label=Instrumente\r\nfirst_page.title=Mergi la prima pagină\r\nfirst_page.label=Mergi la prima pagină\r\nfirst_page_label=Mergi la prima pagină\r\nlast_page.title=Mergi la ultima pagină\r\nlast_page.label=Mergi la ultima pagină\r\nlast_page_label=Mergi la ultima pagină\r\npage_rotate_cw.title=Rotește în sensul acelor de ceas\r\npage_rotate_cw.label=Rotește în sensul acelor de ceas\r\npage_rotate_cw_label=Rotește în sensul acelor de ceas\r\npage_rotate_ccw.title=Rotește în sens invers al acelor de ceas\r\npage_rotate_ccw.label=Rotește în sens invers al acelor de ceas\r\npage_rotate_ccw_label=Rotește în sens invers al acelor de ceas\r\n\r\ncursor_text_select_tool.title=Activează instrumentul de selecție a textului\r\ncursor_text_select_tool_label=Instrumentul de selecție a textului\r\ncursor_hand_tool.title=Activează instrumentul mână\r\ncursor_hand_tool_label=Unealta mână\r\n\r\nscroll_vertical.title=Folosește derularea verticală\r\nscroll_vertical_label=Derulare verticală\r\nscroll_horizontal.title=Folosește derularea orizontală\r\nscroll_horizontal_label=Derulare orizontală\r\nscroll_wrapped.title=Folosește derularea încadrată\r\nscroll_wrapped_label=Derulare încadrată\r\n\r\nspread_none.title=Nu uni paginile broșate\r\nspread_none_label=Fără pagini broșate\r\nspread_odd.title=Unește paginile broșate începând cu cele impare\r\nspread_odd_label=Broșare pagini impare\r\nspread_even.title=Unește paginile broșate începând cu cele pare\r\nspread_even_label=Broșare pagini pare\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Proprietățile documentului…\r\ndocument_properties_label=Proprietățile documentului…\r\ndocument_properties_file_name=Numele fișierului:\r\ndocument_properties_file_size=Mărimea fișierului:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} byți)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} byți)\r\ndocument_properties_title=Titlu:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Subiect:\r\ndocument_properties_keywords=Cuvinte cheie:\r\ndocument_properties_creation_date=Data creării:\r\ndocument_properties_modification_date=Data modificării:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Autor:\r\ndocument_properties_producer=Producător PDF:\r\ndocument_properties_version=Versiune PDF:\r\ndocument_properties_page_count=Număr de pagini:\r\ndocument_properties_page_size=Mărimea paginii:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=verticală\r\ndocument_properties_page_size_orientation_landscape=orizontală\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Literă\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Vizualizare web rapidă:\r\ndocument_properties_linearized_yes=Da\r\ndocument_properties_linearized_no=Nu\r\ndocument_properties_close=Închide\r\n\r\nprint_progress_message=Se pregătește documentul pentru tipărire…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Renunță\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Comută bara laterală\r\ntoggle_sidebar_notification.title=Comută bara laterală (documentul conține schițe/atașamente)\r\ntoggle_sidebar_label=Comută bara laterală\r\ndocument_outline.title=Afișează schița documentului (dublu-clic pentru a extinde/restrânge toate elementele)\r\ndocument_outline_label=Schița documentului\r\nattachments.title=Afișează atașamentele\r\nattachments_label=Atașamente\r\nthumbs.title=Afișează miniaturi\r\nthumbs_label=Miniaturi\r\nfindbar.title=Caută în document\r\nfindbar_label=Caută\r\n\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Pagina {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Pagina {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura paginii {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Caută\r\nfind_input.placeholder=Caută în document…\r\nfind_previous.title=Mergi la apariția anterioară a textului\r\nfind_previous_label=Înapoi\r\nfind_next.title=Mergi la apariția următoare a textului\r\nfind_next_label=Înainte\r\nfind_highlight=Evidențiază toate aparițiile\r\nfind_match_case_label=Ține cont de majuscule și minuscule\r\nfind_entire_word_label=Cuvinte întregi\r\nfind_reached_top=Am ajuns la începutul documentului, continuă de la sfârșit\r\nfind_reached_bottom=Am ajuns la sfârșitul documentului, continuă de la început\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} din {{total}} rezultat\r\nfind_match_count[two]={{current}} din {{total}} rezultate\r\nfind_match_count[few]={{current}} din {{total}} rezultate\r\nfind_match_count[many]={{current}} din {{total}} de rezultate\r\nfind_match_count[other]={{current}} din {{total}} de rezultate\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Peste {{limit}} rezultate\r\nfind_match_count_limit[one]=Peste {{limit}} rezultat\r\nfind_match_count_limit[two]=Peste {{limit}} rezultate\r\nfind_match_count_limit[few]=Peste {{limit}} rezultate\r\nfind_match_count_limit[many]=Peste {{limit}} de rezultate\r\nfind_match_count_limit[other]=Peste {{limit}} de rezultate\r\nfind_not_found=Nu s-a găsit textul\r\n\r\n# Error panel labels\r\nerror_more_info=Mai multe informații\r\nerror_less_info=Mai puține informații\r\nerror_close=Închide\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (versiunea compilată: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mesaj: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stivă: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fișier: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Rând: {{line}}\r\nrendering_error=A intervenit o eroare la randarea paginii.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Lățime pagină\r\npage_scale_fit=Potrivire la pagină\r\npage_scale_auto=Zoom automat\r\npage_scale_actual=Mărime reală\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Eroare\r\nloading_error=A intervenit o eroare la încărcarea PDF-ului.\r\ninvalid_file_error=Fișier PDF nevalid sau corupt.\r\nmissing_file_error=Fișier PDF lipsă.\r\nunexpected_response_error=Răspuns neașteptat de la server.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Adnotare {{type}}]\r\npassword_label=Introdu parola pentru a deschide acest fișier PDF.\r\npassword_invalid=Parolă nevalidă. Te rugăm să încerci din nou.\r\npassword_ok=Ok\r\npassword_cancel=Renunță\r\n\r\nprinting_not_supported=Avertisment: Tipărirea nu este suportată în totalitate de acest browser.\r\nprinting_not_ready=Avertisment: PDF-ul nu este încărcat complet pentru tipărire.\r\nweb_fonts_disabled=Fonturile web sunt dezactivate: nu se pot folosi fonturile PDF încorporate.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ru/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Предыдущая страница\r\nprevious_label=Предыдущая\r\nnext.title=Следующая страница\r\nnext_label=Следующая\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Страница\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=из {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} из {{pagesCount}})\r\n\r\nzoom_out.title=Уменьшить\r\nzoom_out_label=Уменьшить\r\nzoom_in.title=Увеличить\r\nzoom_in_label=Увеличить\r\nzoom.title=Масштаб\r\npresentation_mode.title=Перейти в режим презентации\r\npresentation_mode_label=Режим презентации\r\nopen_file.title=Открыть файл\r\nopen_file_label=Открыть\r\nprint.title=Печать\r\nprint_label=Печать\r\ndownload.title=Загрузить\r\ndownload_label=Загрузить\r\nbookmark.title=Ссылка на текущий вид (скопировать или открыть в новом окне)\r\nbookmark_label=Текущий вид\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Инструменты\r\ntools_label=Инструменты\r\nfirst_page.title=Перейти на первую страницу\r\nfirst_page.label=Перейти на первую страницу\r\nfirst_page_label=Перейти на первую страницу\r\nlast_page.title=Перейти на последнюю страницу\r\nlast_page.label=Перейти на последнюю страницу\r\nlast_page_label=Перейти на последнюю страницу\r\npage_rotate_cw.title=Повернуть по часовой стрелке\r\npage_rotate_cw.label=Повернуть по часовой стрелке\r\npage_rotate_cw_label=Повернуть по часовой стрелке\r\npage_rotate_ccw.title=Повернуть против часовой стрелки\r\npage_rotate_ccw.label=Повернуть против часовой стрелки\r\npage_rotate_ccw_label=Повернуть против часовой стрелки\r\n\r\ncursor_text_select_tool.title=Включить Инструмент «Выделение текста»\r\ncursor_text_select_tool_label=Инструмент «Выделение текста»\r\ncursor_hand_tool.title=Включить Инструмент «Рука»\r\ncursor_hand_tool_label=Инструмент «Рука»\r\n\r\nscroll_vertical.title=Использовать вертикальную прокрутку\r\nscroll_vertical_label=Вертикальная прокрутка\r\nscroll_horizontal.title=Использовать горизонтальную прокрутку\r\nscroll_horizontal_label=Горизонтальная прокрутка\r\nscroll_wrapped.title=Использовать масштабируемую прокрутку\r\nscroll_wrapped_label=Масштабируемая прокрутка\r\n\r\nspread_none.title=Не использовать режим разворотов страниц\r\nspread_none_label=Без разворотов страниц\r\nspread_odd.title=Развороты начинаются с нечётных номеров страниц\r\nspread_odd_label=Нечётные страницы слева\r\nspread_even.title=Развороты начинаются с чётных номеров страниц\r\nspread_even_label=Чётные страницы слева\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Свойства документа…\r\ndocument_properties_label=Свойства документа…\r\ndocument_properties_file_name=Имя файла:\r\ndocument_properties_file_size=Размер файла:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} КБ ({{size_b}} байт)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} МБ ({{size_b}} байт)\r\ndocument_properties_title=Заголовок:\r\ndocument_properties_author=Автор:\r\ndocument_properties_subject=Тема:\r\ndocument_properties_keywords=Ключевые слова:\r\ndocument_properties_creation_date=Дата создания:\r\ndocument_properties_modification_date=Дата изменения:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Приложение:\r\ndocument_properties_producer=Производитель PDF:\r\ndocument_properties_version=Версия PDF:\r\ndocument_properties_page_count=Число страниц:\r\ndocument_properties_page_size=Размер страницы:\r\ndocument_properties_page_size_unit_inches=дюймов\r\ndocument_properties_page_size_unit_millimeters=мм\r\ndocument_properties_page_size_orientation_portrait=книжная\r\ndocument_properties_page_size_orientation_landscape=альбомная\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Быстрый просмотр в Web:\r\ndocument_properties_linearized_yes=Да\r\ndocument_properties_linearized_no=Нет\r\ndocument_properties_close=Закрыть\r\n\r\nprint_progress_message=Подготовка документа к печати…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Отмена\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Показать/скрыть боковую панель\r\ntoggle_sidebar_notification.title=Показать/скрыть боковую панель (документ имеет содержание/вложения)\r\ntoggle_sidebar_notification2.title=Показать/скрыть боковую панель (документ имеет содержание/вложения/слои)\r\ntoggle_sidebar_label=Показать/скрыть боковую панель\r\ndocument_outline.title=Показать содержание документа (двойной щелчок, чтобы развернуть/свернуть все элементы)\r\ndocument_outline_label=Содержание документа\r\nattachments.title=Показать вложения\r\nattachments_label=Вложения\r\nlayers.title=Показать слои (дважды щёлкните, чтобы сбросить все слои к состоянию по умолчанию)\r\nlayers_label=Слои\r\nthumbs.title=Показать миниатюры\r\nthumbs_label=Миниатюры\r\ncurrent_outline_item.title=Найти текущий элемент структуры\r\ncurrent_outline_item_label=Текущий элемент структуры\r\nfindbar.title=Найти в документе\r\nfindbar_label=Найти\r\n\r\nadditional_layers=Дополнительные слои\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Страница {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Страница {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Миниатюра страницы {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Найти\r\nfind_input.placeholder=Найти в документе…\r\nfind_previous.title=Найти предыдущее вхождение фразы в текст\r\nfind_previous_label=Назад\r\nfind_next.title=Найти следующее вхождение фразы в текст\r\nfind_next_label=Далее\r\nfind_highlight=Подсветить все\r\nfind_match_case_label=С учётом регистра\r\nfind_entire_word_label=Слова целиком\r\nfind_reached_top=Достигнут верх документа, продолжено снизу\r\nfind_reached_bottom=Достигнут конец документа, продолжено сверху\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} из {{total}} совпадения\r\nfind_match_count[two]={{current}} из {{total}} совпадений\r\nfind_match_count[few]={{current}} из {{total}} совпадений\r\nfind_match_count[many]={{current}} из {{total}} совпадений\r\nfind_match_count[other]={{current}} из {{total}} совпадений\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Более {{limit}} совпадений\r\nfind_match_count_limit[one]=Более {{limit}} совпадения\r\nfind_match_count_limit[two]=Более {{limit}} совпадений\r\nfind_match_count_limit[few]=Более {{limit}} совпадений\r\nfind_match_count_limit[many]=Более {{limit}} совпадений\r\nfind_match_count_limit[other]=Более {{limit}} совпадений\r\nfind_not_found=Фраза не найдена\r\n\r\n# Error panel labels\r\nerror_more_info=Детали\r\nerror_less_info=Скрыть детали\r\nerror_close=Закрыть\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (сборка: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Сообщение: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Стeк: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Файл: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Строка: {{line}}\r\nrendering_error=При создании страницы произошла ошибка.\r\n\r\n# Predefined zoom values\r\npage_scale_width=По ширине страницы\r\npage_scale_fit=По размеру страницы\r\npage_scale_auto=Автоматически\r\npage_scale_actual=Реальный размер\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Ошибка\r\nloading_error=При загрузке PDF произошла ошибка.\r\ninvalid_file_error=Некорректный или повреждённый PDF-файл.\r\nmissing_file_error=PDF-файл отсутствует.\r\nunexpected_response_error=Неожиданный ответ сервера.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Аннотация {{type}}]\r\npassword_label=Введите пароль, чтобы открыть этот PDF-файл.\r\npassword_invalid=Неверный пароль. Пожалуйста, попробуйте снова.\r\npassword_ok=OK\r\npassword_cancel=Отмена\r\n\r\nprinting_not_supported=Предупреждение: В этом браузере не полностью поддерживается печать.\r\nprinting_not_ready=Предупреждение: PDF не полностью загружен для печати.\r\nweb_fonts_disabled=Веб-шрифты отключены: не удалось задействовать встроенные PDF-шрифты.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/scn/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\n\r\nzoom_out.title=Cchiù nicu\r\nzoom_out_label=Cchiù nicu\r\nzoom_in.title=Cchiù granni\r\nzoom_in_label=Cchiù granni\r\n\r\n# Secondary toolbar and context menu\r\n\r\n\r\n\r\n\r\n# Document properties dialog box\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Vista web lesta:\r\ndocument_properties_linearized_yes=Se\r\n\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_close=Sfai\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\n\r\n# Find panel button title and messages\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\n\r\n# Error panel labels\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\n\r\n# Predefined zoom values\r\npage_scale_width=Larghizza dâ pàggina\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\n\r\n# Loading indicator messages\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\npassword_cancel=Sfai\r\n\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/si/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=මීට පෙර පිටුව\r\nprevious_label=පෙර\r\nnext.title=මීළඟ පිටුව\r\nnext_label=මීළඟ\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=පිටුව\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\n\r\nzoom_out.title=කුඩා කරන්න\r\nzoom_out_label=කුඩා කරන්න\r\nzoom_in.title=විශාල කරන්න\r\nzoom_in_label=විශාල කරන්න\r\nzoom.title=විශාලණය\r\npresentation_mode.title=ඉදිරිපත්කිරීම් ප්‍රකාරය වෙත මාරුවන්න\r\npresentation_mode_label=ඉදිරිපත්කිරීම් ප්‍රකාරය\r\nopen_file.title=ගොනුව විවෘත කරන්න\r\nopen_file_label=විවෘත කරන්න\r\nprint.title=මුද්‍රණය\r\nprint_label=මුද්‍රණය\r\ndownload.title=බාගන්න\r\ndownload_label=බාගන්න\r\nbookmark.title=දැනට ඇති දසුන (පිටපත් කරන්න හෝ නව කවුළුවක විවෘත කරන්න)\r\nbookmark_label=දැනට ඇති දසුන\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=මෙවලම්\r\ntools_label=මෙවලම්\r\nfirst_page.title=මුල් පිටුවට යන්න\r\nfirst_page.label=මුල් පිටුවට යන්න\r\nfirst_page_label=මුල් පිටුවට යන්න\r\nlast_page.title=අවසන් පිටුවට යන්න\r\nlast_page.label=අවසන් පිටුවට යන්න\r\nlast_page_label=අවසන් පිටුවට යන්න\r\npage_rotate_cw.title=දක්ශිණාවර්තව භ්‍රමණය\r\npage_rotate_cw.label=දක්ශිණාවර්තව භ්‍රමණය\r\npage_rotate_cw_label=දක්ශිණාවර්තව භ්‍රමණය\r\npage_rotate_ccw.title=වාමාවර්තව භ්‍රමණය\r\npage_rotate_ccw.label=වාමාවර්තව භ්‍රමණය\r\npage_rotate_ccw_label=වාමාවර්තව භ්‍රමණය\r\n\r\ncursor_hand_tool_label=අත් මෙවලම\r\n\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=ලේඛන වත්කම්...\r\ndocument_properties_label=ලේඛන වත්කම්...\r\ndocument_properties_file_name=ගොනු නම:\r\ndocument_properties_file_size=ගොනු ප්‍රමාණය:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} බයිට)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} බයිට)\r\ndocument_properties_title=සිරස්තලය:\r\ndocument_properties_author=කතෲ\r\ndocument_properties_subject=මාතෘකාව:\r\ndocument_properties_keywords=යතුරු වදන්:\r\ndocument_properties_creation_date=නිර්මිත දිනය:\r\ndocument_properties_modification_date=වෙනස්කල දිනය:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=නිර්මාපක:\r\ndocument_properties_producer=PDF නිශ්පාදක:\r\ndocument_properties_version=PDF නිකුතුව:\r\ndocument_properties_page_count=පිටු ගණන:\r\ndocument_properties_page_size=පිටුවේ විශාලත්වය:\r\ndocument_properties_page_size_unit_inches=අඟල්\r\ndocument_properties_page_size_unit_millimeters=මිමි\r\ndocument_properties_page_size_orientation_portrait=සිරස්\r\ndocument_properties_page_size_orientation_landscape=තිරස්\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}}×{{height}}{{unit}}{{name}}{{orientation}}\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=වේගවත් ජාල දසුන:\r\ndocument_properties_linearized_yes=ඔව්\r\ndocument_properties_linearized_no=නැහැ\r\ndocument_properties_close=වසන්න\r\n\r\nprint_progress_message=ලේඛනය මුද්‍රණය සඳහා සූදානම් කරමින්…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=අවලංගු කරන්න\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=පැති තීරුවට මාරුවන්න\r\ntoggle_sidebar_label=පැති තීරුවට මාරුවන්න\r\ndocument_outline_label=ලේඛනයේ පිට මායිම\r\nattachments.title=ඇමිණුම් පෙන්වන්න\r\nattachments_label=ඇමිණුම්\r\nthumbs.title=සිඟිති රූ පෙන්වන්න\r\nthumbs_label=සිඟිති රූ\r\nfindbar.title=ලේඛනය තුළ සොයන්න\r\nfindbar_label=සොයන්න\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=පිටුව {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=පිටුවෙ සිඟිත රූව {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=සොයන්න\r\nfind_previous.title=මේ වාක්‍ය ඛණ්ඩය මීට පෙර යෙදුණු ස්ථානය සොයන්න\r\nfind_previous_label=පෙර:\r\nfind_next.title=මේ වාක්‍ය ඛණ්ඩය මීළඟට යෙදෙන ස්ථානය සොයන්න\r\nfind_next_label=මීළඟ\r\nfind_highlight=සියල්ල උද්දීපනය\r\nfind_match_case_label=අකුරු ගළපන්න\r\nfind_entire_word_label=සම්පූර්ණ වචන\r\nfind_reached_top=පිටුවේ ඉහළ කෙළවරට ලගාවිය, පහළ සිට ඉදිරියට යමින්\r\nfind_reached_bottom=පිටුවේ පහළ කෙළවරට ලගාවිය, ඉහළ සිට ඉදිරියට යමින්\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit[zero]=ගැලපුම් {{limit}} ට වඩා\r\nfind_not_found=ඔබ සෙව් වචන හමු නොවීය\r\n\r\n# Error panel labels\r\nerror_more_info=බොහෝ තොරතුරු\r\nerror_less_info=අවම තොරතුරු\r\nerror_close=වසන්න\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (නිකුතුව: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=පණිවිඩය: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=ගොනුව: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=පේළිය: {{line}}\r\nrendering_error=පිටුව රෙන්ඩර් විමේදි ගැටලුවක් හට ගැනුණි.\r\n\r\n# Predefined zoom values\r\npage_scale_width=පිටුවේ පළල\r\npage_scale_fit=පිටුවට සුදුසු ලෙස\r\npage_scale_auto=ස්වයංක්‍රීය විශාලණය\r\npage_scale_actual=නියමිත ප්‍රමාණය\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=දෝෂය\r\nloading_error=PDF පූරණය විමේදි දෝෂයක් හට ගැනුණි.\r\ninvalid_file_error=දූශිත හෝ සාවද්‍ය PDF ගොනුව.\r\nmissing_file_error=නැතිවූ PDF ගොනුව.\r\nunexpected_response_error=බලාපොරොත්තු නොවූ සේවාදායක ප්‍රතිචාරය.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} විස්තරය]\r\npassword_label=මෙම PDF ගොනුව විවෘත කිරීමට මුරපදය ඇතුළත් කරන්න.\r\npassword_invalid=වැරදි මුරපදයක්. කරුණාකර නැවත උත්සහ කරන්න.\r\npassword_ok=හරි\r\npassword_cancel=එපා\r\n\r\nprinting_not_supported=අවවාදයයි: මෙම ගවේශකය මුද්‍රණය සඳහා සම්පූර්ණයෙන් සහය නොදක්වයි.\r\nprinting_not_ready=අවවාදයයි: මුද්‍රණය සඳහා PDF සම්පූර්ණයෙන් පූර්ණය වී නොමැත.\r\nweb_fonts_disabled=ජාල අකුරු අක්‍රීයයි: තිළැලි PDF අකුරු භාවිත කළ නොහැක.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/sk/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Predchádzajúca strana\r\nprevious_label=Predchádzajúca\r\nnext.title=Nasledujúca strana\r\nnext_label=Nasledujúca\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Strana\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=z {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} z {{pagesCount}})\r\n\r\nzoom_out.title=Zmenšiť veľkosť\r\nzoom_out_label=Zmenšiť veľkosť\r\nzoom_in.title=Zväčšiť veľkosť\r\nzoom_in_label=Zväčšiť veľkosť\r\nzoom.title=Nastavenie veľkosti\r\npresentation_mode.title=Prepnúť na režim prezentácie\r\npresentation_mode_label=Režim prezentácie\r\nopen_file.title=Otvoriť súbor\r\nopen_file_label=Otvoriť\r\nprint.title=Tlačiť\r\nprint_label=Tlačiť\r\ndownload.title=Prevziať\r\ndownload_label=Prevziať\r\nbookmark.title=Aktuálne zobrazenie (kopírovať alebo otvoriť v novom okne)\r\nbookmark_label=Aktuálne zobrazenie\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Nástroje\r\ntools_label=Nástroje\r\nfirst_page.title=Prejsť na prvú stranu\r\nfirst_page.label=Prejsť na prvú stranu\r\nfirst_page_label=Prejsť na prvú stranu\r\nlast_page.title=Prejsť na poslednú stranu\r\nlast_page.label=Prejsť na poslednú stranu\r\nlast_page_label=Prejsť na poslednú stranu\r\npage_rotate_cw.title=Otočiť v smere hodinových ručičiek\r\npage_rotate_cw.label=Otočiť v smere hodinových ručičiek\r\npage_rotate_cw_label=Otočiť v smere hodinových ručičiek\r\npage_rotate_ccw.title=Otočiť proti smeru hodinových ručičiek\r\npage_rotate_ccw.label=Otočiť proti smeru hodinových ručičiek\r\npage_rotate_ccw_label=Otočiť proti smeru hodinových ručičiek\r\n\r\ncursor_text_select_tool.title=Povoliť výber textu\r\ncursor_text_select_tool_label=Výber textu\r\ncursor_hand_tool.title=Povoliť nástroj ruka\r\ncursor_hand_tool_label=Nástroj ruka\r\n\r\nscroll_vertical.title=Používať zvislé posúvanie\r\nscroll_vertical_label=Zvislé posúvanie\r\nscroll_horizontal.title=Používať vodorovné posúvanie\r\nscroll_horizontal_label=Vodorovné posúvanie\r\nscroll_wrapped.title=Použiť postupné posúvanie\r\nscroll_wrapped_label=Postupné posúvanie\r\n\r\nspread_none.title=Nezdružovať stránky\r\nspread_none_label=Žiadne združovanie\r\nspread_odd.title=Združí stránky a umiestni nepárne stránky vľavo\r\nspread_odd_label=Združiť stránky (nepárne vľavo)\r\nspread_even.title=Združí stránky a umiestni párne stránky vľavo\r\nspread_even_label=Združiť stránky (párne vľavo)\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Vlastnosti dokumentu…\r\ndocument_properties_label=Vlastnosti dokumentu…\r\ndocument_properties_file_name=Názov súboru:\r\ndocument_properties_file_size=Veľkosť súboru:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} kB ({{size_b}} bajtov)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bajtov)\r\ndocument_properties_title=Názov:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Predmet:\r\ndocument_properties_keywords=Kľúčové slová:\r\ndocument_properties_creation_date=Dátum vytvorenia:\r\ndocument_properties_modification_date=Dátum úpravy:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Vytvoril:\r\ndocument_properties_producer=Tvorca PDF:\r\ndocument_properties_version=Verzia PDF:\r\ndocument_properties_page_count=Počet strán:\r\ndocument_properties_page_size=Veľkosť stránky:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=na výšku\r\ndocument_properties_page_size_orientation_landscape=na šírku\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=List\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Rýchle Web View:\r\ndocument_properties_linearized_yes=Áno\r\ndocument_properties_linearized_no=Nie\r\ndocument_properties_close=Zavrieť\r\n\r\nprint_progress_message=Príprava dokumentu na tlač…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Zrušiť\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Prepnúť bočný panel\r\ntoggle_sidebar_notification.title=Prepnúť bočný panel (dokument obsahuje osnovu/prílohy)\r\ntoggle_sidebar_notification2.title=Prepnúť bočný panel (dokument obsahuje osnovu/prílohy/vrstvy)\r\ntoggle_sidebar_label=Prepnúť bočný panel\r\ndocument_outline.title=Zobraziť osnovu dokumentu (dvojitým kliknutím rozbalíte/zbalíte všetky položky)\r\ndocument_outline_label=Osnova dokumentu\r\nattachments.title=Zobraziť prílohy\r\nattachments_label=Prílohy\r\nlayers.title=Zobraziť vrstvy (dvojitým kliknutím uvediete všetky vrstvy do pôvodného stavu)\r\nlayers_label=Vrstvy\r\nthumbs.title=Zobraziť miniatúry\r\nthumbs_label=Miniatúry\r\nfindbar.title=Hľadať v dokumente\r\nfindbar_label=Hľadať\r\n\r\nadditional_layers=Ďalšie vrstvy\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Strana {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Strana {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatúra strany {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Hľadať\r\nfind_input.placeholder=Hľadať v dokumente…\r\nfind_previous.title=Vyhľadať predchádzajúci výskyt reťazca\r\nfind_previous_label=Predchádzajúce\r\nfind_next.title=Vyhľadať ďalší výskyt reťazca\r\nfind_next_label=Ďalšie\r\nfind_highlight=Zvýrazniť všetky\r\nfind_match_case_label=Rozlišovať veľkosť písmen\r\nfind_entire_word_label=Celé slová\r\nfind_reached_top=Bol dosiahnutý začiatok stránky, pokračuje sa od konca\r\nfind_reached_bottom=Bol dosiahnutý koniec stránky, pokračuje sa od začiatku\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}}. z {{total}} výsledku\r\nfind_match_count[two]={{current}}. z {{total}} výsledkov\r\nfind_match_count[few]={{current}}. z {{total}} výsledkov\r\nfind_match_count[many]={{current}}. z {{total}} výsledkov\r\nfind_match_count[other]={{current}}. z {{total}} výsledkov\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Viac než {{limit}} výsledkov\r\nfind_match_count_limit[one]=Viac než {{limit}} výsledok\r\nfind_match_count_limit[two]=Viac než {{limit}} výsledky\r\nfind_match_count_limit[few]=Viac než {{limit}} výsledky\r\nfind_match_count_limit[many]=Viac než {{limit}} výsledkov\r\nfind_match_count_limit[other]=Viac než {{limit}} výsledkov\r\nfind_not_found=Výraz nebol nájdený\r\n\r\n# Error panel labels\r\nerror_more_info=Viac informácií\r\nerror_less_info=Menej informácií\r\nerror_close=Zavrieť\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (zostavenie: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Správa: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Zásobník: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Súbor: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Riadok: {{line}}\r\nrendering_error=Pri vykresľovaní stránky sa vyskytla chyba.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Na šírku strany\r\npage_scale_fit=Na veľkosť strany\r\npage_scale_auto=Automatická veľkosť\r\npage_scale_actual=Skutočná veľkosť\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}} %\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Chyba\r\nloading_error=Počas načítavania dokumentu PDF sa vyskytla chyba.\r\ninvalid_file_error=Neplatný alebo poškodený súbor PDF.\r\nmissing_file_error=Chýbajúci súbor PDF.\r\nunexpected_response_error=Neočakávaná odpoveď zo servera.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anotácia typu {{type}}]\r\npassword_label=Ak chcete otvoriť tento súbor PDF, zadajte jeho heslo.\r\npassword_invalid=Heslo nie je platné. Skúste to znova.\r\npassword_ok=OK\r\npassword_cancel=Zrušiť\r\n\r\nprinting_not_supported=Upozornenie: tlač nie je v tomto prehliadači plne podporovaná.\r\nprinting_not_ready=Upozornenie: súbor PDF nie je plne načítaný pre tlač.\r\nweb_fonts_disabled=Webové písma sú vypnuté: nie je možné použiť písma vložené do súboru PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/sl/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Prejšnja stran\r\nprevious_label=Nazaj\r\nnext.title=Naslednja stran\r\nnext_label=Naprej\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Stran\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=od {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} od {{pagesCount}})\r\n\r\nzoom_out.title=Pomanjšaj\r\nzoom_out_label=Pomanjšaj\r\nzoom_in.title=Povečaj\r\nzoom_in_label=Povečaj\r\nzoom.title=Povečava\r\npresentation_mode.title=Preklopi v način predstavitve\r\npresentation_mode_label=Način predstavitve\r\nopen_file.title=Odpri datoteko\r\nopen_file_label=Odpri\r\nprint.title=Natisni\r\nprint_label=Natisni\r\ndownload.title=Prenesi\r\ndownload_label=Prenesi\r\nbookmark.title=Trenutni pogled (kopiraj ali odpri v novem oknu)\r\nbookmark_label=Trenutni pogled\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Orodja\r\ntools_label=Orodja\r\nfirst_page.title=Pojdi na prvo stran\r\nfirst_page.label=Pojdi na prvo stran\r\nfirst_page_label=Pojdi na prvo stran\r\nlast_page.title=Pojdi na zadnjo stran\r\nlast_page.label=Pojdi na zadnjo stran\r\nlast_page_label=Pojdi na zadnjo stran\r\npage_rotate_cw.title=Zavrti v smeri urnega kazalca\r\npage_rotate_cw.label=Zavrti v smeri urnega kazalca\r\npage_rotate_cw_label=Zavrti v smeri urnega kazalca\r\npage_rotate_ccw.title=Zavrti v nasprotni smeri urnega kazalca\r\npage_rotate_ccw.label=Zavrti v nasprotni smeri urnega kazalca\r\npage_rotate_ccw_label=Zavrti v nasprotni smeri urnega kazalca\r\n\r\ncursor_text_select_tool.title=Omogoči orodje za izbor besedila\r\ncursor_text_select_tool_label=Orodje za izbor besedila\r\ncursor_hand_tool.title=Omogoči roko\r\ncursor_hand_tool_label=Roka\r\n\r\nscroll_vertical.title=Uporabi navpično drsenje\r\nscroll_vertical_label=Navpično drsenje\r\nscroll_horizontal.title=Uporabi vodoravno drsenje\r\nscroll_horizontal_label=Vodoravno drsenje\r\nscroll_wrapped.title=Uporabi ovito drsenje\r\nscroll_wrapped_label=Ovito drsenje\r\n\r\nspread_none.title=Ne združuj razponov strani\r\nspread_none_label=Brez razponov\r\nspread_odd.title=Združuj razpone strani z začetkom pri lihih straneh\r\nspread_odd_label=Lihi razponi\r\nspread_even.title=Združuj razpone strani z začetkom pri sodih straneh\r\nspread_even_label=Sodi razponi\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Lastnosti dokumenta …\r\ndocument_properties_label=Lastnosti dokumenta …\r\ndocument_properties_file_name=Ime datoteke:\r\ndocument_properties_file_size=Velikost datoteke:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bajtov)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bajtov)\r\ndocument_properties_title=Ime:\r\ndocument_properties_author=Avtor:\r\ndocument_properties_subject=Tema:\r\ndocument_properties_keywords=Ključne besede:\r\ndocument_properties_creation_date=Datum nastanka:\r\ndocument_properties_modification_date=Datum spremembe:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Ustvaril:\r\ndocument_properties_producer=Izdelovalec PDF:\r\ndocument_properties_version=Različica PDF:\r\ndocument_properties_page_count=Število strani:\r\ndocument_properties_page_size=Velikost strani:\r\ndocument_properties_page_size_unit_inches=palcev\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=pokončno\r\ndocument_properties_page_size_orientation_landscape=ležeče\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Pismo\r\ndocument_properties_page_size_name_legal=Pravno\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Hitri spletni ogled:\r\ndocument_properties_linearized_yes=Da\r\ndocument_properties_linearized_no=Ne\r\ndocument_properties_close=Zapri\r\n\r\nprint_progress_message=Priprava dokumenta na tiskanje …\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}} %\r\nprint_progress_close=Prekliči\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Preklopi stransko vrstico\r\ntoggle_sidebar_notification.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke)\r\ntoggle_sidebar_notification2.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke/plasti)\r\ntoggle_sidebar_label=Preklopi stransko vrstico\r\ndocument_outline.title=Prikaži oris dokumenta (dvokliknite za razširitev/strnitev vseh predmetov)\r\ndocument_outline_label=Oris dokumenta\r\nattachments.title=Prikaži priponke\r\nattachments_label=Priponke\r\nlayers.title=Prikaži plasti (dvokliknite za ponastavitev vseh plasti na privzeto stanje)\r\nlayers_label=Plasti\r\nthumbs.title=Prikaži sličice\r\nthumbs_label=Sličice\r\nfindbar.title=Iskanje po dokumentu\r\nfindbar_label=Najdi\r\n\r\nadditional_layers=Dodatne plasti\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Stran {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Stran {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Sličica strani {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Najdi\r\nfind_input.placeholder=Najdi v dokumentu …\r\nfind_previous.title=Najdi prejšnjo ponovitev iskanega\r\nfind_previous_label=Najdi nazaj\r\nfind_next.title=Najdi naslednjo ponovitev iskanega\r\nfind_next_label=Najdi naprej\r\nfind_highlight=Označi vse\r\nfind_match_case_label=Razlikuj velike/male črke\r\nfind_entire_word_label=Cele besede\r\nfind_reached_top=Dosežen začetek dokumenta iz smeri konca\r\nfind_reached_bottom=Doseženo konec dokumenta iz smeri začetka\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]=Zadetek {{current}} od {{total}}\r\nfind_match_count[two]=Zadetek {{current}} od {{total}}\r\nfind_match_count[few]=Zadetek {{current}} od {{total}}\r\nfind_match_count[many]=Zadetek {{current}} od {{total}}\r\nfind_match_count[other]=Zadetek {{current}} od {{total}}\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Več kot {{limit}} zadetkov\r\nfind_match_count_limit[one]=Več kot {{limit}} zadetek\r\nfind_match_count_limit[two]=Več kot {{limit}} zadetka\r\nfind_match_count_limit[few]=Več kot {{limit}} zadetki\r\nfind_match_count_limit[many]=Več kot {{limit}} zadetkov\r\nfind_match_count_limit[other]=Več kot {{limit}} zadetkov\r\nfind_not_found=Iskanega ni mogoče najti\r\n\r\n# Error panel labels\r\nerror_more_info=Več informacij\r\nerror_less_info=Manj informacij\r\nerror_close=Zapri\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js r{{version}} (graditev: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Sporočilo: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Sklad: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Datoteka: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Vrstica: {{line}}\r\nrendering_error=Med pripravljanjem strani je prišlo do napake!\r\n\r\n# Predefined zoom values\r\npage_scale_width=Širina strani\r\npage_scale_fit=Prilagodi stran\r\npage_scale_auto=Samodejno\r\npage_scale_actual=Dejanska velikost\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}} %\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Napaka\r\nloading_error=Med nalaganjem datoteke PDF je prišlo do napake.\r\ninvalid_file_error=Neveljavna ali pokvarjena datoteka PDF.\r\nmissing_file_error=Ni datoteke PDF.\r\nunexpected_response_error=Nepričakovan odgovor strežnika.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Opomba vrste {{type}}]\r\npassword_label=Vnesite geslo za odpiranje te datoteke PDF.\r\npassword_invalid=Neveljavno geslo. Poskusite znova.\r\npassword_ok=V redu\r\npassword_cancel=Prekliči\r\n\r\nprinting_not_supported=Opozorilo: ta brskalnik ne podpira vseh možnosti tiskanja.\r\nprinting_not_ready=Opozorilo: PDF ni v celoti naložen za tiskanje.\r\nweb_fonts_disabled=Spletne pisave so onemogočene: vgradnih pisav za PDF ni mogoče uporabiti.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/son/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Moo bisante\r\nprevious_label=Bisante\r\nnext.title=Jinehere moo\r\nnext_label=Jine\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Moo\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}} ra\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} ka hun {{pagesCount}}) ra\r\n\r\nzoom_out.title=Nakasandi\r\nzoom_out_label=Nakasandi\r\nzoom_in.title=Bebbeerandi\r\nzoom_in_label=Bebbeerandi\r\nzoom.title=Bebbeerandi\r\npresentation_mode.title=Bere cebeyan alhaali\r\npresentation_mode_label=Cebeyan alhaali\r\nopen_file.title=Tuku feeri\r\nopen_file_label=Feeri\r\nprint.title=Kar\r\nprint_label=Kar\r\ndownload.title=Zumandi\r\ndownload_label=Zumandi\r\nbookmark.title=Sohõ gunarro (bere wala feeri zanfun taaga ra)\r\nbookmark_label=Sohõ gunaroo\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Goyjinawey\r\ntools_label=Goyjinawey\r\nfirst_page.title=Koy moo jinaa ga\r\nfirst_page.label=Koy moo jinaa ga\r\nfirst_page_label=Koy moo jinaa ga\r\nlast_page.title=Koy moo koraa ga\r\nlast_page.label=Koy moo koraa ga\r\nlast_page_label=Koy moo koraa ga\r\npage_rotate_cw.title=Kuubi kanbe guma here\r\npage_rotate_cw.label=Kuubi kanbe guma here\r\npage_rotate_cw_label=Kuubi kanbe guma here\r\npage_rotate_ccw.title=Kuubi kanbe wowa here\r\npage_rotate_ccw.label=Kuubi kanbe wowa here\r\npage_rotate_ccw_label=Kuubi kanbe wowa here\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Takadda mayrawey…\r\ndocument_properties_label=Takadda mayrawey…\r\ndocument_properties_file_name=Tuku maa:\r\ndocument_properties_file_size=Tuku adadu:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb=KB {{size_kb}} (cebsu-ize {{size_b}})\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb=MB {{size_mb}} (cebsu-ize {{size_b}})\r\ndocument_properties_title=Tiiramaa:\r\ndocument_properties_author=Hantumkaw:\r\ndocument_properties_subject=Dalil:\r\ndocument_properties_keywords=Kufalkalimawey:\r\ndocument_properties_creation_date=Teeyan han:\r\ndocument_properties_modification_date=Barmayan han:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Teekaw:\r\ndocument_properties_producer=PDF berandikaw:\r\ndocument_properties_version=PDF dumi:\r\ndocument_properties_page_count=Moo hinna:\r\ndocument_properties_close=Daabu\r\n\r\nprint_progress_message=Goo ma takaddaa soolu k'a kar se…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Naŋ\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Kanjari ceraw zuu\r\ntoggle_sidebar_notification.title=Kanjari ceraw-zuu (takaddaa goo nda filla-boŋ/hangandiyaŋ)\r\ntoggle_sidebar_label=Kanjari ceraw zuu\r\ndocument_outline.title=Takaddaa korfur alhaaloo cebe (naagu cee hinka ka haya-izey kul hayandi/kankamandi)\r\ndocument_outline_label=Takadda filla-boŋ\r\nattachments.title=Hangarey cebe\r\nattachments_label=Hangarey\r\nthumbs.title=Kabeboy biyey cebe\r\nthumbs_label=Kabeboy biyey\r\nfindbar.title=Ceeci takaddaa ra\r\nfindbar_label=Ceeci\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title={{page}} moo\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Kabeboy bii {{page}} moo še\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Ceeci\r\nfind_input.placeholder=Ceeci takaddaa ra…\r\nfind_previous.title=Kalimaɲaŋoo bangayri bisantaa ceeci\r\nfind_previous_label=Bisante\r\nfind_next.title=Kalimaɲaŋoo hiino bangayroo ceeci\r\nfind_next_label=Jine\r\nfind_highlight=Ikul šilbay\r\nfind_match_case_label=Harfu-beeriyan hawgay\r\nfind_reached_top=A too moŋoo boŋoo, koy jine ka šinitin nda cewoo\r\nfind_reached_bottom=A too moɲoo cewoo, koy jine šintioo ga\r\nfind_not_found=Kalimaɲaa mana duwandi\r\n\r\n# Error panel labels\r\nerror_more_info=Alhabar tontoni\r\nerror_less_info=Alhabar tontoni\r\nerror_close=Daabu\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Alhabar: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Dekeri: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Tuku: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Žeeri: {{line}}\r\nrendering_error=Firka bangay kaŋ moɲoo goo ma willandi.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Mooo hayyan\r\npage_scale_fit=Moo sawayan\r\npage_scale_auto=Boŋše azzaati barmayyan\r\npage_scale_actual=Adadu cimi\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Firka\r\nloading_error=Firka bangay kaŋ PDF goo ma zumandi.\r\ninvalid_file_error=PDF tuku laala wala laybante.\r\nmissing_file_error=PDF tuku kumante.\r\nunexpected_response_error=Manti feršikaw tuuruyan maatante.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt={{type}} maasa-caw]\r\npassword_label=Šennikufal dam ka PDF tukoo woo feeri.\r\npassword_invalid=Šennikufal laalo. Ceeci koyne taare.\r\npassword_ok=Ayyo\r\npassword_cancel=Naŋ\r\n\r\nprinting_not_supported=Yaamar: Karyan ši tee ka timme nda ceecikaa woo.\r\nprinting_not_ready=Yaamar: PDF ši zunbu ka timme karyan še.\r\nweb_fonts_disabled=Interneti šigirawey kay: ši hin ka goy nda PDF šigira hurantey.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/sq/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Faqja e Mëparshme\r\nprevious_label=E mëparshmja\r\nnext.title=Faqja Pasuese\r\nnext_label=Pasuesja\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Faqe\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=nga {{pagesCount}} gjithsej\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} nga {{pagesCount}})\r\n\r\nzoom_out.title=Zvogëlojeni\r\nzoom_out_label=Zvogëlojeni\r\nzoom_in.title=Zmadhojeni\r\nzoom_in_label=Zmadhojini\r\nzoom.title=Zoom\r\npresentation_mode.title=Kalo te Mënyra Paraqitje\r\npresentation_mode_label=Mënyra Paraqitje\r\nopen_file.title=Hapni Kartelë\r\nopen_file_label=Hape\r\nprint.title=Shtypje\r\nprint_label=Shtype\r\ndownload.title=Shkarkim\r\ndownload_label=Shkarkoje\r\nbookmark.title=Pamja e tanishme (kopjojeni ose hapeni në dritare të re)\r\nbookmark_label=Pamja e Tanishme\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Mjete\r\ntools_label=Mjete\r\nfirst_page.title=Kaloni te Faqja e Parë\r\nfirst_page.label=Kaloni te Faqja e Parë\r\nfirst_page_label=Kaloni te Faqja e Parë\r\nlast_page.title=Kaloni te Faqja e Fundit\r\nlast_page.label=Kaloni te Faqja e Fundit\r\nlast_page_label=Kaloni te Faqja e Fundit\r\npage_rotate_cw.title=Rrotullojeni Në Kahun Orar\r\npage_rotate_cw.label=Rrotulloje Në Kahun Orar\r\npage_rotate_cw_label=Rrotulloje Në Kahun Orar\r\npage_rotate_ccw.title=Rrotullojeni Në Kahun Kundërorar\r\npage_rotate_ccw.label=Rrotulloje Në Kahun Kundërorar\r\npage_rotate_ccw_label=Rrotulloje Në Kahun Kundërorar\r\n\r\ncursor_text_select_tool.title=Aktivizo Mjet Përzgjedhjeje Teksti\r\ncursor_text_select_tool_label=Mjet Përzgjedhjeje Teksti\r\ncursor_hand_tool.title=Aktivizo Mjetin Dorë\r\ncursor_hand_tool_label=Mjeti Dorë\r\n\r\nscroll_vertical.title=Përdor Rrëshqitje Vertikale\r\nscroll_vertical_label=Rrëshqitje Vertikale\r\nscroll_horizontal.title=Përdor Rrëshqitje Horizontale\r\nscroll_horizontal_label=Rrëshqitje Horizontale\r\nscroll_wrapped.title=Përdor Rrëshqitje Me Mbështjellje\r\nscroll_wrapped_label=Rrëshqitje Me Mbështjellje\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Veti Dokumenti…\r\ndocument_properties_label=Veti Dokumenti…\r\ndocument_properties_file_name=Emër kartele:\r\ndocument_properties_file_size=Madhësi kartele:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bajte)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bajte)\r\ndocument_properties_title=Titull:\r\ndocument_properties_author=Autor:\r\ndocument_properties_subject=Subjekt:\r\ndocument_properties_keywords=Fjalëkyçe:\r\ndocument_properties_creation_date=Datë Krijimi:\r\ndocument_properties_modification_date=Datë Ndryshimi:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Krijues:\r\ndocument_properties_producer=Prodhues PDF-je:\r\ndocument_properties_version=Version PDF-je:\r\ndocument_properties_page_count=Numër Faqesh:\r\ndocument_properties_page_size=Madhësi Faqeje:\r\ndocument_properties_page_size_unit_inches=inç\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=portret\r\ndocument_properties_page_size_orientation_landscape=së gjeri\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized_yes=Po\r\ndocument_properties_linearized_no=Jo\r\ndocument_properties_close=Mbylleni\r\n\r\nprint_progress_message=Po përgatitet dokumenti për shtypje…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Anuloje\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Shfaqni/Fshihni Anështyllën\r\ntoggle_sidebar_notification.title=Shfaqni Anështyllën (dokumenti përmban përvijim/bashkëngjitje)\r\ntoggle_sidebar_notification2.title=Hap/Mbyll Anështylë (dokumenti përmban përvijim/nashkëngjitje/shtresa)\r\ntoggle_sidebar_label=Shfaq/Fshih Anështyllën\r\ndocument_outline.title=Shfaqni Përvijim Dokumenti (dyklikoni që të shfaqen/fshihen krejt elementët)\r\ndocument_outline_label=Përvijim Dokumenti\r\nattachments.title=Shfaqni Bashkëngjitje\r\nattachments_label=Bashkëngjitje\r\nlayers.title=Shfaq Shtresa (dyklikoni që të rikthehen krejt shtresat në gjendjen e tyre parazgjedhje)\r\nlayers_label=Shtresa\r\nthumbs.title=Shfaqni Miniatura\r\nthumbs_label=Miniatura\r\nfindbar.title=Gjeni në Dokument\r\nfindbar_label=Gjej\r\n\r\nadditional_layers=Shtresa Shtesë\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Faqja {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Faqja {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniaturë e Faqes {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Gjej\r\nfind_input.placeholder=Gjeni në dokument…\r\nfind_previous.title=Gjeni hasjen e mëparshme të togfjalëshit\r\nfind_previous_label=E mëparshmja\r\nfind_next.title=Gjeni hasjen pasuese të togfjalëshit\r\nfind_next_label=Pasuesja\r\nfind_highlight=Theksoji të tëra\r\nfind_match_case_label=Siç është shkruar\r\nfind_entire_word_label=Krejt fjalët\r\nfind_reached_top=U mbërrit në krye të dokumentit, vazhduar prej fundit\r\nfind_reached_bottom=U mbërrit në fund të dokumentit, vazhduar prej kreut\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} nga {{total}} përputhje gjithsej\r\nfind_match_count[two]={{current}} nga {{total}} përputhje gjithsej\r\nfind_match_count[few]={{current}} nga {{total}} përputhje gjithsej\r\nfind_match_count[many]={{current}} nga {{total}} përputhje gjithsej\r\nfind_match_count[other]={{current}} nga {{total}} përputhje gjithsej\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Më shumë se {{limit}} përputhje\r\nfind_match_count_limit[one]=Më shumë se {{limit}} përputhje\r\nfind_match_count_limit[two]=Më shumë se {{limit}} përputhje\r\nfind_match_count_limit[few]=Më shumë se {{limit}} përputhje\r\nfind_match_count_limit[many]=Më shumë se {{limit}} përputhje\r\nfind_match_count_limit[other]=Më shumë se {{limit}} përputhje\r\nfind_not_found=Togfjalësh që s’gjendet\r\n\r\n# Error panel labels\r\nerror_more_info=Më Tepër të Dhëna\r\nerror_less_info=Më Pak të Dhëna\r\nerror_close=Mbylleni\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mesazh: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Kartelë: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Rresht: {{line}}\r\nrendering_error=Ndodhi një gabim gjatë riprodhimit të faqes.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Gjerësi Faqeje\r\npage_scale_fit=Sa Nxë Faqja\r\npage_scale_auto=Zoom i Vetvetishëm\r\npage_scale_actual=Madhësia Faktike\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Gabim\r\nloading_error=Ndodhi një gabim gjatë ngarkimit të PDF-së.\r\ninvalid_file_error=Kartelë PDF e pavlefshme ose e dëmtuar.\r\nmissing_file_error=Kartelë PDF që mungon.\r\nunexpected_response_error=Përgjigje shërbyesi e papritur.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Nënvizim {{type}}]\r\npassword_label=Jepni fjalëkalimin që të hapet kjo kartelë PDF.\r\npassword_invalid=Fjalëkalim i pavlefshëm. Ju lutemi, riprovoni.\r\npassword_ok=OK\r\npassword_cancel=Anuloje\r\n\r\nprinting_not_supported=Kujdes: Shtypja s’mbulohet plotësisht nga ky shfletues.\r\nprinting_not_ready=Kujdes: PDF-ja s’është ngarkuar plotësisht që ta shtypni.\r\nweb_fonts_disabled=Shkronjat Web janë të çaktivizuara: s’arrihet të përdoren shkronja të trupëzuara në PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/sr/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Претходна страница\r\nprevious_label=Претходна\r\nnext.title=Следећа страница\r\nnext_label=Следећа\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Страница\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=од {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} од {{pagesCount}})\r\n\r\nzoom_out.title=Умањи\r\nzoom_out_label=Умањи\r\nzoom_in.title=Увеличај\r\nzoom_in_label=Увеличај\r\nzoom.title=Увеличавање\r\npresentation_mode.title=Промени на приказ у режиму презентације\r\npresentation_mode_label=Режим презентације\r\nopen_file.title=Отвори датотеку\r\nopen_file_label=Отвори\r\nprint.title=Штампај\r\nprint_label=Штампај\r\ndownload.title=Преузми\r\ndownload_label=Преузми\r\nbookmark.title=Тренутни приказ (копирај или отвори нови прозор)\r\nbookmark_label=Тренутни приказ\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Алатке\r\ntools_label=Алатке\r\nfirst_page.title=Иди на прву страницу\r\nfirst_page.label=Иди на прву страницу\r\nfirst_page_label=Иди на прву страницу\r\nlast_page.title=Иди на последњу страницу\r\nlast_page.label=Иди на последњу страницу\r\nlast_page_label=Иди на последњу страницу\r\npage_rotate_cw.title=Ротирај у смеру казаљке на сату\r\npage_rotate_cw.label=Ротирај у смеру казаљке на сату\r\npage_rotate_cw_label=Ротирај у смеру казаљке на сату\r\npage_rotate_ccw.title=Ротирај у смеру супротном од казаљке на сату\r\npage_rotate_ccw.label=Ротирај у смеру супротном од казаљке на сату\r\npage_rotate_ccw_label=Ротирај у смеру супротном од казаљке на сату\r\n\r\ncursor_text_select_tool.title=Омогући алат за селектовање текста\r\ncursor_text_select_tool_label=Алат за селектовање текста\r\ncursor_hand_tool.title=Омогући алат за померање\r\ncursor_hand_tool_label=Алат за померање\r\n\r\nscroll_vertical.title=Користи вертикално скроловање\r\nscroll_vertical_label=Вертикално скроловање\r\nscroll_horizontal.title=Користи хоризонтално скроловање\r\nscroll_horizontal_label=Хоризонтално скроловање\r\nscroll_wrapped.title=Користи скроловање по омоту\r\nscroll_wrapped_label=Скроловање по омоту\r\n\r\nspread_none.title=Немој спајати ширења страница\r\nspread_none_label=Без распростирања\r\nspread_odd.title=Споји ширења страница које почињу непарним бројем\r\nspread_odd_label=Непарна распростирања\r\nspread_even.title=Споји ширења страница које почињу парним бројем\r\nspread_even_label=Парна распростирања\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Параметри документа…\r\ndocument_properties_label=Параметри документа…\r\ndocument_properties_file_name=Име датотеке:\r\ndocument_properties_file_size=Величина датотеке:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} B)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} B)\r\ndocument_properties_title=Наслов:\r\ndocument_properties_author=Аутор:\r\ndocument_properties_subject=Тема:\r\ndocument_properties_keywords=Кључне речи:\r\ndocument_properties_creation_date=Датум креирања:\r\ndocument_properties_modification_date=Датум модификације:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Стваралац:\r\ndocument_properties_producer=PDF произвођач:\r\ndocument_properties_version=PDF верзија:\r\ndocument_properties_page_count=Број страница:\r\ndocument_properties_page_size=Величина странице:\r\ndocument_properties_page_size_unit_inches=ин\r\ndocument_properties_page_size_unit_millimeters=мм\r\ndocument_properties_page_size_orientation_portrait=усправно\r\ndocument_properties_page_size_orientation_landscape=водоравно\r\ndocument_properties_page_size_name_a3=А3\r\ndocument_properties_page_size_name_a4=А4\r\ndocument_properties_page_size_name_letter=Слово\r\ndocument_properties_page_size_name_legal=Права\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Брз веб приказ:\r\ndocument_properties_linearized_yes=Да\r\ndocument_properties_linearized_no=Не\r\ndocument_properties_close=Затвори\r\n\r\nprint_progress_message=Припремам документ за штампање…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Откажи\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Прикажи додатну палету\r\ntoggle_sidebar_notification.title=Прикажи додатну траку (докуменат садржи оквире/прилоге)\r\ntoggle_sidebar_notification2.title=Прикажи/сакриј бочну траку (документ садржи контуру/прилоге/слојеве)\r\ntoggle_sidebar_label=Прикажи додатну палету\r\ndocument_outline.title=Прикажи контуру документа (дупли клик за проширење/скупљање елемената)\r\ndocument_outline_label=Контура документа\r\nattachments.title=Прикажи прилоге\r\nattachments_label=Прилози\r\nlayers.title=Прикажи слојеве (дупли клик за враћање свих слојева у подразумевано стање)\r\nlayers_label=Слојеви\r\nthumbs.title=Прикажи сличице\r\nthumbs_label=Сличице\r\ncurrent_outline_item.title=Пронађите тренутну контуру\r\ncurrent_outline_item_label=Тренутна контура\r\nfindbar.title=Пронађи у документу\r\nfindbar_label=Пронађи\r\n\r\nadditional_layers=Додатни слојеви\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Страница {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Страница {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Сличица од странице {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Пронађи\r\nfind_input.placeholder=Пронађи у документу…\r\nfind_previous.title=Пронађи претходну појаву фразе\r\nfind_previous_label=Претходна\r\nfind_next.title=Пронађи следећу појаву фразе\r\nfind_next_label=Следећа\r\nfind_highlight=Истакнути све\r\nfind_match_case_label=Подударања\r\nfind_entire_word_label=Целе речи\r\nfind_reached_top=Достигнут врх документа, наставио са дна\r\nfind_reached_bottom=Достигнуто дно документа, наставио са врха\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} од {{total}} одговара\r\nfind_match_count[two]={{current}} од {{total}} одговара\r\nfind_match_count[few]={{current}} од {{total}} одговара\r\nfind_match_count[many]={{current}} од {{total}} одговара\r\nfind_match_count[other]={{current}} од {{total}} одговара\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Више од {{limit}} одговара\r\nfind_match_count_limit[one]=Више од {{limit}} одговара\r\nfind_match_count_limit[two]=Више од {{limit}} одговара\r\nfind_match_count_limit[few]=Више од {{limit}} одговара\r\nfind_match_count_limit[many]=Више од {{limit}} одговара\r\nfind_match_count_limit[other]=Више од {{limit}} одговара\r\nfind_not_found=Фраза није пронађена\r\n\r\n# Error panel labels\r\nerror_more_info=Више информација\r\nerror_less_info=Мање информација\r\nerror_close=Затвори\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Порука: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Стек: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Датотека: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Линија: {{line}}\r\nrendering_error=Дошло је до грешке приликом рендеровања ове странице.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Ширина странице\r\npage_scale_fit=Прилагоди страницу\r\npage_scale_auto=Аутоматско увеличавање\r\npage_scale_actual=Стварна величина\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Грешка\r\nloading_error=Дошло је до грешке приликом учитавања PDF-а.\r\ninvalid_file_error=PDF датотека је оштећена или је неисправна.\r\nmissing_file_error=PDF датотека није пронађена.\r\nunexpected_response_error=Неочекиван одговор од сервера.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} коментар]\r\npassword_label=Унесите лозинку да бисте отворили овај PDF докуменат.\r\npassword_invalid=Неисправна лозинка. Покушајте поново.\r\npassword_ok=У реду\r\npassword_cancel=Откажи\r\n\r\nprinting_not_supported=Упозорење: Штампање није у потпуности подржано у овом прегледачу.\r\nprinting_not_ready=Упозорење: PDF није у потпуности учитан за штампу.\r\nweb_fonts_disabled=Веб фонтови су онемогућени: не могу користити уграђене PDF фонтове.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/sv-SE/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Föregående sida\r\nprevious_label=Föregående\r\nnext.title=Nästa sida\r\nnext_label=Nästa\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Sida\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=av {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} av {{pagesCount}})\r\n\r\nzoom_out.title=Zooma ut\r\nzoom_out_label=Zooma ut\r\nzoom_in.title=Zooma in\r\nzoom_in_label=Zooma in\r\nzoom.title=Zoom\r\npresentation_mode.title=Byt till presentationsläge\r\npresentation_mode_label=Presentationsläge\r\nopen_file.title=Öppna fil\r\nopen_file_label=Öppna\r\nprint.title=Skriv ut\r\nprint_label=Skriv ut\r\ndownload.title=Hämta\r\ndownload_label=Hämta\r\nbookmark.title=Aktuell vy (kopiera eller öppna i nytt fönster)\r\nbookmark_label=Aktuell vy\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Verktyg\r\ntools_label=Verktyg\r\nfirst_page.title=Gå till första sidan\r\nfirst_page.label=Gå till första sidan\r\nfirst_page_label=Gå till första sidan\r\nlast_page.title=Gå till sista sidan\r\nlast_page.label=Gå till sista sidan\r\nlast_page_label=Gå till sista sidan\r\npage_rotate_cw.title=Rotera medurs\r\npage_rotate_cw.label=Rotera medurs\r\npage_rotate_cw_label=Rotera medurs\r\npage_rotate_ccw.title=Rotera moturs\r\npage_rotate_ccw.label=Rotera moturs\r\npage_rotate_ccw_label=Rotera moturs\r\n\r\ncursor_text_select_tool.title=Aktivera textmarkeringsverktyg\r\ncursor_text_select_tool_label=Textmarkeringsverktyg\r\ncursor_hand_tool.title=Aktivera handverktyg\r\ncursor_hand_tool_label=Handverktyg\r\n\r\nscroll_vertical.title=Använd vertikal rullning\r\nscroll_vertical_label=Vertikal rullning\r\nscroll_horizontal.title=Använd horisontell rullning\r\nscroll_horizontal_label=Horisontell rullning\r\nscroll_wrapped.title=Använd överlappande rullning\r\nscroll_wrapped_label=Överlappande rullning\r\n\r\nspread_none.title=Visa enkelsidor\r\nspread_none_label=Enkelsidor\r\nspread_odd.title=Visa uppslag med olika sidnummer till vänster\r\nspread_odd_label=Uppslag med framsida\r\nspread_even.title=Visa uppslag med lika sidnummer till vänster\r\nspread_even_label=Uppslag utan framsida\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Dokumentegenskaper…\r\ndocument_properties_label=Dokumentegenskaper…\r\ndocument_properties_file_name=Filnamn:\r\ndocument_properties_file_size=Filstorlek:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} kB ({{size_b}} byte)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} byte)\r\ndocument_properties_title=Titel:\r\ndocument_properties_author=Författare:\r\ndocument_properties_subject=Ämne:\r\ndocument_properties_keywords=Nyckelord:\r\ndocument_properties_creation_date=Skapades:\r\ndocument_properties_modification_date=Ändrades:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Skapare:\r\ndocument_properties_producer=PDF-producent:\r\ndocument_properties_version=PDF-version:\r\ndocument_properties_page_count=Sidantal:\r\ndocument_properties_page_size=Pappersstorlek:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=porträtt\r\ndocument_properties_page_size_orientation_landscape=landskap\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Snabb webbvisning:\r\ndocument_properties_linearized_yes=Ja\r\ndocument_properties_linearized_no=Nej\r\ndocument_properties_close=Stäng\r\n\r\nprint_progress_message=Förbereder sidor för utskrift…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Avbryt\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Visa/dölj sidofält\r\ntoggle_sidebar_notification.title=Visa/dölj sidofält (dokument innehåller översikt/bilagor)\r\ntoggle_sidebar_notification2.title=Växla sidofält (dokumentet innehåller dokumentstruktur/bilagor/lager)\r\ntoggle_sidebar_label=Visa/dölj sidofält\r\ndocument_outline.title=Visa dokumentdisposition (dubbelklicka för att expandera/komprimera alla objekt)\r\ndocument_outline_label=Dokumentöversikt\r\nattachments.title=Visa Bilagor\r\nattachments_label=Bilagor\r\nlayers.title=Visa lager (dubbelklicka för att återställa alla lager till standardläge)\r\nlayers_label=Lager\r\nthumbs.title=Visa miniatyrer\r\nthumbs_label=Miniatyrer\r\ncurrent_outline_item.title=Hitta aktuellt dispositionsobjekt\r\ncurrent_outline_item_label=Aktuellt dispositionsobjekt\r\nfindbar.title=Sök i dokument\r\nfindbar_label=Sök\r\n\r\nadditional_layers=Ytterligare lager\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Sida {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Sida {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatyr av sida {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Sök\r\nfind_input.placeholder=Sök i dokument…\r\nfind_previous.title=Hitta föregående förekomst av frasen\r\nfind_previous_label=Föregående\r\nfind_next.title=Hitta nästa förekomst av frasen\r\nfind_next_label=Nästa\r\nfind_highlight=Markera alla\r\nfind_match_case_label=Matcha versal/gemen\r\nfind_entire_word_label=Hela ord\r\nfind_reached_top=Nådde början av dokumentet, började från slutet\r\nfind_reached_bottom=Nådde slutet på dokumentet, började från början\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} av {{total}} träff\r\nfind_match_count[two]={{current}} av {{total}} träffar\r\nfind_match_count[few]={{current}} av {{total}} träffar\r\nfind_match_count[many]={{current}} av {{total}} träffar\r\nfind_match_count[other]={{current}} av {{total}} träffar\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Mer än {{limit}} träffar\r\nfind_match_count_limit[one]=Mer än {{limit}} träff\r\nfind_match_count_limit[two]=Mer än {{limit}} träffar\r\nfind_match_count_limit[few]=Mer än {{limit}} träffar\r\nfind_match_count_limit[many]=Mer än {{limit}} träffar\r\nfind_match_count_limit[other]=Mer än {{limit}} träffar\r\nfind_not_found=Frasen hittades inte\r\n\r\n# Error panel labels\r\nerror_more_info=Mer information\r\nerror_less_info=Mindre information\r\nerror_close=Stäng\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Meddelande: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fil: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Rad: {{line}}\r\nrendering_error=Ett fel uppstod vid visning av sidan.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Sidbredd\r\npage_scale_fit=Anpassa sida\r\npage_scale_auto=Automatisk zoom\r\npage_scale_actual=Verklig storlek\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Fel\r\nloading_error=Ett fel uppstod vid laddning av PDF-filen.\r\ninvalid_file_error=Ogiltig eller korrupt PDF-fil.\r\nmissing_file_error=Saknad PDF-fil.\r\nunexpected_response_error=Oväntat svar från servern.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}} {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}}-annotering]\r\npassword_label=Skriv in lösenordet för att öppna PDF-filen.\r\npassword_invalid=Ogiltigt lösenord. Försök igen.\r\npassword_ok=OK\r\npassword_cancel=Avbryt\r\n\r\nprinting_not_supported=Varning: Utskrifter stöds inte helt av den här webbläsaren.\r\nprinting_not_ready=Varning: PDF:en är inte klar för utskrift.\r\nweb_fonts_disabled=Webbtypsnitt är inaktiverade: kan inte använda inbäddade PDF-typsnitt.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/szl/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Piyrwyjszo strōna\r\nprevious_label=Piyrwyjszo\r\nnext.title=Nastympno strōna\r\nnext_label=Dalij\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Strōna\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=ze {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} ze {{pagesCount}})\r\n\r\nzoom_out.title=Zmyńsz\r\nzoom_out_label=Zmyńsz\r\nzoom_in.title=Zwiynksz\r\nzoom_in_label=Zwiynksz\r\nzoom.title=Srogość\r\npresentation_mode.title=Przełōncz na tryb prezyntacyje\r\npresentation_mode_label=Tryb prezyntacyje\r\nopen_file.title=Ôdewrzij zbiōr\r\nopen_file_label=Ôdewrzij\r\nprint.title=Durkuj\r\nprint_label=Durkuj\r\ndownload.title=Pobier\r\ndownload_label=Pobier\r\nbookmark.title=Aktualny widok (kopiuj abo ôdewrzij w nowym ôknie)\r\nbookmark_label=Aktualny widok\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Noczynia\r\ntools_label=Noczynia\r\nfirst_page.title=Idź ku piyrszyj strōnie\r\nfirst_page.label=Idź ku piyrszyj strōnie\r\nfirst_page_label=Idź ku piyrszyj strōnie\r\nlast_page.title=Idź ku ôstatnij strōnie\r\nlast_page.label=Idź ku ôstatnij strōnie\r\nlast_page_label=Idź ku ôstatnij strōnie\r\npage_rotate_cw.title=Zwyrtnij w prawo\r\npage_rotate_cw.label=Zwyrtnij w prawo\r\npage_rotate_cw_label=Zwyrtnij w prawo\r\npage_rotate_ccw.title=Zwyrtnij w lewo\r\npage_rotate_ccw.label=Zwyrtnij w lewo\r\npage_rotate_ccw_label=Zwyrtnij w lewo\r\n\r\ncursor_text_select_tool.title=Załōncz noczynie ôbiyranio tekstu\r\ncursor_text_select_tool_label=Noczynie ôbiyranio tekstu\r\ncursor_hand_tool.title=Załōncz noczynie rōnczka\r\ncursor_hand_tool_label=Noczynie rōnczka\r\n\r\nscroll_vertical.title=Używej piōnowego przewijanio\r\nscroll_vertical_label=Piōnowe przewijanie\r\nscroll_horizontal.title=Używej poziōmego przewijanio\r\nscroll_horizontal_label=Poziōme przewijanie\r\nscroll_wrapped.title=Używej szichtowego przewijanio\r\nscroll_wrapped_label=Szichtowe przewijanie\r\n\r\nspread_none.title=Niy dowej strōn w widoku po dwie\r\nspread_none_label=Po jednyj strōnie\r\nspread_odd.title=Dej strōny po dwie: niyparzysto i parzysto\r\nspread_odd_label=Niyparzysto i parzysto\r\nspread_even.title=Dej strōny po dwie: parzysto i niyparzysto\r\nspread_even_label=Parzysto i niyparzysto\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Włosności dokumyntu…\r\ndocument_properties_label=Włosności dokumyntu…\r\ndocument_properties_file_name=Miano zbioru:\r\ndocument_properties_file_size=Srogość zbioru:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} B)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} B)\r\ndocument_properties_title=Tytuł:\r\ndocument_properties_author=Autōr:\r\ndocument_properties_subject=Tymat:\r\ndocument_properties_keywords=Kluczowe słowa:\r\ndocument_properties_creation_date=Data zrychtowanio:\r\ndocument_properties_modification_date=Data zmiany:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Zrychtowane ôd:\r\ndocument_properties_producer=PDF ôd:\r\ndocument_properties_version=Wersyjo PDF:\r\ndocument_properties_page_count=Wielość strōn:\r\ndocument_properties_page_size=Srogość strōny:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=piōnowo\r\ndocument_properties_page_size_orientation_landscape=poziōmo\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Gibki necowy podglōnd:\r\ndocument_properties_linearized_yes=Ja\r\ndocument_properties_linearized_no=Niy\r\ndocument_properties_close=Zawrzij\r\n\r\nprint_progress_message=Rychtowanie dokumyntu do durku…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Pociep\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Przełōncz posek na rancie\r\ntoggle_sidebar_notification.title=Przełōncz posek na rancie (dokumynt mo struktura/przidowki)\r\ntoggle_sidebar_notification2.title=Przełōncz posek na rancie (dokumynt mo struktura/przidowki/warstwy)\r\ntoggle_sidebar_label=Przełōncz posek na rancie\r\ndocument_outline.title=Pokoż struktura dokumyntu (tuplowane klikniyncie rozszyrzo/swijo wszyskie elymynta)\r\ndocument_outline_label=Struktura dokumyntu\r\nattachments.title=Pokoż przidowki\r\nattachments_label=Przidowki\r\nlayers.title=Pokoż warstwy (tuplowane klikniyncie resetuje wszyskie warstwy do bazowego stanu)\r\nlayers_label=Warstwy\r\nthumbs.title=Pokoż miniatury\r\nthumbs_label=Miniatury\r\nfindbar.title=Znojdź w dokumyncie\r\nfindbar_label=Znojdź\r\n\r\nadditional_layers=Nadbytnie warstwy\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Strōna {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Strōna {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Miniatura strōny {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Znojdź\r\nfind_input.placeholder=Znojdź w dokumyncie…\r\nfind_previous.title=Znojdź piyrwyjsze pokozanie sie tyj frazy\r\nfind_previous_label=Piyrwyjszo\r\nfind_next.title=Znojdź nastympne pokozanie sie tyj frazy\r\nfind_next_label=Dalij\r\nfind_highlight=Ôbznocz wszysko\r\nfind_match_case_label=Poznowej srogość liter\r\nfind_entire_word_label=Cołke słowa\r\nfind_reached_top=Doszło do samego wiyrchu strōny, dalij ôd spodku\r\nfind_reached_bottom=Doszło do samego spodku strōny, dalij ôd wiyrchu\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} ze {{total}}, co pasujōm\r\nfind_match_count[two]={{current}} ze {{total}}, co pasujōm\r\nfind_match_count[few]={{current}} ze {{total}}, co pasujōm\r\nfind_match_count[many]={{current}} ze {{total}}, co pasujōm\r\nfind_match_count[other]={{current}} ze {{total}}, co pasujōm\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(total) ]}\r\nfind_match_count_limit[zero]=Wiyncyj jak {{limit}}, co pasujōm\r\nfind_match_count_limit[one]=Wiyncyj jak {{limit}}, co pasuje\r\nfind_match_count_limit[two]=Wiyncyj jak {{limit}}, co pasujōm\r\nfind_match_count_limit[few]=Wiyncyj jak {{limit}}, co pasujōm\r\nfind_match_count_limit[many]=Wiyncyj jak {{limit}}, co pasujōm\r\nfind_match_count_limit[other]=Wiyncyj jak {{limit}}, co pasujōm\r\nfind_not_found=Fraza niy ma znodniynto\r\n\r\n# Error panel labels\r\nerror_more_info=Wiyncyj informacyji\r\nerror_less_info=Mynij informacyji\r\nerror_close=Zawrzij\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Wiadōmość: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Sztapel: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Zbiōr: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linijo: {{line}}\r\nrendering_error=Przi renderowaniu strōny pokozoł sie feler.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Szyrzka strōny\r\npage_scale_fit=Napasowanie strōny\r\npage_scale_auto=Autōmatyczno srogość\r\npage_scale_actual=Aktualno srogość\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Feler\r\nloading_error=Przi ladowaniu PDFa pokozoł sie feler.\r\ninvalid_file_error=Zły abo felerny zbiōr PDF.\r\nmissing_file_error=Chybio zbioru PDF.\r\nunexpected_response_error=Niyôczekowano ôdpowiydź serwera.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Anotacyjo typu {{type}}]\r\npassword_label=Wkludź hasło, coby ôdewrzić tyn zbiōr PDF.\r\npassword_invalid=Hasło je złe. Sprōbuj jeszcze roz.\r\npassword_ok=OK\r\npassword_cancel=Pociep\r\n\r\nprinting_not_supported=Pozōr: Ta przeglōndarka niy cołkiym ôbsuguje durk.\r\nprinting_not_ready=Pozōr: Tyn PDF niy ma za tela zaladowany do durku.\r\nweb_fonts_disabled=Necowe fōnty sōm zastawiōne: niy idzie użyć wkludzōnych fōntōw PDF.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ta/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=முந்தைய பக்கம்\r\nprevious_label=முந்தையது\r\nnext.title=அடுத்த பக்கம்\r\nnext_label=அடுத்து\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=பக்கம்\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}} இல்\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages={{pagesCount}}) இல் ({{pageNumber}}\r\n\r\nzoom_out.title=சிறிதாக்கு\r\nzoom_out_label=சிறிதாக்கு\r\nzoom_in.title=பெரிதாக்கு\r\nzoom_in_label=பெரிதாக்கு\r\nzoom.title=பெரிதாக்கு\r\npresentation_mode.title=விளக்ககாட்சி பயன்முறைக்கு மாறு\r\npresentation_mode_label=விளக்ககாட்சி பயன்முறை\r\nopen_file.title=கோப்பினை திற\r\nopen_file_label=திற\r\nprint.title=அச்சிடு\r\nprint_label=அச்சிடு\r\ndownload.title=பதிவிறக்கு\r\ndownload_label=பதிவிறக்கு\r\nbookmark.title=தற்போதைய காட்சி (புதிய சாளரத்திற்கு நகலெடு அல்லது புதிய சாளரத்தில் திற)\r\nbookmark_label=தற்போதைய காட்சி\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=கருவிகள்\r\ntools_label=கருவிகள்\r\nfirst_page.title=முதல் பக்கத்திற்கு செல்லவும்\r\nfirst_page.label=முதல் பக்கத்திற்கு செல்லவும்\r\nfirst_page_label=முதல் பக்கத்திற்கு செல்லவும்\r\nlast_page.title=கடைசி பக்கத்திற்கு செல்லவும்\r\nlast_page.label=கடைசி பக்கத்திற்கு செல்லவும்\r\nlast_page_label=கடைசி பக்கத்திற்கு செல்லவும்\r\npage_rotate_cw.title=வலஞ்சுழியாக சுழற்று\r\npage_rotate_cw.label=வலஞ்சுழியாக சுழற்று\r\npage_rotate_cw_label=வலஞ்சுழியாக சுழற்று\r\npage_rotate_ccw.title=இடஞ்சுழியாக சுழற்று\r\npage_rotate_ccw.label=இடஞ்சுழியாக சுழற்று\r\npage_rotate_ccw_label=இடஞ்சுழியாக சுழற்று\r\n\r\ncursor_text_select_tool.title=உரைத் தெரிவு கருவியைச் செயல்படுத்து\r\ncursor_text_select_tool_label=உரைத் தெரிவு கருவி\r\ncursor_hand_tool.title=கைக் கருவிக்ச் செயற்படுத்து\r\ncursor_hand_tool_label=கைக்குருவி\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=ஆவண பண்புகள்...\r\ndocument_properties_label=ஆவண பண்புகள்...\r\ndocument_properties_file_name=கோப்பு பெயர்:\r\ndocument_properties_file_size=கோப்பின் அளவு:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} கிபை ({{size_b}} பைட்டுகள்)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} மெபை ({{size_b}} பைட்டுகள்)\r\ndocument_properties_title=தலைப்பு:\r\ndocument_properties_author=எழுதியவர்\r\ndocument_properties_subject=பொருள்:\r\ndocument_properties_keywords=முக்கிய வார்த்தைகள்:\r\ndocument_properties_creation_date=படைத்த தேதி :\r\ndocument_properties_modification_date=திருத்திய தேதி:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=உருவாக்குபவர்:\r\ndocument_properties_producer=பிடிஎஃப் தயாரிப்பாளர்:\r\ndocument_properties_version=PDF பதிப்பு:\r\ndocument_properties_page_count=பக்க எண்ணிக்கை:\r\ndocument_properties_page_size=பக்க அளவு:\r\ndocument_properties_page_size_unit_inches=இதில்\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=நிலைபதிப்பு\r\ndocument_properties_page_size_orientation_landscape=நிலைபரப்பு\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=கடிதம்\r\ndocument_properties_page_size_name_legal=சட்டபூர்வ\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\ndocument_properties_close=மூடுக\r\n\r\nprint_progress_message=அச்சிடுவதற்கான ஆவணம் தயாராகிறது...\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=ரத்து\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=பக்கப் பட்டியை நிலைமாற்று\r\ntoggle_sidebar_notification.title=பக்கப்பட்டையை நிலைமாற்று (வெளிக்கோடு/இணைப்புகளை ஆவணம் கொண்டுள்ளது)\r\ntoggle_sidebar_label=பக்கப் பட்டியை நிலைமாற்று\r\ndocument_outline.title=ஆவண அடக்கத்தைக் காட்டு (இருமுறைச் சொடுக்கி அனைத்து உறுப்பிடிகளையும் விரி/சேர்)\r\ndocument_outline_label=ஆவண வெளிவரை\r\nattachments.title=இணைப்புகளை காண்பி\r\nattachments_label=இணைப்புகள்\r\nthumbs.title=சிறுபடங்களைக் காண்பி\r\nthumbs_label=சிறுபடங்கள்\r\nfindbar.title=ஆவணத்தில் கண்டறி\r\nfindbar_label=தேடு\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=பக்கம் {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=பக்கத்தின் சிறுபடம் {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=கண்டுபிடி\r\nfind_input.placeholder=ஆவணத்தில் கண்டறி…\r\nfind_previous.title=இந்த சொற்றொடரின் முந்தைய நிகழ்வை தேடு\r\nfind_previous_label=முந்தையது\r\nfind_next.title=இந்த சொற்றொடரின் அடுத்த நிகழ்வை தேடு\r\nfind_next_label=அடுத்து\r\nfind_highlight=அனைத்தையும் தனிப்படுத்து\r\nfind_match_case_label=பேரெழுத்தாக்கத்தை உணர்\r\nfind_reached_top=ஆவணத்தின் மேல் பகுதியை அடைந்தது, அடிப்பக்கத்திலிருந்து தொடர்ந்தது\r\nfind_reached_bottom=ஆவணத்தின் முடிவை அடைந்தது, மேலிருந்து தொடர்ந்தது\r\nfind_not_found=சொற்றொடர் காணவில்லை\r\n\r\n# Error panel labels\r\nerror_more_info=கூடுதல் தகவல்\r\nerror_less_info=குறைந்த தகவல்\r\nerror_close=மூடுக\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=செய்தி: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=ஸ்டேக்: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=கோப்பு: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=வரி: {{line}}\r\nrendering_error=இந்தப் பக்கத்தை காட்சிப்படுத்தும் போது ஒரு பிழை ஏற்பட்டது.\r\n\r\n# Predefined zoom values\r\npage_scale_width=பக்க அகலம்\r\npage_scale_fit=பக்கப் பொருத்தம்\r\npage_scale_auto=தானியக்க பெரிதாக்கல்\r\npage_scale_actual=உண்மையான அளவு\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=பிழை\r\nloading_error=PDF ஐ ஏற்றும் போது ஒரு பிழை ஏற்பட்டது.\r\ninvalid_file_error=செல்லுபடியாகாத அல்லது சிதைந்த PDF கோப்பு.\r\nmissing_file_error=PDF கோப்பு காணவில்லை.\r\nunexpected_response_error=சேவகன் பதில் எதிர்பாரதது.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} விளக்கம்]\r\npassword_label=இந்த PDF கோப்பை திறக்க கடவுச்சொல்லை உள்ளிடவும்.\r\npassword_invalid=செல்லுபடியாகாத கடவுச்சொல், தயை செய்து மீண்டும் முயற்சி செய்க.\r\npassword_ok=சரி\r\npassword_cancel=ரத்து\r\n\r\nprinting_not_supported=எச்சரிக்கை: இந்த உலாவி அச்சிடுதலை முழுமையாக ஆதரிக்கவில்லை.\r\nprinting_not_ready=எச்சரிக்கை: PDF அச்சிட முழுவதுமாக ஏற்றப்படவில்லை.\r\nweb_fonts_disabled=வலை எழுத்துருக்கள் முடக்கப்பட்டுள்ளன: உட்பொதிக்கப்பட்ட PDF எழுத்துருக்களைப் பயன்படுத்த முடியவில்லை.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/te/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=మునుపటి పేజీ\r\nprevious_label=క్రితం\r\nnext.title=తరువాత పేజీ\r\nnext_label=తరువాత\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=పేజీ\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=మొత్తం {{pagesCount}} లో\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=(మొత్తం {{pagesCount}} లో {{pageNumber}}వది)\r\n\r\nzoom_out.title=జూమ్ తగ్గించు\r\nzoom_out_label=జూమ్ తగ్గించు\r\nzoom_in.title=జూమ్ చేయి\r\nzoom_in_label=జూమ్ చేయి\r\nzoom.title=జూమ్\r\npresentation_mode.title=ప్రదర్శనా రీతికి మారు\r\npresentation_mode_label=ప్రదర్శనా రీతి\r\nopen_file.title=ఫైల్ తెరువు\r\nopen_file_label=తెరువు\r\nprint.title=ముద్రించు\r\nprint_label=ముద్రించు\r\ndownload.title=దింపుకోళ్ళు\r\ndownload_label=దింపుకోళ్ళు\r\nbookmark.title=ప్రస్తుత దర్శనం (కాపీ చేయి లేదా కొత్త విండోలో తెరువు)\r\nbookmark_label=ప్రస్తుత దర్శనం\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=పనిముట్లు\r\ntools_label=పనిముట్లు\r\nfirst_page.title=మొదటి పేజీకి వెళ్ళు\r\nfirst_page.label=మొదటి పేజీకి వెళ్ళు\r\nfirst_page_label=మొదటి పేజీకి వెళ్ళు\r\nlast_page.title=చివరి పేజీకి వెళ్ళు\r\nlast_page.label=చివరి పేజీకి వెళ్ళు\r\nlast_page_label=చివరి పేజీకి వెళ్ళు\r\npage_rotate_cw.title=సవ్యదిశలో తిప్పు\r\npage_rotate_cw.label=సవ్యదిశలో తిప్పు\r\npage_rotate_cw_label=సవ్యదిశలో తిప్పు\r\npage_rotate_ccw.title=అపసవ్యదిశలో తిప్పు\r\npage_rotate_ccw.label=అపసవ్యదిశలో తిప్పు\r\npage_rotate_ccw_label=అపసవ్యదిశలో తిప్పు\r\n\r\ncursor_text_select_tool.title=టెక్స్ట్ ఎంపిక సాధనాన్ని ప్రారంభించండి\r\ncursor_text_select_tool_label=టెక్స్ట్ ఎంపిక సాధనం\r\ncursor_hand_tool.title=చేతి సాధనం చేతనించు\r\ncursor_hand_tool_label=చేతి సాధనం\r\n\r\nscroll_vertical_label=నిలువు స్క్రోలింగు\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=పత్రము లక్షణాలు...\r\ndocument_properties_label=పత్రము లక్షణాలు...\r\ndocument_properties_file_name=దస్త్రం పేరు:\r\ndocument_properties_file_size=దస్త్రం పరిమాణం:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=శీర్షిక:\r\ndocument_properties_author=మూలకర్త:\r\ndocument_properties_subject=విషయం:\r\ndocument_properties_keywords=కీ పదాలు:\r\ndocument_properties_creation_date=సృష్టించిన తేదీ:\r\ndocument_properties_modification_date=సవరించిన తేదీ:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=సృష్టికర్త:\r\ndocument_properties_producer=PDF ఉత్పాదకి:\r\ndocument_properties_version=PDF వర్షన్:\r\ndocument_properties_page_count=పేజీల సంఖ్య:\r\ndocument_properties_page_size=కాగితం పరిమాణం:\r\ndocument_properties_page_size_unit_inches=లో\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=నిలువుచిత్రం\r\ndocument_properties_page_size_orientation_landscape=అడ్డచిత్రం\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=లేఖ\r\ndocument_properties_page_size_name_legal=చట్టపరమైన\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized_yes=అవును\r\ndocument_properties_linearized_no=కాదు\r\ndocument_properties_close=మూసివేయి\r\n\r\nprint_progress_message=ముద్రించడానికి పత్రము సిద్ధమవుతున్నది…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=రద్దుచేయి\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=పక్కపట్టీ మార్చు\r\ntoggle_sidebar_label=పక్కపట్టీ మార్చు\r\ndocument_outline.title=పత్రము రూపము చూపించు (డబుల్ క్లిక్ చేసి అన్ని అంశాలను విస్తరించు/కూల్చు)\r\ndocument_outline_label=పత్రము అవుట్‌లైన్\r\nattachments.title=అనుబంధాలు చూపు\r\nattachments_label=అనుబంధాలు\r\nlayers_label=పొరలు\r\nthumbs.title=థంబ్‌నైల్స్ చూపు\r\nthumbs_label=థంబ్‌నైల్స్\r\nfindbar.title=పత్రములో కనుగొనుము\r\nfindbar_label=కనుగొను\r\n\r\nadditional_layers=అదనపు పొరలు\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=పేజి {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=పేజీ {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}} పేజీ నఖచిత్రం\r\n\r\n# Find panel button title and messages\r\nfind_input.title=కనుగొను\r\nfind_input.placeholder=పత్రములో కనుగొను…\r\nfind_previous.title=పదం యొక్క ముందు సంభవాన్ని కనుగొను\r\nfind_previous_label=మునుపటి\r\nfind_next.title=పదం యొక్క తర్వాతి సంభవాన్ని కనుగొను\r\nfind_next_label=తరువాత\r\nfind_highlight=అన్నిటిని ఉద్దీపనం చేయుము\r\nfind_match_case_label=అక్షరముల తేడాతో పోల్చు\r\nfind_entire_word_label=పూర్తి పదాలు\r\nfind_reached_top=పేజీ పైకి చేరుకున్నది, క్రింది నుండి కొనసాగించండి\r\nfind_reached_bottom=పేజీ చివరకు చేరుకున్నది, పైనుండి కొనసాగించండి\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_not_found=పదబంధం కనబడలేదు\r\n\r\n# Error panel labels\r\nerror_more_info=మరింత సమాచారం\r\nerror_less_info=తక్కువ సమాచారం\r\nerror_close=మూసివేయి\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=సందేశం: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=స్టాక్: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=ఫైలు: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=వరుస: {{line}}\r\nrendering_error=పేజీను రెండర్ చేయుటలో ఒక దోషం ఎదురైంది.\r\n\r\n# Predefined zoom values\r\npage_scale_width=పేజీ వెడల్పు\r\npage_scale_fit=పేజీ అమర్పు\r\npage_scale_auto=స్వయంచాలక జూమ్\r\npage_scale_actual=యథార్ధ పరిమాణం\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=దోషం\r\nloading_error=PDF లోడవుచున్నప్పుడు ఒక దోషం ఎదురైంది.\r\ninvalid_file_error=చెల్లని లేదా పాడైన PDF ఫైలు.\r\nmissing_file_error=దొరకని PDF ఫైలు.\r\nunexpected_response_error=అనుకోని సర్వర్ స్పందన.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} టీకా]\r\npassword_label=ఈ PDF ఫైల్ తెరుచుటకు సంకేతపదం ప్రవేశపెట్టుము.\r\npassword_invalid=సంకేతపదం చెల్లదు. దయచేసి మళ్ళీ ప్రయత్నించండి.\r\npassword_ok=సరే\r\npassword_cancel=రద్దుచేయి\r\n\r\nprinting_not_supported=హెచ్చరిక: ఈ విహారిణి చేత ముద్రణ పూర్తిగా తోడ్పాటు లేదు.\r\nprinting_not_ready=హెచ్చరిక: ముద్రణ కొరకు ఈ PDF పూర్తిగా లోడవలేదు.\r\nweb_fonts_disabled=వెబ్ ఫాంట్లు అచేతనించబడెను: ఎంబెడెడ్ PDF ఫాంట్లు ఉపయోగించలేక పోయింది.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/th/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=หน้าก่อนหน้า\r\nprevious_label=ก่อนหน้า\r\nnext.title=หน้าถัดไป\r\nnext_label=ถัดไป\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=หน้า\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=จาก {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} จาก {{pagesCount}})\r\n\r\nzoom_out.title=ซูมออก\r\nzoom_out_label=ซูมออก\r\nzoom_in.title=ซูมเข้า\r\nzoom_in_label=ซูมเข้า\r\nzoom.title=ซูม\r\npresentation_mode.title=สลับเป็นโหมดการนำเสนอ\r\npresentation_mode_label=โหมดการนำเสนอ\r\nopen_file.title=เปิดไฟล์\r\nopen_file_label=เปิด\r\nprint.title=พิมพ์\r\nprint_label=พิมพ์\r\ndownload.title=ดาวน์โหลด\r\ndownload_label=ดาวน์โหลด\r\nbookmark.title=มุมมองปัจจุบัน (คัดลอกหรือเปิดในหน้าต่างใหม่)\r\nbookmark_label=มุมมองปัจจุบัน\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=เครื่องมือ\r\ntools_label=เครื่องมือ\r\nfirst_page.title=ไปยังหน้าแรก\r\nfirst_page.label=ไปยังหน้าแรก\r\nfirst_page_label=ไปยังหน้าแรก\r\nlast_page.title=ไปยังหน้าสุดท้าย\r\nlast_page.label=ไปยังหน้าสุดท้าย\r\nlast_page_label=ไปยังหน้าสุดท้าย\r\npage_rotate_cw.title=หมุนตามเข็มนาฬิกา\r\npage_rotate_cw.label=หมุนตามเข็มนาฬิกา\r\npage_rotate_cw_label=หมุนตามเข็มนาฬิกา\r\npage_rotate_ccw.title=หมุนทวนเข็มนาฬิกา\r\npage_rotate_ccw.label=หมุนทวนเข็มนาฬิกา\r\npage_rotate_ccw_label=หมุนทวนเข็มนาฬิกา\r\n\r\ncursor_text_select_tool.title=เปิดใช้งานเครื่องมือการเลือกข้อความ\r\ncursor_text_select_tool_label=เครื่องมือการเลือกข้อความ\r\ncursor_hand_tool.title=เปิดใช้งานเครื่องมือมือ\r\ncursor_hand_tool_label=เครื่องมือมือ\r\n\r\nscroll_vertical.title=ใช้การเลื่อนแนวตั้ง\r\nscroll_vertical_label=การเลื่อนแนวตั้ง\r\nscroll_horizontal.title=ใช้การเลื่อนแนวนอน\r\nscroll_horizontal_label=การเลื่อนแนวนอน\r\nscroll_wrapped.title=ใช้การเลื่อนแบบคลุม\r\nscroll_wrapped_label=เลื่อนแบบคลุม\r\n\r\nspread_none.title=ไม่ต้องรวมการกระจายหน้า\r\nspread_none_label=ไม่กระจาย\r\nspread_odd.title=รวมการกระจายหน้าเริ่มจากหน้าคี่\r\nspread_odd_label=กระจายอย่างเหลือเศษ\r\nspread_even.title=รวมการกระจายหน้าเริ่มจากหน้าคู่\r\nspread_even_label=กระจายอย่างเท่าเทียม\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=คุณสมบัติเอกสาร…\r\ndocument_properties_label=คุณสมบัติเอกสาร…\r\ndocument_properties_file_name=ชื่อไฟล์:\r\ndocument_properties_file_size=ขนาดไฟล์:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} ไบต์)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} ไบต์)\r\ndocument_properties_title=ชื่อเรื่อง:\r\ndocument_properties_author=ผู้สร้าง:\r\ndocument_properties_subject=ชื่อเรื่อง:\r\ndocument_properties_keywords=คำสำคัญ:\r\ndocument_properties_creation_date=วันที่สร้าง:\r\ndocument_properties_modification_date=วันที่แก้ไข:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=ผู้สร้าง:\r\ndocument_properties_producer=ผู้ผลิต PDF:\r\ndocument_properties_version=รุ่น PDF:\r\ndocument_properties_page_count=จำนวนหน้า:\r\ndocument_properties_page_size=ขนาดหน้า:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=แนวตั้ง\r\ndocument_properties_page_size_orientation_landscape=แนวนอน\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=จดหมาย\r\ndocument_properties_page_size_name_legal=ข้อกฎหมาย\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=มุมมองเว็บแบบรวดเร็ว:\r\ndocument_properties_linearized_yes=ใช่\r\ndocument_properties_linearized_no=ไม่\r\ndocument_properties_close=ปิด\r\n\r\nprint_progress_message=กำลังเตรียมเอกสารสำหรับการพิมพ์…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=ยกเลิก\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=เปิด/ปิดแถบข้าง\r\ntoggle_sidebar_notification.title=เปิด/ปิดแถบข้าง (เอกสารมีเค้าร่าง/ไฟล์แนบ)\r\ntoggle_sidebar_notification2.title=เปิด/ปิดแถบข้าง (เอกสารมีเค้าร่าง/ไฟล์แนบ/เลเยอร์)\r\ntoggle_sidebar_label=เปิด/ปิดแถบข้าง\r\ndocument_outline.title=แสดงเค้าร่างเอกสาร (คลิกสองครั้งเพื่อขยาย/ยุบรายการทั้งหมด)\r\ndocument_outline_label=เค้าร่างเอกสาร\r\nattachments.title=แสดงไฟล์แนบ\r\nattachments_label=ไฟล์แนบ\r\nlayers.title=แสดงเลเยอร์ (คลิกสองครั้งเพื่อรีเซ็ตเลเยอร์ทั้งหมดเป็นสถานะเริ่มต้น)\r\nlayers_label=เลเยอร์\r\nthumbs.title=แสดงภาพขนาดย่อ\r\nthumbs_label=ภาพขนาดย่อ\r\nfindbar.title=ค้นหาในเอกสาร\r\nfindbar_label=ค้นหา\r\n\r\nadditional_layers=เลเยอร์เพิ่มเติม\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=หน้า {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=หน้า {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=ภาพขนาดย่อของหน้า {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=ค้นหา\r\nfind_input.placeholder=ค้นหาในเอกสาร…\r\nfind_previous.title=หาตำแหน่งก่อนหน้าของวลี\r\nfind_previous_label=ก่อนหน้า\r\nfind_next.title=หาตำแหน่งถัดไปของวลี\r\nfind_next_label=ถัดไป\r\nfind_highlight=เน้นสีทั้งหมด\r\nfind_match_case_label=ตัวพิมพ์ใหญ่เล็กตรงกัน\r\nfind_entire_word_label=ทั้งคำ\r\nfind_reached_top=ค้นหาถึงจุดเริ่มต้นของหน้า เริ่มค้นต่อจากด้านล่าง\r\nfind_reached_bottom=ค้นหาถึงจุดสิ้นสุดหน้า เริ่มค้นต่อจากด้านบน\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} จาก {{total}} ที่ตรงกัน\r\nfind_match_count[two]={{current}} จาก {{total}} ที่ตรงกัน\r\nfind_match_count[few]={{current}} จาก {{total}} ที่ตรงกัน\r\nfind_match_count[many]={{current}} จาก {{total}} ที่ตรงกัน\r\nfind_match_count[other]={{current}} จาก {{total}} ที่ตรงกัน\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=มากกว่า {{limit}} ที่ตรงกัน\r\nfind_match_count_limit[one]=มากกว่า {{limit}} ที่ตรงกัน\r\nfind_match_count_limit[two]=มากกว่า {{limit}} ที่ตรงกัน\r\nfind_match_count_limit[few]=มากกว่า {{limit}} ที่ตรงกัน\r\nfind_match_count_limit[many]=มากกว่า {{limit}} ที่ตรงกัน\r\nfind_match_count_limit[other]=มากกว่า {{limit}} ที่ตรงกัน\r\nfind_not_found=ไม่พบวลี\r\n\r\n# Error panel labels\r\nerror_more_info=ข้อมูลเพิ่มเติม\r\nerror_less_info=ข้อมูลน้อยลง\r\nerror_close=ปิด\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=ข้อความ: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=สแตก: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=ไฟล์: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=บรรทัด: {{line}}\r\nrendering_error=เกิดข้อผิดพลาดขณะเรนเดอร์หน้า\r\n\r\n# Predefined zoom values\r\npage_scale_width=ความกว้างหน้า\r\npage_scale_fit=พอดีหน้า\r\npage_scale_auto=ซูมอัตโนมัติ\r\npage_scale_actual=ขนาดจริง\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=ข้อผิดพลาด\r\nloading_error=เกิดข้อผิดพลาดขณะโหลด PDF\r\ninvalid_file_error=ไฟล์ PDF ไม่ถูกต้องหรือเสียหาย\r\nmissing_file_error=ไฟล์ PDF หายไป\r\nunexpected_response_error=การตอบสนองของเซิร์ฟเวอร์ที่ไม่คาดคิด\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[คำอธิบายประกอบ {{type}}]\r\npassword_label=ป้อนรหัสผ่านเพื่อเปิดไฟล์ PDF นี้\r\npassword_invalid=รหัสผ่านไม่ถูกต้อง โปรดลองอีกครั้ง\r\npassword_ok=ตกลง\r\npassword_cancel=ยกเลิก\r\n\r\nprinting_not_supported=คำเตือน: เบราว์เซอร์นี้ไม่ได้สนับสนุนการพิมพ์อย่างเต็มที่\r\nprinting_not_ready=คำเตือน: PDF ไม่ได้รับการโหลดอย่างเต็มที่สำหรับการพิมพ์\r\nweb_fonts_disabled=แบบอักษรเว็บถูกปิดใช้งาน: ไม่สามารถใช้แบบอักษร PDF ฝังตัว\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/tl/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Naunang Pahina\r\nprevious_label=Nakaraan\r\nnext.title=Sunod na Pahina\r\nnext_label=Sunod\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Pahina\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=ng {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} ng {{pagesCount}})\r\n\r\nzoom_out.title=Paliitin\r\nzoom_out_label=Paliitin\r\nzoom_in.title=Palakihin\r\nzoom_in_label=Palakihin\r\nzoom.title=Mag-zoom\r\npresentation_mode.title=Lumipat sa Presentation Mode\r\npresentation_mode_label=Presentation Mode\r\nopen_file.title=Magbukas ng file\r\nopen_file_label=Buksan\r\nprint.title=i-Print\r\nprint_label=i-Print\r\ndownload.title=i-Download\r\ndownload_label=i-Download\r\nbookmark.title=Kasalukuyang tingin (kopyahin o buksan sa bagong window)\r\nbookmark_label=Kasalukuyang tingin\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Mga Kagamitan\r\ntools_label=Mga Kagamitan\r\nfirst_page.title=Pumunta sa Unang Pahina\r\nfirst_page.label=Pumunta sa Unang Pahina\r\nfirst_page_label=Pumunta sa Unang Pahina\r\nlast_page.title=Pumunta sa Huling Pahina\r\nlast_page.label=Pumunta sa Huling Pahina\r\nlast_page_label=Pumunta sa Huling Pahina\r\npage_rotate_cw.title=Paikutin Pakanan\r\npage_rotate_cw.label=Paikutin Pakanan\r\npage_rotate_cw_label=Paikutin Pakanan\r\npage_rotate_ccw.title=Paikutin Pakaliwa\r\npage_rotate_ccw.label=Paikutin Pakaliwa\r\npage_rotate_ccw_label=Paikutin Pakaliwa\r\n\r\ncursor_text_select_tool.title=I-enable ang Text Selection Tool\r\ncursor_text_select_tool_label=Text Selection Tool\r\ncursor_hand_tool.title=I-enable ang Hand Tool\r\ncursor_hand_tool_label=Hand Tool\r\n\r\nscroll_vertical.title=Gumamit ng Vertical Scrolling\r\nscroll_vertical_label=Vertical Scrolling\r\nscroll_horizontal.title=Gumamit ng Horizontal Scrolling\r\nscroll_horizontal_label=Horizontal Scrolling\r\nscroll_wrapped.title=Gumamit ng Wrapped Scrolling\r\nscroll_wrapped_label=Wrapped Scrolling\r\n\r\nspread_none.title=Huwag pagsamahin ang mga page spread\r\nspread_none_label=No Spreads\r\nspread_odd.title=Join page spreads starting with odd-numbered pages\r\nspread_odd_label=Mga Odd Spread\r\nspread_even.title=Pagsamahin ang mga page spread na nagsisimula sa mga even-numbered na pahina\r\nspread_even_label=Mga Even Spread\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Mga Katangian ng Dokumento…\r\ndocument_properties_label=Mga Katangian ng Dokumento…\r\ndocument_properties_file_name=File name:\r\ndocument_properties_file_size=File size:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Pamagat:\r\ndocument_properties_author=May-akda:\r\ndocument_properties_subject=Paksa:\r\ndocument_properties_keywords=Mga keyword:\r\ndocument_properties_creation_date=Petsa ng Pagkakagawa:\r\ndocument_properties_modification_date=Petsa ng Pagkakabago:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Tagalikha:\r\ndocument_properties_producer=PDF Producer:\r\ndocument_properties_version=PDF Version:\r\ndocument_properties_page_count=Bilang ng Pahina:\r\ndocument_properties_page_size=Laki ng Pahina:\r\ndocument_properties_page_size_unit_inches=pulgada\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=patayo\r\ndocument_properties_page_size_orientation_landscape=pahiga\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Fast Web View:\r\ndocument_properties_linearized_yes=Oo\r\ndocument_properties_linearized_no=Hindi\r\ndocument_properties_close=Isara\r\n\r\nprint_progress_message=Inihahanda ang dokumento para sa pag-print…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Kanselahin\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Ipakita/Itago ang Sidebar\r\ntoggle_sidebar_notification.title=Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga attachment)\r\ntoggle_sidebar_notification2.title=Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga attachment/mga layer)\r\ntoggle_sidebar_label=Ipakita/Itago ang Sidebar\r\ndocument_outline.title=Ipakita ang Document Outline (mag-double-click para i-expand/collapse ang laman)\r\ndocument_outline_label=Balangkas ng Dokumento\r\nattachments.title=Ipakita ang mga Attachment\r\nattachments_label=Mga attachment\r\nlayers.title=Ipakita ang mga Layer (mag-double click para mareset ang lahat ng layer sa orihinal na estado)\r\nlayers_label=Mga layer\r\nthumbs.title=Ipakita ang mga Thumbnail\r\nthumbs_label=Mga thumbnail\r\nfindbar.title=Hanapin sa Dokumento\r\nfindbar_label=Hanapin\r\n\r\nadditional_layers=Mga Karagdagang Layer\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Pahina {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Pahina {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Thumbnail ng Pahina {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Hanapin\r\nfind_input.placeholder=Hanapin sa dokumento…\r\nfind_previous.title=Hanapin ang nakaraang pangyayari ng parirala\r\nfind_previous_label=Nakaraan\r\nfind_next.title=Hanapin ang susunod na pangyayari ng parirala\r\nfind_next_label=Susunod\r\nfind_highlight=I-highlight lahat\r\nfind_match_case_label=Itugma ang case\r\nfind_entire_word_label=Buong salita\r\nfind_reached_top=Naabot na ang tuktok ng dokumento, ipinagpatuloy mula sa ilalim\r\nfind_reached_bottom=Naabot na ang dulo ng dokumento, ipinagpatuloy mula sa tuktok\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} ng {{total}} tugma\r\nfind_match_count[two]={{current}} ng {{total}} tugma\r\nfind_match_count[few]={{current}} ng {{total}} tugma\r\nfind_match_count[many]={{current}} ng {{total}} tugma\r\nfind_match_count[other]={{current}} ng {{total}} tugma\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Higit sa {{limit}} tugma\r\nfind_match_count_limit[one]=Higit sa {{limit}} tugma\r\nfind_match_count_limit[two]=Higit sa {{limit}} tugma\r\nfind_match_count_limit[few]=Higit sa {{limit}} tugma\r\nfind_match_count_limit[many]=Higit sa {{limit}} tugma\r\nfind_match_count_limit[other]=Higit sa {{limit}} tugma\r\nfind_not_found=Hindi natagpuan ang parirala\r\n\r\n# Error panel labels\r\nerror_more_info=Karagdagang Impormasyon\r\nerror_less_info=Mas Kaunting Impormasyon\r\nerror_close=Isara\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Mensahe: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=File: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Linya: {{line}}\r\nrendering_error=Nagkaproblema habang nirerender ang pahina.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Lapad ng Pahina\r\npage_scale_fit=Pagkasyahin ang Pahina\r\npage_scale_auto=Automatic Zoom\r\npage_scale_actual=Totoong sukat\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Error\r\nloading_error=Nagkaproblema habang niloload ang PDF.\r\ninvalid_file_error=Di-wasto o sira ang PDF file.\r\nmissing_file_error=Nawawalang PDF file.\r\nunexpected_response_error=Hindi inaasahang tugon ng server.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=Ipasok ang password upang buksan ang PDF file na ito.\r\npassword_invalid=Maling password. Subukan uli.\r\npassword_ok=OK\r\npassword_cancel=Kanselahin\r\n\r\nprinting_not_supported=Babala: Hindi pa ganap na suportado ang pag-print sa browser na ito.\r\nprinting_not_ready=Babala: Hindi ganap na nabuksan ang PDF para sa pag-print.\r\nweb_fonts_disabled=Naka-disable ang mga Web font: hindi kayang gamitin ang mga naka-embed na PDF font.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/tr/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Önceki sayfa\r\nprevious_label=Önceki\r\nnext.title=Sonraki sayfa\r\nnext_label=Sonraki\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Sayfa\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=/ {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} / {{pagesCount}})\r\n\r\nzoom_out.title=Uzaklaştır\r\nzoom_out_label=Uzaklaştır\r\nzoom_in.title=Yaklaştır\r\nzoom_in_label=Yaklaştır\r\nzoom.title=Yakınlaştırma\r\npresentation_mode.title=Sunum moduna geç\r\npresentation_mode_label=Sunum Modu\r\nopen_file.title=Dosya aç\r\nopen_file_label=Aç\r\nprint.title=Yazdır\r\nprint_label=Yazdır\r\ndownload.title=İndir\r\ndownload_label=İndir\r\nbookmark.title=Geçerli görünüm (kopyala veya yeni pencerede aç)\r\nbookmark_label=Geçerli görünüm\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Araçlar\r\ntools_label=Araçlar\r\nfirst_page.title=İlk sayfaya git\r\nfirst_page.label=İlk sayfaya git\r\nfirst_page_label=İlk sayfaya git\r\nlast_page.title=Son sayfaya git\r\nlast_page.label=Son sayfaya git\r\nlast_page_label=Son sayfaya git\r\npage_rotate_cw.title=Saat yönünde döndür\r\npage_rotate_cw.label=Saat yönünde döndür\r\npage_rotate_cw_label=Saat yönünde döndür\r\npage_rotate_ccw.title=Saat yönünün tersine döndür\r\npage_rotate_ccw.label=Saat yönünün tersine döndür\r\npage_rotate_ccw_label=Saat yönünün tersine döndür\r\n\r\ncursor_text_select_tool.title=Metin seçme aracını etkinleştir\r\ncursor_text_select_tool_label=Metin seçme aracı\r\ncursor_hand_tool.title=El aracını etkinleştir\r\ncursor_hand_tool_label=El aracı\r\n\r\nscroll_vertical.title=Dikey kaydırma kullan\r\nscroll_vertical_label=Dikey kaydırma\r\nscroll_horizontal.title=Yatay kaydırma kullan\r\nscroll_horizontal_label=Yatay kaydırma\r\nscroll_wrapped.title=Yan yana kaydırmayı kullan\r\nscroll_wrapped_label=Yan yana kaydırma\r\n\r\nspread_none.title=Yan yana sayfaları birleştirme\r\nspread_none_label=Birleştirme\r\nspread_odd.title=Yan yana sayfaları tek numaralı sayfalardan başlayarak birleştir\r\nspread_odd_label=Tek numaralı\r\nspread_even.title=Yan yana sayfaları çift numaralı sayfalardan başlayarak birleştir\r\nspread_even_label=Çift numaralı\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Belge özellikleri…\r\ndocument_properties_label=Belge özellikleri…\r\ndocument_properties_file_name=Dosya adı:\r\ndocument_properties_file_size=Dosya boyutu:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bayt)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bayt)\r\ndocument_properties_title=Başlık:\r\ndocument_properties_author=Yazar:\r\ndocument_properties_subject=Konu:\r\ndocument_properties_keywords=Anahtar kelimeler:\r\ndocument_properties_creation_date=Oluturma tarihi:\r\ndocument_properties_modification_date=Değiştirme tarihi:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}} {{time}}\r\ndocument_properties_creator=Oluşturan:\r\ndocument_properties_producer=PDF üreticisi:\r\ndocument_properties_version=PDF sürümü:\r\ndocument_properties_page_count=Sayfa sayısı:\r\ndocument_properties_page_size=Sayfa boyutu:\r\ndocument_properties_page_size_unit_inches=inç\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=dikey\r\ndocument_properties_page_size_orientation_landscape=yatay\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Hızlı web görünümü:\r\ndocument_properties_linearized_yes=Evet\r\ndocument_properties_linearized_no=Hayır\r\ndocument_properties_close=Kapat\r\n\r\nprint_progress_message=Belge yazdırılmaya hazırlanıyor…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent=%{{progress}}\r\nprint_progress_close=İptal\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Kenar çubuğunu aç/kapat\r\ntoggle_sidebar_notification.title=Kenar çubuğunu aç/kapat (Belge ana hat/ekler içeriyor)\r\ntoggle_sidebar_notification2.title=Kenar çubuğunu aç/kapat (Belge ana hat/ekler/katmanlar içeriyor)\r\ntoggle_sidebar_label=Kenar çubuğunu aç/kapat\r\ndocument_outline.title=Belge ana hatlarını göster (Tüm öğeleri genişletmek/daraltmak için çift tıklayın)\r\ndocument_outline_label=Belge ana hatları\r\nattachments.title=Ekleri göster\r\nattachments_label=Ekler\r\nlayers.title=Katmanları göster (tüm katmanları varsayılan duruma sıfırlamak için çift tıklayın)\r\nlayers_label=Katmanlar\r\nthumbs.title=Küçük resimleri göster\r\nthumbs_label=Küçük resimler\r\ncurrent_outline_item.title=Mevcut ana hat öğesini bul\r\ncurrent_outline_item_label=Mevcut ana hat öğesi\r\nfindbar.title=Belgede bul\r\nfindbar_label=Bul\r\n\r\nadditional_layers=Ek katmanlar\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Sayfa {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Sayfa {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}}. sayfanın küçük hâli\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Bul\r\nfind_input.placeholder=Belgede bul…\r\nfind_previous.title=Önceki eşleşmeyi bul\r\nfind_previous_label=Önceki\r\nfind_next.title=Sonraki eşleşmeyi bul\r\nfind_next_label=Sonraki\r\nfind_highlight=Tümünü vurgula\r\nfind_match_case_label=Büyük-küçük harfe duyarlı\r\nfind_entire_word_label=Tam sözcükler\r\nfind_reached_top=Belgenin başına ulaşıldı, sonundan devam edildi\r\nfind_reached_bottom=Belgenin sonuna ulaşıldı, başından devam edildi\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{total}} eşleşmeden {{current}}. eşleşme\r\nfind_match_count[two]={{total}} eşleşmeden {{current}}. eşleşme\r\nfind_match_count[few]={{total}} eşleşmeden {{current}}. eşleşme\r\nfind_match_count[many]={{total}} eşleşmeden {{current}}. eşleşme\r\nfind_match_count[other]={{total}} eşleşmeden {{current}}. eşleşme\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]={{limit}} eşleşmeden fazla\r\nfind_match_count_limit[one]={{limit}} eşleşmeden fazla\r\nfind_match_count_limit[two]={{limit}} eşleşmeden fazla\r\nfind_match_count_limit[few]={{limit}} eşleşmeden fazla\r\nfind_match_count_limit[many]={{limit}} eşleşmeden fazla\r\nfind_match_count_limit[other]={{limit}} eşleşmeden fazla\r\nfind_not_found=Eşleşme bulunamadı\r\n\r\n# Error panel labels\r\nerror_more_info=Daha fazla bilgi al\r\nerror_less_info=Daha az bilgi\r\nerror_close=Kapat\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js sürüm {{version}} (yapı: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=İleti: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Yığın: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Dosya: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Satır: {{line}}\r\nrendering_error=Sayfa yorumlanırken bir hata oluştu.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Sayfa genişliği\r\npage_scale_fit=Sayfayı sığdır\r\npage_scale_auto=Otomatik yakınlaştır\r\npage_scale_actual=Gerçek boyut\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent=%{{scale}}\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Hata\r\nloading_error=PDF yüklenirken bir hata oluştu.\r\ninvalid_file_error=Geçersiz veya bozulmuş PDF dosyası.\r\nmissing_file_error=PDF dosyası eksik.\r\nunexpected_response_error=Beklenmeyen sunucu yanıtı.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} işareti]\r\npassword_label=Bu PDF dosyasını açmak için parolasını yazın.\r\npassword_invalid=Geçersiz parola. Lütfen yeniden deneyin.\r\npassword_ok=Tamam\r\npassword_cancel=İptal\r\n\r\nprinting_not_supported=Uyarı: Yazdırma bu tarayıcı tarafından tam olarak desteklenmemektedir.\r\nprinting_not_ready=Uyarı: PDF tamamen yüklenmedi ve yazdırmaya hazır değil.\r\nweb_fonts_disabled=Web fontları devre dışı: Gömülü PDF fontları kullanılamıyor.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/trs/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Pajinâ gunâj rukùu\r\nprevious_label=Sa gachin\r\nnext.title=Pajinâ 'na' ñaan\r\nnext_label=Ne' ñaan\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Ñanj\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=si'iaj {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} of {{pagesCount}})\r\n\r\nzoom_out.title=Nagi'iaj li'\r\nzoom_out_label=Nagi'iaj li'\r\nzoom_in.title=Nagi'iaj niko'\r\nzoom_in_label=Nagi'iaj niko'\r\nzoom.title=dàj nìko ma'an\r\npresentation_mode.title=Naduno' daj ga ma\r\npresentation_mode_label=Daj gà ma\r\nopen_file.title=Na'nïn' chrû ñanj\r\nopen_file_label=Na'nïn\r\nprint.title=Nari' ña du'ua\r\nprint_label=Nari' ñadu'ua\r\ndownload.title=Nadunïnj\r\ndownload_label=Nadunïnj\r\nbookmark.title=Daj hua ma (Guxun' nej na'nïn' riña ventana nakàa)\r\nbookmark_label=Daj hua ma\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Rasun\r\ntools_label=Nej rasùun\r\nfirst_page.title=gun' riña pajina asiniin\r\nfirst_page.label=Gun' riña pajina asiniin\r\nfirst_page_label=Gun' riña pajina asiniin\r\nlast_page.title=Gun' riña pajina rukù ni'in\r\nlast_page.label=Gun' riña pajina rukù ni'inj\r\nlast_page_label=Gun' riña pajina rukù ni'inj\r\npage_rotate_cw.title=Tanikaj ne' huat\r\npage_rotate_cw.label=Tanikaj ne' huat\r\npage_rotate_cw_label=Tanikaj ne' huat\r\npage_rotate_ccw.title=Tanikaj ne' chînt'\r\npage_rotate_ccw.label=Tanikaj ne' chint\r\npage_rotate_ccw_label=Tanikaj ne' chint\r\n\r\ncursor_text_select_tool.title=Dugi'iaj sun' sa ganahui texto\r\ncursor_text_select_tool_label=Nej rasun arajsun' da' nahui' texto\r\ncursor_hand_tool.title=Nachrun' nej rasun\r\ncursor_hand_tool_label=Sa rajsun ro'o'\r\n\r\nscroll_vertical.title=Garasun' dukuán runūu\r\nscroll_vertical_label=Dukuán runūu\r\nscroll_horizontal.title=Garasun' dukuán nikin' nahui\r\nscroll_horizontal_label=Dukuán nikin' nahui\r\nscroll_wrapped.title=Garasun' sa nachree\r\nscroll_wrapped_label=Sa nachree\r\n\r\nspread_none.title=Si nagi'iaj nugun'un' nej pagina hua ninin\r\nspread_none_label=Ni'io daj hua pagina\r\nspread_odd.title=Nagi'iaj nugua'ant nej pajina\r\nspread_odd_label=Ni'io' daj hua libro gurin\r\nspread_even.title=Nakāj dugui' ngà nej pajinâ ayi'ì ngà da' hùi hùi\r\nspread_even_label=Nahuin nìko nej\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Nej sa nikāj ñanj…\r\ndocument_properties_label=Nej sa nikāj ñanj…\r\ndocument_properties_file_name=Si yugui archîbo:\r\ndocument_properties_file_size=Dàj yachìj archîbo:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Si yugui:\r\ndocument_properties_author=Sí girirà:\r\ndocument_properties_subject=Dugui':\r\ndocument_properties_keywords=Nej nuguan' huìi:\r\ndocument_properties_creation_date=Gui gurugui' man:\r\ndocument_properties_modification_date=Nuguan' nahuin nakà:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Guiri ro'\r\ndocument_properties_producer=Sa ri PDF:\r\ndocument_properties_version=PDF Version:\r\ndocument_properties_page_count=Si Guendâ Pâjina:\r\ndocument_properties_page_size=Dàj yachìj pâjina:\r\ndocument_properties_page_size_unit_inches=riña\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=nadu'ua\r\ndocument_properties_page_size_orientation_landscape=dàj huaj\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Da'ngà'a\r\ndocument_properties_page_size_name_legal=Nuguan' a'nï'ïn\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Nanèt chre ni'iajt riña Web:\r\ndocument_properties_linearized_yes=Ga'ue\r\ndocument_properties_linearized_no=Si ga'ue\r\ndocument_properties_close=Narán\r\n\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Duyichin'\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Nadunā barrâ nù yi'nïn\r\ntoggle_sidebar_label=Nadunā barrâ nù yi'nïn\r\nfindbar_label=Narì'\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Narì'\r\nfind_previous_label=Sa gachîn\r\nfind_next_label=Ne' ñaan\r\nfind_highlight=Daran' sa ña'an \r\nfind_match_case_label=Match case\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} si'iaj {{total}} guña gè huaj\r\nfind_match_count[two]={{current}} si'iaj {{total}} guña gè huaj\r\nfind_match_count[few]={{current}} si'iaj {{total}} guña gè huaj\r\nfind_match_count[many]={{current}} si'iaj {{total}} guña gè huaj\r\nfind_match_count[other]={{current}} of {{total}} matches\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Doj ngà da' {{limit}} nej sa nari' dugui'i\r\nfind_match_count_limit[one]=Doj ngà da' {{limit}} sa nari' dugui'i\r\nfind_match_count_limit[two]=Doj ngà da' {{limit}} nej sa nari' dugui'i\r\nfind_match_count_limit[few]=Doj ngà da' {{limit}} nej sa nari' dugui'i\r\nfind_match_count_limit[many]=Doj ngà da' {{limit}} nej sa nari' dugui'i\r\nfind_match_count_limit[other]=Doj ngà da' {{limit}} nej sa nari' dugui'i\r\nfind_not_found=Nu narì'ij nugua'anj\r\n\r\n# Error panel labels\r\nerror_more_info=Doj nuguan' a'min rayi'î nan\r\nerror_less_info=Dòj nuguan' a'min rayi'î nan\r\nerror_close=Narán\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Message: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Naru'ui': {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Archîbo: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Lînia: {{line}}\r\n\r\n# Predefined zoom values\r\npage_scale_actual=Dàj yàchi akuan' nín\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Nitaj si hua hue'ej\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\npassword_ok=Ga'ue\r\npassword_cancel=Duyichin'\r\n\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/uk/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Попередня сторінка\r\nprevious_label=Попередня\r\nnext.title=Наступна сторінка\r\nnext_label=Наступна\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Сторінка\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=із {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} із {{pagesCount}})\r\n\r\nzoom_out.title=Зменшити\r\nzoom_out_label=Зменшити\r\nzoom_in.title=Збільшити\r\nzoom_in_label=Збільшити\r\nzoom.title=Масштаб\r\npresentation_mode.title=Перейти в режим презентації\r\npresentation_mode_label=Режим презентації\r\nopen_file.title=Відкрити файл\r\nopen_file_label=Відкрити\r\nprint.title=Друк\r\nprint_label=Друк\r\ndownload.title=Завантажити\r\ndownload_label=Завантажити\r\nbookmark.title=Поточний вигляд (копіювати чи відкрити в новому вікні)\r\nbookmark_label=Поточний вигляд\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Інструменти\r\ntools_label=Інструменти\r\nfirst_page.title=На першу сторінку\r\nfirst_page.label=На першу сторінку\r\nfirst_page_label=На першу сторінку\r\nlast_page.title=На останню сторінку\r\nlast_page.label=На останню сторінку\r\nlast_page_label=На останню сторінку\r\npage_rotate_cw.title=Повернути за годинниковою стрілкою\r\npage_rotate_cw.label=Повернути за годинниковою стрілкою\r\npage_rotate_cw_label=Повернути за годинниковою стрілкою\r\npage_rotate_ccw.title=Повернути проти годинникової стрілки\r\npage_rotate_ccw.label=Повернути проти годинникової стрілки\r\npage_rotate_ccw_label=Повернути проти годинникової стрілки\r\n\r\ncursor_text_select_tool.title=Увімкнути інструмент вибору тексту\r\ncursor_text_select_tool_label=Інструмент вибору тексту\r\ncursor_hand_tool.title=Увімкнути інструмент \"Рука\"\r\ncursor_hand_tool_label=Інструмент \"Рука\"\r\n\r\nscroll_vertical.title=Використовувати вертикальне прокручування\r\nscroll_vertical_label=Вертикальне прокручування\r\nscroll_horizontal.title=Використовувати горизонтальне прокручування\r\nscroll_horizontal_label=Горизонтальне прокручування\r\nscroll_wrapped.title=Використовувати масштабоване прокручування\r\nscroll_wrapped_label=Масштабоване прокручування\r\n\r\nspread_none.title=Не використовувати розгорнуті сторінки\r\nspread_none_label=Без розгорнутих сторінок\r\nspread_odd.title=Розгорнуті сторінки починаються з непарних номерів\r\nspread_odd_label=Непарні сторінки зліва\r\nspread_even.title=Розгорнуті сторінки починаються з парних номерів\r\nspread_even_label=Парні сторінки зліва\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Властивості документа…\r\ndocument_properties_label=Властивості документа…\r\ndocument_properties_file_name=Назва файла:\r\ndocument_properties_file_size=Розмір файла:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} КБ ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} МБ ({{size_b}} bytes)\r\ndocument_properties_title=Заголовок:\r\ndocument_properties_author=Автор:\r\ndocument_properties_subject=Тема:\r\ndocument_properties_keywords=Ключові слова:\r\ndocument_properties_creation_date=Дата створення:\r\ndocument_properties_modification_date=Дата зміни:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Створено:\r\ndocument_properties_producer=Виробник PDF:\r\ndocument_properties_version=Версія PDF:\r\ndocument_properties_page_count=Кількість сторінок:\r\ndocument_properties_page_size=Розмір сторінки:\r\ndocument_properties_page_size_unit_inches=дюймів\r\ndocument_properties_page_size_unit_millimeters=мм\r\ndocument_properties_page_size_orientation_portrait=книжкова\r\ndocument_properties_page_size_orientation_landscape=альбомна\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Швидкий перегляд в Інтернеті:\r\ndocument_properties_linearized_yes=Так\r\ndocument_properties_linearized_no=Ні\r\ndocument_properties_close=Закрити\r\n\r\nprint_progress_message=Підготовка документу до друку…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Скасувати\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Бічна панель\r\ntoggle_sidebar_notification.title=Перемкнути бічну панель (документ має вміст/вкладення)\r\ntoggle_sidebar_notification2.title=Перемкнути бічну панель (документ містить ескіз/вкладення/шари)\r\ntoggle_sidebar_label=Перемкнути бічну панель\r\ndocument_outline.title=Показати схему документу (подвійний клік для розгортання/згортання елементів)\r\ndocument_outline_label=Схема документа\r\nattachments.title=Показати прикріплення\r\nattachments_label=Прикріплення\r\nlayers.title=Показати шари (двічі клацніть, щоб скинути всі шари до типового стану)\r\nlayers_label=Шари\r\nthumbs.title=Показувати ескізи\r\nthumbs_label=Ескізи\r\ncurrent_outline_item.title=Знайти поточний елемент змісту\r\ncurrent_outline_item_label=Поточний елемент змісту\r\nfindbar.title=Знайти в документі\r\nfindbar_label=Знайти\r\n\r\nadditional_layers=Додаткові шари\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Сторінка {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Сторінка {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Ескіз сторінки {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Знайти\r\nfind_input.placeholder=Знайти в документі…\r\nfind_previous.title=Знайти попереднє входження фрази\r\nfind_previous_label=Попереднє\r\nfind_next.title=Знайти наступне входження фрази\r\nfind_next_label=Наступне\r\nfind_highlight=Підсвітити все\r\nfind_match_case_label=З урахуванням регістру\r\nfind_entire_word_label=Цілі слова\r\nfind_reached_top=Досягнуто початку документу, продовжено з кінця\r\nfind_reached_bottom=Досягнуто кінця документу, продовжено з початку\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} збіг із {{total}}\r\nfind_match_count[two]={{current}} збіги з {{total}}\r\nfind_match_count[few]={{current}} збігів із {{total}}\r\nfind_match_count[many]={{current}} збігів із {{total}}\r\nfind_match_count[other]={{current}} збігів із {{total}}\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Понад {{limit}} збігів\r\nfind_match_count_limit[one]=Більше, ніж {{limit}} збіг\r\nfind_match_count_limit[two]=Більше, ніж {{limit}} збіги\r\nfind_match_count_limit[few]=Більше, ніж {{limit}} збігів\r\nfind_match_count_limit[many]=Понад {{limit}} збігів\r\nfind_match_count_limit[other]=Понад {{limit}} збігів\r\nfind_not_found=Фразу не знайдено\r\n\r\n# Error panel labels\r\nerror_more_info=Більше інформації\r\nerror_less_info=Менше інформації\r\nerror_close=Закрити\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Повідомлення: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Стек: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Файл: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Рядок: {{line}}\r\nrendering_error=Під час виведення сторінки сталася помилка.\r\n\r\n# Predefined zoom values\r\npage_scale_width=За шириною\r\npage_scale_fit=Вмістити\r\npage_scale_auto=Автомасштаб\r\npage_scale_actual=Дійсний розмір\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Помилка\r\nloading_error=Під час завантаження PDF сталася помилка.\r\ninvalid_file_error=Недійсний або пошкоджений PDF-файл.\r\nmissing_file_error=Відсутній PDF-файл.\r\nunexpected_response_error=Неочікувана відповідь сервера.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}}-аннотація]\r\npassword_label=Введіть пароль для відкриття цього PDF-файла.\r\npassword_invalid=Невірний пароль. Спробуйте ще.\r\npassword_ok=Гаразд\r\npassword_cancel=Скасувати\r\n\r\nprinting_not_supported=Попередження: Цей браузер не повністю підтримує друк.\r\nprinting_not_ready=Попередження: PDF не повністю завантажений для друку.\r\nweb_fonts_disabled=Веб-шрифти вимкнено: неможливо використати вбудовані у PDF шрифти.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/ur/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=پچھلا صفحہ\r\nprevious_label=پچھلا\r\nnext.title=اگلا صفحہ\r\nnext_label=آگے\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=صفحہ\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages={{pagesCount}} کا\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} کا {{pagesCount}})\r\n\r\nzoom_out.title=باہر زوم کریں\r\nzoom_out_label=باہر زوم کریں\r\nzoom_in.title=اندر زوم کریں\r\nzoom_in_label=اندر زوم کریں\r\nzoom.title=زوم\r\npresentation_mode.title=پیشکش موڈ میں چلے جائیں\r\npresentation_mode_label=پیشکش موڈ\r\nopen_file.title=مسل کھولیں\r\nopen_file_label=کھولیں\r\nprint.title=چھاپیں\r\nprint_label=چھاپیں\r\ndownload.title=ڈاؤن لوڈ\r\ndownload_label=ڈاؤن لوڈ\r\nbookmark.title=حالیہ نظارہ (نۓ دریچہ میں نقل کریں یا کھولیں)\r\nbookmark_label=حالیہ نظارہ\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=آلات\r\ntools_label=آلات\r\nfirst_page.title=پہلے صفحہ پر جائیں\r\nfirst_page.label=پہلے صفحہ پر جائیں\r\nfirst_page_label=پہلے صفحہ پر جائیں\r\nlast_page.title=آخری صفحہ پر جائیں\r\nlast_page.label=آخری صفحہ پر جائیں\r\nlast_page_label=آخری صفحہ پر جائیں\r\npage_rotate_cw.title=گھڑی وار گھمائیں\r\npage_rotate_cw.label=گھڑی وار گھمائیں\r\npage_rotate_cw_label=گھڑی وار گھمائیں\r\npage_rotate_ccw.title=ضد گھڑی وار گھمائیں\r\npage_rotate_ccw.label=ضد گھڑی وار گھمائیں\r\npage_rotate_ccw_label=ضد گھڑی وار گھمائیں\r\n\r\ncursor_text_select_tool.title=متن کے انتخاب کے ٹول کو فعال بناے\r\ncursor_text_select_tool_label=متن کے انتخاب کا آلہ\r\ncursor_hand_tool.title=ہینڈ ٹول کو فعال بناییں\r\ncursor_hand_tool_label=ہاتھ کا آلہ\r\n\r\nscroll_vertical.title=عمودی اسکرولنگ کا استعمال کریں\r\nscroll_vertical_label=عمودی اسکرولنگ\r\nscroll_horizontal.title=افقی سکرولنگ کا استعمال کریں\r\nscroll_horizontal_label=افقی سکرولنگ\r\n\r\nspread_none.title=صفحہ پھیلانے میں شامل نہ ہوں\r\nspread_none_label=کوئی پھیلاؤ نہیں\r\nspread_odd_label=تاک پھیلاؤ\r\nspread_even_label=جفت پھیلاؤ\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=دستاویز خواص…\r\ndocument_properties_label=دستاویز خواص…\\u0020\r\ndocument_properties_file_name=نام مسل:\r\ndocument_properties_file_size=مسل سائز:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=عنوان:\r\ndocument_properties_author=تخلیق کار:\r\ndocument_properties_subject=موضوع:\r\ndocument_properties_keywords=کلیدی الفاظ:\r\ndocument_properties_creation_date=تخلیق کی تاریخ:\r\ndocument_properties_modification_date=ترمیم کی تاریخ:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}، {{time}}\r\ndocument_properties_creator=تخلیق کار:\r\ndocument_properties_producer=PDF پیدا کار:\r\ndocument_properties_version=PDF ورژن:\r\ndocument_properties_page_count=صفحہ شمار:\r\ndocument_properties_page_size=صفہ کی لمبائ:\r\ndocument_properties_page_size_unit_inches=میں\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=عمودی انداز\r\ndocument_properties_page_size_orientation_landscape=افقى انداز\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=خط\r\ndocument_properties_page_size_name_legal=قانونی\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} {{name}} {{orientation}}\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=تیز ویب دیکھیں:\r\ndocument_properties_linearized_yes=ہاں\r\ndocument_properties_linearized_no=نہیں\r\ndocument_properties_close=بند کریں\r\n\r\nprint_progress_message=چھاپنے کرنے کے لیے دستاویز تیار کیے جا رھے ھیں\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent=*{{progress}}%*\r\nprint_progress_close=منسوخ کریں\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=سلائیڈ ٹوگل کریں\r\ntoggle_sidebar_label=سلائیڈ ٹوگل کریں\r\ndocument_outline.title=دستاویز کی سرخیاں دکھایں (تمام اشیاء وسیع / غائب کرنے کے لیے ڈبل کلک کریں)\r\ndocument_outline_label=دستاویز آؤٹ لائن\r\nattachments.title=منسلکات دکھائیں\r\nattachments_label=منسلکات\r\nthumbs.title=تھمبنیل دکھائیں\r\nthumbs_label=مجمل\r\nfindbar.title=دستاویز میں ڈھونڈیں\r\nfindbar_label=ڈھونڈیں\r\n\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=صفحہ {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=صفحہ {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=صفحے کا مجمل {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=ڈھونڈیں\r\nfind_input.placeholder=دستاویز… میں ڈھونڈیں\r\nfind_previous.title=فقرے کا پچھلا وقوع ڈھونڈیں\r\nfind_previous_label=پچھلا\r\nfind_next.title=فقرے کا اگلہ وقوع ڈھونڈیں\r\nfind_next_label=آگے\r\nfind_highlight=تمام نمایاں کریں\r\nfind_match_case_label=حروف مشابہ کریں\r\nfind_entire_word_label=تمام الفاظ\r\nfind_reached_top=صفحہ کے شروع پر پہنچ گیا، نیچے سے جاری کیا\r\nfind_reached_bottom=صفحہ کے اختتام پر پہنچ گیا، اوپر سے جاری کیا\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{total}} میچ کا {{current}}\r\nfind_match_count[few]={{total}} میچوں میں سے {{current}}\r\nfind_match_count[many]={{total}} میچوں میں سے {{current}}\r\nfind_match_count[other]={{total}} میچوں میں سے {{current}}\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(total) ]}\r\nfind_match_count_limit[zero]={{limit}} سے زیادہ میچ\r\nfind_match_count_limit[one]={{limit}} سے زیادہ میچ\r\nfind_match_count_limit[two]={{limit}} سے زیادہ میچ\r\nfind_match_count_limit[few]={{limit}} سے زیادہ میچ\r\nfind_match_count_limit[many]={{limit}} سے زیادہ میچ\r\nfind_match_count_limit[other]={{limit}} سے زیادہ میچ\r\nfind_not_found=فقرا نہیں ملا\r\n\r\n# Error panel labels\r\nerror_more_info=مزید معلومات\r\nerror_less_info=کم معلومات\r\nerror_close=بند کریں\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=پیغام: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=سٹیک: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=مسل: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=لائن: {{line}}\r\nrendering_error=صفحہ بناتے ہوئے نقص آ گیا۔\r\n\r\n# Predefined zoom values\r\npage_scale_width=صفحہ چوڑائی\r\npage_scale_fit=صفحہ فٹنگ\r\npage_scale_auto=خودکار زوم\r\npage_scale_actual=اصل سائز\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=نقص\r\nloading_error=PDF لوڈ کرتے وقت نقص آ گیا۔\r\ninvalid_file_error=ناجائز یا خراب PDF مسل\r\nmissing_file_error=PDF مسل غائب ہے۔\r\nunexpected_response_error=غیرمتوقع پیش کار جواب\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}.{{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} نوٹ]\r\npassword_label=PDF مسل کھولنے کے لیے پاس ورڈ داخل کریں.\r\npassword_invalid=ناجائز پاس ورڈ. براےؑ کرم دوبارہ کوشش کریں.\r\npassword_ok=ٹھیک ہے\r\npassword_cancel=منسوخ کریں\r\n\r\nprinting_not_supported=تنبیہ:چھاپنا اس براؤزر پر پوری طرح معاونت شدہ نہیں ہے۔\r\nprinting_not_ready=تنبیہ: PDF چھپائی کے لیے پوری طرح لوڈ نہیں ہوئی۔\r\nweb_fonts_disabled=ویب فانٹ نا اہل ہیں: شامل PDF فانٹ استعمال کرنے میں ناکام۔\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/uz/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Oldingi sahifa\r\nprevious_label=Oldingi\r\nnext.title=Keyingi sahifa\r\nnext_label=Keyingi\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=/{{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\n\r\nzoom_out.title=Kichiklashtirish\r\nzoom_out_label=Kichiklashtirish\r\nzoom_in.title=Kattalashtirish\r\nzoom_in_label=Kattalashtirish\r\nzoom.title=Masshtab\r\npresentation_mode.title=Namoyish usuliga oʻtish\r\npresentation_mode_label=Namoyish usuli\r\nopen_file.title=Faylni ochish\r\nopen_file_label=Ochish\r\nprint.title=Chop qilish\r\nprint_label=Chop qilish\r\ndownload.title=Yuklab olish\r\ndownload_label=Yuklab olish\r\nbookmark.title=Joriy koʻrinish (nusxa oling yoki yangi oynada oching)\r\nbookmark_label=Joriy koʻrinish\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Vositalar\r\ntools_label=Vositalar\r\nfirst_page.title=Birinchi sahifaga oʻtish\r\nfirst_page.label=Birinchi sahifaga oʻtish\r\nfirst_page_label=Birinchi sahifaga oʻtish\r\nlast_page.title=Soʻnggi sahifaga oʻtish\r\nlast_page.label=Soʻnggi sahifaga oʻtish\r\nlast_page_label=Soʻnggi sahifaga oʻtish\r\npage_rotate_cw.title=Soat yoʻnalishi boʻyicha burish\r\npage_rotate_cw.label=Soat yoʻnalishi boʻyicha burish\r\npage_rotate_cw_label=Soat yoʻnalishi boʻyicha burish\r\npage_rotate_ccw.title=Soat yoʻnalishiga qarshi burish\r\npage_rotate_ccw.label=Soat yoʻnalishiga qarshi burish\r\npage_rotate_ccw_label=Soat yoʻnalishiga qarshi burish\r\n\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Hujjat xossalari\r\ndocument_properties_label=Hujjat xossalari\r\ndocument_properties_file_name=Fayl nomi:\r\ndocument_properties_file_size=Fayl hajmi:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} bytes)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} bytes)\r\ndocument_properties_title=Nomi:\r\ndocument_properties_author=Muallifi:\r\ndocument_properties_subject=Mavzusi:\r\ndocument_properties_keywords=Kalit so‘zlar\r\ndocument_properties_creation_date=Yaratilgan sanasi:\r\ndocument_properties_modification_date=O‘zgartirilgan sanasi\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Yaratuvchi:\r\ndocument_properties_producer=PDF ishlab chiqaruvchi:\r\ndocument_properties_version=PDF versiyasi:\r\ndocument_properties_page_count=Sahifa soni:\r\ndocument_properties_close=Yopish\r\n\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Yon panelni yoqib/oʻchirib qoʻyish\r\ntoggle_sidebar_label=Yon panelni yoqib/oʻchirib qoʻyish\r\ndocument_outline_label=Hujjat tuzilishi\r\nattachments.title=Ilovalarni ko‘rsatish\r\nattachments_label=Ilovalar\r\nthumbs.title=Nishonchalarni koʻrsatish\r\nthumbs_label=Nishoncha\r\nfindbar.title=Hujjat ichidan topish\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title={{page}} sahifa\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas={{page}} sahifa nishonchasi\r\n\r\n# Find panel button title and messages\r\nfind_previous.title=Soʻzlardagi oldingi hodisani topish\r\nfind_previous_label=Oldingi\r\nfind_next.title=Iboradagi keyingi hodisani topish\r\nfind_next_label=Keyingi\r\nfind_highlight=Barchasini ajratib koʻrsatish\r\nfind_match_case_label=Katta-kichik harflarni farqlash\r\nfind_reached_top=Hujjatning boshigacha yetib keldik, pastdan davom ettiriladi\r\nfind_reached_bottom=Hujjatning oxiriga yetib kelindi, yuqoridan davom ettirladi\r\nfind_not_found=Soʻzlar topilmadi\r\n\r\n# Error panel labels\r\nerror_more_info=Koʻproq ma`lumot\r\nerror_less_info=Kamroq ma`lumot\r\nerror_close=Yopish\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Xabar: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Toʻplam: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Fayl: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Satr: {{line}}\r\nrendering_error=Sahifa renderlanayotganda xato yuz berdi.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Sahifa eni\r\npage_scale_fit=Sahifani moslashtirish\r\npage_scale_auto=Avtomatik masshtab\r\npage_scale_actual=Haqiqiy hajmi\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Xato\r\nloading_error=PDF yuklanayotganda xato yuz berdi.\r\ninvalid_file_error=Xato yoki buzuq PDF fayli.\r\nmissing_file_error=PDF fayl kerak.\r\nunexpected_response_error=Kutilmagan server javobi.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Annotation]\r\npassword_label=PDF faylni ochish uchun parolni kiriting.\r\npassword_invalid=Parol - notoʻgʻri. Qaytadan urinib koʻring.\r\npassword_ok=OK\r\n\r\nprinting_not_supported=Diqqat: chop qilish bruzer tomonidan toʻliq qoʻllab-quvvatlanmaydi.\r\nprinting_not_ready=Diqqat: PDF fayl chop qilish uchun toʻliq yuklanmadi.\r\nweb_fonts_disabled=Veb shriftlar oʻchirilgan: ichki PDF shriftlardan foydalanib boʻlmmaydi.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/vi/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Trang trước\r\nprevious_label=Trước\r\nnext.title=Trang Sau\r\nnext_label=Tiếp\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Trang\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=trên {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} trên {{pagesCount}})\r\n\r\nzoom_out.title=Thu nhỏ\r\nzoom_out_label=Thu nhỏ\r\nzoom_in.title=Phóng to\r\nzoom_in_label=Phóng to\r\nzoom.title=Thu phóng\r\npresentation_mode.title=Chuyển sang chế độ trình chiếu\r\npresentation_mode_label=Chế độ trình chiếu\r\nopen_file.title=Mở tập tin\r\nopen_file_label=Mở tập tin\r\nprint.title=In\r\nprint_label=In\r\ndownload.title=Tải xuống\r\ndownload_label=Tải xuống\r\nbookmark.title=Chế độ xem hiện tại (sao chép hoặc mở trong cửa sổ mới)\r\nbookmark_label=Chế độ xem hiện tại\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Công cụ\r\ntools_label=Công cụ\r\nfirst_page.title=Về trang đầu\r\nfirst_page.label=Về trang đầu\r\nfirst_page_label=Về trang đầu\r\nlast_page.title=Đến trang cuối\r\nlast_page.label=Đến trang cuối\r\nlast_page_label=Đến trang cuối\r\npage_rotate_cw.title=Xoay theo chiều kim đồng hồ\r\npage_rotate_cw.label=Xoay theo chiều kim đồng hồ\r\npage_rotate_cw_label=Xoay theo chiều kim đồng hồ\r\npage_rotate_ccw.title=Xoay ngược chiều kim đồng hồ\r\npage_rotate_ccw.label=Xoay ngược chiều kim đồng hồ\r\npage_rotate_ccw_label=Xoay ngược chiều kim đồng hồ\r\n\r\ncursor_text_select_tool.title=Kích hoạt công cụ chọn vùng văn bản\r\ncursor_text_select_tool_label=Công cụ chọn vùng văn bản\r\ncursor_hand_tool.title=Kích hoạt công cụ con trỏ\r\ncursor_hand_tool_label=Công cụ con trỏ\r\n\r\nscroll_vertical.title=Sử dụng cuộn dọc\r\nscroll_vertical_label=Cuộn dọc\r\nscroll_horizontal.title=Sử dụng cuộn ngang\r\nscroll_horizontal_label=Cuộn ngang\r\nscroll_wrapped.title=Sử dụng cuộn ngắt dòng\r\nscroll_wrapped_label=Cuộn ngắt dòng\r\n\r\nspread_none.title=Không nối rộng trang\r\nspread_none_label=Không có phân cách\r\nspread_odd.title=Nối trang bài bắt đầu với các trang được đánh số lẻ\r\nspread_odd_label=Phân cách theo số lẻ\r\nspread_even.title=Nối trang bài bắt đầu với các trang được đánh số chẵn\r\nspread_even_label=Phân cách theo số chẵn\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Thuộc tính của tài liệu…\r\ndocument_properties_label=Thuộc tính của tài liệu…\r\ndocument_properties_file_name=Tên tập tin:\r\ndocument_properties_file_size=Kích thước:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} byte)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} byte)\r\ndocument_properties_title=Tiêu đề:\r\ndocument_properties_author=Tác giả:\r\ndocument_properties_subject=Chủ đề:\r\ndocument_properties_keywords=Từ khóa:\r\ndocument_properties_creation_date=Ngày tạo:\r\ndocument_properties_modification_date=Ngày sửa đổi:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Người tạo:\r\ndocument_properties_producer=Phần mềm tạo PDF:\r\ndocument_properties_version=Phiên bản PDF:\r\ndocument_properties_page_count=Tổng số trang:\r\ndocument_properties_page_size=Kích thước trang:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=khổ dọc\r\ndocument_properties_page_size_orientation_landscape=khổ ngang\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Thư\r\ndocument_properties_page_size_name_legal=Pháp lý\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=Xem nhanh trên web:\r\ndocument_properties_linearized_yes=Có\r\ndocument_properties_linearized_no=Không\r\ndocument_properties_close=Ðóng\r\n\r\nprint_progress_message=Chuẩn bị trang để in…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Hủy bỏ\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Bật/Tắt thanh lề\r\ntoggle_sidebar_notification.title=Bật tắt thanh lề (tài liệu bao gồm bản phác thảo/tập tin đính kèm)\r\ntoggle_sidebar_notification2.title=Bật tắt thanh lề (tài liệu bao gồm bản phác thảo/tập tin đính kèm/lớp)\r\ntoggle_sidebar_label=Bật/Tắt thanh lề\r\ndocument_outline.title=Hiện tài liệu phác thảo (nhấp đúp vào để mở rộng/thu gọn tất cả các mục)\r\ndocument_outline_label=Bản phác tài liệu\r\nattachments.title=Hiện nội dung đính kèm\r\nattachments_label=Nội dung đính kèm\r\nlayers.title=Hiển thị các lớp (nhấp đúp để đặt lại tất cả các lớp về trạng thái mặc định)\r\nlayers_label=Lớp\r\nthumbs.title=Hiển thị ảnh thu nhỏ\r\nthumbs_label=Ảnh thu nhỏ\r\ncurrent_outline_item.title=Tìm mục phác thảo hiện tại\r\ncurrent_outline_item_label=Mục phác thảo hiện tại\r\nfindbar.title=Tìm trong tài liệu\r\nfindbar_label=Tìm\r\n\r\nadditional_layers=Các lớp bổ sung\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=Trang {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Trang {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Ảnh thu nhỏ của trang {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Tìm\r\nfind_input.placeholder=Tìm trong tài liệu…\r\nfind_previous.title=Tìm cụm từ ở phần trước\r\nfind_previous_label=Trước\r\nfind_next.title=Tìm cụm từ ở phần sau\r\nfind_next_label=Tiếp\r\nfind_highlight=Tô sáng tất cả\r\nfind_match_case_label=Phân biệt hoa, thường\r\nfind_entire_word_label=Toàn bộ từ\r\nfind_reached_top=Đã đến phần đầu tài liệu, quay trở lại từ cuối\r\nfind_reached_bottom=Đã đến phần cuối của tài liệu, quay trở lại từ đầu\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]={{current}} của {{total}} đã trùng\r\nfind_match_count[two]={{current}} của {{total}} đã trùng\r\nfind_match_count[few]={{current}} của {{total}} đã trùng\r\nfind_match_count[many]={{current}} của {{total}} đã trùng\r\nfind_match_count[other]={{current}} của {{total}} đã trùng\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=Nhiều hơn {{limit}} đã trùng\r\nfind_match_count_limit[one]=Nhiều hơn {{limit}} đã trùng\r\nfind_match_count_limit[two]=Nhiều hơn {{limit}} đã trùng\r\nfind_match_count_limit[few]=Nhiều hơn {{limit}} đã trùng\r\nfind_match_count_limit[many]=Nhiều hơn {{limit}} đã trùng\r\nfind_match_count_limit[other]=Nhiều hơn {{limit}} đã trùng\r\nfind_not_found=Không tìm thấy cụm từ này\r\n\r\n# Error panel labels\r\nerror_more_info=Thông tin thêm\r\nerror_less_info=Hiển thị ít thông tin hơn\r\nerror_close=Đóng\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Thông điệp: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Stack: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Tập tin: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Dòng: {{line}}\r\nrendering_error=Lỗi khi hiển thị trang.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Vừa chiều rộng\r\npage_scale_fit=Vừa chiều cao\r\npage_scale_auto=Tự động chọn kích thước\r\npage_scale_actual=Kích thước thực\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Lỗi\r\nloading_error=Lỗi khi tải tài liệu PDF.\r\ninvalid_file_error=Tập tin PDF hỏng hoặc không hợp lệ.\r\nmissing_file_error=Thiếu tập tin PDF.\r\nunexpected_response_error=Máy chủ có phản hồi lạ.\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}, {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Chú thích]\r\npassword_label=Nhập mật khẩu để mở tập tin PDF này.\r\npassword_invalid=Mật khẩu không đúng. Vui lòng thử lại.\r\npassword_ok=OK\r\npassword_cancel=Hủy bỏ\r\n\r\nprinting_not_supported=Cảnh báo: In ấn không được hỗ trợ đầy đủ ở trình duyệt này.\r\nprinting_not_ready=Cảnh báo: PDF chưa được tải hết để in.\r\nweb_fonts_disabled=Phông chữ Web bị vô hiệu hóa: không thể sử dụng các phông chữ PDF được nhúng.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/wo/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Xët wi jiitu\r\nprevious_label=Bi jiitu\r\nnext.title=Xët wi ci topp\r\nnext_label=Bi ci topp\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\n\r\nzoom_out.title=Wàññi\r\nzoom_out_label=Wàññi\r\nzoom_in.title=Yaatal\r\nzoom_in_label=Yaatal\r\nzoom.title=Yambalaŋ\r\npresentation_mode.title=Wañarñil ci anamu wone\r\npresentation_mode_label=Anamu Wone\r\nopen_file.title=Ubbi benn dencukaay\r\nopen_file_label=Ubbi\r\nprint.title=Móol\r\nprint_label=Móol\r\ndownload.title=Yeb yi\r\ndownload_label=Yeb yi\r\nbookmark.title=Wone bi taxaw (duppi walla ubbi palanteer bu bees)\r\nbookmark_label=Wone bi feeñ\r\n\r\n# Secondary toolbar and context menu\r\n\r\n\r\n# Document properties dialog box\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_title=Bopp:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\n\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\nthumbs.title=Wone nataal yu ndaw yi\r\nthumbs_label=Nataal yu ndaw yi\r\nfindbar.title=Gis ci biir jukki bi\r\nfindbar_label=Wut\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Xët {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Wiñet bu xët {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_previous.title=Seet beneen kaddu bu ni mel te jiitu\r\nfind_previous_label=Bi jiitu\r\nfind_next.title=Seet beneen kaddu bu ni mel\r\nfind_next_label=Bi ci topp\r\nfind_highlight=Melaxal lépp\r\nfind_match_case_label=Sàmm jëmmalin wi\r\nfind_reached_top=Jot nañu ndorteel xët wi, kontine dale ko ci suuf\r\nfind_reached_bottom=Jot nañu jeexitalu xët wi, kontine ci ndorte\r\nfind_not_found=Gisiñu kaddu gi\r\n\r\n# Error panel labels\r\nerror_more_info=Xibaar yu gën bari\r\nerror_less_info=Xibaar yu gën bari\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Bataaxal: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Juug: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Dencukaay: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Rëdd : {{line}}\r\nrendering_error=Am njumte bu am bi xët bi di wonewu.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Yaatuwaay bu mët\r\npage_scale_fit=Xët lëmm\r\npage_scale_auto=Yambalaŋ ci saa si\r\npage_scale_actual=Dayo bi am\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Njumte\r\nloading_error=Am na njumte ci yebum dencukaay PDF bi.\r\ninvalid_file_error=Dencukaay PDF bi baaxul walla mu sankar.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[Karmat {{type}}]\r\npassword_ok=OK\r\npassword_cancel=Neenal\r\n\r\nprinting_not_supported=Artu: Joowkat bii nanguwul lool mool.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/xh/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=Iphepha langaphambili\r\nprevious_label=Okwangaphambili\r\nnext.title=Iphepha elilandelayo\r\nnext_label=Okulandelayo\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=Iphepha\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=kwali- {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} kwali {{pagesCount}})\r\n\r\nzoom_out.title=Bhekelisela Kudana\r\nzoom_out_label=Bhekelisela Kudana\r\nzoom_in.title=Sondeza Kufuphi\r\nzoom_in_label=Sondeza Kufuphi\r\nzoom.title=Yandisa / Nciphisa\r\npresentation_mode.title=Tshintshela kwimo yonikezelo\r\npresentation_mode_label=Imo yonikezelo\r\nopen_file.title=Vula Ifayile\r\nopen_file_label=Vula\r\nprint.title=Printa\r\nprint_label=Printa\r\ndownload.title=Khuphela\r\ndownload_label=Khuphela\r\nbookmark.title=Imbonakalo ekhoyo (kopa okanye vula kwifestile entsha)\r\nbookmark_label=Imbonakalo ekhoyo\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=Izixhobo zemiyalelo\r\ntools_label=Izixhobo zemiyalelo\r\nfirst_page.title=Yiya kwiphepha lokuqala\r\nfirst_page.label=Yiya kwiphepha lokuqala\r\nfirst_page_label=Yiya kwiphepha lokuqala\r\nlast_page.title=Yiya kwiphepha lokugqibela\r\nlast_page.label=Yiya kwiphepha lokugqibela\r\nlast_page_label=Yiya kwiphepha lokugqibela\r\npage_rotate_cw.title=Jikelisa ngasekunene\r\npage_rotate_cw.label=Jikelisa ngasekunene\r\npage_rotate_cw_label=Jikelisa ngasekunene\r\npage_rotate_ccw.title=Jikelisa ngasekhohlo\r\npage_rotate_ccw.label=Jikelisa ngasekhohlo\r\npage_rotate_ccw_label=Jikelisa ngasekhohlo\r\n\r\ncursor_text_select_tool.title=Vumela iSixhobo sokuKhetha iTeksti\r\ncursor_text_select_tool_label=ISixhobo sokuKhetha iTeksti\r\ncursor_hand_tool.title=Yenza iSixhobo seSandla siSebenze\r\ncursor_hand_tool_label=ISixhobo seSandla\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=Iipropati zoxwebhu…\r\ndocument_properties_label=Iipropati zoxwebhu…\r\ndocument_properties_file_name=Igama lefayile:\r\ndocument_properties_file_size=Isayizi yefayile:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB (iibhayiti{{size_b}})\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB (iibhayithi{{size_b}})\r\ndocument_properties_title=Umxholo:\r\ndocument_properties_author=Umbhali:\r\ndocument_properties_subject=Umbandela:\r\ndocument_properties_keywords=Amagama aphambili:\r\ndocument_properties_creation_date=Umhla wokwenziwa kwayo:\r\ndocument_properties_modification_date=Umhla wokulungiswa kwayo:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=Umntu oyenzileyo:\r\ndocument_properties_producer=Umvelisi we-PDF:\r\ndocument_properties_version=Uhlelo lwe-PDF:\r\ndocument_properties_page_count=Inani lamaphepha:\r\ndocument_properties_close=Vala\r\n\r\nprint_progress_message=Ilungisa uxwebhu ukuze iprinte…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=Rhoxisa\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=Togola ngebha eseCaleni\r\ntoggle_sidebar_notification.title=ISidebar yeQhosha (uxwebhu lunolwandlalo/iziqhotyoshelwa)\r\ntoggle_sidebar_label=Togola ngebha eseCaleni\r\ndocument_outline.title=Bonisa uLwandlalo loXwebhu (cofa kabini ukuze wandise/diliza zonke izinto)\r\ndocument_outline_label=Isishwankathelo soxwebhu\r\nattachments.title=Bonisa iziqhotyoshelwa\r\nattachments_label=Iziqhoboshelo\r\nthumbs.title=Bonisa ukrobiso kumfanekiso\r\nthumbs_label=Ukrobiso kumfanekiso\r\nfindbar.title=Fumana kuXwebhu\r\nfindbar_label=Fumana\r\n\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=Iphepha {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=Ukrobiso kumfanekiso wephepha {{page}}\r\n\r\n# Find panel button title and messages\r\nfind_input.title=Fumana\r\nfind_input.placeholder=Fumana kuXwebhu…\r\nfind_previous.title=Fumanisa isenzeko sangaphambili sebinzana lamagama\r\nfind_previous_label=Okwangaphambili\r\nfind_next.title=Fumanisa isenzeko esilandelayo sebinzana lamagama\r\nfind_next_label=Okulandelayo\r\nfind_highlight=Qaqambisa konke\r\nfind_match_case_label=Tshatisa ngobukhulu bukanobumba\r\nfind_reached_top=Ufike ngaphezulu ephepheni, kusukwa ngezantsi\r\nfind_reached_bottom=Ufike ekupheleni kwephepha, kusukwa ngaphezulu\r\nfind_not_found=Ibinzana alifunyenwanga\r\n\r\n# Error panel labels\r\nerror_more_info=Inkcazelo Engakumbi\r\nerror_less_info=Inkcazelo Encinane\r\nerror_close=Vala\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=I-PDF.js v{{version}} (yakha: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=Umyalezo: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=Imfumba: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=Ifayile: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=Umgca: {{line}}\r\nrendering_error=Imposiso yenzekile xa bekunikezelwa iphepha.\r\n\r\n# Predefined zoom values\r\npage_scale_width=Ububanzi bephepha\r\npage_scale_fit=Ukulinganiswa kwephepha\r\npage_scale_auto=Ukwandisa/Ukunciphisa Ngokwayo\r\npage_scale_actual=Ubungakanani bokwenene\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=Imposiso\r\nloading_error=Imposiso yenzekile xa kulayishwa i-PDF.\r\ninvalid_file_error=Ifayile ye-PDF engeyiyo okanye eyonakalisiweyo.\r\nmissing_file_error=Ifayile ye-PDF edukileyo.\r\nunexpected_response_error=Impendulo yeseva engalindelekanga.\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} Ubhalo-nqaku]\r\npassword_label=Faka ipasiwedi ukuze uvule le fayile yePDF.\r\npassword_invalid=Ipasiwedi ayisebenzi. Nceda uzame kwakhona.\r\npassword_ok=KULUNGILE\r\npassword_cancel=Rhoxisa\r\n\r\nprinting_not_supported=Isilumkiso: Ukuprinta akuxhaswa ngokupheleleyo yile bhrawuza.\r\nprinting_not_ready=Isilumkiso: IPDF ayihlohlwanga ngokupheleleyo ukwenzela ukuprinta.\r\nweb_fonts_disabled=Iifonti zewebhu ziqhwalelisiwe: ayikwazi ukusebenzisa iifonti ze-PDF ezincanyathelisiweyo.\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/zh-CN/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=上一页\r\nprevious_label=上一页\r\nnext.title=下一页\r\nnext_label=下一页\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=页面\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=/ {{pagesCount}}\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=({{pageNumber}} / {{pagesCount}})\r\n\r\nzoom_out.title=缩小\r\nzoom_out_label=缩小\r\nzoom_in.title=放大\r\nzoom_in_label=放大\r\nzoom.title=缩放\r\npresentation_mode.title=切换到演示模式\r\npresentation_mode_label=演示模式\r\nopen_file.title=打开文件\r\nopen_file_label=打开\r\nprint.title=打印\r\nprint_label=打印\r\ndownload.title=下载\r\ndownload_label=下载\r\nbookmark.title=当前在看的内容（复制或在新窗口中打开）\r\nbookmark_label=当前在看\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=工具\r\ntools_label=工具\r\nfirst_page.title=转到第一页\r\nfirst_page.label=转到第一页\r\nfirst_page_label=转到第一页\r\nlast_page.title=转到最后一页\r\nlast_page.label=转到最后一页\r\nlast_page_label=转到最后一页\r\npage_rotate_cw.title=顺时针旋转\r\npage_rotate_cw.label=顺时针旋转\r\npage_rotate_cw_label=顺时针旋转\r\npage_rotate_ccw.title=逆时针旋转\r\npage_rotate_ccw.label=逆时针旋转\r\npage_rotate_ccw_label=逆时针旋转\r\n\r\ncursor_text_select_tool.title=启用文本选择工具\r\ncursor_text_select_tool_label=文本选择工具\r\ncursor_hand_tool.title=启用手形工具\r\ncursor_hand_tool_label=手形工具\r\n\r\nscroll_vertical.title=使用垂直滚动\r\nscroll_vertical_label=垂直滚动\r\nscroll_horizontal.title=使用水平滚动\r\nscroll_horizontal_label=水平滚动\r\nscroll_wrapped.title=使用平铺滚动\r\nscroll_wrapped_label=平铺滚动\r\n\r\nspread_none.title=不加入衔接页\r\nspread_none_label=单页视图\r\nspread_odd.title=加入衔接页使奇数页作为起始页\r\nspread_odd_label=双页视图\r\nspread_even.title=加入衔接页使偶数页作为起始页\r\nspread_even_label=书籍视图\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=文档属性…\r\ndocument_properties_label=文档属性…\r\ndocument_properties_file_name=文件名:\r\ndocument_properties_file_size=文件大小:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB ({{size_b}} 字节)\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB ({{size_b}} 字节)\r\ndocument_properties_title=标题:\r\ndocument_properties_author=作者:\r\ndocument_properties_subject=主题:\r\ndocument_properties_keywords=关键词:\r\ndocument_properties_creation_date=创建日期:\r\ndocument_properties_modification_date=修改日期:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}}, {{time}}\r\ndocument_properties_creator=创建者:\r\ndocument_properties_producer=PDF 生成器：\r\ndocument_properties_version=PDF 版本:\r\ndocument_properties_page_count=页数:\r\ndocument_properties_page_size=页面大小：\r\ndocument_properties_page_size_unit_inches=英寸\r\ndocument_properties_page_size_unit_millimeters=毫米\r\ndocument_properties_page_size_orientation_portrait=纵向\r\ndocument_properties_page_size_orientation_landscape=横向\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=文本\r\ndocument_properties_page_size_name_legal=法律\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}（{{orientation}}）\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}（{{name}}，{{orientation}}）\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=快速 Web 视图：\r\ndocument_properties_linearized_yes=是\r\ndocument_properties_linearized_no=否\r\ndocument_properties_close=关闭\r\n\r\nprint_progress_message=正在准备打印文档…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=取消\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=切换侧栏\r\ntoggle_sidebar_notification.title=切换侧栏（文档所含的大纲/附件）\r\ntoggle_sidebar_notification2.title=切换侧栏（文档所含的大纲/附件/图层）\r\ntoggle_sidebar_label=切换侧栏\r\ndocument_outline.title=显示文档大纲（双击展开/折叠所有项）\r\ndocument_outline_label=文档大纲\r\nattachments.title=显示附件\r\nattachments_label=附件\r\nlayers.title=显示图层（双击即可将所有图层重置为默认状态）\r\nlayers_label=图层\r\nthumbs.title=显示缩略图\r\nthumbs_label=缩略图\r\ncurrent_outline_item.title=查找当前大纲项目\r\ncurrent_outline_item_label=当前大纲项目\r\nfindbar.title=在文档中查找\r\nfindbar_label=查找\r\n\r\nadditional_layers=其他图层\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=页码 {{page}}\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=页码 {{page}}\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=页面 {{page}} 的缩略图\r\n\r\n# Find panel button title and messages\r\nfind_input.title=查找\r\nfind_input.placeholder=在文档中查找…\r\nfind_previous.title=查找词语上一次出现的位置\r\nfind_previous_label=上一页\r\nfind_next.title=查找词语后一次出现的位置\r\nfind_next_label=下一页\r\nfind_highlight=全部高亮显示\r\nfind_match_case_label=区分大小写\r\nfind_entire_word_label=字词匹配\r\nfind_reached_top=到达文档开头，从末尾继续\r\nfind_reached_bottom=到达文档末尾，从开头继续\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]=第 {{current}} 项，共匹配 {{total}} 项\r\nfind_match_count[two]=第 {{current}} 项，共匹配 {{total}} 项\r\nfind_match_count[few]=第 {{current}} 项，共匹配 {{total}} 项\r\nfind_match_count[many]=第 {{current}} 项，共匹配 {{total}} 项\r\nfind_match_count[other]=第 {{current}} 项，共匹配 {{total}} 项\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=超过 {{limit}} 项匹配\r\nfind_match_count_limit[one]=超过 {{limit}} 项匹配\r\nfind_match_count_limit[two]=超过 {{limit}} 项匹配\r\nfind_match_count_limit[few]=超过 {{limit}} 项匹配\r\nfind_match_count_limit[many]=超过 {{limit}} 项匹配\r\nfind_match_count_limit[other]=超过 {{limit}} 项匹配\r\nfind_not_found=找不到指定词语\r\n\r\n# Error panel labels\r\nerror_more_info=更多信息\r\nerror_less_info=更少信息\r\nerror_close=关闭\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=信息：{{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=堆栈：{{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=文件：{{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=行号：{{line}}\r\nrendering_error=渲染页面时发生错误。\r\n\r\n# Predefined zoom values\r\npage_scale_width=适合页宽\r\npage_scale_fit=适合页面\r\npage_scale_auto=自动缩放\r\npage_scale_actual=实际大小\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=错误\r\nloading_error=载入 PDF 时发生错误。\r\ninvalid_file_error=无效或损坏的 PDF 文件。\r\nmissing_file_error=缺少 PDF 文件。\r\nunexpected_response_error=意外的服务器响应。\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}}，{{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} 注释]\r\npassword_label=输入密码以打开此 PDF 文件。\r\npassword_invalid=密码无效。请重试。\r\npassword_ok=确定\r\npassword_cancel=取消\r\n\r\nprinting_not_supported=警告：此浏览器尚未完整支持打印功能。\r\nprinting_not_ready=警告：此 PDF 未完成载入，无法打印。\r\nweb_fonts_disabled=Web 字体已被禁用：无法使用嵌入的 PDF 字体。\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/locale/zh-TW/viewer.properties",
    "content": "# Copyright 2012 Mozilla Foundation\r\n#\r\n# Licensed under the Apache License, Version 2.0 (the \"License\");\r\n# you may not use this file except in compliance with the License.\r\n# You may obtain a copy of the License at\r\n#\r\n#     http://www.apache.org/licenses/LICENSE-2.0\r\n#\r\n# Unless required by applicable law or agreed to in writing, software\r\n# distributed under the License is distributed on an \"AS IS\" BASIS,\r\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n# See the License for the specific language governing permissions and\r\n# limitations under the License.\r\n\r\n# Main toolbar buttons (tooltips and alt text for images)\r\nprevious.title=上一頁\r\nprevious_label=上一頁\r\nnext.title=下一頁\r\nnext_label=下一頁\r\n\r\n# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.\r\npage.title=第\r\n# LOCALIZATION NOTE (of_pages): \"{{pagesCount}}\" will be replaced by a number\r\n# representing the total number of pages in the document.\r\nof_pages=頁，共 {{pagesCount}} 頁\r\n# LOCALIZATION NOTE (page_of_pages): \"{{pageNumber}}\" and \"{{pagesCount}}\"\r\n# will be replaced by a number representing the currently visible page,\r\n# respectively a number representing the total number of pages in the document.\r\npage_of_pages=（第 {{pageNumber}} 頁，共 {{pagesCount}} 頁）\r\n\r\nzoom_out.title=縮小\r\nzoom_out_label=縮小\r\nzoom_in.title=放大\r\nzoom_in_label=放大\r\nzoom.title=縮放\r\npresentation_mode.title=切換至簡報模式\r\npresentation_mode_label=簡報模式\r\nopen_file.title=開啟檔案\r\nopen_file_label=開啟\r\nprint.title=列印\r\nprint_label=列印\r\ndownload.title=下載\r\ndownload_label=下載\r\nbookmark.title=目前畫面（複製或開啟於新視窗）\r\nbookmark_label=目前檢視\r\n\r\n# Secondary toolbar and context menu\r\ntools.title=工具\r\ntools_label=工具\r\nfirst_page.title=跳到第一頁\r\nfirst_page.label=跳到第一頁\r\nfirst_page_label=跳到第一頁\r\nlast_page.title=跳到最後一頁\r\nlast_page.label=跳到最後一頁\r\nlast_page_label=跳到最後一頁\r\npage_rotate_cw.title=順時針旋轉\r\npage_rotate_cw.label=順時針旋轉\r\npage_rotate_cw_label=順時針旋轉\r\npage_rotate_ccw.title=逆時針旋轉\r\npage_rotate_ccw.label=逆時針旋轉\r\npage_rotate_ccw_label=逆時針旋轉\r\n\r\ncursor_text_select_tool.title=開啟文字選擇工具\r\ncursor_text_select_tool_label=文字選擇工具\r\ncursor_hand_tool.title=開啟頁面移動工具\r\ncursor_hand_tool_label=頁面移動工具\r\n\r\nscroll_vertical.title=使用垂直捲動版面\r\nscroll_vertical_label=垂直捲動\r\nscroll_horizontal.title=使用水平捲動版面\r\nscroll_horizontal_label=水平捲動\r\nscroll_wrapped.title=使用多頁捲動版面\r\nscroll_wrapped_label=多頁捲動\r\n\r\nspread_none.title=不要進行跨頁顯示\r\nspread_none_label=不跨頁\r\nspread_odd.title=從奇數頁開始跨頁\r\nspread_odd_label=奇數跨頁\r\nspread_even.title=從偶數頁開始跨頁\r\nspread_even_label=偶數跨頁\r\n\r\n# Document properties dialog box\r\ndocument_properties.title=文件內容…\r\ndocument_properties_label=文件內容…\r\ndocument_properties_file_name=檔案名稱:\r\ndocument_properties_file_size=檔案大小:\r\n# LOCALIZATION NOTE (document_properties_kb): \"{{size_kb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in kilobytes, respectively in bytes.\r\ndocument_properties_kb={{size_kb}} KB（{{size_b}} 位元組）\r\n# LOCALIZATION NOTE (document_properties_mb): \"{{size_mb}}\" and \"{{size_b}}\"\r\n# will be replaced by the PDF file size in megabytes, respectively in bytes.\r\ndocument_properties_mb={{size_mb}} MB（{{size_b}} 位元組）\r\ndocument_properties_title=標題:\r\ndocument_properties_author=作者:\r\ndocument_properties_subject=主旨:\r\ndocument_properties_keywords=關鍵字:\r\ndocument_properties_creation_date=建立日期:\r\ndocument_properties_modification_date=修改日期:\r\n# LOCALIZATION NOTE (document_properties_date_string): \"{{date}}\" and \"{{time}}\"\r\n# will be replaced by the creation/modification date, and time, of the PDF file.\r\ndocument_properties_date_string={{date}} {{time}}\r\ndocument_properties_creator=建立者:\r\ndocument_properties_producer=PDF 產生器:\r\ndocument_properties_version=PDF 版本:\r\ndocument_properties_page_count=頁數:\r\ndocument_properties_page_size=頁面大小:\r\ndocument_properties_page_size_unit_inches=in\r\ndocument_properties_page_size_unit_millimeters=mm\r\ndocument_properties_page_size_orientation_portrait=垂直\r\ndocument_properties_page_size_orientation_landscape=水平\r\ndocument_properties_page_size_name_a3=A3\r\ndocument_properties_page_size_name_a4=A4\r\ndocument_properties_page_size_name_letter=Letter\r\ndocument_properties_page_size_name_legal=Legal\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}（{{orientation}}）\r\n# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):\r\n# \"{{width}}\", \"{{height}}\", {{unit}}, {{name}}, and {{orientation}} will be replaced by\r\n# the size, respectively their unit of measurement, name, and orientation, of the (current) page.\r\ndocument_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}（{{name}}，{{orientation}}）\r\n# LOCALIZATION NOTE (document_properties_linearized): The linearization status of\r\n# the document; usually called \"Fast Web View\" in English locales of Adobe software.\r\ndocument_properties_linearized=快速 Web 檢視:\r\ndocument_properties_linearized_yes=是\r\ndocument_properties_linearized_no=否\r\ndocument_properties_close=關閉\r\n\r\nprint_progress_message=正在準備列印文件…\r\n# LOCALIZATION NOTE (print_progress_percent): \"{{progress}}\" will be replaced by\r\n# a numerical per cent value.\r\nprint_progress_percent={{progress}}%\r\nprint_progress_close=取消\r\n\r\n# Tooltips and alt text for side panel toolbar buttons\r\n# (the _label strings are alt text for the buttons, the .title strings are\r\n# tooltips)\r\ntoggle_sidebar.title=切換側邊欄\r\ntoggle_sidebar_notification.title=切換側邊攔（文件包含大綱或附件）\r\ntoggle_sidebar_notification2.title=切換側邊欄（包含大綱、附件、圖層的文件）\r\ntoggle_sidebar_label=切換側邊欄\r\ndocument_outline.title=顯示文件大綱（雙擊展開/摺疊所有項目）\r\ndocument_outline_label=文件大綱\r\nattachments.title=顯示附件\r\nattachments_label=附件\r\nlayers.title=顯示圖層（滑鼠雙擊即可將所有圖層重設為預設狀態）\r\nlayers_label=圖層\r\nthumbs.title=顯示縮圖\r\nthumbs_label=縮圖\r\ncurrent_outline_item.title=尋找目前的大綱項目\r\ncurrent_outline_item_label=目前的大綱項目\r\nfindbar.title=在文件中尋找\r\nfindbar_label=尋找\r\n\r\nadditional_layers=其他圖層\r\n# LOCALIZATION NOTE (page_canvas): \"{{page}}\" will be replaced by the page number.\r\npage_canvas=第 {{page}} 頁\r\n# Thumbnails panel item (tooltip and alt text for images)\r\n# LOCALIZATION NOTE (thumb_page_title): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_title=第 {{page}} 頁\r\n# LOCALIZATION NOTE (thumb_page_canvas): \"{{page}}\" will be replaced by the page\r\n# number.\r\nthumb_page_canvas=頁 {{page}} 的縮圖\r\n\r\n# Find panel button title and messages\r\nfind_input.title=尋找\r\nfind_input.placeholder=在文件中搜尋…\r\nfind_previous.title=尋找文字前次出現的位置\r\nfind_previous_label=上一個\r\nfind_next.title=尋找文字下次出現的位置\r\nfind_next_label=下一個\r\nfind_highlight=全部強調標示\r\nfind_match_case_label=區分大小寫\r\nfind_entire_word_label=符合整個字\r\nfind_reached_top=已搜尋至文件頂端，自底端繼續搜尋\r\nfind_reached_bottom=已搜尋至文件底端，自頂端繼續搜尋\r\n# LOCALIZATION NOTE (find_match_count): The supported plural forms are\r\n# [one|two|few|many|other], with [other] as the default value.\r\n# \"{{current}}\" and \"{{total}}\" will be replaced by a number representing the\r\n# index of the currently active find result, respectively a number representing\r\n# the total number of matches in the document.\r\nfind_match_count={[ plural(total) ]}\r\nfind_match_count[one]=第 {{current}} 筆，共找到 {{total}} 筆\r\nfind_match_count[two]=第 {{current}} 筆，共找到 {{total}} 筆\r\nfind_match_count[few]=第 {{current}} 筆，共找到 {{total}} 筆\r\nfind_match_count[many]=第 {{current}} 筆，共找到 {{total}} 筆\r\nfind_match_count[other]=第 {{current}} 筆，共找到 {{total}} 筆\r\n# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are\r\n# [zero|one|two|few|many|other], with [other] as the default value.\r\n# \"{{limit}}\" will be replaced by a numerical value.\r\nfind_match_count_limit={[ plural(limit) ]}\r\nfind_match_count_limit[zero]=找到超過 {{limit}} 筆\r\nfind_match_count_limit[one]=找到超過 {{limit}} 筆\r\nfind_match_count_limit[two]=找到超過 {{limit}} 筆\r\nfind_match_count_limit[few]=找到超過 {{limit}} 筆\r\nfind_match_count_limit[many]=找到超過 {{limit}} 筆\r\nfind_match_count_limit[other]=找到超過 {{limit}} 筆\r\nfind_not_found=找不到指定文字\r\n\r\n# Error panel labels\r\nerror_more_info=更多資訊\r\nerror_less_info=更少資訊\r\nerror_close=關閉\r\n# LOCALIZATION NOTE (error_version_info): \"{{version}}\" and \"{{build}}\" will be\r\n# replaced by the PDF.JS version and build ID.\r\nerror_version_info=PDF.js v{{version}} (build: {{build}})\r\n# LOCALIZATION NOTE (error_message): \"{{message}}\" will be replaced by an\r\n# english string describing the error.\r\nerror_message=訊息: {{message}}\r\n# LOCALIZATION NOTE (error_stack): \"{{stack}}\" will be replaced with a stack\r\n# trace.\r\nerror_stack=堆疊: {{stack}}\r\n# LOCALIZATION NOTE (error_file): \"{{file}}\" will be replaced with a filename\r\nerror_file=檔案: {{file}}\r\n# LOCALIZATION NOTE (error_line): \"{{line}}\" will be replaced with a line number\r\nerror_line=行: {{line}}\r\nrendering_error=描繪頁面時發生錯誤。\r\n\r\n# Predefined zoom values\r\npage_scale_width=頁面寬度\r\npage_scale_fit=縮放至頁面大小\r\npage_scale_auto=自動縮放\r\npage_scale_actual=實際大小\r\n# LOCALIZATION NOTE (page_scale_percent): \"{{scale}}\" will be replaced by a\r\n# numerical scale value.\r\npage_scale_percent={{scale}}%\r\n\r\n# Loading indicator messages\r\nloading_error_indicator=錯誤\r\nloading_error=載入 PDF 時發生錯誤。\r\ninvalid_file_error=無效或毀損的 PDF 檔案。\r\nmissing_file_error=找不到 PDF 檔案。\r\nunexpected_response_error=伺服器回應未預期的內容。\r\n\r\n# LOCALIZATION NOTE (annotation_date_string): \"{{date}}\" and \"{{time}}\" will be\r\n# replaced by the modification date, and time, of the annotation.\r\nannotation_date_string={{date}} {{time}}\r\n\r\n# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.\r\n# \"{{type}}\" will be replaced with an annotation type from a list defined in\r\n# the PDF spec (32000-1:2008 Table 169 – Annotation types).\r\n# Some common types are e.g.: \"Check\", \"Text\", \"Comment\", \"Note\"\r\ntext_annotation_type.alt=[{{type}} 註解]\r\npassword_label=請輸入用來開啟此 PDF 檔案的密碼。\r\npassword_invalid=密碼不正確，請再試一次。\r\npassword_ok=確定\r\npassword_cancel=取消\r\n\r\nprinting_not_supported=警告: 此瀏覽器未完整支援列印功能。\r\nprinting_not_ready=警告: 此 PDF 未完成下載以供列印。\r\nweb_fonts_disabled=已停用網路字型 (Web fonts): 無法使用 PDF 內嵌字型。\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/pdf.js",
    "content": "/**\r\n * @licstart The following is the entire license notice for the\r\n * Javascript code in this page\r\n *\r\n * Copyright 2020 Mozilla Foundation\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *     http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n *\r\n * @licend The above is the entire license notice for the\r\n * Javascript code in this page\r\n */\r\n\r\n(function webpackUniversalModuleDefinition(root, factory) {\r\n\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\tmodule.exports = factory();\r\n\telse if(typeof define === 'function' && define.amd)\r\n\t\tdefine(\"pdfjs-dist/build/pdf\", [], factory);\r\n\telse if(typeof exports === 'object')\r\n\t\texports[\"pdfjs-dist/build/pdf\"] = factory();\r\n\telse\r\n\t\troot[\"pdfjs-dist/build/pdf\"] = root.pdfjsLib = factory();\r\n})(this, function() {\r\nreturn /******/ (() => { // webpackBootstrap\r\n/******/ \tvar __webpack_modules__ = ([\r\n/* 0 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nObject.defineProperty(exports, \"addLinkAttributes\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _display_utils.addLinkAttributes;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"getFilenameFromUrl\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _display_utils.getFilenameFromUrl;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"LinkTarget\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _display_utils.LinkTarget;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"loadScript\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _display_utils.loadScript;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"PDFDateString\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _display_utils.PDFDateString;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"RenderingCancelledException\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _display_utils.RenderingCancelledException;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"build\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _api.build;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"getDocument\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _api.getDocument;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"LoopbackPort\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _api.LoopbackPort;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"PDFDataRangeTransport\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _api.PDFDataRangeTransport;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"PDFWorker\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _api.PDFWorker;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"version\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _api.version;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"CMapCompressionType\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.CMapCompressionType;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"createObjectURL\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.createObjectURL;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"createPromiseCapability\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.createPromiseCapability;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"createValidAbsoluteUrl\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.createValidAbsoluteUrl;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"InvalidPDFException\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.InvalidPDFException;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"MissingPDFException\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.MissingPDFException;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"OPS\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.OPS;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"PasswordResponses\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.PasswordResponses;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"PermissionFlag\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.PermissionFlag;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"removeNullCharacters\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.removeNullCharacters;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"shadow\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.shadow;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"UnexpectedResponseException\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.UnexpectedResponseException;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"UNSUPPORTED_FEATURES\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.UNSUPPORTED_FEATURES;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"Util\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.Util;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"VerbosityLevel\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _util.VerbosityLevel;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"AnnotationLayer\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _annotation_layer.AnnotationLayer;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"apiCompatibilityParams\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _api_compatibility.apiCompatibilityParams;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"GlobalWorkerOptions\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _worker_options.GlobalWorkerOptions;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"renderTextLayer\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _text_layer.renderTextLayer;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"SVGGraphics\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _svg.SVGGraphics;\r\n  }\r\n}));\r\n\r\nvar _display_utils = __w_pdfjs_require__(1);\r\n\r\nvar _api = __w_pdfjs_require__(135);\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _annotation_layer = __w_pdfjs_require__(149);\r\n\r\nvar _api_compatibility = __w_pdfjs_require__(139);\r\n\r\nvar _worker_options = __w_pdfjs_require__(142);\r\n\r\nvar _text_layer = __w_pdfjs_require__(151);\r\n\r\nvar _svg = __w_pdfjs_require__(152);\r\n\r\nvar pdfjsVersion = '2.8.57';\r\nvar pdfjsBuild = '3d33313e4';\r\n{\r\n  var _require = __w_pdfjs_require__(6),\r\n      isNodeJS = _require.isNodeJS;\r\n\r\n  if (isNodeJS) {\r\n    var PDFNodeStream = __w_pdfjs_require__(153).PDFNodeStream;\r\n\r\n    (0, _api.setPDFNetworkStreamFactory)(function (params) {\r\n      return new PDFNodeStream(params);\r\n    });\r\n  } else {\r\n    var PDFNetworkStream = __w_pdfjs_require__(156).PDFNetworkStream;\r\n\r\n    var PDFFetchStream;\r\n\r\n    if ((0, _display_utils.isFetchSupported)()) {\r\n      PDFFetchStream = __w_pdfjs_require__(157).PDFFetchStream;\r\n    }\r\n\r\n    (0, _api.setPDFNetworkStreamFactory)(function (params) {\r\n      if (PDFFetchStream && (0, _display_utils.isValidFetchUrl)(params.url)) {\r\n        return new PDFFetchStream(params);\r\n      }\r\n\r\n      return new PDFNetworkStream(params);\r\n    });\r\n  }\r\n}\r\n\r\n/***/ }),\r\n/* 1 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.addLinkAttributes = addLinkAttributes;\r\nexports.deprecated = deprecated;\r\nexports.getFilenameFromUrl = getFilenameFromUrl;\r\nexports.isFetchSupported = isFetchSupported;\r\nexports.isValidFetchUrl = isValidFetchUrl;\r\nexports.loadScript = loadScript;\r\nexports.StatTimer = exports.RenderingCancelledException = exports.PDFDateString = exports.PageViewport = exports.LinkTarget = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.BaseCMapReaderFactory = exports.BaseCanvasFactory = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar DEFAULT_LINK_REL = \"noopener noreferrer nofollow\";\r\nexports.DEFAULT_LINK_REL = DEFAULT_LINK_REL;\r\nvar SVG_NS = \"http://www.w3.org/2000/svg\";\r\n\r\nvar BaseCanvasFactory = /*#__PURE__*/function () {\r\n  function BaseCanvasFactory() {\r\n    _classCallCheck(this, BaseCanvasFactory);\r\n\r\n    if (this.constructor === BaseCanvasFactory) {\r\n      (0, _util.unreachable)(\"Cannot initialize BaseCanvasFactory.\");\r\n    }\r\n  }\r\n\r\n  _createClass(BaseCanvasFactory, [{\r\n    key: \"create\",\r\n    value: function create(width, height) {\r\n      (0, _util.unreachable)(\"Abstract method `create` called.\");\r\n    }\r\n  }, {\r\n    key: \"reset\",\r\n    value: function reset(canvasAndContext, width, height) {\r\n      if (!canvasAndContext.canvas) {\r\n        throw new Error(\"Canvas is not specified\");\r\n      }\r\n\r\n      if (width <= 0 || height <= 0) {\r\n        throw new Error(\"Invalid canvas size\");\r\n      }\r\n\r\n      canvasAndContext.canvas.width = width;\r\n      canvasAndContext.canvas.height = height;\r\n    }\r\n  }, {\r\n    key: \"destroy\",\r\n    value: function destroy(canvasAndContext) {\r\n      if (!canvasAndContext.canvas) {\r\n        throw new Error(\"Canvas is not specified\");\r\n      }\r\n\r\n      canvasAndContext.canvas.width = 0;\r\n      canvasAndContext.canvas.height = 0;\r\n      canvasAndContext.canvas = null;\r\n      canvasAndContext.context = null;\r\n    }\r\n  }]);\r\n\r\n  return BaseCanvasFactory;\r\n}();\r\n\r\nexports.BaseCanvasFactory = BaseCanvasFactory;\r\n\r\nvar DOMCanvasFactory = /*#__PURE__*/function (_BaseCanvasFactory) {\r\n  _inherits(DOMCanvasFactory, _BaseCanvasFactory);\r\n\r\n  var _super = _createSuper(DOMCanvasFactory);\r\n\r\n  function DOMCanvasFactory() {\r\n    var _this;\r\n\r\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\r\n        _ref$ownerDocument = _ref.ownerDocument,\r\n        ownerDocument = _ref$ownerDocument === void 0 ? globalThis.document : _ref$ownerDocument;\r\n\r\n    _classCallCheck(this, DOMCanvasFactory);\r\n\r\n    _this = _super.call(this);\r\n    _this._document = ownerDocument;\r\n    return _this;\r\n  }\r\n\r\n  _createClass(DOMCanvasFactory, [{\r\n    key: \"create\",\r\n    value: function create(width, height) {\r\n      if (width <= 0 || height <= 0) {\r\n        throw new Error(\"Invalid canvas size\");\r\n      }\r\n\r\n      var canvas = this._document.createElement(\"canvas\");\r\n\r\n      var context = canvas.getContext(\"2d\");\r\n      canvas.width = width;\r\n      canvas.height = height;\r\n      return {\r\n        canvas: canvas,\r\n        context: context\r\n      };\r\n    }\r\n  }]);\r\n\r\n  return DOMCanvasFactory;\r\n}(BaseCanvasFactory);\r\n\r\nexports.DOMCanvasFactory = DOMCanvasFactory;\r\n\r\nvar BaseCMapReaderFactory = /*#__PURE__*/function () {\r\n  function BaseCMapReaderFactory(_ref2) {\r\n    var _ref2$baseUrl = _ref2.baseUrl,\r\n        baseUrl = _ref2$baseUrl === void 0 ? null : _ref2$baseUrl,\r\n        _ref2$isCompressed = _ref2.isCompressed,\r\n        isCompressed = _ref2$isCompressed === void 0 ? false : _ref2$isCompressed;\r\n\r\n    _classCallCheck(this, BaseCMapReaderFactory);\r\n\r\n    if (this.constructor === BaseCMapReaderFactory) {\r\n      (0, _util.unreachable)(\"Cannot initialize BaseCMapReaderFactory.\");\r\n    }\r\n\r\n    this.baseUrl = baseUrl;\r\n    this.isCompressed = isCompressed;\r\n  }\r\n\r\n  _createClass(BaseCMapReaderFactory, [{\r\n    key: \"fetch\",\r\n    value: function () {\r\n      var _fetch = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(_ref3) {\r\n        var _this2 = this;\r\n\r\n        var name, url, compressionType;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                name = _ref3.name;\r\n\r\n                if (this.baseUrl) {\r\n                  _context.next = 3;\r\n                  break;\r\n                }\r\n\r\n                throw new Error('The CMap \"baseUrl\" parameter must be specified, ensure that ' + 'the \"cMapUrl\" and \"cMapPacked\" API parameters are provided.');\r\n\r\n              case 3:\r\n                if (name) {\r\n                  _context.next = 5;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"CMap name must be specified.\");\r\n\r\n              case 5:\r\n                url = this.baseUrl + name + (this.isCompressed ? \".bcmap\" : \"\");\r\n                compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE;\r\n                return _context.abrupt(\"return\", this._fetchData(url, compressionType)[\"catch\"](function (reason) {\r\n                  throw new Error(\"Unable to load \".concat(_this2.isCompressed ? \"binary \" : \"\", \"CMap at: \").concat(url));\r\n                }));\r\n\r\n              case 8:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function fetch(_x) {\r\n        return _fetch.apply(this, arguments);\r\n      }\r\n\r\n      return fetch;\r\n    }()\r\n  }, {\r\n    key: \"_fetchData\",\r\n    value: function _fetchData(url, compressionType) {\r\n      (0, _util.unreachable)(\"Abstract method `_fetchData` called.\");\r\n    }\r\n  }]);\r\n\r\n  return BaseCMapReaderFactory;\r\n}();\r\n\r\nexports.BaseCMapReaderFactory = BaseCMapReaderFactory;\r\n\r\nvar DOMCMapReaderFactory = /*#__PURE__*/function (_BaseCMapReaderFactor) {\r\n  _inherits(DOMCMapReaderFactory, _BaseCMapReaderFactor);\r\n\r\n  var _super2 = _createSuper(DOMCMapReaderFactory);\r\n\r\n  function DOMCMapReaderFactory() {\r\n    _classCallCheck(this, DOMCMapReaderFactory);\r\n\r\n    return _super2.apply(this, arguments);\r\n  }\r\n\r\n  _createClass(DOMCMapReaderFactory, [{\r\n    key: \"_fetchData\",\r\n    value: function _fetchData(url, compressionType) {\r\n      var _this3 = this;\r\n\r\n      if (isFetchSupported() && isValidFetchUrl(url, document.baseURI)) {\r\n        return fetch(url).then( /*#__PURE__*/function () {\r\n          var _ref4 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(response) {\r\n            var cMapData;\r\n            return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n              while (1) {\r\n                switch (_context2.prev = _context2.next) {\r\n                  case 0:\r\n                    if (response.ok) {\r\n                      _context2.next = 2;\r\n                      break;\r\n                    }\r\n\r\n                    throw new Error(response.statusText);\r\n\r\n                  case 2:\r\n                    if (!_this3.isCompressed) {\r\n                      _context2.next = 10;\r\n                      break;\r\n                    }\r\n\r\n                    _context2.t0 = Uint8Array;\r\n                    _context2.next = 6;\r\n                    return response.arrayBuffer();\r\n\r\n                  case 6:\r\n                    _context2.t1 = _context2.sent;\r\n                    cMapData = new _context2.t0(_context2.t1);\r\n                    _context2.next = 15;\r\n                    break;\r\n\r\n                  case 10:\r\n                    _context2.t2 = _util.stringToBytes;\r\n                    _context2.next = 13;\r\n                    return response.text();\r\n\r\n                  case 13:\r\n                    _context2.t3 = _context2.sent;\r\n                    cMapData = (0, _context2.t2)(_context2.t3);\r\n\r\n                  case 15:\r\n                    return _context2.abrupt(\"return\", {\r\n                      cMapData: cMapData,\r\n                      compressionType: compressionType\r\n                    });\r\n\r\n                  case 16:\r\n                  case \"end\":\r\n                    return _context2.stop();\r\n                }\r\n              }\r\n            }, _callee2);\r\n          }));\r\n\r\n          return function (_x2) {\r\n            return _ref4.apply(this, arguments);\r\n          };\r\n        }());\r\n      }\r\n\r\n      return new Promise(function (resolve, reject) {\r\n        var request = new XMLHttpRequest();\r\n        request.open(\"GET\", url, true);\r\n\r\n        if (_this3.isCompressed) {\r\n          request.responseType = \"arraybuffer\";\r\n        }\r\n\r\n        request.onreadystatechange = function () {\r\n          if (request.readyState !== XMLHttpRequest.DONE) {\r\n            return;\r\n          }\r\n\r\n          if (request.status === 200 || request.status === 0) {\r\n            var cMapData;\r\n\r\n            if (_this3.isCompressed && request.response) {\r\n              cMapData = new Uint8Array(request.response);\r\n            } else if (!_this3.isCompressed && request.responseText) {\r\n              cMapData = (0, _util.stringToBytes)(request.responseText);\r\n            }\r\n\r\n            if (cMapData) {\r\n              resolve({\r\n                cMapData: cMapData,\r\n                compressionType: compressionType\r\n              });\r\n              return;\r\n            }\r\n          }\r\n\r\n          reject(new Error(request.statusText));\r\n        };\r\n\r\n        request.send(null);\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return DOMCMapReaderFactory;\r\n}(BaseCMapReaderFactory);\r\n\r\nexports.DOMCMapReaderFactory = DOMCMapReaderFactory;\r\n\r\nvar DOMSVGFactory = /*#__PURE__*/function () {\r\n  function DOMSVGFactory() {\r\n    _classCallCheck(this, DOMSVGFactory);\r\n  }\r\n\r\n  _createClass(DOMSVGFactory, [{\r\n    key: \"create\",\r\n    value: function create(width, height) {\r\n      (0, _util.assert)(width > 0 && height > 0, \"Invalid SVG dimensions\");\r\n      var svg = document.createElementNS(SVG_NS, \"svg:svg\");\r\n      svg.setAttribute(\"version\", \"1.1\");\r\n      svg.setAttribute(\"width\", width + \"px\");\r\n      svg.setAttribute(\"height\", height + \"px\");\r\n      svg.setAttribute(\"preserveAspectRatio\", \"none\");\r\n      svg.setAttribute(\"viewBox\", \"0 0 \" + width + \" \" + height);\r\n      return svg;\r\n    }\r\n  }, {\r\n    key: \"createElement\",\r\n    value: function createElement(type) {\r\n      (0, _util.assert)(typeof type === \"string\", \"Invalid SVG element type\");\r\n      return document.createElementNS(SVG_NS, type);\r\n    }\r\n  }]);\r\n\r\n  return DOMSVGFactory;\r\n}();\r\n\r\nexports.DOMSVGFactory = DOMSVGFactory;\r\n\r\nvar PageViewport = /*#__PURE__*/function () {\r\n  function PageViewport(_ref5) {\r\n    var viewBox = _ref5.viewBox,\r\n        scale = _ref5.scale,\r\n        rotation = _ref5.rotation,\r\n        _ref5$offsetX = _ref5.offsetX,\r\n        offsetX = _ref5$offsetX === void 0 ? 0 : _ref5$offsetX,\r\n        _ref5$offsetY = _ref5.offsetY,\r\n        offsetY = _ref5$offsetY === void 0 ? 0 : _ref5$offsetY,\r\n        _ref5$dontFlip = _ref5.dontFlip,\r\n        dontFlip = _ref5$dontFlip === void 0 ? false : _ref5$dontFlip;\r\n\r\n    _classCallCheck(this, PageViewport);\r\n\r\n    this.viewBox = viewBox;\r\n    this.scale = scale;\r\n    this.rotation = rotation;\r\n    this.offsetX = offsetX;\r\n    this.offsetY = offsetY;\r\n    var centerX = (viewBox[2] + viewBox[0]) / 2;\r\n    var centerY = (viewBox[3] + viewBox[1]) / 2;\r\n    var rotateA, rotateB, rotateC, rotateD;\r\n    rotation = rotation % 360;\r\n    rotation = rotation < 0 ? rotation + 360 : rotation;\r\n\r\n    switch (rotation) {\r\n      case 180:\r\n        rotateA = -1;\r\n        rotateB = 0;\r\n        rotateC = 0;\r\n        rotateD = 1;\r\n        break;\r\n\r\n      case 90:\r\n        rotateA = 0;\r\n        rotateB = 1;\r\n        rotateC = 1;\r\n        rotateD = 0;\r\n        break;\r\n\r\n      case 270:\r\n        rotateA = 0;\r\n        rotateB = -1;\r\n        rotateC = -1;\r\n        rotateD = 0;\r\n        break;\r\n\r\n      case 0:\r\n        rotateA = 1;\r\n        rotateB = 0;\r\n        rotateC = 0;\r\n        rotateD = -1;\r\n        break;\r\n\r\n      default:\r\n        throw new Error(\"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\");\r\n    }\r\n\r\n    if (dontFlip) {\r\n      rotateC = -rotateC;\r\n      rotateD = -rotateD;\r\n    }\r\n\r\n    var offsetCanvasX, offsetCanvasY;\r\n    var width, height;\r\n\r\n    if (rotateA === 0) {\r\n      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;\r\n      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;\r\n      width = Math.abs(viewBox[3] - viewBox[1]) * scale;\r\n      height = Math.abs(viewBox[2] - viewBox[0]) * scale;\r\n    } else {\r\n      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;\r\n      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;\r\n      width = Math.abs(viewBox[2] - viewBox[0]) * scale;\r\n      height = Math.abs(viewBox[3] - viewBox[1]) * scale;\r\n    }\r\n\r\n    this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];\r\n    this.width = width;\r\n    this.height = height;\r\n  }\r\n\r\n  _createClass(PageViewport, [{\r\n    key: \"clone\",\r\n    value: function clone() {\r\n      var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\r\n          _ref6$scale = _ref6.scale,\r\n          scale = _ref6$scale === void 0 ? this.scale : _ref6$scale,\r\n          _ref6$rotation = _ref6.rotation,\r\n          rotation = _ref6$rotation === void 0 ? this.rotation : _ref6$rotation,\r\n          _ref6$offsetX = _ref6.offsetX,\r\n          offsetX = _ref6$offsetX === void 0 ? this.offsetX : _ref6$offsetX,\r\n          _ref6$offsetY = _ref6.offsetY,\r\n          offsetY = _ref6$offsetY === void 0 ? this.offsetY : _ref6$offsetY,\r\n          _ref6$dontFlip = _ref6.dontFlip,\r\n          dontFlip = _ref6$dontFlip === void 0 ? false : _ref6$dontFlip;\r\n\r\n      return new PageViewport({\r\n        viewBox: this.viewBox.slice(),\r\n        scale: scale,\r\n        rotation: rotation,\r\n        offsetX: offsetX,\r\n        offsetY: offsetY,\r\n        dontFlip: dontFlip\r\n      });\r\n    }\r\n  }, {\r\n    key: \"convertToViewportPoint\",\r\n    value: function convertToViewportPoint(x, y) {\r\n      return _util.Util.applyTransform([x, y], this.transform);\r\n    }\r\n  }, {\r\n    key: \"convertToViewportRectangle\",\r\n    value: function convertToViewportRectangle(rect) {\r\n      var topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);\r\n\r\n      var bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform);\r\n\r\n      return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];\r\n    }\r\n  }, {\r\n    key: \"convertToPdfPoint\",\r\n    value: function convertToPdfPoint(x, y) {\r\n      return _util.Util.applyInverseTransform([x, y], this.transform);\r\n    }\r\n  }]);\r\n\r\n  return PageViewport;\r\n}();\r\n\r\nexports.PageViewport = PageViewport;\r\n\r\nvar RenderingCancelledException = /*#__PURE__*/function (_BaseException) {\r\n  _inherits(RenderingCancelledException, _BaseException);\r\n\r\n  var _super3 = _createSuper(RenderingCancelledException);\r\n\r\n  function RenderingCancelledException(msg, type) {\r\n    var _this4;\r\n\r\n    _classCallCheck(this, RenderingCancelledException);\r\n\r\n    _this4 = _super3.call(this, msg);\r\n    _this4.type = type;\r\n    return _this4;\r\n  }\r\n\r\n  return RenderingCancelledException;\r\n}(_util.BaseException);\r\n\r\nexports.RenderingCancelledException = RenderingCancelledException;\r\nvar LinkTarget = {\r\n  NONE: 0,\r\n  SELF: 1,\r\n  BLANK: 2,\r\n  PARENT: 3,\r\n  TOP: 4\r\n};\r\nexports.LinkTarget = LinkTarget;\r\n\r\nfunction addLinkAttributes(link) {\r\n  var _ref7 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\r\n      url = _ref7.url,\r\n      target = _ref7.target,\r\n      rel = _ref7.rel,\r\n      _ref7$enabled = _ref7.enabled,\r\n      enabled = _ref7$enabled === void 0 ? true : _ref7$enabled;\r\n\r\n  (0, _util.assert)(url && typeof url === \"string\", 'addLinkAttributes: A valid \"url\" parameter must provided.');\r\n  var urlNullRemoved = (0, _util.removeNullCharacters)(url);\r\n\r\n  if (enabled) {\r\n    link.href = link.title = urlNullRemoved;\r\n  } else {\r\n    link.href = \"\";\r\n    link.title = \"Disabled: \".concat(urlNullRemoved);\r\n\r\n    link.onclick = function () {\r\n      return false;\r\n    };\r\n  }\r\n\r\n  var targetStr = \"\";\r\n\r\n  switch (target) {\r\n    case LinkTarget.NONE:\r\n      break;\r\n\r\n    case LinkTarget.SELF:\r\n      targetStr = \"_self\";\r\n      break;\r\n\r\n    case LinkTarget.BLANK:\r\n      targetStr = \"_blank\";\r\n      break;\r\n\r\n    case LinkTarget.PARENT:\r\n      targetStr = \"_parent\";\r\n      break;\r\n\r\n    case LinkTarget.TOP:\r\n      targetStr = \"_top\";\r\n      break;\r\n  }\r\n\r\n  link.target = targetStr;\r\n  link.rel = typeof rel === \"string\" ? rel : DEFAULT_LINK_REL;\r\n}\r\n\r\nfunction getFilenameFromUrl(url) {\r\n  var anchor = url.indexOf(\"#\");\r\n  var query = url.indexOf(\"?\");\r\n  var end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length);\r\n  return url.substring(url.lastIndexOf(\"/\", end) + 1, end);\r\n}\r\n\r\nvar StatTimer = /*#__PURE__*/function () {\r\n  function StatTimer() {\r\n    _classCallCheck(this, StatTimer);\r\n\r\n    this.started = Object.create(null);\r\n    this.times = [];\r\n  }\r\n\r\n  _createClass(StatTimer, [{\r\n    key: \"time\",\r\n    value: function time(name) {\r\n      if (name in this.started) {\r\n        (0, _util.warn)(\"Timer is already running for \".concat(name));\r\n      }\r\n\r\n      this.started[name] = Date.now();\r\n    }\r\n  }, {\r\n    key: \"timeEnd\",\r\n    value: function timeEnd(name) {\r\n      if (!(name in this.started)) {\r\n        (0, _util.warn)(\"Timer has not been started for \".concat(name));\r\n      }\r\n\r\n      this.times.push({\r\n        name: name,\r\n        start: this.started[name],\r\n        end: Date.now()\r\n      });\r\n      delete this.started[name];\r\n    }\r\n  }, {\r\n    key: \"toString\",\r\n    value: function toString() {\r\n      var outBuf = [];\r\n      var longest = 0;\r\n\r\n      var _iterator = _createForOfIteratorHelper(this.times),\r\n          _step;\r\n\r\n      try {\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          var time = _step.value;\r\n          var name = time.name;\r\n\r\n          if (name.length > longest) {\r\n            longest = name.length;\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n\r\n      var _iterator2 = _createForOfIteratorHelper(this.times),\r\n          _step2;\r\n\r\n      try {\r\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n          var _time = _step2.value;\r\n          var duration = _time.end - _time.start;\r\n          outBuf.push(\"\".concat(_time.name.padEnd(longest), \" \").concat(duration, \"ms\\n\"));\r\n        }\r\n      } catch (err) {\r\n        _iterator2.e(err);\r\n      } finally {\r\n        _iterator2.f();\r\n      }\r\n\r\n      return outBuf.join(\"\");\r\n    }\r\n  }]);\r\n\r\n  return StatTimer;\r\n}();\r\n\r\nexports.StatTimer = StatTimer;\r\n\r\nfunction isFetchSupported() {\r\n  return typeof fetch !== \"undefined\" && typeof Response !== \"undefined\" && \"body\" in Response.prototype && typeof ReadableStream !== \"undefined\";\r\n}\r\n\r\nfunction isValidFetchUrl(url, baseUrl) {\r\n  try {\r\n    var _ref8 = baseUrl ? new URL(url, baseUrl) : new URL(url),\r\n        protocol = _ref8.protocol;\r\n\r\n    return protocol === \"http:\" || protocol === \"https:\";\r\n  } catch (ex) {\r\n    return false;\r\n  }\r\n}\r\n\r\nfunction loadScript(src) {\r\n  var removeScriptElement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n  return new Promise(function (resolve, reject) {\r\n    var script = document.createElement(\"script\");\r\n    script.src = src;\r\n\r\n    script.onload = function (evt) {\r\n      if (removeScriptElement) {\r\n        script.remove();\r\n      }\r\n\r\n      resolve(evt);\r\n    };\r\n\r\n    script.onerror = function () {\r\n      reject(new Error(\"Cannot load script at: \".concat(script.src)));\r\n    };\r\n\r\n    (document.head || document.documentElement).appendChild(script);\r\n  });\r\n}\r\n\r\nfunction deprecated(details) {\r\n  console.log(\"Deprecated API usage: \" + details);\r\n}\r\n\r\nvar pdfDateStringRegex;\r\n\r\nvar PDFDateString = /*#__PURE__*/function () {\r\n  function PDFDateString() {\r\n    _classCallCheck(this, PDFDateString);\r\n  }\r\n\r\n  _createClass(PDFDateString, null, [{\r\n    key: \"toDateObject\",\r\n    value: function toDateObject(input) {\r\n      if (!input || !(0, _util.isString)(input)) {\r\n        return null;\r\n      }\r\n\r\n      if (!pdfDateStringRegex) {\r\n        pdfDateStringRegex = new RegExp(\"^D:\" + \"(\\\\d{4})\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"(\\\\d{2})?\" + \"([Z|+|-])?\" + \"(\\\\d{2})?\" + \"'?\" + \"(\\\\d{2})?\" + \"'?\");\r\n      }\r\n\r\n      var matches = pdfDateStringRegex.exec(input);\r\n\r\n      if (!matches) {\r\n        return null;\r\n      }\r\n\r\n      var year = parseInt(matches[1], 10);\r\n      var month = parseInt(matches[2], 10);\r\n      month = month >= 1 && month <= 12 ? month - 1 : 0;\r\n      var day = parseInt(matches[3], 10);\r\n      day = day >= 1 && day <= 31 ? day : 1;\r\n      var hour = parseInt(matches[4], 10);\r\n      hour = hour >= 0 && hour <= 23 ? hour : 0;\r\n      var minute = parseInt(matches[5], 10);\r\n      minute = minute >= 0 && minute <= 59 ? minute : 0;\r\n      var second = parseInt(matches[6], 10);\r\n      second = second >= 0 && second <= 59 ? second : 0;\r\n      var universalTimeRelation = matches[7] || \"Z\";\r\n      var offsetHour = parseInt(matches[8], 10);\r\n      offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;\r\n      var offsetMinute = parseInt(matches[9], 10) || 0;\r\n      offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;\r\n\r\n      if (universalTimeRelation === \"-\") {\r\n        hour += offsetHour;\r\n        minute += offsetMinute;\r\n      } else if (universalTimeRelation === \"+\") {\r\n        hour -= offsetHour;\r\n        minute -= offsetMinute;\r\n      }\r\n\r\n      return new Date(Date.UTC(year, month, day, hour, minute, second));\r\n    }\r\n  }]);\r\n\r\n  return PDFDateString;\r\n}();\r\n\r\nexports.PDFDateString = PDFDateString;\r\n\r\n/***/ }),\r\n/* 2 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nmodule.exports = __w_pdfjs_require__(3);\r\n\r\n/***/ }),\r\n/* 3 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n/* module decorator */ module = __w_pdfjs_require__.nmd(module);\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nvar runtime = function (exports) {\r\n  \"use strict\";\r\n\r\n  var Op = Object.prototype;\r\n  var hasOwn = Op.hasOwnProperty;\r\n  var undefined;\r\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\r\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\r\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\r\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\r\n\r\n  function define(obj, key, value) {\r\n    Object.defineProperty(obj, key, {\r\n      value: value,\r\n      enumerable: true,\r\n      configurable: true,\r\n      writable: true\r\n    });\r\n    return obj[key];\r\n  }\r\n\r\n  try {\r\n    define({}, \"\");\r\n  } catch (err) {\r\n    define = function define(obj, key, value) {\r\n      return obj[key] = value;\r\n    };\r\n  }\r\n\r\n  function wrap(innerFn, outerFn, self, tryLocsList) {\r\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\r\n    var generator = Object.create(protoGenerator.prototype);\r\n    var context = new Context(tryLocsList || []);\r\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\r\n    return generator;\r\n  }\r\n\r\n  exports.wrap = wrap;\r\n\r\n  function tryCatch(fn, obj, arg) {\r\n    try {\r\n      return {\r\n        type: \"normal\",\r\n        arg: fn.call(obj, arg)\r\n      };\r\n    } catch (err) {\r\n      return {\r\n        type: \"throw\",\r\n        arg: err\r\n      };\r\n    }\r\n  }\r\n\r\n  var GenStateSuspendedStart = \"suspendedStart\";\r\n  var GenStateSuspendedYield = \"suspendedYield\";\r\n  var GenStateExecuting = \"executing\";\r\n  var GenStateCompleted = \"completed\";\r\n  var ContinueSentinel = {};\r\n\r\n  function Generator() {}\r\n\r\n  function GeneratorFunction() {}\r\n\r\n  function GeneratorFunctionPrototype() {}\r\n\r\n  var IteratorPrototype = {};\r\n\r\n  IteratorPrototype[iteratorSymbol] = function () {\r\n    return this;\r\n  };\r\n\r\n  var getProto = Object.getPrototypeOf;\r\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\r\n\r\n  if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\r\n    IteratorPrototype = NativeIteratorPrototype;\r\n  }\r\n\r\n  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\r\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\r\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\r\n  GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\");\r\n\r\n  function defineIteratorMethods(prototype) {\r\n    [\"next\", \"throw\", \"return\"].forEach(function (method) {\r\n      define(prototype, method, function (arg) {\r\n        return this._invoke(method, arg);\r\n      });\r\n    });\r\n  }\r\n\r\n  exports.isGeneratorFunction = function (genFun) {\r\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\r\n    return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === \"GeneratorFunction\" : false;\r\n  };\r\n\r\n  exports.mark = function (genFun) {\r\n    if (Object.setPrototypeOf) {\r\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\r\n    } else {\r\n      genFun.__proto__ = GeneratorFunctionPrototype;\r\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\r\n    }\r\n\r\n    genFun.prototype = Object.create(Gp);\r\n    return genFun;\r\n  };\r\n\r\n  exports.awrap = function (arg) {\r\n    return {\r\n      __await: arg\r\n    };\r\n  };\r\n\r\n  function AsyncIterator(generator, PromiseImpl) {\r\n    function invoke(method, arg, resolve, reject) {\r\n      var record = tryCatch(generator[method], generator, arg);\r\n\r\n      if (record.type === \"throw\") {\r\n        reject(record.arg);\r\n      } else {\r\n        var result = record.arg;\r\n        var value = result.value;\r\n\r\n        if (value && _typeof(value) === \"object\" && hasOwn.call(value, \"__await\")) {\r\n          return PromiseImpl.resolve(value.__await).then(function (value) {\r\n            invoke(\"next\", value, resolve, reject);\r\n          }, function (err) {\r\n            invoke(\"throw\", err, resolve, reject);\r\n          });\r\n        }\r\n\r\n        return PromiseImpl.resolve(value).then(function (unwrapped) {\r\n          result.value = unwrapped;\r\n          resolve(result);\r\n        }, function (error) {\r\n          return invoke(\"throw\", error, resolve, reject);\r\n        });\r\n      }\r\n    }\r\n\r\n    var previousPromise;\r\n\r\n    function enqueue(method, arg) {\r\n      function callInvokeWithMethodAndArg() {\r\n        return new PromiseImpl(function (resolve, reject) {\r\n          invoke(method, arg, resolve, reject);\r\n        });\r\n      }\r\n\r\n      return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\r\n    }\r\n\r\n    this._invoke = enqueue;\r\n  }\r\n\r\n  defineIteratorMethods(AsyncIterator.prototype);\r\n\r\n  AsyncIterator.prototype[asyncIteratorSymbol] = function () {\r\n    return this;\r\n  };\r\n\r\n  exports.AsyncIterator = AsyncIterator;\r\n\r\n  exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\r\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\r\n    var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\r\n    return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\r\n      return result.done ? result.value : iter.next();\r\n    });\r\n  };\r\n\r\n  function makeInvokeMethod(innerFn, self, context) {\r\n    var state = GenStateSuspendedStart;\r\n    return function invoke(method, arg) {\r\n      if (state === GenStateExecuting) {\r\n        throw new Error(\"Generator is already running\");\r\n      }\r\n\r\n      if (state === GenStateCompleted) {\r\n        if (method === \"throw\") {\r\n          throw arg;\r\n        }\r\n\r\n        return doneResult();\r\n      }\r\n\r\n      context.method = method;\r\n      context.arg = arg;\r\n\r\n      while (true) {\r\n        var delegate = context.delegate;\r\n\r\n        if (delegate) {\r\n          var delegateResult = maybeInvokeDelegate(delegate, context);\r\n\r\n          if (delegateResult) {\r\n            if (delegateResult === ContinueSentinel) continue;\r\n            return delegateResult;\r\n          }\r\n        }\r\n\r\n        if (context.method === \"next\") {\r\n          context.sent = context._sent = context.arg;\r\n        } else if (context.method === \"throw\") {\r\n          if (state === GenStateSuspendedStart) {\r\n            state = GenStateCompleted;\r\n            throw context.arg;\r\n          }\r\n\r\n          context.dispatchException(context.arg);\r\n        } else if (context.method === \"return\") {\r\n          context.abrupt(\"return\", context.arg);\r\n        }\r\n\r\n        state = GenStateExecuting;\r\n        var record = tryCatch(innerFn, self, context);\r\n\r\n        if (record.type === \"normal\") {\r\n          state = context.done ? GenStateCompleted : GenStateSuspendedYield;\r\n\r\n          if (record.arg === ContinueSentinel) {\r\n            continue;\r\n          }\r\n\r\n          return {\r\n            value: record.arg,\r\n            done: context.done\r\n          };\r\n        } else if (record.type === \"throw\") {\r\n          state = GenStateCompleted;\r\n          context.method = \"throw\";\r\n          context.arg = record.arg;\r\n        }\r\n      }\r\n    };\r\n  }\r\n\r\n  function maybeInvokeDelegate(delegate, context) {\r\n    var method = delegate.iterator[context.method];\r\n\r\n    if (method === undefined) {\r\n      context.delegate = null;\r\n\r\n      if (context.method === \"throw\") {\r\n        if (delegate.iterator[\"return\"]) {\r\n          context.method = \"return\";\r\n          context.arg = undefined;\r\n          maybeInvokeDelegate(delegate, context);\r\n\r\n          if (context.method === \"throw\") {\r\n            return ContinueSentinel;\r\n          }\r\n        }\r\n\r\n        context.method = \"throw\";\r\n        context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\r\n      }\r\n\r\n      return ContinueSentinel;\r\n    }\r\n\r\n    var record = tryCatch(method, delegate.iterator, context.arg);\r\n\r\n    if (record.type === \"throw\") {\r\n      context.method = \"throw\";\r\n      context.arg = record.arg;\r\n      context.delegate = null;\r\n      return ContinueSentinel;\r\n    }\r\n\r\n    var info = record.arg;\r\n\r\n    if (!info) {\r\n      context.method = \"throw\";\r\n      context.arg = new TypeError(\"iterator result is not an object\");\r\n      context.delegate = null;\r\n      return ContinueSentinel;\r\n    }\r\n\r\n    if (info.done) {\r\n      context[delegate.resultName] = info.value;\r\n      context.next = delegate.nextLoc;\r\n\r\n      if (context.method !== \"return\") {\r\n        context.method = \"next\";\r\n        context.arg = undefined;\r\n      }\r\n    } else {\r\n      return info;\r\n    }\r\n\r\n    context.delegate = null;\r\n    return ContinueSentinel;\r\n  }\r\n\r\n  defineIteratorMethods(Gp);\r\n  define(Gp, toStringTagSymbol, \"Generator\");\r\n\r\n  Gp[iteratorSymbol] = function () {\r\n    return this;\r\n  };\r\n\r\n  Gp.toString = function () {\r\n    return \"[object Generator]\";\r\n  };\r\n\r\n  function pushTryEntry(locs) {\r\n    var entry = {\r\n      tryLoc: locs[0]\r\n    };\r\n\r\n    if (1 in locs) {\r\n      entry.catchLoc = locs[1];\r\n    }\r\n\r\n    if (2 in locs) {\r\n      entry.finallyLoc = locs[2];\r\n      entry.afterLoc = locs[3];\r\n    }\r\n\r\n    this.tryEntries.push(entry);\r\n  }\r\n\r\n  function resetTryEntry(entry) {\r\n    var record = entry.completion || {};\r\n    record.type = \"normal\";\r\n    delete record.arg;\r\n    entry.completion = record;\r\n  }\r\n\r\n  function Context(tryLocsList) {\r\n    this.tryEntries = [{\r\n      tryLoc: \"root\"\r\n    }];\r\n    tryLocsList.forEach(pushTryEntry, this);\r\n    this.reset(true);\r\n  }\r\n\r\n  exports.keys = function (object) {\r\n    var keys = [];\r\n\r\n    for (var key in object) {\r\n      keys.push(key);\r\n    }\r\n\r\n    keys.reverse();\r\n    return function next() {\r\n      while (keys.length) {\r\n        var key = keys.pop();\r\n\r\n        if (key in object) {\r\n          next.value = key;\r\n          next.done = false;\r\n          return next;\r\n        }\r\n      }\r\n\r\n      next.done = true;\r\n      return next;\r\n    };\r\n  };\r\n\r\n  function values(iterable) {\r\n    if (iterable) {\r\n      var iteratorMethod = iterable[iteratorSymbol];\r\n\r\n      if (iteratorMethod) {\r\n        return iteratorMethod.call(iterable);\r\n      }\r\n\r\n      if (typeof iterable.next === \"function\") {\r\n        return iterable;\r\n      }\r\n\r\n      if (!isNaN(iterable.length)) {\r\n        var i = -1,\r\n            next = function next() {\r\n          while (++i < iterable.length) {\r\n            if (hasOwn.call(iterable, i)) {\r\n              next.value = iterable[i];\r\n              next.done = false;\r\n              return next;\r\n            }\r\n          }\r\n\r\n          next.value = undefined;\r\n          next.done = true;\r\n          return next;\r\n        };\r\n\r\n        return next.next = next;\r\n      }\r\n    }\r\n\r\n    return {\r\n      next: doneResult\r\n    };\r\n  }\r\n\r\n  exports.values = values;\r\n\r\n  function doneResult() {\r\n    return {\r\n      value: undefined,\r\n      done: true\r\n    };\r\n  }\r\n\r\n  Context.prototype = {\r\n    constructor: Context,\r\n    reset: function reset(skipTempReset) {\r\n      this.prev = 0;\r\n      this.next = 0;\r\n      this.sent = this._sent = undefined;\r\n      this.done = false;\r\n      this.delegate = null;\r\n      this.method = \"next\";\r\n      this.arg = undefined;\r\n      this.tryEntries.forEach(resetTryEntry);\r\n\r\n      if (!skipTempReset) {\r\n        for (var name in this) {\r\n          if (name.charAt(0) === \"t\" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\r\n            this[name] = undefined;\r\n          }\r\n        }\r\n      }\r\n    },\r\n    stop: function stop() {\r\n      this.done = true;\r\n      var rootEntry = this.tryEntries[0];\r\n      var rootRecord = rootEntry.completion;\r\n\r\n      if (rootRecord.type === \"throw\") {\r\n        throw rootRecord.arg;\r\n      }\r\n\r\n      return this.rval;\r\n    },\r\n    dispatchException: function dispatchException(exception) {\r\n      if (this.done) {\r\n        throw exception;\r\n      }\r\n\r\n      var context = this;\r\n\r\n      function handle(loc, caught) {\r\n        record.type = \"throw\";\r\n        record.arg = exception;\r\n        context.next = loc;\r\n\r\n        if (caught) {\r\n          context.method = \"next\";\r\n          context.arg = undefined;\r\n        }\r\n\r\n        return !!caught;\r\n      }\r\n\r\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\r\n        var entry = this.tryEntries[i];\r\n        var record = entry.completion;\r\n\r\n        if (entry.tryLoc === \"root\") {\r\n          return handle(\"end\");\r\n        }\r\n\r\n        if (entry.tryLoc <= this.prev) {\r\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\r\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\r\n\r\n          if (hasCatch && hasFinally) {\r\n            if (this.prev < entry.catchLoc) {\r\n              return handle(entry.catchLoc, true);\r\n            } else if (this.prev < entry.finallyLoc) {\r\n              return handle(entry.finallyLoc);\r\n            }\r\n          } else if (hasCatch) {\r\n            if (this.prev < entry.catchLoc) {\r\n              return handle(entry.catchLoc, true);\r\n            }\r\n          } else if (hasFinally) {\r\n            if (this.prev < entry.finallyLoc) {\r\n              return handle(entry.finallyLoc);\r\n            }\r\n          } else {\r\n            throw new Error(\"try statement without catch or finally\");\r\n          }\r\n        }\r\n      }\r\n    },\r\n    abrupt: function abrupt(type, arg) {\r\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\r\n        var entry = this.tryEntries[i];\r\n\r\n        if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\r\n          var finallyEntry = entry;\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (finallyEntry && (type === \"break\" || type === \"continue\") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\r\n        finallyEntry = null;\r\n      }\r\n\r\n      var record = finallyEntry ? finallyEntry.completion : {};\r\n      record.type = type;\r\n      record.arg = arg;\r\n\r\n      if (finallyEntry) {\r\n        this.method = \"next\";\r\n        this.next = finallyEntry.finallyLoc;\r\n        return ContinueSentinel;\r\n      }\r\n\r\n      return this.complete(record);\r\n    },\r\n    complete: function complete(record, afterLoc) {\r\n      if (record.type === \"throw\") {\r\n        throw record.arg;\r\n      }\r\n\r\n      if (record.type === \"break\" || record.type === \"continue\") {\r\n        this.next = record.arg;\r\n      } else if (record.type === \"return\") {\r\n        this.rval = this.arg = record.arg;\r\n        this.method = \"return\";\r\n        this.next = \"end\";\r\n      } else if (record.type === \"normal\" && afterLoc) {\r\n        this.next = afterLoc;\r\n      }\r\n\r\n      return ContinueSentinel;\r\n    },\r\n    finish: function finish(finallyLoc) {\r\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\r\n        var entry = this.tryEntries[i];\r\n\r\n        if (entry.finallyLoc === finallyLoc) {\r\n          this.complete(entry.completion, entry.afterLoc);\r\n          resetTryEntry(entry);\r\n          return ContinueSentinel;\r\n        }\r\n      }\r\n    },\r\n    \"catch\": function _catch(tryLoc) {\r\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\r\n        var entry = this.tryEntries[i];\r\n\r\n        if (entry.tryLoc === tryLoc) {\r\n          var record = entry.completion;\r\n\r\n          if (record.type === \"throw\") {\r\n            var thrown = record.arg;\r\n            resetTryEntry(entry);\r\n          }\r\n\r\n          return thrown;\r\n        }\r\n      }\r\n\r\n      throw new Error(\"illegal catch attempt\");\r\n    },\r\n    delegateYield: function delegateYield(iterable, resultName, nextLoc) {\r\n      this.delegate = {\r\n        iterator: values(iterable),\r\n        resultName: resultName,\r\n        nextLoc: nextLoc\r\n      };\r\n\r\n      if (this.method === \"next\") {\r\n        this.arg = undefined;\r\n      }\r\n\r\n      return ContinueSentinel;\r\n    }\r\n  };\r\n  return exports;\r\n}(( false ? 0 : _typeof(module)) === \"object\" ? module.exports : {});\r\n\r\ntry {\r\n  regeneratorRuntime = runtime;\r\n} catch (accidentalStrictMode) {\r\n  Function(\"r\", \"regeneratorRuntime = r\")(runtime);\r\n}\r\n\r\n/***/ }),\r\n/* 4 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.arrayByteLength = arrayByteLength;\r\nexports.arraysToBytes = arraysToBytes;\r\nexports.assert = assert;\r\nexports.bytesToString = bytesToString;\r\nexports.createPromiseCapability = createPromiseCapability;\r\nexports.createValidAbsoluteUrl = createValidAbsoluteUrl;\r\nexports.encodeToXmlString = encodeToXmlString;\r\nexports.escapeString = escapeString;\r\nexports.getModificationDate = getModificationDate;\r\nexports.getVerbosityLevel = getVerbosityLevel;\r\nexports.info = info;\r\nexports.isArrayBuffer = isArrayBuffer;\r\nexports.isArrayEqual = isArrayEqual;\r\nexports.isAscii = isAscii;\r\nexports.isBool = isBool;\r\nexports.isNum = isNum;\r\nexports.isSameOrigin = isSameOrigin;\r\nexports.isString = isString;\r\nexports.objectFromEntries = objectFromEntries;\r\nexports.objectSize = objectSize;\r\nexports.removeNullCharacters = removeNullCharacters;\r\nexports.setVerbosityLevel = setVerbosityLevel;\r\nexports.shadow = shadow;\r\nexports.string32 = string32;\r\nexports.stringToBytes = stringToBytes;\r\nexports.stringToPDFString = stringToPDFString;\r\nexports.stringToUTF16BEString = stringToUTF16BEString;\r\nexports.stringToUTF8String = stringToUTF8String;\r\nexports.unreachable = unreachable;\r\nexports.utf8StringToString = utf8StringToString;\r\nexports.warn = warn;\r\nexports.VerbosityLevel = exports.Util = exports.UNSUPPORTED_FEATURES = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.createObjectURL = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;\r\n\r\n__w_pdfjs_require__(5);\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\r\n\r\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\r\n\r\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nvar IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\r\nexports.IDENTITY_MATRIX = IDENTITY_MATRIX;\r\nvar FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\r\nexports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;\r\nvar PermissionFlag = {\r\n  PRINT: 0x04,\r\n  MODIFY_CONTENTS: 0x08,\r\n  COPY: 0x10,\r\n  MODIFY_ANNOTATIONS: 0x20,\r\n  FILL_INTERACTIVE_FORMS: 0x100,\r\n  COPY_FOR_ACCESSIBILITY: 0x200,\r\n  ASSEMBLE: 0x400,\r\n  PRINT_HIGH_QUALITY: 0x800\r\n};\r\nexports.PermissionFlag = PermissionFlag;\r\nvar TextRenderingMode = {\r\n  FILL: 0,\r\n  STROKE: 1,\r\n  FILL_STROKE: 2,\r\n  INVISIBLE: 3,\r\n  FILL_ADD_TO_PATH: 4,\r\n  STROKE_ADD_TO_PATH: 5,\r\n  FILL_STROKE_ADD_TO_PATH: 6,\r\n  ADD_TO_PATH: 7,\r\n  FILL_STROKE_MASK: 3,\r\n  ADD_TO_PATH_FLAG: 4\r\n};\r\nexports.TextRenderingMode = TextRenderingMode;\r\nvar ImageKind = {\r\n  GRAYSCALE_1BPP: 1,\r\n  RGB_24BPP: 2,\r\n  RGBA_32BPP: 3\r\n};\r\nexports.ImageKind = ImageKind;\r\nvar AnnotationType = {\r\n  TEXT: 1,\r\n  LINK: 2,\r\n  FREETEXT: 3,\r\n  LINE: 4,\r\n  SQUARE: 5,\r\n  CIRCLE: 6,\r\n  POLYGON: 7,\r\n  POLYLINE: 8,\r\n  HIGHLIGHT: 9,\r\n  UNDERLINE: 10,\r\n  SQUIGGLY: 11,\r\n  STRIKEOUT: 12,\r\n  STAMP: 13,\r\n  CARET: 14,\r\n  INK: 15,\r\n  POPUP: 16,\r\n  FILEATTACHMENT: 17,\r\n  SOUND: 18,\r\n  MOVIE: 19,\r\n  WIDGET: 20,\r\n  SCREEN: 21,\r\n  PRINTERMARK: 22,\r\n  TRAPNET: 23,\r\n  WATERMARK: 24,\r\n  THREED: 25,\r\n  REDACT: 26\r\n};\r\nexports.AnnotationType = AnnotationType;\r\nvar AnnotationStateModelType = {\r\n  MARKED: \"Marked\",\r\n  REVIEW: \"Review\"\r\n};\r\nexports.AnnotationStateModelType = AnnotationStateModelType;\r\nvar AnnotationMarkedState = {\r\n  MARKED: \"Marked\",\r\n  UNMARKED: \"Unmarked\"\r\n};\r\nexports.AnnotationMarkedState = AnnotationMarkedState;\r\nvar AnnotationReviewState = {\r\n  ACCEPTED: \"Accepted\",\r\n  REJECTED: \"Rejected\",\r\n  CANCELLED: \"Cancelled\",\r\n  COMPLETED: \"Completed\",\r\n  NONE: \"None\"\r\n};\r\nexports.AnnotationReviewState = AnnotationReviewState;\r\nvar AnnotationReplyType = {\r\n  GROUP: \"Group\",\r\n  REPLY: \"R\"\r\n};\r\nexports.AnnotationReplyType = AnnotationReplyType;\r\nvar AnnotationFlag = {\r\n  INVISIBLE: 0x01,\r\n  HIDDEN: 0x02,\r\n  PRINT: 0x04,\r\n  NOZOOM: 0x08,\r\n  NOROTATE: 0x10,\r\n  NOVIEW: 0x20,\r\n  READONLY: 0x40,\r\n  LOCKED: 0x80,\r\n  TOGGLENOVIEW: 0x100,\r\n  LOCKEDCONTENTS: 0x200\r\n};\r\nexports.AnnotationFlag = AnnotationFlag;\r\nvar AnnotationFieldFlag = {\r\n  READONLY: 0x0000001,\r\n  REQUIRED: 0x0000002,\r\n  NOEXPORT: 0x0000004,\r\n  MULTILINE: 0x0001000,\r\n  PASSWORD: 0x0002000,\r\n  NOTOGGLETOOFF: 0x0004000,\r\n  RADIO: 0x0008000,\r\n  PUSHBUTTON: 0x0010000,\r\n  COMBO: 0x0020000,\r\n  EDIT: 0x0040000,\r\n  SORT: 0x0080000,\r\n  FILESELECT: 0x0100000,\r\n  MULTISELECT: 0x0200000,\r\n  DONOTSPELLCHECK: 0x0400000,\r\n  DONOTSCROLL: 0x0800000,\r\n  COMB: 0x1000000,\r\n  RICHTEXT: 0x2000000,\r\n  RADIOSINUNISON: 0x2000000,\r\n  COMMITONSELCHANGE: 0x4000000\r\n};\r\nexports.AnnotationFieldFlag = AnnotationFieldFlag;\r\nvar AnnotationBorderStyleType = {\r\n  SOLID: 1,\r\n  DASHED: 2,\r\n  BEVELED: 3,\r\n  INSET: 4,\r\n  UNDERLINE: 5\r\n};\r\nexports.AnnotationBorderStyleType = AnnotationBorderStyleType;\r\nvar AnnotationActionEventType = {\r\n  E: \"Mouse Enter\",\r\n  X: \"Mouse Exit\",\r\n  D: \"Mouse Down\",\r\n  U: \"Mouse Up\",\r\n  Fo: \"Focus\",\r\n  Bl: \"Blur\",\r\n  PO: \"PageOpen\",\r\n  PC: \"PageClose\",\r\n  PV: \"PageVisible\",\r\n  PI: \"PageInvisible\",\r\n  K: \"Keystroke\",\r\n  F: \"Format\",\r\n  V: \"Validate\",\r\n  C: \"Calculate\"\r\n};\r\nexports.AnnotationActionEventType = AnnotationActionEventType;\r\nvar DocumentActionEventType = {\r\n  WC: \"WillClose\",\r\n  WS: \"WillSave\",\r\n  DS: \"DidSave\",\r\n  WP: \"WillPrint\",\r\n  DP: \"DidPrint\"\r\n};\r\nexports.DocumentActionEventType = DocumentActionEventType;\r\nvar PageActionEventType = {\r\n  O: \"PageOpen\",\r\n  C: \"PageClose\"\r\n};\r\nexports.PageActionEventType = PageActionEventType;\r\nvar StreamType = {\r\n  UNKNOWN: \"UNKNOWN\",\r\n  FLATE: \"FLATE\",\r\n  LZW: \"LZW\",\r\n  DCT: \"DCT\",\r\n  JPX: \"JPX\",\r\n  JBIG: \"JBIG\",\r\n  A85: \"A85\",\r\n  AHX: \"AHX\",\r\n  CCF: \"CCF\",\r\n  RLX: \"RLX\"\r\n};\r\nexports.StreamType = StreamType;\r\nvar FontType = {\r\n  UNKNOWN: \"UNKNOWN\",\r\n  TYPE1: \"TYPE1\",\r\n  TYPE1C: \"TYPE1C\",\r\n  CIDFONTTYPE0: \"CIDFONTTYPE0\",\r\n  CIDFONTTYPE0C: \"CIDFONTTYPE0C\",\r\n  TRUETYPE: \"TRUETYPE\",\r\n  CIDFONTTYPE2: \"CIDFONTTYPE2\",\r\n  TYPE3: \"TYPE3\",\r\n  OPENTYPE: \"OPENTYPE\",\r\n  TYPE0: \"TYPE0\",\r\n  MMTYPE1: \"MMTYPE1\"\r\n};\r\nexports.FontType = FontType;\r\nvar VerbosityLevel = {\r\n  ERRORS: 0,\r\n  WARNINGS: 1,\r\n  INFOS: 5\r\n};\r\nexports.VerbosityLevel = VerbosityLevel;\r\nvar CMapCompressionType = {\r\n  NONE: 0,\r\n  BINARY: 1,\r\n  STREAM: 2\r\n};\r\nexports.CMapCompressionType = CMapCompressionType;\r\nvar OPS = {\r\n  dependency: 1,\r\n  setLineWidth: 2,\r\n  setLineCap: 3,\r\n  setLineJoin: 4,\r\n  setMiterLimit: 5,\r\n  setDash: 6,\r\n  setRenderingIntent: 7,\r\n  setFlatness: 8,\r\n  setGState: 9,\r\n  save: 10,\r\n  restore: 11,\r\n  transform: 12,\r\n  moveTo: 13,\r\n  lineTo: 14,\r\n  curveTo: 15,\r\n  curveTo2: 16,\r\n  curveTo3: 17,\r\n  closePath: 18,\r\n  rectangle: 19,\r\n  stroke: 20,\r\n  closeStroke: 21,\r\n  fill: 22,\r\n  eoFill: 23,\r\n  fillStroke: 24,\r\n  eoFillStroke: 25,\r\n  closeFillStroke: 26,\r\n  closeEOFillStroke: 27,\r\n  endPath: 28,\r\n  clip: 29,\r\n  eoClip: 30,\r\n  beginText: 31,\r\n  endText: 32,\r\n  setCharSpacing: 33,\r\n  setWordSpacing: 34,\r\n  setHScale: 35,\r\n  setLeading: 36,\r\n  setFont: 37,\r\n  setTextRenderingMode: 38,\r\n  setTextRise: 39,\r\n  moveText: 40,\r\n  setLeadingMoveText: 41,\r\n  setTextMatrix: 42,\r\n  nextLine: 43,\r\n  showText: 44,\r\n  showSpacedText: 45,\r\n  nextLineShowText: 46,\r\n  nextLineSetSpacingShowText: 47,\r\n  setCharWidth: 48,\r\n  setCharWidthAndBounds: 49,\r\n  setStrokeColorSpace: 50,\r\n  setFillColorSpace: 51,\r\n  setStrokeColor: 52,\r\n  setStrokeColorN: 53,\r\n  setFillColor: 54,\r\n  setFillColorN: 55,\r\n  setStrokeGray: 56,\r\n  setFillGray: 57,\r\n  setStrokeRGBColor: 58,\r\n  setFillRGBColor: 59,\r\n  setStrokeCMYKColor: 60,\r\n  setFillCMYKColor: 61,\r\n  shadingFill: 62,\r\n  beginInlineImage: 63,\r\n  beginImageData: 64,\r\n  endInlineImage: 65,\r\n  paintXObject: 66,\r\n  markPoint: 67,\r\n  markPointProps: 68,\r\n  beginMarkedContent: 69,\r\n  beginMarkedContentProps: 70,\r\n  endMarkedContent: 71,\r\n  beginCompat: 72,\r\n  endCompat: 73,\r\n  paintFormXObjectBegin: 74,\r\n  paintFormXObjectEnd: 75,\r\n  beginGroup: 76,\r\n  endGroup: 77,\r\n  beginAnnotations: 78,\r\n  endAnnotations: 79,\r\n  beginAnnotation: 80,\r\n  endAnnotation: 81,\r\n  paintJpegXObject: 82,\r\n  paintImageMaskXObject: 83,\r\n  paintImageMaskXObjectGroup: 84,\r\n  paintImageXObject: 85,\r\n  paintInlineImageXObject: 86,\r\n  paintInlineImageXObjectGroup: 87,\r\n  paintImageXObjectRepeat: 88,\r\n  paintImageMaskXObjectRepeat: 89,\r\n  paintSolidColorImageMask: 90,\r\n  constructPath: 91\r\n};\r\nexports.OPS = OPS;\r\nvar UNSUPPORTED_FEATURES = {\r\n  unknown: \"unknown\",\r\n  forms: \"forms\",\r\n  javaScript: \"javaScript\",\r\n  smask: \"smask\",\r\n  shadingPattern: \"shadingPattern\",\r\n  font: \"font\",\r\n  errorTilingPattern: \"errorTilingPattern\",\r\n  errorExtGState: \"errorExtGState\",\r\n  errorXObject: \"errorXObject\",\r\n  errorFontLoadType3: \"errorFontLoadType3\",\r\n  errorFontState: \"errorFontState\",\r\n  errorFontMissing: \"errorFontMissing\",\r\n  errorFontTranslate: \"errorFontTranslate\",\r\n  errorColorSpace: \"errorColorSpace\",\r\n  errorOperatorList: \"errorOperatorList\",\r\n  errorFontToUnicode: \"errorFontToUnicode\",\r\n  errorFontLoadNative: \"errorFontLoadNative\",\r\n  errorFontGetPath: \"errorFontGetPath\",\r\n  errorMarkedContent: \"errorMarkedContent\"\r\n};\r\nexports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;\r\nvar PasswordResponses = {\r\n  NEED_PASSWORD: 1,\r\n  INCORRECT_PASSWORD: 2\r\n};\r\nexports.PasswordResponses = PasswordResponses;\r\nvar verbosity = VerbosityLevel.WARNINGS;\r\n\r\nfunction setVerbosityLevel(level) {\r\n  if (Number.isInteger(level)) {\r\n    verbosity = level;\r\n  }\r\n}\r\n\r\nfunction getVerbosityLevel() {\r\n  return verbosity;\r\n}\r\n\r\nfunction info(msg) {\r\n  if (verbosity >= VerbosityLevel.INFOS) {\r\n    console.log(\"Info: \".concat(msg));\r\n  }\r\n}\r\n\r\nfunction warn(msg) {\r\n  if (verbosity >= VerbosityLevel.WARNINGS) {\r\n    console.log(\"Warning: \".concat(msg));\r\n  }\r\n}\r\n\r\nfunction unreachable(msg) {\r\n  throw new Error(msg);\r\n}\r\n\r\nfunction assert(cond, msg) {\r\n  if (!cond) {\r\n    unreachable(msg);\r\n  }\r\n}\r\n\r\nfunction isSameOrigin(baseUrl, otherUrl) {\r\n  var base;\r\n\r\n  try {\r\n    base = new URL(baseUrl);\r\n\r\n    if (!base.origin || base.origin === \"null\") {\r\n      return false;\r\n    }\r\n  } catch (e) {\r\n    return false;\r\n  }\r\n\r\n  var other = new URL(otherUrl, base);\r\n  return base.origin === other.origin;\r\n}\r\n\r\nfunction _isValidProtocol(url) {\r\n  if (!url) {\r\n    return false;\r\n  }\r\n\r\n  switch (url.protocol) {\r\n    case \"http:\":\r\n    case \"https:\":\r\n    case \"ftp:\":\r\n    case \"mailto:\":\r\n    case \"tel:\":\r\n      return true;\r\n\r\n    default:\r\n      return false;\r\n  }\r\n}\r\n\r\nfunction createValidAbsoluteUrl(url, baseUrl) {\r\n  if (!url) {\r\n    return null;\r\n  }\r\n\r\n  try {\r\n    var absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);\r\n\r\n    if (_isValidProtocol(absoluteUrl)) {\r\n      return absoluteUrl;\r\n    }\r\n  } catch (ex) {}\r\n\r\n  return null;\r\n}\r\n\r\nfunction shadow(obj, prop, value) {\r\n  Object.defineProperty(obj, prop, {\r\n    value: value,\r\n    enumerable: true,\r\n    configurable: true,\r\n    writable: false\r\n  });\r\n  return value;\r\n}\r\n\r\nvar BaseException = function BaseExceptionClosure() {\r\n  function BaseException(message) {\r\n    if (this.constructor === BaseException) {\r\n      unreachable(\"Cannot initialize BaseException.\");\r\n    }\r\n\r\n    this.message = message;\r\n    this.name = this.constructor.name;\r\n  }\r\n\r\n  BaseException.prototype = new Error();\r\n  BaseException.constructor = BaseException;\r\n  return BaseException;\r\n}();\r\n\r\nexports.BaseException = BaseException;\r\n\r\nvar PasswordException = /*#__PURE__*/function (_BaseException) {\r\n  _inherits(PasswordException, _BaseException);\r\n\r\n  var _super = _createSuper(PasswordException);\r\n\r\n  function PasswordException(msg, code) {\r\n    var _this;\r\n\r\n    _classCallCheck(this, PasswordException);\r\n\r\n    _this = _super.call(this, msg);\r\n    _this.code = code;\r\n    return _this;\r\n  }\r\n\r\n  return PasswordException;\r\n}(BaseException);\r\n\r\nexports.PasswordException = PasswordException;\r\n\r\nvar UnknownErrorException = /*#__PURE__*/function (_BaseException2) {\r\n  _inherits(UnknownErrorException, _BaseException2);\r\n\r\n  var _super2 = _createSuper(UnknownErrorException);\r\n\r\n  function UnknownErrorException(msg, details) {\r\n    var _this2;\r\n\r\n    _classCallCheck(this, UnknownErrorException);\r\n\r\n    _this2 = _super2.call(this, msg);\r\n    _this2.details = details;\r\n    return _this2;\r\n  }\r\n\r\n  return UnknownErrorException;\r\n}(BaseException);\r\n\r\nexports.UnknownErrorException = UnknownErrorException;\r\n\r\nvar InvalidPDFException = /*#__PURE__*/function (_BaseException3) {\r\n  _inherits(InvalidPDFException, _BaseException3);\r\n\r\n  var _super3 = _createSuper(InvalidPDFException);\r\n\r\n  function InvalidPDFException() {\r\n    _classCallCheck(this, InvalidPDFException);\r\n\r\n    return _super3.apply(this, arguments);\r\n  }\r\n\r\n  return InvalidPDFException;\r\n}(BaseException);\r\n\r\nexports.InvalidPDFException = InvalidPDFException;\r\n\r\nvar MissingPDFException = /*#__PURE__*/function (_BaseException4) {\r\n  _inherits(MissingPDFException, _BaseException4);\r\n\r\n  var _super4 = _createSuper(MissingPDFException);\r\n\r\n  function MissingPDFException() {\r\n    _classCallCheck(this, MissingPDFException);\r\n\r\n    return _super4.apply(this, arguments);\r\n  }\r\n\r\n  return MissingPDFException;\r\n}(BaseException);\r\n\r\nexports.MissingPDFException = MissingPDFException;\r\n\r\nvar UnexpectedResponseException = /*#__PURE__*/function (_BaseException5) {\r\n  _inherits(UnexpectedResponseException, _BaseException5);\r\n\r\n  var _super5 = _createSuper(UnexpectedResponseException);\r\n\r\n  function UnexpectedResponseException(msg, status) {\r\n    var _this3;\r\n\r\n    _classCallCheck(this, UnexpectedResponseException);\r\n\r\n    _this3 = _super5.call(this, msg);\r\n    _this3.status = status;\r\n    return _this3;\r\n  }\r\n\r\n  return UnexpectedResponseException;\r\n}(BaseException);\r\n\r\nexports.UnexpectedResponseException = UnexpectedResponseException;\r\n\r\nvar FormatError = /*#__PURE__*/function (_BaseException6) {\r\n  _inherits(FormatError, _BaseException6);\r\n\r\n  var _super6 = _createSuper(FormatError);\r\n\r\n  function FormatError() {\r\n    _classCallCheck(this, FormatError);\r\n\r\n    return _super6.apply(this, arguments);\r\n  }\r\n\r\n  return FormatError;\r\n}(BaseException);\r\n\r\nexports.FormatError = FormatError;\r\n\r\nvar AbortException = /*#__PURE__*/function (_BaseException7) {\r\n  _inherits(AbortException, _BaseException7);\r\n\r\n  var _super7 = _createSuper(AbortException);\r\n\r\n  function AbortException() {\r\n    _classCallCheck(this, AbortException);\r\n\r\n    return _super7.apply(this, arguments);\r\n  }\r\n\r\n  return AbortException;\r\n}(BaseException);\r\n\r\nexports.AbortException = AbortException;\r\nvar NullCharactersRegExp = /\\x00/g;\r\n\r\nfunction removeNullCharacters(str) {\r\n  if (typeof str !== \"string\") {\r\n    warn(\"The argument for removeNullCharacters must be a string.\");\r\n    return str;\r\n  }\r\n\r\n  return str.replace(NullCharactersRegExp, \"\");\r\n}\r\n\r\nfunction bytesToString(bytes) {\r\n  assert(bytes !== null && _typeof(bytes) === \"object\" && bytes.length !== undefined, \"Invalid argument for bytesToString\");\r\n  var length = bytes.length;\r\n  var MAX_ARGUMENT_COUNT = 8192;\r\n\r\n  if (length < MAX_ARGUMENT_COUNT) {\r\n    return String.fromCharCode.apply(null, bytes);\r\n  }\r\n\r\n  var strBuf = [];\r\n\r\n  for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\r\n    var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\r\n    var chunk = bytes.subarray(i, chunkEnd);\r\n    strBuf.push(String.fromCharCode.apply(null, chunk));\r\n  }\r\n\r\n  return strBuf.join(\"\");\r\n}\r\n\r\nfunction stringToBytes(str) {\r\n  assert(typeof str === \"string\", \"Invalid argument for stringToBytes\");\r\n  var length = str.length;\r\n  var bytes = new Uint8Array(length);\r\n\r\n  for (var i = 0; i < length; ++i) {\r\n    bytes[i] = str.charCodeAt(i) & 0xff;\r\n  }\r\n\r\n  return bytes;\r\n}\r\n\r\nfunction arrayByteLength(arr) {\r\n  if (arr.length !== undefined) {\r\n    return arr.length;\r\n  }\r\n\r\n  assert(arr.byteLength !== undefined, \"arrayByteLength - invalid argument.\");\r\n  return arr.byteLength;\r\n}\r\n\r\nfunction arraysToBytes(arr) {\r\n  var length = arr.length;\r\n\r\n  if (length === 1 && arr[0] instanceof Uint8Array) {\r\n    return arr[0];\r\n  }\r\n\r\n  var resultLength = 0;\r\n\r\n  for (var i = 0; i < length; i++) {\r\n    resultLength += arrayByteLength(arr[i]);\r\n  }\r\n\r\n  var pos = 0;\r\n  var data = new Uint8Array(resultLength);\r\n\r\n  for (var _i = 0; _i < length; _i++) {\r\n    var item = arr[_i];\r\n\r\n    if (!(item instanceof Uint8Array)) {\r\n      if (typeof item === \"string\") {\r\n        item = stringToBytes(item);\r\n      } else {\r\n        item = new Uint8Array(item);\r\n      }\r\n    }\r\n\r\n    var itemLength = item.byteLength;\r\n    data.set(item, pos);\r\n    pos += itemLength;\r\n  }\r\n\r\n  return data;\r\n}\r\n\r\nfunction string32(value) {\r\n  return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);\r\n}\r\n\r\nfunction objectSize(obj) {\r\n  return Object.keys(obj).length;\r\n}\r\n\r\nfunction objectFromEntries(iterable) {\r\n  return Object.assign(Object.create(null), Object.fromEntries(iterable));\r\n}\r\n\r\nfunction isLittleEndian() {\r\n  var buffer8 = new Uint8Array(4);\r\n  buffer8[0] = 1;\r\n  var view32 = new Uint32Array(buffer8.buffer, 0, 1);\r\n  return view32[0] === 1;\r\n}\r\n\r\nvar IsLittleEndianCached = {\r\n  get value() {\r\n    return shadow(this, \"value\", isLittleEndian());\r\n  }\r\n\r\n};\r\nexports.IsLittleEndianCached = IsLittleEndianCached;\r\n\r\nfunction isEvalSupported() {\r\n  try {\r\n    new Function(\"\");\r\n    return true;\r\n  } catch (e) {\r\n    return false;\r\n  }\r\n}\r\n\r\nvar IsEvalSupportedCached = {\r\n  get value() {\r\n    return shadow(this, \"value\", isEvalSupported());\r\n  }\r\n\r\n};\r\nexports.IsEvalSupportedCached = IsEvalSupportedCached;\r\n\r\nvar hexNumbers = _toConsumableArray(Array(256).keys()).map(function (n) {\r\n  return n.toString(16).padStart(2, \"0\");\r\n});\r\n\r\nvar Util = /*#__PURE__*/function () {\r\n  function Util() {\r\n    _classCallCheck(this, Util);\r\n  }\r\n\r\n  _createClass(Util, null, [{\r\n    key: \"makeHexColor\",\r\n    value: function makeHexColor(r, g, b) {\r\n      return \"#\".concat(hexNumbers[r]).concat(hexNumbers[g]).concat(hexNumbers[b]);\r\n    }\r\n  }, {\r\n    key: \"transform\",\r\n    value: function transform(m1, m2) {\r\n      return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];\r\n    }\r\n  }, {\r\n    key: \"applyTransform\",\r\n    value: function applyTransform(p, m) {\r\n      var xt = p[0] * m[0] + p[1] * m[2] + m[4];\r\n      var yt = p[0] * m[1] + p[1] * m[3] + m[5];\r\n      return [xt, yt];\r\n    }\r\n  }, {\r\n    key: \"applyInverseTransform\",\r\n    value: function applyInverseTransform(p, m) {\r\n      var d = m[0] * m[3] - m[1] * m[2];\r\n      var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\r\n      var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\r\n      return [xt, yt];\r\n    }\r\n  }, {\r\n    key: \"getAxialAlignedBoundingBox\",\r\n    value: function getAxialAlignedBoundingBox(r, m) {\r\n      var p1 = Util.applyTransform(r, m);\r\n      var p2 = Util.applyTransform(r.slice(2, 4), m);\r\n      var p3 = Util.applyTransform([r[0], r[3]], m);\r\n      var p4 = Util.applyTransform([r[2], r[1]], m);\r\n      return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];\r\n    }\r\n  }, {\r\n    key: \"inverseTransform\",\r\n    value: function inverseTransform(m) {\r\n      var d = m[0] * m[3] - m[1] * m[2];\r\n      return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];\r\n    }\r\n  }, {\r\n    key: \"apply3dTransform\",\r\n    value: function apply3dTransform(m, v) {\r\n      return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]];\r\n    }\r\n  }, {\r\n    key: \"singularValueDecompose2dScale\",\r\n    value: function singularValueDecompose2dScale(m) {\r\n      var transpose = [m[0], m[2], m[1], m[3]];\r\n      var a = m[0] * transpose[0] + m[1] * transpose[2];\r\n      var b = m[0] * transpose[1] + m[1] * transpose[3];\r\n      var c = m[2] * transpose[0] + m[3] * transpose[2];\r\n      var d = m[2] * transpose[1] + m[3] * transpose[3];\r\n      var first = (a + d) / 2;\r\n      var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;\r\n      var sx = first + second || 1;\r\n      var sy = first - second || 1;\r\n      return [Math.sqrt(sx), Math.sqrt(sy)];\r\n    }\r\n  }, {\r\n    key: \"normalizeRect\",\r\n    value: function normalizeRect(rect) {\r\n      var r = rect.slice(0);\r\n\r\n      if (rect[0] > rect[2]) {\r\n        r[0] = rect[2];\r\n        r[2] = rect[0];\r\n      }\r\n\r\n      if (rect[1] > rect[3]) {\r\n        r[1] = rect[3];\r\n        r[3] = rect[1];\r\n      }\r\n\r\n      return r;\r\n    }\r\n  }, {\r\n    key: \"intersect\",\r\n    value: function intersect(rect1, rect2) {\r\n      function compare(a, b) {\r\n        return a - b;\r\n      }\r\n\r\n      var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);\r\n      var orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);\r\n      var result = [];\r\n      rect1 = Util.normalizeRect(rect1);\r\n      rect2 = Util.normalizeRect(rect2);\r\n\r\n      if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {\r\n        result[0] = orderedX[1];\r\n        result[2] = orderedX[2];\r\n      } else {\r\n        return null;\r\n      }\r\n\r\n      if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {\r\n        result[1] = orderedY[1];\r\n        result[3] = orderedY[2];\r\n      } else {\r\n        return null;\r\n      }\r\n\r\n      return result;\r\n    }\r\n  }]);\r\n\r\n  return Util;\r\n}();\r\n\r\nexports.Util = Util;\r\nvar PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC];\r\n\r\nfunction stringToPDFString(str) {\r\n  var length = str.length,\r\n      strBuf = [];\r\n\r\n  if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\r\n    for (var i = 2; i < length; i += 2) {\r\n      strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1)));\r\n    }\r\n  } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\r\n    for (var _i2 = 2; _i2 < length; _i2 += 2) {\r\n      strBuf.push(String.fromCharCode(str.charCodeAt(_i2 + 1) << 8 | str.charCodeAt(_i2)));\r\n    }\r\n  } else {\r\n    for (var _i3 = 0; _i3 < length; ++_i3) {\r\n      var code = PDFStringTranslateTable[str.charCodeAt(_i3)];\r\n      strBuf.push(code ? String.fromCharCode(code) : str.charAt(_i3));\r\n    }\r\n  }\r\n\r\n  return strBuf.join(\"\");\r\n}\r\n\r\nfunction escapeString(str) {\r\n  return str.replace(/([()\\\\\\n\\r])/g, function (match) {\r\n    if (match === \"\\n\") {\r\n      return \"\\\\n\";\r\n    } else if (match === \"\\r\") {\r\n      return \"\\\\r\";\r\n    }\r\n\r\n    return \"\\\\\".concat(match);\r\n  });\r\n}\r\n\r\nfunction isAscii(str) {\r\n  return /^[\\x00-\\x7F]*$/.test(str);\r\n}\r\n\r\nfunction stringToUTF16BEString(str) {\r\n  var buf = [\"\\xFE\\xFF\"];\r\n\r\n  for (var i = 0, ii = str.length; i < ii; i++) {\r\n    var _char = str.charCodeAt(i);\r\n\r\n    buf.push(String.fromCharCode(_char >> 8 & 0xff));\r\n    buf.push(String.fromCharCode(_char & 0xff));\r\n  }\r\n\r\n  return buf.join(\"\");\r\n}\r\n\r\nfunction stringToUTF8String(str) {\r\n  return decodeURIComponent(escape(str));\r\n}\r\n\r\nfunction utf8StringToString(str) {\r\n  return unescape(encodeURIComponent(str));\r\n}\r\n\r\nfunction isBool(v) {\r\n  return typeof v === \"boolean\";\r\n}\r\n\r\nfunction isNum(v) {\r\n  return typeof v === \"number\";\r\n}\r\n\r\nfunction isString(v) {\r\n  return typeof v === \"string\";\r\n}\r\n\r\nfunction isArrayBuffer(v) {\r\n  return _typeof(v) === \"object\" && v !== null && v.byteLength !== undefined;\r\n}\r\n\r\nfunction isArrayEqual(arr1, arr2) {\r\n  if (arr1.length !== arr2.length) {\r\n    return false;\r\n  }\r\n\r\n  return arr1.every(function (element, index) {\r\n    return element === arr2[index];\r\n  });\r\n}\r\n\r\nfunction getModificationDate() {\r\n  var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\r\n  var buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, \"0\"), date.getUTCDate().toString().padStart(2, \"0\"), date.getUTCHours().toString().padStart(2, \"0\"), date.getUTCMinutes().toString().padStart(2, \"0\"), date.getUTCSeconds().toString().padStart(2, \"0\")];\r\n  return buffer.join(\"\");\r\n}\r\n\r\nfunction createPromiseCapability() {\r\n  var capability = Object.create(null);\r\n  var isSettled = false;\r\n  Object.defineProperty(capability, \"settled\", {\r\n    get: function get() {\r\n      return isSettled;\r\n    }\r\n  });\r\n  capability.promise = new Promise(function (resolve, reject) {\r\n    capability.resolve = function (data) {\r\n      isSettled = true;\r\n      resolve(data);\r\n    };\r\n\r\n    capability.reject = function (reason) {\r\n      isSettled = true;\r\n      reject(reason);\r\n    };\r\n  });\r\n  return capability;\r\n}\r\n\r\nvar createObjectURL = function createObjectURLClosure() {\r\n  var digits = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n  return function createObjectURL(data, contentType) {\r\n    var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n\r\n    if (!forceDataSchema && URL.createObjectURL) {\r\n      var blob = new Blob([data], {\r\n        type: contentType\r\n      });\r\n      return URL.createObjectURL(blob);\r\n    }\r\n\r\n    var buffer = \"data:\".concat(contentType, \";base64,\");\r\n\r\n    for (var i = 0, ii = data.length; i < ii; i += 3) {\r\n      var b1 = data[i] & 0xff;\r\n      var b2 = data[i + 1] & 0xff;\r\n      var b3 = data[i + 2] & 0xff;\r\n      var d1 = b1 >> 2,\r\n          d2 = (b1 & 3) << 4 | b2 >> 4;\r\n      var d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;\r\n      var d4 = i + 2 < ii ? b3 & 0x3f : 64;\r\n      buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];\r\n    }\r\n\r\n    return buffer;\r\n  };\r\n}();\r\n\r\nexports.createObjectURL = createObjectURL;\r\nvar XMLEntities = {\r\n  0x3c: \"&lt;\",\r\n  0x3e: \"&gt;\",\r\n  0x26: \"&amp;\",\r\n  0x22: \"&quot;\",\r\n  0x27: \"&apos;\"\r\n};\r\n\r\nfunction encodeToXmlString(str) {\r\n  var buffer = [];\r\n  var start = 0;\r\n\r\n  for (var i = 0, ii = str.length; i < ii; i++) {\r\n    var _char2 = str.codePointAt(i);\r\n\r\n    if (0x20 <= _char2 && _char2 <= 0x7e) {\r\n      var entity = XMLEntities[_char2];\r\n\r\n      if (entity) {\r\n        if (start < i) {\r\n          buffer.push(str.substring(start, i));\r\n        }\r\n\r\n        buffer.push(entity);\r\n        start = i + 1;\r\n      }\r\n    } else {\r\n      if (start < i) {\r\n        buffer.push(str.substring(start, i));\r\n      }\r\n\r\n      buffer.push(\"&#x\".concat(_char2.toString(16).toUpperCase(), \";\"));\r\n\r\n      if (_char2 > 0xd7ff && (_char2 < 0xe000 || _char2 > 0xfffd)) {\r\n        i++;\r\n      }\r\n\r\n      start = i + 1;\r\n    }\r\n  }\r\n\r\n  if (buffer.length === 0) {\r\n    return str;\r\n  }\r\n\r\n  if (start < str.length) {\r\n    buffer.push(str.substring(start, str.length));\r\n  }\r\n\r\n  return buffer.join(\"\");\r\n}\r\n\r\n/***/ }),\r\n/* 5 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nvar _is_node = __w_pdfjs_require__(6);\r\n\r\nif (typeof globalThis === \"undefined\" || !globalThis._pdfjsCompatibilityChecked) {\r\n  if (typeof globalThis === \"undefined\" || globalThis.Math !== Math) {\r\n    globalThis = __w_pdfjs_require__(7);\r\n  }\r\n\r\n  globalThis._pdfjsCompatibilityChecked = true;\r\n\r\n  (function checkNodeBtoa() {\r\n    if (globalThis.btoa || !_is_node.isNodeJS) {\r\n      return;\r\n    }\r\n\r\n    globalThis.btoa = function (chars) {\r\n      return Buffer.from(chars, \"binary\").toString(\"base64\");\r\n    };\r\n  })();\r\n\r\n  (function checkNodeAtob() {\r\n    if (globalThis.atob || !_is_node.isNodeJS) {\r\n      return;\r\n    }\r\n\r\n    globalThis.atob = function (input) {\r\n      return Buffer.from(input, \"base64\").toString(\"binary\");\r\n    };\r\n  })();\r\n\r\n  (function checkObjectFromEntries() {\r\n    if (Object.fromEntries) {\r\n      return;\r\n    }\r\n\r\n    __w_pdfjs_require__(52);\r\n  })();\r\n\r\n  (function checkPromise() {\r\n    if (globalThis.Promise.allSettled) {\r\n      return;\r\n    }\r\n\r\n    globalThis.Promise = __w_pdfjs_require__(82);\r\n  })();\r\n\r\n  (function checkURL() {\r\n    globalThis.URL = __w_pdfjs_require__(111);\r\n  })();\r\n\r\n  (function checkReadableStream() {\r\n    var isReadableStreamSupported = false;\r\n\r\n    if (typeof ReadableStream !== \"undefined\") {\r\n      try {\r\n        new ReadableStream({\r\n          start: function start(controller) {\r\n            controller.close();\r\n          }\r\n        });\r\n        isReadableStreamSupported = true;\r\n      } catch (e) {}\r\n    }\r\n\r\n    if (isReadableStreamSupported) {\r\n      return;\r\n    }\r\n\r\n    globalThis.ReadableStream = __w_pdfjs_require__(121).ReadableStream;\r\n  })();\r\n\r\n  (function checkStringPadStart() {\r\n    if (String.prototype.padStart) {\r\n      return;\r\n    }\r\n\r\n    __w_pdfjs_require__(122);\r\n  })();\r\n\r\n  (function checkStringPadEnd() {\r\n    if (String.prototype.padEnd) {\r\n      return;\r\n    }\r\n\r\n    __w_pdfjs_require__(128);\r\n  })();\r\n\r\n  (function checkObjectValues() {\r\n    if (Object.values) {\r\n      return;\r\n    }\r\n\r\n    Object.values = __w_pdfjs_require__(130);\r\n  })();\r\n\r\n  (function checkObjectEntries() {\r\n    if (Object.entries) {\r\n      return;\r\n    }\r\n\r\n    Object.entries = __w_pdfjs_require__(133);\r\n  })();\r\n}\r\n\r\n/***/ }),\r\n/* 6 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.isNodeJS = void 0;\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nvar isNodeJS = (typeof process === \"undefined\" ? \"undefined\" : _typeof(process)) === \"object\" && process + \"\" === \"[object process]\" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== \"browser\");\r\nexports.isNodeJS = isNodeJS;\r\n\r\n/***/ }),\r\n/* 7 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(8);\r\nmodule.exports = __w_pdfjs_require__(10);\r\n\r\n/***/ }),\r\n/* 8 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar global = __w_pdfjs_require__(10);\r\n$({ global: true }, { globalThis: global });\r\n\r\n/***/ }),\r\n/* 9 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar getOwnPropertyDescriptor = __w_pdfjs_require__(11).f;\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar setGlobal = __w_pdfjs_require__(29);\r\nvar copyConstructorProperties = __w_pdfjs_require__(39);\r\nvar isForced = __w_pdfjs_require__(51);\r\nmodule.exports = function (options, source) {\r\n var TARGET = options.target;\r\n var GLOBAL = options.global;\r\n var STATIC = options.stat;\r\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\r\n if (GLOBAL) {\r\n  target = global;\r\n } else if (STATIC) {\r\n  target = global[TARGET] || setGlobal(TARGET, {});\r\n } else {\r\n  target = (global[TARGET] || {}).prototype;\r\n }\r\n if (target)\r\n  for (key in source) {\r\n   sourceProperty = source[key];\r\n   if (options.noTargetGet) {\r\n    descriptor = getOwnPropertyDescriptor(target, key);\r\n    targetProperty = descriptor && descriptor.value;\r\n   } else\r\n    targetProperty = target[key];\r\n   FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\r\n   if (!FORCED && targetProperty !== undefined) {\r\n    if (typeof sourceProperty === typeof targetProperty)\r\n     continue;\r\n    copyConstructorProperties(sourceProperty, targetProperty);\r\n   }\r\n   if (options.sham || targetProperty && targetProperty.sham) {\r\n    createNonEnumerableProperty(sourceProperty, 'sham', true);\r\n   }\r\n   redefine(target, key, sourceProperty, options);\r\n  }\r\n};\r\n\r\n/***/ }),\r\n/* 10 */\r\n/***/ ((module) => {\r\n\r\nvar check = function (it) {\r\n return it && it.Math == Math && it;\r\n};\r\nmodule.exports = check(typeof globalThis == 'object' && globalThis) || check(typeof window == 'object' && window) || check(typeof self == 'object' && self) || check(typeof global == 'object' && global) || function () {\r\n return this;\r\n}() || Function('return this')();\r\n\r\n/***/ }),\r\n/* 11 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar propertyIsEnumerableModule = __w_pdfjs_require__(14);\r\nvar createPropertyDescriptor = __w_pdfjs_require__(15);\r\nvar toIndexedObject = __w_pdfjs_require__(16);\r\nvar toPrimitive = __w_pdfjs_require__(20);\r\nvar has = __w_pdfjs_require__(22);\r\nvar IE8_DOM_DEFINE = __w_pdfjs_require__(23);\r\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\r\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\r\n O = toIndexedObject(O);\r\n P = toPrimitive(P, true);\r\n if (IE8_DOM_DEFINE)\r\n  try {\r\n   return nativeGetOwnPropertyDescriptor(O, P);\r\n  } catch (error) {\r\n  }\r\n if (has(O, P))\r\n  return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\r\n};\r\n\r\n/***/ }),\r\n/* 12 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nmodule.exports = !fails(function () {\r\n return Object.defineProperty({}, 1, {\r\n  get: function () {\r\n   return 7;\r\n  }\r\n })[1] != 7;\r\n});\r\n\r\n/***/ }),\r\n/* 13 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (exec) {\r\n try {\r\n  return !!exec();\r\n } catch (error) {\r\n  return true;\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 14 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\n\"use strict\";\r\n\r\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\r\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\r\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\r\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\r\n var descriptor = getOwnPropertyDescriptor(this, V);\r\n return !!descriptor && descriptor.enumerable;\r\n} : nativePropertyIsEnumerable;\r\n\r\n/***/ }),\r\n/* 15 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (bitmap, value) {\r\n return {\r\n  enumerable: !(bitmap & 1),\r\n  configurable: !(bitmap & 2),\r\n  writable: !(bitmap & 4),\r\n  value: value\r\n };\r\n};\r\n\r\n/***/ }),\r\n/* 16 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar IndexedObject = __w_pdfjs_require__(17);\r\nvar requireObjectCoercible = __w_pdfjs_require__(19);\r\nmodule.exports = function (it) {\r\n return IndexedObject(requireObjectCoercible(it));\r\n};\r\n\r\n/***/ }),\r\n/* 17 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nvar classof = __w_pdfjs_require__(18);\r\nvar split = ''.split;\r\nmodule.exports = fails(function () {\r\n return !Object('z').propertyIsEnumerable(0);\r\n}) ? function (it) {\r\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\r\n} : Object;\r\n\r\n/***/ }),\r\n/* 18 */\r\n/***/ ((module) => {\r\n\r\nvar toString = {}.toString;\r\nmodule.exports = function (it) {\r\n return toString.call(it).slice(8, -1);\r\n};\r\n\r\n/***/ }),\r\n/* 19 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (it) {\r\n if (it == undefined)\r\n  throw TypeError(\"Can't call method on \" + it);\r\n return it;\r\n};\r\n\r\n/***/ }),\r\n/* 20 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar isObject = __w_pdfjs_require__(21);\r\nmodule.exports = function (input, PREFERRED_STRING) {\r\n if (!isObject(input))\r\n  return input;\r\n var fn, val;\r\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input)))\r\n  return val;\r\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input)))\r\n  return val;\r\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input)))\r\n  return val;\r\n throw TypeError(\"Can't convert object to primitive value\");\r\n};\r\n\r\n/***/ }),\r\n/* 21 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (it) {\r\n return typeof it === 'object' ? it !== null : typeof it === 'function';\r\n};\r\n\r\n/***/ }),\r\n/* 22 */\r\n/***/ ((module) => {\r\n\r\nvar hasOwnProperty = {}.hasOwnProperty;\r\nmodule.exports = function (it, key) {\r\n return hasOwnProperty.call(it, key);\r\n};\r\n\r\n/***/ }),\r\n/* 23 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar fails = __w_pdfjs_require__(13);\r\nvar createElement = __w_pdfjs_require__(24);\r\nmodule.exports = !DESCRIPTORS && !fails(function () {\r\n return Object.defineProperty(createElement('div'), 'a', {\r\n  get: function () {\r\n   return 7;\r\n  }\r\n }).a != 7;\r\n});\r\n\r\n/***/ }),\r\n/* 24 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar isObject = __w_pdfjs_require__(21);\r\nvar document = global.document;\r\nvar EXISTS = isObject(document) && isObject(document.createElement);\r\nmodule.exports = function (it) {\r\n return EXISTS ? document.createElement(it) : {};\r\n};\r\n\r\n/***/ }),\r\n/* 25 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar definePropertyModule = __w_pdfjs_require__(26);\r\nvar createPropertyDescriptor = __w_pdfjs_require__(15);\r\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\r\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\r\n} : function (object, key, value) {\r\n object[key] = value;\r\n return object;\r\n};\r\n\r\n/***/ }),\r\n/* 26 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar IE8_DOM_DEFINE = __w_pdfjs_require__(23);\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar toPrimitive = __w_pdfjs_require__(20);\r\nvar nativeDefineProperty = Object.defineProperty;\r\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\r\n anObject(O);\r\n P = toPrimitive(P, true);\r\n anObject(Attributes);\r\n if (IE8_DOM_DEFINE)\r\n  try {\r\n   return nativeDefineProperty(O, P, Attributes);\r\n  } catch (error) {\r\n  }\r\n if ('get' in Attributes || 'set' in Attributes)\r\n  throw TypeError('Accessors not supported');\r\n if ('value' in Attributes)\r\n  O[P] = Attributes.value;\r\n return O;\r\n};\r\n\r\n/***/ }),\r\n/* 27 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar isObject = __w_pdfjs_require__(21);\r\nmodule.exports = function (it) {\r\n if (!isObject(it)) {\r\n  throw TypeError(String(it) + ' is not an object');\r\n }\r\n return it;\r\n};\r\n\r\n/***/ }),\r\n/* 28 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar has = __w_pdfjs_require__(22);\r\nvar setGlobal = __w_pdfjs_require__(29);\r\nvar inspectSource = __w_pdfjs_require__(30);\r\nvar InternalStateModule = __w_pdfjs_require__(32);\r\nvar getInternalState = InternalStateModule.get;\r\nvar enforceInternalState = InternalStateModule.enforce;\r\nvar TEMPLATE = String(String).split('String');\r\n(module.exports = function (O, key, value, options) {\r\n var unsafe = options ? !!options.unsafe : false;\r\n var simple = options ? !!options.enumerable : false;\r\n var noTargetGet = options ? !!options.noTargetGet : false;\r\n var state;\r\n if (typeof value == 'function') {\r\n  if (typeof key == 'string' && !has(value, 'name')) {\r\n   createNonEnumerableProperty(value, 'name', key);\r\n  }\r\n  state = enforceInternalState(value);\r\n  if (!state.source) {\r\n   state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\r\n  }\r\n }\r\n if (O === global) {\r\n  if (simple)\r\n   O[key] = value;\r\n  else\r\n   setGlobal(key, value);\r\n  return;\r\n } else if (!unsafe) {\r\n  delete O[key];\r\n } else if (!noTargetGet && O[key]) {\r\n  simple = true;\r\n }\r\n if (simple)\r\n  O[key] = value;\r\n else\r\n  createNonEnumerableProperty(O, key, value);\r\n})(Function.prototype, 'toString', function toString() {\r\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\r\n});\r\n\r\n/***/ }),\r\n/* 29 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nmodule.exports = function (key, value) {\r\n try {\r\n  createNonEnumerableProperty(global, key, value);\r\n } catch (error) {\r\n  global[key] = value;\r\n }\r\n return value;\r\n};\r\n\r\n/***/ }),\r\n/* 30 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar store = __w_pdfjs_require__(31);\r\nvar functionToString = Function.toString;\r\nif (typeof store.inspectSource != 'function') {\r\n store.inspectSource = function (it) {\r\n  return functionToString.call(it);\r\n };\r\n}\r\nmodule.exports = store.inspectSource;\r\n\r\n/***/ }),\r\n/* 31 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar setGlobal = __w_pdfjs_require__(29);\r\nvar SHARED = '__core-js_shared__';\r\nvar store = global[SHARED] || setGlobal(SHARED, {});\r\nmodule.exports = store;\r\n\r\n/***/ }),\r\n/* 32 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar NATIVE_WEAK_MAP = __w_pdfjs_require__(33);\r\nvar global = __w_pdfjs_require__(10);\r\nvar isObject = __w_pdfjs_require__(21);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar objectHas = __w_pdfjs_require__(22);\r\nvar shared = __w_pdfjs_require__(31);\r\nvar sharedKey = __w_pdfjs_require__(34);\r\nvar hiddenKeys = __w_pdfjs_require__(38);\r\nvar WeakMap = global.WeakMap;\r\nvar set, get, has;\r\nvar enforce = function (it) {\r\n return has(it) ? get(it) : set(it, {});\r\n};\r\nvar getterFor = function (TYPE) {\r\n return function (it) {\r\n  var state;\r\n  if (!isObject(it) || (state = get(it)).type !== TYPE) {\r\n   throw TypeError('Incompatible receiver, ' + TYPE + ' required');\r\n  }\r\n  return state;\r\n };\r\n};\r\nif (NATIVE_WEAK_MAP) {\r\n var store = shared.state || (shared.state = new WeakMap());\r\n var wmget = store.get;\r\n var wmhas = store.has;\r\n var wmset = store.set;\r\n set = function (it, metadata) {\r\n  metadata.facade = it;\r\n  wmset.call(store, it, metadata);\r\n  return metadata;\r\n };\r\n get = function (it) {\r\n  return wmget.call(store, it) || {};\r\n };\r\n has = function (it) {\r\n  return wmhas.call(store, it);\r\n };\r\n} else {\r\n var STATE = sharedKey('state');\r\n hiddenKeys[STATE] = true;\r\n set = function (it, metadata) {\r\n  metadata.facade = it;\r\n  createNonEnumerableProperty(it, STATE, metadata);\r\n  return metadata;\r\n };\r\n get = function (it) {\r\n  return objectHas(it, STATE) ? it[STATE] : {};\r\n };\r\n has = function (it) {\r\n  return objectHas(it, STATE);\r\n };\r\n}\r\nmodule.exports = {\r\n set: set,\r\n get: get,\r\n has: has,\r\n enforce: enforce,\r\n getterFor: getterFor\r\n};\r\n\r\n/***/ }),\r\n/* 33 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar inspectSource = __w_pdfjs_require__(30);\r\nvar WeakMap = global.WeakMap;\r\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\r\n\r\n/***/ }),\r\n/* 34 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar shared = __w_pdfjs_require__(35);\r\nvar uid = __w_pdfjs_require__(37);\r\nvar keys = shared('keys');\r\nmodule.exports = function (key) {\r\n return keys[key] || (keys[key] = uid(key));\r\n};\r\n\r\n/***/ }),\r\n/* 35 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar IS_PURE = __w_pdfjs_require__(36);\r\nvar store = __w_pdfjs_require__(31);\r\n(module.exports = function (key, value) {\r\n return store[key] || (store[key] = value !== undefined ? value : {});\r\n})('versions', []).push({\r\n version: '3.8.3',\r\n mode: IS_PURE ? 'pure' : 'global',\r\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\r\n});\r\n\r\n/***/ }),\r\n/* 36 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = false;\r\n\r\n/***/ }),\r\n/* 37 */\r\n/***/ ((module) => {\r\n\r\nvar id = 0;\r\nvar postfix = Math.random();\r\nmodule.exports = function (key) {\r\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\r\n};\r\n\r\n/***/ }),\r\n/* 38 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = {};\r\n\r\n/***/ }),\r\n/* 39 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar has = __w_pdfjs_require__(22);\r\nvar ownKeys = __w_pdfjs_require__(40);\r\nvar getOwnPropertyDescriptorModule = __w_pdfjs_require__(11);\r\nvar definePropertyModule = __w_pdfjs_require__(26);\r\nmodule.exports = function (target, source) {\r\n var keys = ownKeys(source);\r\n var defineProperty = definePropertyModule.f;\r\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\r\n for (var i = 0; i < keys.length; i++) {\r\n  var key = keys[i];\r\n  if (!has(target, key))\r\n   defineProperty(target, key, getOwnPropertyDescriptor(source, key));\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 40 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nvar getOwnPropertyNamesModule = __w_pdfjs_require__(43);\r\nvar getOwnPropertySymbolsModule = __w_pdfjs_require__(50);\r\nvar anObject = __w_pdfjs_require__(27);\r\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\r\n var keys = getOwnPropertyNamesModule.f(anObject(it));\r\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\r\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\r\n};\r\n\r\n/***/ }),\r\n/* 41 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar path = __w_pdfjs_require__(42);\r\nvar global = __w_pdfjs_require__(10);\r\nvar aFunction = function (variable) {\r\n return typeof variable == 'function' ? variable : undefined;\r\n};\r\nmodule.exports = function (namespace, method) {\r\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\r\n};\r\n\r\n/***/ }),\r\n/* 42 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nmodule.exports = global;\r\n\r\n/***/ }),\r\n/* 43 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\nvar internalObjectKeys = __w_pdfjs_require__(44);\r\nvar enumBugKeys = __w_pdfjs_require__(49);\r\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\r\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\r\n return internalObjectKeys(O, hiddenKeys);\r\n};\r\n\r\n/***/ }),\r\n/* 44 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar has = __w_pdfjs_require__(22);\r\nvar toIndexedObject = __w_pdfjs_require__(16);\r\nvar indexOf = __w_pdfjs_require__(45).indexOf;\r\nvar hiddenKeys = __w_pdfjs_require__(38);\r\nmodule.exports = function (object, names) {\r\n var O = toIndexedObject(object);\r\n var i = 0;\r\n var result = [];\r\n var key;\r\n for (key in O)\r\n  !has(hiddenKeys, key) && has(O, key) && result.push(key);\r\n while (names.length > i)\r\n  if (has(O, key = names[i++])) {\r\n   ~indexOf(result, key) || result.push(key);\r\n  }\r\n return result;\r\n};\r\n\r\n/***/ }),\r\n/* 45 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar toIndexedObject = __w_pdfjs_require__(16);\r\nvar toLength = __w_pdfjs_require__(46);\r\nvar toAbsoluteIndex = __w_pdfjs_require__(48);\r\nvar createMethod = function (IS_INCLUDES) {\r\n return function ($this, el, fromIndex) {\r\n  var O = toIndexedObject($this);\r\n  var length = toLength(O.length);\r\n  var index = toAbsoluteIndex(fromIndex, length);\r\n  var value;\r\n  if (IS_INCLUDES && el != el)\r\n   while (length > index) {\r\n    value = O[index++];\r\n    if (value != value)\r\n     return true;\r\n   }\r\n  else\r\n   for (; length > index; index++) {\r\n    if ((IS_INCLUDES || index in O) && O[index] === el)\r\n     return IS_INCLUDES || index || 0;\r\n   }\r\n  return !IS_INCLUDES && -1;\r\n };\r\n};\r\nmodule.exports = {\r\n includes: createMethod(true),\r\n indexOf: createMethod(false)\r\n};\r\n\r\n/***/ }),\r\n/* 46 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar toInteger = __w_pdfjs_require__(47);\r\nvar min = Math.min;\r\nmodule.exports = function (argument) {\r\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0;\r\n};\r\n\r\n/***/ }),\r\n/* 47 */\r\n/***/ ((module) => {\r\n\r\nvar ceil = Math.ceil;\r\nvar floor = Math.floor;\r\nmodule.exports = function (argument) {\r\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\r\n};\r\n\r\n/***/ }),\r\n/* 48 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar toInteger = __w_pdfjs_require__(47);\r\nvar max = Math.max;\r\nvar min = Math.min;\r\nmodule.exports = function (index, length) {\r\n var integer = toInteger(index);\r\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\r\n};\r\n\r\n/***/ }),\r\n/* 49 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = [\r\n 'constructor',\r\n 'hasOwnProperty',\r\n 'isPrototypeOf',\r\n 'propertyIsEnumerable',\r\n 'toLocaleString',\r\n 'toString',\r\n 'valueOf'\r\n];\r\n\r\n/***/ }),\r\n/* 50 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\nexports.f = Object.getOwnPropertySymbols;\r\n\r\n/***/ }),\r\n/* 51 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nvar replacement = /#|\\.prototype\\./;\r\nvar isForced = function (feature, detection) {\r\n var value = data[normalize(feature)];\r\n return value == POLYFILL ? true : value == NATIVE ? false : typeof detection == 'function' ? fails(detection) : !!detection;\r\n};\r\nvar normalize = isForced.normalize = function (string) {\r\n return String(string).replace(replacement, '.').toLowerCase();\r\n};\r\nvar data = isForced.data = {};\r\nvar NATIVE = isForced.NATIVE = 'N';\r\nvar POLYFILL = isForced.POLYFILL = 'P';\r\nmodule.exports = isForced;\r\n\r\n/***/ }),\r\n/* 52 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(53);\r\n__w_pdfjs_require__(72);\r\nvar path = __w_pdfjs_require__(42);\r\nmodule.exports = path.Object.fromEntries;\r\n\r\n/***/ }),\r\n/* 53 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar toIndexedObject = __w_pdfjs_require__(16);\r\nvar addToUnscopables = __w_pdfjs_require__(54);\r\nvar Iterators = __w_pdfjs_require__(62);\r\nvar InternalStateModule = __w_pdfjs_require__(32);\r\nvar defineIterator = __w_pdfjs_require__(63);\r\nvar ARRAY_ITERATOR = 'Array Iterator';\r\nvar setInternalState = InternalStateModule.set;\r\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\r\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\r\n setInternalState(this, {\r\n  type: ARRAY_ITERATOR,\r\n  target: toIndexedObject(iterated),\r\n  index: 0,\r\n  kind: kind\r\n });\r\n}, function () {\r\n var state = getInternalState(this);\r\n var target = state.target;\r\n var kind = state.kind;\r\n var index = state.index++;\r\n if (!target || index >= target.length) {\r\n  state.target = undefined;\r\n  return {\r\n   value: undefined,\r\n   done: true\r\n  };\r\n }\r\n if (kind == 'keys')\r\n  return {\r\n   value: index,\r\n   done: false\r\n  };\r\n if (kind == 'values')\r\n  return {\r\n   value: target[index],\r\n   done: false\r\n  };\r\n return {\r\n  value: [\r\n   index,\r\n   target[index]\r\n  ],\r\n  done: false\r\n };\r\n}, 'values');\r\nIterators.Arguments = Iterators.Array;\r\naddToUnscopables('keys');\r\naddToUnscopables('values');\r\naddToUnscopables('entries');\r\n\r\n/***/ }),\r\n/* 54 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar create = __w_pdfjs_require__(58);\r\nvar definePropertyModule = __w_pdfjs_require__(26);\r\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\r\nvar ArrayPrototype = Array.prototype;\r\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\r\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\r\n  configurable: true,\r\n  value: create(null)\r\n });\r\n}\r\nmodule.exports = function (key) {\r\n ArrayPrototype[UNSCOPABLES][key] = true;\r\n};\r\n\r\n/***/ }),\r\n/* 55 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar shared = __w_pdfjs_require__(35);\r\nvar has = __w_pdfjs_require__(22);\r\nvar uid = __w_pdfjs_require__(37);\r\nvar NATIVE_SYMBOL = __w_pdfjs_require__(56);\r\nvar USE_SYMBOL_AS_UID = __w_pdfjs_require__(57);\r\nvar WellKnownSymbolsStore = shared('wks');\r\nvar Symbol = global.Symbol;\r\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\r\nmodule.exports = function (name) {\r\n if (!has(WellKnownSymbolsStore, name)) {\r\n  if (NATIVE_SYMBOL && has(Symbol, name))\r\n   WellKnownSymbolsStore[name] = Symbol[name];\r\n  else\r\n   WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\r\n }\r\n return WellKnownSymbolsStore[name];\r\n};\r\n\r\n/***/ }),\r\n/* 56 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\r\n return !String(Symbol());\r\n});\r\n\r\n/***/ }),\r\n/* 57 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar NATIVE_SYMBOL = __w_pdfjs_require__(56);\r\nmodule.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == 'symbol';\r\n\r\n/***/ }),\r\n/* 58 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar defineProperties = __w_pdfjs_require__(59);\r\nvar enumBugKeys = __w_pdfjs_require__(49);\r\nvar hiddenKeys = __w_pdfjs_require__(38);\r\nvar html = __w_pdfjs_require__(61);\r\nvar documentCreateElement = __w_pdfjs_require__(24);\r\nvar sharedKey = __w_pdfjs_require__(34);\r\nvar GT = '>';\r\nvar LT = '<';\r\nvar PROTOTYPE = 'prototype';\r\nvar SCRIPT = 'script';\r\nvar IE_PROTO = sharedKey('IE_PROTO');\r\nvar EmptyConstructor = function () {\r\n};\r\nvar scriptTag = function (content) {\r\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\r\n};\r\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\r\n activeXDocument.write(scriptTag(''));\r\n activeXDocument.close();\r\n var temp = activeXDocument.parentWindow.Object;\r\n activeXDocument = null;\r\n return temp;\r\n};\r\nvar NullProtoObjectViaIFrame = function () {\r\n var iframe = documentCreateElement('iframe');\r\n var JS = 'java' + SCRIPT + ':';\r\n var iframeDocument;\r\n iframe.style.display = 'none';\r\n html.appendChild(iframe);\r\n iframe.src = String(JS);\r\n iframeDocument = iframe.contentWindow.document;\r\n iframeDocument.open();\r\n iframeDocument.write(scriptTag('document.F=Object'));\r\n iframeDocument.close();\r\n return iframeDocument.F;\r\n};\r\nvar activeXDocument;\r\nvar NullProtoObject = function () {\r\n try {\r\n  activeXDocument = document.domain && new ActiveXObject('htmlfile');\r\n } catch (error) {\r\n }\r\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\r\n var length = enumBugKeys.length;\r\n while (length--)\r\n  delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\r\n return NullProtoObject();\r\n};\r\nhiddenKeys[IE_PROTO] = true;\r\nmodule.exports = Object.create || function create(O, Properties) {\r\n var result;\r\n if (O !== null) {\r\n  EmptyConstructor[PROTOTYPE] = anObject(O);\r\n  result = new EmptyConstructor();\r\n  EmptyConstructor[PROTOTYPE] = null;\r\n  result[IE_PROTO] = O;\r\n } else\r\n  result = NullProtoObject();\r\n return Properties === undefined ? result : defineProperties(result, Properties);\r\n};\r\n\r\n/***/ }),\r\n/* 59 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar definePropertyModule = __w_pdfjs_require__(26);\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar objectKeys = __w_pdfjs_require__(60);\r\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\r\n anObject(O);\r\n var keys = objectKeys(Properties);\r\n var length = keys.length;\r\n var index = 0;\r\n var key;\r\n while (length > index)\r\n  definePropertyModule.f(O, key = keys[index++], Properties[key]);\r\n return O;\r\n};\r\n\r\n/***/ }),\r\n/* 60 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar internalObjectKeys = __w_pdfjs_require__(44);\r\nvar enumBugKeys = __w_pdfjs_require__(49);\r\nmodule.exports = Object.keys || function keys(O) {\r\n return internalObjectKeys(O, enumBugKeys);\r\n};\r\n\r\n/***/ }),\r\n/* 61 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nmodule.exports = getBuiltIn('document', 'documentElement');\r\n\r\n/***/ }),\r\n/* 62 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = {};\r\n\r\n/***/ }),\r\n/* 63 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar createIteratorConstructor = __w_pdfjs_require__(64);\r\nvar getPrototypeOf = __w_pdfjs_require__(66);\r\nvar setPrototypeOf = __w_pdfjs_require__(70);\r\nvar setToStringTag = __w_pdfjs_require__(69);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar IS_PURE = __w_pdfjs_require__(36);\r\nvar Iterators = __w_pdfjs_require__(62);\r\nvar IteratorsCore = __w_pdfjs_require__(65);\r\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\r\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nvar KEYS = 'keys';\r\nvar VALUES = 'values';\r\nvar ENTRIES = 'entries';\r\nvar returnThis = function () {\r\n return this;\r\n};\r\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\r\n createIteratorConstructor(IteratorConstructor, NAME, next);\r\n var getIterationMethod = function (KIND) {\r\n  if (KIND === DEFAULT && defaultIterator)\r\n   return defaultIterator;\r\n  if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype)\r\n   return IterablePrototype[KIND];\r\n  switch (KIND) {\r\n  case KEYS:\r\n   return function keys() {\r\n    return new IteratorConstructor(this, KIND);\r\n   };\r\n  case VALUES:\r\n   return function values() {\r\n    return new IteratorConstructor(this, KIND);\r\n   };\r\n  case ENTRIES:\r\n   return function entries() {\r\n    return new IteratorConstructor(this, KIND);\r\n   };\r\n  }\r\n  return function () {\r\n   return new IteratorConstructor(this);\r\n  };\r\n };\r\n var TO_STRING_TAG = NAME + ' Iterator';\r\n var INCORRECT_VALUES_NAME = false;\r\n var IterablePrototype = Iterable.prototype;\r\n var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype['@@iterator'] || DEFAULT && IterablePrototype[DEFAULT];\r\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\r\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\r\n var CurrentIteratorPrototype, methods, KEY;\r\n if (anyNativeIterator) {\r\n  CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\r\n  if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\r\n   if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\r\n    if (setPrototypeOf) {\r\n     setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\r\n    } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\r\n     createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\r\n    }\r\n   }\r\n   setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\r\n   if (IS_PURE)\r\n    Iterators[TO_STRING_TAG] = returnThis;\r\n  }\r\n }\r\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\r\n  INCORRECT_VALUES_NAME = true;\r\n  defaultIterator = function values() {\r\n   return nativeIterator.call(this);\r\n  };\r\n }\r\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\r\n  createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\r\n }\r\n Iterators[NAME] = defaultIterator;\r\n if (DEFAULT) {\r\n  methods = {\r\n   values: getIterationMethod(VALUES),\r\n   keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\r\n   entries: getIterationMethod(ENTRIES)\r\n  };\r\n  if (FORCED)\r\n   for (KEY in methods) {\r\n    if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\r\n     redefine(IterablePrototype, KEY, methods[KEY]);\r\n    }\r\n   }\r\n  else\r\n   $({\r\n    target: NAME,\r\n    proto: true,\r\n    forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME\r\n   }, methods);\r\n }\r\n return methods;\r\n};\r\n\r\n/***/ }),\r\n/* 64 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar IteratorPrototype = __w_pdfjs_require__(65).IteratorPrototype;\r\nvar create = __w_pdfjs_require__(58);\r\nvar createPropertyDescriptor = __w_pdfjs_require__(15);\r\nvar setToStringTag = __w_pdfjs_require__(69);\r\nvar Iterators = __w_pdfjs_require__(62);\r\nvar returnThis = function () {\r\n return this;\r\n};\r\nmodule.exports = function (IteratorConstructor, NAME, next) {\r\n var TO_STRING_TAG = NAME + ' Iterator';\r\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\r\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\r\n Iterators[TO_STRING_TAG] = returnThis;\r\n return IteratorConstructor;\r\n};\r\n\r\n/***/ }),\r\n/* 65 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nvar getPrototypeOf = __w_pdfjs_require__(66);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar has = __w_pdfjs_require__(22);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar IS_PURE = __w_pdfjs_require__(36);\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nvar BUGGY_SAFARI_ITERATORS = false;\r\nvar returnThis = function () {\r\n return this;\r\n};\r\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\r\nif ([].keys) {\r\n arrayIterator = [].keys();\r\n if (!('next' in arrayIterator))\r\n  BUGGY_SAFARI_ITERATORS = true;\r\n else {\r\n  PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\r\n  if (PrototypeOfArrayIteratorPrototype !== Object.prototype)\r\n   IteratorPrototype = PrototypeOfArrayIteratorPrototype;\r\n }\r\n}\r\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\r\n var test = {};\r\n return IteratorPrototype[ITERATOR].call(test) !== test;\r\n});\r\nif (NEW_ITERATOR_PROTOTYPE)\r\n IteratorPrototype = {};\r\nif ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {\r\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\r\n}\r\nmodule.exports = {\r\n IteratorPrototype: IteratorPrototype,\r\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\r\n};\r\n\r\n/***/ }),\r\n/* 66 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar has = __w_pdfjs_require__(22);\r\nvar toObject = __w_pdfjs_require__(67);\r\nvar sharedKey = __w_pdfjs_require__(34);\r\nvar CORRECT_PROTOTYPE_GETTER = __w_pdfjs_require__(68);\r\nvar IE_PROTO = sharedKey('IE_PROTO');\r\nvar ObjectPrototype = Object.prototype;\r\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\r\n O = toObject(O);\r\n if (has(O, IE_PROTO))\r\n  return O[IE_PROTO];\r\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\r\n  return O.constructor.prototype;\r\n }\r\n return O instanceof Object ? ObjectPrototype : null;\r\n};\r\n\r\n/***/ }),\r\n/* 67 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar requireObjectCoercible = __w_pdfjs_require__(19);\r\nmodule.exports = function (argument) {\r\n return Object(requireObjectCoercible(argument));\r\n};\r\n\r\n/***/ }),\r\n/* 68 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nmodule.exports = !fails(function () {\r\n function F() {\r\n }\r\n F.prototype.constructor = null;\r\n return Object.getPrototypeOf(new F()) !== F.prototype;\r\n});\r\n\r\n/***/ }),\r\n/* 69 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar defineProperty = __w_pdfjs_require__(26).f;\r\nvar has = __w_pdfjs_require__(22);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\r\nmodule.exports = function (it, TAG, STATIC) {\r\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\r\n  defineProperty(it, TO_STRING_TAG, {\r\n   configurable: true,\r\n   value: TAG\r\n  });\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 70 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar aPossiblePrototype = __w_pdfjs_require__(71);\r\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\r\n var CORRECT_SETTER = false;\r\n var test = {};\r\n var setter;\r\n try {\r\n  setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\r\n  setter.call(test, []);\r\n  CORRECT_SETTER = test instanceof Array;\r\n } catch (error) {\r\n }\r\n return function setPrototypeOf(O, proto) {\r\n  anObject(O);\r\n  aPossiblePrototype(proto);\r\n  if (CORRECT_SETTER)\r\n   setter.call(O, proto);\r\n  else\r\n   O.__proto__ = proto;\r\n  return O;\r\n };\r\n}() : undefined);\r\n\r\n/***/ }),\r\n/* 71 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar isObject = __w_pdfjs_require__(21);\r\nmodule.exports = function (it) {\r\n if (!isObject(it) && it !== null) {\r\n  throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\r\n }\r\n return it;\r\n};\r\n\r\n/***/ }),\r\n/* 72 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar iterate = __w_pdfjs_require__(73);\r\nvar createProperty = __w_pdfjs_require__(81);\r\n$({\r\n target: 'Object',\r\n stat: true\r\n}, {\r\n fromEntries: function fromEntries(iterable) {\r\n  var obj = {};\r\n  iterate(iterable, function (k, v) {\r\n   createProperty(obj, k, v);\r\n  }, { AS_ENTRIES: true });\r\n  return obj;\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 73 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar isArrayIteratorMethod = __w_pdfjs_require__(74);\r\nvar toLength = __w_pdfjs_require__(46);\r\nvar bind = __w_pdfjs_require__(75);\r\nvar getIteratorMethod = __w_pdfjs_require__(77);\r\nvar iteratorClose = __w_pdfjs_require__(80);\r\nvar Result = function (stopped, result) {\r\n this.stopped = stopped;\r\n this.result = result;\r\n};\r\nmodule.exports = function (iterable, unboundFunction, options) {\r\n var that = options && options.that;\r\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\r\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\r\n var INTERRUPTED = !!(options && options.INTERRUPTED);\r\n var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);\r\n var iterator, iterFn, index, length, result, next, step;\r\n var stop = function (condition) {\r\n  if (iterator)\r\n   iteratorClose(iterator);\r\n  return new Result(true, condition);\r\n };\r\n var callFn = function (value) {\r\n  if (AS_ENTRIES) {\r\n   anObject(value);\r\n   return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\r\n  }\r\n  return INTERRUPTED ? fn(value, stop) : fn(value);\r\n };\r\n if (IS_ITERATOR) {\r\n  iterator = iterable;\r\n } else {\r\n  iterFn = getIteratorMethod(iterable);\r\n  if (typeof iterFn != 'function')\r\n   throw TypeError('Target is not iterable');\r\n  if (isArrayIteratorMethod(iterFn)) {\r\n   for (index = 0, length = toLength(iterable.length); length > index; index++) {\r\n    result = callFn(iterable[index]);\r\n    if (result && result instanceof Result)\r\n     return result;\r\n   }\r\n   return new Result(false);\r\n  }\r\n  iterator = iterFn.call(iterable);\r\n }\r\n next = iterator.next;\r\n while (!(step = next.call(iterator)).done) {\r\n  try {\r\n   result = callFn(step.value);\r\n  } catch (error) {\r\n   iteratorClose(iterator);\r\n   throw error;\r\n  }\r\n  if (typeof result == 'object' && result && result instanceof Result)\r\n   return result;\r\n }\r\n return new Result(false);\r\n};\r\n\r\n/***/ }),\r\n/* 74 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar Iterators = __w_pdfjs_require__(62);\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nvar ArrayPrototype = Array.prototype;\r\nmodule.exports = function (it) {\r\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\r\n};\r\n\r\n/***/ }),\r\n/* 75 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar aFunction = __w_pdfjs_require__(76);\r\nmodule.exports = function (fn, that, length) {\r\n aFunction(fn);\r\n if (that === undefined)\r\n  return fn;\r\n switch (length) {\r\n case 0:\r\n  return function () {\r\n   return fn.call(that);\r\n  };\r\n case 1:\r\n  return function (a) {\r\n   return fn.call(that, a);\r\n  };\r\n case 2:\r\n  return function (a, b) {\r\n   return fn.call(that, a, b);\r\n  };\r\n case 3:\r\n  return function (a, b, c) {\r\n   return fn.call(that, a, b, c);\r\n  };\r\n }\r\n return function () {\r\n  return fn.apply(that, arguments);\r\n };\r\n};\r\n\r\n/***/ }),\r\n/* 76 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (it) {\r\n if (typeof it != 'function') {\r\n  throw TypeError(String(it) + ' is not a function');\r\n }\r\n return it;\r\n};\r\n\r\n/***/ }),\r\n/* 77 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar classof = __w_pdfjs_require__(78);\r\nvar Iterators = __w_pdfjs_require__(62);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nmodule.exports = function (it) {\r\n if (it != undefined)\r\n  return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)];\r\n};\r\n\r\n/***/ }),\r\n/* 78 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79);\r\nvar classofRaw = __w_pdfjs_require__(18);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\r\nvar CORRECT_ARGUMENTS = classofRaw(function () {\r\n return arguments;\r\n}()) == 'Arguments';\r\nvar tryGet = function (it, key) {\r\n try {\r\n  return it[key];\r\n } catch (error) {\r\n }\r\n};\r\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\r\n var O, tag, result;\r\n return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\r\n};\r\n\r\n/***/ }),\r\n/* 79 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\r\nvar test = {};\r\ntest[TO_STRING_TAG] = 'z';\r\nmodule.exports = String(test) === '[object z]';\r\n\r\n/***/ }),\r\n/* 80 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nmodule.exports = function (iterator) {\r\n var returnMethod = iterator['return'];\r\n if (returnMethod !== undefined) {\r\n  return anObject(returnMethod.call(iterator)).value;\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 81 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar toPrimitive = __w_pdfjs_require__(20);\r\nvar definePropertyModule = __w_pdfjs_require__(26);\r\nvar createPropertyDescriptor = __w_pdfjs_require__(15);\r\nmodule.exports = function (object, key, value) {\r\n var propertyKey = toPrimitive(key);\r\n if (propertyKey in object)\r\n  definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\r\n else\r\n  object[propertyKey] = value;\r\n};\r\n\r\n/***/ }),\r\n/* 82 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(83);\r\n__w_pdfjs_require__(84);\r\n__w_pdfjs_require__(86);\r\n__w_pdfjs_require__(104);\r\n__w_pdfjs_require__(105);\r\n__w_pdfjs_require__(106);\r\n__w_pdfjs_require__(107);\r\n__w_pdfjs_require__(109);\r\nvar path = __w_pdfjs_require__(42);\r\nmodule.exports = path.Promise;\r\n\r\n/***/ }),\r\n/* 83 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar getPrototypeOf = __w_pdfjs_require__(66);\r\nvar setPrototypeOf = __w_pdfjs_require__(70);\r\nvar create = __w_pdfjs_require__(58);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar createPropertyDescriptor = __w_pdfjs_require__(15);\r\nvar iterate = __w_pdfjs_require__(73);\r\nvar $AggregateError = function AggregateError(errors, message) {\r\n var that = this;\r\n if (!(that instanceof $AggregateError))\r\n  return new $AggregateError(errors, message);\r\n if (setPrototypeOf) {\r\n  that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));\r\n }\r\n if (message !== undefined)\r\n  createNonEnumerableProperty(that, 'message', String(message));\r\n var errorsArray = [];\r\n iterate(errors, errorsArray.push, { that: errorsArray });\r\n createNonEnumerableProperty(that, 'errors', errorsArray);\r\n return that;\r\n};\r\n$AggregateError.prototype = create(Error.prototype, {\r\n constructor: createPropertyDescriptor(5, $AggregateError),\r\n message: createPropertyDescriptor(5, ''),\r\n name: createPropertyDescriptor(5, 'AggregateError')\r\n});\r\n$({ global: true }, { AggregateError: $AggregateError });\r\n\r\n/***/ }),\r\n/* 84 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar toString = __w_pdfjs_require__(85);\r\nif (!TO_STRING_TAG_SUPPORT) {\r\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\r\n}\r\n\r\n/***/ }),\r\n/* 85 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79);\r\nvar classof = __w_pdfjs_require__(78);\r\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\r\n return '[object ' + classof(this) + ']';\r\n};\r\n\r\n/***/ }),\r\n/* 86 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar IS_PURE = __w_pdfjs_require__(36);\r\nvar global = __w_pdfjs_require__(10);\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nvar NativePromise = __w_pdfjs_require__(87);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar redefineAll = __w_pdfjs_require__(88);\r\nvar setToStringTag = __w_pdfjs_require__(69);\r\nvar setSpecies = __w_pdfjs_require__(89);\r\nvar isObject = __w_pdfjs_require__(21);\r\nvar aFunction = __w_pdfjs_require__(76);\r\nvar anInstance = __w_pdfjs_require__(90);\r\nvar inspectSource = __w_pdfjs_require__(30);\r\nvar iterate = __w_pdfjs_require__(73);\r\nvar checkCorrectnessOfIteration = __w_pdfjs_require__(91);\r\nvar speciesConstructor = __w_pdfjs_require__(92);\r\nvar task = __w_pdfjs_require__(93).set;\r\nvar microtask = __w_pdfjs_require__(97);\r\nvar promiseResolve = __w_pdfjs_require__(99);\r\nvar hostReportErrors = __w_pdfjs_require__(101);\r\nvar newPromiseCapabilityModule = __w_pdfjs_require__(100);\r\nvar perform = __w_pdfjs_require__(102);\r\nvar InternalStateModule = __w_pdfjs_require__(32);\r\nvar isForced = __w_pdfjs_require__(51);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar IS_NODE = __w_pdfjs_require__(96);\r\nvar V8_VERSION = __w_pdfjs_require__(103);\r\nvar SPECIES = wellKnownSymbol('species');\r\nvar PROMISE = 'Promise';\r\nvar getInternalState = InternalStateModule.get;\r\nvar setInternalState = InternalStateModule.set;\r\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\r\nvar PromiseConstructor = NativePromise;\r\nvar TypeError = global.TypeError;\r\nvar document = global.document;\r\nvar process = global.process;\r\nvar $fetch = getBuiltIn('fetch');\r\nvar newPromiseCapability = newPromiseCapabilityModule.f;\r\nvar newGenericPromiseCapability = newPromiseCapability;\r\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\r\nvar NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';\r\nvar UNHANDLED_REJECTION = 'unhandledrejection';\r\nvar REJECTION_HANDLED = 'rejectionhandled';\r\nvar PENDING = 0;\r\nvar FULFILLED = 1;\r\nvar REJECTED = 2;\r\nvar HANDLED = 1;\r\nvar UNHANDLED = 2;\r\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\r\nvar FORCED = isForced(PROMISE, function () {\r\n var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);\r\n if (!GLOBAL_CORE_JS_PROMISE) {\r\n  if (V8_VERSION === 66)\r\n   return true;\r\n  if (!IS_NODE && !NATIVE_REJECTION_EVENT)\r\n   return true;\r\n }\r\n if (IS_PURE && !PromiseConstructor.prototype['finally'])\r\n  return true;\r\n if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor))\r\n  return false;\r\n var promise = PromiseConstructor.resolve(1);\r\n var FakePromise = function (exec) {\r\n  exec(function () {\r\n  }, function () {\r\n  });\r\n };\r\n var constructor = promise.constructor = {};\r\n constructor[SPECIES] = FakePromise;\r\n return !(promise.then(function () {\r\n }) instanceof FakePromise);\r\n});\r\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\r\n PromiseConstructor.all(iterable)['catch'](function () {\r\n });\r\n});\r\nvar isThenable = function (it) {\r\n var then;\r\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\r\n};\r\nvar notify = function (state, isReject) {\r\n if (state.notified)\r\n  return;\r\n state.notified = true;\r\n var chain = state.reactions;\r\n microtask(function () {\r\n  var value = state.value;\r\n  var ok = state.state == FULFILLED;\r\n  var index = 0;\r\n  while (chain.length > index) {\r\n   var reaction = chain[index++];\r\n   var handler = ok ? reaction.ok : reaction.fail;\r\n   var resolve = reaction.resolve;\r\n   var reject = reaction.reject;\r\n   var domain = reaction.domain;\r\n   var result, then, exited;\r\n   try {\r\n    if (handler) {\r\n     if (!ok) {\r\n      if (state.rejection === UNHANDLED)\r\n       onHandleUnhandled(state);\r\n      state.rejection = HANDLED;\r\n     }\r\n     if (handler === true)\r\n      result = value;\r\n     else {\r\n      if (domain)\r\n       domain.enter();\r\n      result = handler(value);\r\n      if (domain) {\r\n       domain.exit();\r\n       exited = true;\r\n      }\r\n     }\r\n     if (result === reaction.promise) {\r\n      reject(TypeError('Promise-chain cycle'));\r\n     } else if (then = isThenable(result)) {\r\n      then.call(result, resolve, reject);\r\n     } else\r\n      resolve(result);\r\n    } else\r\n     reject(value);\r\n   } catch (error) {\r\n    if (domain && !exited)\r\n     domain.exit();\r\n    reject(error);\r\n   }\r\n  }\r\n  state.reactions = [];\r\n  state.notified = false;\r\n  if (isReject && !state.rejection)\r\n   onUnhandled(state);\r\n });\r\n};\r\nvar dispatchEvent = function (name, promise, reason) {\r\n var event, handler;\r\n if (DISPATCH_EVENT) {\r\n  event = document.createEvent('Event');\r\n  event.promise = promise;\r\n  event.reason = reason;\r\n  event.initEvent(name, false, true);\r\n  global.dispatchEvent(event);\r\n } else\r\n  event = {\r\n   promise: promise,\r\n   reason: reason\r\n  };\r\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name]))\r\n  handler(event);\r\n else if (name === UNHANDLED_REJECTION)\r\n  hostReportErrors('Unhandled promise rejection', reason);\r\n};\r\nvar onUnhandled = function (state) {\r\n task.call(global, function () {\r\n  var promise = state.facade;\r\n  var value = state.value;\r\n  var IS_UNHANDLED = isUnhandled(state);\r\n  var result;\r\n  if (IS_UNHANDLED) {\r\n   result = perform(function () {\r\n    if (IS_NODE) {\r\n     process.emit('unhandledRejection', value, promise);\r\n    } else\r\n     dispatchEvent(UNHANDLED_REJECTION, promise, value);\r\n   });\r\n   state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\r\n   if (result.error)\r\n    throw result.value;\r\n  }\r\n });\r\n};\r\nvar isUnhandled = function (state) {\r\n return state.rejection !== HANDLED && !state.parent;\r\n};\r\nvar onHandleUnhandled = function (state) {\r\n task.call(global, function () {\r\n  var promise = state.facade;\r\n  if (IS_NODE) {\r\n   process.emit('rejectionHandled', promise);\r\n  } else\r\n   dispatchEvent(REJECTION_HANDLED, promise, state.value);\r\n });\r\n};\r\nvar bind = function (fn, state, unwrap) {\r\n return function (value) {\r\n  fn(state, value, unwrap);\r\n };\r\n};\r\nvar internalReject = function (state, value, unwrap) {\r\n if (state.done)\r\n  return;\r\n state.done = true;\r\n if (unwrap)\r\n  state = unwrap;\r\n state.value = value;\r\n state.state = REJECTED;\r\n notify(state, true);\r\n};\r\nvar internalResolve = function (state, value, unwrap) {\r\n if (state.done)\r\n  return;\r\n state.done = true;\r\n if (unwrap)\r\n  state = unwrap;\r\n try {\r\n  if (state.facade === value)\r\n   throw TypeError(\"Promise can't be resolved itself\");\r\n  var then = isThenable(value);\r\n  if (then) {\r\n   microtask(function () {\r\n    var wrapper = { done: false };\r\n    try {\r\n     then.call(value, bind(internalResolve, wrapper, state), bind(internalReject, wrapper, state));\r\n    } catch (error) {\r\n     internalReject(wrapper, error, state);\r\n    }\r\n   });\r\n  } else {\r\n   state.value = value;\r\n   state.state = FULFILLED;\r\n   notify(state, false);\r\n  }\r\n } catch (error) {\r\n  internalReject({ done: false }, error, state);\r\n }\r\n};\r\nif (FORCED) {\r\n PromiseConstructor = function Promise(executor) {\r\n  anInstance(this, PromiseConstructor, PROMISE);\r\n  aFunction(executor);\r\n  Internal.call(this);\r\n  var state = getInternalState(this);\r\n  try {\r\n   executor(bind(internalResolve, state), bind(internalReject, state));\r\n  } catch (error) {\r\n   internalReject(state, error);\r\n  }\r\n };\r\n Internal = function Promise(executor) {\r\n  setInternalState(this, {\r\n   type: PROMISE,\r\n   done: false,\r\n   notified: false,\r\n   parent: false,\r\n   reactions: [],\r\n   rejection: false,\r\n   state: PENDING,\r\n   value: undefined\r\n  });\r\n };\r\n Internal.prototype = redefineAll(PromiseConstructor.prototype, {\r\n  then: function then(onFulfilled, onRejected) {\r\n   var state = getInternalPromiseState(this);\r\n   var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\r\n   reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\r\n   reaction.fail = typeof onRejected == 'function' && onRejected;\r\n   reaction.domain = IS_NODE ? process.domain : undefined;\r\n   state.parent = true;\r\n   state.reactions.push(reaction);\r\n   if (state.state != PENDING)\r\n    notify(state, false);\r\n   return reaction.promise;\r\n  },\r\n  'catch': function (onRejected) {\r\n   return this.then(undefined, onRejected);\r\n  }\r\n });\r\n OwnPromiseCapability = function () {\r\n  var promise = new Internal();\r\n  var state = getInternalState(promise);\r\n  this.promise = promise;\r\n  this.resolve = bind(internalResolve, state);\r\n  this.reject = bind(internalReject, state);\r\n };\r\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\r\n  return C === PromiseConstructor || C === PromiseWrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C);\r\n };\r\n if (!IS_PURE && typeof NativePromise == 'function') {\r\n  nativeThen = NativePromise.prototype.then;\r\n  redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) {\r\n   var that = this;\r\n   return new PromiseConstructor(function (resolve, reject) {\r\n    nativeThen.call(that, resolve, reject);\r\n   }).then(onFulfilled, onRejected);\r\n  }, { unsafe: true });\r\n  if (typeof $fetch == 'function')\r\n   $({\r\n    global: true,\r\n    enumerable: true,\r\n    forced: true\r\n   }, {\r\n    fetch: function fetch(input) {\r\n     return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments));\r\n    }\r\n   });\r\n }\r\n}\r\n$({\r\n global: true,\r\n wrap: true,\r\n forced: FORCED\r\n}, { Promise: PromiseConstructor });\r\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\r\nsetSpecies(PROMISE);\r\nPromiseWrapper = getBuiltIn(PROMISE);\r\n$({\r\n target: PROMISE,\r\n stat: true,\r\n forced: FORCED\r\n}, {\r\n reject: function reject(r) {\r\n  var capability = newPromiseCapability(this);\r\n  capability.reject.call(undefined, r);\r\n  return capability.promise;\r\n }\r\n});\r\n$({\r\n target: PROMISE,\r\n stat: true,\r\n forced: IS_PURE || FORCED\r\n}, {\r\n resolve: function resolve(x) {\r\n  return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\r\n }\r\n});\r\n$({\r\n target: PROMISE,\r\n stat: true,\r\n forced: INCORRECT_ITERATION\r\n}, {\r\n all: function all(iterable) {\r\n  var C = this;\r\n  var capability = newPromiseCapability(C);\r\n  var resolve = capability.resolve;\r\n  var reject = capability.reject;\r\n  var result = perform(function () {\r\n   var $promiseResolve = aFunction(C.resolve);\r\n   var values = [];\r\n   var counter = 0;\r\n   var remaining = 1;\r\n   iterate(iterable, function (promise) {\r\n    var index = counter++;\r\n    var alreadyCalled = false;\r\n    values.push(undefined);\r\n    remaining++;\r\n    $promiseResolve.call(C, promise).then(function (value) {\r\n     if (alreadyCalled)\r\n      return;\r\n     alreadyCalled = true;\r\n     values[index] = value;\r\n     --remaining || resolve(values);\r\n    }, reject);\r\n   });\r\n   --remaining || resolve(values);\r\n  });\r\n  if (result.error)\r\n   reject(result.value);\r\n  return capability.promise;\r\n },\r\n race: function race(iterable) {\r\n  var C = this;\r\n  var capability = newPromiseCapability(C);\r\n  var reject = capability.reject;\r\n  var result = perform(function () {\r\n   var $promiseResolve = aFunction(C.resolve);\r\n   iterate(iterable, function (promise) {\r\n    $promiseResolve.call(C, promise).then(capability.resolve, reject);\r\n   });\r\n  });\r\n  if (result.error)\r\n   reject(result.value);\r\n  return capability.promise;\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 87 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nmodule.exports = global.Promise;\r\n\r\n/***/ }),\r\n/* 88 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar redefine = __w_pdfjs_require__(28);\r\nmodule.exports = function (target, src, options) {\r\n for (var key in src)\r\n  redefine(target, key, src[key], options);\r\n return target;\r\n};\r\n\r\n/***/ }),\r\n/* 89 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nvar definePropertyModule = __w_pdfjs_require__(26);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar SPECIES = wellKnownSymbol('species');\r\nmodule.exports = function (CONSTRUCTOR_NAME) {\r\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\r\n var defineProperty = definePropertyModule.f;\r\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\r\n  defineProperty(Constructor, SPECIES, {\r\n   configurable: true,\r\n   get: function () {\r\n    return this;\r\n   }\r\n  });\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 90 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (it, Constructor, name) {\r\n if (!(it instanceof Constructor)) {\r\n  throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\r\n }\r\n return it;\r\n};\r\n\r\n/***/ }),\r\n/* 91 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nvar SAFE_CLOSING = false;\r\ntry {\r\n var called = 0;\r\n var iteratorWithReturn = {\r\n  next: function () {\r\n   return { done: !!called++ };\r\n  },\r\n  'return': function () {\r\n   SAFE_CLOSING = true;\r\n  }\r\n };\r\n iteratorWithReturn[ITERATOR] = function () {\r\n  return this;\r\n };\r\n Array.from(iteratorWithReturn, function () {\r\n  throw 2;\r\n });\r\n} catch (error) {\r\n}\r\nmodule.exports = function (exec, SKIP_CLOSING) {\r\n if (!SKIP_CLOSING && !SAFE_CLOSING)\r\n  return false;\r\n var ITERATION_SUPPORT = false;\r\n try {\r\n  var object = {};\r\n  object[ITERATOR] = function () {\r\n   return {\r\n    next: function () {\r\n     return { done: ITERATION_SUPPORT = true };\r\n    }\r\n   };\r\n  };\r\n  exec(object);\r\n } catch (error) {\r\n }\r\n return ITERATION_SUPPORT;\r\n};\r\n\r\n/***/ }),\r\n/* 92 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar aFunction = __w_pdfjs_require__(76);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar SPECIES = wellKnownSymbol('species');\r\nmodule.exports = function (O, defaultConstructor) {\r\n var C = anObject(O).constructor;\r\n var S;\r\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\r\n};\r\n\r\n/***/ }),\r\n/* 93 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar fails = __w_pdfjs_require__(13);\r\nvar bind = __w_pdfjs_require__(75);\r\nvar html = __w_pdfjs_require__(61);\r\nvar createElement = __w_pdfjs_require__(24);\r\nvar IS_IOS = __w_pdfjs_require__(94);\r\nvar IS_NODE = __w_pdfjs_require__(96);\r\nvar location = global.location;\r\nvar set = global.setImmediate;\r\nvar clear = global.clearImmediate;\r\nvar process = global.process;\r\nvar MessageChannel = global.MessageChannel;\r\nvar Dispatch = global.Dispatch;\r\nvar counter = 0;\r\nvar queue = {};\r\nvar ONREADYSTATECHANGE = 'onreadystatechange';\r\nvar defer, channel, port;\r\nvar run = function (id) {\r\n if (queue.hasOwnProperty(id)) {\r\n  var fn = queue[id];\r\n  delete queue[id];\r\n  fn();\r\n }\r\n};\r\nvar runner = function (id) {\r\n return function () {\r\n  run(id);\r\n };\r\n};\r\nvar listener = function (event) {\r\n run(event.data);\r\n};\r\nvar post = function (id) {\r\n global.postMessage(id + '', location.protocol + '//' + location.host);\r\n};\r\nif (!set || !clear) {\r\n set = function setImmediate(fn) {\r\n  var args = [];\r\n  var i = 1;\r\n  while (arguments.length > i)\r\n   args.push(arguments[i++]);\r\n  queue[++counter] = function () {\r\n   (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\r\n  };\r\n  defer(counter);\r\n  return counter;\r\n };\r\n clear = function clearImmediate(id) {\r\n  delete queue[id];\r\n };\r\n if (IS_NODE) {\r\n  defer = function (id) {\r\n   process.nextTick(runner(id));\r\n  };\r\n } else if (Dispatch && Dispatch.now) {\r\n  defer = function (id) {\r\n   Dispatch.now(runner(id));\r\n  };\r\n } else if (MessageChannel && !IS_IOS) {\r\n  channel = new MessageChannel();\r\n  port = channel.port2;\r\n  channel.port1.onmessage = listener;\r\n  defer = bind(port.postMessage, port, 1);\r\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts && location && location.protocol !== 'file:' && !fails(post)) {\r\n  defer = post;\r\n  global.addEventListener('message', listener, false);\r\n } else if (ONREADYSTATECHANGE in createElement('script')) {\r\n  defer = function (id) {\r\n   html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\r\n    html.removeChild(this);\r\n    run(id);\r\n   };\r\n  };\r\n } else {\r\n  defer = function (id) {\r\n   setTimeout(runner(id), 0);\r\n  };\r\n }\r\n}\r\nmodule.exports = {\r\n set: set,\r\n clear: clear\r\n};\r\n\r\n/***/ }),\r\n/* 94 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar userAgent = __w_pdfjs_require__(95);\r\nmodule.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);\r\n\r\n/***/ }),\r\n/* 95 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\r\n\r\n/***/ }),\r\n/* 96 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar classof = __w_pdfjs_require__(18);\r\nvar global = __w_pdfjs_require__(10);\r\nmodule.exports = classof(global.process) == 'process';\r\n\r\n/***/ }),\r\n/* 97 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar getOwnPropertyDescriptor = __w_pdfjs_require__(11).f;\r\nvar macrotask = __w_pdfjs_require__(93).set;\r\nvar IS_IOS = __w_pdfjs_require__(94);\r\nvar IS_WEBOS_WEBKIT = __w_pdfjs_require__(98);\r\nvar IS_NODE = __w_pdfjs_require__(96);\r\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\nvar document = global.document;\r\nvar process = global.process;\r\nvar Promise = global.Promise;\r\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\r\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\r\nvar flush, head, last, notify, toggle, node, promise, then;\r\nif (!queueMicrotask) {\r\n flush = function () {\r\n  var parent, fn;\r\n  if (IS_NODE && (parent = process.domain))\r\n   parent.exit();\r\n  while (head) {\r\n   fn = head.fn;\r\n   head = head.next;\r\n   try {\r\n    fn();\r\n   } catch (error) {\r\n    if (head)\r\n     notify();\r\n    else\r\n     last = undefined;\r\n    throw error;\r\n   }\r\n  }\r\n  last = undefined;\r\n  if (parent)\r\n   parent.enter();\r\n };\r\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\r\n  toggle = true;\r\n  node = document.createTextNode('');\r\n  new MutationObserver(flush).observe(node, { characterData: true });\r\n  notify = function () {\r\n   node.data = toggle = !toggle;\r\n  };\r\n } else if (Promise && Promise.resolve) {\r\n  promise = Promise.resolve(undefined);\r\n  then = promise.then;\r\n  notify = function () {\r\n   then.call(promise, flush);\r\n  };\r\n } else if (IS_NODE) {\r\n  notify = function () {\r\n   process.nextTick(flush);\r\n  };\r\n } else {\r\n  notify = function () {\r\n   macrotask.call(global, flush);\r\n  };\r\n }\r\n}\r\nmodule.exports = queueMicrotask || function (fn) {\r\n var task = {\r\n  fn: fn,\r\n  next: undefined\r\n };\r\n if (last)\r\n  last.next = task;\r\n if (!head) {\r\n  head = task;\r\n  notify();\r\n }\r\n last = task;\r\n};\r\n\r\n/***/ }),\r\n/* 98 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar userAgent = __w_pdfjs_require__(95);\r\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\r\n\r\n/***/ }),\r\n/* 99 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar isObject = __w_pdfjs_require__(21);\r\nvar newPromiseCapability = __w_pdfjs_require__(100);\r\nmodule.exports = function (C, x) {\r\n anObject(C);\r\n if (isObject(x) && x.constructor === C)\r\n  return x;\r\n var promiseCapability = newPromiseCapability.f(C);\r\n var resolve = promiseCapability.resolve;\r\n resolve(x);\r\n return promiseCapability.promise;\r\n};\r\n\r\n/***/ }),\r\n/* 100 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar aFunction = __w_pdfjs_require__(76);\r\nvar PromiseCapability = function (C) {\r\n var resolve, reject;\r\n this.promise = new C(function ($$resolve, $$reject) {\r\n  if (resolve !== undefined || reject !== undefined)\r\n   throw TypeError('Bad Promise constructor');\r\n  resolve = $$resolve;\r\n  reject = $$reject;\r\n });\r\n this.resolve = aFunction(resolve);\r\n this.reject = aFunction(reject);\r\n};\r\nmodule.exports.f = function (C) {\r\n return new PromiseCapability(C);\r\n};\r\n\r\n/***/ }),\r\n/* 101 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nmodule.exports = function (a, b) {\r\n var console = global.console;\r\n if (console && console.error) {\r\n  arguments.length === 1 ? console.error(a) : console.error(a, b);\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 102 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (exec) {\r\n try {\r\n  return {\r\n   error: false,\r\n   value: exec()\r\n  };\r\n } catch (error) {\r\n  return {\r\n   error: true,\r\n   value: error\r\n  };\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 103 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar userAgent = __w_pdfjs_require__(95);\r\nvar process = global.process;\r\nvar versions = process && process.versions;\r\nvar v8 = versions && versions.v8;\r\nvar match, version;\r\nif (v8) {\r\n match = v8.split('.');\r\n version = match[0] + match[1];\r\n} else if (userAgent) {\r\n match = userAgent.match(/Edge\\/(\\d+)/);\r\n if (!match || match[1] >= 74) {\r\n  match = userAgent.match(/Chrome\\/(\\d+)/);\r\n  if (match)\r\n   version = match[1];\r\n }\r\n}\r\nmodule.exports = version && +version;\r\n\r\n/***/ }),\r\n/* 104 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar aFunction = __w_pdfjs_require__(76);\r\nvar newPromiseCapabilityModule = __w_pdfjs_require__(100);\r\nvar perform = __w_pdfjs_require__(102);\r\nvar iterate = __w_pdfjs_require__(73);\r\n$({\r\n target: 'Promise',\r\n stat: true\r\n}, {\r\n allSettled: function allSettled(iterable) {\r\n  var C = this;\r\n  var capability = newPromiseCapabilityModule.f(C);\r\n  var resolve = capability.resolve;\r\n  var reject = capability.reject;\r\n  var result = perform(function () {\r\n   var promiseResolve = aFunction(C.resolve);\r\n   var values = [];\r\n   var counter = 0;\r\n   var remaining = 1;\r\n   iterate(iterable, function (promise) {\r\n    var index = counter++;\r\n    var alreadyCalled = false;\r\n    values.push(undefined);\r\n    remaining++;\r\n    promiseResolve.call(C, promise).then(function (value) {\r\n     if (alreadyCalled)\r\n      return;\r\n     alreadyCalled = true;\r\n     values[index] = {\r\n      status: 'fulfilled',\r\n      value: value\r\n     };\r\n     --remaining || resolve(values);\r\n    }, function (error) {\r\n     if (alreadyCalled)\r\n      return;\r\n     alreadyCalled = true;\r\n     values[index] = {\r\n      status: 'rejected',\r\n      reason: error\r\n     };\r\n     --remaining || resolve(values);\r\n    });\r\n   });\r\n   --remaining || resolve(values);\r\n  });\r\n  if (result.error)\r\n   reject(result.value);\r\n  return capability.promise;\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 105 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar aFunction = __w_pdfjs_require__(76);\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nvar newPromiseCapabilityModule = __w_pdfjs_require__(100);\r\nvar perform = __w_pdfjs_require__(102);\r\nvar iterate = __w_pdfjs_require__(73);\r\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\r\n$({\r\n target: 'Promise',\r\n stat: true\r\n}, {\r\n any: function any(iterable) {\r\n  var C = this;\r\n  var capability = newPromiseCapabilityModule.f(C);\r\n  var resolve = capability.resolve;\r\n  var reject = capability.reject;\r\n  var result = perform(function () {\r\n   var promiseResolve = aFunction(C.resolve);\r\n   var errors = [];\r\n   var counter = 0;\r\n   var remaining = 1;\r\n   var alreadyResolved = false;\r\n   iterate(iterable, function (promise) {\r\n    var index = counter++;\r\n    var alreadyRejected = false;\r\n    errors.push(undefined);\r\n    remaining++;\r\n    promiseResolve.call(C, promise).then(function (value) {\r\n     if (alreadyRejected || alreadyResolved)\r\n      return;\r\n     alreadyResolved = true;\r\n     resolve(value);\r\n    }, function (error) {\r\n     if (alreadyRejected || alreadyResolved)\r\n      return;\r\n     alreadyRejected = true;\r\n     errors[index] = error;\r\n     --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR));\r\n    });\r\n   });\r\n   --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR));\r\n  });\r\n  if (result.error)\r\n   reject(result.value);\r\n  return capability.promise;\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 106 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar IS_PURE = __w_pdfjs_require__(36);\r\nvar NativePromise = __w_pdfjs_require__(87);\r\nvar fails = __w_pdfjs_require__(13);\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nvar speciesConstructor = __w_pdfjs_require__(92);\r\nvar promiseResolve = __w_pdfjs_require__(99);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar NON_GENERIC = !!NativePromise && fails(function () {\r\n NativePromise.prototype['finally'].call({\r\n  then: function () {\r\n  }\r\n }, function () {\r\n });\r\n});\r\n$({\r\n target: 'Promise',\r\n proto: true,\r\n real: true,\r\n forced: NON_GENERIC\r\n}, {\r\n 'finally': function (onFinally) {\r\n  var C = speciesConstructor(this, getBuiltIn('Promise'));\r\n  var isFunction = typeof onFinally == 'function';\r\n  return this.then(isFunction ? function (x) {\r\n   return promiseResolve(C, onFinally()).then(function () {\r\n    return x;\r\n   });\r\n  } : onFinally, isFunction ? function (e) {\r\n   return promiseResolve(C, onFinally()).then(function () {\r\n    throw e;\r\n   });\r\n  } : onFinally);\r\n }\r\n});\r\nif (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {\r\n redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);\r\n}\r\n\r\n/***/ }),\r\n/* 107 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar charAt = __w_pdfjs_require__(108).charAt;\r\nvar InternalStateModule = __w_pdfjs_require__(32);\r\nvar defineIterator = __w_pdfjs_require__(63);\r\nvar STRING_ITERATOR = 'String Iterator';\r\nvar setInternalState = InternalStateModule.set;\r\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\r\ndefineIterator(String, 'String', function (iterated) {\r\n setInternalState(this, {\r\n  type: STRING_ITERATOR,\r\n  string: String(iterated),\r\n  index: 0\r\n });\r\n}, function next() {\r\n var state = getInternalState(this);\r\n var string = state.string;\r\n var index = state.index;\r\n var point;\r\n if (index >= string.length)\r\n  return {\r\n   value: undefined,\r\n   done: true\r\n  };\r\n point = charAt(string, index);\r\n state.index += point.length;\r\n return {\r\n  value: point,\r\n  done: false\r\n };\r\n});\r\n\r\n/***/ }),\r\n/* 108 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar toInteger = __w_pdfjs_require__(47);\r\nvar requireObjectCoercible = __w_pdfjs_require__(19);\r\nvar createMethod = function (CONVERT_TO_STRING) {\r\n return function ($this, pos) {\r\n  var S = String(requireObjectCoercible($this));\r\n  var position = toInteger(pos);\r\n  var size = S.length;\r\n  var first, second;\r\n  if (position < 0 || position >= size)\r\n   return CONVERT_TO_STRING ? '' : undefined;\r\n  first = S.charCodeAt(position);\r\n  return first < 0xD800 || first > 0xDBFF || position + 1 === size || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF ? CONVERT_TO_STRING ? S.charAt(position) : first : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\r\n };\r\n};\r\nmodule.exports = {\r\n codeAt: createMethod(false),\r\n charAt: createMethod(true)\r\n};\r\n\r\n/***/ }),\r\n/* 109 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar DOMIterables = __w_pdfjs_require__(110);\r\nvar ArrayIteratorMethods = __w_pdfjs_require__(53);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\r\nvar ArrayValues = ArrayIteratorMethods.values;\r\nfor (var COLLECTION_NAME in DOMIterables) {\r\n var Collection = global[COLLECTION_NAME];\r\n var CollectionPrototype = Collection && Collection.prototype;\r\n if (CollectionPrototype) {\r\n  if (CollectionPrototype[ITERATOR] !== ArrayValues)\r\n   try {\r\n    createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\r\n   } catch (error) {\r\n    CollectionPrototype[ITERATOR] = ArrayValues;\r\n   }\r\n  if (!CollectionPrototype[TO_STRING_TAG]) {\r\n   createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\r\n  }\r\n  if (DOMIterables[COLLECTION_NAME])\r\n   for (var METHOD_NAME in ArrayIteratorMethods) {\r\n    if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME])\r\n     try {\r\n      createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\r\n     } catch (error) {\r\n      CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\r\n     }\r\n   }\r\n }\r\n}\r\n\r\n/***/ }),\r\n/* 110 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = {\r\n CSSRuleList: 0,\r\n CSSStyleDeclaration: 0,\r\n CSSValueList: 0,\r\n ClientRectList: 0,\r\n DOMRectList: 0,\r\n DOMStringList: 0,\r\n DOMTokenList: 1,\r\n DataTransferItemList: 0,\r\n FileList: 0,\r\n HTMLAllCollection: 0,\r\n HTMLCollection: 0,\r\n HTMLFormElement: 0,\r\n HTMLSelectElement: 0,\r\n MediaList: 0,\r\n MimeTypeArray: 0,\r\n NamedNodeMap: 0,\r\n NodeList: 1,\r\n PaintRequestList: 0,\r\n Plugin: 0,\r\n PluginArray: 0,\r\n SVGLengthList: 0,\r\n SVGNumberList: 0,\r\n SVGPathSegList: 0,\r\n SVGPointList: 0,\r\n SVGStringList: 0,\r\n SVGTransformList: 0,\r\n SourceBufferList: 0,\r\n StyleSheetList: 0,\r\n TextTrackCueList: 0,\r\n TextTrackList: 0,\r\n TouchList: 0\r\n};\r\n\r\n/***/ }),\r\n/* 111 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(112);\r\n__w_pdfjs_require__(120);\r\n__w_pdfjs_require__(118);\r\nvar path = __w_pdfjs_require__(42);\r\nmodule.exports = path.URL;\r\n\r\n/***/ }),\r\n/* 112 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n__w_pdfjs_require__(107);\r\nvar $ = __w_pdfjs_require__(9);\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar USE_NATIVE_URL = __w_pdfjs_require__(113);\r\nvar global = __w_pdfjs_require__(10);\r\nvar defineProperties = __w_pdfjs_require__(59);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar anInstance = __w_pdfjs_require__(90);\r\nvar has = __w_pdfjs_require__(22);\r\nvar assign = __w_pdfjs_require__(114);\r\nvar arrayFrom = __w_pdfjs_require__(115);\r\nvar codeAt = __w_pdfjs_require__(108).codeAt;\r\nvar toASCII = __w_pdfjs_require__(117);\r\nvar setToStringTag = __w_pdfjs_require__(69);\r\nvar URLSearchParamsModule = __w_pdfjs_require__(118);\r\nvar InternalStateModule = __w_pdfjs_require__(32);\r\nvar NativeURL = global.URL;\r\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\r\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\r\nvar setInternalState = InternalStateModule.set;\r\nvar getInternalURLState = InternalStateModule.getterFor('URL');\r\nvar floor = Math.floor;\r\nvar pow = Math.pow;\r\nvar INVALID_AUTHORITY = 'Invalid authority';\r\nvar INVALID_SCHEME = 'Invalid scheme';\r\nvar INVALID_HOST = 'Invalid host';\r\nvar INVALID_PORT = 'Invalid port';\r\nvar ALPHA = /[A-Za-z]/;\r\nvar ALPHANUMERIC = /[\\d+-.A-Za-z]/;\r\nvar DIGIT = /\\d/;\r\nvar HEX_START = /^(0x|0X)/;\r\nvar OCT = /^[0-7]+$/;\r\nvar DEC = /^\\d+$/;\r\nvar HEX = /^[\\dA-Fa-f]+$/;\r\nvar FORBIDDEN_HOST_CODE_POINT = /[\\u0000\\u0009\\u000A\\u000D #%/:?@[\\\\]]/;\r\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\u0000\\u0009\\u000A\\u000D #/:?@[\\\\]]/;\r\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u001F ]+|[\\u0000-\\u001F ]+$/g;\r\nvar TAB_AND_NEW_LINE = /[\\u0009\\u000A\\u000D]/g;\r\nvar EOF;\r\nvar parseHost = function (url, input) {\r\n var result, codePoints, index;\r\n if (input.charAt(0) == '[') {\r\n  if (input.charAt(input.length - 1) != ']')\r\n   return INVALID_HOST;\r\n  result = parseIPv6(input.slice(1, -1));\r\n  if (!result)\r\n   return INVALID_HOST;\r\n  url.host = result;\r\n } else if (!isSpecial(url)) {\r\n  if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input))\r\n   return INVALID_HOST;\r\n  result = '';\r\n  codePoints = arrayFrom(input);\r\n  for (index = 0; index < codePoints.length; index++) {\r\n   result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\r\n  }\r\n  url.host = result;\r\n } else {\r\n  input = toASCII(input);\r\n  if (FORBIDDEN_HOST_CODE_POINT.test(input))\r\n   return INVALID_HOST;\r\n  result = parseIPv4(input);\r\n  if (result === null)\r\n   return INVALID_HOST;\r\n  url.host = result;\r\n }\r\n};\r\nvar parseIPv4 = function (input) {\r\n var parts = input.split('.');\r\n var partsLength, numbers, index, part, radix, number, ipv4;\r\n if (parts.length && parts[parts.length - 1] == '') {\r\n  parts.pop();\r\n }\r\n partsLength = parts.length;\r\n if (partsLength > 4)\r\n  return input;\r\n numbers = [];\r\n for (index = 0; index < partsLength; index++) {\r\n  part = parts[index];\r\n  if (part == '')\r\n   return input;\r\n  radix = 10;\r\n  if (part.length > 1 && part.charAt(0) == '0') {\r\n   radix = HEX_START.test(part) ? 16 : 8;\r\n   part = part.slice(radix == 8 ? 1 : 2);\r\n  }\r\n  if (part === '') {\r\n   number = 0;\r\n  } else {\r\n   if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part))\r\n    return input;\r\n   number = parseInt(part, radix);\r\n  }\r\n  numbers.push(number);\r\n }\r\n for (index = 0; index < partsLength; index++) {\r\n  number = numbers[index];\r\n  if (index == partsLength - 1) {\r\n   if (number >= pow(256, 5 - partsLength))\r\n    return null;\r\n  } else if (number > 255)\r\n   return null;\r\n }\r\n ipv4 = numbers.pop();\r\n for (index = 0; index < numbers.length; index++) {\r\n  ipv4 += numbers[index] * pow(256, 3 - index);\r\n }\r\n return ipv4;\r\n};\r\nvar parseIPv6 = function (input) {\r\n var address = [\r\n  0,\r\n  0,\r\n  0,\r\n  0,\r\n  0,\r\n  0,\r\n  0,\r\n  0\r\n ];\r\n var pieceIndex = 0;\r\n var compress = null;\r\n var pointer = 0;\r\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\r\n var char = function () {\r\n  return input.charAt(pointer);\r\n };\r\n if (char() == ':') {\r\n  if (input.charAt(1) != ':')\r\n   return;\r\n  pointer += 2;\r\n  pieceIndex++;\r\n  compress = pieceIndex;\r\n }\r\n while (char()) {\r\n  if (pieceIndex == 8)\r\n   return;\r\n  if (char() == ':') {\r\n   if (compress !== null)\r\n    return;\r\n   pointer++;\r\n   pieceIndex++;\r\n   compress = pieceIndex;\r\n   continue;\r\n  }\r\n  value = length = 0;\r\n  while (length < 4 && HEX.test(char())) {\r\n   value = value * 16 + parseInt(char(), 16);\r\n   pointer++;\r\n   length++;\r\n  }\r\n  if (char() == '.') {\r\n   if (length == 0)\r\n    return;\r\n   pointer -= length;\r\n   if (pieceIndex > 6)\r\n    return;\r\n   numbersSeen = 0;\r\n   while (char()) {\r\n    ipv4Piece = null;\r\n    if (numbersSeen > 0) {\r\n     if (char() == '.' && numbersSeen < 4)\r\n      pointer++;\r\n     else\r\n      return;\r\n    }\r\n    if (!DIGIT.test(char()))\r\n     return;\r\n    while (DIGIT.test(char())) {\r\n     number = parseInt(char(), 10);\r\n     if (ipv4Piece === null)\r\n      ipv4Piece = number;\r\n     else if (ipv4Piece == 0)\r\n      return;\r\n     else\r\n      ipv4Piece = ipv4Piece * 10 + number;\r\n     if (ipv4Piece > 255)\r\n      return;\r\n     pointer++;\r\n    }\r\n    address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\r\n    numbersSeen++;\r\n    if (numbersSeen == 2 || numbersSeen == 4)\r\n     pieceIndex++;\r\n   }\r\n   if (numbersSeen != 4)\r\n    return;\r\n   break;\r\n  } else if (char() == ':') {\r\n   pointer++;\r\n   if (!char())\r\n    return;\r\n  } else if (char())\r\n   return;\r\n  address[pieceIndex++] = value;\r\n }\r\n if (compress !== null) {\r\n  swaps = pieceIndex - compress;\r\n  pieceIndex = 7;\r\n  while (pieceIndex != 0 && swaps > 0) {\r\n   swap = address[pieceIndex];\r\n   address[pieceIndex--] = address[compress + swaps - 1];\r\n   address[compress + --swaps] = swap;\r\n  }\r\n } else if (pieceIndex != 8)\r\n  return;\r\n return address;\r\n};\r\nvar findLongestZeroSequence = function (ipv6) {\r\n var maxIndex = null;\r\n var maxLength = 1;\r\n var currStart = null;\r\n var currLength = 0;\r\n var index = 0;\r\n for (; index < 8; index++) {\r\n  if (ipv6[index] !== 0) {\r\n   if (currLength > maxLength) {\r\n    maxIndex = currStart;\r\n    maxLength = currLength;\r\n   }\r\n   currStart = null;\r\n   currLength = 0;\r\n  } else {\r\n   if (currStart === null)\r\n    currStart = index;\r\n   ++currLength;\r\n  }\r\n }\r\n if (currLength > maxLength) {\r\n  maxIndex = currStart;\r\n  maxLength = currLength;\r\n }\r\n return maxIndex;\r\n};\r\nvar serializeHost = function (host) {\r\n var result, index, compress, ignore0;\r\n if (typeof host == 'number') {\r\n  result = [];\r\n  for (index = 0; index < 4; index++) {\r\n   result.unshift(host % 256);\r\n   host = floor(host / 256);\r\n  }\r\n  return result.join('.');\r\n } else if (typeof host == 'object') {\r\n  result = '';\r\n  compress = findLongestZeroSequence(host);\r\n  for (index = 0; index < 8; index++) {\r\n   if (ignore0 && host[index] === 0)\r\n    continue;\r\n   if (ignore0)\r\n    ignore0 = false;\r\n   if (compress === index) {\r\n    result += index ? ':' : '::';\r\n    ignore0 = true;\r\n   } else {\r\n    result += host[index].toString(16);\r\n    if (index < 7)\r\n     result += ':';\r\n   }\r\n  }\r\n  return '[' + result + ']';\r\n }\r\n return host;\r\n};\r\nvar C0ControlPercentEncodeSet = {};\r\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\r\n ' ': 1,\r\n '\"': 1,\r\n '<': 1,\r\n '>': 1,\r\n '`': 1\r\n});\r\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\r\n '#': 1,\r\n '?': 1,\r\n '{': 1,\r\n '}': 1\r\n});\r\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\r\n '/': 1,\r\n ':': 1,\r\n ';': 1,\r\n '=': 1,\r\n '@': 1,\r\n '[': 1,\r\n '\\\\': 1,\r\n ']': 1,\r\n '^': 1,\r\n '|': 1\r\n});\r\nvar percentEncode = function (char, set) {\r\n var code = codeAt(char, 0);\r\n return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\r\n};\r\nvar specialSchemes = {\r\n ftp: 21,\r\n file: null,\r\n http: 80,\r\n https: 443,\r\n ws: 80,\r\n wss: 443\r\n};\r\nvar isSpecial = function (url) {\r\n return has(specialSchemes, url.scheme);\r\n};\r\nvar includesCredentials = function (url) {\r\n return url.username != '' || url.password != '';\r\n};\r\nvar cannotHaveUsernamePasswordPort = function (url) {\r\n return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\r\n};\r\nvar isWindowsDriveLetter = function (string, normalized) {\r\n var second;\r\n return string.length == 2 && ALPHA.test(string.charAt(0)) && ((second = string.charAt(1)) == ':' || !normalized && second == '|');\r\n};\r\nvar startsWithWindowsDriveLetter = function (string) {\r\n var third;\r\n return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (string.length == 2 || ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#'));\r\n};\r\nvar shortenURLsPath = function (url) {\r\n var path = url.path;\r\n var pathSize = path.length;\r\n if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\r\n  path.pop();\r\n }\r\n};\r\nvar isSingleDot = function (segment) {\r\n return segment === '.' || segment.toLowerCase() === '%2e';\r\n};\r\nvar isDoubleDot = function (segment) {\r\n segment = segment.toLowerCase();\r\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\r\n};\r\nvar SCHEME_START = {};\r\nvar SCHEME = {};\r\nvar NO_SCHEME = {};\r\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\r\nvar PATH_OR_AUTHORITY = {};\r\nvar RELATIVE = {};\r\nvar RELATIVE_SLASH = {};\r\nvar SPECIAL_AUTHORITY_SLASHES = {};\r\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\r\nvar AUTHORITY = {};\r\nvar HOST = {};\r\nvar HOSTNAME = {};\r\nvar PORT = {};\r\nvar FILE = {};\r\nvar FILE_SLASH = {};\r\nvar FILE_HOST = {};\r\nvar PATH_START = {};\r\nvar PATH = {};\r\nvar CANNOT_BE_A_BASE_URL_PATH = {};\r\nvar QUERY = {};\r\nvar FRAGMENT = {};\r\nvar parseURL = function (url, input, stateOverride, base) {\r\n var state = stateOverride || SCHEME_START;\r\n var pointer = 0;\r\n var buffer = '';\r\n var seenAt = false;\r\n var seenBracket = false;\r\n var seenPasswordToken = false;\r\n var codePoints, char, bufferCodePoints, failure;\r\n if (!stateOverride) {\r\n  url.scheme = '';\r\n  url.username = '';\r\n  url.password = '';\r\n  url.host = null;\r\n  url.port = null;\r\n  url.path = [];\r\n  url.query = null;\r\n  url.fragment = null;\r\n  url.cannotBeABaseURL = false;\r\n  input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\r\n }\r\n input = input.replace(TAB_AND_NEW_LINE, '');\r\n codePoints = arrayFrom(input);\r\n while (pointer <= codePoints.length) {\r\n  char = codePoints[pointer];\r\n  switch (state) {\r\n  case SCHEME_START:\r\n   if (char && ALPHA.test(char)) {\r\n    buffer += char.toLowerCase();\r\n    state = SCHEME;\r\n   } else if (!stateOverride) {\r\n    state = NO_SCHEME;\r\n    continue;\r\n   } else\r\n    return INVALID_SCHEME;\r\n   break;\r\n  case SCHEME:\r\n   if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\r\n    buffer += char.toLowerCase();\r\n   } else if (char == ':') {\r\n    if (stateOverride && (isSpecial(url) != has(specialSchemes, buffer) || buffer == 'file' && (includesCredentials(url) || url.port !== null) || url.scheme == 'file' && !url.host))\r\n     return;\r\n    url.scheme = buffer;\r\n    if (stateOverride) {\r\n     if (isSpecial(url) && specialSchemes[url.scheme] == url.port)\r\n      url.port = null;\r\n     return;\r\n    }\r\n    buffer = '';\r\n    if (url.scheme == 'file') {\r\n     state = FILE;\r\n    } else if (isSpecial(url) && base && base.scheme == url.scheme) {\r\n     state = SPECIAL_RELATIVE_OR_AUTHORITY;\r\n    } else if (isSpecial(url)) {\r\n     state = SPECIAL_AUTHORITY_SLASHES;\r\n    } else if (codePoints[pointer + 1] == '/') {\r\n     state = PATH_OR_AUTHORITY;\r\n     pointer++;\r\n    } else {\r\n     url.cannotBeABaseURL = true;\r\n     url.path.push('');\r\n     state = CANNOT_BE_A_BASE_URL_PATH;\r\n    }\r\n   } else if (!stateOverride) {\r\n    buffer = '';\r\n    state = NO_SCHEME;\r\n    pointer = 0;\r\n    continue;\r\n   } else\r\n    return INVALID_SCHEME;\r\n   break;\r\n  case NO_SCHEME:\r\n   if (!base || base.cannotBeABaseURL && char != '#')\r\n    return INVALID_SCHEME;\r\n   if (base.cannotBeABaseURL && char == '#') {\r\n    url.scheme = base.scheme;\r\n    url.path = base.path.slice();\r\n    url.query = base.query;\r\n    url.fragment = '';\r\n    url.cannotBeABaseURL = true;\r\n    state = FRAGMENT;\r\n    break;\r\n   }\r\n   state = base.scheme == 'file' ? FILE : RELATIVE;\r\n   continue;\r\n  case SPECIAL_RELATIVE_OR_AUTHORITY:\r\n   if (char == '/' && codePoints[pointer + 1] == '/') {\r\n    state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\r\n    pointer++;\r\n   } else {\r\n    state = RELATIVE;\r\n    continue;\r\n   }\r\n   break;\r\n  case PATH_OR_AUTHORITY:\r\n   if (char == '/') {\r\n    state = AUTHORITY;\r\n    break;\r\n   } else {\r\n    state = PATH;\r\n    continue;\r\n   }\r\n  case RELATIVE:\r\n   url.scheme = base.scheme;\r\n   if (char == EOF) {\r\n    url.username = base.username;\r\n    url.password = base.password;\r\n    url.host = base.host;\r\n    url.port = base.port;\r\n    url.path = base.path.slice();\r\n    url.query = base.query;\r\n   } else if (char == '/' || char == '\\\\' && isSpecial(url)) {\r\n    state = RELATIVE_SLASH;\r\n   } else if (char == '?') {\r\n    url.username = base.username;\r\n    url.password = base.password;\r\n    url.host = base.host;\r\n    url.port = base.port;\r\n    url.path = base.path.slice();\r\n    url.query = '';\r\n    state = QUERY;\r\n   } else if (char == '#') {\r\n    url.username = base.username;\r\n    url.password = base.password;\r\n    url.host = base.host;\r\n    url.port = base.port;\r\n    url.path = base.path.slice();\r\n    url.query = base.query;\r\n    url.fragment = '';\r\n    state = FRAGMENT;\r\n   } else {\r\n    url.username = base.username;\r\n    url.password = base.password;\r\n    url.host = base.host;\r\n    url.port = base.port;\r\n    url.path = base.path.slice();\r\n    url.path.pop();\r\n    state = PATH;\r\n    continue;\r\n   }\r\n   break;\r\n  case RELATIVE_SLASH:\r\n   if (isSpecial(url) && (char == '/' || char == '\\\\')) {\r\n    state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\r\n   } else if (char == '/') {\r\n    state = AUTHORITY;\r\n   } else {\r\n    url.username = base.username;\r\n    url.password = base.password;\r\n    url.host = base.host;\r\n    url.port = base.port;\r\n    state = PATH;\r\n    continue;\r\n   }\r\n   break;\r\n  case SPECIAL_AUTHORITY_SLASHES:\r\n   state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\r\n   if (char != '/' || buffer.charAt(pointer + 1) != '/')\r\n    continue;\r\n   pointer++;\r\n   break;\r\n  case SPECIAL_AUTHORITY_IGNORE_SLASHES:\r\n   if (char != '/' && char != '\\\\') {\r\n    state = AUTHORITY;\r\n    continue;\r\n   }\r\n   break;\r\n  case AUTHORITY:\r\n   if (char == '@') {\r\n    if (seenAt)\r\n     buffer = '%40' + buffer;\r\n    seenAt = true;\r\n    bufferCodePoints = arrayFrom(buffer);\r\n    for (var i = 0; i < bufferCodePoints.length; i++) {\r\n     var codePoint = bufferCodePoints[i];\r\n     if (codePoint == ':' && !seenPasswordToken) {\r\n      seenPasswordToken = true;\r\n      continue;\r\n     }\r\n     var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\r\n     if (seenPasswordToken)\r\n      url.password += encodedCodePoints;\r\n     else\r\n      url.username += encodedCodePoints;\r\n    }\r\n    buffer = '';\r\n   } else if (char == EOF || char == '/' || char == '?' || char == '#' || char == '\\\\' && isSpecial(url)) {\r\n    if (seenAt && buffer == '')\r\n     return INVALID_AUTHORITY;\r\n    pointer -= arrayFrom(buffer).length + 1;\r\n    buffer = '';\r\n    state = HOST;\r\n   } else\r\n    buffer += char;\r\n   break;\r\n  case HOST:\r\n  case HOSTNAME:\r\n   if (stateOverride && url.scheme == 'file') {\r\n    state = FILE_HOST;\r\n    continue;\r\n   } else if (char == ':' && !seenBracket) {\r\n    if (buffer == '')\r\n     return INVALID_HOST;\r\n    failure = parseHost(url, buffer);\r\n    if (failure)\r\n     return failure;\r\n    buffer = '';\r\n    state = PORT;\r\n    if (stateOverride == HOSTNAME)\r\n     return;\r\n   } else if (char == EOF || char == '/' || char == '?' || char == '#' || char == '\\\\' && isSpecial(url)) {\r\n    if (isSpecial(url) && buffer == '')\r\n     return INVALID_HOST;\r\n    if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null))\r\n     return;\r\n    failure = parseHost(url, buffer);\r\n    if (failure)\r\n     return failure;\r\n    buffer = '';\r\n    state = PATH_START;\r\n    if (stateOverride)\r\n     return;\r\n    continue;\r\n   } else {\r\n    if (char == '[')\r\n     seenBracket = true;\r\n    else if (char == ']')\r\n     seenBracket = false;\r\n    buffer += char;\r\n   }\r\n   break;\r\n  case PORT:\r\n   if (DIGIT.test(char)) {\r\n    buffer += char;\r\n   } else if (char == EOF || char == '/' || char == '?' || char == '#' || char == '\\\\' && isSpecial(url) || stateOverride) {\r\n    if (buffer != '') {\r\n     var port = parseInt(buffer, 10);\r\n     if (port > 0xFFFF)\r\n      return INVALID_PORT;\r\n     url.port = isSpecial(url) && port === specialSchemes[url.scheme] ? null : port;\r\n     buffer = '';\r\n    }\r\n    if (stateOverride)\r\n     return;\r\n    state = PATH_START;\r\n    continue;\r\n   } else\r\n    return INVALID_PORT;\r\n   break;\r\n  case FILE:\r\n   url.scheme = 'file';\r\n   if (char == '/' || char == '\\\\')\r\n    state = FILE_SLASH;\r\n   else if (base && base.scheme == 'file') {\r\n    if (char == EOF) {\r\n     url.host = base.host;\r\n     url.path = base.path.slice();\r\n     url.query = base.query;\r\n    } else if (char == '?') {\r\n     url.host = base.host;\r\n     url.path = base.path.slice();\r\n     url.query = '';\r\n     state = QUERY;\r\n    } else if (char == '#') {\r\n     url.host = base.host;\r\n     url.path = base.path.slice();\r\n     url.query = base.query;\r\n     url.fragment = '';\r\n     state = FRAGMENT;\r\n    } else {\r\n     if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\r\n      url.host = base.host;\r\n      url.path = base.path.slice();\r\n      shortenURLsPath(url);\r\n     }\r\n     state = PATH;\r\n     continue;\r\n    }\r\n   } else {\r\n    state = PATH;\r\n    continue;\r\n   }\r\n   break;\r\n  case FILE_SLASH:\r\n   if (char == '/' || char == '\\\\') {\r\n    state = FILE_HOST;\r\n    break;\r\n   }\r\n   if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\r\n    if (isWindowsDriveLetter(base.path[0], true))\r\n     url.path.push(base.path[0]);\r\n    else\r\n     url.host = base.host;\r\n   }\r\n   state = PATH;\r\n   continue;\r\n  case FILE_HOST:\r\n   if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\r\n    if (!stateOverride && isWindowsDriveLetter(buffer)) {\r\n     state = PATH;\r\n    } else if (buffer == '') {\r\n     url.host = '';\r\n     if (stateOverride)\r\n      return;\r\n     state = PATH_START;\r\n    } else {\r\n     failure = parseHost(url, buffer);\r\n     if (failure)\r\n      return failure;\r\n     if (url.host == 'localhost')\r\n      url.host = '';\r\n     if (stateOverride)\r\n      return;\r\n     buffer = '';\r\n     state = PATH_START;\r\n    }\r\n    continue;\r\n   } else\r\n    buffer += char;\r\n   break;\r\n  case PATH_START:\r\n   if (isSpecial(url)) {\r\n    state = PATH;\r\n    if (char != '/' && char != '\\\\')\r\n     continue;\r\n   } else if (!stateOverride && char == '?') {\r\n    url.query = '';\r\n    state = QUERY;\r\n   } else if (!stateOverride && char == '#') {\r\n    url.fragment = '';\r\n    state = FRAGMENT;\r\n   } else if (char != EOF) {\r\n    state = PATH;\r\n    if (char != '/')\r\n     continue;\r\n   }\r\n   break;\r\n  case PATH:\r\n   if (char == EOF || char == '/' || char == '\\\\' && isSpecial(url) || !stateOverride && (char == '?' || char == '#')) {\r\n    if (isDoubleDot(buffer)) {\r\n     shortenURLsPath(url);\r\n     if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\r\n      url.path.push('');\r\n     }\r\n    } else if (isSingleDot(buffer)) {\r\n     if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\r\n      url.path.push('');\r\n     }\r\n    } else {\r\n     if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\r\n      if (url.host)\r\n       url.host = '';\r\n      buffer = buffer.charAt(0) + ':';\r\n     }\r\n     url.path.push(buffer);\r\n    }\r\n    buffer = '';\r\n    if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\r\n     while (url.path.length > 1 && url.path[0] === '') {\r\n      url.path.shift();\r\n     }\r\n    }\r\n    if (char == '?') {\r\n     url.query = '';\r\n     state = QUERY;\r\n    } else if (char == '#') {\r\n     url.fragment = '';\r\n     state = FRAGMENT;\r\n    }\r\n   } else {\r\n    buffer += percentEncode(char, pathPercentEncodeSet);\r\n   }\r\n   break;\r\n  case CANNOT_BE_A_BASE_URL_PATH:\r\n   if (char == '?') {\r\n    url.query = '';\r\n    state = QUERY;\r\n   } else if (char == '#') {\r\n    url.fragment = '';\r\n    state = FRAGMENT;\r\n   } else if (char != EOF) {\r\n    url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\r\n   }\r\n   break;\r\n  case QUERY:\r\n   if (!stateOverride && char == '#') {\r\n    url.fragment = '';\r\n    state = FRAGMENT;\r\n   } else if (char != EOF) {\r\n    if (char == \"'\" && isSpecial(url))\r\n     url.query += '%27';\r\n    else if (char == '#')\r\n     url.query += '%23';\r\n    else\r\n     url.query += percentEncode(char, C0ControlPercentEncodeSet);\r\n   }\r\n   break;\r\n  case FRAGMENT:\r\n   if (char != EOF)\r\n    url.fragment += percentEncode(char, fragmentPercentEncodeSet);\r\n   break;\r\n  }\r\n  pointer++;\r\n }\r\n};\r\nvar URLConstructor = function URL(url) {\r\n var that = anInstance(this, URLConstructor, 'URL');\r\n var base = arguments.length > 1 ? arguments[1] : undefined;\r\n var urlString = String(url);\r\n var state = setInternalState(that, { type: 'URL' });\r\n var baseState, failure;\r\n if (base !== undefined) {\r\n  if (base instanceof URLConstructor)\r\n   baseState = getInternalURLState(base);\r\n  else {\r\n   failure = parseURL(baseState = {}, String(base));\r\n   if (failure)\r\n    throw TypeError(failure);\r\n  }\r\n }\r\n failure = parseURL(state, urlString, null, baseState);\r\n if (failure)\r\n  throw TypeError(failure);\r\n var searchParams = state.searchParams = new URLSearchParams();\r\n var searchParamsState = getInternalSearchParamsState(searchParams);\r\n searchParamsState.updateSearchParams(state.query);\r\n searchParamsState.updateURL = function () {\r\n  state.query = String(searchParams) || null;\r\n };\r\n if (!DESCRIPTORS) {\r\n  that.href = serializeURL.call(that);\r\n  that.origin = getOrigin.call(that);\r\n  that.protocol = getProtocol.call(that);\r\n  that.username = getUsername.call(that);\r\n  that.password = getPassword.call(that);\r\n  that.host = getHost.call(that);\r\n  that.hostname = getHostname.call(that);\r\n  that.port = getPort.call(that);\r\n  that.pathname = getPathname.call(that);\r\n  that.search = getSearch.call(that);\r\n  that.searchParams = getSearchParams.call(that);\r\n  that.hash = getHash.call(that);\r\n }\r\n};\r\nvar URLPrototype = URLConstructor.prototype;\r\nvar serializeURL = function () {\r\n var url = getInternalURLState(this);\r\n var scheme = url.scheme;\r\n var username = url.username;\r\n var password = url.password;\r\n var host = url.host;\r\n var port = url.port;\r\n var path = url.path;\r\n var query = url.query;\r\n var fragment = url.fragment;\r\n var output = scheme + ':';\r\n if (host !== null) {\r\n  output += '//';\r\n  if (includesCredentials(url)) {\r\n   output += username + (password ? ':' + password : '') + '@';\r\n  }\r\n  output += serializeHost(host);\r\n  if (port !== null)\r\n   output += ':' + port;\r\n } else if (scheme == 'file')\r\n  output += '//';\r\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\r\n if (query !== null)\r\n  output += '?' + query;\r\n if (fragment !== null)\r\n  output += '#' + fragment;\r\n return output;\r\n};\r\nvar getOrigin = function () {\r\n var url = getInternalURLState(this);\r\n var scheme = url.scheme;\r\n var port = url.port;\r\n if (scheme == 'blob')\r\n  try {\r\n   return new URL(scheme.path[0]).origin;\r\n  } catch (error) {\r\n   return 'null';\r\n  }\r\n if (scheme == 'file' || !isSpecial(url))\r\n  return 'null';\r\n return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\r\n};\r\nvar getProtocol = function () {\r\n return getInternalURLState(this).scheme + ':';\r\n};\r\nvar getUsername = function () {\r\n return getInternalURLState(this).username;\r\n};\r\nvar getPassword = function () {\r\n return getInternalURLState(this).password;\r\n};\r\nvar getHost = function () {\r\n var url = getInternalURLState(this);\r\n var host = url.host;\r\n var port = url.port;\r\n return host === null ? '' : port === null ? serializeHost(host) : serializeHost(host) + ':' + port;\r\n};\r\nvar getHostname = function () {\r\n var host = getInternalURLState(this).host;\r\n return host === null ? '' : serializeHost(host);\r\n};\r\nvar getPort = function () {\r\n var port = getInternalURLState(this).port;\r\n return port === null ? '' : String(port);\r\n};\r\nvar getPathname = function () {\r\n var url = getInternalURLState(this);\r\n var path = url.path;\r\n return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\r\n};\r\nvar getSearch = function () {\r\n var query = getInternalURLState(this).query;\r\n return query ? '?' + query : '';\r\n};\r\nvar getSearchParams = function () {\r\n return getInternalURLState(this).searchParams;\r\n};\r\nvar getHash = function () {\r\n var fragment = getInternalURLState(this).fragment;\r\n return fragment ? '#' + fragment : '';\r\n};\r\nvar accessorDescriptor = function (getter, setter) {\r\n return {\r\n  get: getter,\r\n  set: setter,\r\n  configurable: true,\r\n  enumerable: true\r\n };\r\n};\r\nif (DESCRIPTORS) {\r\n defineProperties(URLPrototype, {\r\n  href: accessorDescriptor(serializeURL, function (href) {\r\n   var url = getInternalURLState(this);\r\n   var urlString = String(href);\r\n   var failure = parseURL(url, urlString);\r\n   if (failure)\r\n    throw TypeError(failure);\r\n   getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\r\n  }),\r\n  origin: accessorDescriptor(getOrigin),\r\n  protocol: accessorDescriptor(getProtocol, function (protocol) {\r\n   var url = getInternalURLState(this);\r\n   parseURL(url, String(protocol) + ':', SCHEME_START);\r\n  }),\r\n  username: accessorDescriptor(getUsername, function (username) {\r\n   var url = getInternalURLState(this);\r\n   var codePoints = arrayFrom(String(username));\r\n   if (cannotHaveUsernamePasswordPort(url))\r\n    return;\r\n   url.username = '';\r\n   for (var i = 0; i < codePoints.length; i++) {\r\n    url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\r\n   }\r\n  }),\r\n  password: accessorDescriptor(getPassword, function (password) {\r\n   var url = getInternalURLState(this);\r\n   var codePoints = arrayFrom(String(password));\r\n   if (cannotHaveUsernamePasswordPort(url))\r\n    return;\r\n   url.password = '';\r\n   for (var i = 0; i < codePoints.length; i++) {\r\n    url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\r\n   }\r\n  }),\r\n  host: accessorDescriptor(getHost, function (host) {\r\n   var url = getInternalURLState(this);\r\n   if (url.cannotBeABaseURL)\r\n    return;\r\n   parseURL(url, String(host), HOST);\r\n  }),\r\n  hostname: accessorDescriptor(getHostname, function (hostname) {\r\n   var url = getInternalURLState(this);\r\n   if (url.cannotBeABaseURL)\r\n    return;\r\n   parseURL(url, String(hostname), HOSTNAME);\r\n  }),\r\n  port: accessorDescriptor(getPort, function (port) {\r\n   var url = getInternalURLState(this);\r\n   if (cannotHaveUsernamePasswordPort(url))\r\n    return;\r\n   port = String(port);\r\n   if (port == '')\r\n    url.port = null;\r\n   else\r\n    parseURL(url, port, PORT);\r\n  }),\r\n  pathname: accessorDescriptor(getPathname, function (pathname) {\r\n   var url = getInternalURLState(this);\r\n   if (url.cannotBeABaseURL)\r\n    return;\r\n   url.path = [];\r\n   parseURL(url, pathname + '', PATH_START);\r\n  }),\r\n  search: accessorDescriptor(getSearch, function (search) {\r\n   var url = getInternalURLState(this);\r\n   search = String(search);\r\n   if (search == '') {\r\n    url.query = null;\r\n   } else {\r\n    if ('?' == search.charAt(0))\r\n     search = search.slice(1);\r\n    url.query = '';\r\n    parseURL(url, search, QUERY);\r\n   }\r\n   getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\r\n  }),\r\n  searchParams: accessorDescriptor(getSearchParams),\r\n  hash: accessorDescriptor(getHash, function (hash) {\r\n   var url = getInternalURLState(this);\r\n   hash = String(hash);\r\n   if (hash == '') {\r\n    url.fragment = null;\r\n    return;\r\n   }\r\n   if ('#' == hash.charAt(0))\r\n    hash = hash.slice(1);\r\n   url.fragment = '';\r\n   parseURL(url, hash, FRAGMENT);\r\n  })\r\n });\r\n}\r\nredefine(URLPrototype, 'toJSON', function toJSON() {\r\n return serializeURL.call(this);\r\n}, { enumerable: true });\r\nredefine(URLPrototype, 'toString', function toString() {\r\n return serializeURL.call(this);\r\n}, { enumerable: true });\r\nif (NativeURL) {\r\n var nativeCreateObjectURL = NativeURL.createObjectURL;\r\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\r\n if (nativeCreateObjectURL)\r\n  redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\r\n   return nativeCreateObjectURL.apply(NativeURL, arguments);\r\n  });\r\n if (nativeRevokeObjectURL)\r\n  redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\r\n   return nativeRevokeObjectURL.apply(NativeURL, arguments);\r\n  });\r\n}\r\nsetToStringTag(URLConstructor, 'URL');\r\n$({\r\n global: true,\r\n forced: !USE_NATIVE_URL,\r\n sham: !DESCRIPTORS\r\n}, { URL: URLConstructor });\r\n\r\n/***/ }),\r\n/* 113 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar IS_PURE = __w_pdfjs_require__(36);\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nmodule.exports = !fails(function () {\r\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\r\n var searchParams = url.searchParams;\r\n var result = '';\r\n url.pathname = 'c%20d';\r\n searchParams.forEach(function (value, key) {\r\n  searchParams['delete']('b');\r\n  result += key + value;\r\n });\r\n return IS_PURE && !url.toJSON || !searchParams.sort || url.href !== 'http://a/c%20d?a=1&c=3' || searchParams.get('c') !== '3' || String(new URLSearchParams('?a=1')) !== 'a=1' || !searchParams[ITERATOR] || new URL('https://a@b').username !== 'a' || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b' || new URL('http://тест').host !== 'xn--e1aybc' || new URL('http://a#б').hash !== '#%D0%B1' || result !== 'a1c3' || new URL('http://x', undefined).host !== 'x';\r\n});\r\n\r\n/***/ }),\r\n/* 114 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar fails = __w_pdfjs_require__(13);\r\nvar objectKeys = __w_pdfjs_require__(60);\r\nvar getOwnPropertySymbolsModule = __w_pdfjs_require__(50);\r\nvar propertyIsEnumerableModule = __w_pdfjs_require__(14);\r\nvar toObject = __w_pdfjs_require__(67);\r\nvar IndexedObject = __w_pdfjs_require__(17);\r\nvar nativeAssign = Object.assign;\r\nvar defineProperty = Object.defineProperty;\r\nmodule.exports = !nativeAssign || fails(function () {\r\n if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\r\n   enumerable: true,\r\n   get: function () {\r\n    defineProperty(this, 'b', {\r\n     value: 3,\r\n     enumerable: false\r\n    });\r\n   }\r\n  }), { b: 2 })).b !== 1)\r\n  return true;\r\n var A = {};\r\n var B = {};\r\n var symbol = Symbol();\r\n var alphabet = 'abcdefghijklmnopqrst';\r\n A[symbol] = 7;\r\n alphabet.split('').forEach(function (chr) {\r\n  B[chr] = chr;\r\n });\r\n return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\r\n}) ? function assign(target, source) {\r\n var T = toObject(target);\r\n var argumentsLength = arguments.length;\r\n var index = 1;\r\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\r\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\r\n while (argumentsLength > index) {\r\n  var S = IndexedObject(arguments[index++]);\r\n  var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\r\n  var length = keys.length;\r\n  var j = 0;\r\n  var key;\r\n  while (length > j) {\r\n   key = keys[j++];\r\n   if (!DESCRIPTORS || propertyIsEnumerable.call(S, key))\r\n    T[key] = S[key];\r\n  }\r\n }\r\n return T;\r\n} : nativeAssign;\r\n\r\n/***/ }),\r\n/* 115 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar bind = __w_pdfjs_require__(75);\r\nvar toObject = __w_pdfjs_require__(67);\r\nvar callWithSafeIterationClosing = __w_pdfjs_require__(116);\r\nvar isArrayIteratorMethod = __w_pdfjs_require__(74);\r\nvar toLength = __w_pdfjs_require__(46);\r\nvar createProperty = __w_pdfjs_require__(81);\r\nvar getIteratorMethod = __w_pdfjs_require__(77);\r\nmodule.exports = function from(arrayLike) {\r\n var O = toObject(arrayLike);\r\n var C = typeof this == 'function' ? this : Array;\r\n var argumentsLength = arguments.length;\r\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\r\n var mapping = mapfn !== undefined;\r\n var iteratorMethod = getIteratorMethod(O);\r\n var index = 0;\r\n var length, result, step, iterator, next, value;\r\n if (mapping)\r\n  mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\r\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\r\n  iterator = iteratorMethod.call(O);\r\n  next = iterator.next;\r\n  result = new C();\r\n  for (; !(step = next.call(iterator)).done; index++) {\r\n   value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [\r\n    step.value,\r\n    index\r\n   ], true) : step.value;\r\n   createProperty(result, index, value);\r\n  }\r\n } else {\r\n  length = toLength(O.length);\r\n  result = new C(length);\r\n  for (; length > index; index++) {\r\n   value = mapping ? mapfn(O[index], index) : O[index];\r\n   createProperty(result, index, value);\r\n  }\r\n }\r\n result.length = index;\r\n return result;\r\n};\r\n\r\n/***/ }),\r\n/* 116 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar iteratorClose = __w_pdfjs_require__(80);\r\nmodule.exports = function (iterator, fn, value, ENTRIES) {\r\n try {\r\n  return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\r\n } catch (error) {\r\n  iteratorClose(iterator);\r\n  throw error;\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 117 */\r\n/***/ ((module) => {\r\n\r\n\"use strict\";\r\n\r\nvar maxInt = 2147483647;\r\nvar base = 36;\r\nvar tMin = 1;\r\nvar tMax = 26;\r\nvar skew = 38;\r\nvar damp = 700;\r\nvar initialBias = 72;\r\nvar initialN = 128;\r\nvar delimiter = '-';\r\nvar regexNonASCII = /[^\\0-\\u007E]/;\r\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g;\r\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\r\nvar baseMinusTMin = base - tMin;\r\nvar floor = Math.floor;\r\nvar stringFromCharCode = String.fromCharCode;\r\nvar ucs2decode = function (string) {\r\n var output = [];\r\n var counter = 0;\r\n var length = string.length;\r\n while (counter < length) {\r\n  var value = string.charCodeAt(counter++);\r\n  if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\r\n   var extra = string.charCodeAt(counter++);\r\n   if ((extra & 0xFC00) == 0xDC00) {\r\n    output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\r\n   } else {\r\n    output.push(value);\r\n    counter--;\r\n   }\r\n  } else {\r\n   output.push(value);\r\n  }\r\n }\r\n return output;\r\n};\r\nvar digitToBasic = function (digit) {\r\n return digit + 22 + 75 * (digit < 26);\r\n};\r\nvar adapt = function (delta, numPoints, firstTime) {\r\n var k = 0;\r\n delta = firstTime ? floor(delta / damp) : delta >> 1;\r\n delta += floor(delta / numPoints);\r\n for (; delta > baseMinusTMin * tMax >> 1; k += base) {\r\n  delta = floor(delta / baseMinusTMin);\r\n }\r\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\r\n};\r\nvar encode = function (input) {\r\n var output = [];\r\n input = ucs2decode(input);\r\n var inputLength = input.length;\r\n var n = initialN;\r\n var delta = 0;\r\n var bias = initialBias;\r\n var i, currentValue;\r\n for (i = 0; i < input.length; i++) {\r\n  currentValue = input[i];\r\n  if (currentValue < 0x80) {\r\n   output.push(stringFromCharCode(currentValue));\r\n  }\r\n }\r\n var basicLength = output.length;\r\n var handledCPCount = basicLength;\r\n if (basicLength) {\r\n  output.push(delimiter);\r\n }\r\n while (handledCPCount < inputLength) {\r\n  var m = maxInt;\r\n  for (i = 0; i < input.length; i++) {\r\n   currentValue = input[i];\r\n   if (currentValue >= n && currentValue < m) {\r\n    m = currentValue;\r\n   }\r\n  }\r\n  var handledCPCountPlusOne = handledCPCount + 1;\r\n  if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\r\n   throw RangeError(OVERFLOW_ERROR);\r\n  }\r\n  delta += (m - n) * handledCPCountPlusOne;\r\n  n = m;\r\n  for (i = 0; i < input.length; i++) {\r\n   currentValue = input[i];\r\n   if (currentValue < n && ++delta > maxInt) {\r\n    throw RangeError(OVERFLOW_ERROR);\r\n   }\r\n   if (currentValue == n) {\r\n    var q = delta;\r\n    for (var k = base;; k += base) {\r\n     var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\r\n     if (q < t)\r\n      break;\r\n     var qMinusT = q - t;\r\n     var baseMinusT = base - t;\r\n     output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\r\n     q = floor(qMinusT / baseMinusT);\r\n    }\r\n    output.push(stringFromCharCode(digitToBasic(q)));\r\n    bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\r\n    delta = 0;\r\n    ++handledCPCount;\r\n   }\r\n  }\r\n  ++delta;\r\n  ++n;\r\n }\r\n return output.join('');\r\n};\r\nmodule.exports = function (input) {\r\n var encoded = [];\r\n var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\r\n var i, label;\r\n for (i = 0; i < labels.length; i++) {\r\n  label = labels[i];\r\n  encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\r\n }\r\n return encoded.join('.');\r\n};\r\n\r\n/***/ }),\r\n/* 118 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n__w_pdfjs_require__(53);\r\nvar $ = __w_pdfjs_require__(9);\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nvar USE_NATIVE_URL = __w_pdfjs_require__(113);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar redefineAll = __w_pdfjs_require__(88);\r\nvar setToStringTag = __w_pdfjs_require__(69);\r\nvar createIteratorConstructor = __w_pdfjs_require__(64);\r\nvar InternalStateModule = __w_pdfjs_require__(32);\r\nvar anInstance = __w_pdfjs_require__(90);\r\nvar hasOwn = __w_pdfjs_require__(22);\r\nvar bind = __w_pdfjs_require__(75);\r\nvar classof = __w_pdfjs_require__(78);\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar isObject = __w_pdfjs_require__(21);\r\nvar create = __w_pdfjs_require__(58);\r\nvar createPropertyDescriptor = __w_pdfjs_require__(15);\r\nvar getIterator = __w_pdfjs_require__(119);\r\nvar getIteratorMethod = __w_pdfjs_require__(77);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar $fetch = getBuiltIn('fetch');\r\nvar Headers = getBuiltIn('Headers');\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\r\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\r\nvar setInternalState = InternalStateModule.set;\r\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\r\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\r\nvar plus = /\\+/g;\r\nvar sequences = Array(4);\r\nvar percentSequence = function (bytes) {\r\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\r\n};\r\nvar percentDecode = function (sequence) {\r\n try {\r\n  return decodeURIComponent(sequence);\r\n } catch (error) {\r\n  return sequence;\r\n }\r\n};\r\nvar deserialize = function (it) {\r\n var result = it.replace(plus, ' ');\r\n var bytes = 4;\r\n try {\r\n  return decodeURIComponent(result);\r\n } catch (error) {\r\n  while (bytes) {\r\n   result = result.replace(percentSequence(bytes--), percentDecode);\r\n  }\r\n  return result;\r\n }\r\n};\r\nvar find = /[!'()~]|%20/g;\r\nvar replace = {\r\n '!': '%21',\r\n \"'\": '%27',\r\n '(': '%28',\r\n ')': '%29',\r\n '~': '%7E',\r\n '%20': '+'\r\n};\r\nvar replacer = function (match) {\r\n return replace[match];\r\n};\r\nvar serialize = function (it) {\r\n return encodeURIComponent(it).replace(find, replacer);\r\n};\r\nvar parseSearchParams = function (result, query) {\r\n if (query) {\r\n  var attributes = query.split('&');\r\n  var index = 0;\r\n  var attribute, entry;\r\n  while (index < attributes.length) {\r\n   attribute = attributes[index++];\r\n   if (attribute.length) {\r\n    entry = attribute.split('=');\r\n    result.push({\r\n     key: deserialize(entry.shift()),\r\n     value: deserialize(entry.join('='))\r\n    });\r\n   }\r\n  }\r\n }\r\n};\r\nvar updateSearchParams = function (query) {\r\n this.entries.length = 0;\r\n parseSearchParams(this.entries, query);\r\n};\r\nvar validateArgumentsLength = function (passed, required) {\r\n if (passed < required)\r\n  throw TypeError('Not enough arguments');\r\n};\r\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\r\n setInternalState(this, {\r\n  type: URL_SEARCH_PARAMS_ITERATOR,\r\n  iterator: getIterator(getInternalParamsState(params).entries),\r\n  kind: kind\r\n });\r\n}, 'Iterator', function next() {\r\n var state = getInternalIteratorState(this);\r\n var kind = state.kind;\r\n var step = state.iterator.next();\r\n var entry = step.value;\r\n if (!step.done) {\r\n  step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [\r\n   entry.key,\r\n   entry.value\r\n  ];\r\n }\r\n return step;\r\n});\r\nvar URLSearchParamsConstructor = function URLSearchParams() {\r\n anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);\r\n var init = arguments.length > 0 ? arguments[0] : undefined;\r\n var that = this;\r\n var entries = [];\r\n var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;\r\n setInternalState(that, {\r\n  type: URL_SEARCH_PARAMS,\r\n  entries: entries,\r\n  updateURL: function () {\r\n  },\r\n  updateSearchParams: updateSearchParams\r\n });\r\n if (init !== undefined) {\r\n  if (isObject(init)) {\r\n   iteratorMethod = getIteratorMethod(init);\r\n   if (typeof iteratorMethod === 'function') {\r\n    iterator = iteratorMethod.call(init);\r\n    next = iterator.next;\r\n    while (!(step = next.call(iterator)).done) {\r\n     entryIterator = getIterator(anObject(step.value));\r\n     entryNext = entryIterator.next;\r\n     if ((first = entryNext.call(entryIterator)).done || (second = entryNext.call(entryIterator)).done || !entryNext.call(entryIterator).done)\r\n      throw TypeError('Expected sequence with length 2');\r\n     entries.push({\r\n      key: first.value + '',\r\n      value: second.value + ''\r\n     });\r\n    }\r\n   } else\r\n    for (key in init)\r\n     if (hasOwn(init, key))\r\n      entries.push({\r\n       key: key,\r\n       value: init[key] + ''\r\n      });\r\n  } else {\r\n   parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');\r\n  }\r\n }\r\n};\r\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\r\nredefineAll(URLSearchParamsPrototype, {\r\n append: function append(name, value) {\r\n  validateArgumentsLength(arguments.length, 2);\r\n  var state = getInternalParamsState(this);\r\n  state.entries.push({\r\n   key: name + '',\r\n   value: value + ''\r\n  });\r\n  state.updateURL();\r\n },\r\n 'delete': function (name) {\r\n  validateArgumentsLength(arguments.length, 1);\r\n  var state = getInternalParamsState(this);\r\n  var entries = state.entries;\r\n  var key = name + '';\r\n  var index = 0;\r\n  while (index < entries.length) {\r\n   if (entries[index].key === key)\r\n    entries.splice(index, 1);\r\n   else\r\n    index++;\r\n  }\r\n  state.updateURL();\r\n },\r\n get: function get(name) {\r\n  validateArgumentsLength(arguments.length, 1);\r\n  var entries = getInternalParamsState(this).entries;\r\n  var key = name + '';\r\n  var index = 0;\r\n  for (; index < entries.length; index++) {\r\n   if (entries[index].key === key)\r\n    return entries[index].value;\r\n  }\r\n  return null;\r\n },\r\n getAll: function getAll(name) {\r\n  validateArgumentsLength(arguments.length, 1);\r\n  var entries = getInternalParamsState(this).entries;\r\n  var key = name + '';\r\n  var result = [];\r\n  var index = 0;\r\n  for (; index < entries.length; index++) {\r\n   if (entries[index].key === key)\r\n    result.push(entries[index].value);\r\n  }\r\n  return result;\r\n },\r\n has: function has(name) {\r\n  validateArgumentsLength(arguments.length, 1);\r\n  var entries = getInternalParamsState(this).entries;\r\n  var key = name + '';\r\n  var index = 0;\r\n  while (index < entries.length) {\r\n   if (entries[index++].key === key)\r\n    return true;\r\n  }\r\n  return false;\r\n },\r\n set: function set(name, value) {\r\n  validateArgumentsLength(arguments.length, 1);\r\n  var state = getInternalParamsState(this);\r\n  var entries = state.entries;\r\n  var found = false;\r\n  var key = name + '';\r\n  var val = value + '';\r\n  var index = 0;\r\n  var entry;\r\n  for (; index < entries.length; index++) {\r\n   entry = entries[index];\r\n   if (entry.key === key) {\r\n    if (found)\r\n     entries.splice(index--, 1);\r\n    else {\r\n     found = true;\r\n     entry.value = val;\r\n    }\r\n   }\r\n  }\r\n  if (!found)\r\n   entries.push({\r\n    key: key,\r\n    value: val\r\n   });\r\n  state.updateURL();\r\n },\r\n sort: function sort() {\r\n  var state = getInternalParamsState(this);\r\n  var entries = state.entries;\r\n  var slice = entries.slice();\r\n  var entry, entriesIndex, sliceIndex;\r\n  entries.length = 0;\r\n  for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {\r\n   entry = slice[sliceIndex];\r\n   for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {\r\n    if (entries[entriesIndex].key > entry.key) {\r\n     entries.splice(entriesIndex, 0, entry);\r\n     break;\r\n    }\r\n   }\r\n   if (entriesIndex === sliceIndex)\r\n    entries.push(entry);\r\n  }\r\n  state.updateURL();\r\n },\r\n forEach: function forEach(callback) {\r\n  var entries = getInternalParamsState(this).entries;\r\n  var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);\r\n  var index = 0;\r\n  var entry;\r\n  while (index < entries.length) {\r\n   entry = entries[index++];\r\n   boundFunction(entry.value, entry.key, this);\r\n  }\r\n },\r\n keys: function keys() {\r\n  return new URLSearchParamsIterator(this, 'keys');\r\n },\r\n values: function values() {\r\n  return new URLSearchParamsIterator(this, 'values');\r\n },\r\n entries: function entries() {\r\n  return new URLSearchParamsIterator(this, 'entries');\r\n }\r\n}, { enumerable: true });\r\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);\r\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\r\n var entries = getInternalParamsState(this).entries;\r\n var result = [];\r\n var index = 0;\r\n var entry;\r\n while (index < entries.length) {\r\n  entry = entries[index++];\r\n  result.push(serialize(entry.key) + '=' + serialize(entry.value));\r\n }\r\n return result.join('&');\r\n}, { enumerable: true });\r\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\r\n$({\r\n global: true,\r\n forced: !USE_NATIVE_URL\r\n}, { URLSearchParams: URLSearchParamsConstructor });\r\nif (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') {\r\n $({\r\n  global: true,\r\n  enumerable: true,\r\n  forced: true\r\n }, {\r\n  fetch: function fetch(input) {\r\n   var args = [input];\r\n   var init, body, headers;\r\n   if (arguments.length > 1) {\r\n    init = arguments[1];\r\n    if (isObject(init)) {\r\n     body = init.body;\r\n     if (classof(body) === URL_SEARCH_PARAMS) {\r\n      headers = init.headers ? new Headers(init.headers) : new Headers();\r\n      if (!headers.has('content-type')) {\r\n       headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\r\n      }\r\n      init = create(init, {\r\n       body: createPropertyDescriptor(0, String(body)),\r\n       headers: createPropertyDescriptor(0, headers)\r\n      });\r\n     }\r\n    }\r\n    args.push(init);\r\n   }\r\n   return $fetch.apply(this, args);\r\n  }\r\n });\r\n}\r\nmodule.exports = {\r\n URLSearchParams: URLSearchParamsConstructor,\r\n getState: getInternalParamsState\r\n};\r\n\r\n/***/ }),\r\n/* 119 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar getIteratorMethod = __w_pdfjs_require__(77);\r\nmodule.exports = function (it) {\r\n var iteratorMethod = getIteratorMethod(it);\r\n if (typeof iteratorMethod != 'function') {\r\n  throw TypeError(String(it) + ' is not iterable');\r\n }\r\n return anObject(iteratorMethod.call(it));\r\n};\r\n\r\n/***/ }),\r\n/* 120 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\n$({\r\n target: 'URL',\r\n proto: true,\r\n enumerable: true\r\n}, {\r\n toJSON: function toJSON() {\r\n  return URL.prototype.toString.call(this);\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 121 */\r\n/***/ (function(__unused_webpack_module, exports) {\r\n\r\n(function (global, factory) {\r\n  true ? factory(exports) : 0;\r\n}(this, function (exports) {\r\n 'use strict';\r\n var SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol : function (description) {\r\n  return \"Symbol(\" + description + \")\";\r\n };\r\n function noop() {\r\n }\r\n function getGlobals() {\r\n  if (typeof self !== 'undefined') {\r\n   return self;\r\n  } else if (typeof window !== 'undefined') {\r\n   return window;\r\n  } else if (typeof global !== 'undefined') {\r\n   return global;\r\n  }\r\n  return undefined;\r\n }\r\n var globals = getGlobals();\r\n function typeIsObject(x) {\r\n  return typeof x === 'object' && x !== null || typeof x === 'function';\r\n }\r\n var rethrowAssertionErrorRejection = noop;\r\n var originalPromise = Promise;\r\n var originalPromiseThen = Promise.prototype.then;\r\n var originalPromiseResolve = Promise.resolve.bind(originalPromise);\r\n var originalPromiseReject = Promise.reject.bind(originalPromise);\r\n function newPromise(executor) {\r\n  return new originalPromise(executor);\r\n }\r\n function promiseResolvedWith(value) {\r\n  return originalPromiseResolve(value);\r\n }\r\n function promiseRejectedWith(reason) {\r\n  return originalPromiseReject(reason);\r\n }\r\n function PerformPromiseThen(promise, onFulfilled, onRejected) {\r\n  return originalPromiseThen.call(promise, onFulfilled, onRejected);\r\n }\r\n function uponPromise(promise, onFulfilled, onRejected) {\r\n  PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), undefined, rethrowAssertionErrorRejection);\r\n }\r\n function uponFulfillment(promise, onFulfilled) {\r\n  uponPromise(promise, onFulfilled);\r\n }\r\n function uponRejection(promise, onRejected) {\r\n  uponPromise(promise, undefined, onRejected);\r\n }\r\n function transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) {\r\n  return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\r\n }\r\n function setPromiseIsHandledToTrue(promise) {\r\n  PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\r\n }\r\n var queueMicrotask = function () {\r\n  var globalQueueMicrotask = globals && globals.queueMicrotask;\r\n  if (typeof globalQueueMicrotask === 'function') {\r\n   return globalQueueMicrotask;\r\n  }\r\n  var resolvedPromise = promiseResolvedWith(undefined);\r\n  return function (fn) {\r\n   return PerformPromiseThen(resolvedPromise, fn);\r\n  };\r\n }();\r\n function reflectCall(F, V, args) {\r\n  if (typeof F !== 'function') {\r\n   throw new TypeError('Argument is not a function');\r\n  }\r\n  return Function.prototype.apply.call(F, V, args);\r\n }\r\n function promiseCall(F, V, args) {\r\n  try {\r\n   return promiseResolvedWith(reflectCall(F, V, args));\r\n  } catch (value) {\r\n   return promiseRejectedWith(value);\r\n  }\r\n }\r\n var QUEUE_MAX_ARRAY_SIZE = 16384;\r\n var SimpleQueue = function () {\r\n  function SimpleQueue() {\r\n   this._cursor = 0;\r\n   this._size = 0;\r\n   this._front = {\r\n    _elements: [],\r\n    _next: undefined\r\n   };\r\n   this._back = this._front;\r\n   this._cursor = 0;\r\n   this._size = 0;\r\n  }\r\n  Object.defineProperty(SimpleQueue.prototype, \"length\", {\r\n   get: function () {\r\n    return this._size;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  SimpleQueue.prototype.push = function (element) {\r\n   var oldBack = this._back;\r\n   var newBack = oldBack;\r\n   if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\r\n    newBack = {\r\n     _elements: [],\r\n     _next: undefined\r\n    };\r\n   }\r\n   oldBack._elements.push(element);\r\n   if (newBack !== oldBack) {\r\n    this._back = newBack;\r\n    oldBack._next = newBack;\r\n   }\r\n   ++this._size;\r\n  };\r\n  SimpleQueue.prototype.shift = function () {\r\n   var oldFront = this._front;\r\n   var newFront = oldFront;\r\n   var oldCursor = this._cursor;\r\n   var newCursor = oldCursor + 1;\r\n   var elements = oldFront._elements;\r\n   var element = elements[oldCursor];\r\n   if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\r\n    newFront = oldFront._next;\r\n    newCursor = 0;\r\n   }\r\n   --this._size;\r\n   this._cursor = newCursor;\r\n   if (oldFront !== newFront) {\r\n    this._front = newFront;\r\n   }\r\n   elements[oldCursor] = undefined;\r\n   return element;\r\n  };\r\n  SimpleQueue.prototype.forEach = function (callback) {\r\n   var i = this._cursor;\r\n   var node = this._front;\r\n   var elements = node._elements;\r\n   while (i !== elements.length || node._next !== undefined) {\r\n    if (i === elements.length) {\r\n     node = node._next;\r\n     elements = node._elements;\r\n     i = 0;\r\n     if (elements.length === 0) {\r\n      break;\r\n     }\r\n    }\r\n    callback(elements[i]);\r\n    ++i;\r\n   }\r\n  };\r\n  SimpleQueue.prototype.peek = function () {\r\n   var front = this._front;\r\n   var cursor = this._cursor;\r\n   return front._elements[cursor];\r\n  };\r\n  return SimpleQueue;\r\n }();\r\n function ReadableStreamReaderGenericInitialize(reader, stream) {\r\n  reader._ownerReadableStream = stream;\r\n  stream._reader = reader;\r\n  if (stream._state === 'readable') {\r\n   defaultReaderClosedPromiseInitialize(reader);\r\n  } else if (stream._state === 'closed') {\r\n   defaultReaderClosedPromiseInitializeAsResolved(reader);\r\n  } else {\r\n   defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\r\n  }\r\n }\r\n function ReadableStreamReaderGenericCancel(reader, reason) {\r\n  var stream = reader._ownerReadableStream;\r\n  return ReadableStreamCancel(stream, reason);\r\n }\r\n function ReadableStreamReaderGenericRelease(reader) {\r\n  if (reader._ownerReadableStream._state === 'readable') {\r\n   defaultReaderClosedPromiseReject(reader, new TypeError(\"Reader was released and can no longer be used to monitor the stream's closedness\"));\r\n  } else {\r\n   defaultReaderClosedPromiseResetToRejected(reader, new TypeError(\"Reader was released and can no longer be used to monitor the stream's closedness\"));\r\n  }\r\n  reader._ownerReadableStream._reader = undefined;\r\n  reader._ownerReadableStream = undefined;\r\n }\r\n function readerLockException(name) {\r\n  return new TypeError('Cannot ' + name + ' a stream using a released reader');\r\n }\r\n function defaultReaderClosedPromiseInitialize(reader) {\r\n  reader._closedPromise = newPromise(function (resolve, reject) {\r\n   reader._closedPromise_resolve = resolve;\r\n   reader._closedPromise_reject = reject;\r\n  });\r\n }\r\n function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {\r\n  defaultReaderClosedPromiseInitialize(reader);\r\n  defaultReaderClosedPromiseReject(reader, reason);\r\n }\r\n function defaultReaderClosedPromiseInitializeAsResolved(reader) {\r\n  defaultReaderClosedPromiseInitialize(reader);\r\n  defaultReaderClosedPromiseResolve(reader);\r\n }\r\n function defaultReaderClosedPromiseReject(reader, reason) {\r\n  if (reader._closedPromise_reject === undefined) {\r\n   return;\r\n  }\r\n  setPromiseIsHandledToTrue(reader._closedPromise);\r\n  reader._closedPromise_reject(reason);\r\n  reader._closedPromise_resolve = undefined;\r\n  reader._closedPromise_reject = undefined;\r\n }\r\n function defaultReaderClosedPromiseResetToRejected(reader, reason) {\r\n  defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\r\n }\r\n function defaultReaderClosedPromiseResolve(reader) {\r\n  if (reader._closedPromise_resolve === undefined) {\r\n   return;\r\n  }\r\n  reader._closedPromise_resolve(undefined);\r\n  reader._closedPromise_resolve = undefined;\r\n  reader._closedPromise_reject = undefined;\r\n }\r\n var AbortSteps = SymbolPolyfill('[[AbortSteps]]');\r\n var ErrorSteps = SymbolPolyfill('[[ErrorSteps]]');\r\n var CancelSteps = SymbolPolyfill('[[CancelSteps]]');\r\n var PullSteps = SymbolPolyfill('[[PullSteps]]');\r\n var NumberIsFinite = Number.isFinite || function (x) {\r\n  return typeof x === 'number' && isFinite(x);\r\n };\r\n var MathTrunc = Math.trunc || function (v) {\r\n  return v < 0 ? Math.ceil(v) : Math.floor(v);\r\n };\r\n function isDictionary(x) {\r\n  return typeof x === 'object' || typeof x === 'function';\r\n }\r\n function assertDictionary(obj, context) {\r\n  if (obj !== undefined && !isDictionary(obj)) {\r\n   throw new TypeError(context + \" is not an object.\");\r\n  }\r\n }\r\n function assertFunction(x, context) {\r\n  if (typeof x !== 'function') {\r\n   throw new TypeError(context + \" is not a function.\");\r\n  }\r\n }\r\n function isObject(x) {\r\n  return typeof x === 'object' && x !== null || typeof x === 'function';\r\n }\r\n function assertObject(x, context) {\r\n  if (!isObject(x)) {\r\n   throw new TypeError(context + \" is not an object.\");\r\n  }\r\n }\r\n function assertRequiredArgument(x, position, context) {\r\n  if (x === undefined) {\r\n   throw new TypeError(\"Parameter \" + position + \" is required in '\" + context + \"'.\");\r\n  }\r\n }\r\n function assertRequiredField(x, field, context) {\r\n  if (x === undefined) {\r\n   throw new TypeError(field + \" is required in '\" + context + \"'.\");\r\n  }\r\n }\r\n function convertUnrestrictedDouble(value) {\r\n  return Number(value);\r\n }\r\n function censorNegativeZero(x) {\r\n  return x === 0 ? 0 : x;\r\n }\r\n function integerPart(x) {\r\n  return censorNegativeZero(MathTrunc(x));\r\n }\r\n function convertUnsignedLongLongWithEnforceRange(value, context) {\r\n  var lowerBound = 0;\r\n  var upperBound = Number.MAX_SAFE_INTEGER;\r\n  var x = Number(value);\r\n  x = censorNegativeZero(x);\r\n  if (!NumberIsFinite(x)) {\r\n   throw new TypeError(context + \" is not a finite number\");\r\n  }\r\n  x = integerPart(x);\r\n  if (x < lowerBound || x > upperBound) {\r\n   throw new TypeError(context + \" is outside the accepted range of \" + lowerBound + \" to \" + upperBound + \", inclusive\");\r\n  }\r\n  if (!NumberIsFinite(x) || x === 0) {\r\n   return 0;\r\n  }\r\n  return x;\r\n }\r\n function assertReadableStream(x, context) {\r\n  if (!IsReadableStream(x)) {\r\n   throw new TypeError(context + \" is not a ReadableStream.\");\r\n  }\r\n }\r\n function AcquireReadableStreamDefaultReader(stream) {\r\n  return new ReadableStreamDefaultReader(stream);\r\n }\r\n function ReadableStreamAddReadRequest(stream, readRequest) {\r\n  stream._reader._readRequests.push(readRequest);\r\n }\r\n function ReadableStreamFulfillReadRequest(stream, chunk, done) {\r\n  var reader = stream._reader;\r\n  var readRequest = reader._readRequests.shift();\r\n  if (done) {\r\n   readRequest._closeSteps();\r\n  } else {\r\n   readRequest._chunkSteps(chunk);\r\n  }\r\n }\r\n function ReadableStreamGetNumReadRequests(stream) {\r\n  return stream._reader._readRequests.length;\r\n }\r\n function ReadableStreamHasDefaultReader(stream) {\r\n  var reader = stream._reader;\r\n  if (reader === undefined) {\r\n   return false;\r\n  }\r\n  if (!IsReadableStreamDefaultReader(reader)) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n var ReadableStreamDefaultReader = function () {\r\n  function ReadableStreamDefaultReader(stream) {\r\n   assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\r\n   assertReadableStream(stream, 'First parameter');\r\n   if (IsReadableStreamLocked(stream)) {\r\n    throw new TypeError('This stream has already been locked for exclusive reading by another reader');\r\n   }\r\n   ReadableStreamReaderGenericInitialize(this, stream);\r\n   this._readRequests = new SimpleQueue();\r\n  }\r\n  Object.defineProperty(ReadableStreamDefaultReader.prototype, \"closed\", {\r\n   get: function () {\r\n    if (!IsReadableStreamDefaultReader(this)) {\r\n     return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\r\n    }\r\n    return this._closedPromise;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  ReadableStreamDefaultReader.prototype.cancel = function (reason) {\r\n   if (reason === void 0) {\r\n    reason = undefined;\r\n   }\r\n   if (!IsReadableStreamDefaultReader(this)) {\r\n    return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\r\n   }\r\n   if (this._ownerReadableStream === undefined) {\r\n    return promiseRejectedWith(readerLockException('cancel'));\r\n   }\r\n   return ReadableStreamReaderGenericCancel(this, reason);\r\n  };\r\n  ReadableStreamDefaultReader.prototype.read = function () {\r\n   if (!IsReadableStreamDefaultReader(this)) {\r\n    return promiseRejectedWith(defaultReaderBrandCheckException('read'));\r\n   }\r\n   if (this._ownerReadableStream === undefined) {\r\n    return promiseRejectedWith(readerLockException('read from'));\r\n   }\r\n   var resolvePromise;\r\n   var rejectPromise;\r\n   var promise = newPromise(function (resolve, reject) {\r\n    resolvePromise = resolve;\r\n    rejectPromise = reject;\r\n   });\r\n   var readRequest = {\r\n    _chunkSteps: function (chunk) {\r\n     return resolvePromise({\r\n      value: chunk,\r\n      done: false\r\n     });\r\n    },\r\n    _closeSteps: function () {\r\n     return resolvePromise({\r\n      value: undefined,\r\n      done: true\r\n     });\r\n    },\r\n    _errorSteps: function (e) {\r\n     return rejectPromise(e);\r\n    }\r\n   };\r\n   ReadableStreamDefaultReaderRead(this, readRequest);\r\n   return promise;\r\n  };\r\n  ReadableStreamDefaultReader.prototype.releaseLock = function () {\r\n   if (!IsReadableStreamDefaultReader(this)) {\r\n    throw defaultReaderBrandCheckException('releaseLock');\r\n   }\r\n   if (this._ownerReadableStream === undefined) {\r\n    return;\r\n   }\r\n   if (this._readRequests.length > 0) {\r\n    throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\r\n   }\r\n   ReadableStreamReaderGenericRelease(this);\r\n  };\r\n  return ReadableStreamDefaultReader;\r\n }();\r\n Object.defineProperties(ReadableStreamDefaultReader.prototype, {\r\n  cancel: { enumerable: true },\r\n  read: { enumerable: true },\r\n  releaseLock: { enumerable: true },\r\n  closed: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ReadableStreamDefaultReader.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ReadableStreamDefaultReader',\r\n   configurable: true\r\n  });\r\n }\r\n function IsReadableStreamDefaultReader(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function ReadableStreamDefaultReaderRead(reader, readRequest) {\r\n  var stream = reader._ownerReadableStream;\r\n  stream._disturbed = true;\r\n  if (stream._state === 'closed') {\r\n   readRequest._closeSteps();\r\n  } else if (stream._state === 'errored') {\r\n   readRequest._errorSteps(stream._storedError);\r\n  } else {\r\n   stream._readableStreamController[PullSteps](readRequest);\r\n  }\r\n }\r\n function defaultReaderBrandCheckException(name) {\r\n  return new TypeError(\"ReadableStreamDefaultReader.prototype.\" + name + \" can only be used on a ReadableStreamDefaultReader\");\r\n }\r\n var _a;\r\n var AsyncIteratorPrototype;\r\n if (typeof SymbolPolyfill.asyncIterator === 'symbol') {\r\n  AsyncIteratorPrototype = (_a = {}, _a[SymbolPolyfill.asyncIterator] = function () {\r\n   return this;\r\n  }, _a);\r\n  Object.defineProperty(AsyncIteratorPrototype, SymbolPolyfill.asyncIterator, { enumerable: false });\r\n }\r\n var ReadableStreamAsyncIteratorImpl = function () {\r\n  function ReadableStreamAsyncIteratorImpl(reader, preventCancel) {\r\n   this._ongoingPromise = undefined;\r\n   this._isFinished = false;\r\n   this._reader = reader;\r\n   this._preventCancel = preventCancel;\r\n  }\r\n  ReadableStreamAsyncIteratorImpl.prototype.next = function () {\r\n   var _this = this;\r\n   var nextSteps = function () {\r\n    return _this._nextSteps();\r\n   };\r\n   this._ongoingPromise = this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) : nextSteps();\r\n   return this._ongoingPromise;\r\n  };\r\n  ReadableStreamAsyncIteratorImpl.prototype.return = function (value) {\r\n   var _this = this;\r\n   var returnSteps = function () {\r\n    return _this._returnSteps(value);\r\n   };\r\n   return this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) : returnSteps();\r\n  };\r\n  ReadableStreamAsyncIteratorImpl.prototype._nextSteps = function () {\r\n   var _this = this;\r\n   if (this._isFinished) {\r\n    return Promise.resolve({\r\n     value: undefined,\r\n     done: true\r\n    });\r\n   }\r\n   var reader = this._reader;\r\n   if (reader._ownerReadableStream === undefined) {\r\n    return promiseRejectedWith(readerLockException('iterate'));\r\n   }\r\n   var resolvePromise;\r\n   var rejectPromise;\r\n   var promise = newPromise(function (resolve, reject) {\r\n    resolvePromise = resolve;\r\n    rejectPromise = reject;\r\n   });\r\n   var readRequest = {\r\n    _chunkSteps: function (chunk) {\r\n     _this._ongoingPromise = undefined;\r\n     queueMicrotask(function () {\r\n      return resolvePromise({\r\n       value: chunk,\r\n       done: false\r\n      });\r\n     });\r\n    },\r\n    _closeSteps: function () {\r\n     _this._ongoingPromise = undefined;\r\n     _this._isFinished = true;\r\n     ReadableStreamReaderGenericRelease(reader);\r\n     resolvePromise({\r\n      value: undefined,\r\n      done: true\r\n     });\r\n    },\r\n    _errorSteps: function (reason) {\r\n     _this._ongoingPromise = undefined;\r\n     _this._isFinished = true;\r\n     ReadableStreamReaderGenericRelease(reader);\r\n     rejectPromise(reason);\r\n    }\r\n   };\r\n   ReadableStreamDefaultReaderRead(reader, readRequest);\r\n   return promise;\r\n  };\r\n  ReadableStreamAsyncIteratorImpl.prototype._returnSteps = function (value) {\r\n   if (this._isFinished) {\r\n    return Promise.resolve({\r\n     value: value,\r\n     done: true\r\n    });\r\n   }\r\n   this._isFinished = true;\r\n   var reader = this._reader;\r\n   if (reader._ownerReadableStream === undefined) {\r\n    return promiseRejectedWith(readerLockException('finish iterating'));\r\n   }\r\n   if (!this._preventCancel) {\r\n    var result = ReadableStreamReaderGenericCancel(reader, value);\r\n    ReadableStreamReaderGenericRelease(reader);\r\n    return transformPromiseWith(result, function () {\r\n     return {\r\n      value: value,\r\n      done: true\r\n     };\r\n    });\r\n   }\r\n   ReadableStreamReaderGenericRelease(reader);\r\n   return promiseResolvedWith({\r\n    value: value,\r\n    done: true\r\n   });\r\n  };\r\n  return ReadableStreamAsyncIteratorImpl;\r\n }();\r\n var ReadableStreamAsyncIteratorPrototype = {\r\n  next: function () {\r\n   if (!IsReadableStreamAsyncIterator(this)) {\r\n    return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\r\n   }\r\n   return this._asyncIteratorImpl.next();\r\n  },\r\n  return: function (value) {\r\n   if (!IsReadableStreamAsyncIterator(this)) {\r\n    return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\r\n   }\r\n   return this._asyncIteratorImpl.return(value);\r\n  }\r\n };\r\n if (AsyncIteratorPrototype !== undefined) {\r\n  Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\r\n }\r\n function AcquireReadableStreamAsyncIterator(stream, preventCancel) {\r\n  var reader = AcquireReadableStreamDefaultReader(stream);\r\n  var impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\r\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype);\r\n  iterator._asyncIteratorImpl = impl;\r\n  return iterator;\r\n }\r\n function IsReadableStreamAsyncIterator(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function streamAsyncIteratorBrandCheckException(name) {\r\n  return new TypeError(\"ReadableStreamAsyncIterator.\" + name + \" can only be used on a ReadableSteamAsyncIterator\");\r\n }\r\n var NumberIsNaN = Number.isNaN || function (x) {\r\n  return x !== x;\r\n };\r\n function IsFiniteNonNegativeNumber(v) {\r\n  if (!IsNonNegativeNumber(v)) {\r\n   return false;\r\n  }\r\n  if (v === Infinity) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function IsNonNegativeNumber(v) {\r\n  if (typeof v !== 'number') {\r\n   return false;\r\n  }\r\n  if (NumberIsNaN(v)) {\r\n   return false;\r\n  }\r\n  if (v < 0) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function DequeueValue(container) {\r\n  var pair = container._queue.shift();\r\n  container._queueTotalSize -= pair.size;\r\n  if (container._queueTotalSize < 0) {\r\n   container._queueTotalSize = 0;\r\n  }\r\n  return pair.value;\r\n }\r\n function EnqueueValueWithSize(container, value, size) {\r\n  size = Number(size);\r\n  if (!IsFiniteNonNegativeNumber(size)) {\r\n   throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\r\n  }\r\n  container._queue.push({\r\n   value: value,\r\n   size: size\r\n  });\r\n  container._queueTotalSize += size;\r\n }\r\n function PeekQueueValue(container) {\r\n  var pair = container._queue.peek();\r\n  return pair.value;\r\n }\r\n function ResetQueue(container) {\r\n  container._queue = new SimpleQueue();\r\n  container._queueTotalSize = 0;\r\n }\r\n function CreateArrayFromList(elements) {\r\n  return elements.slice();\r\n }\r\n function CopyDataBlockBytes(dest, destOffset, src, srcOffset, n) {\r\n  new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\r\n }\r\n function TransferArrayBuffer(O) {\r\n  return O;\r\n }\r\n function IsDetachedBuffer(O) {\r\n  return false;\r\n }\r\n var ReadableStreamBYOBRequest = function () {\r\n  function ReadableStreamBYOBRequest() {\r\n   throw new TypeError('Illegal constructor');\r\n  }\r\n  Object.defineProperty(ReadableStreamBYOBRequest.prototype, \"view\", {\r\n   get: function () {\r\n    if (!IsReadableStreamBYOBRequest(this)) {\r\n     throw byobRequestBrandCheckException('view');\r\n    }\r\n    return this._view;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  ReadableStreamBYOBRequest.prototype.respond = function (bytesWritten) {\r\n   if (!IsReadableStreamBYOBRequest(this)) {\r\n    throw byobRequestBrandCheckException('respond');\r\n   }\r\n   assertRequiredArgument(bytesWritten, 1, 'respond');\r\n   bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\r\n   if (this._associatedReadableByteStreamController === undefined) {\r\n    throw new TypeError('This BYOB request has been invalidated');\r\n   }\r\n   if (IsDetachedBuffer(this._view.buffer));\r\n   ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\r\n  };\r\n  ReadableStreamBYOBRequest.prototype.respondWithNewView = function (view) {\r\n   if (!IsReadableStreamBYOBRequest(this)) {\r\n    throw byobRequestBrandCheckException('respondWithNewView');\r\n   }\r\n   assertRequiredArgument(view, 1, 'respondWithNewView');\r\n   if (!ArrayBuffer.isView(view)) {\r\n    throw new TypeError('You can only respond with array buffer views');\r\n   }\r\n   if (view.byteLength === 0) {\r\n    throw new TypeError('chunk must have non-zero byteLength');\r\n   }\r\n   if (view.buffer.byteLength === 0) {\r\n    throw new TypeError(\"chunk's buffer must have non-zero byteLength\");\r\n   }\r\n   if (this._associatedReadableByteStreamController === undefined) {\r\n    throw new TypeError('This BYOB request has been invalidated');\r\n   }\r\n   ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\r\n  };\r\n  return ReadableStreamBYOBRequest;\r\n }();\r\n Object.defineProperties(ReadableStreamBYOBRequest.prototype, {\r\n  respond: { enumerable: true },\r\n  respondWithNewView: { enumerable: true },\r\n  view: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ReadableStreamBYOBRequest.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ReadableStreamBYOBRequest',\r\n   configurable: true\r\n  });\r\n }\r\n var ReadableByteStreamController = function () {\r\n  function ReadableByteStreamController() {\r\n   throw new TypeError('Illegal constructor');\r\n  }\r\n  Object.defineProperty(ReadableByteStreamController.prototype, \"byobRequest\", {\r\n   get: function () {\r\n    if (!IsReadableByteStreamController(this)) {\r\n     throw byteStreamControllerBrandCheckException('byobRequest');\r\n    }\r\n    if (this._byobRequest === null && this._pendingPullIntos.length > 0) {\r\n     var firstDescriptor = this._pendingPullIntos.peek();\r\n     var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);\r\n     var byobRequest = Object.create(ReadableStreamBYOBRequest.prototype);\r\n     SetUpReadableStreamBYOBRequest(byobRequest, this, view);\r\n     this._byobRequest = byobRequest;\r\n    }\r\n    return this._byobRequest;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  Object.defineProperty(ReadableByteStreamController.prototype, \"desiredSize\", {\r\n   get: function () {\r\n    if (!IsReadableByteStreamController(this)) {\r\n     throw byteStreamControllerBrandCheckException('desiredSize');\r\n    }\r\n    return ReadableByteStreamControllerGetDesiredSize(this);\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  ReadableByteStreamController.prototype.close = function () {\r\n   if (!IsReadableByteStreamController(this)) {\r\n    throw byteStreamControllerBrandCheckException('close');\r\n   }\r\n   if (this._closeRequested) {\r\n    throw new TypeError('The stream has already been closed; do not close it again!');\r\n   }\r\n   var state = this._controlledReadableByteStream._state;\r\n   if (state !== 'readable') {\r\n    throw new TypeError(\"The stream (in \" + state + \" state) is not in the readable state and cannot be closed\");\r\n   }\r\n   ReadableByteStreamControllerClose(this);\r\n  };\r\n  ReadableByteStreamController.prototype.enqueue = function (chunk) {\r\n   if (!IsReadableByteStreamController(this)) {\r\n    throw byteStreamControllerBrandCheckException('enqueue');\r\n   }\r\n   assertRequiredArgument(chunk, 1, 'enqueue');\r\n   if (!ArrayBuffer.isView(chunk)) {\r\n    throw new TypeError('chunk must be an array buffer view');\r\n   }\r\n   if (chunk.byteLength === 0) {\r\n    throw new TypeError('chunk must have non-zero byteLength');\r\n   }\r\n   if (chunk.buffer.byteLength === 0) {\r\n    throw new TypeError(\"chunk's buffer must have non-zero byteLength\");\r\n   }\r\n   if (this._closeRequested) {\r\n    throw new TypeError('stream is closed or draining');\r\n   }\r\n   var state = this._controlledReadableByteStream._state;\r\n   if (state !== 'readable') {\r\n    throw new TypeError(\"The stream (in \" + state + \" state) is not in the readable state and cannot be enqueued to\");\r\n   }\r\n   ReadableByteStreamControllerEnqueue(this, chunk);\r\n  };\r\n  ReadableByteStreamController.prototype.error = function (e) {\r\n   if (e === void 0) {\r\n    e = undefined;\r\n   }\r\n   if (!IsReadableByteStreamController(this)) {\r\n    throw byteStreamControllerBrandCheckException('error');\r\n   }\r\n   ReadableByteStreamControllerError(this, e);\r\n  };\r\n  ReadableByteStreamController.prototype[CancelSteps] = function (reason) {\r\n   if (this._pendingPullIntos.length > 0) {\r\n    var firstDescriptor = this._pendingPullIntos.peek();\r\n    firstDescriptor.bytesFilled = 0;\r\n   }\r\n   ResetQueue(this);\r\n   var result = this._cancelAlgorithm(reason);\r\n   ReadableByteStreamControllerClearAlgorithms(this);\r\n   return result;\r\n  };\r\n  ReadableByteStreamController.prototype[PullSteps] = function (readRequest) {\r\n   var stream = this._controlledReadableByteStream;\r\n   if (this._queueTotalSize > 0) {\r\n    var entry = this._queue.shift();\r\n    this._queueTotalSize -= entry.byteLength;\r\n    ReadableByteStreamControllerHandleQueueDrain(this);\r\n    var view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\r\n    readRequest._chunkSteps(view);\r\n    return;\r\n   }\r\n   var autoAllocateChunkSize = this._autoAllocateChunkSize;\r\n   if (autoAllocateChunkSize !== undefined) {\r\n    var buffer = void 0;\r\n    try {\r\n     buffer = new ArrayBuffer(autoAllocateChunkSize);\r\n    } catch (bufferE) {\r\n     readRequest._errorSteps(bufferE);\r\n     return;\r\n    }\r\n    var pullIntoDescriptor = {\r\n     buffer: buffer,\r\n     byteOffset: 0,\r\n     byteLength: autoAllocateChunkSize,\r\n     bytesFilled: 0,\r\n     elementSize: 1,\r\n     viewConstructor: Uint8Array,\r\n     readerType: 'default'\r\n    };\r\n    this._pendingPullIntos.push(pullIntoDescriptor);\r\n   }\r\n   ReadableStreamAddReadRequest(stream, readRequest);\r\n   ReadableByteStreamControllerCallPullIfNeeded(this);\r\n  };\r\n  return ReadableByteStreamController;\r\n }();\r\n Object.defineProperties(ReadableByteStreamController.prototype, {\r\n  close: { enumerable: true },\r\n  enqueue: { enumerable: true },\r\n  error: { enumerable: true },\r\n  byobRequest: { enumerable: true },\r\n  desiredSize: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ReadableByteStreamController.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ReadableByteStreamController',\r\n   configurable: true\r\n  });\r\n }\r\n function IsReadableByteStreamController(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function IsReadableStreamBYOBRequest(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function ReadableByteStreamControllerCallPullIfNeeded(controller) {\r\n  var shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\r\n  if (!shouldPull) {\r\n   return;\r\n  }\r\n  if (controller._pulling) {\r\n   controller._pullAgain = true;\r\n   return;\r\n  }\r\n  controller._pulling = true;\r\n  var pullPromise = controller._pullAlgorithm();\r\n  uponPromise(pullPromise, function () {\r\n   controller._pulling = false;\r\n   if (controller._pullAgain) {\r\n    controller._pullAgain = false;\r\n    ReadableByteStreamControllerCallPullIfNeeded(controller);\r\n   }\r\n  }, function (e) {\r\n   ReadableByteStreamControllerError(controller, e);\r\n  });\r\n }\r\n function ReadableByteStreamControllerClearPendingPullIntos(controller) {\r\n  ReadableByteStreamControllerInvalidateBYOBRequest(controller);\r\n  controller._pendingPullIntos = new SimpleQueue();\r\n }\r\n function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {\r\n  var done = false;\r\n  if (stream._state === 'closed') {\r\n   done = true;\r\n  }\r\n  var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\r\n  if (pullIntoDescriptor.readerType === 'default') {\r\n   ReadableStreamFulfillReadRequest(stream, filledView, done);\r\n  } else {\r\n   ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\r\n  }\r\n }\r\n function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {\r\n  var bytesFilled = pullIntoDescriptor.bytesFilled;\r\n  var elementSize = pullIntoDescriptor.elementSize;\r\n  return new pullIntoDescriptor.viewConstructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);\r\n }\r\n function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {\r\n  controller._queue.push({\r\n   buffer: buffer,\r\n   byteOffset: byteOffset,\r\n   byteLength: byteLength\r\n  });\r\n  controller._queueTotalSize += byteLength;\r\n }\r\n function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {\r\n  var elementSize = pullIntoDescriptor.elementSize;\r\n  var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\r\n  var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\r\n  var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\r\n  var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\r\n  var totalBytesToCopyRemaining = maxBytesToCopy;\r\n  var ready = false;\r\n  if (maxAlignedBytes > currentAlignedBytes) {\r\n   totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\r\n   ready = true;\r\n  }\r\n  var queue = controller._queue;\r\n  while (totalBytesToCopyRemaining > 0) {\r\n   var headOfQueue = queue.peek();\r\n   var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\r\n   var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\r\n   CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\r\n   if (headOfQueue.byteLength === bytesToCopy) {\r\n    queue.shift();\r\n   } else {\r\n    headOfQueue.byteOffset += bytesToCopy;\r\n    headOfQueue.byteLength -= bytesToCopy;\r\n   }\r\n   controller._queueTotalSize -= bytesToCopy;\r\n   ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\r\n   totalBytesToCopyRemaining -= bytesToCopy;\r\n  }\r\n  return ready;\r\n }\r\n function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {\r\n  ReadableByteStreamControllerInvalidateBYOBRequest(controller);\r\n  pullIntoDescriptor.bytesFilled += size;\r\n }\r\n function ReadableByteStreamControllerHandleQueueDrain(controller) {\r\n  if (controller._queueTotalSize === 0 && controller._closeRequested) {\r\n   ReadableByteStreamControllerClearAlgorithms(controller);\r\n   ReadableStreamClose(controller._controlledReadableByteStream);\r\n  } else {\r\n   ReadableByteStreamControllerCallPullIfNeeded(controller);\r\n  }\r\n }\r\n function ReadableByteStreamControllerInvalidateBYOBRequest(controller) {\r\n  if (controller._byobRequest === null) {\r\n   return;\r\n  }\r\n  controller._byobRequest._associatedReadableByteStreamController = undefined;\r\n  controller._byobRequest._view = null;\r\n  controller._byobRequest = null;\r\n }\r\n function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {\r\n  while (controller._pendingPullIntos.length > 0) {\r\n   if (controller._queueTotalSize === 0) {\r\n    return;\r\n   }\r\n   var pullIntoDescriptor = controller._pendingPullIntos.peek();\r\n   if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\r\n    ReadableByteStreamControllerShiftPendingPullInto(controller);\r\n    ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\r\n   }\r\n  }\r\n }\r\n function ReadableByteStreamControllerPullInto(controller, view, readIntoRequest) {\r\n  var stream = controller._controlledReadableByteStream;\r\n  var elementSize = 1;\r\n  if (view.constructor !== DataView) {\r\n   elementSize = view.constructor.BYTES_PER_ELEMENT;\r\n  }\r\n  var ctor = view.constructor;\r\n  var buffer = TransferArrayBuffer(view.buffer);\r\n  var pullIntoDescriptor = {\r\n   buffer: buffer,\r\n   byteOffset: view.byteOffset,\r\n   byteLength: view.byteLength,\r\n   bytesFilled: 0,\r\n   elementSize: elementSize,\r\n   viewConstructor: ctor,\r\n   readerType: 'byob'\r\n  };\r\n  if (controller._pendingPullIntos.length > 0) {\r\n   controller._pendingPullIntos.push(pullIntoDescriptor);\r\n   ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\r\n   return;\r\n  }\r\n  if (stream._state === 'closed') {\r\n   var emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\r\n   readIntoRequest._closeSteps(emptyView);\r\n   return;\r\n  }\r\n  if (controller._queueTotalSize > 0) {\r\n   if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\r\n    var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\r\n    ReadableByteStreamControllerHandleQueueDrain(controller);\r\n    readIntoRequest._chunkSteps(filledView);\r\n    return;\r\n   }\r\n   if (controller._closeRequested) {\r\n    var e = new TypeError('Insufficient bytes to fill elements in the given buffer');\r\n    ReadableByteStreamControllerError(controller, e);\r\n    readIntoRequest._errorSteps(e);\r\n    return;\r\n   }\r\n  }\r\n  controller._pendingPullIntos.push(pullIntoDescriptor);\r\n  ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\r\n  ReadableByteStreamControllerCallPullIfNeeded(controller);\r\n }\r\n function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {\r\n  firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\r\n  var stream = controller._controlledReadableByteStream;\r\n  if (ReadableStreamHasBYOBReader(stream)) {\r\n   while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\r\n    var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\r\n    ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\r\n   }\r\n  }\r\n }\r\n function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {\r\n  if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) {\r\n   throw new RangeError('bytesWritten out of range');\r\n  }\r\n  ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\r\n  if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\r\n   return;\r\n  }\r\n  ReadableByteStreamControllerShiftPendingPullInto(controller);\r\n  var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\r\n  if (remainderSize > 0) {\r\n   var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\r\n   var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end);\r\n   ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\r\n  }\r\n  pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);\r\n  pullIntoDescriptor.bytesFilled -= remainderSize;\r\n  ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\r\n  ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\r\n }\r\n function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {\r\n  var firstDescriptor = controller._pendingPullIntos.peek();\r\n  var state = controller._controlledReadableByteStream._state;\r\n  if (state === 'closed') {\r\n   if (bytesWritten !== 0) {\r\n    throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\r\n   }\r\n   ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\r\n  } else {\r\n   ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\r\n  }\r\n  ReadableByteStreamControllerCallPullIfNeeded(controller);\r\n }\r\n function ReadableByteStreamControllerShiftPendingPullInto(controller) {\r\n  var descriptor = controller._pendingPullIntos.shift();\r\n  ReadableByteStreamControllerInvalidateBYOBRequest(controller);\r\n  return descriptor;\r\n }\r\n function ReadableByteStreamControllerShouldCallPull(controller) {\r\n  var stream = controller._controlledReadableByteStream;\r\n  if (stream._state !== 'readable') {\r\n   return false;\r\n  }\r\n  if (controller._closeRequested) {\r\n   return false;\r\n  }\r\n  if (!controller._started) {\r\n   return false;\r\n  }\r\n  if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\r\n   return true;\r\n  }\r\n  if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\r\n   return true;\r\n  }\r\n  var desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\r\n  if (desiredSize > 0) {\r\n   return true;\r\n  }\r\n  return false;\r\n }\r\n function ReadableByteStreamControllerClearAlgorithms(controller) {\r\n  controller._pullAlgorithm = undefined;\r\n  controller._cancelAlgorithm = undefined;\r\n }\r\n function ReadableByteStreamControllerClose(controller) {\r\n  var stream = controller._controlledReadableByteStream;\r\n  if (controller._closeRequested || stream._state !== 'readable') {\r\n   return;\r\n  }\r\n  if (controller._queueTotalSize > 0) {\r\n   controller._closeRequested = true;\r\n   return;\r\n  }\r\n  if (controller._pendingPullIntos.length > 0) {\r\n   var firstPendingPullInto = controller._pendingPullIntos.peek();\r\n   if (firstPendingPullInto.bytesFilled > 0) {\r\n    var e = new TypeError('Insufficient bytes to fill elements in the given buffer');\r\n    ReadableByteStreamControllerError(controller, e);\r\n    throw e;\r\n   }\r\n  }\r\n  ReadableByteStreamControllerClearAlgorithms(controller);\r\n  ReadableStreamClose(stream);\r\n }\r\n function ReadableByteStreamControllerEnqueue(controller, chunk) {\r\n  var stream = controller._controlledReadableByteStream;\r\n  if (controller._closeRequested || stream._state !== 'readable') {\r\n   return;\r\n  }\r\n  var buffer = chunk.buffer;\r\n  var byteOffset = chunk.byteOffset;\r\n  var byteLength = chunk.byteLength;\r\n  var transferredBuffer = TransferArrayBuffer(buffer);\r\n  if (ReadableStreamHasDefaultReader(stream)) {\r\n   if (ReadableStreamGetNumReadRequests(stream) === 0) {\r\n    ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\r\n   } else {\r\n    var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\r\n    ReadableStreamFulfillReadRequest(stream, transferredView, false);\r\n   }\r\n  } else if (ReadableStreamHasBYOBReader(stream)) {\r\n   ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\r\n   ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\r\n  } else {\r\n   ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\r\n  }\r\n  ReadableByteStreamControllerCallPullIfNeeded(controller);\r\n }\r\n function ReadableByteStreamControllerError(controller, e) {\r\n  var stream = controller._controlledReadableByteStream;\r\n  if (stream._state !== 'readable') {\r\n   return;\r\n  }\r\n  ReadableByteStreamControllerClearPendingPullIntos(controller);\r\n  ResetQueue(controller);\r\n  ReadableByteStreamControllerClearAlgorithms(controller);\r\n  ReadableStreamError(stream, e);\r\n }\r\n function ReadableByteStreamControllerGetDesiredSize(controller) {\r\n  var state = controller._controlledReadableByteStream._state;\r\n  if (state === 'errored') {\r\n   return null;\r\n  }\r\n  if (state === 'closed') {\r\n   return 0;\r\n  }\r\n  return controller._strategyHWM - controller._queueTotalSize;\r\n }\r\n function ReadableByteStreamControllerRespond(controller, bytesWritten) {\r\n  bytesWritten = Number(bytesWritten);\r\n  if (!IsFiniteNonNegativeNumber(bytesWritten)) {\r\n   throw new RangeError('bytesWritten must be a finite');\r\n  }\r\n  ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\r\n }\r\n function ReadableByteStreamControllerRespondWithNewView(controller, view) {\r\n  var firstDescriptor = controller._pendingPullIntos.peek();\r\n  if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\r\n   throw new RangeError('The region specified by view does not match byobRequest');\r\n  }\r\n  if (firstDescriptor.byteLength !== view.byteLength) {\r\n   throw new RangeError('The buffer of view has different capacity than byobRequest');\r\n  }\r\n  firstDescriptor.buffer = view.buffer;\r\n  ReadableByteStreamControllerRespondInternal(controller, view.byteLength);\r\n }\r\n function SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) {\r\n  controller._controlledReadableByteStream = stream;\r\n  controller._pullAgain = false;\r\n  controller._pulling = false;\r\n  controller._byobRequest = null;\r\n  controller._queue = controller._queueTotalSize = undefined;\r\n  ResetQueue(controller);\r\n  controller._closeRequested = false;\r\n  controller._started = false;\r\n  controller._strategyHWM = highWaterMark;\r\n  controller._pullAlgorithm = pullAlgorithm;\r\n  controller._cancelAlgorithm = cancelAlgorithm;\r\n  controller._autoAllocateChunkSize = autoAllocateChunkSize;\r\n  controller._pendingPullIntos = new SimpleQueue();\r\n  stream._readableStreamController = controller;\r\n  var startResult = startAlgorithm();\r\n  uponPromise(promiseResolvedWith(startResult), function () {\r\n   controller._started = true;\r\n   ReadableByteStreamControllerCallPullIfNeeded(controller);\r\n  }, function (r) {\r\n   ReadableByteStreamControllerError(controller, r);\r\n  });\r\n }\r\n function SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) {\r\n  var controller = Object.create(ReadableByteStreamController.prototype);\r\n  var startAlgorithm = function () {\r\n   return undefined;\r\n  };\r\n  var pullAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  var cancelAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  if (underlyingByteSource.start !== undefined) {\r\n   startAlgorithm = function () {\r\n    return underlyingByteSource.start(controller);\r\n   };\r\n  }\r\n  if (underlyingByteSource.pull !== undefined) {\r\n   pullAlgorithm = function () {\r\n    return underlyingByteSource.pull(controller);\r\n   };\r\n  }\r\n  if (underlyingByteSource.cancel !== undefined) {\r\n   cancelAlgorithm = function (reason) {\r\n    return underlyingByteSource.cancel(reason);\r\n   };\r\n  }\r\n  var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\r\n  SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize);\r\n }\r\n function SetUpReadableStreamBYOBRequest(request, controller, view) {\r\n  request._associatedReadableByteStreamController = controller;\r\n  request._view = view;\r\n }\r\n function byobRequestBrandCheckException(name) {\r\n  return new TypeError(\"ReadableStreamBYOBRequest.prototype.\" + name + \" can only be used on a ReadableStreamBYOBRequest\");\r\n }\r\n function byteStreamControllerBrandCheckException(name) {\r\n  return new TypeError(\"ReadableByteStreamController.prototype.\" + name + \" can only be used on a ReadableByteStreamController\");\r\n }\r\n function AcquireReadableStreamBYOBReader(stream) {\r\n  return new ReadableStreamBYOBReader(stream);\r\n }\r\n function ReadableStreamAddReadIntoRequest(stream, readIntoRequest) {\r\n  stream._reader._readIntoRequests.push(readIntoRequest);\r\n }\r\n function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {\r\n  var reader = stream._reader;\r\n  var readIntoRequest = reader._readIntoRequests.shift();\r\n  if (done) {\r\n   readIntoRequest._closeSteps(chunk);\r\n  } else {\r\n   readIntoRequest._chunkSteps(chunk);\r\n  }\r\n }\r\n function ReadableStreamGetNumReadIntoRequests(stream) {\r\n  return stream._reader._readIntoRequests.length;\r\n }\r\n function ReadableStreamHasBYOBReader(stream) {\r\n  var reader = stream._reader;\r\n  if (reader === undefined) {\r\n   return false;\r\n  }\r\n  if (!IsReadableStreamBYOBReader(reader)) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n var ReadableStreamBYOBReader = function () {\r\n  function ReadableStreamBYOBReader(stream) {\r\n   assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\r\n   assertReadableStream(stream, 'First parameter');\r\n   if (IsReadableStreamLocked(stream)) {\r\n    throw new TypeError('This stream has already been locked for exclusive reading by another reader');\r\n   }\r\n   if (!IsReadableByteStreamController(stream._readableStreamController)) {\r\n    throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source');\r\n   }\r\n   ReadableStreamReaderGenericInitialize(this, stream);\r\n   this._readIntoRequests = new SimpleQueue();\r\n  }\r\n  Object.defineProperty(ReadableStreamBYOBReader.prototype, \"closed\", {\r\n   get: function () {\r\n    if (!IsReadableStreamBYOBReader(this)) {\r\n     return promiseRejectedWith(byobReaderBrandCheckException('closed'));\r\n    }\r\n    return this._closedPromise;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  ReadableStreamBYOBReader.prototype.cancel = function (reason) {\r\n   if (reason === void 0) {\r\n    reason = undefined;\r\n   }\r\n   if (!IsReadableStreamBYOBReader(this)) {\r\n    return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\r\n   }\r\n   if (this._ownerReadableStream === undefined) {\r\n    return promiseRejectedWith(readerLockException('cancel'));\r\n   }\r\n   return ReadableStreamReaderGenericCancel(this, reason);\r\n  };\r\n  ReadableStreamBYOBReader.prototype.read = function (view) {\r\n   if (!IsReadableStreamBYOBReader(this)) {\r\n    return promiseRejectedWith(byobReaderBrandCheckException('read'));\r\n   }\r\n   if (!ArrayBuffer.isView(view)) {\r\n    return promiseRejectedWith(new TypeError('view must be an array buffer view'));\r\n   }\r\n   if (view.byteLength === 0) {\r\n    return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\r\n   }\r\n   if (view.buffer.byteLength === 0) {\r\n    return promiseRejectedWith(new TypeError(\"view's buffer must have non-zero byteLength\"));\r\n   }\r\n   if (this._ownerReadableStream === undefined) {\r\n    return promiseRejectedWith(readerLockException('read from'));\r\n   }\r\n   var resolvePromise;\r\n   var rejectPromise;\r\n   var promise = newPromise(function (resolve, reject) {\r\n    resolvePromise = resolve;\r\n    rejectPromise = reject;\r\n   });\r\n   var readIntoRequest = {\r\n    _chunkSteps: function (chunk) {\r\n     return resolvePromise({\r\n      value: chunk,\r\n      done: false\r\n     });\r\n    },\r\n    _closeSteps: function (chunk) {\r\n     return resolvePromise({\r\n      value: chunk,\r\n      done: true\r\n     });\r\n    },\r\n    _errorSteps: function (e) {\r\n     return rejectPromise(e);\r\n    }\r\n   };\r\n   ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\r\n   return promise;\r\n  };\r\n  ReadableStreamBYOBReader.prototype.releaseLock = function () {\r\n   if (!IsReadableStreamBYOBReader(this)) {\r\n    throw byobReaderBrandCheckException('releaseLock');\r\n   }\r\n   if (this._ownerReadableStream === undefined) {\r\n    return;\r\n   }\r\n   if (this._readIntoRequests.length > 0) {\r\n    throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\r\n   }\r\n   ReadableStreamReaderGenericRelease(this);\r\n  };\r\n  return ReadableStreamBYOBReader;\r\n }();\r\n Object.defineProperties(ReadableStreamBYOBReader.prototype, {\r\n  cancel: { enumerable: true },\r\n  read: { enumerable: true },\r\n  releaseLock: { enumerable: true },\r\n  closed: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ReadableStreamBYOBReader.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ReadableStreamBYOBReader',\r\n   configurable: true\r\n  });\r\n }\r\n function IsReadableStreamBYOBReader(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function ReadableStreamBYOBReaderRead(reader, view, readIntoRequest) {\r\n  var stream = reader._ownerReadableStream;\r\n  stream._disturbed = true;\r\n  if (stream._state === 'errored') {\r\n   readIntoRequest._errorSteps(stream._storedError);\r\n  } else {\r\n   ReadableByteStreamControllerPullInto(stream._readableStreamController, view, readIntoRequest);\r\n  }\r\n }\r\n function byobReaderBrandCheckException(name) {\r\n  return new TypeError(\"ReadableStreamBYOBReader.prototype.\" + name + \" can only be used on a ReadableStreamBYOBReader\");\r\n }\r\n function ExtractHighWaterMark(strategy, defaultHWM) {\r\n  var highWaterMark = strategy.highWaterMark;\r\n  if (highWaterMark === undefined) {\r\n   return defaultHWM;\r\n  }\r\n  if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\r\n   throw new RangeError('Invalid highWaterMark');\r\n  }\r\n  return highWaterMark;\r\n }\r\n function ExtractSizeAlgorithm(strategy) {\r\n  var size = strategy.size;\r\n  if (!size) {\r\n   return function () {\r\n    return 1;\r\n   };\r\n  }\r\n  return size;\r\n }\r\n function convertQueuingStrategy(init, context) {\r\n  assertDictionary(init, context);\r\n  var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;\r\n  var size = init === null || init === void 0 ? void 0 : init.size;\r\n  return {\r\n   highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\r\n   size: size === undefined ? undefined : convertQueuingStrategySize(size, context + \" has member 'size' that\")\r\n  };\r\n }\r\n function convertQueuingStrategySize(fn, context) {\r\n  assertFunction(fn, context);\r\n  return function (chunk) {\r\n   return convertUnrestrictedDouble(fn(chunk));\r\n  };\r\n }\r\n function convertUnderlyingSink(original, context) {\r\n  assertDictionary(original, context);\r\n  var abort = original === null || original === void 0 ? void 0 : original.abort;\r\n  var close = original === null || original === void 0 ? void 0 : original.close;\r\n  var start = original === null || original === void 0 ? void 0 : original.start;\r\n  var type = original === null || original === void 0 ? void 0 : original.type;\r\n  var write = original === null || original === void 0 ? void 0 : original.write;\r\n  return {\r\n   abort: abort === undefined ? undefined : convertUnderlyingSinkAbortCallback(abort, original, context + \" has member 'abort' that\"),\r\n   close: close === undefined ? undefined : convertUnderlyingSinkCloseCallback(close, original, context + \" has member 'close' that\"),\r\n   start: start === undefined ? undefined : convertUnderlyingSinkStartCallback(start, original, context + \" has member 'start' that\"),\r\n   write: write === undefined ? undefined : convertUnderlyingSinkWriteCallback(write, original, context + \" has member 'write' that\"),\r\n   type: type\r\n  };\r\n }\r\n function convertUnderlyingSinkAbortCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (reason) {\r\n   return promiseCall(fn, original, [reason]);\r\n  };\r\n }\r\n function convertUnderlyingSinkCloseCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function () {\r\n   return promiseCall(fn, original, []);\r\n  };\r\n }\r\n function convertUnderlyingSinkStartCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (controller) {\r\n   return reflectCall(fn, original, [controller]);\r\n  };\r\n }\r\n function convertUnderlyingSinkWriteCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (chunk, controller) {\r\n   return promiseCall(fn, original, [\r\n    chunk,\r\n    controller\r\n   ]);\r\n  };\r\n }\r\n function assertWritableStream(x, context) {\r\n  if (!IsWritableStream(x)) {\r\n   throw new TypeError(context + \" is not a WritableStream.\");\r\n  }\r\n }\r\n var WritableStream = function () {\r\n  function WritableStream(rawUnderlyingSink, rawStrategy) {\r\n   if (rawUnderlyingSink === void 0) {\r\n    rawUnderlyingSink = {};\r\n   }\r\n   if (rawStrategy === void 0) {\r\n    rawStrategy = {};\r\n   }\r\n   if (rawUnderlyingSink === undefined) {\r\n    rawUnderlyingSink = null;\r\n   } else {\r\n    assertObject(rawUnderlyingSink, 'First parameter');\r\n   }\r\n   var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\r\n   var underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\r\n   InitializeWritableStream(this);\r\n   var type = underlyingSink.type;\r\n   if (type !== undefined) {\r\n    throw new RangeError('Invalid type is specified');\r\n   }\r\n   var sizeAlgorithm = ExtractSizeAlgorithm(strategy);\r\n   var highWaterMark = ExtractHighWaterMark(strategy, 1);\r\n   SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\r\n  }\r\n  Object.defineProperty(WritableStream.prototype, \"locked\", {\r\n   get: function () {\r\n    if (!IsWritableStream(this)) {\r\n     throw streamBrandCheckException('locked');\r\n    }\r\n    return IsWritableStreamLocked(this);\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  WritableStream.prototype.abort = function (reason) {\r\n   if (reason === void 0) {\r\n    reason = undefined;\r\n   }\r\n   if (!IsWritableStream(this)) {\r\n    return promiseRejectedWith(streamBrandCheckException('abort'));\r\n   }\r\n   if (IsWritableStreamLocked(this)) {\r\n    return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\r\n   }\r\n   return WritableStreamAbort(this, reason);\r\n  };\r\n  WritableStream.prototype.close = function () {\r\n   if (!IsWritableStream(this)) {\r\n    return promiseRejectedWith(streamBrandCheckException('close'));\r\n   }\r\n   if (IsWritableStreamLocked(this)) {\r\n    return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\r\n   }\r\n   if (WritableStreamCloseQueuedOrInFlight(this)) {\r\n    return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\r\n   }\r\n   return WritableStreamClose(this);\r\n  };\r\n  WritableStream.prototype.getWriter = function () {\r\n   if (!IsWritableStream(this)) {\r\n    throw streamBrandCheckException('getWriter');\r\n   }\r\n   return AcquireWritableStreamDefaultWriter(this);\r\n  };\r\n  return WritableStream;\r\n }();\r\n Object.defineProperties(WritableStream.prototype, {\r\n  abort: { enumerable: true },\r\n  close: { enumerable: true },\r\n  getWriter: { enumerable: true },\r\n  locked: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(WritableStream.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'WritableStream',\r\n   configurable: true\r\n  });\r\n }\r\n function AcquireWritableStreamDefaultWriter(stream) {\r\n  return new WritableStreamDefaultWriter(stream);\r\n }\r\n function CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {\r\n  if (highWaterMark === void 0) {\r\n   highWaterMark = 1;\r\n  }\r\n  if (sizeAlgorithm === void 0) {\r\n   sizeAlgorithm = function () {\r\n    return 1;\r\n   };\r\n  }\r\n  var stream = Object.create(WritableStream.prototype);\r\n  InitializeWritableStream(stream);\r\n  var controller = Object.create(WritableStreamDefaultController.prototype);\r\n  SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\r\n  return stream;\r\n }\r\n function InitializeWritableStream(stream) {\r\n  stream._state = 'writable';\r\n  stream._storedError = undefined;\r\n  stream._writer = undefined;\r\n  stream._writableStreamController = undefined;\r\n  stream._writeRequests = new SimpleQueue();\r\n  stream._inFlightWriteRequest = undefined;\r\n  stream._closeRequest = undefined;\r\n  stream._inFlightCloseRequest = undefined;\r\n  stream._pendingAbortRequest = undefined;\r\n  stream._backpressure = false;\r\n }\r\n function IsWritableStream(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function IsWritableStreamLocked(stream) {\r\n  if (stream._writer === undefined) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function WritableStreamAbort(stream, reason) {\r\n  var state = stream._state;\r\n  if (state === 'closed' || state === 'errored') {\r\n   return promiseResolvedWith(undefined);\r\n  }\r\n  if (stream._pendingAbortRequest !== undefined) {\r\n   return stream._pendingAbortRequest._promise;\r\n  }\r\n  var wasAlreadyErroring = false;\r\n  if (state === 'erroring') {\r\n   wasAlreadyErroring = true;\r\n   reason = undefined;\r\n  }\r\n  var promise = newPromise(function (resolve, reject) {\r\n   stream._pendingAbortRequest = {\r\n    _promise: undefined,\r\n    _resolve: resolve,\r\n    _reject: reject,\r\n    _reason: reason,\r\n    _wasAlreadyErroring: wasAlreadyErroring\r\n   };\r\n  });\r\n  stream._pendingAbortRequest._promise = promise;\r\n  if (!wasAlreadyErroring) {\r\n   WritableStreamStartErroring(stream, reason);\r\n  }\r\n  return promise;\r\n }\r\n function WritableStreamClose(stream) {\r\n  var state = stream._state;\r\n  if (state === 'closed' || state === 'errored') {\r\n   return promiseRejectedWith(new TypeError(\"The stream (in \" + state + \" state) is not in the writable state and cannot be closed\"));\r\n  }\r\n  var promise = newPromise(function (resolve, reject) {\r\n   var closeRequest = {\r\n    _resolve: resolve,\r\n    _reject: reject\r\n   };\r\n   stream._closeRequest = closeRequest;\r\n  });\r\n  var writer = stream._writer;\r\n  if (writer !== undefined && stream._backpressure && state === 'writable') {\r\n   defaultWriterReadyPromiseResolve(writer);\r\n  }\r\n  WritableStreamDefaultControllerClose(stream._writableStreamController);\r\n  return promise;\r\n }\r\n function WritableStreamAddWriteRequest(stream) {\r\n  var promise = newPromise(function (resolve, reject) {\r\n   var writeRequest = {\r\n    _resolve: resolve,\r\n    _reject: reject\r\n   };\r\n   stream._writeRequests.push(writeRequest);\r\n  });\r\n  return promise;\r\n }\r\n function WritableStreamDealWithRejection(stream, error) {\r\n  var state = stream._state;\r\n  if (state === 'writable') {\r\n   WritableStreamStartErroring(stream, error);\r\n   return;\r\n  }\r\n  WritableStreamFinishErroring(stream);\r\n }\r\n function WritableStreamStartErroring(stream, reason) {\r\n  var controller = stream._writableStreamController;\r\n  stream._state = 'erroring';\r\n  stream._storedError = reason;\r\n  var writer = stream._writer;\r\n  if (writer !== undefined) {\r\n   WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\r\n  }\r\n  if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\r\n   WritableStreamFinishErroring(stream);\r\n  }\r\n }\r\n function WritableStreamFinishErroring(stream) {\r\n  stream._state = 'errored';\r\n  stream._writableStreamController[ErrorSteps]();\r\n  var storedError = stream._storedError;\r\n  stream._writeRequests.forEach(function (writeRequest) {\r\n   writeRequest._reject(storedError);\r\n  });\r\n  stream._writeRequests = new SimpleQueue();\r\n  if (stream._pendingAbortRequest === undefined) {\r\n   WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\r\n   return;\r\n  }\r\n  var abortRequest = stream._pendingAbortRequest;\r\n  stream._pendingAbortRequest = undefined;\r\n  if (abortRequest._wasAlreadyErroring) {\r\n   abortRequest._reject(storedError);\r\n   WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\r\n   return;\r\n  }\r\n  var promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\r\n  uponPromise(promise, function () {\r\n   abortRequest._resolve();\r\n   WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\r\n  }, function (reason) {\r\n   abortRequest._reject(reason);\r\n   WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\r\n  });\r\n }\r\n function WritableStreamFinishInFlightWrite(stream) {\r\n  stream._inFlightWriteRequest._resolve(undefined);\r\n  stream._inFlightWriteRequest = undefined;\r\n }\r\n function WritableStreamFinishInFlightWriteWithError(stream, error) {\r\n  stream._inFlightWriteRequest._reject(error);\r\n  stream._inFlightWriteRequest = undefined;\r\n  WritableStreamDealWithRejection(stream, error);\r\n }\r\n function WritableStreamFinishInFlightClose(stream) {\r\n  stream._inFlightCloseRequest._resolve(undefined);\r\n  stream._inFlightCloseRequest = undefined;\r\n  var state = stream._state;\r\n  if (state === 'erroring') {\r\n   stream._storedError = undefined;\r\n   if (stream._pendingAbortRequest !== undefined) {\r\n    stream._pendingAbortRequest._resolve();\r\n    stream._pendingAbortRequest = undefined;\r\n   }\r\n  }\r\n  stream._state = 'closed';\r\n  var writer = stream._writer;\r\n  if (writer !== undefined) {\r\n   defaultWriterClosedPromiseResolve(writer);\r\n  }\r\n }\r\n function WritableStreamFinishInFlightCloseWithError(stream, error) {\r\n  stream._inFlightCloseRequest._reject(error);\r\n  stream._inFlightCloseRequest = undefined;\r\n  if (stream._pendingAbortRequest !== undefined) {\r\n   stream._pendingAbortRequest._reject(error);\r\n   stream._pendingAbortRequest = undefined;\r\n  }\r\n  WritableStreamDealWithRejection(stream, error);\r\n }\r\n function WritableStreamCloseQueuedOrInFlight(stream) {\r\n  if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function WritableStreamHasOperationMarkedInFlight(stream) {\r\n  if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function WritableStreamMarkCloseRequestInFlight(stream) {\r\n  stream._inFlightCloseRequest = stream._closeRequest;\r\n  stream._closeRequest = undefined;\r\n }\r\n function WritableStreamMarkFirstWriteRequestInFlight(stream) {\r\n  stream._inFlightWriteRequest = stream._writeRequests.shift();\r\n }\r\n function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {\r\n  if (stream._closeRequest !== undefined) {\r\n   stream._closeRequest._reject(stream._storedError);\r\n   stream._closeRequest = undefined;\r\n  }\r\n  var writer = stream._writer;\r\n  if (writer !== undefined) {\r\n   defaultWriterClosedPromiseReject(writer, stream._storedError);\r\n  }\r\n }\r\n function WritableStreamUpdateBackpressure(stream, backpressure) {\r\n  var writer = stream._writer;\r\n  if (writer !== undefined && backpressure !== stream._backpressure) {\r\n   if (backpressure) {\r\n    defaultWriterReadyPromiseReset(writer);\r\n   } else {\r\n    defaultWriterReadyPromiseResolve(writer);\r\n   }\r\n  }\r\n  stream._backpressure = backpressure;\r\n }\r\n var WritableStreamDefaultWriter = function () {\r\n  function WritableStreamDefaultWriter(stream) {\r\n   assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\r\n   assertWritableStream(stream, 'First parameter');\r\n   if (IsWritableStreamLocked(stream)) {\r\n    throw new TypeError('This stream has already been locked for exclusive writing by another writer');\r\n   }\r\n   this._ownerWritableStream = stream;\r\n   stream._writer = this;\r\n   var state = stream._state;\r\n   if (state === 'writable') {\r\n    if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\r\n     defaultWriterReadyPromiseInitialize(this);\r\n    } else {\r\n     defaultWriterReadyPromiseInitializeAsResolved(this);\r\n    }\r\n    defaultWriterClosedPromiseInitialize(this);\r\n   } else if (state === 'erroring') {\r\n    defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\r\n    defaultWriterClosedPromiseInitialize(this);\r\n   } else if (state === 'closed') {\r\n    defaultWriterReadyPromiseInitializeAsResolved(this);\r\n    defaultWriterClosedPromiseInitializeAsResolved(this);\r\n   } else {\r\n    var storedError = stream._storedError;\r\n    defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\r\n    defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\r\n   }\r\n  }\r\n  Object.defineProperty(WritableStreamDefaultWriter.prototype, \"closed\", {\r\n   get: function () {\r\n    if (!IsWritableStreamDefaultWriter(this)) {\r\n     return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\r\n    }\r\n    return this._closedPromise;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  Object.defineProperty(WritableStreamDefaultWriter.prototype, \"desiredSize\", {\r\n   get: function () {\r\n    if (!IsWritableStreamDefaultWriter(this)) {\r\n     throw defaultWriterBrandCheckException('desiredSize');\r\n    }\r\n    if (this._ownerWritableStream === undefined) {\r\n     throw defaultWriterLockException('desiredSize');\r\n    }\r\n    return WritableStreamDefaultWriterGetDesiredSize(this);\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  Object.defineProperty(WritableStreamDefaultWriter.prototype, \"ready\", {\r\n   get: function () {\r\n    if (!IsWritableStreamDefaultWriter(this)) {\r\n     return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\r\n    }\r\n    return this._readyPromise;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  WritableStreamDefaultWriter.prototype.abort = function (reason) {\r\n   if (reason === void 0) {\r\n    reason = undefined;\r\n   }\r\n   if (!IsWritableStreamDefaultWriter(this)) {\r\n    return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\r\n   }\r\n   if (this._ownerWritableStream === undefined) {\r\n    return promiseRejectedWith(defaultWriterLockException('abort'));\r\n   }\r\n   return WritableStreamDefaultWriterAbort(this, reason);\r\n  };\r\n  WritableStreamDefaultWriter.prototype.close = function () {\r\n   if (!IsWritableStreamDefaultWriter(this)) {\r\n    return promiseRejectedWith(defaultWriterBrandCheckException('close'));\r\n   }\r\n   var stream = this._ownerWritableStream;\r\n   if (stream === undefined) {\r\n    return promiseRejectedWith(defaultWriterLockException('close'));\r\n   }\r\n   if (WritableStreamCloseQueuedOrInFlight(stream)) {\r\n    return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\r\n   }\r\n   return WritableStreamDefaultWriterClose(this);\r\n  };\r\n  WritableStreamDefaultWriter.prototype.releaseLock = function () {\r\n   if (!IsWritableStreamDefaultWriter(this)) {\r\n    throw defaultWriterBrandCheckException('releaseLock');\r\n   }\r\n   var stream = this._ownerWritableStream;\r\n   if (stream === undefined) {\r\n    return;\r\n   }\r\n   WritableStreamDefaultWriterRelease(this);\r\n  };\r\n  WritableStreamDefaultWriter.prototype.write = function (chunk) {\r\n   if (chunk === void 0) {\r\n    chunk = undefined;\r\n   }\r\n   if (!IsWritableStreamDefaultWriter(this)) {\r\n    return promiseRejectedWith(defaultWriterBrandCheckException('write'));\r\n   }\r\n   if (this._ownerWritableStream === undefined) {\r\n    return promiseRejectedWith(defaultWriterLockException('write to'));\r\n   }\r\n   return WritableStreamDefaultWriterWrite(this, chunk);\r\n  };\r\n  return WritableStreamDefaultWriter;\r\n }();\r\n Object.defineProperties(WritableStreamDefaultWriter.prototype, {\r\n  abort: { enumerable: true },\r\n  close: { enumerable: true },\r\n  releaseLock: { enumerable: true },\r\n  write: { enumerable: true },\r\n  closed: { enumerable: true },\r\n  desiredSize: { enumerable: true },\r\n  ready: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(WritableStreamDefaultWriter.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'WritableStreamDefaultWriter',\r\n   configurable: true\r\n  });\r\n }\r\n function IsWritableStreamDefaultWriter(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function WritableStreamDefaultWriterAbort(writer, reason) {\r\n  var stream = writer._ownerWritableStream;\r\n  return WritableStreamAbort(stream, reason);\r\n }\r\n function WritableStreamDefaultWriterClose(writer) {\r\n  var stream = writer._ownerWritableStream;\r\n  return WritableStreamClose(stream);\r\n }\r\n function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {\r\n  var stream = writer._ownerWritableStream;\r\n  var state = stream._state;\r\n  if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\r\n   return promiseResolvedWith(undefined);\r\n  }\r\n  if (state === 'errored') {\r\n   return promiseRejectedWith(stream._storedError);\r\n  }\r\n  return WritableStreamDefaultWriterClose(writer);\r\n }\r\n function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {\r\n  if (writer._closedPromiseState === 'pending') {\r\n   defaultWriterClosedPromiseReject(writer, error);\r\n  } else {\r\n   defaultWriterClosedPromiseResetToRejected(writer, error);\r\n  }\r\n }\r\n function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {\r\n  if (writer._readyPromiseState === 'pending') {\r\n   defaultWriterReadyPromiseReject(writer, error);\r\n  } else {\r\n   defaultWriterReadyPromiseResetToRejected(writer, error);\r\n  }\r\n }\r\n function WritableStreamDefaultWriterGetDesiredSize(writer) {\r\n  var stream = writer._ownerWritableStream;\r\n  var state = stream._state;\r\n  if (state === 'errored' || state === 'erroring') {\r\n   return null;\r\n  }\r\n  if (state === 'closed') {\r\n   return 0;\r\n  }\r\n  return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\r\n }\r\n function WritableStreamDefaultWriterRelease(writer) {\r\n  var stream = writer._ownerWritableStream;\r\n  var releasedError = new TypeError(\"Writer was released and can no longer be used to monitor the stream's closedness\");\r\n  WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\r\n  WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\r\n  stream._writer = undefined;\r\n  writer._ownerWritableStream = undefined;\r\n }\r\n function WritableStreamDefaultWriterWrite(writer, chunk) {\r\n  var stream = writer._ownerWritableStream;\r\n  var controller = stream._writableStreamController;\r\n  var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\r\n  if (stream !== writer._ownerWritableStream) {\r\n   return promiseRejectedWith(defaultWriterLockException('write to'));\r\n  }\r\n  var state = stream._state;\r\n  if (state === 'errored') {\r\n   return promiseRejectedWith(stream._storedError);\r\n  }\r\n  if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\r\n   return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\r\n  }\r\n  if (state === 'erroring') {\r\n   return promiseRejectedWith(stream._storedError);\r\n  }\r\n  var promise = WritableStreamAddWriteRequest(stream);\r\n  WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\r\n  return promise;\r\n }\r\n var closeSentinel = {};\r\n var WritableStreamDefaultController = function () {\r\n  function WritableStreamDefaultController() {\r\n   throw new TypeError('Illegal constructor');\r\n  }\r\n  WritableStreamDefaultController.prototype.error = function (e) {\r\n   if (e === void 0) {\r\n    e = undefined;\r\n   }\r\n   if (!IsWritableStreamDefaultController(this)) {\r\n    throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController');\r\n   }\r\n   var state = this._controlledWritableStream._state;\r\n   if (state !== 'writable') {\r\n    return;\r\n   }\r\n   WritableStreamDefaultControllerError(this, e);\r\n  };\r\n  WritableStreamDefaultController.prototype[AbortSteps] = function (reason) {\r\n   var result = this._abortAlgorithm(reason);\r\n   WritableStreamDefaultControllerClearAlgorithms(this);\r\n   return result;\r\n  };\r\n  WritableStreamDefaultController.prototype[ErrorSteps] = function () {\r\n   ResetQueue(this);\r\n  };\r\n  return WritableStreamDefaultController;\r\n }();\r\n Object.defineProperties(WritableStreamDefaultController.prototype, { error: { enumerable: true } });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(WritableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'WritableStreamDefaultController',\r\n   configurable: true\r\n  });\r\n }\r\n function IsWritableStreamDefaultController(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {\r\n  controller._controlledWritableStream = stream;\r\n  stream._writableStreamController = controller;\r\n  controller._queue = undefined;\r\n  controller._queueTotalSize = undefined;\r\n  ResetQueue(controller);\r\n  controller._started = false;\r\n  controller._strategySizeAlgorithm = sizeAlgorithm;\r\n  controller._strategyHWM = highWaterMark;\r\n  controller._writeAlgorithm = writeAlgorithm;\r\n  controller._closeAlgorithm = closeAlgorithm;\r\n  controller._abortAlgorithm = abortAlgorithm;\r\n  var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\r\n  WritableStreamUpdateBackpressure(stream, backpressure);\r\n  var startResult = startAlgorithm();\r\n  var startPromise = promiseResolvedWith(startResult);\r\n  uponPromise(startPromise, function () {\r\n   controller._started = true;\r\n   WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\r\n  }, function (r) {\r\n   controller._started = true;\r\n   WritableStreamDealWithRejection(stream, r);\r\n  });\r\n }\r\n function SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) {\r\n  var controller = Object.create(WritableStreamDefaultController.prototype);\r\n  var startAlgorithm = function () {\r\n   return undefined;\r\n  };\r\n  var writeAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  var closeAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  var abortAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  if (underlyingSink.start !== undefined) {\r\n   startAlgorithm = function () {\r\n    return underlyingSink.start(controller);\r\n   };\r\n  }\r\n  if (underlyingSink.write !== undefined) {\r\n   writeAlgorithm = function (chunk) {\r\n    return underlyingSink.write(chunk, controller);\r\n   };\r\n  }\r\n  if (underlyingSink.close !== undefined) {\r\n   closeAlgorithm = function () {\r\n    return underlyingSink.close();\r\n   };\r\n  }\r\n  if (underlyingSink.abort !== undefined) {\r\n   abortAlgorithm = function (reason) {\r\n    return underlyingSink.abort(reason);\r\n   };\r\n  }\r\n  SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\r\n }\r\n function WritableStreamDefaultControllerClearAlgorithms(controller) {\r\n  controller._writeAlgorithm = undefined;\r\n  controller._closeAlgorithm = undefined;\r\n  controller._abortAlgorithm = undefined;\r\n  controller._strategySizeAlgorithm = undefined;\r\n }\r\n function WritableStreamDefaultControllerClose(controller) {\r\n  EnqueueValueWithSize(controller, closeSentinel, 0);\r\n  WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\r\n }\r\n function WritableStreamDefaultControllerGetChunkSize(controller, chunk) {\r\n  try {\r\n   return controller._strategySizeAlgorithm(chunk);\r\n  } catch (chunkSizeE) {\r\n   WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\r\n   return 1;\r\n  }\r\n }\r\n function WritableStreamDefaultControllerGetDesiredSize(controller) {\r\n  return controller._strategyHWM - controller._queueTotalSize;\r\n }\r\n function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {\r\n  try {\r\n   EnqueueValueWithSize(controller, chunk, chunkSize);\r\n  } catch (enqueueE) {\r\n   WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\r\n   return;\r\n  }\r\n  var stream = controller._controlledWritableStream;\r\n  if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\r\n   var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\r\n   WritableStreamUpdateBackpressure(stream, backpressure);\r\n  }\r\n  WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\r\n }\r\n function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {\r\n  var stream = controller._controlledWritableStream;\r\n  if (!controller._started) {\r\n   return;\r\n  }\r\n  if (stream._inFlightWriteRequest !== undefined) {\r\n   return;\r\n  }\r\n  var state = stream._state;\r\n  if (state === 'erroring') {\r\n   WritableStreamFinishErroring(stream);\r\n   return;\r\n  }\r\n  if (controller._queue.length === 0) {\r\n   return;\r\n  }\r\n  var value = PeekQueueValue(controller);\r\n  if (value === closeSentinel) {\r\n   WritableStreamDefaultControllerProcessClose(controller);\r\n  } else {\r\n   WritableStreamDefaultControllerProcessWrite(controller, value);\r\n  }\r\n }\r\n function WritableStreamDefaultControllerErrorIfNeeded(controller, error) {\r\n  if (controller._controlledWritableStream._state === 'writable') {\r\n   WritableStreamDefaultControllerError(controller, error);\r\n  }\r\n }\r\n function WritableStreamDefaultControllerProcessClose(controller) {\r\n  var stream = controller._controlledWritableStream;\r\n  WritableStreamMarkCloseRequestInFlight(stream);\r\n  DequeueValue(controller);\r\n  var sinkClosePromise = controller._closeAlgorithm();\r\n  WritableStreamDefaultControllerClearAlgorithms(controller);\r\n  uponPromise(sinkClosePromise, function () {\r\n   WritableStreamFinishInFlightClose(stream);\r\n  }, function (reason) {\r\n   WritableStreamFinishInFlightCloseWithError(stream, reason);\r\n  });\r\n }\r\n function WritableStreamDefaultControllerProcessWrite(controller, chunk) {\r\n  var stream = controller._controlledWritableStream;\r\n  WritableStreamMarkFirstWriteRequestInFlight(stream);\r\n  var sinkWritePromise = controller._writeAlgorithm(chunk);\r\n  uponPromise(sinkWritePromise, function () {\r\n   WritableStreamFinishInFlightWrite(stream);\r\n   var state = stream._state;\r\n   DequeueValue(controller);\r\n   if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\r\n    var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\r\n    WritableStreamUpdateBackpressure(stream, backpressure);\r\n   }\r\n   WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\r\n  }, function (reason) {\r\n   if (stream._state === 'writable') {\r\n    WritableStreamDefaultControllerClearAlgorithms(controller);\r\n   }\r\n   WritableStreamFinishInFlightWriteWithError(stream, reason);\r\n  });\r\n }\r\n function WritableStreamDefaultControllerGetBackpressure(controller) {\r\n  var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\r\n  return desiredSize <= 0;\r\n }\r\n function WritableStreamDefaultControllerError(controller, error) {\r\n  var stream = controller._controlledWritableStream;\r\n  WritableStreamDefaultControllerClearAlgorithms(controller);\r\n  WritableStreamStartErroring(stream, error);\r\n }\r\n function streamBrandCheckException(name) {\r\n  return new TypeError(\"WritableStream.prototype.\" + name + \" can only be used on a WritableStream\");\r\n }\r\n function defaultWriterBrandCheckException(name) {\r\n  return new TypeError(\"WritableStreamDefaultWriter.prototype.\" + name + \" can only be used on a WritableStreamDefaultWriter\");\r\n }\r\n function defaultWriterLockException(name) {\r\n  return new TypeError('Cannot ' + name + ' a stream using a released writer');\r\n }\r\n function defaultWriterClosedPromiseInitialize(writer) {\r\n  writer._closedPromise = newPromise(function (resolve, reject) {\r\n   writer._closedPromise_resolve = resolve;\r\n   writer._closedPromise_reject = reject;\r\n   writer._closedPromiseState = 'pending';\r\n  });\r\n }\r\n function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {\r\n  defaultWriterClosedPromiseInitialize(writer);\r\n  defaultWriterClosedPromiseReject(writer, reason);\r\n }\r\n function defaultWriterClosedPromiseInitializeAsResolved(writer) {\r\n  defaultWriterClosedPromiseInitialize(writer);\r\n  defaultWriterClosedPromiseResolve(writer);\r\n }\r\n function defaultWriterClosedPromiseReject(writer, reason) {\r\n  if (writer._closedPromise_reject === undefined) {\r\n   return;\r\n  }\r\n  setPromiseIsHandledToTrue(writer._closedPromise);\r\n  writer._closedPromise_reject(reason);\r\n  writer._closedPromise_resolve = undefined;\r\n  writer._closedPromise_reject = undefined;\r\n  writer._closedPromiseState = 'rejected';\r\n }\r\n function defaultWriterClosedPromiseResetToRejected(writer, reason) {\r\n  defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\r\n }\r\n function defaultWriterClosedPromiseResolve(writer) {\r\n  if (writer._closedPromise_resolve === undefined) {\r\n   return;\r\n  }\r\n  writer._closedPromise_resolve(undefined);\r\n  writer._closedPromise_resolve = undefined;\r\n  writer._closedPromise_reject = undefined;\r\n  writer._closedPromiseState = 'resolved';\r\n }\r\n function defaultWriterReadyPromiseInitialize(writer) {\r\n  writer._readyPromise = newPromise(function (resolve, reject) {\r\n   writer._readyPromise_resolve = resolve;\r\n   writer._readyPromise_reject = reject;\r\n  });\r\n  writer._readyPromiseState = 'pending';\r\n }\r\n function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {\r\n  defaultWriterReadyPromiseInitialize(writer);\r\n  defaultWriterReadyPromiseReject(writer, reason);\r\n }\r\n function defaultWriterReadyPromiseInitializeAsResolved(writer) {\r\n  defaultWriterReadyPromiseInitialize(writer);\r\n  defaultWriterReadyPromiseResolve(writer);\r\n }\r\n function defaultWriterReadyPromiseReject(writer, reason) {\r\n  if (writer._readyPromise_reject === undefined) {\r\n   return;\r\n  }\r\n  setPromiseIsHandledToTrue(writer._readyPromise);\r\n  writer._readyPromise_reject(reason);\r\n  writer._readyPromise_resolve = undefined;\r\n  writer._readyPromise_reject = undefined;\r\n  writer._readyPromiseState = 'rejected';\r\n }\r\n function defaultWriterReadyPromiseReset(writer) {\r\n  defaultWriterReadyPromiseInitialize(writer);\r\n }\r\n function defaultWriterReadyPromiseResetToRejected(writer, reason) {\r\n  defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\r\n }\r\n function defaultWriterReadyPromiseResolve(writer) {\r\n  if (writer._readyPromise_resolve === undefined) {\r\n   return;\r\n  }\r\n  writer._readyPromise_resolve(undefined);\r\n  writer._readyPromise_resolve = undefined;\r\n  writer._readyPromise_reject = undefined;\r\n  writer._readyPromiseState = 'fulfilled';\r\n }\r\n function isAbortSignal(value) {\r\n  if (typeof value !== 'object' || value === null) {\r\n   return false;\r\n  }\r\n  try {\r\n   return typeof value.aborted === 'boolean';\r\n  } catch (_a) {\r\n   return false;\r\n  }\r\n }\r\n var NativeDOMException = typeof DOMException !== 'undefined' ? DOMException : undefined;\r\n function isDOMExceptionConstructor(ctor) {\r\n  if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\r\n   return false;\r\n  }\r\n  try {\r\n   new ctor();\r\n   return true;\r\n  } catch (_a) {\r\n   return false;\r\n  }\r\n }\r\n function createDOMExceptionPolyfill() {\r\n  var ctor = function DOMException(message, name) {\r\n   this.message = message || '';\r\n   this.name = name || 'Error';\r\n   if (Error.captureStackTrace) {\r\n    Error.captureStackTrace(this, this.constructor);\r\n   }\r\n  };\r\n  ctor.prototype = Object.create(Error.prototype);\r\n  Object.defineProperty(ctor.prototype, 'constructor', {\r\n   value: ctor,\r\n   writable: true,\r\n   configurable: true\r\n  });\r\n  return ctor;\r\n }\r\n var DOMException$1 = isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\r\n function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) {\r\n  var reader = AcquireReadableStreamDefaultReader(source);\r\n  var writer = AcquireWritableStreamDefaultWriter(dest);\r\n  source._disturbed = true;\r\n  var shuttingDown = false;\r\n  var currentWrite = promiseResolvedWith(undefined);\r\n  return newPromise(function (resolve, reject) {\r\n   var abortAlgorithm;\r\n   if (signal !== undefined) {\r\n    abortAlgorithm = function () {\r\n     var error = new DOMException$1('Aborted', 'AbortError');\r\n     var actions = [];\r\n     if (!preventAbort) {\r\n      actions.push(function () {\r\n       if (dest._state === 'writable') {\r\n        return WritableStreamAbort(dest, error);\r\n       }\r\n       return promiseResolvedWith(undefined);\r\n      });\r\n     }\r\n     if (!preventCancel) {\r\n      actions.push(function () {\r\n       if (source._state === 'readable') {\r\n        return ReadableStreamCancel(source, error);\r\n       }\r\n       return promiseResolvedWith(undefined);\r\n      });\r\n     }\r\n     shutdownWithAction(function () {\r\n      return Promise.all(actions.map(function (action) {\r\n       return action();\r\n      }));\r\n     }, true, error);\r\n    };\r\n    if (signal.aborted) {\r\n     abortAlgorithm();\r\n     return;\r\n    }\r\n    signal.addEventListener('abort', abortAlgorithm);\r\n   }\r\n   function pipeLoop() {\r\n    return newPromise(function (resolveLoop, rejectLoop) {\r\n     function next(done) {\r\n      if (done) {\r\n       resolveLoop();\r\n      } else {\r\n       PerformPromiseThen(pipeStep(), next, rejectLoop);\r\n      }\r\n     }\r\n     next(false);\r\n    });\r\n   }\r\n   function pipeStep() {\r\n    if (shuttingDown) {\r\n     return promiseResolvedWith(true);\r\n    }\r\n    return PerformPromiseThen(writer._readyPromise, function () {\r\n     return newPromise(function (resolveRead, rejectRead) {\r\n      ReadableStreamDefaultReaderRead(reader, {\r\n       _chunkSteps: function (chunk) {\r\n        currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\r\n        resolveRead(false);\r\n       },\r\n       _closeSteps: function () {\r\n        return resolveRead(true);\r\n       },\r\n       _errorSteps: rejectRead\r\n      });\r\n     });\r\n    });\r\n   }\r\n   isOrBecomesErrored(source, reader._closedPromise, function (storedError) {\r\n    if (!preventAbort) {\r\n     shutdownWithAction(function () {\r\n      return WritableStreamAbort(dest, storedError);\r\n     }, true, storedError);\r\n    } else {\r\n     shutdown(true, storedError);\r\n    }\r\n   });\r\n   isOrBecomesErrored(dest, writer._closedPromise, function (storedError) {\r\n    if (!preventCancel) {\r\n     shutdownWithAction(function () {\r\n      return ReadableStreamCancel(source, storedError);\r\n     }, true, storedError);\r\n    } else {\r\n     shutdown(true, storedError);\r\n    }\r\n   });\r\n   isOrBecomesClosed(source, reader._closedPromise, function () {\r\n    if (!preventClose) {\r\n     shutdownWithAction(function () {\r\n      return WritableStreamDefaultWriterCloseWithErrorPropagation(writer);\r\n     });\r\n    } else {\r\n     shutdown();\r\n    }\r\n   });\r\n   if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\r\n    var destClosed_1 = new TypeError('the destination writable stream closed before all data could be piped to it');\r\n    if (!preventCancel) {\r\n     shutdownWithAction(function () {\r\n      return ReadableStreamCancel(source, destClosed_1);\r\n     }, true, destClosed_1);\r\n    } else {\r\n     shutdown(true, destClosed_1);\r\n    }\r\n   }\r\n   setPromiseIsHandledToTrue(pipeLoop());\r\n   function waitForWritesToFinish() {\r\n    var oldCurrentWrite = currentWrite;\r\n    return PerformPromiseThen(currentWrite, function () {\r\n     return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined;\r\n    });\r\n   }\r\n   function isOrBecomesErrored(stream, promise, action) {\r\n    if (stream._state === 'errored') {\r\n     action(stream._storedError);\r\n    } else {\r\n     uponRejection(promise, action);\r\n    }\r\n   }\r\n   function isOrBecomesClosed(stream, promise, action) {\r\n    if (stream._state === 'closed') {\r\n     action();\r\n    } else {\r\n     uponFulfillment(promise, action);\r\n    }\r\n   }\r\n   function shutdownWithAction(action, originalIsError, originalError) {\r\n    if (shuttingDown) {\r\n     return;\r\n    }\r\n    shuttingDown = true;\r\n    if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\r\n     uponFulfillment(waitForWritesToFinish(), doTheRest);\r\n    } else {\r\n     doTheRest();\r\n    }\r\n    function doTheRest() {\r\n     uponPromise(action(), function () {\r\n      return finalize(originalIsError, originalError);\r\n     }, function (newError) {\r\n      return finalize(true, newError);\r\n     });\r\n    }\r\n   }\r\n   function shutdown(isError, error) {\r\n    if (shuttingDown) {\r\n     return;\r\n    }\r\n    shuttingDown = true;\r\n    if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\r\n     uponFulfillment(waitForWritesToFinish(), function () {\r\n      return finalize(isError, error);\r\n     });\r\n    } else {\r\n     finalize(isError, error);\r\n    }\r\n   }\r\n   function finalize(isError, error) {\r\n    WritableStreamDefaultWriterRelease(writer);\r\n    ReadableStreamReaderGenericRelease(reader);\r\n    if (signal !== undefined) {\r\n     signal.removeEventListener('abort', abortAlgorithm);\r\n    }\r\n    if (isError) {\r\n     reject(error);\r\n    } else {\r\n     resolve(undefined);\r\n    }\r\n   }\r\n  });\r\n }\r\n var ReadableStreamDefaultController = function () {\r\n  function ReadableStreamDefaultController() {\r\n   throw new TypeError('Illegal constructor');\r\n  }\r\n  Object.defineProperty(ReadableStreamDefaultController.prototype, \"desiredSize\", {\r\n   get: function () {\r\n    if (!IsReadableStreamDefaultController(this)) {\r\n     throw defaultControllerBrandCheckException('desiredSize');\r\n    }\r\n    return ReadableStreamDefaultControllerGetDesiredSize(this);\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  ReadableStreamDefaultController.prototype.close = function () {\r\n   if (!IsReadableStreamDefaultController(this)) {\r\n    throw defaultControllerBrandCheckException('close');\r\n   }\r\n   if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\r\n    throw new TypeError('The stream is not in a state that permits close');\r\n   }\r\n   ReadableStreamDefaultControllerClose(this);\r\n  };\r\n  ReadableStreamDefaultController.prototype.enqueue = function (chunk) {\r\n   if (chunk === void 0) {\r\n    chunk = undefined;\r\n   }\r\n   if (!IsReadableStreamDefaultController(this)) {\r\n    throw defaultControllerBrandCheckException('enqueue');\r\n   }\r\n   if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\r\n    throw new TypeError('The stream is not in a state that permits enqueue');\r\n   }\r\n   return ReadableStreamDefaultControllerEnqueue(this, chunk);\r\n  };\r\n  ReadableStreamDefaultController.prototype.error = function (e) {\r\n   if (e === void 0) {\r\n    e = undefined;\r\n   }\r\n   if (!IsReadableStreamDefaultController(this)) {\r\n    throw defaultControllerBrandCheckException('error');\r\n   }\r\n   ReadableStreamDefaultControllerError(this, e);\r\n  };\r\n  ReadableStreamDefaultController.prototype[CancelSteps] = function (reason) {\r\n   ResetQueue(this);\r\n   var result = this._cancelAlgorithm(reason);\r\n   ReadableStreamDefaultControllerClearAlgorithms(this);\r\n   return result;\r\n  };\r\n  ReadableStreamDefaultController.prototype[PullSteps] = function (readRequest) {\r\n   var stream = this._controlledReadableStream;\r\n   if (this._queue.length > 0) {\r\n    var chunk = DequeueValue(this);\r\n    if (this._closeRequested && this._queue.length === 0) {\r\n     ReadableStreamDefaultControllerClearAlgorithms(this);\r\n     ReadableStreamClose(stream);\r\n    } else {\r\n     ReadableStreamDefaultControllerCallPullIfNeeded(this);\r\n    }\r\n    readRequest._chunkSteps(chunk);\r\n   } else {\r\n    ReadableStreamAddReadRequest(stream, readRequest);\r\n    ReadableStreamDefaultControllerCallPullIfNeeded(this);\r\n   }\r\n  };\r\n  return ReadableStreamDefaultController;\r\n }();\r\n Object.defineProperties(ReadableStreamDefaultController.prototype, {\r\n  close: { enumerable: true },\r\n  enqueue: { enumerable: true },\r\n  error: { enumerable: true },\r\n  desiredSize: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ReadableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ReadableStreamDefaultController',\r\n   configurable: true\r\n  });\r\n }\r\n function IsReadableStreamDefaultController(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function ReadableStreamDefaultControllerCallPullIfNeeded(controller) {\r\n  var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\r\n  if (!shouldPull) {\r\n   return;\r\n  }\r\n  if (controller._pulling) {\r\n   controller._pullAgain = true;\r\n   return;\r\n  }\r\n  controller._pulling = true;\r\n  var pullPromise = controller._pullAlgorithm();\r\n  uponPromise(pullPromise, function () {\r\n   controller._pulling = false;\r\n   if (controller._pullAgain) {\r\n    controller._pullAgain = false;\r\n    ReadableStreamDefaultControllerCallPullIfNeeded(controller);\r\n   }\r\n  }, function (e) {\r\n   ReadableStreamDefaultControllerError(controller, e);\r\n  });\r\n }\r\n function ReadableStreamDefaultControllerShouldCallPull(controller) {\r\n  var stream = controller._controlledReadableStream;\r\n  if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\r\n   return false;\r\n  }\r\n  if (!controller._started) {\r\n   return false;\r\n  }\r\n  if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\r\n   return true;\r\n  }\r\n  var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\r\n  if (desiredSize > 0) {\r\n   return true;\r\n  }\r\n  return false;\r\n }\r\n function ReadableStreamDefaultControllerClearAlgorithms(controller) {\r\n  controller._pullAlgorithm = undefined;\r\n  controller._cancelAlgorithm = undefined;\r\n  controller._strategySizeAlgorithm = undefined;\r\n }\r\n function ReadableStreamDefaultControllerClose(controller) {\r\n  if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\r\n   return;\r\n  }\r\n  var stream = controller._controlledReadableStream;\r\n  controller._closeRequested = true;\r\n  if (controller._queue.length === 0) {\r\n   ReadableStreamDefaultControllerClearAlgorithms(controller);\r\n   ReadableStreamClose(stream);\r\n  }\r\n }\r\n function ReadableStreamDefaultControllerEnqueue(controller, chunk) {\r\n  if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\r\n   return;\r\n  }\r\n  var stream = controller._controlledReadableStream;\r\n  if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\r\n   ReadableStreamFulfillReadRequest(stream, chunk, false);\r\n  } else {\r\n   var chunkSize = void 0;\r\n   try {\r\n    chunkSize = controller._strategySizeAlgorithm(chunk);\r\n   } catch (chunkSizeE) {\r\n    ReadableStreamDefaultControllerError(controller, chunkSizeE);\r\n    throw chunkSizeE;\r\n   }\r\n   try {\r\n    EnqueueValueWithSize(controller, chunk, chunkSize);\r\n   } catch (enqueueE) {\r\n    ReadableStreamDefaultControllerError(controller, enqueueE);\r\n    throw enqueueE;\r\n   }\r\n  }\r\n  ReadableStreamDefaultControllerCallPullIfNeeded(controller);\r\n }\r\n function ReadableStreamDefaultControllerError(controller, e) {\r\n  var stream = controller._controlledReadableStream;\r\n  if (stream._state !== 'readable') {\r\n   return;\r\n  }\r\n  ResetQueue(controller);\r\n  ReadableStreamDefaultControllerClearAlgorithms(controller);\r\n  ReadableStreamError(stream, e);\r\n }\r\n function ReadableStreamDefaultControllerGetDesiredSize(controller) {\r\n  var state = controller._controlledReadableStream._state;\r\n  if (state === 'errored') {\r\n   return null;\r\n  }\r\n  if (state === 'closed') {\r\n   return 0;\r\n  }\r\n  return controller._strategyHWM - controller._queueTotalSize;\r\n }\r\n function ReadableStreamDefaultControllerHasBackpressure(controller) {\r\n  if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) {\r\n  var state = controller._controlledReadableStream._state;\r\n  if (!controller._closeRequested && state === 'readable') {\r\n   return true;\r\n  }\r\n  return false;\r\n }\r\n function SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {\r\n  controller._controlledReadableStream = stream;\r\n  controller._queue = undefined;\r\n  controller._queueTotalSize = undefined;\r\n  ResetQueue(controller);\r\n  controller._started = false;\r\n  controller._closeRequested = false;\r\n  controller._pullAgain = false;\r\n  controller._pulling = false;\r\n  controller._strategySizeAlgorithm = sizeAlgorithm;\r\n  controller._strategyHWM = highWaterMark;\r\n  controller._pullAlgorithm = pullAlgorithm;\r\n  controller._cancelAlgorithm = cancelAlgorithm;\r\n  stream._readableStreamController = controller;\r\n  var startResult = startAlgorithm();\r\n  uponPromise(promiseResolvedWith(startResult), function () {\r\n   controller._started = true;\r\n   ReadableStreamDefaultControllerCallPullIfNeeded(controller);\r\n  }, function (r) {\r\n   ReadableStreamDefaultControllerError(controller, r);\r\n  });\r\n }\r\n function SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) {\r\n  var controller = Object.create(ReadableStreamDefaultController.prototype);\r\n  var startAlgorithm = function () {\r\n   return undefined;\r\n  };\r\n  var pullAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  var cancelAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  if (underlyingSource.start !== undefined) {\r\n   startAlgorithm = function () {\r\n    return underlyingSource.start(controller);\r\n   };\r\n  }\r\n  if (underlyingSource.pull !== undefined) {\r\n   pullAlgorithm = function () {\r\n    return underlyingSource.pull(controller);\r\n   };\r\n  }\r\n  if (underlyingSource.cancel !== undefined) {\r\n   cancelAlgorithm = function (reason) {\r\n    return underlyingSource.cancel(reason);\r\n   };\r\n  }\r\n  SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\r\n }\r\n function defaultControllerBrandCheckException(name) {\r\n  return new TypeError(\"ReadableStreamDefaultController.prototype.\" + name + \" can only be used on a ReadableStreamDefaultController\");\r\n }\r\n function ReadableStreamTee(stream, cloneForBranch2) {\r\n  var reader = AcquireReadableStreamDefaultReader(stream);\r\n  var reading = false;\r\n  var canceled1 = false;\r\n  var canceled2 = false;\r\n  var reason1;\r\n  var reason2;\r\n  var branch1;\r\n  var branch2;\r\n  var resolveCancelPromise;\r\n  var cancelPromise = newPromise(function (resolve) {\r\n   resolveCancelPromise = resolve;\r\n  });\r\n  function pullAlgorithm() {\r\n   if (reading) {\r\n    return promiseResolvedWith(undefined);\r\n   }\r\n   reading = true;\r\n   var readRequest = {\r\n    _chunkSteps: function (value) {\r\n     queueMicrotask(function () {\r\n      reading = false;\r\n      var value1 = value;\r\n      var value2 = value;\r\n      if (!canceled1) {\r\n       ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, value1);\r\n      }\r\n      if (!canceled2) {\r\n       ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, value2);\r\n      }\r\n      resolveCancelPromise(undefined);\r\n     });\r\n    },\r\n    _closeSteps: function () {\r\n     reading = false;\r\n     if (!canceled1) {\r\n      ReadableStreamDefaultControllerClose(branch1._readableStreamController);\r\n     }\r\n     if (!canceled2) {\r\n      ReadableStreamDefaultControllerClose(branch2._readableStreamController);\r\n     }\r\n    },\r\n    _errorSteps: function () {\r\n     reading = false;\r\n    }\r\n   };\r\n   ReadableStreamDefaultReaderRead(reader, readRequest);\r\n   return promiseResolvedWith(undefined);\r\n  }\r\n  function cancel1Algorithm(reason) {\r\n   canceled1 = true;\r\n   reason1 = reason;\r\n   if (canceled2) {\r\n    var compositeReason = CreateArrayFromList([\r\n     reason1,\r\n     reason2\r\n    ]);\r\n    var cancelResult = ReadableStreamCancel(stream, compositeReason);\r\n    resolveCancelPromise(cancelResult);\r\n   }\r\n   return cancelPromise;\r\n  }\r\n  function cancel2Algorithm(reason) {\r\n   canceled2 = true;\r\n   reason2 = reason;\r\n   if (canceled1) {\r\n    var compositeReason = CreateArrayFromList([\r\n     reason1,\r\n     reason2\r\n    ]);\r\n    var cancelResult = ReadableStreamCancel(stream, compositeReason);\r\n    resolveCancelPromise(cancelResult);\r\n   }\r\n   return cancelPromise;\r\n  }\r\n  function startAlgorithm() {\r\n  }\r\n  branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\r\n  branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\r\n  uponRejection(reader._closedPromise, function (r) {\r\n   ReadableStreamDefaultControllerError(branch1._readableStreamController, r);\r\n   ReadableStreamDefaultControllerError(branch2._readableStreamController, r);\r\n   resolveCancelPromise(undefined);\r\n  });\r\n  return [\r\n   branch1,\r\n   branch2\r\n  ];\r\n }\r\n function convertUnderlyingDefaultOrByteSource(source, context) {\r\n  assertDictionary(source, context);\r\n  var original = source;\r\n  var autoAllocateChunkSize = original === null || original === void 0 ? void 0 : original.autoAllocateChunkSize;\r\n  var cancel = original === null || original === void 0 ? void 0 : original.cancel;\r\n  var pull = original === null || original === void 0 ? void 0 : original.pull;\r\n  var start = original === null || original === void 0 ? void 0 : original.start;\r\n  var type = original === null || original === void 0 ? void 0 : original.type;\r\n  return {\r\n   autoAllocateChunkSize: autoAllocateChunkSize === undefined ? undefined : convertUnsignedLongLongWithEnforceRange(autoAllocateChunkSize, context + \" has member 'autoAllocateChunkSize' that\"),\r\n   cancel: cancel === undefined ? undefined : convertUnderlyingSourceCancelCallback(cancel, original, context + \" has member 'cancel' that\"),\r\n   pull: pull === undefined ? undefined : convertUnderlyingSourcePullCallback(pull, original, context + \" has member 'pull' that\"),\r\n   start: start === undefined ? undefined : convertUnderlyingSourceStartCallback(start, original, context + \" has member 'start' that\"),\r\n   type: type === undefined ? undefined : convertReadableStreamType(type, context + \" has member 'type' that\")\r\n  };\r\n }\r\n function convertUnderlyingSourceCancelCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (reason) {\r\n   return promiseCall(fn, original, [reason]);\r\n  };\r\n }\r\n function convertUnderlyingSourcePullCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (controller) {\r\n   return promiseCall(fn, original, [controller]);\r\n  };\r\n }\r\n function convertUnderlyingSourceStartCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (controller) {\r\n   return reflectCall(fn, original, [controller]);\r\n  };\r\n }\r\n function convertReadableStreamType(type, context) {\r\n  type = \"\" + type;\r\n  if (type !== 'bytes') {\r\n   throw new TypeError(context + \" '\" + type + \"' is not a valid enumeration value for ReadableStreamType\");\r\n  }\r\n  return type;\r\n }\r\n function convertReaderOptions(options, context) {\r\n  assertDictionary(options, context);\r\n  var mode = options === null || options === void 0 ? void 0 : options.mode;\r\n  return { mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, context + \" has member 'mode' that\") };\r\n }\r\n function convertReadableStreamReaderMode(mode, context) {\r\n  mode = \"\" + mode;\r\n  if (mode !== 'byob') {\r\n   throw new TypeError(context + \" '\" + mode + \"' is not a valid enumeration value for ReadableStreamReaderMode\");\r\n  }\r\n  return mode;\r\n }\r\n function convertIteratorOptions(options, context) {\r\n  assertDictionary(options, context);\r\n  var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;\r\n  return { preventCancel: Boolean(preventCancel) };\r\n }\r\n function convertPipeOptions(options, context) {\r\n  assertDictionary(options, context);\r\n  var preventAbort = options === null || options === void 0 ? void 0 : options.preventAbort;\r\n  var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;\r\n  var preventClose = options === null || options === void 0 ? void 0 : options.preventClose;\r\n  var signal = options === null || options === void 0 ? void 0 : options.signal;\r\n  if (signal !== undefined) {\r\n   assertAbortSignal(signal, context + \" has member 'signal' that\");\r\n  }\r\n  return {\r\n   preventAbort: Boolean(preventAbort),\r\n   preventCancel: Boolean(preventCancel),\r\n   preventClose: Boolean(preventClose),\r\n   signal: signal\r\n  };\r\n }\r\n function assertAbortSignal(signal, context) {\r\n  if (!isAbortSignal(signal)) {\r\n   throw new TypeError(context + \" is not an AbortSignal.\");\r\n  }\r\n }\r\n function convertReadableWritablePair(pair, context) {\r\n  assertDictionary(pair, context);\r\n  var readable = pair === null || pair === void 0 ? void 0 : pair.readable;\r\n  assertRequiredField(readable, 'readable', 'ReadableWritablePair');\r\n  assertReadableStream(readable, context + \" has member 'readable' that\");\r\n  var writable = pair === null || pair === void 0 ? void 0 : pair.writable;\r\n  assertRequiredField(writable, 'writable', 'ReadableWritablePair');\r\n  assertWritableStream(writable, context + \" has member 'writable' that\");\r\n  return {\r\n   readable: readable,\r\n   writable: writable\r\n  };\r\n }\r\n var ReadableStream = function () {\r\n  function ReadableStream(rawUnderlyingSource, rawStrategy) {\r\n   if (rawUnderlyingSource === void 0) {\r\n    rawUnderlyingSource = {};\r\n   }\r\n   if (rawStrategy === void 0) {\r\n    rawStrategy = {};\r\n   }\r\n   if (rawUnderlyingSource === undefined) {\r\n    rawUnderlyingSource = null;\r\n   } else {\r\n    assertObject(rawUnderlyingSource, 'First parameter');\r\n   }\r\n   var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\r\n   var underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\r\n   InitializeReadableStream(this);\r\n   if (underlyingSource.type === 'bytes') {\r\n    if (strategy.size !== undefined) {\r\n     throw new RangeError('The strategy for a byte stream cannot have a size function');\r\n    }\r\n    var highWaterMark = ExtractHighWaterMark(strategy, 0);\r\n    SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark);\r\n   } else {\r\n    var sizeAlgorithm = ExtractSizeAlgorithm(strategy);\r\n    var highWaterMark = ExtractHighWaterMark(strategy, 1);\r\n    SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm);\r\n   }\r\n  }\r\n  Object.defineProperty(ReadableStream.prototype, \"locked\", {\r\n   get: function () {\r\n    if (!IsReadableStream(this)) {\r\n     throw streamBrandCheckException$1('locked');\r\n    }\r\n    return IsReadableStreamLocked(this);\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  ReadableStream.prototype.cancel = function (reason) {\r\n   if (reason === void 0) {\r\n    reason = undefined;\r\n   }\r\n   if (!IsReadableStream(this)) {\r\n    return promiseRejectedWith(streamBrandCheckException$1('cancel'));\r\n   }\r\n   if (IsReadableStreamLocked(this)) {\r\n    return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\r\n   }\r\n   return ReadableStreamCancel(this, reason);\r\n  };\r\n  ReadableStream.prototype.getReader = function (rawOptions) {\r\n   if (rawOptions === void 0) {\r\n    rawOptions = undefined;\r\n   }\r\n   if (!IsReadableStream(this)) {\r\n    throw streamBrandCheckException$1('getReader');\r\n   }\r\n   var options = convertReaderOptions(rawOptions, 'First parameter');\r\n   if (options.mode === undefined) {\r\n    return AcquireReadableStreamDefaultReader(this);\r\n   }\r\n   return AcquireReadableStreamBYOBReader(this);\r\n  };\r\n  ReadableStream.prototype.pipeThrough = function (rawTransform, rawOptions) {\r\n   if (rawOptions === void 0) {\r\n    rawOptions = {};\r\n   }\r\n   if (!IsReadableStream(this)) {\r\n    throw streamBrandCheckException$1('pipeThrough');\r\n   }\r\n   assertRequiredArgument(rawTransform, 1, 'pipeThrough');\r\n   var transform = convertReadableWritablePair(rawTransform, 'First parameter');\r\n   var options = convertPipeOptions(rawOptions, 'Second parameter');\r\n   if (IsReadableStreamLocked(this)) {\r\n    throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\r\n   }\r\n   if (IsWritableStreamLocked(transform.writable)) {\r\n    throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\r\n   }\r\n   var promise = ReadableStreamPipeTo(this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal);\r\n   setPromiseIsHandledToTrue(promise);\r\n   return transform.readable;\r\n  };\r\n  ReadableStream.prototype.pipeTo = function (destination, rawOptions) {\r\n   if (rawOptions === void 0) {\r\n    rawOptions = {};\r\n   }\r\n   if (!IsReadableStream(this)) {\r\n    return promiseRejectedWith(streamBrandCheckException$1('pipeTo'));\r\n   }\r\n   if (destination === undefined) {\r\n    return promiseRejectedWith(\"Parameter 1 is required in 'pipeTo'.\");\r\n   }\r\n   if (!IsWritableStream(destination)) {\r\n    return promiseRejectedWith(new TypeError(\"ReadableStream.prototype.pipeTo's first argument must be a WritableStream\"));\r\n   }\r\n   var options;\r\n   try {\r\n    options = convertPipeOptions(rawOptions, 'Second parameter');\r\n   } catch (e) {\r\n    return promiseRejectedWith(e);\r\n   }\r\n   if (IsReadableStreamLocked(this)) {\r\n    return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));\r\n   }\r\n   if (IsWritableStreamLocked(destination)) {\r\n    return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));\r\n   }\r\n   return ReadableStreamPipeTo(this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal);\r\n  };\r\n  ReadableStream.prototype.tee = function () {\r\n   if (!IsReadableStream(this)) {\r\n    throw streamBrandCheckException$1('tee');\r\n   }\r\n   var branches = ReadableStreamTee(this);\r\n   return CreateArrayFromList(branches);\r\n  };\r\n  ReadableStream.prototype.values = function (rawOptions) {\r\n   if (rawOptions === void 0) {\r\n    rawOptions = undefined;\r\n   }\r\n   if (!IsReadableStream(this)) {\r\n    throw streamBrandCheckException$1('values');\r\n   }\r\n   var options = convertIteratorOptions(rawOptions, 'First parameter');\r\n   return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\r\n  };\r\n  return ReadableStream;\r\n }();\r\n Object.defineProperties(ReadableStream.prototype, {\r\n  cancel: { enumerable: true },\r\n  getReader: { enumerable: true },\r\n  pipeThrough: { enumerable: true },\r\n  pipeTo: { enumerable: true },\r\n  tee: { enumerable: true },\r\n  values: { enumerable: true },\r\n  locked: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ReadableStream',\r\n   configurable: true\r\n  });\r\n }\r\n if (typeof SymbolPolyfill.asyncIterator === 'symbol') {\r\n  Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.asyncIterator, {\r\n   value: ReadableStream.prototype.values,\r\n   writable: true,\r\n   configurable: true\r\n  });\r\n }\r\n function CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {\r\n  if (highWaterMark === void 0) {\r\n   highWaterMark = 1;\r\n  }\r\n  if (sizeAlgorithm === void 0) {\r\n   sizeAlgorithm = function () {\r\n    return 1;\r\n   };\r\n  }\r\n  var stream = Object.create(ReadableStream.prototype);\r\n  InitializeReadableStream(stream);\r\n  var controller = Object.create(ReadableStreamDefaultController.prototype);\r\n  SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\r\n  return stream;\r\n }\r\n function InitializeReadableStream(stream) {\r\n  stream._state = 'readable';\r\n  stream._reader = undefined;\r\n  stream._storedError = undefined;\r\n  stream._disturbed = false;\r\n }\r\n function IsReadableStream(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function IsReadableStreamLocked(stream) {\r\n  if (stream._reader === undefined) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function ReadableStreamCancel(stream, reason) {\r\n  stream._disturbed = true;\r\n  if (stream._state === 'closed') {\r\n   return promiseResolvedWith(undefined);\r\n  }\r\n  if (stream._state === 'errored') {\r\n   return promiseRejectedWith(stream._storedError);\r\n  }\r\n  ReadableStreamClose(stream);\r\n  var sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\r\n  return transformPromiseWith(sourceCancelPromise, noop);\r\n }\r\n function ReadableStreamClose(stream) {\r\n  stream._state = 'closed';\r\n  var reader = stream._reader;\r\n  if (reader === undefined) {\r\n   return;\r\n  }\r\n  if (IsReadableStreamDefaultReader(reader)) {\r\n   reader._readRequests.forEach(function (readRequest) {\r\n    readRequest._closeSteps();\r\n   });\r\n   reader._readRequests = new SimpleQueue();\r\n  }\r\n  defaultReaderClosedPromiseResolve(reader);\r\n }\r\n function ReadableStreamError(stream, e) {\r\n  stream._state = 'errored';\r\n  stream._storedError = e;\r\n  var reader = stream._reader;\r\n  if (reader === undefined) {\r\n   return;\r\n  }\r\n  if (IsReadableStreamDefaultReader(reader)) {\r\n   reader._readRequests.forEach(function (readRequest) {\r\n    readRequest._errorSteps(e);\r\n   });\r\n   reader._readRequests = new SimpleQueue();\r\n  } else {\r\n   reader._readIntoRequests.forEach(function (readIntoRequest) {\r\n    readIntoRequest._errorSteps(e);\r\n   });\r\n   reader._readIntoRequests = new SimpleQueue();\r\n  }\r\n  defaultReaderClosedPromiseReject(reader, e);\r\n }\r\n function streamBrandCheckException$1(name) {\r\n  return new TypeError(\"ReadableStream.prototype.\" + name + \" can only be used on a ReadableStream\");\r\n }\r\n function convertQueuingStrategyInit(init, context) {\r\n  assertDictionary(init, context);\r\n  var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;\r\n  assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\r\n  return { highWaterMark: convertUnrestrictedDouble(highWaterMark) };\r\n }\r\n var byteLengthSizeFunction = function size(chunk) {\r\n  return chunk.byteLength;\r\n };\r\n var ByteLengthQueuingStrategy = function () {\r\n  function ByteLengthQueuingStrategy(options) {\r\n   assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\r\n   options = convertQueuingStrategyInit(options, 'First parameter');\r\n   this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\r\n  }\r\n  Object.defineProperty(ByteLengthQueuingStrategy.prototype, \"highWaterMark\", {\r\n   get: function () {\r\n    if (!IsByteLengthQueuingStrategy(this)) {\r\n     throw byteLengthBrandCheckException('highWaterMark');\r\n    }\r\n    return this._byteLengthQueuingStrategyHighWaterMark;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  Object.defineProperty(ByteLengthQueuingStrategy.prototype, \"size\", {\r\n   get: function () {\r\n    if (!IsByteLengthQueuingStrategy(this)) {\r\n     throw byteLengthBrandCheckException('size');\r\n    }\r\n    return byteLengthSizeFunction;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  return ByteLengthQueuingStrategy;\r\n }();\r\n Object.defineProperties(ByteLengthQueuingStrategy.prototype, {\r\n  highWaterMark: { enumerable: true },\r\n  size: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ByteLengthQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ByteLengthQueuingStrategy',\r\n   configurable: true\r\n  });\r\n }\r\n function byteLengthBrandCheckException(name) {\r\n  return new TypeError(\"ByteLengthQueuingStrategy.prototype.\" + name + \" can only be used on a ByteLengthQueuingStrategy\");\r\n }\r\n function IsByteLengthQueuingStrategy(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n var countSizeFunction = function size() {\r\n  return 1;\r\n };\r\n var CountQueuingStrategy = function () {\r\n  function CountQueuingStrategy(options) {\r\n   assertRequiredArgument(options, 1, 'CountQueuingStrategy');\r\n   options = convertQueuingStrategyInit(options, 'First parameter');\r\n   this._countQueuingStrategyHighWaterMark = options.highWaterMark;\r\n  }\r\n  Object.defineProperty(CountQueuingStrategy.prototype, \"highWaterMark\", {\r\n   get: function () {\r\n    if (!IsCountQueuingStrategy(this)) {\r\n     throw countBrandCheckException('highWaterMark');\r\n    }\r\n    return this._countQueuingStrategyHighWaterMark;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  Object.defineProperty(CountQueuingStrategy.prototype, \"size\", {\r\n   get: function () {\r\n    if (!IsCountQueuingStrategy(this)) {\r\n     throw countBrandCheckException('size');\r\n    }\r\n    return countSizeFunction;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  return CountQueuingStrategy;\r\n }();\r\n Object.defineProperties(CountQueuingStrategy.prototype, {\r\n  highWaterMark: { enumerable: true },\r\n  size: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(CountQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'CountQueuingStrategy',\r\n   configurable: true\r\n  });\r\n }\r\n function countBrandCheckException(name) {\r\n  return new TypeError(\"CountQueuingStrategy.prototype.\" + name + \" can only be used on a CountQueuingStrategy\");\r\n }\r\n function IsCountQueuingStrategy(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function convertTransformer(original, context) {\r\n  assertDictionary(original, context);\r\n  var flush = original === null || original === void 0 ? void 0 : original.flush;\r\n  var readableType = original === null || original === void 0 ? void 0 : original.readableType;\r\n  var start = original === null || original === void 0 ? void 0 : original.start;\r\n  var transform = original === null || original === void 0 ? void 0 : original.transform;\r\n  var writableType = original === null || original === void 0 ? void 0 : original.writableType;\r\n  return {\r\n   flush: flush === undefined ? undefined : convertTransformerFlushCallback(flush, original, context + \" has member 'flush' that\"),\r\n   readableType: readableType,\r\n   start: start === undefined ? undefined : convertTransformerStartCallback(start, original, context + \" has member 'start' that\"),\r\n   transform: transform === undefined ? undefined : convertTransformerTransformCallback(transform, original, context + \" has member 'transform' that\"),\r\n   writableType: writableType\r\n  };\r\n }\r\n function convertTransformerFlushCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (controller) {\r\n   return promiseCall(fn, original, [controller]);\r\n  };\r\n }\r\n function convertTransformerStartCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (controller) {\r\n   return reflectCall(fn, original, [controller]);\r\n  };\r\n }\r\n function convertTransformerTransformCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (chunk, controller) {\r\n   return promiseCall(fn, original, [\r\n    chunk,\r\n    controller\r\n   ]);\r\n  };\r\n }\r\n var TransformStream = function () {\r\n  function TransformStream(rawTransformer, rawWritableStrategy, rawReadableStrategy) {\r\n   if (rawTransformer === void 0) {\r\n    rawTransformer = {};\r\n   }\r\n   if (rawWritableStrategy === void 0) {\r\n    rawWritableStrategy = {};\r\n   }\r\n   if (rawReadableStrategy === void 0) {\r\n    rawReadableStrategy = {};\r\n   }\r\n   if (rawTransformer === undefined) {\r\n    rawTransformer = null;\r\n   }\r\n   var writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\r\n   var readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\r\n   var transformer = convertTransformer(rawTransformer, 'First parameter');\r\n   if (transformer.readableType !== undefined) {\r\n    throw new RangeError('Invalid readableType specified');\r\n   }\r\n   if (transformer.writableType !== undefined) {\r\n    throw new RangeError('Invalid writableType specified');\r\n   }\r\n   var readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\r\n   var readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\r\n   var writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\r\n   var writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\r\n   var startPromise_resolve;\r\n   var startPromise = newPromise(function (resolve) {\r\n    startPromise_resolve = resolve;\r\n   });\r\n   InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\r\n   SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\r\n   if (transformer.start !== undefined) {\r\n    startPromise_resolve(transformer.start(this._transformStreamController));\r\n   } else {\r\n    startPromise_resolve(undefined);\r\n   }\r\n  }\r\n  Object.defineProperty(TransformStream.prototype, \"readable\", {\r\n   get: function () {\r\n    if (!IsTransformStream(this)) {\r\n     throw streamBrandCheckException$2('readable');\r\n    }\r\n    return this._readable;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  Object.defineProperty(TransformStream.prototype, \"writable\", {\r\n   get: function () {\r\n    if (!IsTransformStream(this)) {\r\n     throw streamBrandCheckException$2('writable');\r\n    }\r\n    return this._writable;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  return TransformStream;\r\n }();\r\n Object.defineProperties(TransformStream.prototype, {\r\n  readable: { enumerable: true },\r\n  writable: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(TransformStream.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'TransformStream',\r\n   configurable: true\r\n  });\r\n }\r\n function InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) {\r\n  function startAlgorithm() {\r\n   return startPromise;\r\n  }\r\n  function writeAlgorithm(chunk) {\r\n   return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\r\n  }\r\n  function abortAlgorithm(reason) {\r\n   return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\r\n  }\r\n  function closeAlgorithm() {\r\n   return TransformStreamDefaultSinkCloseAlgorithm(stream);\r\n  }\r\n  stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm);\r\n  function pullAlgorithm() {\r\n   return TransformStreamDefaultSourcePullAlgorithm(stream);\r\n  }\r\n  function cancelAlgorithm(reason) {\r\n   TransformStreamErrorWritableAndUnblockWrite(stream, reason);\r\n   return promiseResolvedWith(undefined);\r\n  }\r\n  stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\r\n  stream._backpressure = undefined;\r\n  stream._backpressureChangePromise = undefined;\r\n  stream._backpressureChangePromise_resolve = undefined;\r\n  TransformStreamSetBackpressure(stream, true);\r\n  stream._transformStreamController = undefined;\r\n }\r\n function IsTransformStream(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function TransformStreamError(stream, e) {\r\n  ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e);\r\n  TransformStreamErrorWritableAndUnblockWrite(stream, e);\r\n }\r\n function TransformStreamErrorWritableAndUnblockWrite(stream, e) {\r\n  TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\r\n  WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\r\n  if (stream._backpressure) {\r\n   TransformStreamSetBackpressure(stream, false);\r\n  }\r\n }\r\n function TransformStreamSetBackpressure(stream, backpressure) {\r\n  if (stream._backpressureChangePromise !== undefined) {\r\n   stream._backpressureChangePromise_resolve();\r\n  }\r\n  stream._backpressureChangePromise = newPromise(function (resolve) {\r\n   stream._backpressureChangePromise_resolve = resolve;\r\n  });\r\n  stream._backpressure = backpressure;\r\n }\r\n var TransformStreamDefaultController = function () {\r\n  function TransformStreamDefaultController() {\r\n   throw new TypeError('Illegal constructor');\r\n  }\r\n  Object.defineProperty(TransformStreamDefaultController.prototype, \"desiredSize\", {\r\n   get: function () {\r\n    if (!IsTransformStreamDefaultController(this)) {\r\n     throw defaultControllerBrandCheckException$1('desiredSize');\r\n    }\r\n    var readableController = this._controlledTransformStream._readable._readableStreamController;\r\n    return ReadableStreamDefaultControllerGetDesiredSize(readableController);\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  TransformStreamDefaultController.prototype.enqueue = function (chunk) {\r\n   if (chunk === void 0) {\r\n    chunk = undefined;\r\n   }\r\n   if (!IsTransformStreamDefaultController(this)) {\r\n    throw defaultControllerBrandCheckException$1('enqueue');\r\n   }\r\n   TransformStreamDefaultControllerEnqueue(this, chunk);\r\n  };\r\n  TransformStreamDefaultController.prototype.error = function (reason) {\r\n   if (reason === void 0) {\r\n    reason = undefined;\r\n   }\r\n   if (!IsTransformStreamDefaultController(this)) {\r\n    throw defaultControllerBrandCheckException$1('error');\r\n   }\r\n   TransformStreamDefaultControllerError(this, reason);\r\n  };\r\n  TransformStreamDefaultController.prototype.terminate = function () {\r\n   if (!IsTransformStreamDefaultController(this)) {\r\n    throw defaultControllerBrandCheckException$1('terminate');\r\n   }\r\n   TransformStreamDefaultControllerTerminate(this);\r\n  };\r\n  return TransformStreamDefaultController;\r\n }();\r\n Object.defineProperties(TransformStreamDefaultController.prototype, {\r\n  enqueue: { enumerable: true },\r\n  error: { enumerable: true },\r\n  terminate: { enumerable: true },\r\n  desiredSize: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(TransformStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'TransformStreamDefaultController',\r\n   configurable: true\r\n  });\r\n }\r\n function IsTransformStreamDefaultController(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm) {\r\n  controller._controlledTransformStream = stream;\r\n  stream._transformStreamController = controller;\r\n  controller._transformAlgorithm = transformAlgorithm;\r\n  controller._flushAlgorithm = flushAlgorithm;\r\n }\r\n function SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) {\r\n  var controller = Object.create(TransformStreamDefaultController.prototype);\r\n  var transformAlgorithm = function (chunk) {\r\n   try {\r\n    TransformStreamDefaultControllerEnqueue(controller, chunk);\r\n    return promiseResolvedWith(undefined);\r\n   } catch (transformResultE) {\r\n    return promiseRejectedWith(transformResultE);\r\n   }\r\n  };\r\n  var flushAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  if (transformer.transform !== undefined) {\r\n   transformAlgorithm = function (chunk) {\r\n    return transformer.transform(chunk, controller);\r\n   };\r\n  }\r\n  if (transformer.flush !== undefined) {\r\n   flushAlgorithm = function () {\r\n    return transformer.flush(controller);\r\n   };\r\n  }\r\n  SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\r\n }\r\n function TransformStreamDefaultControllerClearAlgorithms(controller) {\r\n  controller._transformAlgorithm = undefined;\r\n  controller._flushAlgorithm = undefined;\r\n }\r\n function TransformStreamDefaultControllerEnqueue(controller, chunk) {\r\n  var stream = controller._controlledTransformStream;\r\n  var readableController = stream._readable._readableStreamController;\r\n  if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\r\n   throw new TypeError('Readable side is not in a state that permits enqueue');\r\n  }\r\n  try {\r\n   ReadableStreamDefaultControllerEnqueue(readableController, chunk);\r\n  } catch (e) {\r\n   TransformStreamErrorWritableAndUnblockWrite(stream, e);\r\n   throw stream._readable._storedError;\r\n  }\r\n  var backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\r\n  if (backpressure !== stream._backpressure) {\r\n   TransformStreamSetBackpressure(stream, true);\r\n  }\r\n }\r\n function TransformStreamDefaultControllerError(controller, e) {\r\n  TransformStreamError(controller._controlledTransformStream, e);\r\n }\r\n function TransformStreamDefaultControllerPerformTransform(controller, chunk) {\r\n  var transformPromise = controller._transformAlgorithm(chunk);\r\n  return transformPromiseWith(transformPromise, undefined, function (r) {\r\n   TransformStreamError(controller._controlledTransformStream, r);\r\n   throw r;\r\n  });\r\n }\r\n function TransformStreamDefaultControllerTerminate(controller) {\r\n  var stream = controller._controlledTransformStream;\r\n  var readableController = stream._readable._readableStreamController;\r\n  ReadableStreamDefaultControllerClose(readableController);\r\n  var error = new TypeError('TransformStream terminated');\r\n  TransformStreamErrorWritableAndUnblockWrite(stream, error);\r\n }\r\n function TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) {\r\n  var controller = stream._transformStreamController;\r\n  if (stream._backpressure) {\r\n   var backpressureChangePromise = stream._backpressureChangePromise;\r\n   return transformPromiseWith(backpressureChangePromise, function () {\r\n    var writable = stream._writable;\r\n    var state = writable._state;\r\n    if (state === 'erroring') {\r\n     throw writable._storedError;\r\n    }\r\n    return TransformStreamDefaultControllerPerformTransform(controller, chunk);\r\n   });\r\n  }\r\n  return TransformStreamDefaultControllerPerformTransform(controller, chunk);\r\n }\r\n function TransformStreamDefaultSinkAbortAlgorithm(stream, reason) {\r\n  TransformStreamError(stream, reason);\r\n  return promiseResolvedWith(undefined);\r\n }\r\n function TransformStreamDefaultSinkCloseAlgorithm(stream) {\r\n  var readable = stream._readable;\r\n  var controller = stream._transformStreamController;\r\n  var flushPromise = controller._flushAlgorithm();\r\n  TransformStreamDefaultControllerClearAlgorithms(controller);\r\n  return transformPromiseWith(flushPromise, function () {\r\n   if (readable._state === 'errored') {\r\n    throw readable._storedError;\r\n   }\r\n   ReadableStreamDefaultControllerClose(readable._readableStreamController);\r\n  }, function (r) {\r\n   TransformStreamError(stream, r);\r\n   throw readable._storedError;\r\n  });\r\n }\r\n function TransformStreamDefaultSourcePullAlgorithm(stream) {\r\n  TransformStreamSetBackpressure(stream, false);\r\n  return stream._backpressureChangePromise;\r\n }\r\n function defaultControllerBrandCheckException$1(name) {\r\n  return new TypeError(\"TransformStreamDefaultController.prototype.\" + name + \" can only be used on a TransformStreamDefaultController\");\r\n }\r\n function streamBrandCheckException$2(name) {\r\n  return new TypeError(\"TransformStream.prototype.\" + name + \" can only be used on a TransformStream\");\r\n }\r\n exports.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy;\r\n exports.CountQueuingStrategy = CountQueuingStrategy;\r\n exports.ReadableByteStreamController = ReadableByteStreamController;\r\n exports.ReadableStream = ReadableStream;\r\n exports.ReadableStreamBYOBReader = ReadableStreamBYOBReader;\r\n exports.ReadableStreamBYOBRequest = ReadableStreamBYOBRequest;\r\n exports.ReadableStreamDefaultController = ReadableStreamDefaultController;\r\n exports.ReadableStreamDefaultReader = ReadableStreamDefaultReader;\r\n exports.TransformStream = TransformStream;\r\n exports.TransformStreamDefaultController = TransformStreamDefaultController;\r\n exports.WritableStream = WritableStream;\r\n exports.WritableStreamDefaultController = WritableStreamDefaultController;\r\n exports.WritableStreamDefaultWriter = WritableStreamDefaultWriter;\r\n Object.defineProperty(exports, '__esModule', { value: true });\r\n}));\r\n\r\n/***/ }),\r\n/* 122 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(123);\r\nvar entryUnbind = __w_pdfjs_require__(127);\r\nmodule.exports = entryUnbind('String', 'padStart');\r\n\r\n/***/ }),\r\n/* 123 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar $padStart = __w_pdfjs_require__(124).start;\r\nvar WEBKIT_BUG = __w_pdfjs_require__(126);\r\n$({\r\n target: 'String',\r\n proto: true,\r\n forced: WEBKIT_BUG\r\n}, {\r\n padStart: function padStart(maxLength) {\r\n  return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 124 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar toLength = __w_pdfjs_require__(46);\r\nvar repeat = __w_pdfjs_require__(125);\r\nvar requireObjectCoercible = __w_pdfjs_require__(19);\r\nvar ceil = Math.ceil;\r\nvar createMethod = function (IS_END) {\r\n return function ($this, maxLength, fillString) {\r\n  var S = String(requireObjectCoercible($this));\r\n  var stringLength = S.length;\r\n  var fillStr = fillString === undefined ? ' ' : String(fillString);\r\n  var intMaxLength = toLength(maxLength);\r\n  var fillLen, stringFiller;\r\n  if (intMaxLength <= stringLength || fillStr == '')\r\n   return S;\r\n  fillLen = intMaxLength - stringLength;\r\n  stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length));\r\n  if (stringFiller.length > fillLen)\r\n   stringFiller = stringFiller.slice(0, fillLen);\r\n  return IS_END ? S + stringFiller : stringFiller + S;\r\n };\r\n};\r\nmodule.exports = {\r\n start: createMethod(false),\r\n end: createMethod(true)\r\n};\r\n\r\n/***/ }),\r\n/* 125 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar toInteger = __w_pdfjs_require__(47);\r\nvar requireObjectCoercible = __w_pdfjs_require__(19);\r\nmodule.exports = ''.repeat || function repeat(count) {\r\n var str = String(requireObjectCoercible(this));\r\n var result = '';\r\n var n = toInteger(count);\r\n if (n < 0 || n == Infinity)\r\n  throw RangeError('Wrong number of repetitions');\r\n for (; n > 0; (n >>>= 1) && (str += str))\r\n  if (n & 1)\r\n   result += str;\r\n return result;\r\n};\r\n\r\n/***/ }),\r\n/* 126 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar userAgent = __w_pdfjs_require__(95);\r\nmodule.exports = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\r\n\r\n/***/ }),\r\n/* 127 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar bind = __w_pdfjs_require__(75);\r\nvar call = Function.call;\r\nmodule.exports = function (CONSTRUCTOR, METHOD, length) {\r\n return bind(call, global[CONSTRUCTOR].prototype[METHOD], length);\r\n};\r\n\r\n/***/ }),\r\n/* 128 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(129);\r\nvar entryUnbind = __w_pdfjs_require__(127);\r\nmodule.exports = entryUnbind('String', 'padEnd');\r\n\r\n/***/ }),\r\n/* 129 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar $padEnd = __w_pdfjs_require__(124).end;\r\nvar WEBKIT_BUG = __w_pdfjs_require__(126);\r\n$({\r\n target: 'String',\r\n proto: true,\r\n forced: WEBKIT_BUG\r\n}, {\r\n padEnd: function padEnd(maxLength) {\r\n  return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 130 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(131);\r\nvar path = __w_pdfjs_require__(42);\r\nmodule.exports = path.Object.values;\r\n\r\n/***/ }),\r\n/* 131 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar $values = __w_pdfjs_require__(132).values;\r\n$({\r\n target: 'Object',\r\n stat: true\r\n}, {\r\n values: function values(O) {\r\n  return $values(O);\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 132 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar objectKeys = __w_pdfjs_require__(60);\r\nvar toIndexedObject = __w_pdfjs_require__(16);\r\nvar propertyIsEnumerable = __w_pdfjs_require__(14).f;\r\nvar createMethod = function (TO_ENTRIES) {\r\n return function (it) {\r\n  var O = toIndexedObject(it);\r\n  var keys = objectKeys(O);\r\n  var length = keys.length;\r\n  var i = 0;\r\n  var result = [];\r\n  var key;\r\n  while (length > i) {\r\n   key = keys[i++];\r\n   if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\r\n    result.push(TO_ENTRIES ? [\r\n     key,\r\n     O[key]\r\n    ] : O[key]);\r\n   }\r\n  }\r\n  return result;\r\n };\r\n};\r\nmodule.exports = {\r\n entries: createMethod(true),\r\n values: createMethod(false)\r\n};\r\n\r\n/***/ }),\r\n/* 133 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(134);\r\nvar path = __w_pdfjs_require__(42);\r\nmodule.exports = path.Object.entries;\r\n\r\n/***/ }),\r\n/* 134 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar $entries = __w_pdfjs_require__(132).entries;\r\n$({\r\n target: 'Object',\r\n stat: true\r\n}, {\r\n entries: function entries(O) {\r\n  return $entries(O);\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 135 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.getDocument = getDocument;\r\nexports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;\r\nexports.version = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultCMapReaderFactory = exports.DefaultCanvasFactory = exports.build = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _display_utils = __w_pdfjs_require__(1);\r\n\r\nvar _font_loader = __w_pdfjs_require__(136);\r\n\r\nvar _node_utils = __w_pdfjs_require__(137);\r\n\r\nvar _annotation_storage = __w_pdfjs_require__(138);\r\n\r\nvar _api_compatibility = __w_pdfjs_require__(139);\r\n\r\nvar _canvas = __w_pdfjs_require__(140);\r\n\r\nvar _worker_options = __w_pdfjs_require__(142);\r\n\r\nvar _is_node = __w_pdfjs_require__(6);\r\n\r\nvar _message_handler = __w_pdfjs_require__(143);\r\n\r\nvar _metadata = __w_pdfjs_require__(144);\r\n\r\nvar _optional_content_config = __w_pdfjs_require__(146);\r\n\r\nvar _transport_stream = __w_pdfjs_require__(147);\r\n\r\nvar _webgl = __w_pdfjs_require__(148);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\r\n\r\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\r\n\r\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nvar DEFAULT_RANGE_CHUNK_SIZE = 65536;\r\nvar RENDERING_CANCELLED_TIMEOUT = 100;\r\nvar DefaultCanvasFactory = _is_node.isNodeJS ? _node_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory;\r\nexports.DefaultCanvasFactory = DefaultCanvasFactory;\r\nvar DefaultCMapReaderFactory = _is_node.isNodeJS ? _node_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory;\r\nexports.DefaultCMapReaderFactory = DefaultCMapReaderFactory;\r\nvar createPDFNetworkStream;\r\n\r\nfunction setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {\r\n  createPDFNetworkStream = pdfNetworkStreamFactory;\r\n}\r\n\r\nfunction getDocument(src) {\r\n  var task = new PDFDocumentLoadingTask();\r\n  var source;\r\n\r\n  if (typeof src === \"string\") {\r\n    source = {\r\n      url: src\r\n    };\r\n  } else if ((0, _util.isArrayBuffer)(src)) {\r\n    source = {\r\n      data: src\r\n    };\r\n  } else if (src instanceof PDFDataRangeTransport) {\r\n    source = {\r\n      range: src\r\n    };\r\n  } else {\r\n    if (_typeof(src) !== \"object\") {\r\n      throw new Error(\"Invalid parameter in getDocument, \" + \"need either Uint8Array, string or a parameter object\");\r\n    }\r\n\r\n    if (!src.url && !src.data && !src.range) {\r\n      throw new Error(\"Invalid parameter object: need either .data, .range or .url\");\r\n    }\r\n\r\n    source = src;\r\n  }\r\n\r\n  var params = Object.create(null);\r\n  var rangeTransport = null,\r\n      worker = null;\r\n\r\n  for (var key in source) {\r\n    if (key === \"url\" && typeof window !== \"undefined\") {\r\n      params[key] = new URL(source[key], window.location).href;\r\n      continue;\r\n    } else if (key === \"range\") {\r\n      rangeTransport = source[key];\r\n      continue;\r\n    } else if (key === \"worker\") {\r\n      worker = source[key];\r\n      continue;\r\n    } else if (key === \"data\" && !(source[key] instanceof Uint8Array)) {\r\n      var pdfBytes = source[key];\r\n\r\n      if (typeof pdfBytes === \"string\") {\r\n        params[key] = (0, _util.stringToBytes)(pdfBytes);\r\n      } else if (_typeof(pdfBytes) === \"object\" && pdfBytes !== null && !isNaN(pdfBytes.length)) {\r\n        params[key] = new Uint8Array(pdfBytes);\r\n      } else if ((0, _util.isArrayBuffer)(pdfBytes)) {\r\n        params[key] = new Uint8Array(pdfBytes);\r\n      } else {\r\n        throw new Error(\"Invalid PDF binary data: either typed array, \" + \"string or array-like object is expected in the \" + \"data property.\");\r\n      }\r\n\r\n      continue;\r\n    }\r\n\r\n    params[key] = source[key];\r\n  }\r\n\r\n  params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;\r\n  params.CMapReaderFactory = params.CMapReaderFactory || DefaultCMapReaderFactory;\r\n  params.ignoreErrors = params.stopAtErrors !== true;\r\n  params.fontExtraProperties = params.fontExtraProperties === true;\r\n  params.pdfBug = params.pdfBug === true;\r\n\r\n  if (!Number.isInteger(params.maxImageSize)) {\r\n    params.maxImageSize = -1;\r\n  }\r\n\r\n  if (typeof params.isEvalSupported !== \"boolean\") {\r\n    params.isEvalSupported = true;\r\n  }\r\n\r\n  if (typeof params.disableFontFace !== \"boolean\") {\r\n    params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false;\r\n  }\r\n\r\n  if (typeof params.ownerDocument === \"undefined\") {\r\n    params.ownerDocument = globalThis.document;\r\n  }\r\n\r\n  if (typeof params.disableRange !== \"boolean\") {\r\n    params.disableRange = false;\r\n  }\r\n\r\n  if (typeof params.disableStream !== \"boolean\") {\r\n    params.disableStream = false;\r\n  }\r\n\r\n  if (typeof params.disableAutoFetch !== \"boolean\") {\r\n    params.disableAutoFetch = false;\r\n  }\r\n\r\n  (0, _util.setVerbosityLevel)(params.verbosity);\r\n\r\n  if (!worker) {\r\n    var workerParams = {\r\n      verbosity: params.verbosity,\r\n      port: _worker_options.GlobalWorkerOptions.workerPort\r\n    };\r\n    worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);\r\n    task._worker = worker;\r\n  }\r\n\r\n  var docId = task.docId;\r\n  worker.promise.then(function () {\r\n    if (task.destroyed) {\r\n      throw new Error(\"Loading aborted\");\r\n    }\r\n\r\n    var workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId);\r\n\r\n    var networkStreamPromise = new Promise(function (resolve) {\r\n      var networkStream;\r\n\r\n      if (rangeTransport) {\r\n        networkStream = new _transport_stream.PDFDataTransportStream({\r\n          length: params.length,\r\n          initialData: params.initialData,\r\n          progressiveDone: params.progressiveDone,\r\n          disableRange: params.disableRange,\r\n          disableStream: params.disableStream\r\n        }, rangeTransport);\r\n      } else if (!params.data) {\r\n        networkStream = createPDFNetworkStream({\r\n          url: params.url,\r\n          length: params.length,\r\n          httpHeaders: params.httpHeaders,\r\n          withCredentials: params.withCredentials,\r\n          rangeChunkSize: params.rangeChunkSize,\r\n          disableRange: params.disableRange,\r\n          disableStream: params.disableStream\r\n        });\r\n      }\r\n\r\n      resolve(networkStream);\r\n    });\r\n    return Promise.all([workerIdPromise, networkStreamPromise]).then(function (_ref) {\r\n      var _ref2 = _slicedToArray(_ref, 2),\r\n          workerId = _ref2[0],\r\n          networkStream = _ref2[1];\r\n\r\n      if (task.destroyed) {\r\n        throw new Error(\"Loading aborted\");\r\n      }\r\n\r\n      var messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);\r\n      messageHandler.postMessageTransfers = worker.postMessageTransfers;\r\n      var transport = new WorkerTransport(messageHandler, task, networkStream, params);\r\n      task._transport = transport;\r\n      messageHandler.send(\"Ready\", null);\r\n    });\r\n  })[\"catch\"](task._capability.reject);\r\n  return task;\r\n}\r\n\r\nfunction _fetchDocument(worker, source, pdfDataRangeTransport, docId) {\r\n  if (worker.destroyed) {\r\n    return Promise.reject(new Error(\"Worker was destroyed\"));\r\n  }\r\n\r\n  if (pdfDataRangeTransport) {\r\n    source.length = pdfDataRangeTransport.length;\r\n    source.initialData = pdfDataRangeTransport.initialData;\r\n    source.progressiveDone = pdfDataRangeTransport.progressiveDone;\r\n  }\r\n\r\n  return worker.messageHandler.sendWithPromise(\"GetDocRequest\", {\r\n    docId: docId,\r\n    apiVersion: '2.8.57',\r\n    source: {\r\n      data: source.data,\r\n      url: source.url,\r\n      password: source.password,\r\n      disableAutoFetch: source.disableAutoFetch,\r\n      rangeChunkSize: source.rangeChunkSize,\r\n      length: source.length\r\n    },\r\n    maxImageSize: source.maxImageSize,\r\n    disableFontFace: source.disableFontFace,\r\n    postMessageTransfers: worker.postMessageTransfers,\r\n    docBaseUrl: source.docBaseUrl,\r\n    ignoreErrors: source.ignoreErrors,\r\n    isEvalSupported: source.isEvalSupported,\r\n    fontExtraProperties: source.fontExtraProperties\r\n  }).then(function (workerId) {\r\n    if (worker.destroyed) {\r\n      throw new Error(\"Worker was destroyed\");\r\n    }\r\n\r\n    return workerId;\r\n  });\r\n}\r\n\r\nvar PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() {\r\n  var nextDocumentId = 0;\r\n\r\n  var PDFDocumentLoadingTask = /*#__PURE__*/function () {\r\n    function PDFDocumentLoadingTask() {\r\n      _classCallCheck(this, PDFDocumentLoadingTask);\r\n\r\n      this._capability = (0, _util.createPromiseCapability)();\r\n      this._transport = null;\r\n      this._worker = null;\r\n      this.docId = \"d\" + nextDocumentId++;\r\n      this.destroyed = false;\r\n      this.onPassword = null;\r\n      this.onProgress = null;\r\n      this.onUnsupportedFeature = null;\r\n    }\r\n\r\n    _createClass(PDFDocumentLoadingTask, [{\r\n      key: \"promise\",\r\n      get: function get() {\r\n        return this._capability.promise;\r\n      }\r\n    }, {\r\n      key: \"destroy\",\r\n      value: function destroy() {\r\n        var _this = this;\r\n\r\n        this.destroyed = true;\r\n        var transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy();\r\n        return transportDestroyed.then(function () {\r\n          _this._transport = null;\r\n\r\n          if (_this._worker) {\r\n            _this._worker.destroy();\r\n\r\n            _this._worker = null;\r\n          }\r\n        });\r\n      }\r\n    }]);\r\n\r\n    return PDFDocumentLoadingTask;\r\n  }();\r\n\r\n  return PDFDocumentLoadingTask;\r\n}();\r\n\r\nvar PDFDataRangeTransport = /*#__PURE__*/function () {\r\n  function PDFDataRangeTransport(length, initialData) {\r\n    var progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n\r\n    _classCallCheck(this, PDFDataRangeTransport);\r\n\r\n    this.length = length;\r\n    this.initialData = initialData;\r\n    this.progressiveDone = progressiveDone;\r\n    this._rangeListeners = [];\r\n    this._progressListeners = [];\r\n    this._progressiveReadListeners = [];\r\n    this._progressiveDoneListeners = [];\r\n    this._readyCapability = (0, _util.createPromiseCapability)();\r\n  }\r\n\r\n  _createClass(PDFDataRangeTransport, [{\r\n    key: \"addRangeListener\",\r\n    value: function addRangeListener(listener) {\r\n      this._rangeListeners.push(listener);\r\n    }\r\n  }, {\r\n    key: \"addProgressListener\",\r\n    value: function addProgressListener(listener) {\r\n      this._progressListeners.push(listener);\r\n    }\r\n  }, {\r\n    key: \"addProgressiveReadListener\",\r\n    value: function addProgressiveReadListener(listener) {\r\n      this._progressiveReadListeners.push(listener);\r\n    }\r\n  }, {\r\n    key: \"addProgressiveDoneListener\",\r\n    value: function addProgressiveDoneListener(listener) {\r\n      this._progressiveDoneListeners.push(listener);\r\n    }\r\n  }, {\r\n    key: \"onDataRange\",\r\n    value: function onDataRange(begin, chunk) {\r\n      var _iterator = _createForOfIteratorHelper(this._rangeListeners),\r\n          _step;\r\n\r\n      try {\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          var listener = _step.value;\r\n          listener(begin, chunk);\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"onDataProgress\",\r\n    value: function onDataProgress(loaded, total) {\r\n      var _this2 = this;\r\n\r\n      this._readyCapability.promise.then(function () {\r\n        var _iterator2 = _createForOfIteratorHelper(_this2._progressListeners),\r\n            _step2;\r\n\r\n        try {\r\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n            var listener = _step2.value;\r\n            listener(loaded, total);\r\n          }\r\n        } catch (err) {\r\n          _iterator2.e(err);\r\n        } finally {\r\n          _iterator2.f();\r\n        }\r\n      });\r\n    }\r\n  }, {\r\n    key: \"onDataProgressiveRead\",\r\n    value: function onDataProgressiveRead(chunk) {\r\n      var _this3 = this;\r\n\r\n      this._readyCapability.promise.then(function () {\r\n        var _iterator3 = _createForOfIteratorHelper(_this3._progressiveReadListeners),\r\n            _step3;\r\n\r\n        try {\r\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n            var listener = _step3.value;\r\n            listener(chunk);\r\n          }\r\n        } catch (err) {\r\n          _iterator3.e(err);\r\n        } finally {\r\n          _iterator3.f();\r\n        }\r\n      });\r\n    }\r\n  }, {\r\n    key: \"onDataProgressiveDone\",\r\n    value: function onDataProgressiveDone() {\r\n      var _this4 = this;\r\n\r\n      this._readyCapability.promise.then(function () {\r\n        var _iterator4 = _createForOfIteratorHelper(_this4._progressiveDoneListeners),\r\n            _step4;\r\n\r\n        try {\r\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\r\n            var listener = _step4.value;\r\n            listener();\r\n          }\r\n        } catch (err) {\r\n          _iterator4.e(err);\r\n        } finally {\r\n          _iterator4.f();\r\n        }\r\n      });\r\n    }\r\n  }, {\r\n    key: \"transportReady\",\r\n    value: function transportReady() {\r\n      this._readyCapability.resolve();\r\n    }\r\n  }, {\r\n    key: \"requestDataRange\",\r\n    value: function requestDataRange(begin, end) {\r\n      (0, _util.unreachable)(\"Abstract method PDFDataRangeTransport.requestDataRange\");\r\n    }\r\n  }, {\r\n    key: \"abort\",\r\n    value: function abort() {}\r\n  }]);\r\n\r\n  return PDFDataRangeTransport;\r\n}();\r\n\r\nexports.PDFDataRangeTransport = PDFDataRangeTransport;\r\n\r\nvar PDFDocumentProxy = /*#__PURE__*/function () {\r\n  function PDFDocumentProxy(pdfInfo, transport) {\r\n    _classCallCheck(this, PDFDocumentProxy);\r\n\r\n    this._pdfInfo = pdfInfo;\r\n    this._transport = transport;\r\n  }\r\n\r\n  _createClass(PDFDocumentProxy, [{\r\n    key: \"annotationStorage\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"annotationStorage\", new _annotation_storage.AnnotationStorage());\r\n    }\r\n  }, {\r\n    key: \"numPages\",\r\n    get: function get() {\r\n      return this._pdfInfo.numPages;\r\n    }\r\n  }, {\r\n    key: \"fingerprint\",\r\n    get: function get() {\r\n      return this._pdfInfo.fingerprint;\r\n    }\r\n  }, {\r\n    key: \"getPage\",\r\n    value: function getPage(pageNumber) {\r\n      return this._transport.getPage(pageNumber);\r\n    }\r\n  }, {\r\n    key: \"getPageIndex\",\r\n    value: function getPageIndex(ref) {\r\n      return this._transport.getPageIndex(ref);\r\n    }\r\n  }, {\r\n    key: \"getDestinations\",\r\n    value: function getDestinations() {\r\n      return this._transport.getDestinations();\r\n    }\r\n  }, {\r\n    key: \"getDestination\",\r\n    value: function getDestination(id) {\r\n      return this._transport.getDestination(id);\r\n    }\r\n  }, {\r\n    key: \"getPageLabels\",\r\n    value: function getPageLabels() {\r\n      return this._transport.getPageLabels();\r\n    }\r\n  }, {\r\n    key: \"getPageLayout\",\r\n    value: function getPageLayout() {\r\n      return this._transport.getPageLayout();\r\n    }\r\n  }, {\r\n    key: \"getPageMode\",\r\n    value: function getPageMode() {\r\n      return this._transport.getPageMode();\r\n    }\r\n  }, {\r\n    key: \"getViewerPreferences\",\r\n    value: function getViewerPreferences() {\r\n      return this._transport.getViewerPreferences();\r\n    }\r\n  }, {\r\n    key: \"getOpenAction\",\r\n    value: function getOpenAction() {\r\n      return this._transport.getOpenAction();\r\n    }\r\n  }, {\r\n    key: \"getAttachments\",\r\n    value: function getAttachments() {\r\n      return this._transport.getAttachments();\r\n    }\r\n  }, {\r\n    key: \"getJavaScript\",\r\n    value: function getJavaScript() {\r\n      return this._transport.getJavaScript();\r\n    }\r\n  }, {\r\n    key: \"getJSActions\",\r\n    value: function getJSActions() {\r\n      return this._transport.getDocJSActions();\r\n    }\r\n  }, {\r\n    key: \"getOutline\",\r\n    value: function getOutline() {\r\n      return this._transport.getOutline();\r\n    }\r\n  }, {\r\n    key: \"getOptionalContentConfig\",\r\n    value: function getOptionalContentConfig() {\r\n      return this._transport.getOptionalContentConfig();\r\n    }\r\n  }, {\r\n    key: \"getPermissions\",\r\n    value: function getPermissions() {\r\n      return this._transport.getPermissions();\r\n    }\r\n  }, {\r\n    key: \"getMetadata\",\r\n    value: function getMetadata() {\r\n      return this._transport.getMetadata();\r\n    }\r\n  }, {\r\n    key: \"getMarkInfo\",\r\n    value: function getMarkInfo() {\r\n      return this._transport.getMarkInfo();\r\n    }\r\n  }, {\r\n    key: \"getData\",\r\n    value: function getData() {\r\n      return this._transport.getData();\r\n    }\r\n  }, {\r\n    key: \"getDownloadInfo\",\r\n    value: function getDownloadInfo() {\r\n      return this._transport.downloadInfoCapability.promise;\r\n    }\r\n  }, {\r\n    key: \"getStats\",\r\n    value: function getStats() {\r\n      return this._transport.getStats();\r\n    }\r\n  }, {\r\n    key: \"cleanup\",\r\n    value: function cleanup() {\r\n      return this._transport.startCleanup();\r\n    }\r\n  }, {\r\n    key: \"destroy\",\r\n    value: function destroy() {\r\n      return this.loadingTask.destroy();\r\n    }\r\n  }, {\r\n    key: \"loadingParams\",\r\n    get: function get() {\r\n      return this._transport.loadingParams;\r\n    }\r\n  }, {\r\n    key: \"loadingTask\",\r\n    get: function get() {\r\n      return this._transport.loadingTask;\r\n    }\r\n  }, {\r\n    key: \"saveDocument\",\r\n    value: function saveDocument(annotationStorage) {\r\n      return this._transport.saveDocument(annotationStorage);\r\n    }\r\n  }, {\r\n    key: \"getFieldObjects\",\r\n    value: function getFieldObjects() {\r\n      return this._transport.getFieldObjects();\r\n    }\r\n  }, {\r\n    key: \"hasJSActions\",\r\n    value: function hasJSActions() {\r\n      return this._transport.hasJSActions();\r\n    }\r\n  }, {\r\n    key: \"getCalculationOrderIds\",\r\n    value: function getCalculationOrderIds() {\r\n      return this._transport.getCalculationOrderIds();\r\n    }\r\n  }]);\r\n\r\n  return PDFDocumentProxy;\r\n}();\r\n\r\nexports.PDFDocumentProxy = PDFDocumentProxy;\r\n\r\nvar PDFPageProxy = /*#__PURE__*/function () {\r\n  function PDFPageProxy(pageIndex, pageInfo, transport, ownerDocument) {\r\n    var pdfBug = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\r\n\r\n    _classCallCheck(this, PDFPageProxy);\r\n\r\n    this._pageIndex = pageIndex;\r\n    this._pageInfo = pageInfo;\r\n    this._ownerDocument = ownerDocument;\r\n    this._transport = transport;\r\n    this._stats = pdfBug ? new _display_utils.StatTimer() : null;\r\n    this._pdfBug = pdfBug;\r\n    this.commonObjs = transport.commonObjs;\r\n    this.objs = new PDFObjects();\r\n    this.cleanupAfterRender = false;\r\n    this.pendingCleanup = false;\r\n    this._intentStates = new Map();\r\n    this.destroyed = false;\r\n  }\r\n\r\n  _createClass(PDFPageProxy, [{\r\n    key: \"pageNumber\",\r\n    get: function get() {\r\n      return this._pageIndex + 1;\r\n    }\r\n  }, {\r\n    key: \"rotate\",\r\n    get: function get() {\r\n      return this._pageInfo.rotate;\r\n    }\r\n  }, {\r\n    key: \"ref\",\r\n    get: function get() {\r\n      return this._pageInfo.ref;\r\n    }\r\n  }, {\r\n    key: \"userUnit\",\r\n    get: function get() {\r\n      return this._pageInfo.userUnit;\r\n    }\r\n  }, {\r\n    key: \"view\",\r\n    get: function get() {\r\n      return this._pageInfo.view;\r\n    }\r\n  }, {\r\n    key: \"getViewport\",\r\n    value: function getViewport() {\r\n      var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\r\n          scale = _ref3.scale,\r\n          _ref3$rotation = _ref3.rotation,\r\n          rotation = _ref3$rotation === void 0 ? this.rotate : _ref3$rotation,\r\n          _ref3$offsetX = _ref3.offsetX,\r\n          offsetX = _ref3$offsetX === void 0 ? 0 : _ref3$offsetX,\r\n          _ref3$offsetY = _ref3.offsetY,\r\n          offsetY = _ref3$offsetY === void 0 ? 0 : _ref3$offsetY,\r\n          _ref3$dontFlip = _ref3.dontFlip,\r\n          dontFlip = _ref3$dontFlip === void 0 ? false : _ref3$dontFlip;\r\n\r\n      return new _display_utils.PageViewport({\r\n        viewBox: this.view,\r\n        scale: scale,\r\n        rotation: rotation,\r\n        offsetX: offsetX,\r\n        offsetY: offsetY,\r\n        dontFlip: dontFlip\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getAnnotations\",\r\n    value: function getAnnotations() {\r\n      var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\r\n          _ref4$intent = _ref4.intent,\r\n          intent = _ref4$intent === void 0 ? null : _ref4$intent;\r\n\r\n      if (!this.annotationsPromise || this.annotationsIntent !== intent) {\r\n        this.annotationsPromise = this._transport.getAnnotations(this._pageIndex, intent);\r\n        this.annotationsIntent = intent;\r\n      }\r\n\r\n      return this.annotationsPromise;\r\n    }\r\n  }, {\r\n    key: \"getJSActions\",\r\n    value: function getJSActions() {\r\n      return this._jsActionsPromise || (this._jsActionsPromise = this._transport.getPageJSActions(this._pageIndex));\r\n    }\r\n  }, {\r\n    key: \"render\",\r\n    value: function render(_ref5) {\r\n      var _this5 = this;\r\n\r\n      var canvasContext = _ref5.canvasContext,\r\n          viewport = _ref5.viewport,\r\n          _ref5$intent = _ref5.intent,\r\n          intent = _ref5$intent === void 0 ? \"display\" : _ref5$intent,\r\n          _ref5$enableWebGL = _ref5.enableWebGL,\r\n          enableWebGL = _ref5$enableWebGL === void 0 ? false : _ref5$enableWebGL,\r\n          _ref5$renderInteracti = _ref5.renderInteractiveForms,\r\n          renderInteractiveForms = _ref5$renderInteracti === void 0 ? false : _ref5$renderInteracti,\r\n          _ref5$transform = _ref5.transform,\r\n          transform = _ref5$transform === void 0 ? null : _ref5$transform,\r\n          _ref5$imageLayer = _ref5.imageLayer,\r\n          imageLayer = _ref5$imageLayer === void 0 ? null : _ref5$imageLayer,\r\n          _ref5$canvasFactory = _ref5.canvasFactory,\r\n          canvasFactory = _ref5$canvasFactory === void 0 ? null : _ref5$canvasFactory,\r\n          _ref5$background = _ref5.background,\r\n          background = _ref5$background === void 0 ? null : _ref5$background,\r\n          _ref5$annotationStora = _ref5.annotationStorage,\r\n          annotationStorage = _ref5$annotationStora === void 0 ? null : _ref5$annotationStora,\r\n          _ref5$optionalContent = _ref5.optionalContentConfigPromise,\r\n          optionalContentConfigPromise = _ref5$optionalContent === void 0 ? null : _ref5$optionalContent;\r\n\r\n      if (this._stats) {\r\n        this._stats.time(\"Overall\");\r\n      }\r\n\r\n      var renderingIntent = intent === \"print\" ? \"print\" : \"display\";\r\n      this.pendingCleanup = false;\r\n\r\n      if (!optionalContentConfigPromise) {\r\n        optionalContentConfigPromise = this._transport.getOptionalContentConfig();\r\n      }\r\n\r\n      var intentState = this._intentStates.get(renderingIntent);\r\n\r\n      if (!intentState) {\r\n        intentState = Object.create(null);\r\n\r\n        this._intentStates.set(renderingIntent, intentState);\r\n      }\r\n\r\n      if (intentState.streamReaderCancelTimeout) {\r\n        clearTimeout(intentState.streamReaderCancelTimeout);\r\n        intentState.streamReaderCancelTimeout = null;\r\n      }\r\n\r\n      var canvasFactoryInstance = canvasFactory || new DefaultCanvasFactory({\r\n        ownerDocument: this._ownerDocument\r\n      });\r\n      var webGLContext = new _webgl.WebGLContext({\r\n        enable: enableWebGL\r\n      });\r\n\r\n      if (!intentState.displayReadyCapability) {\r\n        intentState.displayReadyCapability = (0, _util.createPromiseCapability)();\r\n        intentState.operatorList = {\r\n          fnArray: [],\r\n          argsArray: [],\r\n          lastChunk: false\r\n        };\r\n\r\n        if (this._stats) {\r\n          this._stats.time(\"Page Request\");\r\n        }\r\n\r\n        this._pumpOperatorList({\r\n          pageIndex: this._pageIndex,\r\n          intent: renderingIntent,\r\n          renderInteractiveForms: renderInteractiveForms === true,\r\n          annotationStorage: (annotationStorage === null || annotationStorage === void 0 ? void 0 : annotationStorage.getAll()) || null\r\n        });\r\n      }\r\n\r\n      var complete = function complete(error) {\r\n        var i = intentState.renderTasks.indexOf(internalRenderTask);\r\n\r\n        if (i >= 0) {\r\n          intentState.renderTasks.splice(i, 1);\r\n        }\r\n\r\n        if (_this5.cleanupAfterRender || renderingIntent === \"print\") {\r\n          _this5.pendingCleanup = true;\r\n        }\r\n\r\n        _this5._tryCleanup();\r\n\r\n        if (error) {\r\n          internalRenderTask.capability.reject(error);\r\n\r\n          _this5._abortOperatorList({\r\n            intentState: intentState,\r\n            reason: error\r\n          });\r\n        } else {\r\n          internalRenderTask.capability.resolve();\r\n        }\r\n\r\n        if (_this5._stats) {\r\n          _this5._stats.timeEnd(\"Rendering\");\r\n\r\n          _this5._stats.timeEnd(\"Overall\");\r\n        }\r\n      };\r\n\r\n      var internalRenderTask = new InternalRenderTask({\r\n        callback: complete,\r\n        params: {\r\n          canvasContext: canvasContext,\r\n          viewport: viewport,\r\n          transform: transform,\r\n          imageLayer: imageLayer,\r\n          background: background\r\n        },\r\n        objs: this.objs,\r\n        commonObjs: this.commonObjs,\r\n        operatorList: intentState.operatorList,\r\n        pageIndex: this._pageIndex,\r\n        canvasFactory: canvasFactoryInstance,\r\n        webGLContext: webGLContext,\r\n        useRequestAnimationFrame: renderingIntent !== \"print\",\r\n        pdfBug: this._pdfBug\r\n      });\r\n\r\n      if (!intentState.renderTasks) {\r\n        intentState.renderTasks = [];\r\n      }\r\n\r\n      intentState.renderTasks.push(internalRenderTask);\r\n      var renderTask = internalRenderTask.task;\r\n      Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(function (_ref6) {\r\n        var _ref7 = _slicedToArray(_ref6, 2),\r\n            transparency = _ref7[0],\r\n            optionalContentConfig = _ref7[1];\r\n\r\n        if (_this5.pendingCleanup) {\r\n          complete();\r\n          return;\r\n        }\r\n\r\n        if (_this5._stats) {\r\n          _this5._stats.time(\"Rendering\");\r\n        }\r\n\r\n        internalRenderTask.initializeGraphics({\r\n          transparency: transparency,\r\n          optionalContentConfig: optionalContentConfig\r\n        });\r\n        internalRenderTask.operatorListChanged();\r\n      })[\"catch\"](complete);\r\n      return renderTask;\r\n    }\r\n  }, {\r\n    key: \"getOperatorList\",\r\n    value: function getOperatorList() {\r\n      function operatorListChanged() {\r\n        if (intentState.operatorList.lastChunk) {\r\n          intentState.opListReadCapability.resolve(intentState.operatorList);\r\n          var i = intentState.renderTasks.indexOf(opListTask);\r\n\r\n          if (i >= 0) {\r\n            intentState.renderTasks.splice(i, 1);\r\n          }\r\n        }\r\n      }\r\n\r\n      var renderingIntent = \"oplist\";\r\n\r\n      var intentState = this._intentStates.get(renderingIntent);\r\n\r\n      if (!intentState) {\r\n        intentState = Object.create(null);\r\n\r\n        this._intentStates.set(renderingIntent, intentState);\r\n      }\r\n\r\n      var opListTask;\r\n\r\n      if (!intentState.opListReadCapability) {\r\n        opListTask = Object.create(null);\r\n        opListTask.operatorListChanged = operatorListChanged;\r\n        intentState.opListReadCapability = (0, _util.createPromiseCapability)();\r\n        intentState.renderTasks = [];\r\n        intentState.renderTasks.push(opListTask);\r\n        intentState.operatorList = {\r\n          fnArray: [],\r\n          argsArray: [],\r\n          lastChunk: false\r\n        };\r\n\r\n        if (this._stats) {\r\n          this._stats.time(\"Page Request\");\r\n        }\r\n\r\n        this._pumpOperatorList({\r\n          pageIndex: this._pageIndex,\r\n          intent: renderingIntent\r\n        });\r\n      }\r\n\r\n      return intentState.opListReadCapability.promise;\r\n    }\r\n  }, {\r\n    key: \"streamTextContent\",\r\n    value: function streamTextContent() {\r\n      var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\r\n          _ref8$normalizeWhites = _ref8.normalizeWhitespace,\r\n          normalizeWhitespace = _ref8$normalizeWhites === void 0 ? false : _ref8$normalizeWhites,\r\n          _ref8$disableCombineT = _ref8.disableCombineTextItems,\r\n          disableCombineTextItems = _ref8$disableCombineT === void 0 ? false : _ref8$disableCombineT;\r\n\r\n      var TEXT_CONTENT_CHUNK_SIZE = 100;\r\n      return this._transport.messageHandler.sendWithStream(\"GetTextContent\", {\r\n        pageIndex: this._pageIndex,\r\n        normalizeWhitespace: normalizeWhitespace === true,\r\n        combineTextItems: disableCombineTextItems !== true\r\n      }, {\r\n        highWaterMark: TEXT_CONTENT_CHUNK_SIZE,\r\n        size: function size(textContent) {\r\n          return textContent.items.length;\r\n        }\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getTextContent\",\r\n    value: function getTextContent() {\r\n      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\r\n      var readableStream = this.streamTextContent(params);\r\n      return new Promise(function (resolve, reject) {\r\n        function pump() {\r\n          reader.read().then(function (_ref9) {\r\n            var _textContent$items;\r\n\r\n            var value = _ref9.value,\r\n                done = _ref9.done;\r\n\r\n            if (done) {\r\n              resolve(textContent);\r\n              return;\r\n            }\r\n\r\n            Object.assign(textContent.styles, value.styles);\r\n\r\n            (_textContent$items = textContent.items).push.apply(_textContent$items, _toConsumableArray(value.items));\r\n\r\n            pump();\r\n          }, reject);\r\n        }\r\n\r\n        var reader = readableStream.getReader();\r\n        var textContent = {\r\n          items: [],\r\n          styles: Object.create(null)\r\n        };\r\n        pump();\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_destroy\",\r\n    value: function _destroy() {\r\n      this.destroyed = true;\r\n      this._transport.pageCache[this._pageIndex] = null;\r\n      var waitOn = [];\r\n\r\n      var _iterator5 = _createForOfIteratorHelper(this._intentStates),\r\n          _step5;\r\n\r\n      try {\r\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\r\n          var _step5$value = _slicedToArray(_step5.value, 2),\r\n              intent = _step5$value[0],\r\n              intentState = _step5$value[1];\r\n\r\n          this._abortOperatorList({\r\n            intentState: intentState,\r\n            reason: new Error(\"Page was destroyed.\"),\r\n            force: true\r\n          });\r\n\r\n          if (intent === \"oplist\") {\r\n            continue;\r\n          }\r\n\r\n          var _iterator6 = _createForOfIteratorHelper(intentState.renderTasks),\r\n              _step6;\r\n\r\n          try {\r\n            for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\r\n              var internalRenderTask = _step6.value;\r\n              waitOn.push(internalRenderTask.completed);\r\n              internalRenderTask.cancel();\r\n            }\r\n          } catch (err) {\r\n            _iterator6.e(err);\r\n          } finally {\r\n            _iterator6.f();\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator5.e(err);\r\n      } finally {\r\n        _iterator5.f();\r\n      }\r\n\r\n      this.objs.clear();\r\n      this.annotationsPromise = null;\r\n      this._jsActionsPromise = null;\r\n      this.pendingCleanup = false;\r\n      return Promise.all(waitOn);\r\n    }\r\n  }, {\r\n    key: \"cleanup\",\r\n    value: function cleanup() {\r\n      var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n      this.pendingCleanup = true;\r\n      return this._tryCleanup(resetStats);\r\n    }\r\n  }, {\r\n    key: \"_tryCleanup\",\r\n    value: function _tryCleanup() {\r\n      var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n\r\n      if (!this.pendingCleanup) {\r\n        return false;\r\n      }\r\n\r\n      var _iterator7 = _createForOfIteratorHelper(this._intentStates.values()),\r\n          _step7;\r\n\r\n      try {\r\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\r\n          var _step7$value = _step7.value,\r\n              renderTasks = _step7$value.renderTasks,\r\n              operatorList = _step7$value.operatorList;\r\n\r\n          if (renderTasks.length !== 0 || !operatorList.lastChunk) {\r\n            return false;\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator7.e(err);\r\n      } finally {\r\n        _iterator7.f();\r\n      }\r\n\r\n      this._intentStates.clear();\r\n\r\n      this.objs.clear();\r\n      this.annotationsPromise = null;\r\n      this._jsActionsPromise = null;\r\n\r\n      if (resetStats && this._stats) {\r\n        this._stats = new _display_utils.StatTimer();\r\n      }\r\n\r\n      this.pendingCleanup = false;\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"_startRenderPage\",\r\n    value: function _startRenderPage(transparency, intent) {\r\n      var intentState = this._intentStates.get(intent);\r\n\r\n      if (!intentState) {\r\n        return;\r\n      }\r\n\r\n      if (this._stats) {\r\n        this._stats.timeEnd(\"Page Request\");\r\n      }\r\n\r\n      if (intentState.displayReadyCapability) {\r\n        intentState.displayReadyCapability.resolve(transparency);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_renderPageChunk\",\r\n    value: function _renderPageChunk(operatorListChunk, intentState) {\r\n      for (var i = 0, ii = operatorListChunk.length; i < ii; i++) {\r\n        intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);\r\n        intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);\r\n      }\r\n\r\n      intentState.operatorList.lastChunk = operatorListChunk.lastChunk;\r\n\r\n      for (var _i2 = 0; _i2 < intentState.renderTasks.length; _i2++) {\r\n        intentState.renderTasks[_i2].operatorListChanged();\r\n      }\r\n\r\n      if (operatorListChunk.lastChunk) {\r\n        this._tryCleanup();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_pumpOperatorList\",\r\n    value: function _pumpOperatorList(args) {\r\n      var _this6 = this;\r\n\r\n      (0, _util.assert)(args.intent, 'PDFPageProxy._pumpOperatorList: Expected \"intent\" argument.');\r\n\r\n      var readableStream = this._transport.messageHandler.sendWithStream(\"GetOperatorList\", args);\r\n\r\n      var reader = readableStream.getReader();\r\n\r\n      var intentState = this._intentStates.get(args.intent);\r\n\r\n      intentState.streamReader = reader;\r\n\r\n      var pump = function pump() {\r\n        reader.read().then(function (_ref10) {\r\n          var value = _ref10.value,\r\n              done = _ref10.done;\r\n\r\n          if (done) {\r\n            intentState.streamReader = null;\r\n            return;\r\n          }\r\n\r\n          if (_this6._transport.destroyed) {\r\n            return;\r\n          }\r\n\r\n          _this6._renderPageChunk(value, intentState);\r\n\r\n          pump();\r\n        }, function (reason) {\r\n          intentState.streamReader = null;\r\n\r\n          if (_this6._transport.destroyed) {\r\n            return;\r\n          }\r\n\r\n          if (intentState.operatorList) {\r\n            intentState.operatorList.lastChunk = true;\r\n\r\n            for (var i = 0; i < intentState.renderTasks.length; i++) {\r\n              intentState.renderTasks[i].operatorListChanged();\r\n            }\r\n\r\n            _this6._tryCleanup();\r\n          }\r\n\r\n          if (intentState.displayReadyCapability) {\r\n            intentState.displayReadyCapability.reject(reason);\r\n          } else if (intentState.opListReadCapability) {\r\n            intentState.opListReadCapability.reject(reason);\r\n          } else {\r\n            throw reason;\r\n          }\r\n        });\r\n      };\r\n\r\n      pump();\r\n    }\r\n  }, {\r\n    key: \"_abortOperatorList\",\r\n    value: function _abortOperatorList(_ref11) {\r\n      var _this7 = this;\r\n\r\n      var intentState = _ref11.intentState,\r\n          reason = _ref11.reason,\r\n          _ref11$force = _ref11.force,\r\n          force = _ref11$force === void 0 ? false : _ref11$force;\r\n      (0, _util.assert)(reason instanceof Error || _typeof(reason) === \"object\" && reason !== null, 'PDFPageProxy._abortOperatorList: Expected \"reason\" argument.');\r\n\r\n      if (!intentState.streamReader) {\r\n        return;\r\n      }\r\n\r\n      if (!force) {\r\n        if (intentState.renderTasks.length !== 0) {\r\n          return;\r\n        }\r\n\r\n        if (reason instanceof _display_utils.RenderingCancelledException) {\r\n          intentState.streamReaderCancelTimeout = setTimeout(function () {\r\n            _this7._abortOperatorList({\r\n              intentState: intentState,\r\n              reason: reason,\r\n              force: true\r\n            });\r\n\r\n            intentState.streamReaderCancelTimeout = null;\r\n          }, RENDERING_CANCELLED_TIMEOUT);\r\n          return;\r\n        }\r\n      }\r\n\r\n      intentState.streamReader.cancel(new _util.AbortException(reason === null || reason === void 0 ? void 0 : reason.message));\r\n      intentState.streamReader = null;\r\n\r\n      if (this._transport.destroyed) {\r\n        return;\r\n      }\r\n\r\n      var _iterator8 = _createForOfIteratorHelper(this._intentStates),\r\n          _step8;\r\n\r\n      try {\r\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\r\n          var _step8$value = _slicedToArray(_step8.value, 2),\r\n              intent = _step8$value[0],\r\n              curIntentState = _step8$value[1];\r\n\r\n          if (curIntentState === intentState) {\r\n            this._intentStates[\"delete\"](intent);\r\n\r\n            break;\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator8.e(err);\r\n      } finally {\r\n        _iterator8.f();\r\n      }\r\n\r\n      this.cleanup();\r\n    }\r\n  }, {\r\n    key: \"stats\",\r\n    get: function get() {\r\n      return this._stats;\r\n    }\r\n  }]);\r\n\r\n  return PDFPageProxy;\r\n}();\r\n\r\nexports.PDFPageProxy = PDFPageProxy;\r\n\r\nvar LoopbackPort = /*#__PURE__*/function () {\r\n  function LoopbackPort() {\r\n    var defer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\r\n\r\n    _classCallCheck(this, LoopbackPort);\r\n\r\n    this._listeners = [];\r\n    this._defer = defer;\r\n    this._deferred = Promise.resolve(undefined);\r\n  }\r\n\r\n  _createClass(LoopbackPort, [{\r\n    key: \"postMessage\",\r\n    value: function postMessage(obj, transfers) {\r\n      var _this8 = this;\r\n\r\n      function cloneValue(value) {\r\n        if (_typeof(value) !== \"object\" || value === null) {\r\n          return value;\r\n        }\r\n\r\n        if (cloned.has(value)) {\r\n          return cloned.get(value);\r\n        }\r\n\r\n        var buffer, result;\r\n\r\n        if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) {\r\n          if (transfers !== null && transfers !== void 0 && transfers.includes(buffer)) {\r\n            result = new value.constructor(buffer, value.byteOffset, value.byteLength);\r\n          } else {\r\n            result = new value.constructor(value);\r\n          }\r\n\r\n          cloned.set(value, result);\r\n          return result;\r\n        }\r\n\r\n        result = Array.isArray(value) ? [] : {};\r\n        cloned.set(value, result);\r\n\r\n        for (var i in value) {\r\n          var desc = void 0,\r\n              p = value;\r\n\r\n          while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {\r\n            p = Object.getPrototypeOf(p);\r\n          }\r\n\r\n          if (typeof desc.value === \"undefined\") {\r\n            continue;\r\n          }\r\n\r\n          if (typeof desc.value === \"function\") {\r\n            if (value.hasOwnProperty && value.hasOwnProperty(i)) {\r\n              throw new Error(\"LoopbackPort.postMessage - cannot clone: \".concat(value[i]));\r\n            }\r\n\r\n            continue;\r\n          }\r\n\r\n          result[i] = cloneValue(desc.value);\r\n        }\r\n\r\n        return result;\r\n      }\r\n\r\n      if (!this._defer) {\r\n        this._listeners.forEach(function (listener) {\r\n          listener.call(_this8, {\r\n            data: obj\r\n          });\r\n        });\r\n\r\n        return;\r\n      }\r\n\r\n      var cloned = new WeakMap();\r\n      var e = {\r\n        data: cloneValue(obj)\r\n      };\r\n\r\n      this._deferred.then(function () {\r\n        _this8._listeners.forEach(function (listener) {\r\n          listener.call(_this8, e);\r\n        });\r\n      });\r\n    }\r\n  }, {\r\n    key: \"addEventListener\",\r\n    value: function addEventListener(name, listener) {\r\n      this._listeners.push(listener);\r\n    }\r\n  }, {\r\n    key: \"removeEventListener\",\r\n    value: function removeEventListener(name, listener) {\r\n      var i = this._listeners.indexOf(listener);\r\n\r\n      this._listeners.splice(i, 1);\r\n    }\r\n  }, {\r\n    key: \"terminate\",\r\n    value: function terminate() {\r\n      this._listeners.length = 0;\r\n    }\r\n  }]);\r\n\r\n  return LoopbackPort;\r\n}();\r\n\r\nexports.LoopbackPort = LoopbackPort;\r\n\r\nvar PDFWorker = function PDFWorkerClosure() {\r\n  var pdfWorkerPorts = new WeakMap();\r\n  var isWorkerDisabled = false;\r\n  var fallbackWorkerSrc;\r\n  var nextFakeWorkerId = 0;\r\n  var fakeWorkerCapability;\r\n\r\n  if (_is_node.isNodeJS && typeof require === \"function\") {\r\n    isWorkerDisabled = true;\r\n    fallbackWorkerSrc = \"./pdf.worker.js\";\r\n  } else if ((typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) === \"object\" && \"currentScript\" in document) {\r\n    var _document$currentScri;\r\n\r\n    var pdfjsFilePath = (_document$currentScri = document.currentScript) === null || _document$currentScri === void 0 ? void 0 : _document$currentScri.src;\r\n\r\n    if (pdfjsFilePath) {\r\n      fallbackWorkerSrc = pdfjsFilePath.replace(/(\\.(?:min\\.)?js)(\\?.*)?$/i, \".worker$1$2\");\r\n    }\r\n  }\r\n\r\n  function _getWorkerSrc() {\r\n    if (_worker_options.GlobalWorkerOptions.workerSrc) {\r\n      return _worker_options.GlobalWorkerOptions.workerSrc;\r\n    }\r\n\r\n    if (typeof fallbackWorkerSrc !== \"undefined\") {\r\n      if (!_is_node.isNodeJS) {\r\n        (0, _display_utils.deprecated)('No \"GlobalWorkerOptions.workerSrc\" specified.');\r\n      }\r\n\r\n      return fallbackWorkerSrc;\r\n    }\r\n\r\n    throw new Error('No \"GlobalWorkerOptions.workerSrc\" specified.');\r\n  }\r\n\r\n  function getMainThreadWorkerMessageHandler() {\r\n    var mainWorkerMessageHandler;\r\n\r\n    try {\r\n      var _globalThis$pdfjsWork;\r\n\r\n      mainWorkerMessageHandler = (_globalThis$pdfjsWork = globalThis.pdfjsWorker) === null || _globalThis$pdfjsWork === void 0 ? void 0 : _globalThis$pdfjsWork.WorkerMessageHandler;\r\n    } catch (ex) {}\r\n\r\n    return mainWorkerMessageHandler || null;\r\n  }\r\n\r\n  function setupFakeWorkerGlobal() {\r\n    if (fakeWorkerCapability) {\r\n      return fakeWorkerCapability.promise;\r\n    }\r\n\r\n    fakeWorkerCapability = (0, _util.createPromiseCapability)();\r\n\r\n    var loader = /*#__PURE__*/function () {\r\n      var _ref12 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var mainWorkerMessageHandler, worker;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();\r\n\r\n                if (!mainWorkerMessageHandler) {\r\n                  _context.next = 3;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\", mainWorkerMessageHandler);\r\n\r\n              case 3:\r\n                if (!(_is_node.isNodeJS && typeof require === \"function\")) {\r\n                  _context.next = 6;\r\n                  break;\r\n                }\r\n\r\n                worker = eval(\"require\")(_getWorkerSrc());\r\n                return _context.abrupt(\"return\", worker.WorkerMessageHandler);\r\n\r\n              case 6:\r\n                _context.next = 8;\r\n                return (0, _display_utils.loadScript)(_getWorkerSrc());\r\n\r\n              case 8:\r\n                return _context.abrupt(\"return\", window.pdfjsWorker.WorkerMessageHandler);\r\n\r\n              case 9:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee);\r\n      }));\r\n\r\n      return function loader() {\r\n        return _ref12.apply(this, arguments);\r\n      };\r\n    }();\r\n\r\n    loader().then(fakeWorkerCapability.resolve, fakeWorkerCapability.reject);\r\n    return fakeWorkerCapability.promise;\r\n  }\r\n\r\n  function createCDNWrapper(url) {\r\n    var wrapper = \"importScripts('\" + url + \"');\";\r\n    return URL.createObjectURL(new Blob([wrapper]));\r\n  }\r\n\r\n  var PDFWorker = /*#__PURE__*/function () {\r\n    function PDFWorker() {\r\n      var _ref13 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\r\n          _ref13$name = _ref13.name,\r\n          name = _ref13$name === void 0 ? null : _ref13$name,\r\n          _ref13$port = _ref13.port,\r\n          port = _ref13$port === void 0 ? null : _ref13$port,\r\n          _ref13$verbosity = _ref13.verbosity,\r\n          verbosity = _ref13$verbosity === void 0 ? (0, _util.getVerbosityLevel)() : _ref13$verbosity;\r\n\r\n      _classCallCheck(this, PDFWorker);\r\n\r\n      if (port && pdfWorkerPorts.has(port)) {\r\n        throw new Error(\"Cannot use more than one PDFWorker per port\");\r\n      }\r\n\r\n      this.name = name;\r\n      this.destroyed = false;\r\n      this.postMessageTransfers = true;\r\n      this.verbosity = verbosity;\r\n      this._readyCapability = (0, _util.createPromiseCapability)();\r\n      this._port = null;\r\n      this._webWorker = null;\r\n      this._messageHandler = null;\r\n\r\n      if (port) {\r\n        pdfWorkerPorts.set(port, this);\r\n\r\n        this._initializeFromPort(port);\r\n\r\n        return;\r\n      }\r\n\r\n      this._initialize();\r\n    }\r\n\r\n    _createClass(PDFWorker, [{\r\n      key: \"promise\",\r\n      get: function get() {\r\n        return this._readyCapability.promise;\r\n      }\r\n    }, {\r\n      key: \"port\",\r\n      get: function get() {\r\n        return this._port;\r\n      }\r\n    }, {\r\n      key: \"messageHandler\",\r\n      get: function get() {\r\n        return this._messageHandler;\r\n      }\r\n    }, {\r\n      key: \"_initializeFromPort\",\r\n      value: function _initializeFromPort(port) {\r\n        this._port = port;\r\n        this._messageHandler = new _message_handler.MessageHandler(\"main\", \"worker\", port);\r\n\r\n        this._messageHandler.on(\"ready\", function () {});\r\n\r\n        this._readyCapability.resolve();\r\n      }\r\n    }, {\r\n      key: \"_initialize\",\r\n      value: function _initialize() {\r\n        var _this9 = this;\r\n\r\n        if (typeof Worker !== \"undefined\" && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) {\r\n          var workerSrc = _getWorkerSrc();\r\n\r\n          try {\r\n            if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) {\r\n              workerSrc = createCDNWrapper(new URL(workerSrc, window.location).href);\r\n            }\r\n\r\n            var worker = new Worker(workerSrc);\r\n            var messageHandler = new _message_handler.MessageHandler(\"main\", \"worker\", worker);\r\n\r\n            var terminateEarly = function terminateEarly() {\r\n              worker.removeEventListener(\"error\", onWorkerError);\r\n              messageHandler.destroy();\r\n              worker.terminate();\r\n\r\n              if (_this9.destroyed) {\r\n                _this9._readyCapability.reject(new Error(\"Worker was destroyed\"));\r\n              } else {\r\n                _this9._setupFakeWorker();\r\n              }\r\n            };\r\n\r\n            var onWorkerError = function onWorkerError() {\r\n              if (!_this9._webWorker) {\r\n                terminateEarly();\r\n              }\r\n            };\r\n\r\n            worker.addEventListener(\"error\", onWorkerError);\r\n            messageHandler.on(\"test\", function (data) {\r\n              worker.removeEventListener(\"error\", onWorkerError);\r\n\r\n              if (_this9.destroyed) {\r\n                terminateEarly();\r\n                return;\r\n              }\r\n\r\n              if (data) {\r\n                _this9._messageHandler = messageHandler;\r\n                _this9._port = worker;\r\n                _this9._webWorker = worker;\r\n\r\n                if (!data.supportTransfers) {\r\n                  _this9.postMessageTransfers = false;\r\n                }\r\n\r\n                _this9._readyCapability.resolve();\r\n\r\n                messageHandler.send(\"configure\", {\r\n                  verbosity: _this9.verbosity\r\n                });\r\n              } else {\r\n                _this9._setupFakeWorker();\r\n\r\n                messageHandler.destroy();\r\n                worker.terminate();\r\n              }\r\n            });\r\n            messageHandler.on(\"ready\", function (data) {\r\n              worker.removeEventListener(\"error\", onWorkerError);\r\n\r\n              if (_this9.destroyed) {\r\n                terminateEarly();\r\n                return;\r\n              }\r\n\r\n              try {\r\n                sendTest();\r\n              } catch (e) {\r\n                _this9._setupFakeWorker();\r\n              }\r\n            });\r\n\r\n            var sendTest = function sendTest() {\r\n              var testObj = new Uint8Array([_this9.postMessageTransfers ? 255 : 0]);\r\n\r\n              try {\r\n                messageHandler.send(\"test\", testObj, [testObj.buffer]);\r\n              } catch (ex) {\r\n                (0, _util.warn)(\"Cannot use postMessage transfers.\");\r\n                testObj[0] = 0;\r\n                messageHandler.send(\"test\", testObj);\r\n              }\r\n            };\r\n\r\n            sendTest();\r\n            return;\r\n          } catch (e) {\r\n            (0, _util.info)(\"The worker has been disabled.\");\r\n          }\r\n        }\r\n\r\n        this._setupFakeWorker();\r\n      }\r\n    }, {\r\n      key: \"_setupFakeWorker\",\r\n      value: function _setupFakeWorker() {\r\n        var _this10 = this;\r\n\r\n        if (!isWorkerDisabled) {\r\n          (0, _util.warn)(\"Setting up fake worker.\");\r\n          isWorkerDisabled = true;\r\n        }\r\n\r\n        setupFakeWorkerGlobal().then(function (WorkerMessageHandler) {\r\n          if (_this10.destroyed) {\r\n            _this10._readyCapability.reject(new Error(\"Worker was destroyed\"));\r\n\r\n            return;\r\n          }\r\n\r\n          var port = new LoopbackPort();\r\n          _this10._port = port;\r\n          var id = \"fake\" + nextFakeWorkerId++;\r\n          var workerHandler = new _message_handler.MessageHandler(id + \"_worker\", id, port);\r\n          WorkerMessageHandler.setup(workerHandler, port);\r\n          var messageHandler = new _message_handler.MessageHandler(id, id + \"_worker\", port);\r\n          _this10._messageHandler = messageHandler;\r\n\r\n          _this10._readyCapability.resolve();\r\n\r\n          messageHandler.send(\"configure\", {\r\n            verbosity: _this10.verbosity\r\n          });\r\n        })[\"catch\"](function (reason) {\r\n          _this10._readyCapability.reject(new Error(\"Setting up fake worker failed: \\\"\".concat(reason.message, \"\\\".\")));\r\n        });\r\n      }\r\n    }, {\r\n      key: \"destroy\",\r\n      value: function destroy() {\r\n        this.destroyed = true;\r\n\r\n        if (this._webWorker) {\r\n          this._webWorker.terminate();\r\n\r\n          this._webWorker = null;\r\n        }\r\n\r\n        pdfWorkerPorts[\"delete\"](this._port);\r\n        this._port = null;\r\n\r\n        if (this._messageHandler) {\r\n          this._messageHandler.destroy();\r\n\r\n          this._messageHandler = null;\r\n        }\r\n      }\r\n    }], [{\r\n      key: \"fromPort\",\r\n      value: function fromPort(params) {\r\n        if (!params || !params.port) {\r\n          throw new Error(\"PDFWorker.fromPort - invalid method signature.\");\r\n        }\r\n\r\n        if (pdfWorkerPorts.has(params.port)) {\r\n          return pdfWorkerPorts.get(params.port);\r\n        }\r\n\r\n        return new PDFWorker(params);\r\n      }\r\n    }, {\r\n      key: \"getWorkerSrc\",\r\n      value: function getWorkerSrc() {\r\n        return _getWorkerSrc();\r\n      }\r\n    }]);\r\n\r\n    return PDFWorker;\r\n  }();\r\n\r\n  return PDFWorker;\r\n}();\r\n\r\nexports.PDFWorker = PDFWorker;\r\n\r\nvar WorkerTransport = /*#__PURE__*/function () {\r\n  function WorkerTransport(messageHandler, loadingTask, networkStream, params) {\r\n    _classCallCheck(this, WorkerTransport);\r\n\r\n    this.messageHandler = messageHandler;\r\n    this.loadingTask = loadingTask;\r\n    this.commonObjs = new PDFObjects();\r\n    this.fontLoader = new _font_loader.FontLoader({\r\n      docId: loadingTask.docId,\r\n      onUnsupportedFeature: this._onUnsupportedFeature.bind(this),\r\n      ownerDocument: params.ownerDocument\r\n    });\r\n    this._params = params;\r\n    this.CMapReaderFactory = new params.CMapReaderFactory({\r\n      baseUrl: params.cMapUrl,\r\n      isCompressed: params.cMapPacked\r\n    });\r\n    this.destroyed = false;\r\n    this.destroyCapability = null;\r\n    this._passwordCapability = null;\r\n    this._networkStream = networkStream;\r\n    this._fullReader = null;\r\n    this._lastProgress = null;\r\n    this.pageCache = [];\r\n    this.pagePromises = [];\r\n    this.downloadInfoCapability = (0, _util.createPromiseCapability)();\r\n    this.setupMessageHandler();\r\n  }\r\n\r\n  _createClass(WorkerTransport, [{\r\n    key: \"loadingTaskSettled\",\r\n    get: function get() {\r\n      return this.loadingTask._capability.settled;\r\n    }\r\n  }, {\r\n    key: \"destroy\",\r\n    value: function destroy() {\r\n      var _this11 = this;\r\n\r\n      if (this.destroyCapability) {\r\n        return this.destroyCapability.promise;\r\n      }\r\n\r\n      this.destroyed = true;\r\n      this.destroyCapability = (0, _util.createPromiseCapability)();\r\n\r\n      if (this._passwordCapability) {\r\n        this._passwordCapability.reject(new Error(\"Worker was destroyed during onPassword callback\"));\r\n      }\r\n\r\n      var waitOn = [];\r\n      this.pageCache.forEach(function (page) {\r\n        if (page) {\r\n          waitOn.push(page._destroy());\r\n        }\r\n      });\r\n      this.pageCache.length = 0;\r\n      this.pagePromises.length = 0;\r\n      var terminated = this.messageHandler.sendWithPromise(\"Terminate\", null);\r\n      waitOn.push(terminated);\r\n\r\n      if (this.loadingTaskSettled) {\r\n        var annotationStorageResetModified = this.loadingTask.promise.then(function (pdfDocument) {\r\n          if (pdfDocument.hasOwnProperty(\"annotationStorage\")) {\r\n            pdfDocument.annotationStorage.resetModified();\r\n          }\r\n        })[\"catch\"](function () {});\r\n        waitOn.push(annotationStorageResetModified);\r\n      }\r\n\r\n      Promise.all(waitOn).then(function () {\r\n        _this11.commonObjs.clear();\r\n\r\n        _this11.fontLoader.clear();\r\n\r\n        _this11._hasJSActionsPromise = null;\r\n\r\n        if (_this11._networkStream) {\r\n          _this11._networkStream.cancelAllRequests(new _util.AbortException(\"Worker was terminated.\"));\r\n        }\r\n\r\n        if (_this11.messageHandler) {\r\n          _this11.messageHandler.destroy();\r\n\r\n          _this11.messageHandler = null;\r\n        }\r\n\r\n        _this11.destroyCapability.resolve();\r\n      }, this.destroyCapability.reject);\r\n      return this.destroyCapability.promise;\r\n    }\r\n  }, {\r\n    key: \"setupMessageHandler\",\r\n    value: function setupMessageHandler() {\r\n      var _this12 = this;\r\n\r\n      var messageHandler = this.messageHandler,\r\n          loadingTask = this.loadingTask;\r\n      messageHandler.on(\"GetReader\", function (data, sink) {\r\n        (0, _util.assert)(_this12._networkStream, \"GetReader - no `IPDFStream` instance available.\");\r\n        _this12._fullReader = _this12._networkStream.getFullReader();\r\n\r\n        _this12._fullReader.onProgress = function (evt) {\r\n          _this12._lastProgress = {\r\n            loaded: evt.loaded,\r\n            total: evt.total\r\n          };\r\n        };\r\n\r\n        sink.onPull = function () {\r\n          _this12._fullReader.read().then(function (_ref14) {\r\n            var value = _ref14.value,\r\n                done = _ref14.done;\r\n\r\n            if (done) {\r\n              sink.close();\r\n              return;\r\n            }\r\n\r\n            (0, _util.assert)((0, _util.isArrayBuffer)(value), \"GetReader - expected an ArrayBuffer.\");\r\n            sink.enqueue(new Uint8Array(value), 1, [value]);\r\n          })[\"catch\"](function (reason) {\r\n            sink.error(reason);\r\n          });\r\n        };\r\n\r\n        sink.onCancel = function (reason) {\r\n          _this12._fullReader.cancel(reason);\r\n\r\n          sink.ready[\"catch\"](function (readyReason) {\r\n            if (_this12.destroyed) {\r\n              return;\r\n            }\r\n\r\n            throw readyReason;\r\n          });\r\n        };\r\n      });\r\n      messageHandler.on(\"ReaderHeadersReady\", function (data) {\r\n        var headersCapability = (0, _util.createPromiseCapability)();\r\n        var fullReader = _this12._fullReader;\r\n        fullReader.headersReady.then(function () {\r\n          if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {\r\n            if (_this12._lastProgress && loadingTask.onProgress) {\r\n              loadingTask.onProgress(_this12._lastProgress);\r\n            }\r\n\r\n            fullReader.onProgress = function (evt) {\r\n              if (loadingTask.onProgress) {\r\n                loadingTask.onProgress({\r\n                  loaded: evt.loaded,\r\n                  total: evt.total\r\n                });\r\n              }\r\n            };\r\n          }\r\n\r\n          headersCapability.resolve({\r\n            isStreamingSupported: fullReader.isStreamingSupported,\r\n            isRangeSupported: fullReader.isRangeSupported,\r\n            contentLength: fullReader.contentLength\r\n          });\r\n        }, headersCapability.reject);\r\n        return headersCapability.promise;\r\n      });\r\n      messageHandler.on(\"GetRangeReader\", function (data, sink) {\r\n        (0, _util.assert)(_this12._networkStream, \"GetRangeReader - no `IPDFStream` instance available.\");\r\n\r\n        var rangeReader = _this12._networkStream.getRangeReader(data.begin, data.end);\r\n\r\n        if (!rangeReader) {\r\n          sink.close();\r\n          return;\r\n        }\r\n\r\n        sink.onPull = function () {\r\n          rangeReader.read().then(function (_ref15) {\r\n            var value = _ref15.value,\r\n                done = _ref15.done;\r\n\r\n            if (done) {\r\n              sink.close();\r\n              return;\r\n            }\r\n\r\n            (0, _util.assert)((0, _util.isArrayBuffer)(value), \"GetRangeReader - expected an ArrayBuffer.\");\r\n            sink.enqueue(new Uint8Array(value), 1, [value]);\r\n          })[\"catch\"](function (reason) {\r\n            sink.error(reason);\r\n          });\r\n        };\r\n\r\n        sink.onCancel = function (reason) {\r\n          rangeReader.cancel(reason);\r\n          sink.ready[\"catch\"](function (readyReason) {\r\n            if (_this12.destroyed) {\r\n              return;\r\n            }\r\n\r\n            throw readyReason;\r\n          });\r\n        };\r\n      });\r\n      messageHandler.on(\"GetDoc\", function (_ref16) {\r\n        var pdfInfo = _ref16.pdfInfo;\r\n        _this12._numPages = pdfInfo.numPages;\r\n\r\n        loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, _this12));\r\n      });\r\n      messageHandler.on(\"DocException\", function (ex) {\r\n        var reason;\r\n\r\n        switch (ex.name) {\r\n          case \"PasswordException\":\r\n            reason = new _util.PasswordException(ex.message, ex.code);\r\n            break;\r\n\r\n          case \"InvalidPDFException\":\r\n            reason = new _util.InvalidPDFException(ex.message);\r\n            break;\r\n\r\n          case \"MissingPDFException\":\r\n            reason = new _util.MissingPDFException(ex.message);\r\n            break;\r\n\r\n          case \"UnexpectedResponseException\":\r\n            reason = new _util.UnexpectedResponseException(ex.message, ex.status);\r\n            break;\r\n\r\n          case \"UnknownErrorException\":\r\n            reason = new _util.UnknownErrorException(ex.message, ex.details);\r\n            break;\r\n        }\r\n\r\n        if (!(reason instanceof Error)) {\r\n          var msg = \"DocException - expected a valid Error.\";\r\n          (0, _util.warn)(msg);\r\n        }\r\n\r\n        loadingTask._capability.reject(reason);\r\n      });\r\n      messageHandler.on(\"PasswordRequest\", function (exception) {\r\n        _this12._passwordCapability = (0, _util.createPromiseCapability)();\r\n\r\n        if (loadingTask.onPassword) {\r\n          var updatePassword = function updatePassword(password) {\r\n            _this12._passwordCapability.resolve({\r\n              password: password\r\n            });\r\n          };\r\n\r\n          try {\r\n            loadingTask.onPassword(updatePassword, exception.code);\r\n          } catch (ex) {\r\n            _this12._passwordCapability.reject(ex);\r\n          }\r\n        } else {\r\n          _this12._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));\r\n        }\r\n\r\n        return _this12._passwordCapability.promise;\r\n      });\r\n      messageHandler.on(\"DataLoaded\", function (data) {\r\n        if (loadingTask.onProgress) {\r\n          loadingTask.onProgress({\r\n            loaded: data.length,\r\n            total: data.length\r\n          });\r\n        }\r\n\r\n        _this12.downloadInfoCapability.resolve(data);\r\n      });\r\n      messageHandler.on(\"StartRenderPage\", function (data) {\r\n        if (_this12.destroyed) {\r\n          return;\r\n        }\r\n\r\n        var page = _this12.pageCache[data.pageIndex];\r\n\r\n        page._startRenderPage(data.transparency, data.intent);\r\n      });\r\n      messageHandler.on(\"commonobj\", function (data) {\r\n        var _globalThis$FontInspe;\r\n\r\n        if (_this12.destroyed) {\r\n          return;\r\n        }\r\n\r\n        var _data = _slicedToArray(data, 3),\r\n            id = _data[0],\r\n            type = _data[1],\r\n            exportedData = _data[2];\r\n\r\n        if (_this12.commonObjs.has(id)) {\r\n          return;\r\n        }\r\n\r\n        switch (type) {\r\n          case \"Font\":\r\n            var params = _this12._params;\r\n\r\n            if (\"error\" in exportedData) {\r\n              var exportedError = exportedData.error;\r\n              (0, _util.warn)(\"Error during font loading: \".concat(exportedError));\r\n\r\n              _this12.commonObjs.resolve(id, exportedError);\r\n\r\n              break;\r\n            }\r\n\r\n            var fontRegistry = null;\r\n\r\n            if (params.pdfBug && (_globalThis$FontInspe = globalThis.FontInspector) !== null && _globalThis$FontInspe !== void 0 && _globalThis$FontInspe.enabled) {\r\n              fontRegistry = {\r\n                registerFont: function registerFont(font, url) {\r\n                  globalThis.FontInspector.fontAdded(font, url);\r\n                }\r\n              };\r\n            }\r\n\r\n            var font = new _font_loader.FontFaceObject(exportedData, {\r\n              isEvalSupported: params.isEvalSupported,\r\n              disableFontFace: params.disableFontFace,\r\n              ignoreErrors: params.ignoreErrors,\r\n              onUnsupportedFeature: _this12._onUnsupportedFeature.bind(_this12),\r\n              fontRegistry: fontRegistry\r\n            });\r\n\r\n            _this12.fontLoader.bind(font)[\"catch\"](function (reason) {\r\n              return messageHandler.sendWithPromise(\"FontFallback\", {\r\n                id: id\r\n              });\r\n            })[\"finally\"](function () {\r\n              if (!params.fontExtraProperties && font.data) {\r\n                font.data = null;\r\n              }\r\n\r\n              _this12.commonObjs.resolve(id, font);\r\n            });\r\n\r\n            break;\r\n\r\n          case \"FontPath\":\r\n          case \"Image\":\r\n            _this12.commonObjs.resolve(id, exportedData);\r\n\r\n            break;\r\n\r\n          default:\r\n            throw new Error(\"Got unknown common object type \".concat(type));\r\n        }\r\n      });\r\n      messageHandler.on(\"obj\", function (data) {\r\n        var _imageData$data;\r\n\r\n        if (_this12.destroyed) {\r\n          return undefined;\r\n        }\r\n\r\n        var _data2 = _slicedToArray(data, 4),\r\n            id = _data2[0],\r\n            pageIndex = _data2[1],\r\n            type = _data2[2],\r\n            imageData = _data2[3];\r\n\r\n        var pageProxy = _this12.pageCache[pageIndex];\r\n\r\n        if (pageProxy.objs.has(id)) {\r\n          return undefined;\r\n        }\r\n\r\n        switch (type) {\r\n          case \"Image\":\r\n            pageProxy.objs.resolve(id, imageData);\r\n            var MAX_IMAGE_SIZE_TO_STORE = 8000000;\r\n\r\n            if ((imageData === null || imageData === void 0 ? void 0 : (_imageData$data = imageData.data) === null || _imageData$data === void 0 ? void 0 : _imageData$data.length) > MAX_IMAGE_SIZE_TO_STORE) {\r\n              pageProxy.cleanupAfterRender = true;\r\n            }\r\n\r\n            break;\r\n\r\n          default:\r\n            throw new Error(\"Got unknown object type \".concat(type));\r\n        }\r\n\r\n        return undefined;\r\n      });\r\n      messageHandler.on(\"DocProgress\", function (data) {\r\n        if (_this12.destroyed) {\r\n          return;\r\n        }\r\n\r\n        if (loadingTask.onProgress) {\r\n          loadingTask.onProgress({\r\n            loaded: data.loaded,\r\n            total: data.total\r\n          });\r\n        }\r\n      });\r\n      messageHandler.on(\"UnsupportedFeature\", this._onUnsupportedFeature.bind(this));\r\n      messageHandler.on(\"FetchBuiltInCMap\", function (data, sink) {\r\n        if (_this12.destroyed) {\r\n          sink.error(new Error(\"Worker was destroyed\"));\r\n          return;\r\n        }\r\n\r\n        var fetched = false;\r\n\r\n        sink.onPull = function () {\r\n          if (fetched) {\r\n            sink.close();\r\n            return;\r\n          }\r\n\r\n          fetched = true;\r\n\r\n          _this12.CMapReaderFactory.fetch(data).then(function (builtInCMap) {\r\n            sink.enqueue(builtInCMap, 1, [builtInCMap.cMapData.buffer]);\r\n          })[\"catch\"](function (reason) {\r\n            sink.error(reason);\r\n          });\r\n        };\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_onUnsupportedFeature\",\r\n    value: function _onUnsupportedFeature(_ref17) {\r\n      var featureId = _ref17.featureId;\r\n\r\n      if (this.destroyed) {\r\n        return;\r\n      }\r\n\r\n      if (this.loadingTask.onUnsupportedFeature) {\r\n        this.loadingTask.onUnsupportedFeature(featureId);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getData\",\r\n    value: function getData() {\r\n      return this.messageHandler.sendWithPromise(\"GetData\", null);\r\n    }\r\n  }, {\r\n    key: \"getPage\",\r\n    value: function getPage(pageNumber) {\r\n      var _this13 = this;\r\n\r\n      if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {\r\n        return Promise.reject(new Error(\"Invalid page request\"));\r\n      }\r\n\r\n      var pageIndex = pageNumber - 1;\r\n\r\n      if (pageIndex in this.pagePromises) {\r\n        return this.pagePromises[pageIndex];\r\n      }\r\n\r\n      var promise = this.messageHandler.sendWithPromise(\"GetPage\", {\r\n        pageIndex: pageIndex\r\n      }).then(function (pageInfo) {\r\n        if (_this13.destroyed) {\r\n          throw new Error(\"Transport destroyed\");\r\n        }\r\n\r\n        var page = new PDFPageProxy(pageIndex, pageInfo, _this13, _this13._params.ownerDocument, _this13._params.pdfBug);\r\n        _this13.pageCache[pageIndex] = page;\r\n        return page;\r\n      });\r\n      this.pagePromises[pageIndex] = promise;\r\n      return promise;\r\n    }\r\n  }, {\r\n    key: \"getPageIndex\",\r\n    value: function getPageIndex(ref) {\r\n      return this.messageHandler.sendWithPromise(\"GetPageIndex\", {\r\n        ref: ref\r\n      })[\"catch\"](function (reason) {\r\n        return Promise.reject(new Error(reason));\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getAnnotations\",\r\n    value: function getAnnotations(pageIndex, intent) {\r\n      return this.messageHandler.sendWithPromise(\"GetAnnotations\", {\r\n        pageIndex: pageIndex,\r\n        intent: intent\r\n      });\r\n    }\r\n  }, {\r\n    key: \"saveDocument\",\r\n    value: function saveDocument(annotationStorage) {\r\n      var _this$_fullReader$fil, _this$_fullReader;\r\n\r\n      return this.messageHandler.sendWithPromise(\"SaveDocument\", {\r\n        numPages: this._numPages,\r\n        annotationStorage: (annotationStorage === null || annotationStorage === void 0 ? void 0 : annotationStorage.getAll()) || null,\r\n        filename: (_this$_fullReader$fil = (_this$_fullReader = this._fullReader) === null || _this$_fullReader === void 0 ? void 0 : _this$_fullReader.filename) !== null && _this$_fullReader$fil !== void 0 ? _this$_fullReader$fil : null\r\n      })[\"finally\"](function () {\r\n        if (annotationStorage) {\r\n          annotationStorage.resetModified();\r\n        }\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getFieldObjects\",\r\n    value: function getFieldObjects() {\r\n      return this.messageHandler.sendWithPromise(\"GetFieldObjects\", null);\r\n    }\r\n  }, {\r\n    key: \"hasJSActions\",\r\n    value: function hasJSActions() {\r\n      return this._hasJSActionsPromise || (this._hasJSActionsPromise = this.messageHandler.sendWithPromise(\"HasJSActions\", null));\r\n    }\r\n  }, {\r\n    key: \"getCalculationOrderIds\",\r\n    value: function getCalculationOrderIds() {\r\n      return this.messageHandler.sendWithPromise(\"GetCalculationOrderIds\", null);\r\n    }\r\n  }, {\r\n    key: \"getDestinations\",\r\n    value: function getDestinations() {\r\n      return this.messageHandler.sendWithPromise(\"GetDestinations\", null);\r\n    }\r\n  }, {\r\n    key: \"getDestination\",\r\n    value: function getDestination(id) {\r\n      if (typeof id !== \"string\") {\r\n        return Promise.reject(new Error(\"Invalid destination request.\"));\r\n      }\r\n\r\n      return this.messageHandler.sendWithPromise(\"GetDestination\", {\r\n        id: id\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getPageLabels\",\r\n    value: function getPageLabels() {\r\n      return this.messageHandler.sendWithPromise(\"GetPageLabels\", null);\r\n    }\r\n  }, {\r\n    key: \"getPageLayout\",\r\n    value: function getPageLayout() {\r\n      return this.messageHandler.sendWithPromise(\"GetPageLayout\", null);\r\n    }\r\n  }, {\r\n    key: \"getPageMode\",\r\n    value: function getPageMode() {\r\n      return this.messageHandler.sendWithPromise(\"GetPageMode\", null);\r\n    }\r\n  }, {\r\n    key: \"getViewerPreferences\",\r\n    value: function getViewerPreferences() {\r\n      return this.messageHandler.sendWithPromise(\"GetViewerPreferences\", null);\r\n    }\r\n  }, {\r\n    key: \"getOpenAction\",\r\n    value: function getOpenAction() {\r\n      return this.messageHandler.sendWithPromise(\"GetOpenAction\", null);\r\n    }\r\n  }, {\r\n    key: \"getAttachments\",\r\n    value: function getAttachments() {\r\n      return this.messageHandler.sendWithPromise(\"GetAttachments\", null);\r\n    }\r\n  }, {\r\n    key: \"getJavaScript\",\r\n    value: function getJavaScript() {\r\n      return this.messageHandler.sendWithPromise(\"GetJavaScript\", null);\r\n    }\r\n  }, {\r\n    key: \"getDocJSActions\",\r\n    value: function getDocJSActions() {\r\n      return this.messageHandler.sendWithPromise(\"GetDocJSActions\", null);\r\n    }\r\n  }, {\r\n    key: \"getPageJSActions\",\r\n    value: function getPageJSActions(pageIndex) {\r\n      return this.messageHandler.sendWithPromise(\"GetPageJSActions\", {\r\n        pageIndex: pageIndex\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getOutline\",\r\n    value: function getOutline() {\r\n      return this.messageHandler.sendWithPromise(\"GetOutline\", null);\r\n    }\r\n  }, {\r\n    key: \"getOptionalContentConfig\",\r\n    value: function getOptionalContentConfig() {\r\n      return this.messageHandler.sendWithPromise(\"GetOptionalContentConfig\", null).then(function (results) {\r\n        return new _optional_content_config.OptionalContentConfig(results);\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getPermissions\",\r\n    value: function getPermissions() {\r\n      return this.messageHandler.sendWithPromise(\"GetPermissions\", null);\r\n    }\r\n  }, {\r\n    key: \"getMetadata\",\r\n    value: function getMetadata() {\r\n      var _this14 = this;\r\n\r\n      return this.messageHandler.sendWithPromise(\"GetMetadata\", null).then(function (results) {\r\n        var _this14$_fullReader$f, _this14$_fullReader, _this14$_fullReader$c, _this14$_fullReader2;\r\n\r\n        return {\r\n          info: results[0],\r\n          metadata: results[1] ? new _metadata.Metadata(results[1]) : null,\r\n          contentDispositionFilename: (_this14$_fullReader$f = (_this14$_fullReader = _this14._fullReader) === null || _this14$_fullReader === void 0 ? void 0 : _this14$_fullReader.filename) !== null && _this14$_fullReader$f !== void 0 ? _this14$_fullReader$f : null,\r\n          contentLength: (_this14$_fullReader$c = (_this14$_fullReader2 = _this14._fullReader) === null || _this14$_fullReader2 === void 0 ? void 0 : _this14$_fullReader2.contentLength) !== null && _this14$_fullReader$c !== void 0 ? _this14$_fullReader$c : null\r\n        };\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getMarkInfo\",\r\n    value: function getMarkInfo() {\r\n      return this.messageHandler.sendWithPromise(\"GetMarkInfo\", null);\r\n    }\r\n  }, {\r\n    key: \"getStats\",\r\n    value: function getStats() {\r\n      return this.messageHandler.sendWithPromise(\"GetStats\", null);\r\n    }\r\n  }, {\r\n    key: \"startCleanup\",\r\n    value: function startCleanup() {\r\n      var _this15 = this;\r\n\r\n      return this.messageHandler.sendWithPromise(\"Cleanup\", null).then(function () {\r\n        for (var i = 0, ii = _this15.pageCache.length; i < ii; i++) {\r\n          var page = _this15.pageCache[i];\r\n\r\n          if (page) {\r\n            var cleanupSuccessful = page.cleanup();\r\n\r\n            if (!cleanupSuccessful) {\r\n              throw new Error(\"startCleanup: Page \".concat(i + 1, \" is currently rendering.\"));\r\n            }\r\n          }\r\n        }\r\n\r\n        _this15.commonObjs.clear();\r\n\r\n        _this15.fontLoader.clear();\r\n\r\n        _this15._hasJSActionsPromise = null;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"loadingParams\",\r\n    get: function get() {\r\n      var params = this._params;\r\n      return (0, _util.shadow)(this, \"loadingParams\", {\r\n        disableAutoFetch: params.disableAutoFetch,\r\n        disableFontFace: params.disableFontFace\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return WorkerTransport;\r\n}();\r\n\r\nvar PDFObjects = /*#__PURE__*/function () {\r\n  function PDFObjects() {\r\n    _classCallCheck(this, PDFObjects);\r\n\r\n    this._objs = Object.create(null);\r\n  }\r\n\r\n  _createClass(PDFObjects, [{\r\n    key: \"_ensureObj\",\r\n    value: function _ensureObj(objId) {\r\n      if (this._objs[objId]) {\r\n        return this._objs[objId];\r\n      }\r\n\r\n      return this._objs[objId] = {\r\n        capability: (0, _util.createPromiseCapability)(),\r\n        data: null,\r\n        resolved: false\r\n      };\r\n    }\r\n  }, {\r\n    key: \"get\",\r\n    value: function get(objId) {\r\n      var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n\r\n      if (callback) {\r\n        this._ensureObj(objId).capability.promise.then(callback);\r\n\r\n        return null;\r\n      }\r\n\r\n      var obj = this._objs[objId];\r\n\r\n      if (!obj || !obj.resolved) {\r\n        throw new Error(\"Requesting object that isn't resolved yet \".concat(objId, \".\"));\r\n      }\r\n\r\n      return obj.data;\r\n    }\r\n  }, {\r\n    key: \"has\",\r\n    value: function has(objId) {\r\n      var obj = this._objs[objId];\r\n      return (obj === null || obj === void 0 ? void 0 : obj.resolved) || false;\r\n    }\r\n  }, {\r\n    key: \"resolve\",\r\n    value: function resolve(objId, data) {\r\n      var obj = this._ensureObj(objId);\r\n\r\n      obj.resolved = true;\r\n      obj.data = data;\r\n      obj.capability.resolve(data);\r\n    }\r\n  }, {\r\n    key: \"clear\",\r\n    value: function clear() {\r\n      this._objs = Object.create(null);\r\n    }\r\n  }]);\r\n\r\n  return PDFObjects;\r\n}();\r\n\r\nvar RenderTask = /*#__PURE__*/function () {\r\n  function RenderTask(internalRenderTask) {\r\n    _classCallCheck(this, RenderTask);\r\n\r\n    this._internalRenderTask = internalRenderTask;\r\n    this.onContinue = null;\r\n  }\r\n\r\n  _createClass(RenderTask, [{\r\n    key: \"promise\",\r\n    get: function get() {\r\n      return this._internalRenderTask.capability.promise;\r\n    }\r\n  }, {\r\n    key: \"cancel\",\r\n    value: function cancel() {\r\n      this._internalRenderTask.cancel();\r\n    }\r\n  }]);\r\n\r\n  return RenderTask;\r\n}();\r\n\r\nvar InternalRenderTask = function InternalRenderTaskClosure() {\r\n  var canvasInRendering = new WeakSet();\r\n\r\n  var InternalRenderTask = /*#__PURE__*/function () {\r\n    function InternalRenderTask(_ref18) {\r\n      var callback = _ref18.callback,\r\n          params = _ref18.params,\r\n          objs = _ref18.objs,\r\n          commonObjs = _ref18.commonObjs,\r\n          operatorList = _ref18.operatorList,\r\n          pageIndex = _ref18.pageIndex,\r\n          canvasFactory = _ref18.canvasFactory,\r\n          webGLContext = _ref18.webGLContext,\r\n          _ref18$useRequestAnim = _ref18.useRequestAnimationFrame,\r\n          useRequestAnimationFrame = _ref18$useRequestAnim === void 0 ? false : _ref18$useRequestAnim,\r\n          _ref18$pdfBug = _ref18.pdfBug,\r\n          pdfBug = _ref18$pdfBug === void 0 ? false : _ref18$pdfBug;\r\n\r\n      _classCallCheck(this, InternalRenderTask);\r\n\r\n      this.callback = callback;\r\n      this.params = params;\r\n      this.objs = objs;\r\n      this.commonObjs = commonObjs;\r\n      this.operatorListIdx = null;\r\n      this.operatorList = operatorList;\r\n      this._pageIndex = pageIndex;\r\n      this.canvasFactory = canvasFactory;\r\n      this.webGLContext = webGLContext;\r\n      this._pdfBug = pdfBug;\r\n      this.running = false;\r\n      this.graphicsReadyCallback = null;\r\n      this.graphicsReady = false;\r\n      this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== \"undefined\";\r\n      this.cancelled = false;\r\n      this.capability = (0, _util.createPromiseCapability)();\r\n      this.task = new RenderTask(this);\r\n      this._continueBound = this._continue.bind(this);\r\n      this._scheduleNextBound = this._scheduleNext.bind(this);\r\n      this._nextBound = this._next.bind(this);\r\n      this._canvas = params.canvasContext.canvas;\r\n    }\r\n\r\n    _createClass(InternalRenderTask, [{\r\n      key: \"completed\",\r\n      get: function get() {\r\n        return this.capability.promise[\"catch\"](function () {});\r\n      }\r\n    }, {\r\n      key: \"initializeGraphics\",\r\n      value: function initializeGraphics(_ref19) {\r\n        var _globalThis$StepperMa;\r\n\r\n        var _ref19$transparency = _ref19.transparency,\r\n            transparency = _ref19$transparency === void 0 ? false : _ref19$transparency,\r\n            optionalContentConfig = _ref19.optionalContentConfig;\r\n\r\n        if (this.cancelled) {\r\n          return;\r\n        }\r\n\r\n        if (this._canvas) {\r\n          if (canvasInRendering.has(this._canvas)) {\r\n            throw new Error(\"Cannot use the same canvas during multiple render() operations. \" + \"Use different canvas or ensure previous operations were \" + \"cancelled or completed.\");\r\n          }\r\n\r\n          canvasInRendering.add(this._canvas);\r\n        }\r\n\r\n        if (this._pdfBug && (_globalThis$StepperMa = globalThis.StepperManager) !== null && _globalThis$StepperMa !== void 0 && _globalThis$StepperMa.enabled) {\r\n          this.stepper = globalThis.StepperManager.create(this._pageIndex);\r\n          this.stepper.init(this.operatorList);\r\n          this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();\r\n        }\r\n\r\n        var _this$params = this.params,\r\n            canvasContext = _this$params.canvasContext,\r\n            viewport = _this$params.viewport,\r\n            transform = _this$params.transform,\r\n            imageLayer = _this$params.imageLayer,\r\n            background = _this$params.background;\r\n        this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, imageLayer, optionalContentConfig);\r\n        this.gfx.beginDrawing({\r\n          transform: transform,\r\n          viewport: viewport,\r\n          transparency: transparency,\r\n          background: background\r\n        });\r\n        this.operatorListIdx = 0;\r\n        this.graphicsReady = true;\r\n\r\n        if (this.graphicsReadyCallback) {\r\n          this.graphicsReadyCallback();\r\n        }\r\n      }\r\n    }, {\r\n      key: \"cancel\",\r\n      value: function cancel() {\r\n        var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\r\n        this.running = false;\r\n        this.cancelled = true;\r\n\r\n        if (this.gfx) {\r\n          this.gfx.endDrawing();\r\n        }\r\n\r\n        if (this._canvas) {\r\n          canvasInRendering[\"delete\"](this._canvas);\r\n        }\r\n\r\n        this.callback(error || new _display_utils.RenderingCancelledException(\"Rendering cancelled, page \".concat(this._pageIndex + 1), \"canvas\"));\r\n      }\r\n    }, {\r\n      key: \"operatorListChanged\",\r\n      value: function operatorListChanged() {\r\n        if (!this.graphicsReady) {\r\n          if (!this.graphicsReadyCallback) {\r\n            this.graphicsReadyCallback = this._continueBound;\r\n          }\r\n\r\n          return;\r\n        }\r\n\r\n        if (this.stepper) {\r\n          this.stepper.updateOperatorList(this.operatorList);\r\n        }\r\n\r\n        if (this.running) {\r\n          return;\r\n        }\r\n\r\n        this._continue();\r\n      }\r\n    }, {\r\n      key: \"_continue\",\r\n      value: function _continue() {\r\n        this.running = true;\r\n\r\n        if (this.cancelled) {\r\n          return;\r\n        }\r\n\r\n        if (this.task.onContinue) {\r\n          this.task.onContinue(this._scheduleNextBound);\r\n        } else {\r\n          this._scheduleNext();\r\n        }\r\n      }\r\n    }, {\r\n      key: \"_scheduleNext\",\r\n      value: function _scheduleNext() {\r\n        var _this16 = this;\r\n\r\n        if (this._useRequestAnimationFrame) {\r\n          window.requestAnimationFrame(function () {\r\n            _this16._nextBound()[\"catch\"](_this16.cancel.bind(_this16));\r\n          });\r\n        } else {\r\n          Promise.resolve().then(this._nextBound)[\"catch\"](this.cancel.bind(this));\r\n        }\r\n      }\r\n    }, {\r\n      key: \"_next\",\r\n      value: function () {\r\n        var _next2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n          return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n            while (1) {\r\n              switch (_context2.prev = _context2.next) {\r\n                case 0:\r\n                  if (!this.cancelled) {\r\n                    _context2.next = 2;\r\n                    break;\r\n                  }\r\n\r\n                  return _context2.abrupt(\"return\");\r\n\r\n                case 2:\r\n                  this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);\r\n\r\n                  if (this.operatorListIdx === this.operatorList.argsArray.length) {\r\n                    this.running = false;\r\n\r\n                    if (this.operatorList.lastChunk) {\r\n                      this.gfx.endDrawing();\r\n\r\n                      if (this._canvas) {\r\n                        canvasInRendering[\"delete\"](this._canvas);\r\n                      }\r\n\r\n                      this.callback();\r\n                    }\r\n                  }\r\n\r\n                case 4:\r\n                case \"end\":\r\n                  return _context2.stop();\r\n              }\r\n            }\r\n          }, _callee2, this);\r\n        }));\r\n\r\n        function _next() {\r\n          return _next2.apply(this, arguments);\r\n        }\r\n\r\n        return _next;\r\n      }()\r\n    }]);\r\n\r\n    return InternalRenderTask;\r\n  }();\r\n\r\n  return InternalRenderTask;\r\n}();\r\n\r\nvar version = '2.8.57';\r\nexports.version = version;\r\nvar build = '3d33313e4';\r\nexports.build = build;\r\n\r\n/***/ }),\r\n/* 136 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.FontLoader = exports.FontFaceObject = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar BaseFontLoader = /*#__PURE__*/function () {\r\n  function BaseFontLoader(_ref) {\r\n    var docId = _ref.docId,\r\n        onUnsupportedFeature = _ref.onUnsupportedFeature,\r\n        _ref$ownerDocument = _ref.ownerDocument,\r\n        ownerDocument = _ref$ownerDocument === void 0 ? globalThis.document : _ref$ownerDocument;\r\n\r\n    _classCallCheck(this, BaseFontLoader);\r\n\r\n    if (this.constructor === BaseFontLoader) {\r\n      (0, _util.unreachable)(\"Cannot initialize BaseFontLoader.\");\r\n    }\r\n\r\n    this.docId = docId;\r\n    this._onUnsupportedFeature = onUnsupportedFeature;\r\n    this._document = ownerDocument;\r\n    this.nativeFontFaces = [];\r\n    this.styleElement = null;\r\n  }\r\n\r\n  _createClass(BaseFontLoader, [{\r\n    key: \"addNativeFontFace\",\r\n    value: function addNativeFontFace(nativeFontFace) {\r\n      this.nativeFontFaces.push(nativeFontFace);\r\n\r\n      this._document.fonts.add(nativeFontFace);\r\n    }\r\n  }, {\r\n    key: \"insertRule\",\r\n    value: function insertRule(rule) {\r\n      var styleElement = this.styleElement;\r\n\r\n      if (!styleElement) {\r\n        styleElement = this.styleElement = this._document.createElement(\"style\");\r\n        styleElement.id = \"PDFJS_FONT_STYLE_TAG_\".concat(this.docId);\r\n\r\n        this._document.documentElement.getElementsByTagName(\"head\")[0].appendChild(styleElement);\r\n      }\r\n\r\n      var styleSheet = styleElement.sheet;\r\n      styleSheet.insertRule(rule, styleSheet.cssRules.length);\r\n    }\r\n  }, {\r\n    key: \"clear\",\r\n    value: function clear() {\r\n      var _this = this;\r\n\r\n      this.nativeFontFaces.forEach(function (nativeFontFace) {\r\n        _this._document.fonts[\"delete\"](nativeFontFace);\r\n      });\r\n      this.nativeFontFaces.length = 0;\r\n\r\n      if (this.styleElement) {\r\n        this.styleElement.remove();\r\n        this.styleElement = null;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"bind\",\r\n    value: function () {\r\n      var _bind = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(font) {\r\n        var _this2 = this;\r\n\r\n        var nativeFontFace, rule;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                if (!(font.attached || font.missingFile)) {\r\n                  _context.next = 2;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\");\r\n\r\n              case 2:\r\n                font.attached = true;\r\n\r\n                if (!this.isFontLoadingAPISupported) {\r\n                  _context.next = 19;\r\n                  break;\r\n                }\r\n\r\n                nativeFontFace = font.createNativeFontFace();\r\n\r\n                if (!nativeFontFace) {\r\n                  _context.next = 18;\r\n                  break;\r\n                }\r\n\r\n                this.addNativeFontFace(nativeFontFace);\r\n                _context.prev = 7;\r\n                _context.next = 10;\r\n                return nativeFontFace.loaded;\r\n\r\n              case 10:\r\n                _context.next = 18;\r\n                break;\r\n\r\n              case 12:\r\n                _context.prev = 12;\r\n                _context.t0 = _context[\"catch\"](7);\r\n\r\n                this._onUnsupportedFeature({\r\n                  featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative\r\n                });\r\n\r\n                (0, _util.warn)(\"Failed to load font '\".concat(nativeFontFace.family, \"': '\").concat(_context.t0, \"'.\"));\r\n                font.disableFontFace = true;\r\n                throw _context.t0;\r\n\r\n              case 18:\r\n                return _context.abrupt(\"return\");\r\n\r\n              case 19:\r\n                rule = font.createFontFaceRule();\r\n\r\n                if (!rule) {\r\n                  _context.next = 26;\r\n                  break;\r\n                }\r\n\r\n                this.insertRule(rule);\r\n\r\n                if (!this.isSyncFontLoadingSupported) {\r\n                  _context.next = 24;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\");\r\n\r\n              case 24:\r\n                _context.next = 26;\r\n                return new Promise(function (resolve) {\r\n                  var request = _this2._queueLoadingCallback(resolve);\r\n\r\n                  _this2._prepareFontLoadEvent([rule], [font], request);\r\n                });\r\n\r\n              case 26:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this, [[7, 12]]);\r\n      }));\r\n\r\n      function bind(_x) {\r\n        return _bind.apply(this, arguments);\r\n      }\r\n\r\n      return bind;\r\n    }()\r\n  }, {\r\n    key: \"_queueLoadingCallback\",\r\n    value: function _queueLoadingCallback(callback) {\r\n      (0, _util.unreachable)(\"Abstract method `_queueLoadingCallback`.\");\r\n    }\r\n  }, {\r\n    key: \"isFontLoadingAPISupported\",\r\n    get: function get() {\r\n      var _this$_document;\r\n\r\n      return (0, _util.shadow)(this, \"isFontLoadingAPISupported\", !!((_this$_document = this._document) !== null && _this$_document !== void 0 && _this$_document.fonts));\r\n    }\r\n  }, {\r\n    key: \"isSyncFontLoadingSupported\",\r\n    get: function get() {\r\n      (0, _util.unreachable)(\"Abstract method `isSyncFontLoadingSupported`.\");\r\n    }\r\n  }, {\r\n    key: \"_loadTestFont\",\r\n    get: function get() {\r\n      (0, _util.unreachable)(\"Abstract method `_loadTestFont`.\");\r\n    }\r\n  }, {\r\n    key: \"_prepareFontLoadEvent\",\r\n    value: function _prepareFontLoadEvent(rules, fontsToLoad, request) {\r\n      (0, _util.unreachable)(\"Abstract method `_prepareFontLoadEvent`.\");\r\n    }\r\n  }]);\r\n\r\n  return BaseFontLoader;\r\n}();\r\n\r\nvar FontLoader;\r\nexports.FontLoader = FontLoader;\r\n{\r\n  exports.FontLoader = FontLoader = /*#__PURE__*/function (_BaseFontLoader) {\r\n    _inherits(GenericFontLoader, _BaseFontLoader);\r\n\r\n    var _super = _createSuper(GenericFontLoader);\r\n\r\n    function GenericFontLoader(params) {\r\n      var _this3;\r\n\r\n      _classCallCheck(this, GenericFontLoader);\r\n\r\n      _this3 = _super.call(this, params);\r\n      _this3.loadingContext = {\r\n        requests: [],\r\n        nextRequestId: 0\r\n      };\r\n      _this3.loadTestFontId = 0;\r\n      return _this3;\r\n    }\r\n\r\n    _createClass(GenericFontLoader, [{\r\n      key: \"isSyncFontLoadingSupported\",\r\n      get: function get() {\r\n        var supported = false;\r\n\r\n        if (typeof navigator === \"undefined\") {\r\n          supported = true;\r\n        } else {\r\n          var m = /Mozilla\\/5.0.*?rv:(\\d+).*? Gecko/.exec(navigator.userAgent);\r\n\r\n          if ((m === null || m === void 0 ? void 0 : m[1]) >= 14) {\r\n            supported = true;\r\n          }\r\n        }\r\n\r\n        return (0, _util.shadow)(this, \"isSyncFontLoadingSupported\", supported);\r\n      }\r\n    }, {\r\n      key: \"_queueLoadingCallback\",\r\n      value: function _queueLoadingCallback(callback) {\r\n        function completeRequest() {\r\n          (0, _util.assert)(!request.done, \"completeRequest() cannot be called twice.\");\r\n          request.done = true;\r\n\r\n          while (context.requests.length > 0 && context.requests[0].done) {\r\n            var otherRequest = context.requests.shift();\r\n            setTimeout(otherRequest.callback, 0);\r\n          }\r\n        }\r\n\r\n        var context = this.loadingContext;\r\n        var request = {\r\n          id: \"pdfjs-font-loading-\".concat(context.nextRequestId++),\r\n          done: false,\r\n          complete: completeRequest,\r\n          callback: callback\r\n        };\r\n        context.requests.push(request);\r\n        return request;\r\n      }\r\n    }, {\r\n      key: \"_loadTestFont\",\r\n      get: function get() {\r\n        var getLoadTestFont = function getLoadTestFont() {\r\n          return atob(\"T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA\" + \"FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA\" + \"ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA\" + \"AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1\" + \"AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD\" + \"6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM\" + \"AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D\" + \"IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA\" + \"AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA\" + \"AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB\" + \"AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY\" + \"AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA\" + \"AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" + \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA\" + \"AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC\" + \"AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3\" + \"Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj\" + \"FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==\");\r\n        };\r\n\r\n        return (0, _util.shadow)(this, \"_loadTestFont\", getLoadTestFont());\r\n      }\r\n    }, {\r\n      key: \"_prepareFontLoadEvent\",\r\n      value: function _prepareFontLoadEvent(rules, fonts, request) {\r\n        var _this4 = this;\r\n\r\n        function int32(data, offset) {\r\n          return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;\r\n        }\r\n\r\n        function spliceString(s, offset, remove, insert) {\r\n          var chunk1 = s.substring(0, offset);\r\n          var chunk2 = s.substring(offset + remove);\r\n          return chunk1 + insert + chunk2;\r\n        }\r\n\r\n        var i, ii;\r\n\r\n        var canvas = this._document.createElement(\"canvas\");\r\n\r\n        canvas.width = 1;\r\n        canvas.height = 1;\r\n        var ctx = canvas.getContext(\"2d\");\r\n        var called = 0;\r\n\r\n        function isFontReady(name, callback) {\r\n          called++;\r\n\r\n          if (called > 30) {\r\n            (0, _util.warn)(\"Load test font never loaded.\");\r\n            callback();\r\n            return;\r\n          }\r\n\r\n          ctx.font = \"30px \" + name;\r\n          ctx.fillText(\".\", 0, 20);\r\n          var imageData = ctx.getImageData(0, 0, 1, 1);\r\n\r\n          if (imageData.data[3] > 0) {\r\n            callback();\r\n            return;\r\n          }\r\n\r\n          setTimeout(isFontReady.bind(null, name, callback));\r\n        }\r\n\r\n        var loadTestFontId = \"lt\".concat(Date.now()).concat(this.loadTestFontId++);\r\n        var data = this._loadTestFont;\r\n        var COMMENT_OFFSET = 976;\r\n        data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);\r\n        var CFF_CHECKSUM_OFFSET = 16;\r\n        var XXXX_VALUE = 0x58585858;\r\n        var checksum = int32(data, CFF_CHECKSUM_OFFSET);\r\n\r\n        for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {\r\n          checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;\r\n        }\r\n\r\n        if (i < loadTestFontId.length) {\r\n          checksum = checksum - XXXX_VALUE + int32(loadTestFontId + \"XXX\", i) | 0;\r\n        }\r\n\r\n        data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum));\r\n        var url = \"url(data:font/opentype;base64,\".concat(btoa(data), \");\");\r\n        var rule = \"@font-face {font-family:\\\"\".concat(loadTestFontId, \"\\\";src:\").concat(url, \"}\");\r\n        this.insertRule(rule);\r\n        var names = [];\r\n\r\n        for (i = 0, ii = fonts.length; i < ii; i++) {\r\n          names.push(fonts[i].loadedName);\r\n        }\r\n\r\n        names.push(loadTestFontId);\r\n\r\n        var div = this._document.createElement(\"div\");\r\n\r\n        div.style.visibility = \"hidden\";\r\n        div.style.width = div.style.height = \"10px\";\r\n        div.style.position = \"absolute\";\r\n        div.style.top = div.style.left = \"0px\";\r\n\r\n        for (i = 0, ii = names.length; i < ii; ++i) {\r\n          var span = this._document.createElement(\"span\");\r\n\r\n          span.textContent = \"Hi\";\r\n          span.style.fontFamily = names[i];\r\n          div.appendChild(span);\r\n        }\r\n\r\n        this._document.body.appendChild(div);\r\n\r\n        isFontReady(loadTestFontId, function () {\r\n          _this4._document.body.removeChild(div);\r\n\r\n          request.complete();\r\n        });\r\n      }\r\n    }]);\r\n\r\n    return GenericFontLoader;\r\n  }(BaseFontLoader);\r\n}\r\n\r\nvar FontFaceObject = /*#__PURE__*/function () {\r\n  function FontFaceObject(translatedData, _ref2) {\r\n    var _ref2$isEvalSupported = _ref2.isEvalSupported,\r\n        isEvalSupported = _ref2$isEvalSupported === void 0 ? true : _ref2$isEvalSupported,\r\n        _ref2$disableFontFace = _ref2.disableFontFace,\r\n        disableFontFace = _ref2$disableFontFace === void 0 ? false : _ref2$disableFontFace,\r\n        _ref2$ignoreErrors = _ref2.ignoreErrors,\r\n        ignoreErrors = _ref2$ignoreErrors === void 0 ? false : _ref2$ignoreErrors,\r\n        onUnsupportedFeature = _ref2.onUnsupportedFeature,\r\n        _ref2$fontRegistry = _ref2.fontRegistry,\r\n        fontRegistry = _ref2$fontRegistry === void 0 ? null : _ref2$fontRegistry;\r\n\r\n    _classCallCheck(this, FontFaceObject);\r\n\r\n    this.compiledGlyphs = Object.create(null);\r\n\r\n    for (var i in translatedData) {\r\n      this[i] = translatedData[i];\r\n    }\r\n\r\n    this.isEvalSupported = isEvalSupported !== false;\r\n    this.disableFontFace = disableFontFace === true;\r\n    this.ignoreErrors = ignoreErrors === true;\r\n    this._onUnsupportedFeature = onUnsupportedFeature;\r\n    this.fontRegistry = fontRegistry;\r\n  }\r\n\r\n  _createClass(FontFaceObject, [{\r\n    key: \"createNativeFontFace\",\r\n    value: function createNativeFontFace() {\r\n      if (!this.data || this.disableFontFace) {\r\n        return null;\r\n      }\r\n\r\n      var nativeFontFace = new FontFace(this.loadedName, this.data, {});\r\n\r\n      if (this.fontRegistry) {\r\n        this.fontRegistry.registerFont(this);\r\n      }\r\n\r\n      return nativeFontFace;\r\n    }\r\n  }, {\r\n    key: \"createFontFaceRule\",\r\n    value: function createFontFaceRule() {\r\n      if (!this.data || this.disableFontFace) {\r\n        return null;\r\n      }\r\n\r\n      var data = (0, _util.bytesToString)(new Uint8Array(this.data));\r\n      var url = \"url(data:\".concat(this.mimetype, \";base64,\").concat(btoa(data), \");\");\r\n      var rule = \"@font-face {font-family:\\\"\".concat(this.loadedName, \"\\\";src:\").concat(url, \"}\");\r\n\r\n      if (this.fontRegistry) {\r\n        this.fontRegistry.registerFont(this, url);\r\n      }\r\n\r\n      return rule;\r\n    }\r\n  }, {\r\n    key: \"getPathGenerator\",\r\n    value: function getPathGenerator(objs, character) {\r\n      if (this.compiledGlyphs[character] !== undefined) {\r\n        return this.compiledGlyphs[character];\r\n      }\r\n\r\n      var cmds, current;\r\n\r\n      try {\r\n        cmds = objs.get(this.loadedName + \"_path_\" + character);\r\n      } catch (ex) {\r\n        if (!this.ignoreErrors) {\r\n          throw ex;\r\n        }\r\n\r\n        this._onUnsupportedFeature({\r\n          featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath\r\n        });\r\n\r\n        (0, _util.warn)(\"getPathGenerator - ignoring character: \\\"\".concat(ex, \"\\\".\"));\r\n        return this.compiledGlyphs[character] = function (c, size) {};\r\n      }\r\n\r\n      if (this.isEvalSupported && _util.IsEvalSupportedCached.value) {\r\n        var args,\r\n            js = \"\";\r\n\r\n        for (var i = 0, ii = cmds.length; i < ii; i++) {\r\n          current = cmds[i];\r\n\r\n          if (current.args !== undefined) {\r\n            args = current.args.join(\",\");\r\n          } else {\r\n            args = \"\";\r\n          }\r\n\r\n          js += \"c.\" + current.cmd + \"(\" + args + \");\\n\";\r\n        }\r\n\r\n        return this.compiledGlyphs[character] = new Function(\"c\", \"size\", js);\r\n      }\r\n\r\n      return this.compiledGlyphs[character] = function (c, size) {\r\n        for (var _i = 0, _ii = cmds.length; _i < _ii; _i++) {\r\n          current = cmds[_i];\r\n\r\n          if (current.cmd === \"scale\") {\r\n            current.args = [size, -size];\r\n          }\r\n\r\n          c[current.cmd].apply(c, current.args);\r\n        }\r\n      };\r\n    }\r\n  }]);\r\n\r\n  return FontFaceObject;\r\n}();\r\n\r\nexports.FontFaceObject = FontFaceObject;\r\n\r\n/***/ }),\r\n/* 137 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.NodeCMapReaderFactory = exports.NodeCanvasFactory = void 0;\r\n\r\nvar _display_utils = __w_pdfjs_require__(1);\r\n\r\nvar _is_node = __w_pdfjs_require__(6);\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nvar NodeCanvasFactory = function NodeCanvasFactory() {\r\n  _classCallCheck(this, NodeCanvasFactory);\r\n\r\n  (0, _util.unreachable)(\"Not implemented: NodeCanvasFactory\");\r\n};\r\n\r\nexports.NodeCanvasFactory = NodeCanvasFactory;\r\n\r\nvar NodeCMapReaderFactory = function NodeCMapReaderFactory() {\r\n  _classCallCheck(this, NodeCMapReaderFactory);\r\n\r\n  (0, _util.unreachable)(\"Not implemented: NodeCMapReaderFactory\");\r\n};\r\n\r\nexports.NodeCMapReaderFactory = NodeCMapReaderFactory;\r\n\r\nif (_is_node.isNodeJS) {\r\n  exports.NodeCanvasFactory = NodeCanvasFactory = /*#__PURE__*/function (_BaseCanvasFactory) {\r\n    _inherits(NodeCanvasFactory, _BaseCanvasFactory);\r\n\r\n    var _super = _createSuper(NodeCanvasFactory);\r\n\r\n    function NodeCanvasFactory() {\r\n      _classCallCheck(this, NodeCanvasFactory);\r\n\r\n      return _super.apply(this, arguments);\r\n    }\r\n\r\n    _createClass(NodeCanvasFactory, [{\r\n      key: \"create\",\r\n      value: function create(width, height) {\r\n        if (width <= 0 || height <= 0) {\r\n          throw new Error(\"Invalid canvas size\");\r\n        }\r\n\r\n        var Canvas = require(\"canvas\");\r\n\r\n        var canvas = Canvas.createCanvas(width, height);\r\n        return {\r\n          canvas: canvas,\r\n          context: canvas.getContext(\"2d\")\r\n        };\r\n      }\r\n    }]);\r\n\r\n    return NodeCanvasFactory;\r\n  }(_display_utils.BaseCanvasFactory);\r\n\r\n  exports.NodeCMapReaderFactory = NodeCMapReaderFactory = /*#__PURE__*/function (_BaseCMapReaderFactor) {\r\n    _inherits(NodeCMapReaderFactory, _BaseCMapReaderFactor);\r\n\r\n    var _super2 = _createSuper(NodeCMapReaderFactory);\r\n\r\n    function NodeCMapReaderFactory() {\r\n      _classCallCheck(this, NodeCMapReaderFactory);\r\n\r\n      return _super2.apply(this, arguments);\r\n    }\r\n\r\n    _createClass(NodeCMapReaderFactory, [{\r\n      key: \"_fetchData\",\r\n      value: function _fetchData(url, compressionType) {\r\n        return new Promise(function (resolve, reject) {\r\n          var fs = require(\"fs\");\r\n\r\n          fs.readFile(url, function (error, data) {\r\n            if (error || !data) {\r\n              reject(new Error(error));\r\n              return;\r\n            }\r\n\r\n            resolve({\r\n              cMapData: new Uint8Array(data),\r\n              compressionType: compressionType\r\n            });\r\n          });\r\n        });\r\n      }\r\n    }]);\r\n\r\n    return NodeCMapReaderFactory;\r\n  }(_display_utils.BaseCMapReaderFactory);\r\n}\r\n\r\n/***/ }),\r\n/* 138 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.AnnotationStorage = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar AnnotationStorage = /*#__PURE__*/function () {\r\n  function AnnotationStorage() {\r\n    _classCallCheck(this, AnnotationStorage);\r\n\r\n    this._storage = new Map();\r\n    this._modified = false;\r\n    this.onSetModified = null;\r\n    this.onResetModified = null;\r\n  }\r\n\r\n  _createClass(AnnotationStorage, [{\r\n    key: \"getOrCreateValue\",\r\n    value: function getOrCreateValue(key, defaultValue) {\r\n      if (this._storage.has(key)) {\r\n        return this._storage.get(key);\r\n      }\r\n\r\n      this._storage.set(key, defaultValue);\r\n\r\n      return defaultValue;\r\n    }\r\n  }, {\r\n    key: \"setValue\",\r\n    value: function setValue(key, value) {\r\n      var obj = this._storage.get(key);\r\n\r\n      var modified = false;\r\n\r\n      if (obj !== undefined) {\r\n        for (var _i = 0, _Object$entries = Object.entries(value); _i < _Object$entries.length; _i++) {\r\n          var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\r\n              entry = _Object$entries$_i[0],\r\n              val = _Object$entries$_i[1];\r\n\r\n          if (obj[entry] !== val) {\r\n            modified = true;\r\n            obj[entry] = val;\r\n          }\r\n        }\r\n      } else {\r\n        this._storage.set(key, value);\r\n\r\n        modified = true;\r\n      }\r\n\r\n      if (modified) {\r\n        this._setModified();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getAll\",\r\n    value: function getAll() {\r\n      if (this._storage.size === 0) {\r\n        return null;\r\n      }\r\n\r\n      return (0, _util.objectFromEntries)(this._storage);\r\n    }\r\n  }, {\r\n    key: \"size\",\r\n    get: function get() {\r\n      return this._storage.size;\r\n    }\r\n  }, {\r\n    key: \"_setModified\",\r\n    value: function _setModified() {\r\n      if (!this._modified) {\r\n        this._modified = true;\r\n\r\n        if (typeof this.onSetModified === \"function\") {\r\n          this.onSetModified();\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"resetModified\",\r\n    value: function resetModified() {\r\n      if (this._modified) {\r\n        this._modified = false;\r\n\r\n        if (typeof this.onResetModified === \"function\") {\r\n          this.onResetModified();\r\n        }\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return AnnotationStorage;\r\n}();\r\n\r\nexports.AnnotationStorage = AnnotationStorage;\r\n\r\n/***/ }),\r\n/* 139 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.apiCompatibilityParams = void 0;\r\n\r\nvar _is_node = __w_pdfjs_require__(6);\r\n\r\nvar compatibilityParams = Object.create(null);\r\n{\r\n  (function checkFontFace() {\r\n    if (_is_node.isNodeJS) {\r\n      compatibilityParams.disableFontFace = true;\r\n    }\r\n  })();\r\n}\r\nvar apiCompatibilityParams = Object.freeze(compatibilityParams);\r\nexports.apiCompatibilityParams = apiCompatibilityParams;\r\n\r\n/***/ }),\r\n/* 140 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.CanvasGraphics = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _pattern_helper = __w_pdfjs_require__(141);\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nvar MIN_FONT_SIZE = 16;\r\nvar MAX_FONT_SIZE = 100;\r\nvar MAX_GROUP_SIZE = 4096;\r\nvar COMPILE_TYPE3_GLYPHS = true;\r\nvar MAX_SIZE_TO_COMPILE = 1000;\r\nvar FULL_CHUNK_HEIGHT = 16;\r\n\r\nfunction addContextCurrentTransform(ctx) {\r\n  if (!ctx.mozCurrentTransform) {\r\n    ctx._originalSave = ctx.save;\r\n    ctx._originalRestore = ctx.restore;\r\n    ctx._originalRotate = ctx.rotate;\r\n    ctx._originalScale = ctx.scale;\r\n    ctx._originalTranslate = ctx.translate;\r\n    ctx._originalTransform = ctx.transform;\r\n    ctx._originalSetTransform = ctx.setTransform;\r\n    ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0];\r\n    ctx._transformStack = [];\r\n    Object.defineProperty(ctx, \"mozCurrentTransform\", {\r\n      get: function getCurrentTransform() {\r\n        return this._transformMatrix;\r\n      }\r\n    });\r\n    Object.defineProperty(ctx, \"mozCurrentTransformInverse\", {\r\n      get: function getCurrentTransformInverse() {\r\n        var m = this._transformMatrix;\r\n        var a = m[0],\r\n            b = m[1],\r\n            c = m[2],\r\n            d = m[3],\r\n            e = m[4],\r\n            f = m[5];\r\n        var ad_bc = a * d - b * c;\r\n        var bc_ad = b * c - a * d;\r\n        return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc];\r\n      }\r\n    });\r\n\r\n    ctx.save = function ctxSave() {\r\n      var old = this._transformMatrix;\r\n\r\n      this._transformStack.push(old);\r\n\r\n      this._transformMatrix = old.slice(0, 6);\r\n\r\n      this._originalSave();\r\n    };\r\n\r\n    ctx.restore = function ctxRestore() {\r\n      var prev = this._transformStack.pop();\r\n\r\n      if (prev) {\r\n        this._transformMatrix = prev;\r\n\r\n        this._originalRestore();\r\n      }\r\n    };\r\n\r\n    ctx.translate = function ctxTranslate(x, y) {\r\n      var m = this._transformMatrix;\r\n      m[4] = m[0] * x + m[2] * y + m[4];\r\n      m[5] = m[1] * x + m[3] * y + m[5];\r\n\r\n      this._originalTranslate(x, y);\r\n    };\r\n\r\n    ctx.scale = function ctxScale(x, y) {\r\n      var m = this._transformMatrix;\r\n      m[0] = m[0] * x;\r\n      m[1] = m[1] * x;\r\n      m[2] = m[2] * y;\r\n      m[3] = m[3] * y;\r\n\r\n      this._originalScale(x, y);\r\n    };\r\n\r\n    ctx.transform = function ctxTransform(a, b, c, d, e, f) {\r\n      var m = this._transformMatrix;\r\n      this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]];\r\n\r\n      ctx._originalTransform(a, b, c, d, e, f);\r\n    };\r\n\r\n    ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {\r\n      this._transformMatrix = [a, b, c, d, e, f];\r\n\r\n      ctx._originalSetTransform(a, b, c, d, e, f);\r\n    };\r\n\r\n    ctx.rotate = function ctxRotate(angle) {\r\n      var cosValue = Math.cos(angle);\r\n      var sinValue = Math.sin(angle);\r\n      var m = this._transformMatrix;\r\n      this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]];\r\n\r\n      this._originalRotate(angle);\r\n    };\r\n  }\r\n}\r\n\r\nvar CachedCanvases = function CachedCanvasesClosure() {\r\n  function CachedCanvases(canvasFactory) {\r\n    this.canvasFactory = canvasFactory;\r\n    this.cache = Object.create(null);\r\n  }\r\n\r\n  CachedCanvases.prototype = {\r\n    getCanvas: function CachedCanvases_getCanvas(id, width, height, trackTransform) {\r\n      var canvasEntry;\r\n\r\n      if (this.cache[id] !== undefined) {\r\n        canvasEntry = this.cache[id];\r\n        this.canvasFactory.reset(canvasEntry, width, height);\r\n        canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0);\r\n      } else {\r\n        canvasEntry = this.canvasFactory.create(width, height);\r\n        this.cache[id] = canvasEntry;\r\n      }\r\n\r\n      if (trackTransform) {\r\n        addContextCurrentTransform(canvasEntry.context);\r\n      }\r\n\r\n      return canvasEntry;\r\n    },\r\n    clear: function clear() {\r\n      for (var id in this.cache) {\r\n        var canvasEntry = this.cache[id];\r\n        this.canvasFactory.destroy(canvasEntry);\r\n        delete this.cache[id];\r\n      }\r\n    }\r\n  };\r\n  return CachedCanvases;\r\n}();\r\n\r\nfunction compileType3Glyph(imgData) {\r\n  var POINT_TO_PROCESS_LIMIT = 1000;\r\n  var width = imgData.width,\r\n      height = imgData.height,\r\n      width1 = width + 1;\r\n  var i, ii, j, j0;\r\n  var points = new Uint8Array(width1 * (height + 1));\r\n  var POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);\r\n  var lineSize = width + 7 & ~7,\r\n      data0 = imgData.data;\r\n  var data = new Uint8Array(lineSize * height);\r\n  var pos = 0;\r\n\r\n  for (i = 0, ii = data0.length; i < ii; i++) {\r\n    var elem = data0[i];\r\n    var mask = 128;\r\n\r\n    while (mask > 0) {\r\n      data[pos++] = elem & mask ? 0 : 255;\r\n      mask >>= 1;\r\n    }\r\n  }\r\n\r\n  var count = 0;\r\n  pos = 0;\r\n\r\n  if (data[pos] !== 0) {\r\n    points[0] = 1;\r\n    ++count;\r\n  }\r\n\r\n  for (j = 1; j < width; j++) {\r\n    if (data[pos] !== data[pos + 1]) {\r\n      points[j] = data[pos] ? 2 : 1;\r\n      ++count;\r\n    }\r\n\r\n    pos++;\r\n  }\r\n\r\n  if (data[pos] !== 0) {\r\n    points[j] = 2;\r\n    ++count;\r\n  }\r\n\r\n  for (i = 1; i < height; i++) {\r\n    pos = i * lineSize;\r\n    j0 = i * width1;\r\n\r\n    if (data[pos - lineSize] !== data[pos]) {\r\n      points[j0] = data[pos] ? 1 : 8;\r\n      ++count;\r\n    }\r\n\r\n    var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);\r\n\r\n    for (j = 1; j < width; j++) {\r\n      sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0);\r\n\r\n      if (POINT_TYPES[sum]) {\r\n        points[j0 + j] = POINT_TYPES[sum];\r\n        ++count;\r\n      }\r\n\r\n      pos++;\r\n    }\r\n\r\n    if (data[pos - lineSize] !== data[pos]) {\r\n      points[j0 + j] = data[pos] ? 2 : 4;\r\n      ++count;\r\n    }\r\n\r\n    if (count > POINT_TO_PROCESS_LIMIT) {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  pos = lineSize * (height - 1);\r\n  j0 = i * width1;\r\n\r\n  if (data[pos] !== 0) {\r\n    points[j0] = 8;\r\n    ++count;\r\n  }\r\n\r\n  for (j = 1; j < width; j++) {\r\n    if (data[pos] !== data[pos + 1]) {\r\n      points[j0 + j] = data[pos] ? 4 : 8;\r\n      ++count;\r\n    }\r\n\r\n    pos++;\r\n  }\r\n\r\n  if (data[pos] !== 0) {\r\n    points[j0 + j] = 4;\r\n    ++count;\r\n  }\r\n\r\n  if (count > POINT_TO_PROCESS_LIMIT) {\r\n    return null;\r\n  }\r\n\r\n  var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);\r\n  var outlines = [];\r\n\r\n  for (i = 0; count && i <= height; i++) {\r\n    var p = i * width1;\r\n    var end = p + width;\r\n\r\n    while (p < end && !points[p]) {\r\n      p++;\r\n    }\r\n\r\n    if (p === end) {\r\n      continue;\r\n    }\r\n\r\n    var coords = [p % width1, i];\r\n    var p0 = p;\r\n    var type = points[p];\r\n\r\n    do {\r\n      var step = steps[type];\r\n\r\n      do {\r\n        p += step;\r\n      } while (!points[p]);\r\n\r\n      var pp = points[p];\r\n\r\n      if (pp !== 5 && pp !== 10) {\r\n        type = pp;\r\n        points[p] = 0;\r\n      } else {\r\n        type = pp & 0x33 * type >> 4;\r\n        points[p] &= type >> 2 | type << 2;\r\n      }\r\n\r\n      coords.push(p % width1);\r\n      coords.push(p / width1 | 0);\r\n\r\n      if (!points[p]) {\r\n        --count;\r\n      }\r\n    } while (p0 !== p);\r\n\r\n    outlines.push(coords);\r\n    --i;\r\n  }\r\n\r\n  var drawOutline = function drawOutline(c) {\r\n    c.save();\r\n    c.scale(1 / width, -1 / height);\r\n    c.translate(0, -height);\r\n    c.beginPath();\r\n\r\n    for (var k = 0, kk = outlines.length; k < kk; k++) {\r\n      var o = outlines[k];\r\n      c.moveTo(o[0], o[1]);\r\n\r\n      for (var l = 2, ll = o.length; l < ll; l += 2) {\r\n        c.lineTo(o[l], o[l + 1]);\r\n      }\r\n    }\r\n\r\n    c.fill();\r\n    c.beginPath();\r\n    c.restore();\r\n  };\r\n\r\n  return drawOutline;\r\n}\r\n\r\nvar CanvasExtraState = function CanvasExtraStateClosure() {\r\n  function CanvasExtraState() {\r\n    this.alphaIsShape = false;\r\n    this.fontSize = 0;\r\n    this.fontSizeScale = 1;\r\n    this.textMatrix = _util.IDENTITY_MATRIX;\r\n    this.textMatrixScale = 1;\r\n    this.fontMatrix = _util.FONT_IDENTITY_MATRIX;\r\n    this.leading = 0;\r\n    this.x = 0;\r\n    this.y = 0;\r\n    this.lineX = 0;\r\n    this.lineY = 0;\r\n    this.charSpacing = 0;\r\n    this.wordSpacing = 0;\r\n    this.textHScale = 1;\r\n    this.textRenderingMode = _util.TextRenderingMode.FILL;\r\n    this.textRise = 0;\r\n    this.fillColor = \"#000000\";\r\n    this.strokeColor = \"#000000\";\r\n    this.patternFill = false;\r\n    this.fillAlpha = 1;\r\n    this.strokeAlpha = 1;\r\n    this.lineWidth = 1;\r\n    this.activeSMask = null;\r\n    this.resumeSMaskCtx = null;\r\n    this.transferMaps = null;\r\n  }\r\n\r\n  CanvasExtraState.prototype = {\r\n    clone: function CanvasExtraState_clone() {\r\n      return Object.create(this);\r\n    },\r\n    setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) {\r\n      this.x = x;\r\n      this.y = y;\r\n    }\r\n  };\r\n  return CanvasExtraState;\r\n}();\r\n\r\nvar CanvasGraphics = function CanvasGraphicsClosure() {\r\n  var EXECUTION_TIME = 15;\r\n  var EXECUTION_STEPS = 10;\r\n\r\n  function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, webGLContext, imageLayer, optionalContentConfig) {\r\n    this.ctx = canvasCtx;\r\n    this.current = new CanvasExtraState();\r\n    this.stateStack = [];\r\n    this.pendingClip = null;\r\n    this.pendingEOFill = false;\r\n    this.res = null;\r\n    this.xobjs = null;\r\n    this.commonObjs = commonObjs;\r\n    this.objs = objs;\r\n    this.canvasFactory = canvasFactory;\r\n    this.webGLContext = webGLContext;\r\n    this.imageLayer = imageLayer;\r\n    this.groupStack = [];\r\n    this.processingType3 = null;\r\n    this.baseTransform = null;\r\n    this.baseTransformStack = [];\r\n    this.groupLevel = 0;\r\n    this.smaskStack = [];\r\n    this.smaskCounter = 0;\r\n    this.tempSMask = null;\r\n    this.contentVisible = true;\r\n    this.markedContentStack = [];\r\n    this.optionalContentConfig = optionalContentConfig;\r\n    this.cachedCanvases = new CachedCanvases(this.canvasFactory);\r\n\r\n    if (canvasCtx) {\r\n      addContextCurrentTransform(canvasCtx);\r\n    }\r\n\r\n    this._cachedGetSinglePixelWidth = null;\r\n  }\r\n\r\n  function putBinaryImageData(ctx, imgData) {\r\n    var transferMaps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\r\n\r\n    if (typeof ImageData !== \"undefined\" && imgData instanceof ImageData) {\r\n      ctx.putImageData(imgData, 0, 0);\r\n      return;\r\n    }\r\n\r\n    var height = imgData.height,\r\n        width = imgData.width;\r\n    var partialChunkHeight = height % FULL_CHUNK_HEIGHT;\r\n    var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\r\n    var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\r\n    var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\r\n    var srcPos = 0,\r\n        destPos;\r\n    var src = imgData.data;\r\n    var dest = chunkImgData.data;\r\n    var i, j, thisChunkHeight, elemsInThisChunk;\r\n    var transferMapRed, transferMapGreen, transferMapBlue, transferMapGray;\r\n\r\n    if (transferMaps) {\r\n      switch (transferMaps.length) {\r\n        case 1:\r\n          transferMapRed = transferMaps[0];\r\n          transferMapGreen = transferMaps[0];\r\n          transferMapBlue = transferMaps[0];\r\n          transferMapGray = transferMaps[0];\r\n          break;\r\n\r\n        case 4:\r\n          transferMapRed = transferMaps[0];\r\n          transferMapGreen = transferMaps[1];\r\n          transferMapBlue = transferMaps[2];\r\n          transferMapGray = transferMaps[3];\r\n          break;\r\n      }\r\n    }\r\n\r\n    if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) {\r\n      var srcLength = src.byteLength;\r\n      var dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);\r\n      var dest32DataLength = dest32.length;\r\n      var fullSrcDiff = width + 7 >> 3;\r\n      var white = 0xffffffff;\r\n      var black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff;\r\n\r\n      if (transferMapGray) {\r\n        if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) {\r\n          var _ref = [black, white];\r\n          white = _ref[0];\r\n          black = _ref[1];\r\n        }\r\n      }\r\n\r\n      for (i = 0; i < totalChunks; i++) {\r\n        thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\r\n        destPos = 0;\r\n\r\n        for (j = 0; j < thisChunkHeight; j++) {\r\n          var srcDiff = srcLength - srcPos;\r\n          var k = 0;\r\n          var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;\r\n          var kEndUnrolled = kEnd & ~7;\r\n          var mask = 0;\r\n          var srcByte = 0;\r\n\r\n          for (; k < kEndUnrolled; k += 8) {\r\n            srcByte = src[srcPos++];\r\n            dest32[destPos++] = srcByte & 128 ? white : black;\r\n            dest32[destPos++] = srcByte & 64 ? white : black;\r\n            dest32[destPos++] = srcByte & 32 ? white : black;\r\n            dest32[destPos++] = srcByte & 16 ? white : black;\r\n            dest32[destPos++] = srcByte & 8 ? white : black;\r\n            dest32[destPos++] = srcByte & 4 ? white : black;\r\n            dest32[destPos++] = srcByte & 2 ? white : black;\r\n            dest32[destPos++] = srcByte & 1 ? white : black;\r\n          }\r\n\r\n          for (; k < kEnd; k++) {\r\n            if (mask === 0) {\r\n              srcByte = src[srcPos++];\r\n              mask = 128;\r\n            }\r\n\r\n            dest32[destPos++] = srcByte & mask ? white : black;\r\n            mask >>= 1;\r\n          }\r\n        }\r\n\r\n        while (destPos < dest32DataLength) {\r\n          dest32[destPos++] = 0;\r\n        }\r\n\r\n        ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\r\n      }\r\n    } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) {\r\n      var hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue);\r\n      j = 0;\r\n      elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;\r\n\r\n      for (i = 0; i < fullChunks; i++) {\r\n        dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\r\n        srcPos += elemsInThisChunk;\r\n\r\n        if (hasTransferMaps) {\r\n          for (var _k = 0; _k < elemsInThisChunk; _k += 4) {\r\n            if (transferMapRed) {\r\n              dest[_k + 0] = transferMapRed[dest[_k + 0]];\r\n            }\r\n\r\n            if (transferMapGreen) {\r\n              dest[_k + 1] = transferMapGreen[dest[_k + 1]];\r\n            }\r\n\r\n            if (transferMapBlue) {\r\n              dest[_k + 2] = transferMapBlue[dest[_k + 2]];\r\n            }\r\n          }\r\n        }\r\n\r\n        ctx.putImageData(chunkImgData, 0, j);\r\n        j += FULL_CHUNK_HEIGHT;\r\n      }\r\n\r\n      if (i < totalChunks) {\r\n        elemsInThisChunk = width * partialChunkHeight * 4;\r\n        dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));\r\n\r\n        if (hasTransferMaps) {\r\n          for (var _k2 = 0; _k2 < elemsInThisChunk; _k2 += 4) {\r\n            if (transferMapRed) {\r\n              dest[_k2 + 0] = transferMapRed[dest[_k2 + 0]];\r\n            }\r\n\r\n            if (transferMapGreen) {\r\n              dest[_k2 + 1] = transferMapGreen[dest[_k2 + 1]];\r\n            }\r\n\r\n            if (transferMapBlue) {\r\n              dest[_k2 + 2] = transferMapBlue[dest[_k2 + 2]];\r\n            }\r\n          }\r\n        }\r\n\r\n        ctx.putImageData(chunkImgData, 0, j);\r\n      }\r\n    } else if (imgData.kind === _util.ImageKind.RGB_24BPP) {\r\n      var _hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue);\r\n\r\n      thisChunkHeight = FULL_CHUNK_HEIGHT;\r\n      elemsInThisChunk = width * thisChunkHeight;\r\n\r\n      for (i = 0; i < totalChunks; i++) {\r\n        if (i >= fullChunks) {\r\n          thisChunkHeight = partialChunkHeight;\r\n          elemsInThisChunk = width * thisChunkHeight;\r\n        }\r\n\r\n        destPos = 0;\r\n\r\n        for (j = elemsInThisChunk; j--;) {\r\n          dest[destPos++] = src[srcPos++];\r\n          dest[destPos++] = src[srcPos++];\r\n          dest[destPos++] = src[srcPos++];\r\n          dest[destPos++] = 255;\r\n        }\r\n\r\n        if (_hasTransferMaps) {\r\n          for (var _k3 = 0; _k3 < destPos; _k3 += 4) {\r\n            if (transferMapRed) {\r\n              dest[_k3 + 0] = transferMapRed[dest[_k3 + 0]];\r\n            }\r\n\r\n            if (transferMapGreen) {\r\n              dest[_k3 + 1] = transferMapGreen[dest[_k3 + 1]];\r\n            }\r\n\r\n            if (transferMapBlue) {\r\n              dest[_k3 + 2] = transferMapBlue[dest[_k3 + 2]];\r\n            }\r\n          }\r\n        }\r\n\r\n        ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\r\n      }\r\n    } else {\r\n      throw new Error(\"bad image kind: \".concat(imgData.kind));\r\n    }\r\n  }\r\n\r\n  function putBinaryImageMask(ctx, imgData) {\r\n    var height = imgData.height,\r\n        width = imgData.width;\r\n    var partialChunkHeight = height % FULL_CHUNK_HEIGHT;\r\n    var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;\r\n    var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;\r\n    var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);\r\n    var srcPos = 0;\r\n    var src = imgData.data;\r\n    var dest = chunkImgData.data;\r\n\r\n    for (var i = 0; i < totalChunks; i++) {\r\n      var thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;\r\n      var destPos = 3;\r\n\r\n      for (var j = 0; j < thisChunkHeight; j++) {\r\n        var elem = void 0,\r\n            mask = 0;\r\n\r\n        for (var k = 0; k < width; k++) {\r\n          if (!mask) {\r\n            elem = src[srcPos++];\r\n            mask = 128;\r\n          }\r\n\r\n          dest[destPos] = elem & mask ? 0 : 255;\r\n          destPos += 4;\r\n          mask >>= 1;\r\n        }\r\n      }\r\n\r\n      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);\r\n    }\r\n  }\r\n\r\n  function copyCtxState(sourceCtx, destCtx) {\r\n    var properties = [\"strokeStyle\", \"fillStyle\", \"fillRule\", \"globalAlpha\", \"lineWidth\", \"lineCap\", \"lineJoin\", \"miterLimit\", \"globalCompositeOperation\", \"font\"];\r\n\r\n    for (var i = 0, ii = properties.length; i < ii; i++) {\r\n      var property = properties[i];\r\n\r\n      if (sourceCtx[property] !== undefined) {\r\n        destCtx[property] = sourceCtx[property];\r\n      }\r\n    }\r\n\r\n    if (sourceCtx.setLineDash !== undefined) {\r\n      destCtx.setLineDash(sourceCtx.getLineDash());\r\n      destCtx.lineDashOffset = sourceCtx.lineDashOffset;\r\n    }\r\n  }\r\n\r\n  function resetCtxToDefault(ctx) {\r\n    ctx.strokeStyle = \"#000000\";\r\n    ctx.fillStyle = \"#000000\";\r\n    ctx.fillRule = \"nonzero\";\r\n    ctx.globalAlpha = 1;\r\n    ctx.lineWidth = 1;\r\n    ctx.lineCap = \"butt\";\r\n    ctx.lineJoin = \"miter\";\r\n    ctx.miterLimit = 10;\r\n    ctx.globalCompositeOperation = \"source-over\";\r\n    ctx.font = \"10px sans-serif\";\r\n\r\n    if (ctx.setLineDash !== undefined) {\r\n      ctx.setLineDash([]);\r\n      ctx.lineDashOffset = 0;\r\n    }\r\n  }\r\n\r\n  function composeSMaskBackdrop(bytes, r0, g0, b0) {\r\n    var length = bytes.length;\r\n\r\n    for (var i = 3; i < length; i += 4) {\r\n      var alpha = bytes[i];\r\n\r\n      if (alpha === 0) {\r\n        bytes[i - 3] = r0;\r\n        bytes[i - 2] = g0;\r\n        bytes[i - 1] = b0;\r\n      } else if (alpha < 255) {\r\n        var alpha_ = 255 - alpha;\r\n        bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8;\r\n        bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8;\r\n        bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8;\r\n      }\r\n    }\r\n  }\r\n\r\n  function composeSMaskAlpha(maskData, layerData, transferMap) {\r\n    var length = maskData.length;\r\n    var scale = 1 / 255;\r\n\r\n    for (var i = 3; i < length; i += 4) {\r\n      var alpha = transferMap ? transferMap[maskData[i]] : maskData[i];\r\n      layerData[i] = layerData[i] * alpha * scale | 0;\r\n    }\r\n  }\r\n\r\n  function composeSMaskLuminosity(maskData, layerData, transferMap) {\r\n    var length = maskData.length;\r\n\r\n    for (var i = 3; i < length; i += 4) {\r\n      var y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28;\r\n      layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16;\r\n    }\r\n  }\r\n\r\n  function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap) {\r\n    var hasBackdrop = !!backdrop;\r\n    var r0 = hasBackdrop ? backdrop[0] : 0;\r\n    var g0 = hasBackdrop ? backdrop[1] : 0;\r\n    var b0 = hasBackdrop ? backdrop[2] : 0;\r\n    var composeFn;\r\n\r\n    if (subtype === \"Luminosity\") {\r\n      composeFn = composeSMaskLuminosity;\r\n    } else {\r\n      composeFn = composeSMaskAlpha;\r\n    }\r\n\r\n    var PIXELS_TO_PROCESS = 1048576;\r\n    var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));\r\n\r\n    for (var row = 0; row < height; row += chunkSize) {\r\n      var chunkHeight = Math.min(chunkSize, height - row);\r\n      var maskData = maskCtx.getImageData(0, row, width, chunkHeight);\r\n      var layerData = layerCtx.getImageData(0, row, width, chunkHeight);\r\n\r\n      if (hasBackdrop) {\r\n        composeSMaskBackdrop(maskData.data, r0, g0, b0);\r\n      }\r\n\r\n      composeFn(maskData.data, layerData.data, transferMap);\r\n      maskCtx.putImageData(layerData, 0, row);\r\n    }\r\n  }\r\n\r\n  function composeSMask(ctx, smask, layerCtx, webGLContext) {\r\n    var mask = smask.canvas;\r\n    var maskCtx = smask.context;\r\n    ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY);\r\n    var backdrop = smask.backdrop || null;\r\n\r\n    if (!smask.transferMap && webGLContext.isEnabled) {\r\n      var composed = webGLContext.composeSMask({\r\n        layer: layerCtx.canvas,\r\n        mask: mask,\r\n        properties: {\r\n          subtype: smask.subtype,\r\n          backdrop: backdrop\r\n        }\r\n      });\r\n      ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n      ctx.drawImage(composed, smask.offsetX, smask.offsetY);\r\n      return;\r\n    }\r\n\r\n    genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, smask.subtype, backdrop, smask.transferMap);\r\n    ctx.drawImage(mask, 0, 0);\r\n  }\r\n\r\n  var LINE_CAP_STYLES = [\"butt\", \"round\", \"square\"];\r\n  var LINE_JOIN_STYLES = [\"miter\", \"round\", \"bevel\"];\r\n  var NORMAL_CLIP = {};\r\n  var EO_CLIP = {};\r\n  CanvasGraphics.prototype = {\r\n    beginDrawing: function beginDrawing(_ref2) {\r\n      var transform = _ref2.transform,\r\n          viewport = _ref2.viewport,\r\n          _ref2$transparency = _ref2.transparency,\r\n          transparency = _ref2$transparency === void 0 ? false : _ref2$transparency,\r\n          _ref2$background = _ref2.background,\r\n          background = _ref2$background === void 0 ? null : _ref2$background;\r\n      var width = this.ctx.canvas.width;\r\n      var height = this.ctx.canvas.height;\r\n      this.ctx.save();\r\n      this.ctx.fillStyle = background || \"rgb(255, 255, 255)\";\r\n      this.ctx.fillRect(0, 0, width, height);\r\n      this.ctx.restore();\r\n\r\n      if (transparency) {\r\n        var transparentCanvas = this.cachedCanvases.getCanvas(\"transparent\", width, height, true);\r\n        this.compositeCtx = this.ctx;\r\n        this.transparentCanvas = transparentCanvas.canvas;\r\n        this.ctx = transparentCanvas.context;\r\n        this.ctx.save();\r\n        this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform);\r\n      }\r\n\r\n      this.ctx.save();\r\n      resetCtxToDefault(this.ctx);\r\n\r\n      if (transform) {\r\n        this.ctx.transform.apply(this.ctx, transform);\r\n      }\r\n\r\n      this.ctx.transform.apply(this.ctx, viewport.transform);\r\n      this.baseTransform = this.ctx.mozCurrentTransform.slice();\r\n      this._combinedScaleFactor = Math.hypot(this.baseTransform[0], this.baseTransform[2]);\r\n\r\n      if (this.imageLayer) {\r\n        this.imageLayer.beginLayout();\r\n      }\r\n    },\r\n    executeOperatorList: function CanvasGraphics_executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) {\r\n      var argsArray = operatorList.argsArray;\r\n      var fnArray = operatorList.fnArray;\r\n      var i = executionStartIdx || 0;\r\n      var argsArrayLen = argsArray.length;\r\n\r\n      if (argsArrayLen === i) {\r\n        return i;\r\n      }\r\n\r\n      var chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === \"function\";\r\n      var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;\r\n      var steps = 0;\r\n      var commonObjs = this.commonObjs;\r\n      var objs = this.objs;\r\n      var fnId;\r\n\r\n      while (true) {\r\n        if (stepper !== undefined && i === stepper.nextBreakPoint) {\r\n          stepper.breakIt(i, continueCallback);\r\n          return i;\r\n        }\r\n\r\n        fnId = fnArray[i];\r\n\r\n        if (fnId !== _util.OPS.dependency) {\r\n          this[fnId].apply(this, argsArray[i]);\r\n        } else {\r\n          var _iterator = _createForOfIteratorHelper(argsArray[i]),\r\n              _step;\r\n\r\n          try {\r\n            for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n              var depObjId = _step.value;\r\n              var objsPool = depObjId.startsWith(\"g_\") ? commonObjs : objs;\r\n\r\n              if (!objsPool.has(depObjId)) {\r\n                objsPool.get(depObjId, continueCallback);\r\n                return i;\r\n              }\r\n            }\r\n          } catch (err) {\r\n            _iterator.e(err);\r\n          } finally {\r\n            _iterator.f();\r\n          }\r\n        }\r\n\r\n        i++;\r\n\r\n        if (i === argsArrayLen) {\r\n          return i;\r\n        }\r\n\r\n        if (chunkOperations && ++steps > EXECUTION_STEPS) {\r\n          if (Date.now() > endTime) {\r\n            continueCallback();\r\n            return i;\r\n          }\r\n\r\n          steps = 0;\r\n        }\r\n      }\r\n    },\r\n    endDrawing: function CanvasGraphics_endDrawing() {\r\n      while (this.stateStack.length || this.current.activeSMask !== null) {\r\n        this.restore();\r\n      }\r\n\r\n      this.ctx.restore();\r\n\r\n      if (this.transparentCanvas) {\r\n        this.ctx = this.compositeCtx;\r\n        this.ctx.save();\r\n        this.ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n        this.ctx.drawImage(this.transparentCanvas, 0, 0);\r\n        this.ctx.restore();\r\n        this.transparentCanvas = null;\r\n      }\r\n\r\n      this.cachedCanvases.clear();\r\n      this.webGLContext.clear();\r\n\r\n      if (this.imageLayer) {\r\n        this.imageLayer.endLayout();\r\n      }\r\n    },\r\n    setLineWidth: function CanvasGraphics_setLineWidth(width) {\r\n      this.current.lineWidth = width;\r\n      this.ctx.lineWidth = width;\r\n    },\r\n    setLineCap: function CanvasGraphics_setLineCap(style) {\r\n      this.ctx.lineCap = LINE_CAP_STYLES[style];\r\n    },\r\n    setLineJoin: function CanvasGraphics_setLineJoin(style) {\r\n      this.ctx.lineJoin = LINE_JOIN_STYLES[style];\r\n    },\r\n    setMiterLimit: function CanvasGraphics_setMiterLimit(limit) {\r\n      this.ctx.miterLimit = limit;\r\n    },\r\n    setDash: function CanvasGraphics_setDash(dashArray, dashPhase) {\r\n      var ctx = this.ctx;\r\n\r\n      if (ctx.setLineDash !== undefined) {\r\n        ctx.setLineDash(dashArray);\r\n        ctx.lineDashOffset = dashPhase;\r\n      }\r\n    },\r\n    setRenderingIntent: function setRenderingIntent(intent) {},\r\n    setFlatness: function setFlatness(flatness) {},\r\n    setGState: function CanvasGraphics_setGState(states) {\r\n      for (var i = 0, ii = states.length; i < ii; i++) {\r\n        var state = states[i];\r\n        var key = state[0];\r\n        var value = state[1];\r\n\r\n        switch (key) {\r\n          case \"LW\":\r\n            this.setLineWidth(value);\r\n            break;\r\n\r\n          case \"LC\":\r\n            this.setLineCap(value);\r\n            break;\r\n\r\n          case \"LJ\":\r\n            this.setLineJoin(value);\r\n            break;\r\n\r\n          case \"ML\":\r\n            this.setMiterLimit(value);\r\n            break;\r\n\r\n          case \"D\":\r\n            this.setDash(value[0], value[1]);\r\n            break;\r\n\r\n          case \"RI\":\r\n            this.setRenderingIntent(value);\r\n            break;\r\n\r\n          case \"FL\":\r\n            this.setFlatness(value);\r\n            break;\r\n\r\n          case \"Font\":\r\n            this.setFont(value[0], value[1]);\r\n            break;\r\n\r\n          case \"CA\":\r\n            this.current.strokeAlpha = state[1];\r\n            break;\r\n\r\n          case \"ca\":\r\n            this.current.fillAlpha = state[1];\r\n            this.ctx.globalAlpha = state[1];\r\n            break;\r\n\r\n          case \"BM\":\r\n            this.ctx.globalCompositeOperation = value;\r\n            break;\r\n\r\n          case \"SMask\":\r\n            if (this.current.activeSMask) {\r\n              if (this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1].activeSMask === this.current.activeSMask) {\r\n                this.suspendSMaskGroup();\r\n              } else {\r\n                this.endSMaskGroup();\r\n              }\r\n            }\r\n\r\n            this.current.activeSMask = value ? this.tempSMask : null;\r\n\r\n            if (this.current.activeSMask) {\r\n              this.beginSMaskGroup();\r\n            }\r\n\r\n            this.tempSMask = null;\r\n            break;\r\n\r\n          case \"TR\":\r\n            this.current.transferMaps = value;\r\n        }\r\n      }\r\n    },\r\n    beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() {\r\n      var activeSMask = this.current.activeSMask;\r\n      var drawnWidth = activeSMask.canvas.width;\r\n      var drawnHeight = activeSMask.canvas.height;\r\n      var cacheId = \"smaskGroupAt\" + this.groupLevel;\r\n      var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);\r\n      var currentCtx = this.ctx;\r\n      var currentTransform = currentCtx.mozCurrentTransform;\r\n      this.ctx.save();\r\n      var groupCtx = scratchCanvas.context;\r\n      groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY);\r\n      groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY);\r\n      groupCtx.transform.apply(groupCtx, currentTransform);\r\n      activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse;\r\n      copyCtxState(currentCtx, groupCtx);\r\n      this.ctx = groupCtx;\r\n      this.setGState([[\"BM\", \"source-over\"], [\"ca\", 1], [\"CA\", 1]]);\r\n      this.groupStack.push(currentCtx);\r\n      this.groupLevel++;\r\n    },\r\n    suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() {\r\n      var groupCtx = this.ctx;\r\n      this.groupLevel--;\r\n      this.ctx = this.groupStack.pop();\r\n      composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);\r\n      this.ctx.restore();\r\n      this.ctx.save();\r\n      copyCtxState(groupCtx, this.ctx);\r\n      this.current.resumeSMaskCtx = groupCtx;\r\n\r\n      var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform);\r\n\r\n      this.ctx.transform.apply(this.ctx, deltaTransform);\r\n      groupCtx.save();\r\n      groupCtx.setTransform(1, 0, 0, 1, 0, 0);\r\n      groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height);\r\n      groupCtx.restore();\r\n    },\r\n    resumeSMaskGroup: function CanvasGraphics_resumeSMaskGroup() {\r\n      var groupCtx = this.current.resumeSMaskCtx;\r\n      var currentCtx = this.ctx;\r\n      this.ctx = groupCtx;\r\n      this.groupStack.push(currentCtx);\r\n      this.groupLevel++;\r\n    },\r\n    endSMaskGroup: function CanvasGraphics_endSMaskGroup() {\r\n      var groupCtx = this.ctx;\r\n      this.groupLevel--;\r\n      this.ctx = this.groupStack.pop();\r\n      composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);\r\n      this.ctx.restore();\r\n      copyCtxState(groupCtx, this.ctx);\r\n\r\n      var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform);\r\n\r\n      this.ctx.transform.apply(this.ctx, deltaTransform);\r\n    },\r\n    save: function CanvasGraphics_save() {\r\n      this.ctx.save();\r\n      var old = this.current;\r\n      this.stateStack.push(old);\r\n      this.current = old.clone();\r\n      this.current.resumeSMaskCtx = null;\r\n    },\r\n    restore: function CanvasGraphics_restore() {\r\n      if (this.current.resumeSMaskCtx) {\r\n        this.resumeSMaskGroup();\r\n      }\r\n\r\n      if (this.current.activeSMask !== null && (this.stateStack.length === 0 || this.stateStack[this.stateStack.length - 1].activeSMask !== this.current.activeSMask)) {\r\n        this.endSMaskGroup();\r\n      }\r\n\r\n      if (this.stateStack.length !== 0) {\r\n        this.current = this.stateStack.pop();\r\n        this.ctx.restore();\r\n        this.pendingClip = null;\r\n        this._cachedGetSinglePixelWidth = null;\r\n      } else {\r\n        this.current.activeSMask = null;\r\n      }\r\n    },\r\n    transform: function CanvasGraphics_transform(a, b, c, d, e, f) {\r\n      this.ctx.transform(a, b, c, d, e, f);\r\n      this._cachedGetSinglePixelWidth = null;\r\n    },\r\n    constructPath: function CanvasGraphics_constructPath(ops, args) {\r\n      var ctx = this.ctx;\r\n      var current = this.current;\r\n      var x = current.x,\r\n          y = current.y;\r\n\r\n      for (var i = 0, j = 0, ii = ops.length; i < ii; i++) {\r\n        switch (ops[i] | 0) {\r\n          case _util.OPS.rectangle:\r\n            x = args[j++];\r\n            y = args[j++];\r\n            var width = args[j++];\r\n            var height = args[j++];\r\n            var xw = x + width;\r\n            var yh = y + height;\r\n            ctx.moveTo(x, y);\r\n\r\n            if (width === 0 || height === 0) {\r\n              ctx.lineTo(xw, yh);\r\n            } else {\r\n              ctx.lineTo(xw, y);\r\n              ctx.lineTo(xw, yh);\r\n              ctx.lineTo(x, yh);\r\n            }\r\n\r\n            ctx.closePath();\r\n            break;\r\n\r\n          case _util.OPS.moveTo:\r\n            x = args[j++];\r\n            y = args[j++];\r\n            ctx.moveTo(x, y);\r\n            break;\r\n\r\n          case _util.OPS.lineTo:\r\n            x = args[j++];\r\n            y = args[j++];\r\n            ctx.lineTo(x, y);\r\n            break;\r\n\r\n          case _util.OPS.curveTo:\r\n            x = args[j + 4];\r\n            y = args[j + 5];\r\n            ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y);\r\n            j += 6;\r\n            break;\r\n\r\n          case _util.OPS.curveTo2:\r\n            ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);\r\n            x = args[j + 2];\r\n            y = args[j + 3];\r\n            j += 4;\r\n            break;\r\n\r\n          case _util.OPS.curveTo3:\r\n            x = args[j + 2];\r\n            y = args[j + 3];\r\n            ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);\r\n            j += 4;\r\n            break;\r\n\r\n          case _util.OPS.closePath:\r\n            ctx.closePath();\r\n            break;\r\n        }\r\n      }\r\n\r\n      current.setCurrentPoint(x, y);\r\n    },\r\n    closePath: function CanvasGraphics_closePath() {\r\n      this.ctx.closePath();\r\n    },\r\n    stroke: function CanvasGraphics_stroke(consumePath) {\r\n      consumePath = typeof consumePath !== \"undefined\" ? consumePath : true;\r\n      var ctx = this.ctx;\r\n      var strokeColor = this.current.strokeColor;\r\n      ctx.globalAlpha = this.current.strokeAlpha;\r\n\r\n      if (this.contentVisible) {\r\n        if (_typeof(strokeColor) === \"object\" && strokeColor !== null && strokeColor !== void 0 && strokeColor.getPattern) {\r\n          ctx.save();\r\n          var transform = ctx.mozCurrentTransform;\r\n\r\n          var scale = _util.Util.singularValueDecompose2dScale(transform)[0];\r\n\r\n          ctx.strokeStyle = strokeColor.getPattern(ctx, this);\r\n          var lineWidth = this.getSinglePixelWidth();\r\n          var scaledLineWidth = this.current.lineWidth * scale;\r\n\r\n          if (lineWidth < 0 && -lineWidth >= scaledLineWidth) {\r\n            ctx.resetTransform();\r\n            ctx.lineWidth = Math.round(this._combinedScaleFactor);\r\n          } else {\r\n            ctx.lineWidth = Math.max(lineWidth, scaledLineWidth);\r\n          }\r\n\r\n          ctx.stroke();\r\n          ctx.restore();\r\n        } else {\r\n          var _lineWidth = this.getSinglePixelWidth();\r\n\r\n          if (_lineWidth < 0 && -_lineWidth >= this.current.lineWidth) {\r\n            ctx.save();\r\n            ctx.resetTransform();\r\n            ctx.lineWidth = Math.round(this._combinedScaleFactor);\r\n            ctx.stroke();\r\n            ctx.restore();\r\n          } else {\r\n            ctx.lineWidth = Math.max(_lineWidth, this.current.lineWidth);\r\n            ctx.stroke();\r\n          }\r\n        }\r\n      }\r\n\r\n      if (consumePath) {\r\n        this.consumePath();\r\n      }\r\n\r\n      ctx.globalAlpha = this.current.fillAlpha;\r\n    },\r\n    closeStroke: function CanvasGraphics_closeStroke() {\r\n      this.closePath();\r\n      this.stroke();\r\n    },\r\n    fill: function CanvasGraphics_fill(consumePath) {\r\n      consumePath = typeof consumePath !== \"undefined\" ? consumePath : true;\r\n      var ctx = this.ctx;\r\n      var fillColor = this.current.fillColor;\r\n      var isPatternFill = this.current.patternFill;\r\n      var needRestore = false;\r\n\r\n      if (isPatternFill) {\r\n        ctx.save();\r\n\r\n        if (this.baseTransform) {\r\n          ctx.setTransform.apply(ctx, this.baseTransform);\r\n        }\r\n\r\n        ctx.fillStyle = fillColor.getPattern(ctx, this);\r\n        needRestore = true;\r\n      }\r\n\r\n      if (this.contentVisible) {\r\n        if (this.pendingEOFill) {\r\n          ctx.fill(\"evenodd\");\r\n          this.pendingEOFill = false;\r\n        } else {\r\n          ctx.fill();\r\n        }\r\n      }\r\n\r\n      if (needRestore) {\r\n        ctx.restore();\r\n      }\r\n\r\n      if (consumePath) {\r\n        this.consumePath();\r\n      }\r\n    },\r\n    eoFill: function CanvasGraphics_eoFill() {\r\n      this.pendingEOFill = true;\r\n      this.fill();\r\n    },\r\n    fillStroke: function CanvasGraphics_fillStroke() {\r\n      this.fill(false);\r\n      this.stroke(false);\r\n      this.consumePath();\r\n    },\r\n    eoFillStroke: function CanvasGraphics_eoFillStroke() {\r\n      this.pendingEOFill = true;\r\n      this.fillStroke();\r\n    },\r\n    closeFillStroke: function CanvasGraphics_closeFillStroke() {\r\n      this.closePath();\r\n      this.fillStroke();\r\n    },\r\n    closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() {\r\n      this.pendingEOFill = true;\r\n      this.closePath();\r\n      this.fillStroke();\r\n    },\r\n    endPath: function CanvasGraphics_endPath() {\r\n      this.consumePath();\r\n    },\r\n    clip: function CanvasGraphics_clip() {\r\n      this.pendingClip = NORMAL_CLIP;\r\n    },\r\n    eoClip: function CanvasGraphics_eoClip() {\r\n      this.pendingClip = EO_CLIP;\r\n    },\r\n    beginText: function CanvasGraphics_beginText() {\r\n      this.current.textMatrix = _util.IDENTITY_MATRIX;\r\n      this.current.textMatrixScale = 1;\r\n      this.current.x = this.current.lineX = 0;\r\n      this.current.y = this.current.lineY = 0;\r\n    },\r\n    endText: function CanvasGraphics_endText() {\r\n      var paths = this.pendingTextPaths;\r\n      var ctx = this.ctx;\r\n\r\n      if (paths === undefined) {\r\n        ctx.beginPath();\r\n        return;\r\n      }\r\n\r\n      ctx.save();\r\n      ctx.beginPath();\r\n\r\n      for (var i = 0; i < paths.length; i++) {\r\n        var path = paths[i];\r\n        ctx.setTransform.apply(ctx, path.transform);\r\n        ctx.translate(path.x, path.y);\r\n        path.addToPath(ctx, path.fontSize);\r\n      }\r\n\r\n      ctx.restore();\r\n      ctx.clip();\r\n      ctx.beginPath();\r\n      delete this.pendingTextPaths;\r\n    },\r\n    setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) {\r\n      this.current.charSpacing = spacing;\r\n    },\r\n    setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) {\r\n      this.current.wordSpacing = spacing;\r\n    },\r\n    setHScale: function CanvasGraphics_setHScale(scale) {\r\n      this.current.textHScale = scale / 100;\r\n    },\r\n    setLeading: function CanvasGraphics_setLeading(leading) {\r\n      this.current.leading = -leading;\r\n    },\r\n    setFont: function CanvasGraphics_setFont(fontRefName, size) {\r\n      var fontObj = this.commonObjs.get(fontRefName);\r\n      var current = this.current;\r\n\r\n      if (!fontObj) {\r\n        throw new Error(\"Can't find font for \".concat(fontRefName));\r\n      }\r\n\r\n      current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;\r\n\r\n      if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {\r\n        (0, _util.warn)(\"Invalid font matrix for font \" + fontRefName);\r\n      }\r\n\r\n      if (size < 0) {\r\n        size = -size;\r\n        current.fontDirection = -1;\r\n      } else {\r\n        current.fontDirection = 1;\r\n      }\r\n\r\n      this.current.font = fontObj;\r\n      this.current.fontSize = size;\r\n\r\n      if (fontObj.isType3Font) {\r\n        return;\r\n      }\r\n\r\n      var name = fontObj.loadedName || \"sans-serif\";\r\n      var bold = \"normal\";\r\n\r\n      if (fontObj.black) {\r\n        bold = \"900\";\r\n      } else if (fontObj.bold) {\r\n        bold = \"bold\";\r\n      }\r\n\r\n      var italic = fontObj.italic ? \"italic\" : \"normal\";\r\n      var typeface = \"\\\"\".concat(name, \"\\\", \").concat(fontObj.fallbackName);\r\n      var browserFontSize = size;\r\n\r\n      if (size < MIN_FONT_SIZE) {\r\n        browserFontSize = MIN_FONT_SIZE;\r\n      } else if (size > MAX_FONT_SIZE) {\r\n        browserFontSize = MAX_FONT_SIZE;\r\n      }\r\n\r\n      this.current.fontSizeScale = size / browserFontSize;\r\n      this.ctx.font = \"\".concat(italic, \" \").concat(bold, \" \").concat(browserFontSize, \"px \").concat(typeface);\r\n    },\r\n    setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) {\r\n      this.current.textRenderingMode = mode;\r\n    },\r\n    setTextRise: function CanvasGraphics_setTextRise(rise) {\r\n      this.current.textRise = rise;\r\n    },\r\n    moveText: function CanvasGraphics_moveText(x, y) {\r\n      this.current.x = this.current.lineX += x;\r\n      this.current.y = this.current.lineY += y;\r\n    },\r\n    setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) {\r\n      this.setLeading(-y);\r\n      this.moveText(x, y);\r\n    },\r\n    setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) {\r\n      this.current.textMatrix = [a, b, c, d, e, f];\r\n      this.current.textMatrixScale = Math.sqrt(a * a + b * b);\r\n      this.current.x = this.current.lineX = 0;\r\n      this.current.y = this.current.lineY = 0;\r\n    },\r\n    nextLine: function CanvasGraphics_nextLine() {\r\n      this.moveText(0, this.current.leading);\r\n    },\r\n    paintChar: function paintChar(character, x, y, patternTransform, resetLineWidthToOne) {\r\n      var ctx = this.ctx;\r\n      var current = this.current;\r\n      var font = current.font;\r\n      var textRenderingMode = current.textRenderingMode;\r\n      var fontSize = current.fontSize / current.fontSizeScale;\r\n      var fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;\r\n      var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);\r\n      var patternFill = current.patternFill && !font.missingFile;\r\n      var addToPath;\r\n\r\n      if (font.disableFontFace || isAddToPathSet || patternFill) {\r\n        addToPath = font.getPathGenerator(this.commonObjs, character);\r\n      }\r\n\r\n      if (font.disableFontFace || patternFill) {\r\n        ctx.save();\r\n        ctx.translate(x, y);\r\n        ctx.beginPath();\r\n        addToPath(ctx, fontSize);\r\n\r\n        if (patternTransform) {\r\n          ctx.setTransform.apply(ctx, patternTransform);\r\n        }\r\n\r\n        if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\r\n          ctx.fill();\r\n        }\r\n\r\n        if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\r\n          if (resetLineWidthToOne) {\r\n            ctx.resetTransform();\r\n            ctx.lineWidth = Math.round(this._combinedScaleFactor);\r\n          }\r\n\r\n          ctx.stroke();\r\n        }\r\n\r\n        ctx.restore();\r\n      } else {\r\n        if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\r\n          ctx.fillText(character, x, y);\r\n        }\r\n\r\n        if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\r\n          if (resetLineWidthToOne) {\r\n            ctx.save();\r\n            ctx.moveTo(x, y);\r\n            ctx.resetTransform();\r\n            ctx.lineWidth = Math.round(this._combinedScaleFactor);\r\n            ctx.strokeText(character, 0, 0);\r\n            ctx.restore();\r\n          } else {\r\n            ctx.strokeText(character, x, y);\r\n          }\r\n        }\r\n      }\r\n\r\n      if (isAddToPathSet) {\r\n        var paths = this.pendingTextPaths || (this.pendingTextPaths = []);\r\n        paths.push({\r\n          transform: ctx.mozCurrentTransform,\r\n          x: x,\r\n          y: y,\r\n          fontSize: fontSize,\r\n          addToPath: addToPath\r\n        });\r\n      }\r\n    },\r\n\r\n    get isFontSubpixelAAEnabled() {\r\n      var _this$cachedCanvases$ = this.cachedCanvases.getCanvas(\"isFontSubpixelAAEnabled\", 10, 10),\r\n          ctx = _this$cachedCanvases$.context;\r\n\r\n      ctx.scale(1.5, 1);\r\n      ctx.fillText(\"I\", 0, 10);\r\n      var data = ctx.getImageData(0, 0, 10, 10).data;\r\n      var enabled = false;\r\n\r\n      for (var i = 3; i < data.length; i += 4) {\r\n        if (data[i] > 0 && data[i] < 255) {\r\n          enabled = true;\r\n          break;\r\n        }\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"isFontSubpixelAAEnabled\", enabled);\r\n    },\r\n\r\n    showText: function CanvasGraphics_showText(glyphs) {\r\n      var current = this.current;\r\n      var font = current.font;\r\n\r\n      if (font.isType3Font) {\r\n        return this.showType3Text(glyphs);\r\n      }\r\n\r\n      var fontSize = current.fontSize;\r\n\r\n      if (fontSize === 0) {\r\n        return undefined;\r\n      }\r\n\r\n      var ctx = this.ctx;\r\n      var fontSizeScale = current.fontSizeScale;\r\n      var charSpacing = current.charSpacing;\r\n      var wordSpacing = current.wordSpacing;\r\n      var fontDirection = current.fontDirection;\r\n      var textHScale = current.textHScale * fontDirection;\r\n      var glyphsLength = glyphs.length;\r\n      var vertical = font.vertical;\r\n      var spacingDir = vertical ? 1 : -1;\r\n      var defaultVMetrics = font.defaultVMetrics;\r\n      var widthAdvanceScale = fontSize * current.fontMatrix[0];\r\n      var simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;\r\n      ctx.save();\r\n      var patternTransform;\r\n\r\n      if (current.patternFill) {\r\n        ctx.save();\r\n        var pattern = current.fillColor.getPattern(ctx, this);\r\n        patternTransform = ctx.mozCurrentTransform;\r\n        ctx.restore();\r\n        ctx.fillStyle = pattern;\r\n      }\r\n\r\n      ctx.transform.apply(ctx, current.textMatrix);\r\n      ctx.translate(current.x, current.y + current.textRise);\r\n\r\n      if (fontDirection > 0) {\r\n        ctx.scale(textHScale, -1);\r\n      } else {\r\n        ctx.scale(textHScale, 1);\r\n      }\r\n\r\n      var lineWidth = current.lineWidth;\r\n      var resetLineWidthToOne = false;\r\n      var scale = current.textMatrixScale;\r\n\r\n      if (scale === 0 || lineWidth === 0) {\r\n        var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;\r\n\r\n        if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\r\n          this._cachedGetSinglePixelWidth = null;\r\n          lineWidth = this.getSinglePixelWidth();\r\n          resetLineWidthToOne = lineWidth < 0;\r\n        }\r\n      } else {\r\n        lineWidth /= scale;\r\n      }\r\n\r\n      if (fontSizeScale !== 1.0) {\r\n        ctx.scale(fontSizeScale, fontSizeScale);\r\n        lineWidth /= fontSizeScale;\r\n      }\r\n\r\n      ctx.lineWidth = lineWidth;\r\n      var x = 0,\r\n          i;\r\n\r\n      for (i = 0; i < glyphsLength; ++i) {\r\n        var glyph = glyphs[i];\r\n\r\n        if ((0, _util.isNum)(glyph)) {\r\n          x += spacingDir * glyph * fontSize / 1000;\r\n          continue;\r\n        }\r\n\r\n        var restoreNeeded = false;\r\n        var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\r\n        var character = glyph.fontChar;\r\n        var accent = glyph.accent;\r\n        var scaledX = void 0,\r\n            scaledY = void 0;\r\n        var width = glyph.width;\r\n\r\n        if (vertical) {\r\n          var vmetric = glyph.vmetric || defaultVMetrics;\r\n          var vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;\r\n          var vy = vmetric[2] * widthAdvanceScale;\r\n          width = vmetric ? -vmetric[0] : width;\r\n          scaledX = vx / fontSizeScale;\r\n          scaledY = (x + vy) / fontSizeScale;\r\n        } else {\r\n          scaledX = x / fontSizeScale;\r\n          scaledY = 0;\r\n        }\r\n\r\n        if (font.remeasure && width > 0) {\r\n          var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;\r\n\r\n          if (width < measuredWidth && this.isFontSubpixelAAEnabled) {\r\n            var characterScaleX = width / measuredWidth;\r\n            restoreNeeded = true;\r\n            ctx.save();\r\n            ctx.scale(characterScaleX, 1);\r\n            scaledX /= characterScaleX;\r\n          } else if (width !== measuredWidth) {\r\n            scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;\r\n          }\r\n        }\r\n\r\n        if (this.contentVisible && (glyph.isInFont || font.missingFile)) {\r\n          if (simpleFillText && !accent) {\r\n            ctx.fillText(character, scaledX, scaledY);\r\n          } else {\r\n            this.paintChar(character, scaledX, scaledY, patternTransform, resetLineWidthToOne);\r\n\r\n            if (accent) {\r\n              var scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale;\r\n              var scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale;\r\n              this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform, resetLineWidthToOne);\r\n            }\r\n          }\r\n        }\r\n\r\n        var charWidth = void 0;\r\n\r\n        if (vertical) {\r\n          charWidth = width * widthAdvanceScale - spacing * fontDirection;\r\n        } else {\r\n          charWidth = width * widthAdvanceScale + spacing * fontDirection;\r\n        }\r\n\r\n        x += charWidth;\r\n\r\n        if (restoreNeeded) {\r\n          ctx.restore();\r\n        }\r\n      }\r\n\r\n      if (vertical) {\r\n        current.y -= x;\r\n      } else {\r\n        current.x += x * textHScale;\r\n      }\r\n\r\n      ctx.restore();\r\n    },\r\n    showType3Text: function CanvasGraphics_showType3Text(glyphs) {\r\n      var ctx = this.ctx;\r\n      var current = this.current;\r\n      var font = current.font;\r\n      var fontSize = current.fontSize;\r\n      var fontDirection = current.fontDirection;\r\n      var spacingDir = font.vertical ? 1 : -1;\r\n      var charSpacing = current.charSpacing;\r\n      var wordSpacing = current.wordSpacing;\r\n      var textHScale = current.textHScale * fontDirection;\r\n      var fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX;\r\n      var glyphsLength = glyphs.length;\r\n      var isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE;\r\n      var i, glyph, width, spacingLength;\r\n\r\n      if (isTextInvisible || fontSize === 0) {\r\n        return;\r\n      }\r\n\r\n      this._cachedGetSinglePixelWidth = null;\r\n      ctx.save();\r\n      ctx.transform.apply(ctx, current.textMatrix);\r\n      ctx.translate(current.x, current.y);\r\n      ctx.scale(textHScale, fontDirection);\r\n\r\n      for (i = 0; i < glyphsLength; ++i) {\r\n        glyph = glyphs[i];\r\n\r\n        if ((0, _util.isNum)(glyph)) {\r\n          spacingLength = spacingDir * glyph * fontSize / 1000;\r\n          this.ctx.translate(spacingLength, 0);\r\n          current.x += spacingLength * textHScale;\r\n          continue;\r\n        }\r\n\r\n        var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\r\n        var operatorList = font.charProcOperatorList[glyph.operatorListId];\r\n\r\n        if (!operatorList) {\r\n          (0, _util.warn)(\"Type3 character \\\"\".concat(glyph.operatorListId, \"\\\" is not available.\"));\r\n          continue;\r\n        }\r\n\r\n        if (this.contentVisible) {\r\n          this.processingType3 = glyph;\r\n          this.save();\r\n          ctx.scale(fontSize, fontSize);\r\n          ctx.transform.apply(ctx, fontMatrix);\r\n          this.executeOperatorList(operatorList);\r\n          this.restore();\r\n        }\r\n\r\n        var transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix);\r\n\r\n        width = transformed[0] * fontSize + spacing;\r\n        ctx.translate(width, 0);\r\n        current.x += width * textHScale;\r\n      }\r\n\r\n      ctx.restore();\r\n      this.processingType3 = null;\r\n    },\r\n    setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) {},\r\n    setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {\r\n      this.ctx.rect(llx, lly, urx - llx, ury - lly);\r\n      this.clip();\r\n      this.endPath();\r\n    },\r\n    getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) {\r\n      var _this = this;\r\n\r\n      var pattern;\r\n\r\n      if (IR[0] === \"TilingPattern\") {\r\n        var color = IR[1];\r\n        var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice();\r\n        var canvasGraphicsFactory = {\r\n          createCanvasGraphics: function createCanvasGraphics(ctx) {\r\n            return new CanvasGraphics(ctx, _this.commonObjs, _this.objs, _this.canvasFactory, _this.webGLContext);\r\n          }\r\n        };\r\n        pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform);\r\n      } else {\r\n        pattern = (0, _pattern_helper.getShadingPatternFromIR)(IR);\r\n      }\r\n\r\n      return pattern;\r\n    },\r\n    setStrokeColorN: function CanvasGraphics_setStrokeColorN() {\r\n      this.current.strokeColor = this.getColorN_Pattern(arguments);\r\n    },\r\n    setFillColorN: function CanvasGraphics_setFillColorN() {\r\n      this.current.fillColor = this.getColorN_Pattern(arguments);\r\n      this.current.patternFill = true;\r\n    },\r\n    setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) {\r\n      var color = _util.Util.makeHexColor(r, g, b);\r\n\r\n      this.ctx.strokeStyle = color;\r\n      this.current.strokeColor = color;\r\n    },\r\n    setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) {\r\n      var color = _util.Util.makeHexColor(r, g, b);\r\n\r\n      this.ctx.fillStyle = color;\r\n      this.current.fillColor = color;\r\n      this.current.patternFill = false;\r\n    },\r\n    shadingFill: function CanvasGraphics_shadingFill(patternIR) {\r\n      if (!this.contentVisible) {\r\n        return;\r\n      }\r\n\r\n      var ctx = this.ctx;\r\n      this.save();\r\n      var pattern = (0, _pattern_helper.getShadingPatternFromIR)(patternIR);\r\n      ctx.fillStyle = pattern.getPattern(ctx, this, true);\r\n      var inv = ctx.mozCurrentTransformInverse;\r\n\r\n      if (inv) {\r\n        var canvas = ctx.canvas;\r\n        var width = canvas.width;\r\n        var height = canvas.height;\r\n\r\n        var bl = _util.Util.applyTransform([0, 0], inv);\r\n\r\n        var br = _util.Util.applyTransform([0, height], inv);\r\n\r\n        var ul = _util.Util.applyTransform([width, 0], inv);\r\n\r\n        var ur = _util.Util.applyTransform([width, height], inv);\r\n\r\n        var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);\r\n        var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);\r\n        var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);\r\n        var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);\r\n        this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);\r\n      } else {\r\n        this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\r\n      }\r\n\r\n      this.restore();\r\n    },\r\n    beginInlineImage: function CanvasGraphics_beginInlineImage() {\r\n      (0, _util.unreachable)(\"Should not call beginInlineImage\");\r\n    },\r\n    beginImageData: function CanvasGraphics_beginImageData() {\r\n      (0, _util.unreachable)(\"Should not call beginImageData\");\r\n    },\r\n    paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix, bbox) {\r\n      if (!this.contentVisible) {\r\n        return;\r\n      }\r\n\r\n      this.save();\r\n      this.baseTransformStack.push(this.baseTransform);\r\n\r\n      if (Array.isArray(matrix) && matrix.length === 6) {\r\n        this.transform.apply(this, matrix);\r\n      }\r\n\r\n      this.baseTransform = this.ctx.mozCurrentTransform;\r\n\r\n      if (bbox) {\r\n        var width = bbox[2] - bbox[0];\r\n        var height = bbox[3] - bbox[1];\r\n        this.ctx.rect(bbox[0], bbox[1], width, height);\r\n        this.clip();\r\n        this.endPath();\r\n      }\r\n    },\r\n    paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() {\r\n      if (!this.contentVisible) {\r\n        return;\r\n      }\r\n\r\n      this.restore();\r\n      this.baseTransform = this.baseTransformStack.pop();\r\n    },\r\n    beginGroup: function CanvasGraphics_beginGroup(group) {\r\n      if (!this.contentVisible) {\r\n        return;\r\n      }\r\n\r\n      this.save();\r\n      var currentCtx = this.ctx;\r\n\r\n      if (!group.isolated) {\r\n        (0, _util.info)(\"TODO: Support non-isolated groups.\");\r\n      }\r\n\r\n      if (group.knockout) {\r\n        (0, _util.warn)(\"Knockout groups not supported.\");\r\n      }\r\n\r\n      var currentTransform = currentCtx.mozCurrentTransform;\r\n\r\n      if (group.matrix) {\r\n        currentCtx.transform.apply(currentCtx, group.matrix);\r\n      }\r\n\r\n      if (!group.bbox) {\r\n        throw new Error(\"Bounding box is required.\");\r\n      }\r\n\r\n      var bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform);\r\n\r\n      var canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];\r\n      bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];\r\n      var offsetX = Math.floor(bounds[0]);\r\n      var offsetY = Math.floor(bounds[1]);\r\n      var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);\r\n      var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);\r\n      var scaleX = 1,\r\n          scaleY = 1;\r\n\r\n      if (drawnWidth > MAX_GROUP_SIZE) {\r\n        scaleX = drawnWidth / MAX_GROUP_SIZE;\r\n        drawnWidth = MAX_GROUP_SIZE;\r\n      }\r\n\r\n      if (drawnHeight > MAX_GROUP_SIZE) {\r\n        scaleY = drawnHeight / MAX_GROUP_SIZE;\r\n        drawnHeight = MAX_GROUP_SIZE;\r\n      }\r\n\r\n      var cacheId = \"groupAt\" + this.groupLevel;\r\n\r\n      if (group.smask) {\r\n        cacheId += \"_smask_\" + this.smaskCounter++ % 2;\r\n      }\r\n\r\n      var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);\r\n      var groupCtx = scratchCanvas.context;\r\n      groupCtx.scale(1 / scaleX, 1 / scaleY);\r\n      groupCtx.translate(-offsetX, -offsetY);\r\n      groupCtx.transform.apply(groupCtx, currentTransform);\r\n\r\n      if (group.smask) {\r\n        this.smaskStack.push({\r\n          canvas: scratchCanvas.canvas,\r\n          context: groupCtx,\r\n          offsetX: offsetX,\r\n          offsetY: offsetY,\r\n          scaleX: scaleX,\r\n          scaleY: scaleY,\r\n          subtype: group.smask.subtype,\r\n          backdrop: group.smask.backdrop,\r\n          transferMap: group.smask.transferMap || null,\r\n          startTransformInverse: null\r\n        });\r\n      } else {\r\n        currentCtx.setTransform(1, 0, 0, 1, 0, 0);\r\n        currentCtx.translate(offsetX, offsetY);\r\n        currentCtx.scale(scaleX, scaleY);\r\n      }\r\n\r\n      copyCtxState(currentCtx, groupCtx);\r\n      this.ctx = groupCtx;\r\n      this.setGState([[\"BM\", \"source-over\"], [\"ca\", 1], [\"CA\", 1]]);\r\n      this.groupStack.push(currentCtx);\r\n      this.groupLevel++;\r\n      this.current.activeSMask = null;\r\n    },\r\n    endGroup: function CanvasGraphics_endGroup(group) {\r\n      if (!this.contentVisible) {\r\n        return;\r\n      }\r\n\r\n      this.groupLevel--;\r\n      var groupCtx = this.ctx;\r\n      this.ctx = this.groupStack.pop();\r\n\r\n      if (this.ctx.imageSmoothingEnabled !== undefined) {\r\n        this.ctx.imageSmoothingEnabled = false;\r\n      } else {\r\n        this.ctx.mozImageSmoothingEnabled = false;\r\n      }\r\n\r\n      if (group.smask) {\r\n        this.tempSMask = this.smaskStack.pop();\r\n      } else {\r\n        this.ctx.drawImage(groupCtx.canvas, 0, 0);\r\n      }\r\n\r\n      this.restore();\r\n    },\r\n    beginAnnotations: function CanvasGraphics_beginAnnotations() {\r\n      this.save();\r\n\r\n      if (this.baseTransform) {\r\n        this.ctx.setTransform.apply(this.ctx, this.baseTransform);\r\n      }\r\n    },\r\n    endAnnotations: function CanvasGraphics_endAnnotations() {\r\n      this.restore();\r\n    },\r\n    beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) {\r\n      this.save();\r\n      resetCtxToDefault(this.ctx);\r\n      this.current = new CanvasExtraState();\r\n\r\n      if (Array.isArray(rect) && rect.length === 4) {\r\n        var width = rect[2] - rect[0];\r\n        var height = rect[3] - rect[1];\r\n        this.ctx.rect(rect[0], rect[1], width, height);\r\n        this.clip();\r\n        this.endPath();\r\n      }\r\n\r\n      this.transform.apply(this, transform);\r\n      this.transform.apply(this, matrix);\r\n    },\r\n    endAnnotation: function CanvasGraphics_endAnnotation() {\r\n      this.restore();\r\n    },\r\n    paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) {\r\n      if (!this.contentVisible) {\r\n        return;\r\n      }\r\n\r\n      var ctx = this.ctx;\r\n      var width = img.width,\r\n          height = img.height;\r\n      var fillColor = this.current.fillColor;\r\n      var isPatternFill = this.current.patternFill;\r\n      var glyph = this.processingType3;\r\n\r\n      if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) {\r\n        if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {\r\n          glyph.compiled = compileType3Glyph({\r\n            data: img.data,\r\n            width: width,\r\n            height: height\r\n          });\r\n        } else {\r\n          glyph.compiled = null;\r\n        }\r\n      }\r\n\r\n      if (glyph !== null && glyph !== void 0 && glyph.compiled) {\r\n        glyph.compiled(ctx);\r\n        return;\r\n      }\r\n\r\n      var maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\r\n      var maskCtx = maskCanvas.context;\r\n      maskCtx.save();\r\n      putBinaryImageMask(maskCtx, img);\r\n      maskCtx.globalCompositeOperation = \"source-in\";\r\n      maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;\r\n      maskCtx.fillRect(0, 0, width, height);\r\n      maskCtx.restore();\r\n      this.paintInlineImageXObject(maskCanvas.canvas);\r\n    },\r\n    paintImageMaskXObjectRepeat: function paintImageMaskXObjectRepeat(imgData, scaleX) {\r\n      var skewX = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\r\n      var skewY = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\r\n      var scaleY = arguments.length > 4 ? arguments[4] : undefined;\r\n      var positions = arguments.length > 5 ? arguments[5] : undefined;\r\n\r\n      if (!this.contentVisible) {\r\n        return;\r\n      }\r\n\r\n      var width = imgData.width;\r\n      var height = imgData.height;\r\n      var fillColor = this.current.fillColor;\r\n      var isPatternFill = this.current.patternFill;\r\n      var maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\r\n      var maskCtx = maskCanvas.context;\r\n      maskCtx.save();\r\n      putBinaryImageMask(maskCtx, imgData);\r\n      maskCtx.globalCompositeOperation = \"source-in\";\r\n      maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;\r\n      maskCtx.fillRect(0, 0, width, height);\r\n      maskCtx.restore();\r\n      var ctx = this.ctx;\r\n\r\n      for (var i = 0, ii = positions.length; i < ii; i += 2) {\r\n        ctx.save();\r\n        ctx.transform(scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]);\r\n        ctx.scale(1, -1);\r\n        ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);\r\n        ctx.restore();\r\n      }\r\n    },\r\n    paintImageMaskXObjectGroup: function CanvasGraphics_paintImageMaskXObjectGroup(images) {\r\n      if (!this.contentVisible) {\r\n        return;\r\n      }\r\n\r\n      var ctx = this.ctx;\r\n      var fillColor = this.current.fillColor;\r\n      var isPatternFill = this.current.patternFill;\r\n\r\n      for (var i = 0, ii = images.length; i < ii; i++) {\r\n        var image = images[i];\r\n        var width = image.width,\r\n            height = image.height;\r\n        var maskCanvas = this.cachedCanvases.getCanvas(\"maskCanvas\", width, height);\r\n        var maskCtx = maskCanvas.context;\r\n        maskCtx.save();\r\n        putBinaryImageMask(maskCtx, image);\r\n        maskCtx.globalCompositeOperation = \"source-in\";\r\n        maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;\r\n        maskCtx.fillRect(0, 0, width, height);\r\n        maskCtx.restore();\r\n        ctx.save();\r\n        ctx.transform.apply(ctx, image.transform);\r\n        ctx.scale(1, -1);\r\n        ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);\r\n        ctx.restore();\r\n      }\r\n    },\r\n    paintImageXObject: function CanvasGraphics_paintImageXObject(objId) {\r\n      if (!this.contentVisible) {\r\n        return;\r\n      }\r\n\r\n      var imgData = objId.startsWith(\"g_\") ? this.commonObjs.get(objId) : this.objs.get(objId);\r\n\r\n      if (!imgData) {\r\n        (0, _util.warn)(\"Dependent image isn't ready yet\");\r\n        return;\r\n      }\r\n\r\n      this.paintInlineImageXObject(imgData);\r\n    },\r\n    paintImageXObjectRepeat: function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {\r\n      if (!this.contentVisible) {\r\n        return;\r\n      }\r\n\r\n      var imgData = objId.startsWith(\"g_\") ? this.commonObjs.get(objId) : this.objs.get(objId);\r\n\r\n      if (!imgData) {\r\n        (0, _util.warn)(\"Dependent image isn't ready yet\");\r\n        return;\r\n      }\r\n\r\n      var width = imgData.width;\r\n      var height = imgData.height;\r\n      var map = [];\r\n\r\n      for (var i = 0, ii = positions.length; i < ii; i += 2) {\r\n        map.push({\r\n          transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],\r\n          x: 0,\r\n          y: 0,\r\n          w: width,\r\n          h: height\r\n        });\r\n      }\r\n\r\n      this.paintInlineImageXObjectGroup(imgData, map);\r\n    },\r\n    paintInlineImageXObject: function CanvasGraphics_paintInlineImageXObject(imgData) {\r\n      if (!this.contentVisible) {\r\n        return;\r\n      }\r\n\r\n      var width = imgData.width;\r\n      var height = imgData.height;\r\n      var ctx = this.ctx;\r\n      this.save();\r\n      ctx.scale(1 / width, -1 / height);\r\n      var currentTransform = ctx.mozCurrentTransformInverse;\r\n      var a = currentTransform[0],\r\n          b = currentTransform[1];\r\n      var widthScale = Math.max(Math.sqrt(a * a + b * b), 1);\r\n      var c = currentTransform[2],\r\n          d = currentTransform[3];\r\n      var heightScale = Math.max(Math.sqrt(c * c + d * d), 1);\r\n      var imgToPaint, tmpCanvas, tmpCtx;\r\n\r\n      if (typeof HTMLElement === \"function\" && imgData instanceof HTMLElement || !imgData.data) {\r\n        imgToPaint = imgData;\r\n      } else {\r\n        tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", width, height);\r\n        tmpCtx = tmpCanvas.context;\r\n        putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);\r\n        imgToPaint = tmpCanvas.canvas;\r\n      }\r\n\r\n      var paintWidth = width,\r\n          paintHeight = height;\r\n      var tmpCanvasId = \"prescale1\";\r\n\r\n      while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {\r\n        var newWidth = paintWidth,\r\n            newHeight = paintHeight;\r\n\r\n        if (widthScale > 2 && paintWidth > 1) {\r\n          newWidth = Math.ceil(paintWidth / 2);\r\n          widthScale /= paintWidth / newWidth;\r\n        }\r\n\r\n        if (heightScale > 2 && paintHeight > 1) {\r\n          newHeight = Math.ceil(paintHeight / 2);\r\n          heightScale /= paintHeight / newHeight;\r\n        }\r\n\r\n        tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);\r\n        tmpCtx = tmpCanvas.context;\r\n        tmpCtx.clearRect(0, 0, newWidth, newHeight);\r\n        tmpCtx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);\r\n        imgToPaint = tmpCanvas.canvas;\r\n        paintWidth = newWidth;\r\n        paintHeight = newHeight;\r\n        tmpCanvasId = tmpCanvasId === \"prescale1\" ? \"prescale2\" : \"prescale1\";\r\n      }\r\n\r\n      ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, -height, width, height);\r\n\r\n      if (this.imageLayer) {\r\n        var position = this.getCanvasPosition(0, -height);\r\n        this.imageLayer.appendImage({\r\n          imgData: imgData,\r\n          left: position[0],\r\n          top: position[1],\r\n          width: width / currentTransform[0],\r\n          height: height / currentTransform[3]\r\n        });\r\n      }\r\n\r\n      this.restore();\r\n    },\r\n    paintInlineImageXObjectGroup: function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) {\r\n      if (!this.contentVisible) {\r\n        return;\r\n      }\r\n\r\n      var ctx = this.ctx;\r\n      var w = imgData.width;\r\n      var h = imgData.height;\r\n      var tmpCanvas = this.cachedCanvases.getCanvas(\"inlineImage\", w, h);\r\n      var tmpCtx = tmpCanvas.context;\r\n      putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);\r\n\r\n      for (var i = 0, ii = map.length; i < ii; i++) {\r\n        var entry = map[i];\r\n        ctx.save();\r\n        ctx.transform.apply(ctx, entry.transform);\r\n        ctx.scale(1, -1);\r\n        ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);\r\n\r\n        if (this.imageLayer) {\r\n          var position = this.getCanvasPosition(entry.x, entry.y);\r\n          this.imageLayer.appendImage({\r\n            imgData: imgData,\r\n            left: position[0],\r\n            top: position[1],\r\n            width: w,\r\n            height: h\r\n          });\r\n        }\r\n\r\n        ctx.restore();\r\n      }\r\n    },\r\n    paintSolidColorImageMask: function CanvasGraphics_paintSolidColorImageMask() {\r\n      if (!this.contentVisible) {\r\n        return;\r\n      }\r\n\r\n      this.ctx.fillRect(0, 0, 1, 1);\r\n    },\r\n    markPoint: function CanvasGraphics_markPoint(tag) {},\r\n    markPointProps: function CanvasGraphics_markPointProps(tag, properties) {},\r\n    beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {\r\n      this.markedContentStack.push({\r\n        visible: true\r\n      });\r\n    },\r\n    beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(tag, properties) {\r\n      if (tag === \"OC\") {\r\n        this.markedContentStack.push({\r\n          visible: this.optionalContentConfig.isVisible(properties)\r\n        });\r\n      } else {\r\n        this.markedContentStack.push({\r\n          visible: true\r\n        });\r\n      }\r\n\r\n      this.contentVisible = this.isContentVisible();\r\n    },\r\n    endMarkedContent: function CanvasGraphics_endMarkedContent() {\r\n      this.markedContentStack.pop();\r\n      this.contentVisible = this.isContentVisible();\r\n    },\r\n    beginCompat: function CanvasGraphics_beginCompat() {},\r\n    endCompat: function CanvasGraphics_endCompat() {},\r\n    consumePath: function CanvasGraphics_consumePath() {\r\n      var ctx = this.ctx;\r\n\r\n      if (this.pendingClip) {\r\n        if (this.pendingClip === EO_CLIP) {\r\n          ctx.clip(\"evenodd\");\r\n        } else {\r\n          ctx.clip();\r\n        }\r\n\r\n        this.pendingClip = null;\r\n      }\r\n\r\n      ctx.beginPath();\r\n    },\r\n    getSinglePixelWidth: function getSinglePixelWidth() {\r\n      if (this._cachedGetSinglePixelWidth === null) {\r\n        var m = this.ctx.mozCurrentTransform;\r\n        var absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);\r\n        var sqNorm1 = Math.pow(m[0], 2) + Math.pow(m[2], 2);\r\n        var sqNorm2 = Math.pow(m[1], 2) + Math.pow(m[3], 2);\r\n        var pixelHeight = Math.sqrt(Math.max(sqNorm1, sqNorm2)) / absDet;\r\n\r\n        if (sqNorm1 !== sqNorm2 && this._combinedScaleFactor * pixelHeight > 1) {\r\n          this._cachedGetSinglePixelWidth = -(this._combinedScaleFactor * pixelHeight);\r\n        } else if (absDet > Number.EPSILON) {\r\n          this._cachedGetSinglePixelWidth = pixelHeight * 1.0000001;\r\n        } else {\r\n          this._cachedGetSinglePixelWidth = 1;\r\n        }\r\n      }\r\n\r\n      return this._cachedGetSinglePixelWidth;\r\n    },\r\n    getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) {\r\n      var transform = this.ctx.mozCurrentTransform;\r\n      return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]];\r\n    },\r\n    isContentVisible: function CanvasGraphics_isContentVisible() {\r\n      for (var i = this.markedContentStack.length - 1; i >= 0; i--) {\r\n        if (!this.markedContentStack[i].visible) {\r\n          return false;\r\n        }\r\n      }\r\n\r\n      return true;\r\n    }\r\n  };\r\n\r\n  for (var op in _util.OPS) {\r\n    CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op];\r\n  }\r\n\r\n  return CanvasGraphics;\r\n}();\r\n\r\nexports.CanvasGraphics = CanvasGraphics;\r\n\r\n/***/ }),\r\n/* 141 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.getShadingPatternFromIR = getShadingPatternFromIR;\r\nexports.TilingPattern = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar ShadingIRs = {};\r\n\r\nfunction applyBoundingBox(ctx, bbox) {\r\n  if (!bbox || typeof Path2D === \"undefined\") {\r\n    return;\r\n  }\r\n\r\n  var width = bbox[2] - bbox[0];\r\n  var height = bbox[3] - bbox[1];\r\n  var region = new Path2D();\r\n  region.rect(bbox[0], bbox[1], width, height);\r\n  ctx.clip(region);\r\n}\r\n\r\nShadingIRs.RadialAxial = {\r\n  fromIR: function RadialAxial_fromIR(raw) {\r\n    var type = raw[1];\r\n    var bbox = raw[2];\r\n    var colorStops = raw[3];\r\n    var p0 = raw[4];\r\n    var p1 = raw[5];\r\n    var r0 = raw[6];\r\n    var r1 = raw[7];\r\n    return {\r\n      getPattern: function RadialAxial_getPattern(ctx) {\r\n        applyBoundingBox(ctx, bbox);\r\n        var grad;\r\n\r\n        if (type === \"axial\") {\r\n          grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);\r\n        } else if (type === \"radial\") {\r\n          grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);\r\n        }\r\n\r\n        for (var i = 0, ii = colorStops.length; i < ii; ++i) {\r\n          var c = colorStops[i];\r\n          grad.addColorStop(c[0], c[1]);\r\n        }\r\n\r\n        return grad;\r\n      }\r\n    };\r\n  }\r\n};\r\n\r\nvar createMeshCanvas = function createMeshCanvasClosure() {\r\n  function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {\r\n    var coords = context.coords,\r\n        colors = context.colors;\r\n    var bytes = data.data,\r\n        rowSize = data.width * 4;\r\n    var tmp;\r\n\r\n    if (coords[p1 + 1] > coords[p2 + 1]) {\r\n      tmp = p1;\r\n      p1 = p2;\r\n      p2 = tmp;\r\n      tmp = c1;\r\n      c1 = c2;\r\n      c2 = tmp;\r\n    }\r\n\r\n    if (coords[p2 + 1] > coords[p3 + 1]) {\r\n      tmp = p2;\r\n      p2 = p3;\r\n      p3 = tmp;\r\n      tmp = c2;\r\n      c2 = c3;\r\n      c3 = tmp;\r\n    }\r\n\r\n    if (coords[p1 + 1] > coords[p2 + 1]) {\r\n      tmp = p1;\r\n      p1 = p2;\r\n      p2 = tmp;\r\n      tmp = c1;\r\n      c1 = c2;\r\n      c2 = tmp;\r\n    }\r\n\r\n    var x1 = (coords[p1] + context.offsetX) * context.scaleX;\r\n    var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;\r\n    var x2 = (coords[p2] + context.offsetX) * context.scaleX;\r\n    var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;\r\n    var x3 = (coords[p3] + context.offsetX) * context.scaleX;\r\n    var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;\r\n\r\n    if (y1 >= y3) {\r\n      return;\r\n    }\r\n\r\n    var c1r = colors[c1],\r\n        c1g = colors[c1 + 1],\r\n        c1b = colors[c1 + 2];\r\n    var c2r = colors[c2],\r\n        c2g = colors[c2 + 1],\r\n        c2b = colors[c2 + 2];\r\n    var c3r = colors[c3],\r\n        c3g = colors[c3 + 1],\r\n        c3b = colors[c3 + 2];\r\n    var minY = Math.round(y1),\r\n        maxY = Math.round(y3);\r\n    var xa, car, cag, cab;\r\n    var xb, cbr, cbg, cbb;\r\n\r\n    for (var y = minY; y <= maxY; y++) {\r\n      if (y < y2) {\r\n        var _k = void 0;\r\n\r\n        if (y < y1) {\r\n          _k = 0;\r\n        } else if (y1 === y2) {\r\n          _k = 1;\r\n        } else {\r\n          _k = (y1 - y) / (y1 - y2);\r\n        }\r\n\r\n        xa = x1 - (x1 - x2) * _k;\r\n        car = c1r - (c1r - c2r) * _k;\r\n        cag = c1g - (c1g - c2g) * _k;\r\n        cab = c1b - (c1b - c2b) * _k;\r\n      } else {\r\n        var _k2 = void 0;\r\n\r\n        if (y > y3) {\r\n          _k2 = 1;\r\n        } else if (y2 === y3) {\r\n          _k2 = 0;\r\n        } else {\r\n          _k2 = (y2 - y) / (y2 - y3);\r\n        }\r\n\r\n        xa = x2 - (x2 - x3) * _k2;\r\n        car = c2r - (c2r - c3r) * _k2;\r\n        cag = c2g - (c2g - c3g) * _k2;\r\n        cab = c2b - (c2b - c3b) * _k2;\r\n      }\r\n\r\n      var k = void 0;\r\n\r\n      if (y < y1) {\r\n        k = 0;\r\n      } else if (y > y3) {\r\n        k = 1;\r\n      } else {\r\n        k = (y1 - y) / (y1 - y3);\r\n      }\r\n\r\n      xb = x1 - (x1 - x3) * k;\r\n      cbr = c1r - (c1r - c3r) * k;\r\n      cbg = c1g - (c1g - c3g) * k;\r\n      cbb = c1b - (c1b - c3b) * k;\r\n      var x1_ = Math.round(Math.min(xa, xb));\r\n      var x2_ = Math.round(Math.max(xa, xb));\r\n      var j = rowSize * y + x1_ * 4;\r\n\r\n      for (var x = x1_; x <= x2_; x++) {\r\n        k = (xa - x) / (xa - xb);\r\n\r\n        if (k < 0) {\r\n          k = 0;\r\n        } else if (k > 1) {\r\n          k = 1;\r\n        }\r\n\r\n        bytes[j++] = car - (car - cbr) * k | 0;\r\n        bytes[j++] = cag - (cag - cbg) * k | 0;\r\n        bytes[j++] = cab - (cab - cbb) * k | 0;\r\n        bytes[j++] = 255;\r\n      }\r\n    }\r\n  }\r\n\r\n  function drawFigure(data, figure, context) {\r\n    var ps = figure.coords;\r\n    var cs = figure.colors;\r\n    var i, ii;\r\n\r\n    switch (figure.type) {\r\n      case \"lattice\":\r\n        var verticesPerRow = figure.verticesPerRow;\r\n        var rows = Math.floor(ps.length / verticesPerRow) - 1;\r\n        var cols = verticesPerRow - 1;\r\n\r\n        for (i = 0; i < rows; i++) {\r\n          var q = i * verticesPerRow;\r\n\r\n          for (var j = 0; j < cols; j++, q++) {\r\n            drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]);\r\n            drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);\r\n          }\r\n        }\r\n\r\n        break;\r\n\r\n      case \"triangles\":\r\n        for (i = 0, ii = ps.length; i < ii; i += 3) {\r\n          drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]);\r\n        }\r\n\r\n        break;\r\n\r\n      default:\r\n        throw new Error(\"illegal figure\");\r\n    }\r\n  }\r\n\r\n  function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, webGLContext) {\r\n    var EXPECTED_SCALE = 1.1;\r\n    var MAX_PATTERN_SIZE = 3000;\r\n    var BORDER_SIZE = 2;\r\n    var offsetX = Math.floor(bounds[0]);\r\n    var offsetY = Math.floor(bounds[1]);\r\n    var boundsWidth = Math.ceil(bounds[2]) - offsetX;\r\n    var boundsHeight = Math.ceil(bounds[3]) - offsetY;\r\n    var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);\r\n    var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);\r\n    var scaleX = boundsWidth / width;\r\n    var scaleY = boundsHeight / height;\r\n    var context = {\r\n      coords: coords,\r\n      colors: colors,\r\n      offsetX: -offsetX,\r\n      offsetY: -offsetY,\r\n      scaleX: 1 / scaleX,\r\n      scaleY: 1 / scaleY\r\n    };\r\n    var paddedWidth = width + BORDER_SIZE * 2;\r\n    var paddedHeight = height + BORDER_SIZE * 2;\r\n    var canvas, tmpCanvas, i, ii;\r\n\r\n    if (webGLContext.isEnabled) {\r\n      canvas = webGLContext.drawFigures({\r\n        width: width,\r\n        height: height,\r\n        backgroundColor: backgroundColor,\r\n        figures: figures,\r\n        context: context\r\n      });\r\n      tmpCanvas = cachedCanvases.getCanvas(\"mesh\", paddedWidth, paddedHeight, false);\r\n      tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE);\r\n      canvas = tmpCanvas.canvas;\r\n    } else {\r\n      tmpCanvas = cachedCanvases.getCanvas(\"mesh\", paddedWidth, paddedHeight, false);\r\n      var tmpCtx = tmpCanvas.context;\r\n      var data = tmpCtx.createImageData(width, height);\r\n\r\n      if (backgroundColor) {\r\n        var bytes = data.data;\r\n\r\n        for (i = 0, ii = bytes.length; i < ii; i += 4) {\r\n          bytes[i] = backgroundColor[0];\r\n          bytes[i + 1] = backgroundColor[1];\r\n          bytes[i + 2] = backgroundColor[2];\r\n          bytes[i + 3] = 255;\r\n        }\r\n      }\r\n\r\n      for (i = 0; i < figures.length; i++) {\r\n        drawFigure(data, figures[i], context);\r\n      }\r\n\r\n      tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);\r\n      canvas = tmpCanvas.canvas;\r\n    }\r\n\r\n    return {\r\n      canvas: canvas,\r\n      offsetX: offsetX - BORDER_SIZE * scaleX,\r\n      offsetY: offsetY - BORDER_SIZE * scaleY,\r\n      scaleX: scaleX,\r\n      scaleY: scaleY\r\n    };\r\n  }\r\n\r\n  return createMeshCanvas;\r\n}();\r\n\r\nShadingIRs.Mesh = {\r\n  fromIR: function Mesh_fromIR(raw) {\r\n    var coords = raw[2];\r\n    var colors = raw[3];\r\n    var figures = raw[4];\r\n    var bounds = raw[5];\r\n    var matrix = raw[6];\r\n    var bbox = raw[7];\r\n    var background = raw[8];\r\n    return {\r\n      getPattern: function Mesh_getPattern(ctx, owner, shadingFill) {\r\n        applyBoundingBox(ctx, bbox);\r\n        var scale;\r\n\r\n        if (shadingFill) {\r\n          scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);\r\n        } else {\r\n          scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);\r\n\r\n          if (matrix) {\r\n            var matrixScale = _util.Util.singularValueDecompose2dScale(matrix);\r\n\r\n            scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];\r\n          }\r\n        }\r\n\r\n        var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases, owner.webGLContext);\r\n\r\n        if (!shadingFill) {\r\n          ctx.setTransform.apply(ctx, owner.baseTransform);\r\n\r\n          if (matrix) {\r\n            ctx.transform.apply(ctx, matrix);\r\n          }\r\n        }\r\n\r\n        ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);\r\n        ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);\r\n        return ctx.createPattern(temporaryPatternCanvas.canvas, \"no-repeat\");\r\n      }\r\n    };\r\n  }\r\n};\r\nShadingIRs.Dummy = {\r\n  fromIR: function Dummy_fromIR() {\r\n    return {\r\n      getPattern: function Dummy_fromIR_getPattern() {\r\n        return \"hotpink\";\r\n      }\r\n    };\r\n  }\r\n};\r\n\r\nfunction getShadingPatternFromIR(raw) {\r\n  var shadingIR = ShadingIRs[raw[0]];\r\n\r\n  if (!shadingIR) {\r\n    throw new Error(\"Unknown IR type: \".concat(raw[0]));\r\n  }\r\n\r\n  return shadingIR.fromIR(raw);\r\n}\r\n\r\nvar TilingPattern = function TilingPatternClosure() {\r\n  var PaintType = {\r\n    COLORED: 1,\r\n    UNCOLORED: 2\r\n  };\r\n  var MAX_PATTERN_SIZE = 3000;\r\n\r\n  function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) {\r\n    this.operatorList = IR[2];\r\n    this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];\r\n    this.bbox = IR[4];\r\n    this.xstep = IR[5];\r\n    this.ystep = IR[6];\r\n    this.paintType = IR[7];\r\n    this.tilingType = IR[8];\r\n    this.color = color;\r\n    this.canvasGraphicsFactory = canvasGraphicsFactory;\r\n    this.baseTransform = baseTransform;\r\n    this.ctx = ctx;\r\n  }\r\n\r\n  TilingPattern.prototype = {\r\n    createPatternCanvas: function TilinPattern_createPatternCanvas(owner) {\r\n      var operatorList = this.operatorList;\r\n      var bbox = this.bbox;\r\n      var xstep = this.xstep;\r\n      var ystep = this.ystep;\r\n      var paintType = this.paintType;\r\n      var tilingType = this.tilingType;\r\n      var color = this.color;\r\n      var canvasGraphicsFactory = this.canvasGraphicsFactory;\r\n      (0, _util.info)(\"TilingType: \" + tilingType);\r\n      var x0 = bbox[0],\r\n          y0 = bbox[1],\r\n          x1 = bbox[2],\r\n          y1 = bbox[3];\r\n\r\n      var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);\r\n\r\n      var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);\r\n\r\n      var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];\r\n      var dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);\r\n      var dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);\r\n      var tmpCanvas = owner.cachedCanvases.getCanvas(\"pattern\", dimx.size, dimy.size, true);\r\n      var tmpCtx = tmpCanvas.context;\r\n      var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);\r\n      graphics.groupLevel = owner.groupLevel;\r\n      this.setFillAndStrokeStyleToContext(graphics, paintType, color);\r\n      graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);\r\n      graphics.transform(1, 0, 0, 1, -x0, -y0);\r\n      this.clipBbox(graphics, bbox, x0, y0, x1, y1);\r\n      graphics.executeOperatorList(operatorList);\r\n      this.ctx.transform(1, 0, 0, 1, x0, y0);\r\n      this.ctx.scale(1 / dimx.scale, 1 / dimy.scale);\r\n      return tmpCanvas.canvas;\r\n    },\r\n    getSizeAndScale: function TilingPattern_getSizeAndScale(step, realOutputSize, scale) {\r\n      step = Math.abs(step);\r\n      var maxSize = Math.max(MAX_PATTERN_SIZE, realOutputSize);\r\n      var size = Math.ceil(step * scale);\r\n\r\n      if (size >= maxSize) {\r\n        size = maxSize;\r\n      } else {\r\n        scale = size / step;\r\n      }\r\n\r\n      return {\r\n        scale: scale,\r\n        size: size\r\n      };\r\n    },\r\n    clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) {\r\n      if (Array.isArray(bbox) && bbox.length === 4) {\r\n        var bboxWidth = x1 - x0;\r\n        var bboxHeight = y1 - y0;\r\n        graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);\r\n        graphics.clip();\r\n        graphics.endPath();\r\n      }\r\n    },\r\n    setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(graphics, paintType, color) {\r\n      var context = graphics.ctx,\r\n          current = graphics.current;\r\n\r\n      switch (paintType) {\r\n        case PaintType.COLORED:\r\n          var ctx = this.ctx;\r\n          context.fillStyle = ctx.fillStyle;\r\n          context.strokeStyle = ctx.strokeStyle;\r\n          current.fillColor = ctx.fillStyle;\r\n          current.strokeColor = ctx.strokeStyle;\r\n          break;\r\n\r\n        case PaintType.UNCOLORED:\r\n          var cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]);\r\n\r\n          context.fillStyle = cssColor;\r\n          context.strokeStyle = cssColor;\r\n          current.fillColor = cssColor;\r\n          current.strokeColor = cssColor;\r\n          break;\r\n\r\n        default:\r\n          throw new _util.FormatError(\"Unsupported paint type: \".concat(paintType));\r\n      }\r\n    },\r\n    getPattern: function TilingPattern_getPattern(ctx, owner) {\r\n      ctx = this.ctx;\r\n      ctx.setTransform.apply(ctx, this.baseTransform);\r\n      ctx.transform.apply(ctx, this.matrix);\r\n      var temporaryPatternCanvas = this.createPatternCanvas(owner);\r\n      return ctx.createPattern(temporaryPatternCanvas, \"repeat\");\r\n    }\r\n  };\r\n  return TilingPattern;\r\n}();\r\n\r\nexports.TilingPattern = TilingPattern;\r\n\r\n/***/ }),\r\n/* 142 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.GlobalWorkerOptions = void 0;\r\nvar GlobalWorkerOptions = Object.create(null);\r\nexports.GlobalWorkerOptions = GlobalWorkerOptions;\r\nGlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort;\r\nGlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? \"\" : GlobalWorkerOptions.workerSrc;\r\n\r\n/***/ }),\r\n/* 143 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.MessageHandler = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nvar CallbackKind = {\r\n  UNKNOWN: 0,\r\n  DATA: 1,\r\n  ERROR: 2\r\n};\r\nvar StreamKind = {\r\n  UNKNOWN: 0,\r\n  CANCEL: 1,\r\n  CANCEL_COMPLETE: 2,\r\n  CLOSE: 3,\r\n  ENQUEUE: 4,\r\n  ERROR: 5,\r\n  PULL: 6,\r\n  PULL_COMPLETE: 7,\r\n  START_COMPLETE: 8\r\n};\r\n\r\nfunction wrapReason(reason) {\r\n  if (_typeof(reason) !== \"object\" || reason === null) {\r\n    return reason;\r\n  }\r\n\r\n  switch (reason.name) {\r\n    case \"AbortException\":\r\n      return new _util.AbortException(reason.message);\r\n\r\n    case \"MissingPDFException\":\r\n      return new _util.MissingPDFException(reason.message);\r\n\r\n    case \"UnexpectedResponseException\":\r\n      return new _util.UnexpectedResponseException(reason.message, reason.status);\r\n\r\n    case \"UnknownErrorException\":\r\n      return new _util.UnknownErrorException(reason.message, reason.details);\r\n\r\n    default:\r\n      return new _util.UnknownErrorException(reason.message, reason.toString());\r\n  }\r\n}\r\n\r\nvar MessageHandler = /*#__PURE__*/function () {\r\n  function MessageHandler(sourceName, targetName, comObj) {\r\n    var _this = this;\r\n\r\n    _classCallCheck(this, MessageHandler);\r\n\r\n    this.sourceName = sourceName;\r\n    this.targetName = targetName;\r\n    this.comObj = comObj;\r\n    this.callbackId = 1;\r\n    this.streamId = 1;\r\n    this.postMessageTransfers = true;\r\n    this.streamSinks = Object.create(null);\r\n    this.streamControllers = Object.create(null);\r\n    this.callbackCapabilities = Object.create(null);\r\n    this.actionHandler = Object.create(null);\r\n\r\n    this._onComObjOnMessage = function (event) {\r\n      var data = event.data;\r\n\r\n      if (data.targetName !== _this.sourceName) {\r\n        return;\r\n      }\r\n\r\n      if (data.stream) {\r\n        _this._processStreamMessage(data);\r\n\r\n        return;\r\n      }\r\n\r\n      if (data.callback) {\r\n        var callbackId = data.callbackId;\r\n        var capability = _this.callbackCapabilities[callbackId];\r\n\r\n        if (!capability) {\r\n          throw new Error(\"Cannot resolve callback \".concat(callbackId));\r\n        }\r\n\r\n        delete _this.callbackCapabilities[callbackId];\r\n\r\n        if (data.callback === CallbackKind.DATA) {\r\n          capability.resolve(data.data);\r\n        } else if (data.callback === CallbackKind.ERROR) {\r\n          capability.reject(wrapReason(data.reason));\r\n        } else {\r\n          throw new Error(\"Unexpected callback case\");\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      var action = _this.actionHandler[data.action];\r\n\r\n      if (!action) {\r\n        throw new Error(\"Unknown action from worker: \".concat(data.action));\r\n      }\r\n\r\n      if (data.callbackId) {\r\n        var cbSourceName = _this.sourceName;\r\n        var cbTargetName = data.sourceName;\r\n        new Promise(function (resolve) {\r\n          resolve(action(data.data));\r\n        }).then(function (result) {\r\n          comObj.postMessage({\r\n            sourceName: cbSourceName,\r\n            targetName: cbTargetName,\r\n            callback: CallbackKind.DATA,\r\n            callbackId: data.callbackId,\r\n            data: result\r\n          });\r\n        }, function (reason) {\r\n          comObj.postMessage({\r\n            sourceName: cbSourceName,\r\n            targetName: cbTargetName,\r\n            callback: CallbackKind.ERROR,\r\n            callbackId: data.callbackId,\r\n            reason: wrapReason(reason)\r\n          });\r\n        });\r\n        return;\r\n      }\r\n\r\n      if (data.streamId) {\r\n        _this._createStreamSink(data);\r\n\r\n        return;\r\n      }\r\n\r\n      action(data.data);\r\n    };\r\n\r\n    comObj.addEventListener(\"message\", this._onComObjOnMessage);\r\n  }\r\n\r\n  _createClass(MessageHandler, [{\r\n    key: \"on\",\r\n    value: function on(actionName, handler) {\r\n      var ah = this.actionHandler;\r\n\r\n      if (ah[actionName]) {\r\n        throw new Error(\"There is already an actionName called \\\"\".concat(actionName, \"\\\"\"));\r\n      }\r\n\r\n      ah[actionName] = handler;\r\n    }\r\n  }, {\r\n    key: \"send\",\r\n    value: function send(actionName, data, transfers) {\r\n      this._postMessage({\r\n        sourceName: this.sourceName,\r\n        targetName: this.targetName,\r\n        action: actionName,\r\n        data: data\r\n      }, transfers);\r\n    }\r\n  }, {\r\n    key: \"sendWithPromise\",\r\n    value: function sendWithPromise(actionName, data, transfers) {\r\n      var callbackId = this.callbackId++;\r\n      var capability = (0, _util.createPromiseCapability)();\r\n      this.callbackCapabilities[callbackId] = capability;\r\n\r\n      try {\r\n        this._postMessage({\r\n          sourceName: this.sourceName,\r\n          targetName: this.targetName,\r\n          action: actionName,\r\n          callbackId: callbackId,\r\n          data: data\r\n        }, transfers);\r\n      } catch (ex) {\r\n        capability.reject(ex);\r\n      }\r\n\r\n      return capability.promise;\r\n    }\r\n  }, {\r\n    key: \"sendWithStream\",\r\n    value: function sendWithStream(actionName, data, queueingStrategy, transfers) {\r\n      var _this2 = this;\r\n\r\n      var streamId = this.streamId++;\r\n      var sourceName = this.sourceName;\r\n      var targetName = this.targetName;\r\n      var comObj = this.comObj;\r\n      return new ReadableStream({\r\n        start: function start(controller) {\r\n          var startCapability = (0, _util.createPromiseCapability)();\r\n          _this2.streamControllers[streamId] = {\r\n            controller: controller,\r\n            startCall: startCapability,\r\n            pullCall: null,\r\n            cancelCall: null,\r\n            isClosed: false\r\n          };\r\n\r\n          _this2._postMessage({\r\n            sourceName: sourceName,\r\n            targetName: targetName,\r\n            action: actionName,\r\n            streamId: streamId,\r\n            data: data,\r\n            desiredSize: controller.desiredSize\r\n          }, transfers);\r\n\r\n          return startCapability.promise;\r\n        },\r\n        pull: function pull(controller) {\r\n          var pullCapability = (0, _util.createPromiseCapability)();\r\n          _this2.streamControllers[streamId].pullCall = pullCapability;\r\n          comObj.postMessage({\r\n            sourceName: sourceName,\r\n            targetName: targetName,\r\n            stream: StreamKind.PULL,\r\n            streamId: streamId,\r\n            desiredSize: controller.desiredSize\r\n          });\r\n          return pullCapability.promise;\r\n        },\r\n        cancel: function cancel(reason) {\r\n          (0, _util.assert)(reason instanceof Error, \"cancel must have a valid reason\");\r\n          var cancelCapability = (0, _util.createPromiseCapability)();\r\n          _this2.streamControllers[streamId].cancelCall = cancelCapability;\r\n          _this2.streamControllers[streamId].isClosed = true;\r\n          comObj.postMessage({\r\n            sourceName: sourceName,\r\n            targetName: targetName,\r\n            stream: StreamKind.CANCEL,\r\n            streamId: streamId,\r\n            reason: wrapReason(reason)\r\n          });\r\n          return cancelCapability.promise;\r\n        }\r\n      }, queueingStrategy);\r\n    }\r\n  }, {\r\n    key: \"_createStreamSink\",\r\n    value: function _createStreamSink(data) {\r\n      var self = this;\r\n      var action = this.actionHandler[data.action];\r\n      var streamId = data.streamId;\r\n      var sourceName = this.sourceName;\r\n      var targetName = data.sourceName;\r\n      var comObj = this.comObj;\r\n      var streamSink = {\r\n        enqueue: function enqueue(chunk) {\r\n          var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\r\n          var transfers = arguments.length > 2 ? arguments[2] : undefined;\r\n\r\n          if (this.isCancelled) {\r\n            return;\r\n          }\r\n\r\n          var lastDesiredSize = this.desiredSize;\r\n          this.desiredSize -= size;\r\n\r\n          if (lastDesiredSize > 0 && this.desiredSize <= 0) {\r\n            this.sinkCapability = (0, _util.createPromiseCapability)();\r\n            this.ready = this.sinkCapability.promise;\r\n          }\r\n\r\n          self._postMessage({\r\n            sourceName: sourceName,\r\n            targetName: targetName,\r\n            stream: StreamKind.ENQUEUE,\r\n            streamId: streamId,\r\n            chunk: chunk\r\n          }, transfers);\r\n        },\r\n        close: function close() {\r\n          if (this.isCancelled) {\r\n            return;\r\n          }\r\n\r\n          this.isCancelled = true;\r\n          comObj.postMessage({\r\n            sourceName: sourceName,\r\n            targetName: targetName,\r\n            stream: StreamKind.CLOSE,\r\n            streamId: streamId\r\n          });\r\n          delete self.streamSinks[streamId];\r\n        },\r\n        error: function error(reason) {\r\n          (0, _util.assert)(reason instanceof Error, \"error must have a valid reason\");\r\n\r\n          if (this.isCancelled) {\r\n            return;\r\n          }\r\n\r\n          this.isCancelled = true;\r\n          comObj.postMessage({\r\n            sourceName: sourceName,\r\n            targetName: targetName,\r\n            stream: StreamKind.ERROR,\r\n            streamId: streamId,\r\n            reason: wrapReason(reason)\r\n          });\r\n        },\r\n        sinkCapability: (0, _util.createPromiseCapability)(),\r\n        onPull: null,\r\n        onCancel: null,\r\n        isCancelled: false,\r\n        desiredSize: data.desiredSize,\r\n        ready: null\r\n      };\r\n      streamSink.sinkCapability.resolve();\r\n      streamSink.ready = streamSink.sinkCapability.promise;\r\n      this.streamSinks[streamId] = streamSink;\r\n      new Promise(function (resolve) {\r\n        resolve(action(data.data, streamSink));\r\n      }).then(function () {\r\n        comObj.postMessage({\r\n          sourceName: sourceName,\r\n          targetName: targetName,\r\n          stream: StreamKind.START_COMPLETE,\r\n          streamId: streamId,\r\n          success: true\r\n        });\r\n      }, function (reason) {\r\n        comObj.postMessage({\r\n          sourceName: sourceName,\r\n          targetName: targetName,\r\n          stream: StreamKind.START_COMPLETE,\r\n          streamId: streamId,\r\n          reason: wrapReason(reason)\r\n        });\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_processStreamMessage\",\r\n    value: function _processStreamMessage(data) {\r\n      var streamId = data.streamId;\r\n      var sourceName = this.sourceName;\r\n      var targetName = data.sourceName;\r\n      var comObj = this.comObj;\r\n\r\n      switch (data.stream) {\r\n        case StreamKind.START_COMPLETE:\r\n          if (data.success) {\r\n            this.streamControllers[streamId].startCall.resolve();\r\n          } else {\r\n            this.streamControllers[streamId].startCall.reject(wrapReason(data.reason));\r\n          }\r\n\r\n          break;\r\n\r\n        case StreamKind.PULL_COMPLETE:\r\n          if (data.success) {\r\n            this.streamControllers[streamId].pullCall.resolve();\r\n          } else {\r\n            this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason));\r\n          }\r\n\r\n          break;\r\n\r\n        case StreamKind.PULL:\r\n          if (!this.streamSinks[streamId]) {\r\n            comObj.postMessage({\r\n              sourceName: sourceName,\r\n              targetName: targetName,\r\n              stream: StreamKind.PULL_COMPLETE,\r\n              streamId: streamId,\r\n              success: true\r\n            });\r\n            break;\r\n          }\r\n\r\n          if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) {\r\n            this.streamSinks[streamId].sinkCapability.resolve();\r\n          }\r\n\r\n          this.streamSinks[streamId].desiredSize = data.desiredSize;\r\n          var onPull = this.streamSinks[data.streamId].onPull;\r\n          new Promise(function (resolve) {\r\n            resolve(onPull && onPull());\r\n          }).then(function () {\r\n            comObj.postMessage({\r\n              sourceName: sourceName,\r\n              targetName: targetName,\r\n              stream: StreamKind.PULL_COMPLETE,\r\n              streamId: streamId,\r\n              success: true\r\n            });\r\n          }, function (reason) {\r\n            comObj.postMessage({\r\n              sourceName: sourceName,\r\n              targetName: targetName,\r\n              stream: StreamKind.PULL_COMPLETE,\r\n              streamId: streamId,\r\n              reason: wrapReason(reason)\r\n            });\r\n          });\r\n          break;\r\n\r\n        case StreamKind.ENQUEUE:\r\n          (0, _util.assert)(this.streamControllers[streamId], \"enqueue should have stream controller\");\r\n\r\n          if (this.streamControllers[streamId].isClosed) {\r\n            break;\r\n          }\r\n\r\n          this.streamControllers[streamId].controller.enqueue(data.chunk);\r\n          break;\r\n\r\n        case StreamKind.CLOSE:\r\n          (0, _util.assert)(this.streamControllers[streamId], \"close should have stream controller\");\r\n\r\n          if (this.streamControllers[streamId].isClosed) {\r\n            break;\r\n          }\r\n\r\n          this.streamControllers[streamId].isClosed = true;\r\n          this.streamControllers[streamId].controller.close();\r\n\r\n          this._deleteStreamController(streamId);\r\n\r\n          break;\r\n\r\n        case StreamKind.ERROR:\r\n          (0, _util.assert)(this.streamControllers[streamId], \"error should have stream controller\");\r\n          this.streamControllers[streamId].controller.error(wrapReason(data.reason));\r\n\r\n          this._deleteStreamController(streamId);\r\n\r\n          break;\r\n\r\n        case StreamKind.CANCEL_COMPLETE:\r\n          if (data.success) {\r\n            this.streamControllers[streamId].cancelCall.resolve();\r\n          } else {\r\n            this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason));\r\n          }\r\n\r\n          this._deleteStreamController(streamId);\r\n\r\n          break;\r\n\r\n        case StreamKind.CANCEL:\r\n          if (!this.streamSinks[streamId]) {\r\n            break;\r\n          }\r\n\r\n          var onCancel = this.streamSinks[data.streamId].onCancel;\r\n          new Promise(function (resolve) {\r\n            resolve(onCancel && onCancel(wrapReason(data.reason)));\r\n          }).then(function () {\r\n            comObj.postMessage({\r\n              sourceName: sourceName,\r\n              targetName: targetName,\r\n              stream: StreamKind.CANCEL_COMPLETE,\r\n              streamId: streamId,\r\n              success: true\r\n            });\r\n          }, function (reason) {\r\n            comObj.postMessage({\r\n              sourceName: sourceName,\r\n              targetName: targetName,\r\n              stream: StreamKind.CANCEL_COMPLETE,\r\n              streamId: streamId,\r\n              reason: wrapReason(reason)\r\n            });\r\n          });\r\n          this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason));\r\n          this.streamSinks[streamId].isCancelled = true;\r\n          delete this.streamSinks[streamId];\r\n          break;\r\n\r\n        default:\r\n          throw new Error(\"Unexpected stream case\");\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_deleteStreamController\",\r\n    value: function () {\r\n      var _deleteStreamController2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(streamId) {\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                _context.next = 2;\r\n                return Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) {\r\n                  return capability && capability.promise;\r\n                }));\r\n\r\n              case 2:\r\n                delete this.streamControllers[streamId];\r\n\r\n              case 3:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function _deleteStreamController(_x) {\r\n        return _deleteStreamController2.apply(this, arguments);\r\n      }\r\n\r\n      return _deleteStreamController;\r\n    }()\r\n  }, {\r\n    key: \"_postMessage\",\r\n    value: function _postMessage(message, transfers) {\r\n      if (transfers && this.postMessageTransfers) {\r\n        this.comObj.postMessage(message, transfers);\r\n      } else {\r\n        this.comObj.postMessage(message);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"destroy\",\r\n    value: function destroy() {\r\n      this.comObj.removeEventListener(\"message\", this._onComObjOnMessage);\r\n    }\r\n  }]);\r\n\r\n  return MessageHandler;\r\n}();\r\n\r\nexports.MessageHandler = MessageHandler;\r\n\r\n/***/ }),\r\n/* 144 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.Metadata = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _xml_parser = __w_pdfjs_require__(145);\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar Metadata = /*#__PURE__*/function () {\r\n  function Metadata(data) {\r\n    _classCallCheck(this, Metadata);\r\n\r\n    (0, _util.assert)(typeof data === \"string\", \"Metadata: input is not a string\");\r\n    data = this._repair(data);\r\n    var parser = new _xml_parser.SimpleXMLParser({\r\n      lowerCaseName: true\r\n    });\r\n    var xmlDocument = parser.parseFromString(data);\r\n    this._metadataMap = new Map();\r\n\r\n    if (xmlDocument) {\r\n      this._parse(xmlDocument);\r\n    }\r\n\r\n    this._data = data;\r\n  }\r\n\r\n  _createClass(Metadata, [{\r\n    key: \"_repair\",\r\n    value: function _repair(data) {\r\n      return data.replace(/^[^<]+/, \"\").replace(/>\\\\376\\\\377([^<]+)/g, function (all, codes) {\r\n        var bytes = codes.replace(/\\\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {\r\n          return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);\r\n        }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) {\r\n          switch (name) {\r\n            case \"amp\":\r\n              return \"&\";\r\n\r\n            case \"apos\":\r\n              return \"'\";\r\n\r\n            case \"gt\":\r\n              return \">\";\r\n\r\n            case \"lt\":\r\n              return \"<\";\r\n\r\n            case \"quot\":\r\n              return '\"';\r\n          }\r\n\r\n          throw new Error(\"_repair: \".concat(name, \" isn't defined.\"));\r\n        });\r\n        var chars = \"\";\r\n\r\n        for (var i = 0, ii = bytes.length; i < ii; i += 2) {\r\n          var code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);\r\n\r\n          if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) {\r\n            chars += String.fromCharCode(code);\r\n          } else {\r\n            chars += \"&#x\" + (0x10000 + code).toString(16).substring(1) + \";\";\r\n          }\r\n        }\r\n\r\n        return \">\" + chars;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_getSequence\",\r\n    value: function _getSequence(entry) {\r\n      var name = entry.nodeName;\r\n\r\n      if (name !== \"rdf:bag\" && name !== \"rdf:seq\" && name !== \"rdf:alt\") {\r\n        return null;\r\n      }\r\n\r\n      return entry.childNodes.filter(function (node) {\r\n        return node.nodeName === \"rdf:li\";\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_getCreators\",\r\n    value: function _getCreators(entry) {\r\n      if (entry.nodeName !== \"dc:creator\") {\r\n        return false;\r\n      }\r\n\r\n      if (!entry.hasChildNodes()) {\r\n        return true;\r\n      }\r\n\r\n      var seqNode = entry.childNodes[0];\r\n      var authors = this._getSequence(seqNode) || [];\r\n\r\n      this._metadataMap.set(entry.nodeName, authors.map(function (node) {\r\n        return node.textContent.trim();\r\n      }));\r\n\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"_parse\",\r\n    value: function _parse(xmlDocument) {\r\n      var rdf = xmlDocument.documentElement;\r\n\r\n      if (rdf.nodeName !== \"rdf:rdf\") {\r\n        rdf = rdf.firstChild;\r\n\r\n        while (rdf && rdf.nodeName !== \"rdf:rdf\") {\r\n          rdf = rdf.nextSibling;\r\n        }\r\n      }\r\n\r\n      if (!rdf || rdf.nodeName !== \"rdf:rdf\" || !rdf.hasChildNodes()) {\r\n        return;\r\n      }\r\n\r\n      var _iterator = _createForOfIteratorHelper(rdf.childNodes),\r\n          _step;\r\n\r\n      try {\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          var desc = _step.value;\r\n\r\n          if (desc.nodeName !== \"rdf:description\") {\r\n            continue;\r\n          }\r\n\r\n          var _iterator2 = _createForOfIteratorHelper(desc.childNodes),\r\n              _step2;\r\n\r\n          try {\r\n            for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n              var entry = _step2.value;\r\n              var name = entry.nodeName;\r\n\r\n              if (name === \"#text\") {\r\n                continue;\r\n              }\r\n\r\n              if (this._getCreators(entry)) {\r\n                continue;\r\n              }\r\n\r\n              this._metadataMap.set(name, entry.textContent.trim());\r\n            }\r\n          } catch (err) {\r\n            _iterator2.e(err);\r\n          } finally {\r\n            _iterator2.f();\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getRaw\",\r\n    value: function getRaw() {\r\n      return this._data;\r\n    }\r\n  }, {\r\n    key: \"get\",\r\n    value: function get(name) {\r\n      var _this$_metadataMap$ge;\r\n\r\n      return (_this$_metadataMap$ge = this._metadataMap.get(name)) !== null && _this$_metadataMap$ge !== void 0 ? _this$_metadataMap$ge : null;\r\n    }\r\n  }, {\r\n    key: \"getAll\",\r\n    value: function getAll() {\r\n      return (0, _util.objectFromEntries)(this._metadataMap);\r\n    }\r\n  }, {\r\n    key: \"has\",\r\n    value: function has(name) {\r\n      return this._metadataMap.has(name);\r\n    }\r\n  }]);\r\n\r\n  return Metadata;\r\n}();\r\n\r\nexports.Metadata = Metadata;\r\n\r\n/***/ }),\r\n/* 145 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.XMLParserErrorCode = exports.XMLParserBase = exports.SimpleXMLParser = exports.SimpleDOMNode = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar XMLParserErrorCode = {\r\n  NoError: 0,\r\n  EndOfDocument: -1,\r\n  UnterminatedCdat: -2,\r\n  UnterminatedXmlDeclaration: -3,\r\n  UnterminatedDoctypeDeclaration: -4,\r\n  UnterminatedComment: -5,\r\n  MalformedElement: -6,\r\n  OutOfMemory: -7,\r\n  UnterminatedAttributeValue: -8,\r\n  UnterminatedElement: -9,\r\n  ElementNeverBegun: -10\r\n};\r\nexports.XMLParserErrorCode = XMLParserErrorCode;\r\n\r\nfunction isWhitespace(s, index) {\r\n  var ch = s[index];\r\n  return ch === \" \" || ch === \"\\n\" || ch === \"\\r\" || ch === \"\\t\";\r\n}\r\n\r\nfunction isWhitespaceString(s) {\r\n  for (var i = 0, ii = s.length; i < ii; i++) {\r\n    if (!isWhitespace(s, i)) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nvar XMLParserBase = /*#__PURE__*/function () {\r\n  function XMLParserBase() {\r\n    _classCallCheck(this, XMLParserBase);\r\n  }\r\n\r\n  _createClass(XMLParserBase, [{\r\n    key: \"_resolveEntities\",\r\n    value: function _resolveEntities(s) {\r\n      var _this = this;\r\n\r\n      return s.replace(/&([^;]+);/g, function (all, entity) {\r\n        if (entity.substring(0, 2) === \"#x\") {\r\n          return String.fromCodePoint(parseInt(entity.substring(2), 16));\r\n        } else if (entity.substring(0, 1) === \"#\") {\r\n          return String.fromCodePoint(parseInt(entity.substring(1), 10));\r\n        }\r\n\r\n        switch (entity) {\r\n          case \"lt\":\r\n            return \"<\";\r\n\r\n          case \"gt\":\r\n            return \">\";\r\n\r\n          case \"amp\":\r\n            return \"&\";\r\n\r\n          case \"quot\":\r\n            return '\"';\r\n\r\n          case \"apos\":\r\n            return \"'\";\r\n        }\r\n\r\n        return _this.onResolveEntity(entity);\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_parseContent\",\r\n    value: function _parseContent(s, start) {\r\n      var attributes = [];\r\n      var pos = start;\r\n\r\n      function skipWs() {\r\n        while (pos < s.length && isWhitespace(s, pos)) {\r\n          ++pos;\r\n        }\r\n      }\r\n\r\n      while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \">\" && s[pos] !== \"/\") {\r\n        ++pos;\r\n      }\r\n\r\n      var name = s.substring(start, pos);\r\n      skipWs();\r\n\r\n      while (pos < s.length && s[pos] !== \">\" && s[pos] !== \"/\" && s[pos] !== \"?\") {\r\n        skipWs();\r\n        var attrName = \"\",\r\n            attrValue = \"\";\r\n\r\n        while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \"=\") {\r\n          attrName += s[pos];\r\n          ++pos;\r\n        }\r\n\r\n        skipWs();\r\n\r\n        if (s[pos] !== \"=\") {\r\n          return null;\r\n        }\r\n\r\n        ++pos;\r\n        skipWs();\r\n        var attrEndChar = s[pos];\r\n\r\n        if (attrEndChar !== '\"' && attrEndChar !== \"'\") {\r\n          return null;\r\n        }\r\n\r\n        var attrEndIndex = s.indexOf(attrEndChar, ++pos);\r\n\r\n        if (attrEndIndex < 0) {\r\n          return null;\r\n        }\r\n\r\n        attrValue = s.substring(pos, attrEndIndex);\r\n        attributes.push({\r\n          name: attrName,\r\n          value: this._resolveEntities(attrValue)\r\n        });\r\n        pos = attrEndIndex + 1;\r\n        skipWs();\r\n      }\r\n\r\n      return {\r\n        name: name,\r\n        attributes: attributes,\r\n        parsed: pos - start\r\n      };\r\n    }\r\n  }, {\r\n    key: \"_parseProcessingInstruction\",\r\n    value: function _parseProcessingInstruction(s, start) {\r\n      var pos = start;\r\n\r\n      function skipWs() {\r\n        while (pos < s.length && isWhitespace(s, pos)) {\r\n          ++pos;\r\n        }\r\n      }\r\n\r\n      while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \">\" && s[pos] !== \"/\") {\r\n        ++pos;\r\n      }\r\n\r\n      var name = s.substring(start, pos);\r\n      skipWs();\r\n      var attrStart = pos;\r\n\r\n      while (pos < s.length && (s[pos] !== \"?\" || s[pos + 1] !== \">\")) {\r\n        ++pos;\r\n      }\r\n\r\n      var value = s.substring(attrStart, pos);\r\n      return {\r\n        name: name,\r\n        value: value,\r\n        parsed: pos - start\r\n      };\r\n    }\r\n  }, {\r\n    key: \"parseXml\",\r\n    value: function parseXml(s) {\r\n      var i = 0;\r\n\r\n      while (i < s.length) {\r\n        var ch = s[i];\r\n        var j = i;\r\n\r\n        if (ch === \"<\") {\r\n          ++j;\r\n          var ch2 = s[j];\r\n          var q = void 0;\r\n\r\n          switch (ch2) {\r\n            case \"/\":\r\n              ++j;\r\n              q = s.indexOf(\">\", j);\r\n\r\n              if (q < 0) {\r\n                this.onError(XMLParserErrorCode.UnterminatedElement);\r\n                return;\r\n              }\r\n\r\n              this.onEndElement(s.substring(j, q));\r\n              j = q + 1;\r\n              break;\r\n\r\n            case \"?\":\r\n              ++j;\r\n\r\n              var pi = this._parseProcessingInstruction(s, j);\r\n\r\n              if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== \"?>\") {\r\n                this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);\r\n                return;\r\n              }\r\n\r\n              this.onPi(pi.name, pi.value);\r\n              j += pi.parsed + 2;\r\n              break;\r\n\r\n            case \"!\":\r\n              if (s.substring(j + 1, j + 3) === \"--\") {\r\n                q = s.indexOf(\"-->\", j + 3);\r\n\r\n                if (q < 0) {\r\n                  this.onError(XMLParserErrorCode.UnterminatedComment);\r\n                  return;\r\n                }\r\n\r\n                this.onComment(s.substring(j + 3, q));\r\n                j = q + 3;\r\n              } else if (s.substring(j + 1, j + 8) === \"[CDATA[\") {\r\n                q = s.indexOf(\"]]>\", j + 8);\r\n\r\n                if (q < 0) {\r\n                  this.onError(XMLParserErrorCode.UnterminatedCdat);\r\n                  return;\r\n                }\r\n\r\n                this.onCdata(s.substring(j + 8, q));\r\n                j = q + 3;\r\n              } else if (s.substring(j + 1, j + 8) === \"DOCTYPE\") {\r\n                var q2 = s.indexOf(\"[\", j + 8);\r\n                var complexDoctype = false;\r\n                q = s.indexOf(\">\", j + 8);\r\n\r\n                if (q < 0) {\r\n                  this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);\r\n                  return;\r\n                }\r\n\r\n                if (q2 > 0 && q > q2) {\r\n                  q = s.indexOf(\"]>\", j + 8);\r\n\r\n                  if (q < 0) {\r\n                    this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);\r\n                    return;\r\n                  }\r\n\r\n                  complexDoctype = true;\r\n                }\r\n\r\n                var doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0));\r\n                this.onDoctype(doctypeContent);\r\n                j = q + (complexDoctype ? 2 : 1);\r\n              } else {\r\n                this.onError(XMLParserErrorCode.MalformedElement);\r\n                return;\r\n              }\r\n\r\n              break;\r\n\r\n            default:\r\n              var content = this._parseContent(s, j);\r\n\r\n              if (content === null) {\r\n                this.onError(XMLParserErrorCode.MalformedElement);\r\n                return;\r\n              }\r\n\r\n              var isClosed = false;\r\n\r\n              if (s.substring(j + content.parsed, j + content.parsed + 2) === \"/>\") {\r\n                isClosed = true;\r\n              } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== \">\") {\r\n                this.onError(XMLParserErrorCode.UnterminatedElement);\r\n                return;\r\n              }\r\n\r\n              this.onBeginElement(content.name, content.attributes, isClosed);\r\n              j += content.parsed + (isClosed ? 2 : 1);\r\n              break;\r\n          }\r\n        } else {\r\n          while (j < s.length && s[j] !== \"<\") {\r\n            j++;\r\n          }\r\n\r\n          var text = s.substring(i, j);\r\n          this.onText(this._resolveEntities(text));\r\n        }\r\n\r\n        i = j;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"onResolveEntity\",\r\n    value: function onResolveEntity(name) {\r\n      return \"&\".concat(name, \";\");\r\n    }\r\n  }, {\r\n    key: \"onPi\",\r\n    value: function onPi(name, value) {}\r\n  }, {\r\n    key: \"onComment\",\r\n    value: function onComment(text) {}\r\n  }, {\r\n    key: \"onCdata\",\r\n    value: function onCdata(text) {}\r\n  }, {\r\n    key: \"onDoctype\",\r\n    value: function onDoctype(doctypeContent) {}\r\n  }, {\r\n    key: \"onText\",\r\n    value: function onText(text) {}\r\n  }, {\r\n    key: \"onBeginElement\",\r\n    value: function onBeginElement(name, attributes, isEmpty) {}\r\n  }, {\r\n    key: \"onEndElement\",\r\n    value: function onEndElement(name) {}\r\n  }, {\r\n    key: \"onError\",\r\n    value: function onError(code) {}\r\n  }]);\r\n\r\n  return XMLParserBase;\r\n}();\r\n\r\nexports.XMLParserBase = XMLParserBase;\r\n\r\nvar SimpleDOMNode = /*#__PURE__*/function () {\r\n  function SimpleDOMNode(nodeName, nodeValue) {\r\n    _classCallCheck(this, SimpleDOMNode);\r\n\r\n    this.nodeName = nodeName;\r\n    this.nodeValue = nodeValue;\r\n    Object.defineProperty(this, \"parentNode\", {\r\n      value: null,\r\n      writable: true\r\n    });\r\n  }\r\n\r\n  _createClass(SimpleDOMNode, [{\r\n    key: \"firstChild\",\r\n    get: function get() {\r\n      return this.childNodes && this.childNodes[0];\r\n    }\r\n  }, {\r\n    key: \"nextSibling\",\r\n    get: function get() {\r\n      var childNodes = this.parentNode.childNodes;\r\n\r\n      if (!childNodes) {\r\n        return undefined;\r\n      }\r\n\r\n      var index = childNodes.indexOf(this);\r\n\r\n      if (index === -1) {\r\n        return undefined;\r\n      }\r\n\r\n      return childNodes[index + 1];\r\n    }\r\n  }, {\r\n    key: \"textContent\",\r\n    get: function get() {\r\n      if (!this.childNodes) {\r\n        return this.nodeValue || \"\";\r\n      }\r\n\r\n      return this.childNodes.map(function (child) {\r\n        return child.textContent;\r\n      }).join(\"\");\r\n    }\r\n  }, {\r\n    key: \"hasChildNodes\",\r\n    value: function hasChildNodes() {\r\n      return this.childNodes && this.childNodes.length > 0;\r\n    }\r\n  }, {\r\n    key: \"searchNode\",\r\n    value: function searchNode(paths, pos) {\r\n      if (pos >= paths.length) {\r\n        return this;\r\n      }\r\n\r\n      var component = paths[pos];\r\n      var stack = [];\r\n      var node = this;\r\n\r\n      while (true) {\r\n        if (component.name === node.nodeName) {\r\n          if (component.pos === 0) {\r\n            var res = node.searchNode(paths, pos + 1);\r\n\r\n            if (res !== null) {\r\n              return res;\r\n            }\r\n          } else if (stack.length === 0) {\r\n            return null;\r\n          } else {\r\n            var _stack$pop = stack.pop(),\r\n                _stack$pop2 = _slicedToArray(_stack$pop, 1),\r\n                parent = _stack$pop2[0];\r\n\r\n            var siblingPos = 0;\r\n\r\n            var _iterator = _createForOfIteratorHelper(parent.childNodes),\r\n                _step;\r\n\r\n            try {\r\n              for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n                var child = _step.value;\r\n\r\n                if (component.name === child.nodeName) {\r\n                  if (siblingPos === component.pos) {\r\n                    return child.searchNode(paths, pos + 1);\r\n                  }\r\n\r\n                  siblingPos++;\r\n                }\r\n              }\r\n            } catch (err) {\r\n              _iterator.e(err);\r\n            } finally {\r\n              _iterator.f();\r\n            }\r\n\r\n            return node.searchNode(paths, pos + 1);\r\n          }\r\n        }\r\n\r\n        if (node.childNodes && node.childNodes.length !== 0) {\r\n          stack.push([node, 0]);\r\n          node = node.childNodes[0];\r\n        } else if (stack.length === 0) {\r\n          return null;\r\n        } else {\r\n          while (stack.length !== 0) {\r\n            var _stack$pop3 = stack.pop(),\r\n                _stack$pop4 = _slicedToArray(_stack$pop3, 2),\r\n                _parent = _stack$pop4[0],\r\n                currentPos = _stack$pop4[1];\r\n\r\n            var newPos = currentPos + 1;\r\n\r\n            if (newPos < _parent.childNodes.length) {\r\n              stack.push([_parent, newPos]);\r\n              node = _parent.childNodes[newPos];\r\n              break;\r\n            }\r\n          }\r\n\r\n          if (stack.length === 0) {\r\n            return null;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"dump\",\r\n    value: function dump(buffer) {\r\n      if (this.nodeName === \"#text\") {\r\n        buffer.push((0, _util.encodeToXmlString)(this.nodeValue));\r\n        return;\r\n      }\r\n\r\n      buffer.push(\"<\".concat(this.nodeName));\r\n\r\n      if (this.attributes) {\r\n        var _iterator2 = _createForOfIteratorHelper(this.attributes),\r\n            _step2;\r\n\r\n        try {\r\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n            var attribute = _step2.value;\r\n            buffer.push(\" \".concat(attribute.name, \"=\\\"\").concat((0, _util.encodeToXmlString)(attribute.value), \"\\\"\"));\r\n          }\r\n        } catch (err) {\r\n          _iterator2.e(err);\r\n        } finally {\r\n          _iterator2.f();\r\n        }\r\n      }\r\n\r\n      if (this.hasChildNodes()) {\r\n        buffer.push(\">\");\r\n\r\n        var _iterator3 = _createForOfIteratorHelper(this.childNodes),\r\n            _step3;\r\n\r\n        try {\r\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n            var child = _step3.value;\r\n            child.dump(buffer);\r\n          }\r\n        } catch (err) {\r\n          _iterator3.e(err);\r\n        } finally {\r\n          _iterator3.f();\r\n        }\r\n\r\n        buffer.push(\"</\".concat(this.nodeName, \">\"));\r\n      } else if (this.nodeValue) {\r\n        buffer.push(\">\".concat((0, _util.encodeToXmlString)(this.nodeValue), \"</\").concat(this.nodeName, \">\"));\r\n      } else {\r\n        buffer.push(\"/>\");\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return SimpleDOMNode;\r\n}();\r\n\r\nexports.SimpleDOMNode = SimpleDOMNode;\r\n\r\nvar SimpleXMLParser = /*#__PURE__*/function (_XMLParserBase) {\r\n  _inherits(SimpleXMLParser, _XMLParserBase);\r\n\r\n  var _super = _createSuper(SimpleXMLParser);\r\n\r\n  function SimpleXMLParser(_ref) {\r\n    var _this2;\r\n\r\n    var _ref$hasAttributes = _ref.hasAttributes,\r\n        hasAttributes = _ref$hasAttributes === void 0 ? false : _ref$hasAttributes,\r\n        _ref$lowerCaseName = _ref.lowerCaseName,\r\n        lowerCaseName = _ref$lowerCaseName === void 0 ? false : _ref$lowerCaseName;\r\n\r\n    _classCallCheck(this, SimpleXMLParser);\r\n\r\n    _this2 = _super.call(this);\r\n    _this2._currentFragment = null;\r\n    _this2._stack = null;\r\n    _this2._errorCode = XMLParserErrorCode.NoError;\r\n    _this2._hasAttributes = hasAttributes;\r\n    _this2._lowerCaseName = lowerCaseName;\r\n    return _this2;\r\n  }\r\n\r\n  _createClass(SimpleXMLParser, [{\r\n    key: \"parseFromString\",\r\n    value: function parseFromString(data) {\r\n      this._currentFragment = [];\r\n      this._stack = [];\r\n      this._errorCode = XMLParserErrorCode.NoError;\r\n      this.parseXml(data);\r\n\r\n      if (this._errorCode !== XMLParserErrorCode.NoError) {\r\n        return undefined;\r\n      }\r\n\r\n      var _this$_currentFragmen = _slicedToArray(this._currentFragment, 1),\r\n          documentElement = _this$_currentFragmen[0];\r\n\r\n      if (!documentElement) {\r\n        return undefined;\r\n      }\r\n\r\n      return {\r\n        documentElement: documentElement\r\n      };\r\n    }\r\n  }, {\r\n    key: \"onText\",\r\n    value: function onText(text) {\r\n      if (isWhitespaceString(text)) {\r\n        return;\r\n      }\r\n\r\n      var node = new SimpleDOMNode(\"#text\", text);\r\n\r\n      this._currentFragment.push(node);\r\n    }\r\n  }, {\r\n    key: \"onCdata\",\r\n    value: function onCdata(text) {\r\n      var node = new SimpleDOMNode(\"#text\", text);\r\n\r\n      this._currentFragment.push(node);\r\n    }\r\n  }, {\r\n    key: \"onBeginElement\",\r\n    value: function onBeginElement(name, attributes, isEmpty) {\r\n      if (this._lowerCaseName) {\r\n        name = name.toLowerCase();\r\n      }\r\n\r\n      var node = new SimpleDOMNode(name);\r\n      node.childNodes = [];\r\n\r\n      if (this._hasAttributes) {\r\n        node.attributes = attributes;\r\n      }\r\n\r\n      this._currentFragment.push(node);\r\n\r\n      if (isEmpty) {\r\n        return;\r\n      }\r\n\r\n      this._stack.push(this._currentFragment);\r\n\r\n      this._currentFragment = node.childNodes;\r\n    }\r\n  }, {\r\n    key: \"onEndElement\",\r\n    value: function onEndElement(name) {\r\n      this._currentFragment = this._stack.pop() || [];\r\n      var lastElement = this._currentFragment[this._currentFragment.length - 1];\r\n\r\n      if (!lastElement) {\r\n        return;\r\n      }\r\n\r\n      for (var i = 0, ii = lastElement.childNodes.length; i < ii; i++) {\r\n        lastElement.childNodes[i].parentNode = lastElement;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"onError\",\r\n    value: function onError(code) {\r\n      this._errorCode = code;\r\n    }\r\n  }]);\r\n\r\n  return SimpleXMLParser;\r\n}(XMLParserBase);\r\n\r\nexports.SimpleXMLParser = SimpleXMLParser;\r\n\r\n/***/ }),\r\n/* 146 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.OptionalContentConfig = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nvar OptionalContentGroup = function OptionalContentGroup(name, intent) {\r\n  _classCallCheck(this, OptionalContentGroup);\r\n\r\n  this.visible = true;\r\n  this.name = name;\r\n  this.intent = intent;\r\n};\r\n\r\nvar OptionalContentConfig = /*#__PURE__*/function () {\r\n  function OptionalContentConfig(data) {\r\n    _classCallCheck(this, OptionalContentConfig);\r\n\r\n    this.name = null;\r\n    this.creator = null;\r\n    this._order = null;\r\n    this._groups = new Map();\r\n\r\n    if (data === null) {\r\n      return;\r\n    }\r\n\r\n    this.name = data.name;\r\n    this.creator = data.creator;\r\n    this._order = data.order;\r\n\r\n    var _iterator = _createForOfIteratorHelper(data.groups),\r\n        _step;\r\n\r\n    try {\r\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n        var _group = _step.value;\r\n\r\n        this._groups.set(_group.id, new OptionalContentGroup(_group.name, _group.intent));\r\n      }\r\n    } catch (err) {\r\n      _iterator.e(err);\r\n    } finally {\r\n      _iterator.f();\r\n    }\r\n\r\n    if (data.baseState === \"OFF\") {\r\n      var _iterator2 = _createForOfIteratorHelper(this._groups),\r\n          _step2;\r\n\r\n      try {\r\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n          var group = _step2.value;\r\n          group.visible = false;\r\n        }\r\n      } catch (err) {\r\n        _iterator2.e(err);\r\n      } finally {\r\n        _iterator2.f();\r\n      }\r\n    }\r\n\r\n    var _iterator3 = _createForOfIteratorHelper(data.on),\r\n        _step3;\r\n\r\n    try {\r\n      for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n        var on = _step3.value;\r\n        this._groups.get(on).visible = true;\r\n      }\r\n    } catch (err) {\r\n      _iterator3.e(err);\r\n    } finally {\r\n      _iterator3.f();\r\n    }\r\n\r\n    var _iterator4 = _createForOfIteratorHelper(data.off),\r\n        _step4;\r\n\r\n    try {\r\n      for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\r\n        var off = _step4.value;\r\n        this._groups.get(off).visible = false;\r\n      }\r\n    } catch (err) {\r\n      _iterator4.e(err);\r\n    } finally {\r\n      _iterator4.f();\r\n    }\r\n  }\r\n\r\n  _createClass(OptionalContentConfig, [{\r\n    key: \"isVisible\",\r\n    value: function isVisible(group) {\r\n      if (group.type === \"OCG\") {\r\n        if (!this._groups.has(group.id)) {\r\n          (0, _util.warn)(\"Optional content group not found: \".concat(group.id));\r\n          return true;\r\n        }\r\n\r\n        return this._groups.get(group.id).visible;\r\n      } else if (group.type === \"OCMD\") {\r\n        if (group.expression) {\r\n          (0, _util.warn)(\"Visibility expression not supported yet.\");\r\n        }\r\n\r\n        if (!group.policy || group.policy === \"AnyOn\") {\r\n          var _iterator5 = _createForOfIteratorHelper(group.ids),\r\n              _step5;\r\n\r\n          try {\r\n            for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\r\n              var id = _step5.value;\r\n\r\n              if (!this._groups.has(id)) {\r\n                (0, _util.warn)(\"Optional content group not found: \".concat(id));\r\n                return true;\r\n              }\r\n\r\n              if (this._groups.get(id).visible) {\r\n                return true;\r\n              }\r\n            }\r\n          } catch (err) {\r\n            _iterator5.e(err);\r\n          } finally {\r\n            _iterator5.f();\r\n          }\r\n\r\n          return false;\r\n        } else if (group.policy === \"AllOn\") {\r\n          var _iterator6 = _createForOfIteratorHelper(group.ids),\r\n              _step6;\r\n\r\n          try {\r\n            for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\r\n              var _id = _step6.value;\r\n\r\n              if (!this._groups.has(_id)) {\r\n                (0, _util.warn)(\"Optional content group not found: \".concat(_id));\r\n                return true;\r\n              }\r\n\r\n              if (!this._groups.get(_id).visible) {\r\n                return false;\r\n              }\r\n            }\r\n          } catch (err) {\r\n            _iterator6.e(err);\r\n          } finally {\r\n            _iterator6.f();\r\n          }\r\n\r\n          return true;\r\n        } else if (group.policy === \"AnyOff\") {\r\n          var _iterator7 = _createForOfIteratorHelper(group.ids),\r\n              _step7;\r\n\r\n          try {\r\n            for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\r\n              var _id2 = _step7.value;\r\n\r\n              if (!this._groups.has(_id2)) {\r\n                (0, _util.warn)(\"Optional content group not found: \".concat(_id2));\r\n                return true;\r\n              }\r\n\r\n              if (!this._groups.get(_id2).visible) {\r\n                return true;\r\n              }\r\n            }\r\n          } catch (err) {\r\n            _iterator7.e(err);\r\n          } finally {\r\n            _iterator7.f();\r\n          }\r\n\r\n          return false;\r\n        } else if (group.policy === \"AllOff\") {\r\n          var _iterator8 = _createForOfIteratorHelper(group.ids),\r\n              _step8;\r\n\r\n          try {\r\n            for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\r\n              var _id3 = _step8.value;\r\n\r\n              if (!this._groups.has(_id3)) {\r\n                (0, _util.warn)(\"Optional content group not found: \".concat(_id3));\r\n                return true;\r\n              }\r\n\r\n              if (this._groups.get(_id3).visible) {\r\n                return false;\r\n              }\r\n            }\r\n          } catch (err) {\r\n            _iterator8.e(err);\r\n          } finally {\r\n            _iterator8.f();\r\n          }\r\n\r\n          return true;\r\n        }\r\n\r\n        (0, _util.warn)(\"Unknown optional content policy \".concat(group.policy, \".\"));\r\n        return true;\r\n      }\r\n\r\n      (0, _util.warn)(\"Unknown group type \".concat(group.type, \".\"));\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"setVisibility\",\r\n    value: function setVisibility(id) {\r\n      var visible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\r\n\r\n      if (!this._groups.has(id)) {\r\n        (0, _util.warn)(\"Optional content group not found: \".concat(id));\r\n        return;\r\n      }\r\n\r\n      this._groups.get(id).visible = !!visible;\r\n    }\r\n  }, {\r\n    key: \"getOrder\",\r\n    value: function getOrder() {\r\n      if (!this._groups.size) {\r\n        return null;\r\n      }\r\n\r\n      if (this._order) {\r\n        return this._order.slice();\r\n      }\r\n\r\n      return Array.from(this._groups.keys());\r\n    }\r\n  }, {\r\n    key: \"getGroups\",\r\n    value: function getGroups() {\r\n      if (!this._groups.size) {\r\n        return null;\r\n      }\r\n\r\n      return (0, _util.objectFromEntries)(this._groups);\r\n    }\r\n  }, {\r\n    key: \"getGroup\",\r\n    value: function getGroup(id) {\r\n      return this._groups.get(id) || null;\r\n    }\r\n  }]);\r\n\r\n  return OptionalContentConfig;\r\n}();\r\n\r\nexports.OptionalContentConfig = OptionalContentConfig;\r\n\r\n/***/ }),\r\n/* 147 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFDataTransportStream = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar PDFDataTransportStream = /*#__PURE__*/function () {\r\n  function PDFDataTransportStream(params, pdfDataRangeTransport) {\r\n    var _this = this;\r\n\r\n    _classCallCheck(this, PDFDataTransportStream);\r\n\r\n    (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required \"pdfDataRangeTransport\" argument.');\r\n    this._queuedChunks = [];\r\n    this._progressiveDone = params.progressiveDone || false;\r\n    var initialData = params.initialData;\r\n\r\n    if ((initialData === null || initialData === void 0 ? void 0 : initialData.length) > 0) {\r\n      var buffer = new Uint8Array(initialData).buffer;\r\n\r\n      this._queuedChunks.push(buffer);\r\n    }\r\n\r\n    this._pdfDataRangeTransport = pdfDataRangeTransport;\r\n    this._isStreamingSupported = !params.disableStream;\r\n    this._isRangeSupported = !params.disableRange;\r\n    this._contentLength = params.length;\r\n    this._fullRequestReader = null;\r\n    this._rangeReaders = [];\r\n\r\n    this._pdfDataRangeTransport.addRangeListener(function (begin, chunk) {\r\n      _this._onReceiveData({\r\n        begin: begin,\r\n        chunk: chunk\r\n      });\r\n    });\r\n\r\n    this._pdfDataRangeTransport.addProgressListener(function (loaded, total) {\r\n      _this._onProgress({\r\n        loaded: loaded,\r\n        total: total\r\n      });\r\n    });\r\n\r\n    this._pdfDataRangeTransport.addProgressiveReadListener(function (chunk) {\r\n      _this._onReceiveData({\r\n        chunk: chunk\r\n      });\r\n    });\r\n\r\n    this._pdfDataRangeTransport.addProgressiveDoneListener(function () {\r\n      _this._onProgressiveDone();\r\n    });\r\n\r\n    this._pdfDataRangeTransport.transportReady();\r\n  }\r\n\r\n  _createClass(PDFDataTransportStream, [{\r\n    key: \"_onReceiveData\",\r\n    value: function _onReceiveData(args) {\r\n      var buffer = new Uint8Array(args.chunk).buffer;\r\n\r\n      if (args.begin === undefined) {\r\n        if (this._fullRequestReader) {\r\n          this._fullRequestReader._enqueue(buffer);\r\n        } else {\r\n          this._queuedChunks.push(buffer);\r\n        }\r\n      } else {\r\n        var found = this._rangeReaders.some(function (rangeReader) {\r\n          if (rangeReader._begin !== args.begin) {\r\n            return false;\r\n          }\r\n\r\n          rangeReader._enqueue(buffer);\r\n\r\n          return true;\r\n        });\r\n\r\n        (0, _util.assert)(found, \"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.\");\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_progressiveDataLength\",\r\n    get: function get() {\r\n      var _this$_fullRequestRea, _this$_fullRequestRea2;\r\n\r\n      return (_this$_fullRequestRea = (_this$_fullRequestRea2 = this._fullRequestReader) === null || _this$_fullRequestRea2 === void 0 ? void 0 : _this$_fullRequestRea2._loaded) !== null && _this$_fullRequestRea !== void 0 ? _this$_fullRequestRea : 0;\r\n    }\r\n  }, {\r\n    key: \"_onProgress\",\r\n    value: function _onProgress(evt) {\r\n      if (evt.total === undefined) {\r\n        var firstReader = this._rangeReaders[0];\r\n\r\n        if (firstReader !== null && firstReader !== void 0 && firstReader.onProgress) {\r\n          firstReader.onProgress({\r\n            loaded: evt.loaded\r\n          });\r\n        }\r\n      } else {\r\n        var fullReader = this._fullRequestReader;\r\n\r\n        if (fullReader !== null && fullReader !== void 0 && fullReader.onProgress) {\r\n          fullReader.onProgress({\r\n            loaded: evt.loaded,\r\n            total: evt.total\r\n          });\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_onProgressiveDone\",\r\n    value: function _onProgressiveDone() {\r\n      if (this._fullRequestReader) {\r\n        this._fullRequestReader.progressiveDone();\r\n      }\r\n\r\n      this._progressiveDone = true;\r\n    }\r\n  }, {\r\n    key: \"_removeRangeReader\",\r\n    value: function _removeRangeReader(reader) {\r\n      var i = this._rangeReaders.indexOf(reader);\r\n\r\n      if (i >= 0) {\r\n        this._rangeReaders.splice(i, 1);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getFullReader\",\r\n    value: function getFullReader() {\r\n      (0, _util.assert)(!this._fullRequestReader, \"PDFDataTransportStream.getFullReader can only be called once.\");\r\n      var queuedChunks = this._queuedChunks;\r\n      this._queuedChunks = null;\r\n      return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone);\r\n    }\r\n  }, {\r\n    key: \"getRangeReader\",\r\n    value: function getRangeReader(begin, end) {\r\n      if (end <= this._progressiveDataLength) {\r\n        return null;\r\n      }\r\n\r\n      var reader = new PDFDataTransportStreamRangeReader(this, begin, end);\r\n\r\n      this._pdfDataRangeTransport.requestDataRange(begin, end);\r\n\r\n      this._rangeReaders.push(reader);\r\n\r\n      return reader;\r\n    }\r\n  }, {\r\n    key: \"cancelAllRequests\",\r\n    value: function cancelAllRequests(reason) {\r\n      if (this._fullRequestReader) {\r\n        this._fullRequestReader.cancel(reason);\r\n      }\r\n\r\n      var readers = this._rangeReaders.slice(0);\r\n\r\n      readers.forEach(function (rangeReader) {\r\n        rangeReader.cancel(reason);\r\n      });\r\n\r\n      this._pdfDataRangeTransport.abort();\r\n    }\r\n  }]);\r\n\r\n  return PDFDataTransportStream;\r\n}();\r\n\r\nexports.PDFDataTransportStream = PDFDataTransportStream;\r\n\r\nvar PDFDataTransportStreamReader = /*#__PURE__*/function () {\r\n  function PDFDataTransportStreamReader(stream, queuedChunks) {\r\n    var progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n\r\n    _classCallCheck(this, PDFDataTransportStreamReader);\r\n\r\n    this._stream = stream;\r\n    this._done = progressiveDone || false;\r\n    this._filename = null;\r\n    this._queuedChunks = queuedChunks || [];\r\n    this._loaded = 0;\r\n\r\n    var _iterator = _createForOfIteratorHelper(this._queuedChunks),\r\n        _step;\r\n\r\n    try {\r\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n        var chunk = _step.value;\r\n        this._loaded += chunk.byteLength;\r\n      }\r\n    } catch (err) {\r\n      _iterator.e(err);\r\n    } finally {\r\n      _iterator.f();\r\n    }\r\n\r\n    this._requests = [];\r\n    this._headersReady = Promise.resolve();\r\n    stream._fullRequestReader = this;\r\n    this.onProgress = null;\r\n  }\r\n\r\n  _createClass(PDFDataTransportStreamReader, [{\r\n    key: \"_enqueue\",\r\n    value: function _enqueue(chunk) {\r\n      if (this._done) {\r\n        return;\r\n      }\r\n\r\n      if (this._requests.length > 0) {\r\n        var requestCapability = this._requests.shift();\r\n\r\n        requestCapability.resolve({\r\n          value: chunk,\r\n          done: false\r\n        });\r\n      } else {\r\n        this._queuedChunks.push(chunk);\r\n      }\r\n\r\n      this._loaded += chunk.byteLength;\r\n    }\r\n  }, {\r\n    key: \"headersReady\",\r\n    get: function get() {\r\n      return this._headersReady;\r\n    }\r\n  }, {\r\n    key: \"filename\",\r\n    get: function get() {\r\n      return this._filename;\r\n    }\r\n  }, {\r\n    key: \"isRangeSupported\",\r\n    get: function get() {\r\n      return this._stream._isRangeSupported;\r\n    }\r\n  }, {\r\n    key: \"isStreamingSupported\",\r\n    get: function get() {\r\n      return this._stream._isStreamingSupported;\r\n    }\r\n  }, {\r\n    key: \"contentLength\",\r\n    get: function get() {\r\n      return this._stream._contentLength;\r\n    }\r\n  }, {\r\n    key: \"read\",\r\n    value: function () {\r\n      var _read = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var chunk, requestCapability;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                if (!(this._queuedChunks.length > 0)) {\r\n                  _context.next = 3;\r\n                  break;\r\n                }\r\n\r\n                chunk = this._queuedChunks.shift();\r\n                return _context.abrupt(\"return\", {\r\n                  value: chunk,\r\n                  done: false\r\n                });\r\n\r\n              case 3:\r\n                if (!this._done) {\r\n                  _context.next = 5;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\", {\r\n                  value: undefined,\r\n                  done: true\r\n                });\r\n\r\n              case 5:\r\n                requestCapability = (0, _util.createPromiseCapability)();\r\n\r\n                this._requests.push(requestCapability);\r\n\r\n                return _context.abrupt(\"return\", requestCapability.promise);\r\n\r\n              case 8:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function read() {\r\n        return _read.apply(this, arguments);\r\n      }\r\n\r\n      return read;\r\n    }()\r\n  }, {\r\n    key: \"cancel\",\r\n    value: function cancel(reason) {\r\n      this._done = true;\r\n\r\n      this._requests.forEach(function (requestCapability) {\r\n        requestCapability.resolve({\r\n          value: undefined,\r\n          done: true\r\n        });\r\n      });\r\n\r\n      this._requests = [];\r\n    }\r\n  }, {\r\n    key: \"progressiveDone\",\r\n    value: function progressiveDone() {\r\n      if (this._done) {\r\n        return;\r\n      }\r\n\r\n      this._done = true;\r\n    }\r\n  }]);\r\n\r\n  return PDFDataTransportStreamReader;\r\n}();\r\n\r\nvar PDFDataTransportStreamRangeReader = /*#__PURE__*/function () {\r\n  function PDFDataTransportStreamRangeReader(stream, begin, end) {\r\n    _classCallCheck(this, PDFDataTransportStreamRangeReader);\r\n\r\n    this._stream = stream;\r\n    this._begin = begin;\r\n    this._end = end;\r\n    this._queuedChunk = null;\r\n    this._requests = [];\r\n    this._done = false;\r\n    this.onProgress = null;\r\n  }\r\n\r\n  _createClass(PDFDataTransportStreamRangeReader, [{\r\n    key: \"_enqueue\",\r\n    value: function _enqueue(chunk) {\r\n      if (this._done) {\r\n        return;\r\n      }\r\n\r\n      if (this._requests.length === 0) {\r\n        this._queuedChunk = chunk;\r\n      } else {\r\n        var requestsCapability = this._requests.shift();\r\n\r\n        requestsCapability.resolve({\r\n          value: chunk,\r\n          done: false\r\n        });\r\n\r\n        this._requests.forEach(function (requestCapability) {\r\n          requestCapability.resolve({\r\n            value: undefined,\r\n            done: true\r\n          });\r\n        });\r\n\r\n        this._requests = [];\r\n      }\r\n\r\n      this._done = true;\r\n\r\n      this._stream._removeRangeReader(this);\r\n    }\r\n  }, {\r\n    key: \"isStreamingSupported\",\r\n    get: function get() {\r\n      return false;\r\n    }\r\n  }, {\r\n    key: \"read\",\r\n    value: function () {\r\n      var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n        var chunk, requestCapability;\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                if (!this._queuedChunk) {\r\n                  _context2.next = 4;\r\n                  break;\r\n                }\r\n\r\n                chunk = this._queuedChunk;\r\n                this._queuedChunk = null;\r\n                return _context2.abrupt(\"return\", {\r\n                  value: chunk,\r\n                  done: false\r\n                });\r\n\r\n              case 4:\r\n                if (!this._done) {\r\n                  _context2.next = 6;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", {\r\n                  value: undefined,\r\n                  done: true\r\n                });\r\n\r\n              case 6:\r\n                requestCapability = (0, _util.createPromiseCapability)();\r\n\r\n                this._requests.push(requestCapability);\r\n\r\n                return _context2.abrupt(\"return\", requestCapability.promise);\r\n\r\n              case 9:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this);\r\n      }));\r\n\r\n      function read() {\r\n        return _read2.apply(this, arguments);\r\n      }\r\n\r\n      return read;\r\n    }()\r\n  }, {\r\n    key: \"cancel\",\r\n    value: function cancel(reason) {\r\n      this._done = true;\r\n\r\n      this._requests.forEach(function (requestCapability) {\r\n        requestCapability.resolve({\r\n          value: undefined,\r\n          done: true\r\n        });\r\n      });\r\n\r\n      this._requests = [];\r\n\r\n      this._stream._removeRangeReader(this);\r\n    }\r\n  }]);\r\n\r\n  return PDFDataTransportStreamRangeReader;\r\n}();\r\n\r\n/***/ }),\r\n/* 148 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.WebGLContext = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar WebGLContext = /*#__PURE__*/function () {\r\n  function WebGLContext(_ref) {\r\n    var _ref$enable = _ref.enable,\r\n        enable = _ref$enable === void 0 ? false : _ref$enable;\r\n\r\n    _classCallCheck(this, WebGLContext);\r\n\r\n    this._enabled = enable === true;\r\n  }\r\n\r\n  _createClass(WebGLContext, [{\r\n    key: \"isEnabled\",\r\n    get: function get() {\r\n      var enabled = this._enabled;\r\n\r\n      if (enabled) {\r\n        enabled = WebGLUtils.tryInitGL();\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"isEnabled\", enabled);\r\n    }\r\n  }, {\r\n    key: \"composeSMask\",\r\n    value: function composeSMask(_ref2) {\r\n      var layer = _ref2.layer,\r\n          mask = _ref2.mask,\r\n          properties = _ref2.properties;\r\n      return WebGLUtils.composeSMask(layer, mask, properties);\r\n    }\r\n  }, {\r\n    key: \"drawFigures\",\r\n    value: function drawFigures(_ref3) {\r\n      var width = _ref3.width,\r\n          height = _ref3.height,\r\n          backgroundColor = _ref3.backgroundColor,\r\n          figures = _ref3.figures,\r\n          context = _ref3.context;\r\n      return WebGLUtils.drawFigures(width, height, backgroundColor, figures, context);\r\n    }\r\n  }, {\r\n    key: \"clear\",\r\n    value: function clear() {\r\n      WebGLUtils.cleanup();\r\n    }\r\n  }]);\r\n\r\n  return WebGLContext;\r\n}();\r\n\r\nexports.WebGLContext = WebGLContext;\r\n\r\nvar WebGLUtils = function WebGLUtilsClosure() {\r\n  function loadShader(gl, code, shaderType) {\r\n    var shader = gl.createShader(shaderType);\r\n    gl.shaderSource(shader, code);\r\n    gl.compileShader(shader);\r\n    var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\r\n\r\n    if (!compiled) {\r\n      var errorMsg = gl.getShaderInfoLog(shader);\r\n      throw new Error(\"Error during shader compilation: \" + errorMsg);\r\n    }\r\n\r\n    return shader;\r\n  }\r\n\r\n  function createVertexShader(gl, code) {\r\n    return loadShader(gl, code, gl.VERTEX_SHADER);\r\n  }\r\n\r\n  function createFragmentShader(gl, code) {\r\n    return loadShader(gl, code, gl.FRAGMENT_SHADER);\r\n  }\r\n\r\n  function createProgram(gl, shaders) {\r\n    var program = gl.createProgram();\r\n\r\n    for (var i = 0, ii = shaders.length; i < ii; ++i) {\r\n      gl.attachShader(program, shaders[i]);\r\n    }\r\n\r\n    gl.linkProgram(program);\r\n    var linked = gl.getProgramParameter(program, gl.LINK_STATUS);\r\n\r\n    if (!linked) {\r\n      var errorMsg = gl.getProgramInfoLog(program);\r\n      throw new Error(\"Error during program linking: \" + errorMsg);\r\n    }\r\n\r\n    return program;\r\n  }\r\n\r\n  function createTexture(gl, image, textureId) {\r\n    gl.activeTexture(textureId);\r\n    var texture = gl.createTexture();\r\n    gl.bindTexture(gl.TEXTURE_2D, texture);\r\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\r\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\r\n    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\r\n    return texture;\r\n  }\r\n\r\n  var currentGL, currentCanvas;\r\n\r\n  function generateGL() {\r\n    if (currentGL) {\r\n      return;\r\n    }\r\n\r\n    currentCanvas = document.createElement(\"canvas\");\r\n    currentGL = currentCanvas.getContext(\"webgl\", {\r\n      premultipliedalpha: false\r\n    });\r\n  }\r\n\r\n  var smaskVertexShaderCode = \"\\\r\n  attribute vec2 a_position;                                    \\\r\n  attribute vec2 a_texCoord;                                    \\\r\n                                                                \\\r\n  uniform vec2 u_resolution;                                    \\\r\n                                                                \\\r\n  varying vec2 v_texCoord;                                      \\\r\n                                                                \\\r\n  void main() {                                                 \\\r\n    vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0;   \\\r\n    gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);          \\\r\n                                                                \\\r\n    v_texCoord = a_texCoord;                                    \\\r\n  }                                                             \";\r\n  var smaskFragmentShaderCode = \"\\\r\n  precision mediump float;                                      \\\r\n                                                                \\\r\n  uniform vec4 u_backdrop;                                      \\\r\n  uniform int u_subtype;                                        \\\r\n  uniform sampler2D u_image;                                    \\\r\n  uniform sampler2D u_mask;                                     \\\r\n                                                                \\\r\n  varying vec2 v_texCoord;                                      \\\r\n                                                                \\\r\n  void main() {                                                 \\\r\n    vec4 imageColor = texture2D(u_image, v_texCoord);           \\\r\n    vec4 maskColor = texture2D(u_mask, v_texCoord);             \\\r\n    if (u_backdrop.a > 0.0) {                                   \\\r\n      maskColor.rgb = maskColor.rgb * maskColor.a +             \\\r\n                      u_backdrop.rgb * (1.0 - maskColor.a);     \\\r\n    }                                                           \\\r\n    float lum;                                                  \\\r\n    if (u_subtype == 0) {                                       \\\r\n      lum = maskColor.a;                                        \\\r\n    } else {                                                    \\\r\n      lum = maskColor.r * 0.3 + maskColor.g * 0.59 +            \\\r\n            maskColor.b * 0.11;                                 \\\r\n    }                                                           \\\r\n    imageColor.a *= lum;                                        \\\r\n    imageColor.rgb *= imageColor.a;                             \\\r\n    gl_FragColor = imageColor;                                  \\\r\n  }                                                             \";\r\n  var smaskCache = null;\r\n\r\n  function initSmaskGL() {\r\n    generateGL();\r\n    var canvas = currentCanvas;\r\n    currentCanvas = null;\r\n    var gl = currentGL;\r\n    currentGL = null;\r\n    var vertexShader = createVertexShader(gl, smaskVertexShaderCode);\r\n    var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode);\r\n    var program = createProgram(gl, [vertexShader, fragmentShader]);\r\n    gl.useProgram(program);\r\n    var cache = {};\r\n    cache.gl = gl;\r\n    cache.canvas = canvas;\r\n    cache.resolutionLocation = gl.getUniformLocation(program, \"u_resolution\");\r\n    cache.positionLocation = gl.getAttribLocation(program, \"a_position\");\r\n    cache.backdropLocation = gl.getUniformLocation(program, \"u_backdrop\");\r\n    cache.subtypeLocation = gl.getUniformLocation(program, \"u_subtype\");\r\n    var texCoordLocation = gl.getAttribLocation(program, \"a_texCoord\");\r\n    var texLayerLocation = gl.getUniformLocation(program, \"u_image\");\r\n    var texMaskLocation = gl.getUniformLocation(program, \"u_mask\");\r\n    var texCoordBuffer = gl.createBuffer();\r\n    gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);\r\n    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]), gl.STATIC_DRAW);\r\n    gl.enableVertexAttribArray(texCoordLocation);\r\n    gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0);\r\n    gl.uniform1i(texLayerLocation, 0);\r\n    gl.uniform1i(texMaskLocation, 1);\r\n    smaskCache = cache;\r\n  }\r\n\r\n  function composeSMask(layer, mask, properties) {\r\n    var width = layer.width,\r\n        height = layer.height;\r\n\r\n    if (!smaskCache) {\r\n      initSmaskGL();\r\n    }\r\n\r\n    var cache = smaskCache,\r\n        canvas = cache.canvas,\r\n        gl = cache.gl;\r\n    canvas.width = width;\r\n    canvas.height = height;\r\n    gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\r\n    gl.uniform2f(cache.resolutionLocation, width, height);\r\n\r\n    if (properties.backdrop) {\r\n      gl.uniform4f(cache.resolutionLocation, properties.backdrop[0], properties.backdrop[1], properties.backdrop[2], 1);\r\n    } else {\r\n      gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0);\r\n    }\r\n\r\n    gl.uniform1i(cache.subtypeLocation, properties.subtype === \"Luminosity\" ? 1 : 0);\r\n    var texture = createTexture(gl, layer, gl.TEXTURE0);\r\n    var maskTexture = createTexture(gl, mask, gl.TEXTURE1);\r\n    var buffer = gl.createBuffer();\r\n    gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\r\n    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, 0, width, 0, 0, height, 0, height, width, 0, width, height]), gl.STATIC_DRAW);\r\n    gl.enableVertexAttribArray(cache.positionLocation);\r\n    gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);\r\n    gl.clearColor(0, 0, 0, 0);\r\n    gl.enable(gl.BLEND);\r\n    gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\r\n    gl.clear(gl.COLOR_BUFFER_BIT);\r\n    gl.drawArrays(gl.TRIANGLES, 0, 6);\r\n    gl.flush();\r\n    gl.deleteTexture(texture);\r\n    gl.deleteTexture(maskTexture);\r\n    gl.deleteBuffer(buffer);\r\n    return canvas;\r\n  }\r\n\r\n  var figuresVertexShaderCode = \"\\\r\n  attribute vec2 a_position;                                    \\\r\n  attribute vec3 a_color;                                       \\\r\n                                                                \\\r\n  uniform vec2 u_resolution;                                    \\\r\n  uniform vec2 u_scale;                                         \\\r\n  uniform vec2 u_offset;                                        \\\r\n                                                                \\\r\n  varying vec4 v_color;                                         \\\r\n                                                                \\\r\n  void main() {                                                 \\\r\n    vec2 position = (a_position + u_offset) * u_scale;          \\\r\n    vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0;     \\\r\n    gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);          \\\r\n                                                                \\\r\n    v_color = vec4(a_color / 255.0, 1.0);                       \\\r\n  }                                                             \";\r\n  var figuresFragmentShaderCode = \"\\\r\n  precision mediump float;                                      \\\r\n                                                                \\\r\n  varying vec4 v_color;                                         \\\r\n                                                                \\\r\n  void main() {                                                 \\\r\n    gl_FragColor = v_color;                                     \\\r\n  }                                                             \";\r\n  var figuresCache = null;\r\n\r\n  function initFiguresGL() {\r\n    generateGL();\r\n    var canvas = currentCanvas;\r\n    currentCanvas = null;\r\n    var gl = currentGL;\r\n    currentGL = null;\r\n    var vertexShader = createVertexShader(gl, figuresVertexShaderCode);\r\n    var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode);\r\n    var program = createProgram(gl, [vertexShader, fragmentShader]);\r\n    gl.useProgram(program);\r\n    var cache = {};\r\n    cache.gl = gl;\r\n    cache.canvas = canvas;\r\n    cache.resolutionLocation = gl.getUniformLocation(program, \"u_resolution\");\r\n    cache.scaleLocation = gl.getUniformLocation(program, \"u_scale\");\r\n    cache.offsetLocation = gl.getUniformLocation(program, \"u_offset\");\r\n    cache.positionLocation = gl.getAttribLocation(program, \"a_position\");\r\n    cache.colorLocation = gl.getAttribLocation(program, \"a_color\");\r\n    figuresCache = cache;\r\n  }\r\n\r\n  function drawFigures(width, height, backgroundColor, figures, context) {\r\n    if (!figuresCache) {\r\n      initFiguresGL();\r\n    }\r\n\r\n    var cache = figuresCache,\r\n        canvas = cache.canvas,\r\n        gl = cache.gl;\r\n    canvas.width = width;\r\n    canvas.height = height;\r\n    gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);\r\n    gl.uniform2f(cache.resolutionLocation, width, height);\r\n    var count = 0;\r\n\r\n    for (var i = 0, ii = figures.length; i < ii; i++) {\r\n      switch (figures[i].type) {\r\n        case \"lattice\":\r\n          var rows = figures[i].coords.length / figures[i].verticesPerRow | 0;\r\n          count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6;\r\n          break;\r\n\r\n        case \"triangles\":\r\n          count += figures[i].coords.length;\r\n          break;\r\n      }\r\n    }\r\n\r\n    var coords = new Float32Array(count * 2);\r\n    var colors = new Uint8Array(count * 3);\r\n    var coordsMap = context.coords,\r\n        colorsMap = context.colors;\r\n    var pIndex = 0,\r\n        cIndex = 0;\r\n\r\n    for (var _i = 0, _ii = figures.length; _i < _ii; _i++) {\r\n      var figure = figures[_i],\r\n          ps = figure.coords,\r\n          cs = figure.colors;\r\n\r\n      switch (figure.type) {\r\n        case \"lattice\":\r\n          var cols = figure.verticesPerRow;\r\n\r\n          var _rows = ps.length / cols | 0;\r\n\r\n          for (var row = 1; row < _rows; row++) {\r\n            var offset = row * cols + 1;\r\n\r\n            for (var col = 1; col < cols; col++, offset++) {\r\n              coords[pIndex] = coordsMap[ps[offset - cols - 1]];\r\n              coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1];\r\n              coords[pIndex + 2] = coordsMap[ps[offset - cols]];\r\n              coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1];\r\n              coords[pIndex + 4] = coordsMap[ps[offset - 1]];\r\n              coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1];\r\n              colors[cIndex] = colorsMap[cs[offset - cols - 1]];\r\n              colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1];\r\n              colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2];\r\n              colors[cIndex + 3] = colorsMap[cs[offset - cols]];\r\n              colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1];\r\n              colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2];\r\n              colors[cIndex + 6] = colorsMap[cs[offset - 1]];\r\n              colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1];\r\n              colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2];\r\n              coords[pIndex + 6] = coords[pIndex + 2];\r\n              coords[pIndex + 7] = coords[pIndex + 3];\r\n              coords[pIndex + 8] = coords[pIndex + 4];\r\n              coords[pIndex + 9] = coords[pIndex + 5];\r\n              coords[pIndex + 10] = coordsMap[ps[offset]];\r\n              coords[pIndex + 11] = coordsMap[ps[offset] + 1];\r\n              colors[cIndex + 9] = colors[cIndex + 3];\r\n              colors[cIndex + 10] = colors[cIndex + 4];\r\n              colors[cIndex + 11] = colors[cIndex + 5];\r\n              colors[cIndex + 12] = colors[cIndex + 6];\r\n              colors[cIndex + 13] = colors[cIndex + 7];\r\n              colors[cIndex + 14] = colors[cIndex + 8];\r\n              colors[cIndex + 15] = colorsMap[cs[offset]];\r\n              colors[cIndex + 16] = colorsMap[cs[offset] + 1];\r\n              colors[cIndex + 17] = colorsMap[cs[offset] + 2];\r\n              pIndex += 12;\r\n              cIndex += 18;\r\n            }\r\n          }\r\n\r\n          break;\r\n\r\n        case \"triangles\":\r\n          for (var j = 0, jj = ps.length; j < jj; j++) {\r\n            coords[pIndex] = coordsMap[ps[j]];\r\n            coords[pIndex + 1] = coordsMap[ps[j] + 1];\r\n            colors[cIndex] = colorsMap[cs[j]];\r\n            colors[cIndex + 1] = colorsMap[cs[j] + 1];\r\n            colors[cIndex + 2] = colorsMap[cs[j] + 2];\r\n            pIndex += 2;\r\n            cIndex += 3;\r\n          }\r\n\r\n          break;\r\n      }\r\n    }\r\n\r\n    if (backgroundColor) {\r\n      gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255, backgroundColor[2] / 255, 1.0);\r\n    } else {\r\n      gl.clearColor(0, 0, 0, 0);\r\n    }\r\n\r\n    gl.clear(gl.COLOR_BUFFER_BIT);\r\n    var coordsBuffer = gl.createBuffer();\r\n    gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer);\r\n    gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW);\r\n    gl.enableVertexAttribArray(cache.positionLocation);\r\n    gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);\r\n    var colorsBuffer = gl.createBuffer();\r\n    gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer);\r\n    gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);\r\n    gl.enableVertexAttribArray(cache.colorLocation);\r\n    gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false, 0, 0);\r\n    gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY);\r\n    gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY);\r\n    gl.drawArrays(gl.TRIANGLES, 0, count);\r\n    gl.flush();\r\n    gl.deleteBuffer(coordsBuffer);\r\n    gl.deleteBuffer(colorsBuffer);\r\n    return canvas;\r\n  }\r\n\r\n  return {\r\n    tryInitGL: function tryInitGL() {\r\n      try {\r\n        generateGL();\r\n        return !!currentGL;\r\n      } catch (ex) {}\r\n\r\n      return false;\r\n    },\r\n    composeSMask: composeSMask,\r\n    drawFigures: drawFigures,\r\n    cleanup: function cleanup() {\r\n      var _smaskCache, _figuresCache;\r\n\r\n      if ((_smaskCache = smaskCache) !== null && _smaskCache !== void 0 && _smaskCache.canvas) {\r\n        smaskCache.canvas.width = 0;\r\n        smaskCache.canvas.height = 0;\r\n      }\r\n\r\n      if ((_figuresCache = figuresCache) !== null && _figuresCache !== void 0 && _figuresCache.canvas) {\r\n        figuresCache.canvas.width = 0;\r\n        figuresCache.canvas.height = 0;\r\n      }\r\n\r\n      smaskCache = null;\r\n      figuresCache = null;\r\n    }\r\n  };\r\n}();\r\n\r\n/***/ }),\r\n/* 149 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.AnnotationLayer = void 0;\r\n\r\nvar _display_utils = __w_pdfjs_require__(1);\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _annotation_storage = __w_pdfjs_require__(138);\r\n\r\nvar _scripting_utils = __w_pdfjs_require__(150);\r\n\r\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\r\n\r\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar AnnotationElementFactory = /*#__PURE__*/function () {\r\n  function AnnotationElementFactory() {\r\n    _classCallCheck(this, AnnotationElementFactory);\r\n  }\r\n\r\n  _createClass(AnnotationElementFactory, null, [{\r\n    key: \"create\",\r\n    value: function create(parameters) {\r\n      var subtype = parameters.data.annotationType;\r\n\r\n      switch (subtype) {\r\n        case _util.AnnotationType.LINK:\r\n          return new LinkAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.TEXT:\r\n          return new TextAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.WIDGET:\r\n          var fieldType = parameters.data.fieldType;\r\n\r\n          switch (fieldType) {\r\n            case \"Tx\":\r\n              return new TextWidgetAnnotationElement(parameters);\r\n\r\n            case \"Btn\":\r\n              if (parameters.data.radioButton) {\r\n                return new RadioButtonWidgetAnnotationElement(parameters);\r\n              } else if (parameters.data.checkBox) {\r\n                return new CheckboxWidgetAnnotationElement(parameters);\r\n              }\r\n\r\n              return new PushButtonWidgetAnnotationElement(parameters);\r\n\r\n            case \"Ch\":\r\n              return new ChoiceWidgetAnnotationElement(parameters);\r\n          }\r\n\r\n          return new WidgetAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.POPUP:\r\n          return new PopupAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.FREETEXT:\r\n          return new FreeTextAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.LINE:\r\n          return new LineAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.SQUARE:\r\n          return new SquareAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.CIRCLE:\r\n          return new CircleAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.POLYLINE:\r\n          return new PolylineAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.CARET:\r\n          return new CaretAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.INK:\r\n          return new InkAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.POLYGON:\r\n          return new PolygonAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.HIGHLIGHT:\r\n          return new HighlightAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.UNDERLINE:\r\n          return new UnderlineAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.SQUIGGLY:\r\n          return new SquigglyAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.STRIKEOUT:\r\n          return new StrikeOutAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.STAMP:\r\n          return new StampAnnotationElement(parameters);\r\n\r\n        case _util.AnnotationType.FILEATTACHMENT:\r\n          return new FileAttachmentAnnotationElement(parameters);\r\n\r\n        default:\r\n          return new AnnotationElement(parameters);\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return AnnotationElementFactory;\r\n}();\r\n\r\nvar AnnotationElement = /*#__PURE__*/function () {\r\n  function AnnotationElement(parameters) {\r\n    var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\r\n        _ref$isRenderable = _ref.isRenderable,\r\n        isRenderable = _ref$isRenderable === void 0 ? false : _ref$isRenderable,\r\n        _ref$ignoreBorder = _ref.ignoreBorder,\r\n        ignoreBorder = _ref$ignoreBorder === void 0 ? false : _ref$ignoreBorder,\r\n        _ref$createQuadrilate = _ref.createQuadrilaterals,\r\n        createQuadrilaterals = _ref$createQuadrilate === void 0 ? false : _ref$createQuadrilate;\r\n\r\n    _classCallCheck(this, AnnotationElement);\r\n\r\n    this.isRenderable = isRenderable;\r\n    this.data = parameters.data;\r\n    this.layer = parameters.layer;\r\n    this.page = parameters.page;\r\n    this.viewport = parameters.viewport;\r\n    this.linkService = parameters.linkService;\r\n    this.downloadManager = parameters.downloadManager;\r\n    this.imageResourcesPath = parameters.imageResourcesPath;\r\n    this.renderInteractiveForms = parameters.renderInteractiveForms;\r\n    this.svgFactory = parameters.svgFactory;\r\n    this.annotationStorage = parameters.annotationStorage;\r\n    this.enableScripting = parameters.enableScripting;\r\n    this.hasJSActions = parameters.hasJSActions;\r\n    this._mouseState = parameters.mouseState;\r\n\r\n    if (isRenderable) {\r\n      this.container = this._createContainer(ignoreBorder);\r\n    }\r\n\r\n    if (createQuadrilaterals) {\r\n      this.quadrilaterals = this._createQuadrilaterals(ignoreBorder);\r\n    }\r\n  }\r\n\r\n  _createClass(AnnotationElement, [{\r\n    key: \"_createContainer\",\r\n    value: function _createContainer() {\r\n      var ignoreBorder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n      var data = this.data,\r\n          page = this.page,\r\n          viewport = this.viewport;\r\n      var container = document.createElement(\"section\");\r\n      var width = data.rect[2] - data.rect[0];\r\n      var height = data.rect[3] - data.rect[1];\r\n      container.setAttribute(\"data-annotation-id\", data.id);\r\n\r\n      var rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);\r\n\r\n      container.style.transform = \"matrix(\".concat(viewport.transform.join(\",\"), \")\");\r\n      container.style.transformOrigin = \"\".concat(-rect[0], \"px \").concat(-rect[1], \"px\");\r\n\r\n      if (!ignoreBorder && data.borderStyle.width > 0) {\r\n        container.style.borderWidth = \"\".concat(data.borderStyle.width, \"px\");\r\n\r\n        if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) {\r\n          width = width - 2 * data.borderStyle.width;\r\n          height = height - 2 * data.borderStyle.width;\r\n        }\r\n\r\n        var horizontalRadius = data.borderStyle.horizontalCornerRadius;\r\n        var verticalRadius = data.borderStyle.verticalCornerRadius;\r\n\r\n        if (horizontalRadius > 0 || verticalRadius > 0) {\r\n          var radius = \"\".concat(horizontalRadius, \"px / \").concat(verticalRadius, \"px\");\r\n          container.style.borderRadius = radius;\r\n        }\r\n\r\n        switch (data.borderStyle.style) {\r\n          case _util.AnnotationBorderStyleType.SOLID:\r\n            container.style.borderStyle = \"solid\";\r\n            break;\r\n\r\n          case _util.AnnotationBorderStyleType.DASHED:\r\n            container.style.borderStyle = \"dashed\";\r\n            break;\r\n\r\n          case _util.AnnotationBorderStyleType.BEVELED:\r\n            (0, _util.warn)(\"Unimplemented border style: beveled\");\r\n            break;\r\n\r\n          case _util.AnnotationBorderStyleType.INSET:\r\n            (0, _util.warn)(\"Unimplemented border style: inset\");\r\n            break;\r\n\r\n          case _util.AnnotationBorderStyleType.UNDERLINE:\r\n            container.style.borderBottomStyle = \"solid\";\r\n            break;\r\n\r\n          default:\r\n            break;\r\n        }\r\n\r\n        if (data.color) {\r\n          container.style.borderColor = _util.Util.makeHexColor(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0);\r\n        } else {\r\n          container.style.borderWidth = 0;\r\n        }\r\n      }\r\n\r\n      container.style.left = \"\".concat(rect[0], \"px\");\r\n      container.style.top = \"\".concat(rect[1], \"px\");\r\n      container.style.width = \"\".concat(width, \"px\");\r\n      container.style.height = \"\".concat(height, \"px\");\r\n      return container;\r\n    }\r\n  }, {\r\n    key: \"_createQuadrilaterals\",\r\n    value: function _createQuadrilaterals() {\r\n      var ignoreBorder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n\r\n      if (!this.data.quadPoints) {\r\n        return null;\r\n      }\r\n\r\n      var quadrilaterals = [];\r\n      var savedRect = this.data.rect;\r\n\r\n      var _iterator = _createForOfIteratorHelper(this.data.quadPoints),\r\n          _step;\r\n\r\n      try {\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          var quadPoint = _step.value;\r\n          this.data.rect = [quadPoint[2].x, quadPoint[2].y, quadPoint[1].x, quadPoint[1].y];\r\n          quadrilaterals.push(this._createContainer(ignoreBorder));\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n\r\n      this.data.rect = savedRect;\r\n      return quadrilaterals;\r\n    }\r\n  }, {\r\n    key: \"_createPopup\",\r\n    value: function _createPopup(trigger, data) {\r\n      var container = this.container;\r\n\r\n      if (this.quadrilaterals) {\r\n        trigger = trigger || this.quadrilaterals;\r\n        container = this.quadrilaterals[0];\r\n      }\r\n\r\n      if (!trigger) {\r\n        trigger = document.createElement(\"div\");\r\n        trigger.style.height = container.style.height;\r\n        trigger.style.width = container.style.width;\r\n        container.appendChild(trigger);\r\n      }\r\n\r\n      var popupElement = new PopupElement({\r\n        container: container,\r\n        trigger: trigger,\r\n        color: data.color,\r\n        title: data.title,\r\n        modificationDate: data.modificationDate,\r\n        contents: data.contents,\r\n        hideWrapper: true\r\n      });\r\n      var popup = popupElement.render();\r\n      popup.style.left = container.style.width;\r\n      container.appendChild(popup);\r\n    }\r\n  }, {\r\n    key: \"_renderQuadrilaterals\",\r\n    value: function _renderQuadrilaterals(className) {\r\n      this.quadrilaterals.forEach(function (quadrilateral) {\r\n        quadrilateral.className = className;\r\n      });\r\n      return this.quadrilaterals;\r\n    }\r\n  }, {\r\n    key: \"render\",\r\n    value: function render() {\r\n      (0, _util.unreachable)(\"Abstract method `AnnotationElement.render` called\");\r\n    }\r\n  }]);\r\n\r\n  return AnnotationElement;\r\n}();\r\n\r\nvar LinkAnnotationElement = /*#__PURE__*/function (_AnnotationElement) {\r\n  _inherits(LinkAnnotationElement, _AnnotationElement);\r\n\r\n  var _super = _createSuper(LinkAnnotationElement);\r\n\r\n  function LinkAnnotationElement(parameters) {\r\n    _classCallCheck(this, LinkAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action || parameters.data.isTooltipOnly || parameters.data.actions && (parameters.data.actions.Action || parameters.data.actions[\"Mouse Up\"] || parameters.data.actions[\"Mouse Down\"]));\r\n    return _super.call(this, parameters, {\r\n      isRenderable: isRenderable,\r\n      createQuadrilaterals: true\r\n    });\r\n  }\r\n\r\n  _createClass(LinkAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      var data = this.data,\r\n          linkService = this.linkService;\r\n      var link = document.createElement(\"a\");\r\n\r\n      if (data.url) {\r\n        (0, _display_utils.addLinkAttributes)(link, {\r\n          url: data.url,\r\n          target: data.newWindow ? _display_utils.LinkTarget.BLANK : linkService.externalLinkTarget,\r\n          rel: linkService.externalLinkRel,\r\n          enabled: linkService.externalLinkEnabled\r\n        });\r\n      } else if (data.action) {\r\n        this._bindNamedAction(link, data.action);\r\n      } else if (data.dest) {\r\n        this._bindLink(link, data.dest);\r\n      } else if (data.actions && (data.actions.Action || data.actions[\"Mouse Up\"] || data.actions[\"Mouse Down\"]) && this.enableScripting && this.hasJSActions) {\r\n        this._bindJSAction(link, data);\r\n      } else {\r\n        this._bindLink(link, \"\");\r\n      }\r\n\r\n      if (this.quadrilaterals) {\r\n        return this._renderQuadrilaterals(\"linkAnnotation\").map(function (quadrilateral, index) {\r\n          var linkElement = index === 0 ? link : link.cloneNode();\r\n          quadrilateral.appendChild(linkElement);\r\n          return quadrilateral;\r\n        });\r\n      }\r\n\r\n      this.container.className = \"linkAnnotation\";\r\n      this.container.appendChild(link);\r\n      return this.container;\r\n    }\r\n  }, {\r\n    key: \"_bindLink\",\r\n    value: function _bindLink(link, destination) {\r\n      var _this = this;\r\n\r\n      link.href = this.linkService.getDestinationHash(destination);\r\n\r\n      link.onclick = function () {\r\n        if (destination) {\r\n          _this.linkService.goToDestination(destination);\r\n        }\r\n\r\n        return false;\r\n      };\r\n\r\n      if (destination || destination === \"\") {\r\n        link.className = \"internalLink\";\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_bindNamedAction\",\r\n    value: function _bindNamedAction(link, action) {\r\n      var _this2 = this;\r\n\r\n      link.href = this.linkService.getAnchorUrl(\"\");\r\n\r\n      link.onclick = function () {\r\n        _this2.linkService.executeNamedAction(action);\r\n\r\n        return false;\r\n      };\r\n\r\n      link.className = \"internalLink\";\r\n    }\r\n  }, {\r\n    key: \"_bindJSAction\",\r\n    value: function _bindJSAction(link, data) {\r\n      var _this3 = this;\r\n\r\n      link.href = this.linkService.getAnchorUrl(\"\");\r\n      var map = new Map([[\"Action\", \"onclick\"], [\"Mouse Up\", \"onmouseup\"], [\"Mouse Down\", \"onmousedown\"]]);\r\n\r\n      var _loop = function _loop() {\r\n        var name = _Object$keys[_i];\r\n        var jsName = map.get(name);\r\n\r\n        if (!jsName) {\r\n          return \"continue\";\r\n        }\r\n\r\n        link[jsName] = function () {\r\n          var _this3$linkService$ev;\r\n\r\n          (_this3$linkService$ev = _this3.linkService.eventBus) === null || _this3$linkService$ev === void 0 ? void 0 : _this3$linkService$ev.dispatch(\"dispatcheventinsandbox\", {\r\n            source: _this3,\r\n            detail: {\r\n              id: data.id,\r\n              name: name\r\n            }\r\n          });\r\n          return false;\r\n        };\r\n      };\r\n\r\n      for (var _i = 0, _Object$keys = Object.keys(data.actions); _i < _Object$keys.length; _i++) {\r\n        var _ret = _loop();\r\n\r\n        if (_ret === \"continue\") continue;\r\n      }\r\n\r\n      link.className = \"internalLink\";\r\n    }\r\n  }]);\r\n\r\n  return LinkAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar TextAnnotationElement = /*#__PURE__*/function (_AnnotationElement2) {\r\n  _inherits(TextAnnotationElement, _AnnotationElement2);\r\n\r\n  var _super2 = _createSuper(TextAnnotationElement);\r\n\r\n  function TextAnnotationElement(parameters) {\r\n    _classCallCheck(this, TextAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\r\n    return _super2.call(this, parameters, {\r\n      isRenderable: isRenderable\r\n    });\r\n  }\r\n\r\n  _createClass(TextAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      this.container.className = \"textAnnotation\";\r\n      var image = document.createElement(\"img\");\r\n      image.style.height = this.container.style.height;\r\n      image.style.width = this.container.style.width;\r\n      image.src = this.imageResourcesPath + \"annotation-\" + this.data.name.toLowerCase() + \".svg\";\r\n      image.alt = \"[{{type}} Annotation]\";\r\n      image.dataset.l10nId = \"text_annotation_type\";\r\n      image.dataset.l10nArgs = JSON.stringify({\r\n        type: this.data.name\r\n      });\r\n\r\n      if (!this.data.hasPopup) {\r\n        this._createPopup(image, this.data);\r\n      }\r\n\r\n      this.container.appendChild(image);\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return TextAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar WidgetAnnotationElement = /*#__PURE__*/function (_AnnotationElement3) {\r\n  _inherits(WidgetAnnotationElement, _AnnotationElement3);\r\n\r\n  var _super3 = _createSuper(WidgetAnnotationElement);\r\n\r\n  function WidgetAnnotationElement() {\r\n    _classCallCheck(this, WidgetAnnotationElement);\r\n\r\n    return _super3.apply(this, arguments);\r\n  }\r\n\r\n  _createClass(WidgetAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      if (this.data.alternativeText) {\r\n        this.container.title = this.data.alternativeText;\r\n      }\r\n\r\n      return this.container;\r\n    }\r\n  }, {\r\n    key: \"_getKeyModifier\",\r\n    value: function _getKeyModifier(event) {\r\n      return navigator.platform.includes(\"Win\") && event.ctrlKey || navigator.platform.includes(\"Mac\") && event.metaKey;\r\n    }\r\n  }, {\r\n    key: \"_setEventListener\",\r\n    value: function _setEventListener(element, baseName, eventName, valueGetter) {\r\n      var _this4 = this;\r\n\r\n      if (baseName.includes(\"mouse\")) {\r\n        element.addEventListener(baseName, function (event) {\r\n          var _this4$linkService$ev;\r\n\r\n          (_this4$linkService$ev = _this4.linkService.eventBus) === null || _this4$linkService$ev === void 0 ? void 0 : _this4$linkService$ev.dispatch(\"dispatcheventinsandbox\", {\r\n            source: _this4,\r\n            detail: {\r\n              id: _this4.data.id,\r\n              name: eventName,\r\n              value: valueGetter(event),\r\n              shift: event.shiftKey,\r\n              modifier: _this4._getKeyModifier(event)\r\n            }\r\n          });\r\n        });\r\n      } else {\r\n        element.addEventListener(baseName, function (event) {\r\n          var _this4$linkService$ev2;\r\n\r\n          (_this4$linkService$ev2 = _this4.linkService.eventBus) === null || _this4$linkService$ev2 === void 0 ? void 0 : _this4$linkService$ev2.dispatch(\"dispatcheventinsandbox\", {\r\n            source: _this4,\r\n            detail: {\r\n              id: _this4.data.id,\r\n              name: eventName,\r\n              value: event.target.checked\r\n            }\r\n          });\r\n        });\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_setEventListeners\",\r\n    value: function _setEventListeners(element, names, getter) {\r\n      var _iterator2 = _createForOfIteratorHelper(names),\r\n          _step2;\r\n\r\n      try {\r\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n          var _this$data$actions;\r\n\r\n          var _step2$value = _slicedToArray(_step2.value, 2),\r\n              baseName = _step2$value[0],\r\n              eventName = _step2$value[1];\r\n\r\n          if (eventName === \"Action\" || (_this$data$actions = this.data.actions) !== null && _this$data$actions !== void 0 && _this$data$actions[eventName]) {\r\n            this._setEventListener(element, baseName, eventName, getter);\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator2.e(err);\r\n      } finally {\r\n        _iterator2.f();\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return WidgetAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar TextWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem) {\r\n  _inherits(TextWidgetAnnotationElement, _WidgetAnnotationElem);\r\n\r\n  var _super4 = _createSuper(TextWidgetAnnotationElement);\r\n\r\n  function TextWidgetAnnotationElement(parameters) {\r\n    _classCallCheck(this, TextWidgetAnnotationElement);\r\n\r\n    var isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue;\r\n    return _super4.call(this, parameters, {\r\n      isRenderable: isRenderable\r\n    });\r\n  }\r\n\r\n  _createClass(TextWidgetAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      var _this5 = this;\r\n\r\n      var storage = this.annotationStorage;\r\n      var id = this.data.id;\r\n      this.container.className = \"textWidgetAnnotation\";\r\n      var element = null;\r\n\r\n      if (this.renderInteractiveForms) {\r\n        var textContent = storage.getOrCreateValue(id, {\r\n          value: this.data.fieldValue\r\n        }).value;\r\n        var elementData = {\r\n          userValue: null,\r\n          formattedValue: null,\r\n          beforeInputSelectionRange: null,\r\n          beforeInputValue: null\r\n        };\r\n\r\n        if (this.data.multiLine) {\r\n          element = document.createElement(\"textarea\");\r\n          element.textContent = textContent;\r\n        } else {\r\n          element = document.createElement(\"input\");\r\n          element.type = \"text\";\r\n          element.setAttribute(\"value\", textContent);\r\n        }\r\n\r\n        elementData.userValue = textContent;\r\n        element.setAttribute(\"id\", id);\r\n        element.addEventListener(\"input\", function (event) {\r\n          storage.setValue(id, {\r\n            value: event.target.value\r\n          });\r\n        });\r\n\r\n        var blurListener = function blurListener(event) {\r\n          if (elementData.formattedValue) {\r\n            event.target.value = elementData.formattedValue;\r\n          }\r\n\r\n          event.target.setSelectionRange(0, 0);\r\n          elementData.beforeInputSelectionRange = null;\r\n        };\r\n\r\n        if (this.enableScripting && this.hasJSActions) {\r\n          var _this$data$actions2;\r\n\r\n          element.addEventListener(\"focus\", function (event) {\r\n            if (elementData.userValue) {\r\n              event.target.value = elementData.userValue;\r\n            }\r\n          });\r\n          element.addEventListener(\"updatefromsandbox\", function (event) {\r\n            var detail = event.detail;\r\n            var actions = {\r\n              value: function value() {\r\n                elementData.userValue = detail.value || \"\";\r\n                storage.setValue(id, {\r\n                  value: elementData.userValue.toString()\r\n                });\r\n\r\n                if (!elementData.formattedValue) {\r\n                  event.target.value = elementData.userValue;\r\n                }\r\n              },\r\n              valueAsString: function valueAsString() {\r\n                elementData.formattedValue = detail.valueAsString || \"\";\r\n\r\n                if (event.target !== document.activeElement) {\r\n                  event.target.value = elementData.formattedValue;\r\n                }\r\n\r\n                storage.setValue(id, {\r\n                  formattedValue: elementData.formattedValue\r\n                });\r\n              },\r\n              focus: function focus() {\r\n                setTimeout(function () {\r\n                  return event.target.focus({\r\n                    preventScroll: false\r\n                  });\r\n                }, 0);\r\n              },\r\n              userName: function userName() {\r\n                event.target.title = detail.userName;\r\n              },\r\n              hidden: function hidden() {\r\n                event.target.style.visibility = detail.hidden ? \"hidden\" : \"visible\";\r\n                storage.setValue(id, {\r\n                  hidden: detail.hidden\r\n                });\r\n              },\r\n              editable: function editable() {\r\n                event.target.disabled = !detail.editable;\r\n              },\r\n              selRange: function selRange() {\r\n                var _detail$selRange = _slicedToArray(detail.selRange, 2),\r\n                    selStart = _detail$selRange[0],\r\n                    selEnd = _detail$selRange[1];\r\n\r\n                if (selStart >= 0 && selEnd < event.target.value.length) {\r\n                  event.target.setSelectionRange(selStart, selEnd);\r\n                }\r\n              },\r\n              strokeColor: function strokeColor() {\r\n                var color = detail.strokeColor;\r\n                event.target.style.color = _scripting_utils.ColorConverters[\"\".concat(color[0], \"_HTML\")](color.slice(1));\r\n              }\r\n            };\r\n            Object.keys(detail).filter(function (name) {\r\n              return name in actions;\r\n            }).forEach(function (name) {\r\n              return actions[name]();\r\n            });\r\n          });\r\n          element.addEventListener(\"keydown\", function (event) {\r\n            var _this5$linkService$ev;\r\n\r\n            elementData.beforeInputValue = event.target.value;\r\n            var commitKey = -1;\r\n\r\n            if (event.key === \"Escape\") {\r\n              commitKey = 0;\r\n            } else if (event.key === \"Enter\") {\r\n              commitKey = 2;\r\n            } else if (event.key === \"Tab\") {\r\n              commitKey = 3;\r\n            }\r\n\r\n            if (commitKey === -1) {\r\n              return;\r\n            }\r\n\r\n            elementData.userValue = event.target.value;\r\n            (_this5$linkService$ev = _this5.linkService.eventBus) === null || _this5$linkService$ev === void 0 ? void 0 : _this5$linkService$ev.dispatch(\"dispatcheventinsandbox\", {\r\n              source: _this5,\r\n              detail: {\r\n                id: id,\r\n                name: \"Keystroke\",\r\n                value: event.target.value,\r\n                willCommit: true,\r\n                commitKey: commitKey,\r\n                selStart: event.target.selectionStart,\r\n                selEnd: event.target.selectionEnd\r\n              }\r\n            });\r\n          });\r\n          var _blurListener = blurListener;\r\n          blurListener = null;\r\n          element.addEventListener(\"blur\", function (event) {\r\n            if (_this5._mouseState.isDown) {\r\n              var _this5$linkService$ev2;\r\n\r\n              elementData.userValue = event.target.value;\r\n              (_this5$linkService$ev2 = _this5.linkService.eventBus) === null || _this5$linkService$ev2 === void 0 ? void 0 : _this5$linkService$ev2.dispatch(\"dispatcheventinsandbox\", {\r\n                source: _this5,\r\n                detail: {\r\n                  id: id,\r\n                  name: \"Keystroke\",\r\n                  value: event.target.value,\r\n                  willCommit: true,\r\n                  commitKey: 1,\r\n                  selStart: event.target.selectionStart,\r\n                  selEnd: event.target.selectionEnd\r\n                }\r\n              });\r\n            }\r\n\r\n            _blurListener(event);\r\n          });\r\n          element.addEventListener(\"mousedown\", function (event) {\r\n            elementData.beforeInputValue = event.target.value;\r\n            elementData.beforeInputSelectionRange = null;\r\n          });\r\n          element.addEventListener(\"keyup\", function (event) {\r\n            if (event.target.selectionStart === event.target.selectionEnd) {\r\n              elementData.beforeInputSelectionRange = null;\r\n            }\r\n          });\r\n          element.addEventListener(\"select\", function (event) {\r\n            elementData.beforeInputSelectionRange = [event.target.selectionStart, event.target.selectionEnd];\r\n          });\r\n\r\n          if ((_this$data$actions2 = this.data.actions) !== null && _this$data$actions2 !== void 0 && _this$data$actions2.Keystroke) {\r\n            element.addEventListener(\"input\", function (event) {\r\n              var _this5$linkService$ev3;\r\n\r\n              var selStart = -1;\r\n              var selEnd = -1;\r\n\r\n              if (elementData.beforeInputSelectionRange) {\r\n                var _elementData$beforeIn = _slicedToArray(elementData.beforeInputSelectionRange, 2);\r\n\r\n                selStart = _elementData$beforeIn[0];\r\n                selEnd = _elementData$beforeIn[1];\r\n              }\r\n\r\n              (_this5$linkService$ev3 = _this5.linkService.eventBus) === null || _this5$linkService$ev3 === void 0 ? void 0 : _this5$linkService$ev3.dispatch(\"dispatcheventinsandbox\", {\r\n                source: _this5,\r\n                detail: {\r\n                  id: id,\r\n                  name: \"Keystroke\",\r\n                  value: elementData.beforeInputValue,\r\n                  change: event.data,\r\n                  willCommit: false,\r\n                  selStart: selStart,\r\n                  selEnd: selEnd\r\n                }\r\n              });\r\n            });\r\n          }\r\n\r\n          this._setEventListeners(element, [[\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], function (event) {\r\n            return event.target.value;\r\n          });\r\n        }\r\n\r\n        if (blurListener) {\r\n          element.addEventListener(\"blur\", blurListener);\r\n        }\r\n\r\n        element.disabled = this.data.readOnly;\r\n        element.name = this.data.fieldName;\r\n\r\n        if (this.data.maxLen !== null) {\r\n          element.maxLength = this.data.maxLen;\r\n        }\r\n\r\n        if (this.data.comb) {\r\n          var fieldWidth = this.data.rect[2] - this.data.rect[0];\r\n          var combWidth = fieldWidth / this.data.maxLen;\r\n          element.classList.add(\"comb\");\r\n          element.style.letterSpacing = \"calc(\".concat(combWidth, \"px - 1ch)\");\r\n        }\r\n      } else {\r\n        element = document.createElement(\"div\");\r\n        element.textContent = this.data.fieldValue;\r\n        element.style.verticalAlign = \"middle\";\r\n        element.style.display = \"table-cell\";\r\n      }\r\n\r\n      this._setTextStyle(element);\r\n\r\n      this.container.appendChild(element);\r\n      return this.container;\r\n    }\r\n  }, {\r\n    key: \"_setTextStyle\",\r\n    value: function _setTextStyle(element) {\r\n      var TEXT_ALIGNMENT = [\"left\", \"center\", \"right\"];\r\n      var _this$data$defaultApp = this.data.defaultAppearanceData,\r\n          fontSize = _this$data$defaultApp.fontSize,\r\n          fontColor = _this$data$defaultApp.fontColor;\r\n      var style = element.style;\r\n\r\n      if (fontSize) {\r\n        style.fontSize = \"\".concat(fontSize, \"px\");\r\n      }\r\n\r\n      style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]);\r\n\r\n      if (this.data.textAlignment !== null) {\r\n        style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return TextWidgetAnnotationElement;\r\n}(WidgetAnnotationElement);\r\n\r\nvar CheckboxWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem2) {\r\n  _inherits(CheckboxWidgetAnnotationElement, _WidgetAnnotationElem2);\r\n\r\n  var _super5 = _createSuper(CheckboxWidgetAnnotationElement);\r\n\r\n  function CheckboxWidgetAnnotationElement(parameters) {\r\n    _classCallCheck(this, CheckboxWidgetAnnotationElement);\r\n\r\n    return _super5.call(this, parameters, {\r\n      isRenderable: parameters.renderInteractiveForms\r\n    });\r\n  }\r\n\r\n  _createClass(CheckboxWidgetAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      var storage = this.annotationStorage;\r\n      var data = this.data;\r\n      var id = data.id;\r\n      var value = storage.getOrCreateValue(id, {\r\n        value: data.fieldValue && data.fieldValue !== \"Off\"\r\n      }).value;\r\n      this.container.className = \"buttonWidgetAnnotation checkBox\";\r\n      var element = document.createElement(\"input\");\r\n      element.disabled = data.readOnly;\r\n      element.type = \"checkbox\";\r\n      element.name = this.data.fieldName;\r\n\r\n      if (value) {\r\n        element.setAttribute(\"checked\", true);\r\n      }\r\n\r\n      element.setAttribute(\"id\", id);\r\n      element.addEventListener(\"change\", function (event) {\r\n        var name = event.target.name;\r\n\r\n        var _iterator3 = _createForOfIteratorHelper(document.getElementsByName(name)),\r\n            _step3;\r\n\r\n        try {\r\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n            var checkbox = _step3.value;\r\n\r\n            if (checkbox !== event.target) {\r\n              checkbox.checked = false;\r\n              storage.setValue(checkbox.parentNode.getAttribute(\"data-annotation-id\"), {\r\n                value: false\r\n              });\r\n            }\r\n          }\r\n        } catch (err) {\r\n          _iterator3.e(err);\r\n        } finally {\r\n          _iterator3.f();\r\n        }\r\n\r\n        storage.setValue(id, {\r\n          value: event.target.checked\r\n        });\r\n      });\r\n\r\n      if (this.enableScripting && this.hasJSActions) {\r\n        element.addEventListener(\"updatefromsandbox\", function (event) {\r\n          var detail = event.detail;\r\n          var actions = {\r\n            value: function value() {\r\n              event.target.checked = detail.value !== \"Off\";\r\n              storage.setValue(id, {\r\n                value: event.target.checked\r\n              });\r\n            },\r\n            focus: function focus() {\r\n              setTimeout(function () {\r\n                return event.target.focus({\r\n                  preventScroll: false\r\n                });\r\n              }, 0);\r\n            },\r\n            hidden: function hidden() {\r\n              event.target.style.visibility = detail.hidden ? \"hidden\" : \"visible\";\r\n              storage.setValue(id, {\r\n                hidden: detail.hidden\r\n              });\r\n            },\r\n            editable: function editable() {\r\n              event.target.disabled = !detail.editable;\r\n            }\r\n          };\r\n          Object.keys(detail).filter(function (name) {\r\n            return name in actions;\r\n          }).forEach(function (name) {\r\n            return actions[name]();\r\n          });\r\n        });\r\n\r\n        this._setEventListeners(element, [[\"change\", \"Validate\"], [\"change\", \"Action\"], [\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], function (event) {\r\n          return event.target.checked;\r\n        });\r\n      }\r\n\r\n      this.container.appendChild(element);\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return CheckboxWidgetAnnotationElement;\r\n}(WidgetAnnotationElement);\r\n\r\nvar RadioButtonWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem3) {\r\n  _inherits(RadioButtonWidgetAnnotationElement, _WidgetAnnotationElem3);\r\n\r\n  var _super6 = _createSuper(RadioButtonWidgetAnnotationElement);\r\n\r\n  function RadioButtonWidgetAnnotationElement(parameters) {\r\n    _classCallCheck(this, RadioButtonWidgetAnnotationElement);\r\n\r\n    return _super6.call(this, parameters, {\r\n      isRenderable: parameters.renderInteractiveForms\r\n    });\r\n  }\r\n\r\n  _createClass(RadioButtonWidgetAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      this.container.className = \"buttonWidgetAnnotation radioButton\";\r\n      var storage = this.annotationStorage;\r\n      var data = this.data;\r\n      var id = data.id;\r\n      var value = storage.getOrCreateValue(id, {\r\n        value: data.fieldValue === data.buttonValue\r\n      }).value;\r\n      var element = document.createElement(\"input\");\r\n      element.disabled = data.readOnly;\r\n      element.type = \"radio\";\r\n      element.name = data.fieldName;\r\n\r\n      if (value) {\r\n        element.setAttribute(\"checked\", true);\r\n      }\r\n\r\n      element.setAttribute(\"pdfButtonValue\", data.buttonValue);\r\n      element.setAttribute(\"id\", id);\r\n      element.addEventListener(\"change\", function (event) {\r\n        var target = event.target;\r\n\r\n        var _iterator4 = _createForOfIteratorHelper(document.getElementsByName(target.name)),\r\n            _step4;\r\n\r\n        try {\r\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\r\n            var radio = _step4.value;\r\n\r\n            if (radio !== target) {\r\n              storage.setValue(radio.getAttribute(\"id\"), {\r\n                value: false\r\n              });\r\n            }\r\n          }\r\n        } catch (err) {\r\n          _iterator4.e(err);\r\n        } finally {\r\n          _iterator4.f();\r\n        }\r\n\r\n        storage.setValue(id, {\r\n          value: target.checked\r\n        });\r\n      });\r\n\r\n      if (this.enableScripting && this.hasJSActions) {\r\n        element.addEventListener(\"updatefromsandbox\", function (event) {\r\n          var detail = event.detail;\r\n          var actions = {\r\n            value: function value() {\r\n              var fieldValue = detail.value;\r\n\r\n              var _iterator5 = _createForOfIteratorHelper(document.getElementsByName(event.target.name)),\r\n                  _step5;\r\n\r\n              try {\r\n                for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\r\n                  var radio = _step5.value;\r\n                  var radioId = radio.getAttribute(\"id\");\r\n\r\n                  if (fieldValue === radio.getAttribute(\"pdfButtonValue\")) {\r\n                    radio.setAttribute(\"checked\", true);\r\n                    storage.setValue(radioId, {\r\n                      value: true\r\n                    });\r\n                  } else {\r\n                    storage.setValue(radioId, {\r\n                      value: false\r\n                    });\r\n                  }\r\n                }\r\n              } catch (err) {\r\n                _iterator5.e(err);\r\n              } finally {\r\n                _iterator5.f();\r\n              }\r\n            },\r\n            focus: function focus() {\r\n              setTimeout(function () {\r\n                return event.target.focus({\r\n                  preventScroll: false\r\n                });\r\n              }, 0);\r\n            },\r\n            hidden: function hidden() {\r\n              event.target.style.visibility = detail.hidden ? \"hidden\" : \"visible\";\r\n              storage.setValue(id, {\r\n                hidden: detail.hidden\r\n              });\r\n            },\r\n            editable: function editable() {\r\n              event.target.disabled = !detail.editable;\r\n            }\r\n          };\r\n          Object.keys(detail).filter(function (name) {\r\n            return name in actions;\r\n          }).forEach(function (name) {\r\n            return actions[name]();\r\n          });\r\n        });\r\n\r\n        this._setEventListeners(element, [[\"change\", \"Validate\"], [\"change\", \"Action\"], [\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"]], function (event) {\r\n          return event.target.checked;\r\n        });\r\n      }\r\n\r\n      this.container.appendChild(element);\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return RadioButtonWidgetAnnotationElement;\r\n}(WidgetAnnotationElement);\r\n\r\nvar PushButtonWidgetAnnotationElement = /*#__PURE__*/function (_LinkAnnotationElemen) {\r\n  _inherits(PushButtonWidgetAnnotationElement, _LinkAnnotationElemen);\r\n\r\n  var _super7 = _createSuper(PushButtonWidgetAnnotationElement);\r\n\r\n  function PushButtonWidgetAnnotationElement() {\r\n    _classCallCheck(this, PushButtonWidgetAnnotationElement);\r\n\r\n    return _super7.apply(this, arguments);\r\n  }\r\n\r\n  _createClass(PushButtonWidgetAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      var container = _get(_getPrototypeOf(PushButtonWidgetAnnotationElement.prototype), \"render\", this).call(this);\r\n\r\n      container.className = \"buttonWidgetAnnotation pushButton\";\r\n\r\n      if (this.data.alternativeText) {\r\n        container.title = this.data.alternativeText;\r\n      }\r\n\r\n      return container;\r\n    }\r\n  }]);\r\n\r\n  return PushButtonWidgetAnnotationElement;\r\n}(LinkAnnotationElement);\r\n\r\nvar ChoiceWidgetAnnotationElement = /*#__PURE__*/function (_WidgetAnnotationElem4) {\r\n  _inherits(ChoiceWidgetAnnotationElement, _WidgetAnnotationElem4);\r\n\r\n  var _super8 = _createSuper(ChoiceWidgetAnnotationElement);\r\n\r\n  function ChoiceWidgetAnnotationElement(parameters) {\r\n    _classCallCheck(this, ChoiceWidgetAnnotationElement);\r\n\r\n    return _super8.call(this, parameters, {\r\n      isRenderable: parameters.renderInteractiveForms\r\n    });\r\n  }\r\n\r\n  _createClass(ChoiceWidgetAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      var _this6 = this;\r\n\r\n      this.container.className = \"choiceWidgetAnnotation\";\r\n      var storage = this.annotationStorage;\r\n      var id = this.data.id;\r\n      storage.getOrCreateValue(id, {\r\n        value: this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : undefined\r\n      });\r\n      var selectElement = document.createElement(\"select\");\r\n      selectElement.disabled = this.data.readOnly;\r\n      selectElement.name = this.data.fieldName;\r\n      selectElement.setAttribute(\"id\", id);\r\n\r\n      if (!this.data.combo) {\r\n        selectElement.size = this.data.options.length;\r\n\r\n        if (this.data.multiSelect) {\r\n          selectElement.multiple = true;\r\n        }\r\n      }\r\n\r\n      var _iterator6 = _createForOfIteratorHelper(this.data.options),\r\n          _step6;\r\n\r\n      try {\r\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\r\n          var option = _step6.value;\r\n          var optionElement = document.createElement(\"option\");\r\n          optionElement.textContent = option.displayValue;\r\n          optionElement.value = option.exportValue;\r\n\r\n          if (this.data.fieldValue.includes(option.exportValue)) {\r\n            optionElement.setAttribute(\"selected\", true);\r\n          }\r\n\r\n          selectElement.appendChild(optionElement);\r\n        }\r\n      } catch (err) {\r\n        _iterator6.e(err);\r\n      } finally {\r\n        _iterator6.f();\r\n      }\r\n\r\n      var getValue = function getValue(event, isExport) {\r\n        var name = isExport ? \"value\" : \"textContent\";\r\n        var options = event.target.options;\r\n\r\n        if (!event.target.multiple) {\r\n          return options.selectedIndex === -1 ? null : options[options.selectedIndex][name];\r\n        }\r\n\r\n        return Array.prototype.filter.call(options, function (option) {\r\n          return option.selected;\r\n        }).map(function (option) {\r\n          return option[name];\r\n        });\r\n      };\r\n\r\n      var getItems = function getItems(event) {\r\n        var options = event.target.options;\r\n        return Array.prototype.map.call(options, function (option) {\r\n          return {\r\n            displayValue: option.textContent,\r\n            exportValue: option.value\r\n          };\r\n        });\r\n      };\r\n\r\n      if (this.enableScripting && this.hasJSActions) {\r\n        selectElement.addEventListener(\"updatefromsandbox\", function (event) {\r\n          var detail = event.detail;\r\n          var actions = {\r\n            value: function value() {\r\n              var options = selectElement.options;\r\n              var value = detail.value;\r\n              var values = new Set(Array.isArray(value) ? value : [value]);\r\n              Array.prototype.forEach.call(options, function (option) {\r\n                option.selected = values.has(option.value);\r\n              });\r\n              storage.setValue(id, {\r\n                value: getValue(event, true)\r\n              });\r\n            },\r\n            multipleSelection: function multipleSelection() {\r\n              selectElement.multiple = true;\r\n            },\r\n            remove: function remove() {\r\n              var options = selectElement.options;\r\n              var index = detail.remove;\r\n              options[index].selected = false;\r\n              selectElement.remove(index);\r\n\r\n              if (options.length > 0) {\r\n                var i = Array.prototype.findIndex.call(options, function (option) {\r\n                  return option.selected;\r\n                });\r\n\r\n                if (i === -1) {\r\n                  options[0].selected = true;\r\n                }\r\n              }\r\n\r\n              storage.setValue(id, {\r\n                value: getValue(event, true),\r\n                items: getItems(event)\r\n              });\r\n            },\r\n            clear: function clear() {\r\n              while (selectElement.length !== 0) {\r\n                selectElement.remove(0);\r\n              }\r\n\r\n              storage.setValue(id, {\r\n                value: null,\r\n                items: []\r\n              });\r\n            },\r\n            insert: function insert() {\r\n              var _detail$insert = detail.insert,\r\n                  index = _detail$insert.index,\r\n                  displayValue = _detail$insert.displayValue,\r\n                  exportValue = _detail$insert.exportValue;\r\n              var optionElement = document.createElement(\"option\");\r\n              optionElement.textContent = displayValue;\r\n              optionElement.value = exportValue;\r\n              selectElement.insertBefore(optionElement, selectElement.children[index]);\r\n              storage.setValue(id, {\r\n                value: getValue(event, true),\r\n                items: getItems(event)\r\n              });\r\n            },\r\n            items: function items() {\r\n              var items = detail.items;\r\n\r\n              while (selectElement.length !== 0) {\r\n                selectElement.remove(0);\r\n              }\r\n\r\n              var _iterator7 = _createForOfIteratorHelper(items),\r\n                  _step7;\r\n\r\n              try {\r\n                for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\r\n                  var item = _step7.value;\r\n                  var displayValue = item.displayValue,\r\n                      exportValue = item.exportValue;\r\n                  var optionElement = document.createElement(\"option\");\r\n                  optionElement.textContent = displayValue;\r\n                  optionElement.value = exportValue;\r\n                  selectElement.appendChild(optionElement);\r\n                }\r\n              } catch (err) {\r\n                _iterator7.e(err);\r\n              } finally {\r\n                _iterator7.f();\r\n              }\r\n\r\n              if (selectElement.options.length > 0) {\r\n                selectElement.options[0].selected = true;\r\n              }\r\n\r\n              storage.setValue(id, {\r\n                value: getValue(event, true),\r\n                items: getItems(event)\r\n              });\r\n            },\r\n            indices: function indices() {\r\n              var indices = new Set(detail.indices);\r\n              var options = event.target.options;\r\n              Array.prototype.forEach.call(options, function (option, i) {\r\n                option.selected = indices.has(i);\r\n              });\r\n              storage.setValue(id, {\r\n                value: getValue(event, true)\r\n              });\r\n            },\r\n            focus: function focus() {\r\n              setTimeout(function () {\r\n                return event.target.focus({\r\n                  preventScroll: false\r\n                });\r\n              }, 0);\r\n            },\r\n            hidden: function hidden() {\r\n              event.target.style.visibility = detail.hidden ? \"hidden\" : \"visible\";\r\n              storage.setValue(id, {\r\n                hidden: detail.hidden\r\n              });\r\n            },\r\n            editable: function editable() {\r\n              event.target.disabled = !detail.editable;\r\n            }\r\n          };\r\n          Object.keys(detail).filter(function (name) {\r\n            return name in actions;\r\n          }).forEach(function (name) {\r\n            return actions[name]();\r\n          });\r\n        });\r\n        selectElement.addEventListener(\"input\", function (event) {\r\n          var _this6$linkService$ev;\r\n\r\n          var exportValue = getValue(event, true);\r\n          var value = getValue(event, false);\r\n          storage.setValue(id, {\r\n            value: exportValue\r\n          });\r\n          (_this6$linkService$ev = _this6.linkService.eventBus) === null || _this6$linkService$ev === void 0 ? void 0 : _this6$linkService$ev.dispatch(\"dispatcheventinsandbox\", {\r\n            source: _this6,\r\n            detail: {\r\n              id: id,\r\n              name: \"Keystroke\",\r\n              value: value,\r\n              changeEx: exportValue,\r\n              willCommit: true,\r\n              commitKey: 1,\r\n              keyDown: false\r\n            }\r\n          });\r\n        });\r\n\r\n        this._setEventListeners(selectElement, [[\"focus\", \"Focus\"], [\"blur\", \"Blur\"], [\"mousedown\", \"Mouse Down\"], [\"mouseenter\", \"Mouse Enter\"], [\"mouseleave\", \"Mouse Exit\"], [\"mouseup\", \"Mouse Up\"], [\"input\", \"Action\"]], function (event) {\r\n          return event.target.checked;\r\n        });\r\n      } else {\r\n        selectElement.addEventListener(\"input\", function (event) {\r\n          storage.setValue(id, {\r\n            value: getValue(event)\r\n          });\r\n        });\r\n      }\r\n\r\n      this.container.appendChild(selectElement);\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return ChoiceWidgetAnnotationElement;\r\n}(WidgetAnnotationElement);\r\n\r\nvar PopupAnnotationElement = /*#__PURE__*/function (_AnnotationElement4) {\r\n  _inherits(PopupAnnotationElement, _AnnotationElement4);\r\n\r\n  var _super9 = _createSuper(PopupAnnotationElement);\r\n\r\n  function PopupAnnotationElement(parameters) {\r\n    _classCallCheck(this, PopupAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.title || parameters.data.contents);\r\n    return _super9.call(this, parameters, {\r\n      isRenderable: isRenderable\r\n    });\r\n  }\r\n\r\n  _createClass(PopupAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      var IGNORE_TYPES = [\"Line\", \"Square\", \"Circle\", \"PolyLine\", \"Polygon\", \"Ink\"];\r\n      this.container.className = \"popupAnnotation\";\r\n\r\n      if (IGNORE_TYPES.includes(this.data.parentType)) {\r\n        return this.container;\r\n      }\r\n\r\n      var selector = \"[data-annotation-id=\\\"\".concat(this.data.parentId, \"\\\"]\");\r\n      var parentElements = this.layer.querySelectorAll(selector);\r\n\r\n      if (parentElements.length === 0) {\r\n        return this.container;\r\n      }\r\n\r\n      var popup = new PopupElement({\r\n        container: this.container,\r\n        trigger: Array.from(parentElements),\r\n        color: this.data.color,\r\n        title: this.data.title,\r\n        modificationDate: this.data.modificationDate,\r\n        contents: this.data.contents\r\n      });\r\n      var page = this.page;\r\n\r\n      var rect = _util.Util.normalizeRect([this.data.parentRect[0], page.view[3] - this.data.parentRect[1] + page.view[1], this.data.parentRect[2], page.view[3] - this.data.parentRect[3] + page.view[1]]);\r\n\r\n      var popupLeft = rect[0] + this.data.parentRect[2] - this.data.parentRect[0];\r\n      var popupTop = rect[1];\r\n      this.container.style.transformOrigin = \"\".concat(-popupLeft, \"px \").concat(-popupTop, \"px\");\r\n      this.container.style.left = \"\".concat(popupLeft, \"px\");\r\n      this.container.style.top = \"\".concat(popupTop, \"px\");\r\n      this.container.appendChild(popup.render());\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return PopupAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar PopupElement = /*#__PURE__*/function () {\r\n  function PopupElement(parameters) {\r\n    _classCallCheck(this, PopupElement);\r\n\r\n    this.container = parameters.container;\r\n    this.trigger = parameters.trigger;\r\n    this.color = parameters.color;\r\n    this.title = parameters.title;\r\n    this.modificationDate = parameters.modificationDate;\r\n    this.contents = parameters.contents;\r\n    this.hideWrapper = parameters.hideWrapper || false;\r\n    this.pinned = false;\r\n  }\r\n\r\n  _createClass(PopupElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      var _this7 = this;\r\n\r\n      var BACKGROUND_ENLIGHT = 0.7;\r\n      var wrapper = document.createElement(\"div\");\r\n      wrapper.className = \"popupWrapper\";\r\n      this.hideElement = this.hideWrapper ? wrapper : this.container;\r\n      this.hideElement.setAttribute(\"hidden\", true);\r\n      var popup = document.createElement(\"div\");\r\n      popup.className = \"popup\";\r\n      var color = this.color;\r\n\r\n      if (color) {\r\n        var r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0];\r\n        var g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1];\r\n        var b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2];\r\n        popup.style.backgroundColor = _util.Util.makeHexColor(r | 0, g | 0, b | 0);\r\n      }\r\n\r\n      var title = document.createElement(\"h1\");\r\n      title.textContent = this.title;\r\n      popup.appendChild(title);\r\n\r\n      var dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate);\r\n\r\n      if (dateObject) {\r\n        var modificationDate = document.createElement(\"span\");\r\n        modificationDate.textContent = \"{{date}}, {{time}}\";\r\n        modificationDate.dataset.l10nId = \"annotation_date_string\";\r\n        modificationDate.dataset.l10nArgs = JSON.stringify({\r\n          date: dateObject.toLocaleDateString(),\r\n          time: dateObject.toLocaleTimeString()\r\n        });\r\n        popup.appendChild(modificationDate);\r\n      }\r\n\r\n      var contents = this._formatContents(this.contents);\r\n\r\n      popup.appendChild(contents);\r\n\r\n      if (!Array.isArray(this.trigger)) {\r\n        this.trigger = [this.trigger];\r\n      }\r\n\r\n      this.trigger.forEach(function (element) {\r\n        element.addEventListener(\"click\", _this7._toggle.bind(_this7));\r\n        element.addEventListener(\"mouseover\", _this7._show.bind(_this7, false));\r\n        element.addEventListener(\"mouseout\", _this7._hide.bind(_this7, false));\r\n      });\r\n      popup.addEventListener(\"click\", this._hide.bind(this, true));\r\n      wrapper.appendChild(popup);\r\n      return wrapper;\r\n    }\r\n  }, {\r\n    key: \"_formatContents\",\r\n    value: function _formatContents(contents) {\r\n      var p = document.createElement(\"p\");\r\n      var lines = contents.split(/(?:\\r\\n?|\\n)/);\r\n\r\n      for (var i = 0, ii = lines.length; i < ii; ++i) {\r\n        var line = lines[i];\r\n        p.appendChild(document.createTextNode(line));\r\n\r\n        if (i < ii - 1) {\r\n          p.appendChild(document.createElement(\"br\"));\r\n        }\r\n      }\r\n\r\n      return p;\r\n    }\r\n  }, {\r\n    key: \"_toggle\",\r\n    value: function _toggle() {\r\n      if (this.pinned) {\r\n        this._hide(true);\r\n      } else {\r\n        this._show(true);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_show\",\r\n    value: function _show() {\r\n      var pin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n\r\n      if (pin) {\r\n        this.pinned = true;\r\n      }\r\n\r\n      if (this.hideElement.hasAttribute(\"hidden\")) {\r\n        this.hideElement.removeAttribute(\"hidden\");\r\n        this.container.style.zIndex += 1;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_hide\",\r\n    value: function _hide() {\r\n      var unpin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\r\n\r\n      if (unpin) {\r\n        this.pinned = false;\r\n      }\r\n\r\n      if (!this.hideElement.hasAttribute(\"hidden\") && !this.pinned) {\r\n        this.hideElement.setAttribute(\"hidden\", true);\r\n        this.container.style.zIndex -= 1;\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return PopupElement;\r\n}();\r\n\r\nvar FreeTextAnnotationElement = /*#__PURE__*/function (_AnnotationElement5) {\r\n  _inherits(FreeTextAnnotationElement, _AnnotationElement5);\r\n\r\n  var _super10 = _createSuper(FreeTextAnnotationElement);\r\n\r\n  function FreeTextAnnotationElement(parameters) {\r\n    _classCallCheck(this, FreeTextAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\r\n    return _super10.call(this, parameters, {\r\n      isRenderable: isRenderable,\r\n      ignoreBorder: true\r\n    });\r\n  }\r\n\r\n  _createClass(FreeTextAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      this.container.className = \"freeTextAnnotation\";\r\n\r\n      if (!this.data.hasPopup) {\r\n        this._createPopup(null, this.data);\r\n      }\r\n\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return FreeTextAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar LineAnnotationElement = /*#__PURE__*/function (_AnnotationElement6) {\r\n  _inherits(LineAnnotationElement, _AnnotationElement6);\r\n\r\n  var _super11 = _createSuper(LineAnnotationElement);\r\n\r\n  function LineAnnotationElement(parameters) {\r\n    _classCallCheck(this, LineAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\r\n    return _super11.call(this, parameters, {\r\n      isRenderable: isRenderable,\r\n      ignoreBorder: true\r\n    });\r\n  }\r\n\r\n  _createClass(LineAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      this.container.className = \"lineAnnotation\";\r\n      var data = this.data;\r\n      var width = data.rect[2] - data.rect[0];\r\n      var height = data.rect[3] - data.rect[1];\r\n      var svg = this.svgFactory.create(width, height);\r\n      var line = this.svgFactory.createElement(\"svg:line\");\r\n      line.setAttribute(\"x1\", data.rect[2] - data.lineCoordinates[0]);\r\n      line.setAttribute(\"y1\", data.rect[3] - data.lineCoordinates[1]);\r\n      line.setAttribute(\"x2\", data.rect[2] - data.lineCoordinates[2]);\r\n      line.setAttribute(\"y2\", data.rect[3] - data.lineCoordinates[3]);\r\n      line.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\r\n      line.setAttribute(\"stroke\", \"transparent\");\r\n      svg.appendChild(line);\r\n      this.container.append(svg);\r\n\r\n      this._createPopup(line, data);\r\n\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return LineAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar SquareAnnotationElement = /*#__PURE__*/function (_AnnotationElement7) {\r\n  _inherits(SquareAnnotationElement, _AnnotationElement7);\r\n\r\n  var _super12 = _createSuper(SquareAnnotationElement);\r\n\r\n  function SquareAnnotationElement(parameters) {\r\n    _classCallCheck(this, SquareAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\r\n    return _super12.call(this, parameters, {\r\n      isRenderable: isRenderable,\r\n      ignoreBorder: true\r\n    });\r\n  }\r\n\r\n  _createClass(SquareAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      this.container.className = \"squareAnnotation\";\r\n      var data = this.data;\r\n      var width = data.rect[2] - data.rect[0];\r\n      var height = data.rect[3] - data.rect[1];\r\n      var svg = this.svgFactory.create(width, height);\r\n      var borderWidth = data.borderStyle.width;\r\n      var square = this.svgFactory.createElement(\"svg:rect\");\r\n      square.setAttribute(\"x\", borderWidth / 2);\r\n      square.setAttribute(\"y\", borderWidth / 2);\r\n      square.setAttribute(\"width\", width - borderWidth);\r\n      square.setAttribute(\"height\", height - borderWidth);\r\n      square.setAttribute(\"stroke-width\", borderWidth || 1);\r\n      square.setAttribute(\"stroke\", \"transparent\");\r\n      square.setAttribute(\"fill\", \"none\");\r\n      svg.appendChild(square);\r\n      this.container.append(svg);\r\n\r\n      this._createPopup(square, data);\r\n\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return SquareAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar CircleAnnotationElement = /*#__PURE__*/function (_AnnotationElement8) {\r\n  _inherits(CircleAnnotationElement, _AnnotationElement8);\r\n\r\n  var _super13 = _createSuper(CircleAnnotationElement);\r\n\r\n  function CircleAnnotationElement(parameters) {\r\n    _classCallCheck(this, CircleAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\r\n    return _super13.call(this, parameters, {\r\n      isRenderable: isRenderable,\r\n      ignoreBorder: true\r\n    });\r\n  }\r\n\r\n  _createClass(CircleAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      this.container.className = \"circleAnnotation\";\r\n      var data = this.data;\r\n      var width = data.rect[2] - data.rect[0];\r\n      var height = data.rect[3] - data.rect[1];\r\n      var svg = this.svgFactory.create(width, height);\r\n      var borderWidth = data.borderStyle.width;\r\n      var circle = this.svgFactory.createElement(\"svg:ellipse\");\r\n      circle.setAttribute(\"cx\", width / 2);\r\n      circle.setAttribute(\"cy\", height / 2);\r\n      circle.setAttribute(\"rx\", width / 2 - borderWidth / 2);\r\n      circle.setAttribute(\"ry\", height / 2 - borderWidth / 2);\r\n      circle.setAttribute(\"stroke-width\", borderWidth || 1);\r\n      circle.setAttribute(\"stroke\", \"transparent\");\r\n      circle.setAttribute(\"fill\", \"none\");\r\n      svg.appendChild(circle);\r\n      this.container.append(svg);\r\n\r\n      this._createPopup(circle, data);\r\n\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return CircleAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar PolylineAnnotationElement = /*#__PURE__*/function (_AnnotationElement9) {\r\n  _inherits(PolylineAnnotationElement, _AnnotationElement9);\r\n\r\n  var _super14 = _createSuper(PolylineAnnotationElement);\r\n\r\n  function PolylineAnnotationElement(parameters) {\r\n    var _this8;\r\n\r\n    _classCallCheck(this, PolylineAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\r\n    _this8 = _super14.call(this, parameters, {\r\n      isRenderable: isRenderable,\r\n      ignoreBorder: true\r\n    });\r\n    _this8.containerClassName = \"polylineAnnotation\";\r\n    _this8.svgElementName = \"svg:polyline\";\r\n    return _this8;\r\n  }\r\n\r\n  _createClass(PolylineAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      this.container.className = this.containerClassName;\r\n      var data = this.data;\r\n      var width = data.rect[2] - data.rect[0];\r\n      var height = data.rect[3] - data.rect[1];\r\n      var svg = this.svgFactory.create(width, height);\r\n      var points = [];\r\n\r\n      var _iterator8 = _createForOfIteratorHelper(data.vertices),\r\n          _step8;\r\n\r\n      try {\r\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\r\n          var coordinate = _step8.value;\r\n          var x = coordinate.x - data.rect[0];\r\n          var y = data.rect[3] - coordinate.y;\r\n          points.push(x + \",\" + y);\r\n        }\r\n      } catch (err) {\r\n        _iterator8.e(err);\r\n      } finally {\r\n        _iterator8.f();\r\n      }\r\n\r\n      points = points.join(\" \");\r\n      var polyline = this.svgFactory.createElement(this.svgElementName);\r\n      polyline.setAttribute(\"points\", points);\r\n      polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\r\n      polyline.setAttribute(\"stroke\", \"transparent\");\r\n      polyline.setAttribute(\"fill\", \"none\");\r\n      svg.appendChild(polyline);\r\n      this.container.append(svg);\r\n\r\n      this._createPopup(polyline, data);\r\n\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return PolylineAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar PolygonAnnotationElement = /*#__PURE__*/function (_PolylineAnnotationEl) {\r\n  _inherits(PolygonAnnotationElement, _PolylineAnnotationEl);\r\n\r\n  var _super15 = _createSuper(PolygonAnnotationElement);\r\n\r\n  function PolygonAnnotationElement(parameters) {\r\n    var _this9;\r\n\r\n    _classCallCheck(this, PolygonAnnotationElement);\r\n\r\n    _this9 = _super15.call(this, parameters);\r\n    _this9.containerClassName = \"polygonAnnotation\";\r\n    _this9.svgElementName = \"svg:polygon\";\r\n    return _this9;\r\n  }\r\n\r\n  return PolygonAnnotationElement;\r\n}(PolylineAnnotationElement);\r\n\r\nvar CaretAnnotationElement = /*#__PURE__*/function (_AnnotationElement10) {\r\n  _inherits(CaretAnnotationElement, _AnnotationElement10);\r\n\r\n  var _super16 = _createSuper(CaretAnnotationElement);\r\n\r\n  function CaretAnnotationElement(parameters) {\r\n    _classCallCheck(this, CaretAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\r\n    return _super16.call(this, parameters, {\r\n      isRenderable: isRenderable,\r\n      ignoreBorder: true\r\n    });\r\n  }\r\n\r\n  _createClass(CaretAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      this.container.className = \"caretAnnotation\";\r\n\r\n      if (!this.data.hasPopup) {\r\n        this._createPopup(null, this.data);\r\n      }\r\n\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return CaretAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar InkAnnotationElement = /*#__PURE__*/function (_AnnotationElement11) {\r\n  _inherits(InkAnnotationElement, _AnnotationElement11);\r\n\r\n  var _super17 = _createSuper(InkAnnotationElement);\r\n\r\n  function InkAnnotationElement(parameters) {\r\n    var _this10;\r\n\r\n    _classCallCheck(this, InkAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\r\n    _this10 = _super17.call(this, parameters, {\r\n      isRenderable: isRenderable,\r\n      ignoreBorder: true\r\n    });\r\n    _this10.containerClassName = \"inkAnnotation\";\r\n    _this10.svgElementName = \"svg:polyline\";\r\n    return _this10;\r\n  }\r\n\r\n  _createClass(InkAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      this.container.className = this.containerClassName;\r\n      var data = this.data;\r\n      var width = data.rect[2] - data.rect[0];\r\n      var height = data.rect[3] - data.rect[1];\r\n      var svg = this.svgFactory.create(width, height);\r\n\r\n      var _iterator9 = _createForOfIteratorHelper(data.inkLists),\r\n          _step9;\r\n\r\n      try {\r\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\r\n          var inkList = _step9.value;\r\n          var points = [];\r\n\r\n          var _iterator10 = _createForOfIteratorHelper(inkList),\r\n              _step10;\r\n\r\n          try {\r\n            for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\r\n              var coordinate = _step10.value;\r\n              var x = coordinate.x - data.rect[0];\r\n              var y = data.rect[3] - coordinate.y;\r\n              points.push(\"\".concat(x, \",\").concat(y));\r\n            }\r\n          } catch (err) {\r\n            _iterator10.e(err);\r\n          } finally {\r\n            _iterator10.f();\r\n          }\r\n\r\n          points = points.join(\" \");\r\n          var polyline = this.svgFactory.createElement(this.svgElementName);\r\n          polyline.setAttribute(\"points\", points);\r\n          polyline.setAttribute(\"stroke-width\", data.borderStyle.width || 1);\r\n          polyline.setAttribute(\"stroke\", \"transparent\");\r\n          polyline.setAttribute(\"fill\", \"none\");\r\n\r\n          this._createPopup(polyline, data);\r\n\r\n          svg.appendChild(polyline);\r\n        }\r\n      } catch (err) {\r\n        _iterator9.e(err);\r\n      } finally {\r\n        _iterator9.f();\r\n      }\r\n\r\n      this.container.append(svg);\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return InkAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar HighlightAnnotationElement = /*#__PURE__*/function (_AnnotationElement12) {\r\n  _inherits(HighlightAnnotationElement, _AnnotationElement12);\r\n\r\n  var _super18 = _createSuper(HighlightAnnotationElement);\r\n\r\n  function HighlightAnnotationElement(parameters) {\r\n    _classCallCheck(this, HighlightAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\r\n    return _super18.call(this, parameters, {\r\n      isRenderable: isRenderable,\r\n      ignoreBorder: true,\r\n      createQuadrilaterals: true\r\n    });\r\n  }\r\n\r\n  _createClass(HighlightAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      if (!this.data.hasPopup) {\r\n        this._createPopup(null, this.data);\r\n      }\r\n\r\n      if (this.quadrilaterals) {\r\n        return this._renderQuadrilaterals(\"highlightAnnotation\");\r\n      }\r\n\r\n      this.container.className = \"highlightAnnotation\";\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return HighlightAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar UnderlineAnnotationElement = /*#__PURE__*/function (_AnnotationElement13) {\r\n  _inherits(UnderlineAnnotationElement, _AnnotationElement13);\r\n\r\n  var _super19 = _createSuper(UnderlineAnnotationElement);\r\n\r\n  function UnderlineAnnotationElement(parameters) {\r\n    _classCallCheck(this, UnderlineAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\r\n    return _super19.call(this, parameters, {\r\n      isRenderable: isRenderable,\r\n      ignoreBorder: true,\r\n      createQuadrilaterals: true\r\n    });\r\n  }\r\n\r\n  _createClass(UnderlineAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      if (!this.data.hasPopup) {\r\n        this._createPopup(null, this.data);\r\n      }\r\n\r\n      if (this.quadrilaterals) {\r\n        return this._renderQuadrilaterals(\"underlineAnnotation\");\r\n      }\r\n\r\n      this.container.className = \"underlineAnnotation\";\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return UnderlineAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar SquigglyAnnotationElement = /*#__PURE__*/function (_AnnotationElement14) {\r\n  _inherits(SquigglyAnnotationElement, _AnnotationElement14);\r\n\r\n  var _super20 = _createSuper(SquigglyAnnotationElement);\r\n\r\n  function SquigglyAnnotationElement(parameters) {\r\n    _classCallCheck(this, SquigglyAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\r\n    return _super20.call(this, parameters, {\r\n      isRenderable: isRenderable,\r\n      ignoreBorder: true,\r\n      createQuadrilaterals: true\r\n    });\r\n  }\r\n\r\n  _createClass(SquigglyAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      if (!this.data.hasPopup) {\r\n        this._createPopup(null, this.data);\r\n      }\r\n\r\n      if (this.quadrilaterals) {\r\n        return this._renderQuadrilaterals(\"squigglyAnnotation\");\r\n      }\r\n\r\n      this.container.className = \"squigglyAnnotation\";\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return SquigglyAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar StrikeOutAnnotationElement = /*#__PURE__*/function (_AnnotationElement15) {\r\n  _inherits(StrikeOutAnnotationElement, _AnnotationElement15);\r\n\r\n  var _super21 = _createSuper(StrikeOutAnnotationElement);\r\n\r\n  function StrikeOutAnnotationElement(parameters) {\r\n    _classCallCheck(this, StrikeOutAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\r\n    return _super21.call(this, parameters, {\r\n      isRenderable: isRenderable,\r\n      ignoreBorder: true,\r\n      createQuadrilaterals: true\r\n    });\r\n  }\r\n\r\n  _createClass(StrikeOutAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      if (!this.data.hasPopup) {\r\n        this._createPopup(null, this.data);\r\n      }\r\n\r\n      if (this.quadrilaterals) {\r\n        return this._renderQuadrilaterals(\"strikeoutAnnotation\");\r\n      }\r\n\r\n      this.container.className = \"strikeoutAnnotation\";\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return StrikeOutAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar StampAnnotationElement = /*#__PURE__*/function (_AnnotationElement16) {\r\n  _inherits(StampAnnotationElement, _AnnotationElement16);\r\n\r\n  var _super22 = _createSuper(StampAnnotationElement);\r\n\r\n  function StampAnnotationElement(parameters) {\r\n    _classCallCheck(this, StampAnnotationElement);\r\n\r\n    var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);\r\n    return _super22.call(this, parameters, {\r\n      isRenderable: isRenderable,\r\n      ignoreBorder: true\r\n    });\r\n  }\r\n\r\n  _createClass(StampAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      this.container.className = \"stampAnnotation\";\r\n\r\n      if (!this.data.hasPopup) {\r\n        this._createPopup(null, this.data);\r\n      }\r\n\r\n      return this.container;\r\n    }\r\n  }]);\r\n\r\n  return StampAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar FileAttachmentAnnotationElement = /*#__PURE__*/function (_AnnotationElement17) {\r\n  _inherits(FileAttachmentAnnotationElement, _AnnotationElement17);\r\n\r\n  var _super23 = _createSuper(FileAttachmentAnnotationElement);\r\n\r\n  function FileAttachmentAnnotationElement(parameters) {\r\n    var _this11$linkService$e;\r\n\r\n    var _this11;\r\n\r\n    _classCallCheck(this, FileAttachmentAnnotationElement);\r\n\r\n    _this11 = _super23.call(this, parameters, {\r\n      isRenderable: true\r\n    });\r\n    var _this11$data$file = _this11.data.file,\r\n        filename = _this11$data$file.filename,\r\n        content = _this11$data$file.content;\r\n    _this11.filename = (0, _display_utils.getFilenameFromUrl)(filename);\r\n    _this11.content = content;\r\n    (_this11$linkService$e = _this11.linkService.eventBus) === null || _this11$linkService$e === void 0 ? void 0 : _this11$linkService$e.dispatch(\"fileattachmentannotation\", {\r\n      source: _assertThisInitialized(_this11),\r\n      id: (0, _util.stringToPDFString)(filename),\r\n      filename: filename,\r\n      content: content\r\n    });\r\n    return _this11;\r\n  }\r\n\r\n  _createClass(FileAttachmentAnnotationElement, [{\r\n    key: \"render\",\r\n    value: function render() {\r\n      this.container.className = \"fileAttachmentAnnotation\";\r\n      var trigger = document.createElement(\"div\");\r\n      trigger.style.height = this.container.style.height;\r\n      trigger.style.width = this.container.style.width;\r\n      trigger.addEventListener(\"dblclick\", this._download.bind(this));\r\n\r\n      if (!this.data.hasPopup && (this.data.title || this.data.contents)) {\r\n        this._createPopup(trigger, this.data);\r\n      }\r\n\r\n      this.container.appendChild(trigger);\r\n      return this.container;\r\n    }\r\n  }, {\r\n    key: \"_download\",\r\n    value: function _download() {\r\n      if (!this.downloadManager) {\r\n        (0, _util.warn)(\"Download cannot be started due to unavailable download manager\");\r\n        return;\r\n      }\r\n\r\n      this.downloadManager.downloadData(this.content, this.filename, \"\");\r\n    }\r\n  }]);\r\n\r\n  return FileAttachmentAnnotationElement;\r\n}(AnnotationElement);\r\n\r\nvar AnnotationLayer = /*#__PURE__*/function () {\r\n  function AnnotationLayer() {\r\n    _classCallCheck(this, AnnotationLayer);\r\n  }\r\n\r\n  _createClass(AnnotationLayer, null, [{\r\n    key: \"render\",\r\n    value: function render(parameters) {\r\n      var sortedAnnotations = [],\r\n          popupAnnotations = [];\r\n\r\n      var _iterator11 = _createForOfIteratorHelper(parameters.annotations),\r\n          _step11;\r\n\r\n      try {\r\n        for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\r\n          var _data = _step11.value;\r\n\r\n          if (!_data) {\r\n            continue;\r\n          }\r\n\r\n          if (_data.annotationType === _util.AnnotationType.POPUP) {\r\n            popupAnnotations.push(_data);\r\n            continue;\r\n          }\r\n\r\n          sortedAnnotations.push(_data);\r\n        }\r\n      } catch (err) {\r\n        _iterator11.e(err);\r\n      } finally {\r\n        _iterator11.f();\r\n      }\r\n\r\n      if (popupAnnotations.length) {\r\n        sortedAnnotations.push.apply(sortedAnnotations, popupAnnotations);\r\n      }\r\n\r\n      for (var _i2 = 0, _sortedAnnotations = sortedAnnotations; _i2 < _sortedAnnotations.length; _i2++) {\r\n        var data = _sortedAnnotations[_i2];\r\n        var element = AnnotationElementFactory.create({\r\n          data: data,\r\n          layer: parameters.div,\r\n          page: parameters.page,\r\n          viewport: parameters.viewport,\r\n          linkService: parameters.linkService,\r\n          downloadManager: parameters.downloadManager,\r\n          imageResourcesPath: parameters.imageResourcesPath || \"\",\r\n          renderInteractiveForms: typeof parameters.renderInteractiveForms === \"boolean\" ? parameters.renderInteractiveForms : true,\r\n          svgFactory: new _display_utils.DOMSVGFactory(),\r\n          annotationStorage: parameters.annotationStorage || new _annotation_storage.AnnotationStorage(),\r\n          enableScripting: parameters.enableScripting,\r\n          hasJSActions: parameters.hasJSActions,\r\n          mouseState: parameters.mouseState || {\r\n            isDown: false\r\n          }\r\n        });\r\n\r\n        if (element.isRenderable) {\r\n          var rendered = element.render();\r\n\r\n          if (data.hidden) {\r\n            rendered.style.visibility = \"hidden\";\r\n          }\r\n\r\n          if (Array.isArray(rendered)) {\r\n            var _iterator12 = _createForOfIteratorHelper(rendered),\r\n                _step12;\r\n\r\n            try {\r\n              for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\r\n                var renderedElement = _step12.value;\r\n                parameters.div.appendChild(renderedElement);\r\n              }\r\n            } catch (err) {\r\n              _iterator12.e(err);\r\n            } finally {\r\n              _iterator12.f();\r\n            }\r\n          } else {\r\n            if (element instanceof PopupAnnotationElement) {\r\n              parameters.div.prepend(rendered);\r\n            } else {\r\n              parameters.div.appendChild(rendered);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"update\",\r\n    value: function update(parameters) {\r\n      var transform = \"matrix(\".concat(parameters.viewport.transform.join(\",\"), \")\");\r\n\r\n      var _iterator13 = _createForOfIteratorHelper(parameters.annotations),\r\n          _step13;\r\n\r\n      try {\r\n        for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\r\n          var data = _step13.value;\r\n          var elements = parameters.div.querySelectorAll(\"[data-annotation-id=\\\"\".concat(data.id, \"\\\"]\"));\r\n\r\n          if (elements) {\r\n            elements.forEach(function (element) {\r\n              element.style.transform = transform;\r\n            });\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator13.e(err);\r\n      } finally {\r\n        _iterator13.f();\r\n      }\r\n\r\n      parameters.div.removeAttribute(\"hidden\");\r\n    }\r\n  }]);\r\n\r\n  return AnnotationLayer;\r\n}();\r\n\r\nexports.AnnotationLayer = AnnotationLayer;\r\n\r\n/***/ }),\r\n/* 150 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.ColorConverters = void 0;\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction makeColorComp(n) {\r\n  return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, \"0\");\r\n}\r\n\r\nvar ColorConverters = /*#__PURE__*/function () {\r\n  function ColorConverters() {\r\n    _classCallCheck(this, ColorConverters);\r\n  }\r\n\r\n  _createClass(ColorConverters, null, [{\r\n    key: \"CMYK_G\",\r\n    value: function CMYK_G(_ref) {\r\n      var _ref2 = _slicedToArray(_ref, 4),\r\n          c = _ref2[0],\r\n          y = _ref2[1],\r\n          m = _ref2[2],\r\n          k = _ref2[3];\r\n\r\n      return [\"G\", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];\r\n    }\r\n  }, {\r\n    key: \"G_CMYK\",\r\n    value: function G_CMYK(_ref3) {\r\n      var _ref4 = _slicedToArray(_ref3, 1),\r\n          g = _ref4[0];\r\n\r\n      return [\"CMYK\", 0, 0, 0, 1 - g];\r\n    }\r\n  }, {\r\n    key: \"G_RGB\",\r\n    value: function G_RGB(_ref5) {\r\n      var _ref6 = _slicedToArray(_ref5, 1),\r\n          g = _ref6[0];\r\n\r\n      return [\"RGB\", g, g, g];\r\n    }\r\n  }, {\r\n    key: \"G_HTML\",\r\n    value: function G_HTML(_ref7) {\r\n      var _ref8 = _slicedToArray(_ref7, 1),\r\n          g = _ref8[0];\r\n\r\n      var G = makeColorComp(g);\r\n      return \"#\".concat(G).concat(G).concat(G);\r\n    }\r\n  }, {\r\n    key: \"RGB_G\",\r\n    value: function RGB_G(_ref9) {\r\n      var _ref10 = _slicedToArray(_ref9, 3),\r\n          r = _ref10[0],\r\n          g = _ref10[1],\r\n          b = _ref10[2];\r\n\r\n      return [\"G\", 0.3 * r + 0.59 * g + 0.11 * b];\r\n    }\r\n  }, {\r\n    key: \"RGB_HTML\",\r\n    value: function RGB_HTML(_ref11) {\r\n      var _ref12 = _slicedToArray(_ref11, 3),\r\n          r = _ref12[0],\r\n          g = _ref12[1],\r\n          b = _ref12[2];\r\n\r\n      var R = makeColorComp(r);\r\n      var G = makeColorComp(g);\r\n      var B = makeColorComp(b);\r\n      return \"#\".concat(R).concat(G).concat(B);\r\n    }\r\n  }, {\r\n    key: \"T_HTML\",\r\n    value: function T_HTML() {\r\n      return \"#00000000\";\r\n    }\r\n  }, {\r\n    key: \"CMYK_RGB\",\r\n    value: function CMYK_RGB(_ref13) {\r\n      var _ref14 = _slicedToArray(_ref13, 4),\r\n          c = _ref14[0],\r\n          y = _ref14[1],\r\n          m = _ref14[2],\r\n          k = _ref14[3];\r\n\r\n      return [\"RGB\", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)];\r\n    }\r\n  }, {\r\n    key: \"CMYK_HTML\",\r\n    value: function CMYK_HTML(components) {\r\n      return this.RGB_HTML(this.CMYK_RGB(components));\r\n    }\r\n  }, {\r\n    key: \"RGB_CMYK\",\r\n    value: function RGB_CMYK(_ref15) {\r\n      var _ref16 = _slicedToArray(_ref15, 3),\r\n          r = _ref16[0],\r\n          g = _ref16[1],\r\n          b = _ref16[2];\r\n\r\n      var c = 1 - r;\r\n      var m = 1 - g;\r\n      var y = 1 - b;\r\n      var k = Math.min(c, m, y);\r\n      return [\"CMYK\", c, m, y, k];\r\n    }\r\n  }]);\r\n\r\n  return ColorConverters;\r\n}();\r\n\r\nexports.ColorConverters = ColorConverters;\r\n\r\n/***/ }),\r\n/* 151 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.renderTextLayer = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar renderTextLayer = function renderTextLayerClosure() {\r\n  var MAX_TEXT_DIVS_TO_RENDER = 100000;\r\n  var NonWhitespaceRegexp = /\\S/;\r\n\r\n  function isAllWhitespace(str) {\r\n    return !NonWhitespaceRegexp.test(str);\r\n  }\r\n\r\n  function appendText(task, geom, styles) {\r\n    var textDiv = document.createElement(\"span\");\r\n    var textDivProperties = {\r\n      angle: 0,\r\n      canvasWidth: 0,\r\n      isWhitespace: false,\r\n      originalTransform: null,\r\n      paddingBottom: 0,\r\n      paddingLeft: 0,\r\n      paddingRight: 0,\r\n      paddingTop: 0,\r\n      scale: 1\r\n    };\r\n\r\n    task._textDivs.push(textDiv);\r\n\r\n    if (isAllWhitespace(geom.str)) {\r\n      textDivProperties.isWhitespace = true;\r\n\r\n      task._textDivProperties.set(textDiv, textDivProperties);\r\n\r\n      return;\r\n    }\r\n\r\n    var tx = _util.Util.transform(task._viewport.transform, geom.transform);\r\n\r\n    var angle = Math.atan2(tx[1], tx[0]);\r\n    var style = styles[geom.fontName];\r\n\r\n    if (style.vertical) {\r\n      angle += Math.PI / 2;\r\n    }\r\n\r\n    var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]);\r\n    var fontAscent = fontHeight;\r\n\r\n    if (style.ascent) {\r\n      fontAscent = style.ascent * fontAscent;\r\n    } else if (style.descent) {\r\n      fontAscent = (1 + style.descent) * fontAscent;\r\n    }\r\n\r\n    var left, top;\r\n\r\n    if (angle === 0) {\r\n      left = tx[4];\r\n      top = tx[5] - fontAscent;\r\n    } else {\r\n      left = tx[4] + fontAscent * Math.sin(angle);\r\n      top = tx[5] - fontAscent * Math.cos(angle);\r\n    }\r\n\r\n    textDiv.style.left = \"\".concat(left, \"px\");\r\n    textDiv.style.top = \"\".concat(top, \"px\");\r\n    textDiv.style.fontSize = \"\".concat(fontHeight, \"px\");\r\n    textDiv.style.fontFamily = style.fontFamily;\r\n    textDiv.textContent = geom.str;\r\n    textDiv.dir = geom.dir;\r\n\r\n    if (task._fontInspectorEnabled) {\r\n      textDiv.dataset.fontName = geom.fontName;\r\n    }\r\n\r\n    if (angle !== 0) {\r\n      textDivProperties.angle = angle * (180 / Math.PI);\r\n    }\r\n\r\n    var shouldScaleText = false;\r\n\r\n    if (geom.str.length > 1) {\r\n      shouldScaleText = true;\r\n    } else if (geom.transform[0] !== geom.transform[3]) {\r\n      var absScaleX = Math.abs(geom.transform[0]),\r\n          absScaleY = Math.abs(geom.transform[3]);\r\n\r\n      if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) {\r\n        shouldScaleText = true;\r\n      }\r\n    }\r\n\r\n    if (shouldScaleText) {\r\n      if (style.vertical) {\r\n        textDivProperties.canvasWidth = geom.height * task._viewport.scale;\r\n      } else {\r\n        textDivProperties.canvasWidth = geom.width * task._viewport.scale;\r\n      }\r\n    }\r\n\r\n    task._textDivProperties.set(textDiv, textDivProperties);\r\n\r\n    if (task._textContentStream) {\r\n      task._layoutText(textDiv);\r\n    }\r\n\r\n    if (task._enhanceTextSelection) {\r\n      var angleCos = 1,\r\n          angleSin = 0;\r\n\r\n      if (angle !== 0) {\r\n        angleCos = Math.cos(angle);\r\n        angleSin = Math.sin(angle);\r\n      }\r\n\r\n      var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale;\r\n      var divHeight = fontHeight;\r\n      var m, b;\r\n\r\n      if (angle !== 0) {\r\n        m = [angleCos, angleSin, -angleSin, angleCos, left, top];\r\n        b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m);\r\n      } else {\r\n        b = [left, top, left + divWidth, top + divHeight];\r\n      }\r\n\r\n      task._bounds.push({\r\n        left: b[0],\r\n        top: b[1],\r\n        right: b[2],\r\n        bottom: b[3],\r\n        div: textDiv,\r\n        size: [divWidth, divHeight],\r\n        m: m\r\n      });\r\n    }\r\n  }\r\n\r\n  function render(task) {\r\n    if (task._canceled) {\r\n      return;\r\n    }\r\n\r\n    var textDivs = task._textDivs;\r\n    var capability = task._capability;\r\n    var textDivsLength = textDivs.length;\r\n\r\n    if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) {\r\n      task._renderingDone = true;\r\n      capability.resolve();\r\n      return;\r\n    }\r\n\r\n    if (!task._textContentStream) {\r\n      for (var i = 0; i < textDivsLength; i++) {\r\n        task._layoutText(textDivs[i]);\r\n      }\r\n    }\r\n\r\n    task._renderingDone = true;\r\n    capability.resolve();\r\n  }\r\n\r\n  function findPositiveMin(ts, offset, count) {\r\n    var result = 0;\r\n\r\n    for (var i = 0; i < count; i++) {\r\n      var t = ts[offset++];\r\n\r\n      if (t > 0) {\r\n        result = result ? Math.min(t, result) : t;\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  function expand(task) {\r\n    var bounds = task._bounds;\r\n    var viewport = task._viewport;\r\n    var expanded = expandBounds(viewport.width, viewport.height, bounds);\r\n\r\n    var _loop = function _loop(i) {\r\n      var div = bounds[i].div;\r\n\r\n      var divProperties = task._textDivProperties.get(div);\r\n\r\n      if (divProperties.angle === 0) {\r\n        divProperties.paddingLeft = bounds[i].left - expanded[i].left;\r\n        divProperties.paddingTop = bounds[i].top - expanded[i].top;\r\n        divProperties.paddingRight = expanded[i].right - bounds[i].right;\r\n        divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom;\r\n\r\n        task._textDivProperties.set(div, divProperties);\r\n\r\n        return \"continue\";\r\n      }\r\n\r\n      var e = expanded[i],\r\n          b = bounds[i];\r\n      var m = b.m,\r\n          c = m[0],\r\n          s = m[1];\r\n      var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size];\r\n      var ts = new Float64Array(64);\r\n      points.forEach(function (p, j) {\r\n        var t = _util.Util.applyTransform(p, m);\r\n\r\n        ts[j + 0] = c && (e.left - t[0]) / c;\r\n        ts[j + 4] = s && (e.top - t[1]) / s;\r\n        ts[j + 8] = c && (e.right - t[0]) / c;\r\n        ts[j + 12] = s && (e.bottom - t[1]) / s;\r\n        ts[j + 16] = s && (e.left - t[0]) / -s;\r\n        ts[j + 20] = c && (e.top - t[1]) / c;\r\n        ts[j + 24] = s && (e.right - t[0]) / -s;\r\n        ts[j + 28] = c && (e.bottom - t[1]) / c;\r\n        ts[j + 32] = c && (e.left - t[0]) / -c;\r\n        ts[j + 36] = s && (e.top - t[1]) / -s;\r\n        ts[j + 40] = c && (e.right - t[0]) / -c;\r\n        ts[j + 44] = s && (e.bottom - t[1]) / -s;\r\n        ts[j + 48] = s && (e.left - t[0]) / s;\r\n        ts[j + 52] = c && (e.top - t[1]) / -c;\r\n        ts[j + 56] = s && (e.right - t[0]) / s;\r\n        ts[j + 60] = c && (e.bottom - t[1]) / -c;\r\n      });\r\n      var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s));\r\n      divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale;\r\n      divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale;\r\n      divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale;\r\n      divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale;\r\n\r\n      task._textDivProperties.set(div, divProperties);\r\n    };\r\n\r\n    for (var i = 0; i < expanded.length; i++) {\r\n      var _ret = _loop(i);\r\n\r\n      if (_ret === \"continue\") continue;\r\n    }\r\n  }\r\n\r\n  function expandBounds(width, height, boxes) {\r\n    var bounds = boxes.map(function (box, i) {\r\n      return {\r\n        x1: box.left,\r\n        y1: box.top,\r\n        x2: box.right,\r\n        y2: box.bottom,\r\n        index: i,\r\n        x1New: undefined,\r\n        x2New: undefined\r\n      };\r\n    });\r\n    expandBoundsLTR(width, bounds);\r\n    var expanded = new Array(boxes.length);\r\n    bounds.forEach(function (b) {\r\n      var i = b.index;\r\n      expanded[i] = {\r\n        left: b.x1New,\r\n        top: 0,\r\n        right: b.x2New,\r\n        bottom: 0\r\n      };\r\n    });\r\n    boxes.map(function (box, i) {\r\n      var e = expanded[i],\r\n          b = bounds[i];\r\n      b.x1 = box.top;\r\n      b.y1 = width - e.right;\r\n      b.x2 = box.bottom;\r\n      b.y2 = width - e.left;\r\n      b.index = i;\r\n      b.x1New = undefined;\r\n      b.x2New = undefined;\r\n    });\r\n    expandBoundsLTR(height, bounds);\r\n    bounds.forEach(function (b) {\r\n      var i = b.index;\r\n      expanded[i].top = b.x1New;\r\n      expanded[i].bottom = b.x2New;\r\n    });\r\n    return expanded;\r\n  }\r\n\r\n  function expandBoundsLTR(width, bounds) {\r\n    bounds.sort(function (a, b) {\r\n      return a.x1 - b.x1 || a.index - b.index;\r\n    });\r\n    var fakeBoundary = {\r\n      x1: -Infinity,\r\n      y1: -Infinity,\r\n      x2: 0,\r\n      y2: Infinity,\r\n      index: -1,\r\n      x1New: 0,\r\n      x2New: 0\r\n    };\r\n    var horizon = [{\r\n      start: -Infinity,\r\n      end: Infinity,\r\n      boundary: fakeBoundary\r\n    }];\r\n    bounds.forEach(function (boundary) {\r\n      var i = 0;\r\n\r\n      while (i < horizon.length && horizon[i].end <= boundary.y1) {\r\n        i++;\r\n      }\r\n\r\n      var j = horizon.length - 1;\r\n\r\n      while (j >= 0 && horizon[j].start >= boundary.y2) {\r\n        j--;\r\n      }\r\n\r\n      var horizonPart, affectedBoundary;\r\n      var q,\r\n          k,\r\n          maxXNew = -Infinity;\r\n\r\n      for (q = i; q <= j; q++) {\r\n        horizonPart = horizon[q];\r\n        affectedBoundary = horizonPart.boundary;\r\n        var xNew = void 0;\r\n\r\n        if (affectedBoundary.x2 > boundary.x1) {\r\n          xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1;\r\n        } else if (affectedBoundary.x2New === undefined) {\r\n          xNew = (affectedBoundary.x2 + boundary.x1) / 2;\r\n        } else {\r\n          xNew = affectedBoundary.x2New;\r\n        }\r\n\r\n        if (xNew > maxXNew) {\r\n          maxXNew = xNew;\r\n        }\r\n      }\r\n\r\n      boundary.x1New = maxXNew;\r\n\r\n      for (q = i; q <= j; q++) {\r\n        horizonPart = horizon[q];\r\n        affectedBoundary = horizonPart.boundary;\r\n\r\n        if (affectedBoundary.x2New === undefined) {\r\n          if (affectedBoundary.x2 > boundary.x1) {\r\n            if (affectedBoundary.index > boundary.index) {\r\n              affectedBoundary.x2New = affectedBoundary.x2;\r\n            }\r\n          } else {\r\n            affectedBoundary.x2New = maxXNew;\r\n          }\r\n        } else if (affectedBoundary.x2New > maxXNew) {\r\n          affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2);\r\n        }\r\n      }\r\n\r\n      var changedHorizon = [];\r\n      var lastBoundary = null;\r\n\r\n      for (q = i; q <= j; q++) {\r\n        horizonPart = horizon[q];\r\n        affectedBoundary = horizonPart.boundary;\r\n        var useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary;\r\n\r\n        if (lastBoundary === useBoundary) {\r\n          changedHorizon[changedHorizon.length - 1].end = horizonPart.end;\r\n        } else {\r\n          changedHorizon.push({\r\n            start: horizonPart.start,\r\n            end: horizonPart.end,\r\n            boundary: useBoundary\r\n          });\r\n          lastBoundary = useBoundary;\r\n        }\r\n      }\r\n\r\n      if (horizon[i].start < boundary.y1) {\r\n        changedHorizon[0].start = boundary.y1;\r\n        changedHorizon.unshift({\r\n          start: horizon[i].start,\r\n          end: boundary.y1,\r\n          boundary: horizon[i].boundary\r\n        });\r\n      }\r\n\r\n      if (boundary.y2 < horizon[j].end) {\r\n        changedHorizon[changedHorizon.length - 1].end = boundary.y2;\r\n        changedHorizon.push({\r\n          start: boundary.y2,\r\n          end: horizon[j].end,\r\n          boundary: horizon[j].boundary\r\n        });\r\n      }\r\n\r\n      for (q = i; q <= j; q++) {\r\n        horizonPart = horizon[q];\r\n        affectedBoundary = horizonPart.boundary;\r\n\r\n        if (affectedBoundary.x2New !== undefined) {\r\n          continue;\r\n        }\r\n\r\n        var used = false;\r\n\r\n        for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) {\r\n          used = horizon[k].boundary === affectedBoundary;\r\n        }\r\n\r\n        for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) {\r\n          used = horizon[k].boundary === affectedBoundary;\r\n        }\r\n\r\n        for (k = 0; !used && k < changedHorizon.length; k++) {\r\n          used = changedHorizon[k].boundary === affectedBoundary;\r\n        }\r\n\r\n        if (!used) {\r\n          affectedBoundary.x2New = maxXNew;\r\n        }\r\n      }\r\n\r\n      Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon));\r\n    });\r\n    horizon.forEach(function (horizonPart) {\r\n      var affectedBoundary = horizonPart.boundary;\r\n\r\n      if (affectedBoundary.x2New === undefined) {\r\n        affectedBoundary.x2New = Math.max(width, affectedBoundary.x2);\r\n      }\r\n    });\r\n  }\r\n\r\n  function TextLayerRenderTask(_ref) {\r\n    var _globalThis$FontInspe,\r\n        _this = this;\r\n\r\n    var textContent = _ref.textContent,\r\n        textContentStream = _ref.textContentStream,\r\n        container = _ref.container,\r\n        viewport = _ref.viewport,\r\n        textDivs = _ref.textDivs,\r\n        textContentItemsStr = _ref.textContentItemsStr,\r\n        enhanceTextSelection = _ref.enhanceTextSelection;\r\n    this._textContent = textContent;\r\n    this._textContentStream = textContentStream;\r\n    this._container = container;\r\n    this._document = container.ownerDocument;\r\n    this._viewport = viewport;\r\n    this._textDivs = textDivs || [];\r\n    this._textContentItemsStr = textContentItemsStr || [];\r\n    this._enhanceTextSelection = !!enhanceTextSelection;\r\n    this._fontInspectorEnabled = !!((_globalThis$FontInspe = globalThis.FontInspector) !== null && _globalThis$FontInspe !== void 0 && _globalThis$FontInspe.enabled);\r\n    this._reader = null;\r\n    this._layoutTextLastFontSize = null;\r\n    this._layoutTextLastFontFamily = null;\r\n    this._layoutTextCtx = null;\r\n    this._textDivProperties = new WeakMap();\r\n    this._renderingDone = false;\r\n    this._canceled = false;\r\n    this._capability = (0, _util.createPromiseCapability)();\r\n    this._renderTimer = null;\r\n    this._bounds = [];\r\n\r\n    this._capability.promise[\"finally\"](function () {\r\n      if (_this._layoutTextCtx) {\r\n        _this._layoutTextCtx.canvas.width = 0;\r\n        _this._layoutTextCtx.canvas.height = 0;\r\n        _this._layoutTextCtx = null;\r\n      }\r\n    })[\"catch\"](function () {});\r\n  }\r\n\r\n  TextLayerRenderTask.prototype = {\r\n    get promise() {\r\n      return this._capability.promise;\r\n    },\r\n\r\n    cancel: function TextLayer_cancel() {\r\n      this._canceled = true;\r\n\r\n      if (this._reader) {\r\n        this._reader.cancel(new _util.AbortException(\"TextLayer task cancelled.\"));\r\n\r\n        this._reader = null;\r\n      }\r\n\r\n      if (this._renderTimer !== null) {\r\n        clearTimeout(this._renderTimer);\r\n        this._renderTimer = null;\r\n      }\r\n\r\n      this._capability.reject(new Error(\"TextLayer task cancelled.\"));\r\n    },\r\n    _processItems: function _processItems(items, styleCache) {\r\n      for (var i = 0, len = items.length; i < len; i++) {\r\n        this._textContentItemsStr.push(items[i].str);\r\n\r\n        appendText(this, items[i], styleCache);\r\n      }\r\n    },\r\n    _layoutText: function _layoutText(textDiv) {\r\n      var textDivProperties = this._textDivProperties.get(textDiv);\r\n\r\n      if (textDivProperties.isWhitespace) {\r\n        return;\r\n      }\r\n\r\n      var transform = \"\";\r\n\r\n      if (textDivProperties.canvasWidth !== 0) {\r\n        var _textDiv$style = textDiv.style,\r\n            fontSize = _textDiv$style.fontSize,\r\n            fontFamily = _textDiv$style.fontFamily;\r\n\r\n        if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) {\r\n          this._layoutTextCtx.font = \"\".concat(fontSize, \" \").concat(fontFamily);\r\n          this._layoutTextLastFontSize = fontSize;\r\n          this._layoutTextLastFontFamily = fontFamily;\r\n        }\r\n\r\n        var _this$_layoutTextCtx$ = this._layoutTextCtx.measureText(textDiv.textContent),\r\n            width = _this$_layoutTextCtx$.width;\r\n\r\n        if (width > 0) {\r\n          textDivProperties.scale = textDivProperties.canvasWidth / width;\r\n          transform = \"scaleX(\".concat(textDivProperties.scale, \")\");\r\n        }\r\n      }\r\n\r\n      if (textDivProperties.angle !== 0) {\r\n        transform = \"rotate(\".concat(textDivProperties.angle, \"deg) \").concat(transform);\r\n      }\r\n\r\n      if (transform.length > 0) {\r\n        if (this._enhanceTextSelection) {\r\n          textDivProperties.originalTransform = transform;\r\n        }\r\n\r\n        textDiv.style.transform = transform;\r\n      }\r\n\r\n      this._textDivProperties.set(textDiv, textDivProperties);\r\n\r\n      this._container.appendChild(textDiv);\r\n    },\r\n    _render: function TextLayer_render(timeout) {\r\n      var _this2 = this;\r\n\r\n      var capability = (0, _util.createPromiseCapability)();\r\n      var styleCache = Object.create(null);\r\n\r\n      var canvas = this._document.createElement(\"canvas\");\r\n\r\n      canvas.mozOpaque = true;\r\n      this._layoutTextCtx = canvas.getContext(\"2d\", {\r\n        alpha: false\r\n      });\r\n\r\n      if (this._textContent) {\r\n        var textItems = this._textContent.items;\r\n        var textStyles = this._textContent.styles;\r\n\r\n        this._processItems(textItems, textStyles);\r\n\r\n        capability.resolve();\r\n      } else if (this._textContentStream) {\r\n        var pump = function pump() {\r\n          _this2._reader.read().then(function (_ref2) {\r\n            var value = _ref2.value,\r\n                done = _ref2.done;\r\n\r\n            if (done) {\r\n              capability.resolve();\r\n              return;\r\n            }\r\n\r\n            Object.assign(styleCache, value.styles);\r\n\r\n            _this2._processItems(value.items, styleCache);\r\n\r\n            pump();\r\n          }, capability.reject);\r\n        };\r\n\r\n        this._reader = this._textContentStream.getReader();\r\n        pump();\r\n      } else {\r\n        throw new Error('Neither \"textContent\" nor \"textContentStream\"' + \" parameters specified.\");\r\n      }\r\n\r\n      capability.promise.then(function () {\r\n        styleCache = null;\r\n\r\n        if (!timeout) {\r\n          render(_this2);\r\n        } else {\r\n          _this2._renderTimer = setTimeout(function () {\r\n            render(_this2);\r\n            _this2._renderTimer = null;\r\n          }, timeout);\r\n        }\r\n      }, this._capability.reject);\r\n    },\r\n    expandTextDivs: function TextLayer_expandTextDivs(expandDivs) {\r\n      if (!this._enhanceTextSelection || !this._renderingDone) {\r\n        return;\r\n      }\r\n\r\n      if (this._bounds !== null) {\r\n        expand(this);\r\n        this._bounds = null;\r\n      }\r\n\r\n      var transformBuf = [],\r\n          paddingBuf = [];\r\n\r\n      for (var i = 0, ii = this._textDivs.length; i < ii; i++) {\r\n        var div = this._textDivs[i];\r\n\r\n        var divProps = this._textDivProperties.get(div);\r\n\r\n        if (divProps.isWhitespace) {\r\n          continue;\r\n        }\r\n\r\n        if (expandDivs) {\r\n          transformBuf.length = 0;\r\n          paddingBuf.length = 0;\r\n\r\n          if (divProps.originalTransform) {\r\n            transformBuf.push(divProps.originalTransform);\r\n          }\r\n\r\n          if (divProps.paddingTop > 0) {\r\n            paddingBuf.push(\"\".concat(divProps.paddingTop, \"px\"));\r\n            transformBuf.push(\"translateY(\".concat(-divProps.paddingTop, \"px)\"));\r\n          } else {\r\n            paddingBuf.push(0);\r\n          }\r\n\r\n          if (divProps.paddingRight > 0) {\r\n            paddingBuf.push(\"\".concat(divProps.paddingRight / divProps.scale, \"px\"));\r\n          } else {\r\n            paddingBuf.push(0);\r\n          }\r\n\r\n          if (divProps.paddingBottom > 0) {\r\n            paddingBuf.push(\"\".concat(divProps.paddingBottom, \"px\"));\r\n          } else {\r\n            paddingBuf.push(0);\r\n          }\r\n\r\n          if (divProps.paddingLeft > 0) {\r\n            paddingBuf.push(\"\".concat(divProps.paddingLeft / divProps.scale, \"px\"));\r\n            transformBuf.push(\"translateX(\".concat(-divProps.paddingLeft / divProps.scale, \"px)\"));\r\n          } else {\r\n            paddingBuf.push(0);\r\n          }\r\n\r\n          div.style.padding = paddingBuf.join(\" \");\r\n\r\n          if (transformBuf.length) {\r\n            div.style.transform = transformBuf.join(\" \");\r\n          }\r\n        } else {\r\n          div.style.padding = null;\r\n          div.style.transform = divProps.originalTransform;\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  function renderTextLayer(renderParameters) {\r\n    var task = new TextLayerRenderTask({\r\n      textContent: renderParameters.textContent,\r\n      textContentStream: renderParameters.textContentStream,\r\n      container: renderParameters.container,\r\n      viewport: renderParameters.viewport,\r\n      textDivs: renderParameters.textDivs,\r\n      textContentItemsStr: renderParameters.textContentItemsStr,\r\n      enhanceTextSelection: renderParameters.enhanceTextSelection\r\n    });\r\n\r\n    task._render(renderParameters.timeout);\r\n\r\n    return task;\r\n  }\r\n\r\n  return renderTextLayer;\r\n}();\r\n\r\nexports.renderTextLayer = renderTextLayer;\r\n\r\n/***/ }),\r\n/* 152 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.SVGGraphics = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _display_utils = __w_pdfjs_require__(1);\r\n\r\nvar _is_node = __w_pdfjs_require__(6);\r\n\r\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\r\n\r\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\r\n\r\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar SVGGraphics = function SVGGraphics() {\r\n  throw new Error(\"Not implemented: SVGGraphics\");\r\n};\r\n\r\nexports.SVGGraphics = SVGGraphics;\r\n{\r\n  var opListToTree = function opListToTree(opList) {\r\n    var opTree = [];\r\n    var tmp = [];\r\n\r\n    var _iterator = _createForOfIteratorHelper(opList),\r\n        _step;\r\n\r\n    try {\r\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n        var opListElement = _step.value;\r\n\r\n        if (opListElement.fn === \"save\") {\r\n          opTree.push({\r\n            fnId: 92,\r\n            fn: \"group\",\r\n            items: []\r\n          });\r\n          tmp.push(opTree);\r\n          opTree = opTree[opTree.length - 1].items;\r\n          continue;\r\n        }\r\n\r\n        if (opListElement.fn === \"restore\") {\r\n          opTree = tmp.pop();\r\n        } else {\r\n          opTree.push(opListElement);\r\n        }\r\n      }\r\n    } catch (err) {\r\n      _iterator.e(err);\r\n    } finally {\r\n      _iterator.f();\r\n    }\r\n\r\n    return opTree;\r\n  };\r\n\r\n  var pf = function pf(value) {\r\n    if (Number.isInteger(value)) {\r\n      return value.toString();\r\n    }\r\n\r\n    var s = value.toFixed(10);\r\n    var i = s.length - 1;\r\n\r\n    if (s[i] !== \"0\") {\r\n      return s;\r\n    }\r\n\r\n    do {\r\n      i--;\r\n    } while (s[i] === \"0\");\r\n\r\n    return s.substring(0, s[i] === \".\" ? i : i + 1);\r\n  };\r\n\r\n  var pm = function pm(m) {\r\n    if (m[4] === 0 && m[5] === 0) {\r\n      if (m[1] === 0 && m[2] === 0) {\r\n        if (m[0] === 1 && m[3] === 1) {\r\n          return \"\";\r\n        }\r\n\r\n        return \"scale(\".concat(pf(m[0]), \" \").concat(pf(m[3]), \")\");\r\n      }\r\n\r\n      if (m[0] === m[3] && m[1] === -m[2]) {\r\n        var a = Math.acos(m[0]) * 180 / Math.PI;\r\n        return \"rotate(\".concat(pf(a), \")\");\r\n      }\r\n    } else {\r\n      if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) {\r\n        return \"translate(\".concat(pf(m[4]), \" \").concat(pf(m[5]), \")\");\r\n      }\r\n    }\r\n\r\n    return \"matrix(\".concat(pf(m[0]), \" \").concat(pf(m[1]), \" \").concat(pf(m[2]), \" \").concat(pf(m[3]), \" \").concat(pf(m[4]), \" \") + \"\".concat(pf(m[5]), \")\");\r\n  };\r\n\r\n  var SVG_DEFAULTS = {\r\n    fontStyle: \"normal\",\r\n    fontWeight: \"normal\",\r\n    fillColor: \"#000000\"\r\n  };\r\n  var XML_NS = \"http://www.w3.org/XML/1998/namespace\";\r\n  var XLINK_NS = \"http://www.w3.org/1999/xlink\";\r\n  var LINE_CAP_STYLES = [\"butt\", \"round\", \"square\"];\r\n  var LINE_JOIN_STYLES = [\"miter\", \"round\", \"bevel\"];\r\n\r\n  var convertImgDataToPng = function () {\r\n    var PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);\r\n    var CHUNK_WRAPPER_SIZE = 12;\r\n    var crcTable = new Int32Array(256);\r\n\r\n    for (var i = 0; i < 256; i++) {\r\n      var c = i;\r\n\r\n      for (var h = 0; h < 8; h++) {\r\n        if (c & 1) {\r\n          c = 0xedb88320 ^ c >> 1 & 0x7fffffff;\r\n        } else {\r\n          c = c >> 1 & 0x7fffffff;\r\n        }\r\n      }\r\n\r\n      crcTable[i] = c;\r\n    }\r\n\r\n    function crc32(data, start, end) {\r\n      var crc = -1;\r\n\r\n      for (var _i = start; _i < end; _i++) {\r\n        var a = (crc ^ data[_i]) & 0xff;\r\n        var b = crcTable[a];\r\n        crc = crc >>> 8 ^ b;\r\n      }\r\n\r\n      return crc ^ -1;\r\n    }\r\n\r\n    function writePngChunk(type, body, data, offset) {\r\n      var p = offset;\r\n      var len = body.length;\r\n      data[p] = len >> 24 & 0xff;\r\n      data[p + 1] = len >> 16 & 0xff;\r\n      data[p + 2] = len >> 8 & 0xff;\r\n      data[p + 3] = len & 0xff;\r\n      p += 4;\r\n      data[p] = type.charCodeAt(0) & 0xff;\r\n      data[p + 1] = type.charCodeAt(1) & 0xff;\r\n      data[p + 2] = type.charCodeAt(2) & 0xff;\r\n      data[p + 3] = type.charCodeAt(3) & 0xff;\r\n      p += 4;\r\n      data.set(body, p);\r\n      p += body.length;\r\n      var crc = crc32(data, offset + 4, p);\r\n      data[p] = crc >> 24 & 0xff;\r\n      data[p + 1] = crc >> 16 & 0xff;\r\n      data[p + 2] = crc >> 8 & 0xff;\r\n      data[p + 3] = crc & 0xff;\r\n    }\r\n\r\n    function adler32(data, start, end) {\r\n      var a = 1;\r\n      var b = 0;\r\n\r\n      for (var _i2 = start; _i2 < end; ++_i2) {\r\n        a = (a + (data[_i2] & 0xff)) % 65521;\r\n        b = (b + a) % 65521;\r\n      }\r\n\r\n      return b << 16 | a;\r\n    }\r\n\r\n    function deflateSync(literals) {\r\n      if (!_is_node.isNodeJS) {\r\n        return deflateSyncUncompressed(literals);\r\n      }\r\n\r\n      try {\r\n        var input;\r\n\r\n        if (parseInt(process.versions.node) >= 8) {\r\n          input = literals;\r\n        } else {\r\n          input = Buffer.from(literals);\r\n        }\r\n\r\n        var output = require(\"zlib\").deflateSync(input, {\r\n          level: 9\r\n        });\r\n\r\n        return output instanceof Uint8Array ? output : new Uint8Array(output);\r\n      } catch (e) {\r\n        (0, _util.warn)(\"Not compressing PNG because zlib.deflateSync is unavailable: \" + e);\r\n      }\r\n\r\n      return deflateSyncUncompressed(literals);\r\n    }\r\n\r\n    function deflateSyncUncompressed(literals) {\r\n      var len = literals.length;\r\n      var maxBlockLength = 0xffff;\r\n      var deflateBlocks = Math.ceil(len / maxBlockLength);\r\n      var idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4);\r\n      var pi = 0;\r\n      idat[pi++] = 0x78;\r\n      idat[pi++] = 0x9c;\r\n      var pos = 0;\r\n\r\n      while (len > maxBlockLength) {\r\n        idat[pi++] = 0x00;\r\n        idat[pi++] = 0xff;\r\n        idat[pi++] = 0xff;\r\n        idat[pi++] = 0x00;\r\n        idat[pi++] = 0x00;\r\n        idat.set(literals.subarray(pos, pos + maxBlockLength), pi);\r\n        pi += maxBlockLength;\r\n        pos += maxBlockLength;\r\n        len -= maxBlockLength;\r\n      }\r\n\r\n      idat[pi++] = 0x01;\r\n      idat[pi++] = len & 0xff;\r\n      idat[pi++] = len >> 8 & 0xff;\r\n      idat[pi++] = ~len & 0xffff & 0xff;\r\n      idat[pi++] = (~len & 0xffff) >> 8 & 0xff;\r\n      idat.set(literals.subarray(pos), pi);\r\n      pi += literals.length - pos;\r\n      var adler = adler32(literals, 0, literals.length);\r\n      idat[pi++] = adler >> 24 & 0xff;\r\n      idat[pi++] = adler >> 16 & 0xff;\r\n      idat[pi++] = adler >> 8 & 0xff;\r\n      idat[pi++] = adler & 0xff;\r\n      return idat;\r\n    }\r\n\r\n    function encode(imgData, kind, forceDataSchema, isMask) {\r\n      var width = imgData.width;\r\n      var height = imgData.height;\r\n      var bitDepth, colorType, lineSize;\r\n      var bytes = imgData.data;\r\n\r\n      switch (kind) {\r\n        case _util.ImageKind.GRAYSCALE_1BPP:\r\n          colorType = 0;\r\n          bitDepth = 1;\r\n          lineSize = width + 7 >> 3;\r\n          break;\r\n\r\n        case _util.ImageKind.RGB_24BPP:\r\n          colorType = 2;\r\n          bitDepth = 8;\r\n          lineSize = width * 3;\r\n          break;\r\n\r\n        case _util.ImageKind.RGBA_32BPP:\r\n          colorType = 6;\r\n          bitDepth = 8;\r\n          lineSize = width * 4;\r\n          break;\r\n\r\n        default:\r\n          throw new Error(\"invalid format\");\r\n      }\r\n\r\n      var literals = new Uint8Array((1 + lineSize) * height);\r\n      var offsetLiterals = 0,\r\n          offsetBytes = 0;\r\n\r\n      for (var y = 0; y < height; ++y) {\r\n        literals[offsetLiterals++] = 0;\r\n        literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals);\r\n        offsetBytes += lineSize;\r\n        offsetLiterals += lineSize;\r\n      }\r\n\r\n      if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) {\r\n        offsetLiterals = 0;\r\n\r\n        for (var _y = 0; _y < height; _y++) {\r\n          offsetLiterals++;\r\n\r\n          for (var _i3 = 0; _i3 < lineSize; _i3++) {\r\n            literals[offsetLiterals++] ^= 0xff;\r\n          }\r\n        }\r\n      }\r\n\r\n      var ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]);\r\n      var idat = deflateSync(literals);\r\n      var pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length;\r\n      var data = new Uint8Array(pngLength);\r\n      var offset = 0;\r\n      data.set(PNG_HEADER, offset);\r\n      offset += PNG_HEADER.length;\r\n      writePngChunk(\"IHDR\", ihdr, data, offset);\r\n      offset += CHUNK_WRAPPER_SIZE + ihdr.length;\r\n      writePngChunk(\"IDATA\", idat, data, offset);\r\n      offset += CHUNK_WRAPPER_SIZE + idat.length;\r\n      writePngChunk(\"IEND\", new Uint8Array(0), data, offset);\r\n      return (0, _util.createObjectURL)(data, \"image/png\", forceDataSchema);\r\n    }\r\n\r\n    return function convertImgDataToPng(imgData, forceDataSchema, isMask) {\r\n      var kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind;\r\n      return encode(imgData, kind, forceDataSchema, isMask);\r\n    };\r\n  }();\r\n\r\n  var SVGExtraState = /*#__PURE__*/function () {\r\n    function SVGExtraState() {\r\n      _classCallCheck(this, SVGExtraState);\r\n\r\n      this.fontSizeScale = 1;\r\n      this.fontWeight = SVG_DEFAULTS.fontWeight;\r\n      this.fontSize = 0;\r\n      this.textMatrix = _util.IDENTITY_MATRIX;\r\n      this.fontMatrix = _util.FONT_IDENTITY_MATRIX;\r\n      this.leading = 0;\r\n      this.textRenderingMode = _util.TextRenderingMode.FILL;\r\n      this.textMatrixScale = 1;\r\n      this.x = 0;\r\n      this.y = 0;\r\n      this.lineX = 0;\r\n      this.lineY = 0;\r\n      this.charSpacing = 0;\r\n      this.wordSpacing = 0;\r\n      this.textHScale = 1;\r\n      this.textRise = 0;\r\n      this.fillColor = SVG_DEFAULTS.fillColor;\r\n      this.strokeColor = \"#000000\";\r\n      this.fillAlpha = 1;\r\n      this.strokeAlpha = 1;\r\n      this.lineWidth = 1;\r\n      this.lineJoin = \"\";\r\n      this.lineCap = \"\";\r\n      this.miterLimit = 0;\r\n      this.dashArray = [];\r\n      this.dashPhase = 0;\r\n      this.dependencies = [];\r\n      this.activeClipUrl = null;\r\n      this.clipGroup = null;\r\n      this.maskId = \"\";\r\n    }\r\n\r\n    _createClass(SVGExtraState, [{\r\n      key: \"clone\",\r\n      value: function clone() {\r\n        return Object.create(this);\r\n      }\r\n    }, {\r\n      key: \"setCurrentPoint\",\r\n      value: function setCurrentPoint(x, y) {\r\n        this.x = x;\r\n        this.y = y;\r\n      }\r\n    }]);\r\n\r\n    return SVGExtraState;\r\n  }();\r\n\r\n  var clipCount = 0;\r\n  var maskCount = 0;\r\n  var shadingCount = 0;\r\n\r\n  exports.SVGGraphics = SVGGraphics = /*#__PURE__*/function () {\r\n    function SVGGraphics(commonObjs, objs) {\r\n      var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n\r\n      _classCallCheck(this, SVGGraphics);\r\n\r\n      this.svgFactory = new _display_utils.DOMSVGFactory();\r\n      this.current = new SVGExtraState();\r\n      this.transformMatrix = _util.IDENTITY_MATRIX;\r\n      this.transformStack = [];\r\n      this.extraStack = [];\r\n      this.commonObjs = commonObjs;\r\n      this.objs = objs;\r\n      this.pendingClip = null;\r\n      this.pendingEOFill = false;\r\n      this.embedFonts = false;\r\n      this.embeddedFonts = Object.create(null);\r\n      this.cssStyle = null;\r\n      this.forceDataSchema = !!forceDataSchema;\r\n      this._operatorIdMapping = [];\r\n\r\n      for (var op in _util.OPS) {\r\n        this._operatorIdMapping[_util.OPS[op]] = op;\r\n      }\r\n    }\r\n\r\n    _createClass(SVGGraphics, [{\r\n      key: \"save\",\r\n      value: function save() {\r\n        this.transformStack.push(this.transformMatrix);\r\n        var old = this.current;\r\n        this.extraStack.push(old);\r\n        this.current = old.clone();\r\n      }\r\n    }, {\r\n      key: \"restore\",\r\n      value: function restore() {\r\n        this.transformMatrix = this.transformStack.pop();\r\n        this.current = this.extraStack.pop();\r\n        this.pendingClip = null;\r\n        this.tgrp = null;\r\n      }\r\n    }, {\r\n      key: \"group\",\r\n      value: function group(items) {\r\n        this.save();\r\n        this.executeOpTree(items);\r\n        this.restore();\r\n      }\r\n    }, {\r\n      key: \"loadDependencies\",\r\n      value: function loadDependencies(operatorList) {\r\n        var _this = this;\r\n\r\n        var fnArray = operatorList.fnArray;\r\n        var argsArray = operatorList.argsArray;\r\n\r\n        for (var i = 0, ii = fnArray.length; i < ii; i++) {\r\n          if (fnArray[i] !== _util.OPS.dependency) {\r\n            continue;\r\n          }\r\n\r\n          var _iterator2 = _createForOfIteratorHelper(argsArray[i]),\r\n              _step2;\r\n\r\n          try {\r\n            var _loop = function _loop() {\r\n              var obj = _step2.value;\r\n              var objsPool = obj.startsWith(\"g_\") ? _this.commonObjs : _this.objs;\r\n              var promise = new Promise(function (resolve) {\r\n                objsPool.get(obj, resolve);\r\n              });\r\n\r\n              _this.current.dependencies.push(promise);\r\n            };\r\n\r\n            for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n              _loop();\r\n            }\r\n          } catch (err) {\r\n            _iterator2.e(err);\r\n          } finally {\r\n            _iterator2.f();\r\n          }\r\n        }\r\n\r\n        return Promise.all(this.current.dependencies);\r\n      }\r\n    }, {\r\n      key: \"transform\",\r\n      value: function transform(a, b, c, d, e, f) {\r\n        var transformMatrix = [a, b, c, d, e, f];\r\n        this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix);\r\n        this.tgrp = null;\r\n      }\r\n    }, {\r\n      key: \"getSVG\",\r\n      value: function getSVG(operatorList, viewport) {\r\n        var _this2 = this;\r\n\r\n        this.viewport = viewport;\r\n\r\n        var svgElement = this._initialize(viewport);\r\n\r\n        return this.loadDependencies(operatorList).then(function () {\r\n          _this2.transformMatrix = _util.IDENTITY_MATRIX;\r\n\r\n          _this2.executeOpTree(_this2.convertOpList(operatorList));\r\n\r\n          return svgElement;\r\n        });\r\n      }\r\n    }, {\r\n      key: \"convertOpList\",\r\n      value: function convertOpList(operatorList) {\r\n        var operatorIdMapping = this._operatorIdMapping;\r\n        var argsArray = operatorList.argsArray;\r\n        var fnArray = operatorList.fnArray;\r\n        var opList = [];\r\n\r\n        for (var i = 0, ii = fnArray.length; i < ii; i++) {\r\n          var fnId = fnArray[i];\r\n          opList.push({\r\n            fnId: fnId,\r\n            fn: operatorIdMapping[fnId],\r\n            args: argsArray[i]\r\n          });\r\n        }\r\n\r\n        return opListToTree(opList);\r\n      }\r\n    }, {\r\n      key: \"executeOpTree\",\r\n      value: function executeOpTree(opTree) {\r\n        var _iterator3 = _createForOfIteratorHelper(opTree),\r\n            _step3;\r\n\r\n        try {\r\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n            var opTreeElement = _step3.value;\r\n            var fn = opTreeElement.fn;\r\n            var fnId = opTreeElement.fnId;\r\n            var args = opTreeElement.args;\r\n\r\n            switch (fnId | 0) {\r\n              case _util.OPS.beginText:\r\n                this.beginText();\r\n                break;\r\n\r\n              case _util.OPS.dependency:\r\n                break;\r\n\r\n              case _util.OPS.setLeading:\r\n                this.setLeading(args);\r\n                break;\r\n\r\n              case _util.OPS.setLeadingMoveText:\r\n                this.setLeadingMoveText(args[0], args[1]);\r\n                break;\r\n\r\n              case _util.OPS.setFont:\r\n                this.setFont(args);\r\n                break;\r\n\r\n              case _util.OPS.showText:\r\n                this.showText(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.showSpacedText:\r\n                this.showText(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.endText:\r\n                this.endText();\r\n                break;\r\n\r\n              case _util.OPS.moveText:\r\n                this.moveText(args[0], args[1]);\r\n                break;\r\n\r\n              case _util.OPS.setCharSpacing:\r\n                this.setCharSpacing(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.setWordSpacing:\r\n                this.setWordSpacing(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.setHScale:\r\n                this.setHScale(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.setTextMatrix:\r\n                this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);\r\n                break;\r\n\r\n              case _util.OPS.setTextRise:\r\n                this.setTextRise(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.setTextRenderingMode:\r\n                this.setTextRenderingMode(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.setLineWidth:\r\n                this.setLineWidth(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.setLineJoin:\r\n                this.setLineJoin(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.setLineCap:\r\n                this.setLineCap(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.setMiterLimit:\r\n                this.setMiterLimit(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.setFillRGBColor:\r\n                this.setFillRGBColor(args[0], args[1], args[2]);\r\n                break;\r\n\r\n              case _util.OPS.setStrokeRGBColor:\r\n                this.setStrokeRGBColor(args[0], args[1], args[2]);\r\n                break;\r\n\r\n              case _util.OPS.setStrokeColorN:\r\n                this.setStrokeColorN(args);\r\n                break;\r\n\r\n              case _util.OPS.setFillColorN:\r\n                this.setFillColorN(args);\r\n                break;\r\n\r\n              case _util.OPS.shadingFill:\r\n                this.shadingFill(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.setDash:\r\n                this.setDash(args[0], args[1]);\r\n                break;\r\n\r\n              case _util.OPS.setRenderingIntent:\r\n                this.setRenderingIntent(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.setFlatness:\r\n                this.setFlatness(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.setGState:\r\n                this.setGState(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.fill:\r\n                this.fill();\r\n                break;\r\n\r\n              case _util.OPS.eoFill:\r\n                this.eoFill();\r\n                break;\r\n\r\n              case _util.OPS.stroke:\r\n                this.stroke();\r\n                break;\r\n\r\n              case _util.OPS.fillStroke:\r\n                this.fillStroke();\r\n                break;\r\n\r\n              case _util.OPS.eoFillStroke:\r\n                this.eoFillStroke();\r\n                break;\r\n\r\n              case _util.OPS.clip:\r\n                this.clip(\"nonzero\");\r\n                break;\r\n\r\n              case _util.OPS.eoClip:\r\n                this.clip(\"evenodd\");\r\n                break;\r\n\r\n              case _util.OPS.paintSolidColorImageMask:\r\n                this.paintSolidColorImageMask();\r\n                break;\r\n\r\n              case _util.OPS.paintImageXObject:\r\n                this.paintImageXObject(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.paintInlineImageXObject:\r\n                this.paintInlineImageXObject(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.paintImageMaskXObject:\r\n                this.paintImageMaskXObject(args[0]);\r\n                break;\r\n\r\n              case _util.OPS.paintFormXObjectBegin:\r\n                this.paintFormXObjectBegin(args[0], args[1]);\r\n                break;\r\n\r\n              case _util.OPS.paintFormXObjectEnd:\r\n                this.paintFormXObjectEnd();\r\n                break;\r\n\r\n              case _util.OPS.closePath:\r\n                this.closePath();\r\n                break;\r\n\r\n              case _util.OPS.closeStroke:\r\n                this.closeStroke();\r\n                break;\r\n\r\n              case _util.OPS.closeFillStroke:\r\n                this.closeFillStroke();\r\n                break;\r\n\r\n              case _util.OPS.closeEOFillStroke:\r\n                this.closeEOFillStroke();\r\n                break;\r\n\r\n              case _util.OPS.nextLine:\r\n                this.nextLine();\r\n                break;\r\n\r\n              case _util.OPS.transform:\r\n                this.transform(args[0], args[1], args[2], args[3], args[4], args[5]);\r\n                break;\r\n\r\n              case _util.OPS.constructPath:\r\n                this.constructPath(args[0], args[1]);\r\n                break;\r\n\r\n              case _util.OPS.endPath:\r\n                this.endPath();\r\n                break;\r\n\r\n              case 92:\r\n                this.group(opTreeElement.items);\r\n                break;\r\n\r\n              default:\r\n                (0, _util.warn)(\"Unimplemented operator \".concat(fn));\r\n                break;\r\n            }\r\n          }\r\n        } catch (err) {\r\n          _iterator3.e(err);\r\n        } finally {\r\n          _iterator3.f();\r\n        }\r\n      }\r\n    }, {\r\n      key: \"setWordSpacing\",\r\n      value: function setWordSpacing(wordSpacing) {\r\n        this.current.wordSpacing = wordSpacing;\r\n      }\r\n    }, {\r\n      key: \"setCharSpacing\",\r\n      value: function setCharSpacing(charSpacing) {\r\n        this.current.charSpacing = charSpacing;\r\n      }\r\n    }, {\r\n      key: \"nextLine\",\r\n      value: function nextLine() {\r\n        this.moveText(0, this.current.leading);\r\n      }\r\n    }, {\r\n      key: \"setTextMatrix\",\r\n      value: function setTextMatrix(a, b, c, d, e, f) {\r\n        var current = this.current;\r\n        current.textMatrix = current.lineMatrix = [a, b, c, d, e, f];\r\n        current.textMatrixScale = Math.sqrt(a * a + b * b);\r\n        current.x = current.lineX = 0;\r\n        current.y = current.lineY = 0;\r\n        current.xcoords = [];\r\n        current.ycoords = [];\r\n        current.tspan = this.svgFactory.createElement(\"svg:tspan\");\r\n        current.tspan.setAttributeNS(null, \"font-family\", current.fontFamily);\r\n        current.tspan.setAttributeNS(null, \"font-size\", \"\".concat(pf(current.fontSize), \"px\"));\r\n        current.tspan.setAttributeNS(null, \"y\", pf(-current.y));\r\n        current.txtElement = this.svgFactory.createElement(\"svg:text\");\r\n        current.txtElement.appendChild(current.tspan);\r\n      }\r\n    }, {\r\n      key: \"beginText\",\r\n      value: function beginText() {\r\n        var current = this.current;\r\n        current.x = current.lineX = 0;\r\n        current.y = current.lineY = 0;\r\n        current.textMatrix = _util.IDENTITY_MATRIX;\r\n        current.lineMatrix = _util.IDENTITY_MATRIX;\r\n        current.textMatrixScale = 1;\r\n        current.tspan = this.svgFactory.createElement(\"svg:tspan\");\r\n        current.txtElement = this.svgFactory.createElement(\"svg:text\");\r\n        current.txtgrp = this.svgFactory.createElement(\"svg:g\");\r\n        current.xcoords = [];\r\n        current.ycoords = [];\r\n      }\r\n    }, {\r\n      key: \"moveText\",\r\n      value: function moveText(x, y) {\r\n        var current = this.current;\r\n        current.x = current.lineX += x;\r\n        current.y = current.lineY += y;\r\n        current.xcoords = [];\r\n        current.ycoords = [];\r\n        current.tspan = this.svgFactory.createElement(\"svg:tspan\");\r\n        current.tspan.setAttributeNS(null, \"font-family\", current.fontFamily);\r\n        current.tspan.setAttributeNS(null, \"font-size\", \"\".concat(pf(current.fontSize), \"px\"));\r\n        current.tspan.setAttributeNS(null, \"y\", pf(-current.y));\r\n      }\r\n    }, {\r\n      key: \"showText\",\r\n      value: function showText(glyphs) {\r\n        var current = this.current;\r\n        var font = current.font;\r\n        var fontSize = current.fontSize;\r\n\r\n        if (fontSize === 0) {\r\n          return;\r\n        }\r\n\r\n        var fontSizeScale = current.fontSizeScale;\r\n        var charSpacing = current.charSpacing;\r\n        var wordSpacing = current.wordSpacing;\r\n        var fontDirection = current.fontDirection;\r\n        var textHScale = current.textHScale * fontDirection;\r\n        var vertical = font.vertical;\r\n        var spacingDir = vertical ? 1 : -1;\r\n        var defaultVMetrics = font.defaultVMetrics;\r\n        var widthAdvanceScale = fontSize * current.fontMatrix[0];\r\n        var x = 0;\r\n\r\n        var _iterator4 = _createForOfIteratorHelper(glyphs),\r\n            _step4;\r\n\r\n        try {\r\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\r\n            var glyph = _step4.value;\r\n\r\n            if (glyph === null) {\r\n              x += fontDirection * wordSpacing;\r\n              continue;\r\n            } else if ((0, _util.isNum)(glyph)) {\r\n              x += spacingDir * glyph * fontSize / 1000;\r\n              continue;\r\n            }\r\n\r\n            var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;\r\n            var character = glyph.fontChar;\r\n            var scaledX = void 0,\r\n                scaledY = void 0;\r\n            var width = glyph.width;\r\n\r\n            if (vertical) {\r\n              var vx = void 0;\r\n              var vmetric = glyph.vmetric || defaultVMetrics;\r\n              vx = glyph.vmetric ? vmetric[1] : width * 0.5;\r\n              vx = -vx * widthAdvanceScale;\r\n              var vy = vmetric[2] * widthAdvanceScale;\r\n              width = vmetric ? -vmetric[0] : width;\r\n              scaledX = vx / fontSizeScale;\r\n              scaledY = (x + vy) / fontSizeScale;\r\n            } else {\r\n              scaledX = x / fontSizeScale;\r\n              scaledY = 0;\r\n            }\r\n\r\n            if (glyph.isInFont || font.missingFile) {\r\n              current.xcoords.push(current.x + scaledX);\r\n\r\n              if (vertical) {\r\n                current.ycoords.push(-current.y + scaledY);\r\n              }\r\n\r\n              current.tspan.textContent += character;\r\n            } else {}\r\n\r\n            var charWidth = void 0;\r\n\r\n            if (vertical) {\r\n              charWidth = width * widthAdvanceScale - spacing * fontDirection;\r\n            } else {\r\n              charWidth = width * widthAdvanceScale + spacing * fontDirection;\r\n            }\r\n\r\n            x += charWidth;\r\n          }\r\n        } catch (err) {\r\n          _iterator4.e(err);\r\n        } finally {\r\n          _iterator4.f();\r\n        }\r\n\r\n        current.tspan.setAttributeNS(null, \"x\", current.xcoords.map(pf).join(\" \"));\r\n\r\n        if (vertical) {\r\n          current.tspan.setAttributeNS(null, \"y\", current.ycoords.map(pf).join(\" \"));\r\n        } else {\r\n          current.tspan.setAttributeNS(null, \"y\", pf(-current.y));\r\n        }\r\n\r\n        if (vertical) {\r\n          current.y -= x;\r\n        } else {\r\n          current.x += x * textHScale;\r\n        }\r\n\r\n        current.tspan.setAttributeNS(null, \"font-family\", current.fontFamily);\r\n        current.tspan.setAttributeNS(null, \"font-size\", \"\".concat(pf(current.fontSize), \"px\"));\r\n\r\n        if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {\r\n          current.tspan.setAttributeNS(null, \"font-style\", current.fontStyle);\r\n        }\r\n\r\n        if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {\r\n          current.tspan.setAttributeNS(null, \"font-weight\", current.fontWeight);\r\n        }\r\n\r\n        var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;\r\n\r\n        if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\r\n          if (current.fillColor !== SVG_DEFAULTS.fillColor) {\r\n            current.tspan.setAttributeNS(null, \"fill\", current.fillColor);\r\n          }\r\n\r\n          if (current.fillAlpha < 1) {\r\n            current.tspan.setAttributeNS(null, \"fill-opacity\", current.fillAlpha);\r\n          }\r\n        } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) {\r\n          current.tspan.setAttributeNS(null, \"fill\", \"transparent\");\r\n        } else {\r\n          current.tspan.setAttributeNS(null, \"fill\", \"none\");\r\n        }\r\n\r\n        if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {\r\n          var lineWidthScale = 1 / (current.textMatrixScale || 1);\r\n\r\n          this._setStrokeAttributes(current.tspan, lineWidthScale);\r\n        }\r\n\r\n        var textMatrix = current.textMatrix;\r\n\r\n        if (current.textRise !== 0) {\r\n          textMatrix = textMatrix.slice();\r\n          textMatrix[5] += current.textRise;\r\n        }\r\n\r\n        current.txtElement.setAttributeNS(null, \"transform\", \"\".concat(pm(textMatrix), \" scale(\").concat(pf(textHScale), \", -1)\"));\r\n        current.txtElement.setAttributeNS(XML_NS, \"xml:space\", \"preserve\");\r\n        current.txtElement.appendChild(current.tspan);\r\n        current.txtgrp.appendChild(current.txtElement);\r\n\r\n        this._ensureTransformGroup().appendChild(current.txtElement);\r\n      }\r\n    }, {\r\n      key: \"setLeadingMoveText\",\r\n      value: function setLeadingMoveText(x, y) {\r\n        this.setLeading(-y);\r\n        this.moveText(x, y);\r\n      }\r\n    }, {\r\n      key: \"addFontStyle\",\r\n      value: function addFontStyle(fontObj) {\r\n        if (!fontObj.data) {\r\n          throw new Error(\"addFontStyle: No font data available, \" + 'ensure that the \"fontExtraProperties\" API parameter is set.');\r\n        }\r\n\r\n        if (!this.cssStyle) {\r\n          this.cssStyle = this.svgFactory.createElement(\"svg:style\");\r\n          this.cssStyle.setAttributeNS(null, \"type\", \"text/css\");\r\n          this.defs.appendChild(this.cssStyle);\r\n        }\r\n\r\n        var url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema);\r\n        this.cssStyle.textContent += \"@font-face { font-family: \\\"\".concat(fontObj.loadedName, \"\\\";\") + \" src: url(\".concat(url, \"); }\\n\");\r\n      }\r\n    }, {\r\n      key: \"setFont\",\r\n      value: function setFont(details) {\r\n        var current = this.current;\r\n        var fontObj = this.commonObjs.get(details[0]);\r\n        var size = details[1];\r\n        current.font = fontObj;\r\n\r\n        if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) {\r\n          this.addFontStyle(fontObj);\r\n          this.embeddedFonts[fontObj.loadedName] = fontObj;\r\n        }\r\n\r\n        current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;\r\n        var bold = \"normal\";\r\n\r\n        if (fontObj.black) {\r\n          bold = \"900\";\r\n        } else if (fontObj.bold) {\r\n          bold = \"bold\";\r\n        }\r\n\r\n        var italic = fontObj.italic ? \"italic\" : \"normal\";\r\n\r\n        if (size < 0) {\r\n          size = -size;\r\n          current.fontDirection = -1;\r\n        } else {\r\n          current.fontDirection = 1;\r\n        }\r\n\r\n        current.fontSize = size;\r\n        current.fontFamily = fontObj.loadedName;\r\n        current.fontWeight = bold;\r\n        current.fontStyle = italic;\r\n        current.tspan = this.svgFactory.createElement(\"svg:tspan\");\r\n        current.tspan.setAttributeNS(null, \"y\", pf(-current.y));\r\n        current.xcoords = [];\r\n        current.ycoords = [];\r\n      }\r\n    }, {\r\n      key: \"endText\",\r\n      value: function endText() {\r\n        var _current$txtElement;\r\n\r\n        var current = this.current;\r\n\r\n        if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && (_current$txtElement = current.txtElement) !== null && _current$txtElement !== void 0 && _current$txtElement.hasChildNodes()) {\r\n          current.element = current.txtElement;\r\n          this.clip(\"nonzero\");\r\n          this.endPath();\r\n        }\r\n      }\r\n    }, {\r\n      key: \"setLineWidth\",\r\n      value: function setLineWidth(width) {\r\n        if (width > 0) {\r\n          this.current.lineWidth = width;\r\n        }\r\n      }\r\n    }, {\r\n      key: \"setLineCap\",\r\n      value: function setLineCap(style) {\r\n        this.current.lineCap = LINE_CAP_STYLES[style];\r\n      }\r\n    }, {\r\n      key: \"setLineJoin\",\r\n      value: function setLineJoin(style) {\r\n        this.current.lineJoin = LINE_JOIN_STYLES[style];\r\n      }\r\n    }, {\r\n      key: \"setMiterLimit\",\r\n      value: function setMiterLimit(limit) {\r\n        this.current.miterLimit = limit;\r\n      }\r\n    }, {\r\n      key: \"setStrokeAlpha\",\r\n      value: function setStrokeAlpha(strokeAlpha) {\r\n        this.current.strokeAlpha = strokeAlpha;\r\n      }\r\n    }, {\r\n      key: \"setStrokeRGBColor\",\r\n      value: function setStrokeRGBColor(r, g, b) {\r\n        this.current.strokeColor = _util.Util.makeHexColor(r, g, b);\r\n      }\r\n    }, {\r\n      key: \"setFillAlpha\",\r\n      value: function setFillAlpha(fillAlpha) {\r\n        this.current.fillAlpha = fillAlpha;\r\n      }\r\n    }, {\r\n      key: \"setFillRGBColor\",\r\n      value: function setFillRGBColor(r, g, b) {\r\n        this.current.fillColor = _util.Util.makeHexColor(r, g, b);\r\n        this.current.tspan = this.svgFactory.createElement(\"svg:tspan\");\r\n        this.current.xcoords = [];\r\n        this.current.ycoords = [];\r\n      }\r\n    }, {\r\n      key: \"setStrokeColorN\",\r\n      value: function setStrokeColorN(args) {\r\n        this.current.strokeColor = this._makeColorN_Pattern(args);\r\n      }\r\n    }, {\r\n      key: \"setFillColorN\",\r\n      value: function setFillColorN(args) {\r\n        this.current.fillColor = this._makeColorN_Pattern(args);\r\n      }\r\n    }, {\r\n      key: \"shadingFill\",\r\n      value: function shadingFill(args) {\r\n        var width = this.viewport.width;\r\n        var height = this.viewport.height;\r\n\r\n        var inv = _util.Util.inverseTransform(this.transformMatrix);\r\n\r\n        var bl = _util.Util.applyTransform([0, 0], inv);\r\n\r\n        var br = _util.Util.applyTransform([0, height], inv);\r\n\r\n        var ul = _util.Util.applyTransform([width, 0], inv);\r\n\r\n        var ur = _util.Util.applyTransform([width, height], inv);\r\n\r\n        var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);\r\n        var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);\r\n        var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);\r\n        var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);\r\n        var rect = this.svgFactory.createElement(\"svg:rect\");\r\n        rect.setAttributeNS(null, \"x\", x0);\r\n        rect.setAttributeNS(null, \"y\", y0);\r\n        rect.setAttributeNS(null, \"width\", x1 - x0);\r\n        rect.setAttributeNS(null, \"height\", y1 - y0);\r\n        rect.setAttributeNS(null, \"fill\", this._makeShadingPattern(args));\r\n\r\n        if (this.current.fillAlpha < 1) {\r\n          rect.setAttributeNS(null, \"fill-opacity\", this.current.fillAlpha);\r\n        }\r\n\r\n        this._ensureTransformGroup().appendChild(rect);\r\n      }\r\n    }, {\r\n      key: \"_makeColorN_Pattern\",\r\n      value: function _makeColorN_Pattern(args) {\r\n        if (args[0] === \"TilingPattern\") {\r\n          return this._makeTilingPattern(args);\r\n        }\r\n\r\n        return this._makeShadingPattern(args);\r\n      }\r\n    }, {\r\n      key: \"_makeTilingPattern\",\r\n      value: function _makeTilingPattern(args) {\r\n        var color = args[1];\r\n        var operatorList = args[2];\r\n        var matrix = args[3] || _util.IDENTITY_MATRIX;\r\n\r\n        var _args$ = _slicedToArray(args[4], 4),\r\n            x0 = _args$[0],\r\n            y0 = _args$[1],\r\n            x1 = _args$[2],\r\n            y1 = _args$[3];\r\n\r\n        var xstep = args[5];\r\n        var ystep = args[6];\r\n        var paintType = args[7];\r\n        var tilingId = \"shading\".concat(shadingCount++);\r\n\r\n        var _Util$applyTransform = _util.Util.applyTransform([x0, y0], matrix),\r\n            _Util$applyTransform2 = _slicedToArray(_Util$applyTransform, 2),\r\n            tx0 = _Util$applyTransform2[0],\r\n            ty0 = _Util$applyTransform2[1];\r\n\r\n        var _Util$applyTransform3 = _util.Util.applyTransform([x1, y1], matrix),\r\n            _Util$applyTransform4 = _slicedToArray(_Util$applyTransform3, 2),\r\n            tx1 = _Util$applyTransform4[0],\r\n            ty1 = _Util$applyTransform4[1];\r\n\r\n        var _Util$singularValueDe = _util.Util.singularValueDecompose2dScale(matrix),\r\n            _Util$singularValueDe2 = _slicedToArray(_Util$singularValueDe, 2),\r\n            xscale = _Util$singularValueDe2[0],\r\n            yscale = _Util$singularValueDe2[1];\r\n\r\n        var txstep = xstep * xscale;\r\n        var tystep = ystep * yscale;\r\n        var tiling = this.svgFactory.createElement(\"svg:pattern\");\r\n        tiling.setAttributeNS(null, \"id\", tilingId);\r\n        tiling.setAttributeNS(null, \"patternUnits\", \"userSpaceOnUse\");\r\n        tiling.setAttributeNS(null, \"width\", txstep);\r\n        tiling.setAttributeNS(null, \"height\", tystep);\r\n        tiling.setAttributeNS(null, \"x\", \"\".concat(tx0));\r\n        tiling.setAttributeNS(null, \"y\", \"\".concat(ty0));\r\n        var svg = this.svg;\r\n        var transformMatrix = this.transformMatrix;\r\n        var fillColor = this.current.fillColor;\r\n        var strokeColor = this.current.strokeColor;\r\n        var bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0);\r\n        this.svg = bbox;\r\n        this.transformMatrix = matrix;\r\n\r\n        if (paintType === 2) {\r\n          var cssColor = _util.Util.makeHexColor.apply(_util.Util, _toConsumableArray(color));\r\n\r\n          this.current.fillColor = cssColor;\r\n          this.current.strokeColor = cssColor;\r\n        }\r\n\r\n        this.executeOpTree(this.convertOpList(operatorList));\r\n        this.svg = svg;\r\n        this.transformMatrix = transformMatrix;\r\n        this.current.fillColor = fillColor;\r\n        this.current.strokeColor = strokeColor;\r\n        tiling.appendChild(bbox.childNodes[0]);\r\n        this.defs.appendChild(tiling);\r\n        return \"url(#\".concat(tilingId, \")\");\r\n      }\r\n    }, {\r\n      key: \"_makeShadingPattern\",\r\n      value: function _makeShadingPattern(args) {\r\n        switch (args[0]) {\r\n          case \"RadialAxial\":\r\n            var shadingId = \"shading\".concat(shadingCount++);\r\n            var colorStops = args[3];\r\n            var gradient;\r\n\r\n            switch (args[1]) {\r\n              case \"axial\":\r\n                var point0 = args[4];\r\n                var point1 = args[5];\r\n                gradient = this.svgFactory.createElement(\"svg:linearGradient\");\r\n                gradient.setAttributeNS(null, \"id\", shadingId);\r\n                gradient.setAttributeNS(null, \"gradientUnits\", \"userSpaceOnUse\");\r\n                gradient.setAttributeNS(null, \"x1\", point0[0]);\r\n                gradient.setAttributeNS(null, \"y1\", point0[1]);\r\n                gradient.setAttributeNS(null, \"x2\", point1[0]);\r\n                gradient.setAttributeNS(null, \"y2\", point1[1]);\r\n                break;\r\n\r\n              case \"radial\":\r\n                var focalPoint = args[4];\r\n                var circlePoint = args[5];\r\n                var focalRadius = args[6];\r\n                var circleRadius = args[7];\r\n                gradient = this.svgFactory.createElement(\"svg:radialGradient\");\r\n                gradient.setAttributeNS(null, \"id\", shadingId);\r\n                gradient.setAttributeNS(null, \"gradientUnits\", \"userSpaceOnUse\");\r\n                gradient.setAttributeNS(null, \"cx\", circlePoint[0]);\r\n                gradient.setAttributeNS(null, \"cy\", circlePoint[1]);\r\n                gradient.setAttributeNS(null, \"r\", circleRadius);\r\n                gradient.setAttributeNS(null, \"fx\", focalPoint[0]);\r\n                gradient.setAttributeNS(null, \"fy\", focalPoint[1]);\r\n                gradient.setAttributeNS(null, \"fr\", focalRadius);\r\n                break;\r\n\r\n              default:\r\n                throw new Error(\"Unknown RadialAxial type: \".concat(args[1]));\r\n            }\r\n\r\n            var _iterator5 = _createForOfIteratorHelper(colorStops),\r\n                _step5;\r\n\r\n            try {\r\n              for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\r\n                var colorStop = _step5.value;\r\n                var stop = this.svgFactory.createElement(\"svg:stop\");\r\n                stop.setAttributeNS(null, \"offset\", colorStop[0]);\r\n                stop.setAttributeNS(null, \"stop-color\", colorStop[1]);\r\n                gradient.appendChild(stop);\r\n              }\r\n            } catch (err) {\r\n              _iterator5.e(err);\r\n            } finally {\r\n              _iterator5.f();\r\n            }\r\n\r\n            this.defs.appendChild(gradient);\r\n            return \"url(#\".concat(shadingId, \")\");\r\n\r\n          case \"Mesh\":\r\n            (0, _util.warn)(\"Unimplemented pattern Mesh\");\r\n            return null;\r\n\r\n          case \"Dummy\":\r\n            return \"hotpink\";\r\n\r\n          default:\r\n            throw new Error(\"Unknown IR type: \".concat(args[0]));\r\n        }\r\n      }\r\n    }, {\r\n      key: \"setDash\",\r\n      value: function setDash(dashArray, dashPhase) {\r\n        this.current.dashArray = dashArray;\r\n        this.current.dashPhase = dashPhase;\r\n      }\r\n    }, {\r\n      key: \"constructPath\",\r\n      value: function constructPath(ops, args) {\r\n        var current = this.current;\r\n        var x = current.x,\r\n            y = current.y;\r\n        var d = [];\r\n        var j = 0;\r\n\r\n        var _iterator6 = _createForOfIteratorHelper(ops),\r\n            _step6;\r\n\r\n        try {\r\n          for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\r\n            var op = _step6.value;\r\n\r\n            switch (op | 0) {\r\n              case _util.OPS.rectangle:\r\n                x = args[j++];\r\n                y = args[j++];\r\n                var width = args[j++];\r\n                var height = args[j++];\r\n                var xw = x + width;\r\n                var yh = y + height;\r\n                d.push(\"M\", pf(x), pf(y), \"L\", pf(xw), pf(y), \"L\", pf(xw), pf(yh), \"L\", pf(x), pf(yh), \"Z\");\r\n                break;\r\n\r\n              case _util.OPS.moveTo:\r\n                x = args[j++];\r\n                y = args[j++];\r\n                d.push(\"M\", pf(x), pf(y));\r\n                break;\r\n\r\n              case _util.OPS.lineTo:\r\n                x = args[j++];\r\n                y = args[j++];\r\n                d.push(\"L\", pf(x), pf(y));\r\n                break;\r\n\r\n              case _util.OPS.curveTo:\r\n                x = args[j + 4];\r\n                y = args[j + 5];\r\n                d.push(\"C\", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y));\r\n                j += 6;\r\n                break;\r\n\r\n              case _util.OPS.curveTo2:\r\n                d.push(\"C\", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]));\r\n                x = args[j + 2];\r\n                y = args[j + 3];\r\n                j += 4;\r\n                break;\r\n\r\n              case _util.OPS.curveTo3:\r\n                x = args[j + 2];\r\n                y = args[j + 3];\r\n                d.push(\"C\", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y));\r\n                j += 4;\r\n                break;\r\n\r\n              case _util.OPS.closePath:\r\n                d.push(\"Z\");\r\n                break;\r\n            }\r\n          }\r\n        } catch (err) {\r\n          _iterator6.e(err);\r\n        } finally {\r\n          _iterator6.f();\r\n        }\r\n\r\n        d = d.join(\" \");\r\n\r\n        if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) {\r\n          d = current.path.getAttributeNS(null, \"d\") + d;\r\n        } else {\r\n          current.path = this.svgFactory.createElement(\"svg:path\");\r\n\r\n          this._ensureTransformGroup().appendChild(current.path);\r\n        }\r\n\r\n        current.path.setAttributeNS(null, \"d\", d);\r\n        current.path.setAttributeNS(null, \"fill\", \"none\");\r\n        current.element = current.path;\r\n        current.setCurrentPoint(x, y);\r\n      }\r\n    }, {\r\n      key: \"endPath\",\r\n      value: function endPath() {\r\n        var current = this.current;\r\n        current.path = null;\r\n\r\n        if (!this.pendingClip) {\r\n          return;\r\n        }\r\n\r\n        if (!current.element) {\r\n          this.pendingClip = null;\r\n          return;\r\n        }\r\n\r\n        var clipId = \"clippath\".concat(clipCount++);\r\n        var clipPath = this.svgFactory.createElement(\"svg:clipPath\");\r\n        clipPath.setAttributeNS(null, \"id\", clipId);\r\n        clipPath.setAttributeNS(null, \"transform\", pm(this.transformMatrix));\r\n        var clipElement = current.element.cloneNode(true);\r\n\r\n        if (this.pendingClip === \"evenodd\") {\r\n          clipElement.setAttributeNS(null, \"clip-rule\", \"evenodd\");\r\n        } else {\r\n          clipElement.setAttributeNS(null, \"clip-rule\", \"nonzero\");\r\n        }\r\n\r\n        this.pendingClip = null;\r\n        clipPath.appendChild(clipElement);\r\n        this.defs.appendChild(clipPath);\r\n\r\n        if (current.activeClipUrl) {\r\n          current.clipGroup = null;\r\n          this.extraStack.forEach(function (prev) {\r\n            prev.clipGroup = null;\r\n          });\r\n          clipPath.setAttributeNS(null, \"clip-path\", current.activeClipUrl);\r\n        }\r\n\r\n        current.activeClipUrl = \"url(#\".concat(clipId, \")\");\r\n        this.tgrp = null;\r\n      }\r\n    }, {\r\n      key: \"clip\",\r\n      value: function clip(type) {\r\n        this.pendingClip = type;\r\n      }\r\n    }, {\r\n      key: \"closePath\",\r\n      value: function closePath() {\r\n        var current = this.current;\r\n\r\n        if (current.path) {\r\n          var d = \"\".concat(current.path.getAttributeNS(null, \"d\"), \"Z\");\r\n          current.path.setAttributeNS(null, \"d\", d);\r\n        }\r\n      }\r\n    }, {\r\n      key: \"setLeading\",\r\n      value: function setLeading(leading) {\r\n        this.current.leading = -leading;\r\n      }\r\n    }, {\r\n      key: \"setTextRise\",\r\n      value: function setTextRise(textRise) {\r\n        this.current.textRise = textRise;\r\n      }\r\n    }, {\r\n      key: \"setTextRenderingMode\",\r\n      value: function setTextRenderingMode(textRenderingMode) {\r\n        this.current.textRenderingMode = textRenderingMode;\r\n      }\r\n    }, {\r\n      key: \"setHScale\",\r\n      value: function setHScale(scale) {\r\n        this.current.textHScale = scale / 100;\r\n      }\r\n    }, {\r\n      key: \"setRenderingIntent\",\r\n      value: function setRenderingIntent(intent) {}\r\n    }, {\r\n      key: \"setFlatness\",\r\n      value: function setFlatness(flatness) {}\r\n    }, {\r\n      key: \"setGState\",\r\n      value: function setGState(states) {\r\n        var _iterator7 = _createForOfIteratorHelper(states),\r\n            _step7;\r\n\r\n        try {\r\n          for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\r\n            var _step7$value = _slicedToArray(_step7.value, 2),\r\n                key = _step7$value[0],\r\n                value = _step7$value[1];\r\n\r\n            switch (key) {\r\n              case \"LW\":\r\n                this.setLineWidth(value);\r\n                break;\r\n\r\n              case \"LC\":\r\n                this.setLineCap(value);\r\n                break;\r\n\r\n              case \"LJ\":\r\n                this.setLineJoin(value);\r\n                break;\r\n\r\n              case \"ML\":\r\n                this.setMiterLimit(value);\r\n                break;\r\n\r\n              case \"D\":\r\n                this.setDash(value[0], value[1]);\r\n                break;\r\n\r\n              case \"RI\":\r\n                this.setRenderingIntent(value);\r\n                break;\r\n\r\n              case \"FL\":\r\n                this.setFlatness(value);\r\n                break;\r\n\r\n              case \"Font\":\r\n                this.setFont(value);\r\n                break;\r\n\r\n              case \"CA\":\r\n                this.setStrokeAlpha(value);\r\n                break;\r\n\r\n              case \"ca\":\r\n                this.setFillAlpha(value);\r\n                break;\r\n\r\n              default:\r\n                (0, _util.warn)(\"Unimplemented graphic state operator \".concat(key));\r\n                break;\r\n            }\r\n          }\r\n        } catch (err) {\r\n          _iterator7.e(err);\r\n        } finally {\r\n          _iterator7.f();\r\n        }\r\n      }\r\n    }, {\r\n      key: \"fill\",\r\n      value: function fill() {\r\n        var current = this.current;\r\n\r\n        if (current.element) {\r\n          current.element.setAttributeNS(null, \"fill\", current.fillColor);\r\n          current.element.setAttributeNS(null, \"fill-opacity\", current.fillAlpha);\r\n          this.endPath();\r\n        }\r\n      }\r\n    }, {\r\n      key: \"stroke\",\r\n      value: function stroke() {\r\n        var current = this.current;\r\n\r\n        if (current.element) {\r\n          this._setStrokeAttributes(current.element);\r\n\r\n          current.element.setAttributeNS(null, \"fill\", \"none\");\r\n          this.endPath();\r\n        }\r\n      }\r\n    }, {\r\n      key: \"_setStrokeAttributes\",\r\n      value: function _setStrokeAttributes(element) {\r\n        var lineWidthScale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\r\n        var current = this.current;\r\n        var dashArray = current.dashArray;\r\n\r\n        if (lineWidthScale !== 1 && dashArray.length > 0) {\r\n          dashArray = dashArray.map(function (value) {\r\n            return lineWidthScale * value;\r\n          });\r\n        }\r\n\r\n        element.setAttributeNS(null, \"stroke\", current.strokeColor);\r\n        element.setAttributeNS(null, \"stroke-opacity\", current.strokeAlpha);\r\n        element.setAttributeNS(null, \"stroke-miterlimit\", pf(current.miterLimit));\r\n        element.setAttributeNS(null, \"stroke-linecap\", current.lineCap);\r\n        element.setAttributeNS(null, \"stroke-linejoin\", current.lineJoin);\r\n        element.setAttributeNS(null, \"stroke-width\", pf(lineWidthScale * current.lineWidth) + \"px\");\r\n        element.setAttributeNS(null, \"stroke-dasharray\", dashArray.map(pf).join(\" \"));\r\n        element.setAttributeNS(null, \"stroke-dashoffset\", pf(lineWidthScale * current.dashPhase) + \"px\");\r\n      }\r\n    }, {\r\n      key: \"eoFill\",\r\n      value: function eoFill() {\r\n        if (this.current.element) {\r\n          this.current.element.setAttributeNS(null, \"fill-rule\", \"evenodd\");\r\n        }\r\n\r\n        this.fill();\r\n      }\r\n    }, {\r\n      key: \"fillStroke\",\r\n      value: function fillStroke() {\r\n        this.stroke();\r\n        this.fill();\r\n      }\r\n    }, {\r\n      key: \"eoFillStroke\",\r\n      value: function eoFillStroke() {\r\n        if (this.current.element) {\r\n          this.current.element.setAttributeNS(null, \"fill-rule\", \"evenodd\");\r\n        }\r\n\r\n        this.fillStroke();\r\n      }\r\n    }, {\r\n      key: \"closeStroke\",\r\n      value: function closeStroke() {\r\n        this.closePath();\r\n        this.stroke();\r\n      }\r\n    }, {\r\n      key: \"closeFillStroke\",\r\n      value: function closeFillStroke() {\r\n        this.closePath();\r\n        this.fillStroke();\r\n      }\r\n    }, {\r\n      key: \"closeEOFillStroke\",\r\n      value: function closeEOFillStroke() {\r\n        this.closePath();\r\n        this.eoFillStroke();\r\n      }\r\n    }, {\r\n      key: \"paintSolidColorImageMask\",\r\n      value: function paintSolidColorImageMask() {\r\n        var rect = this.svgFactory.createElement(\"svg:rect\");\r\n        rect.setAttributeNS(null, \"x\", \"0\");\r\n        rect.setAttributeNS(null, \"y\", \"0\");\r\n        rect.setAttributeNS(null, \"width\", \"1px\");\r\n        rect.setAttributeNS(null, \"height\", \"1px\");\r\n        rect.setAttributeNS(null, \"fill\", this.current.fillColor);\r\n\r\n        this._ensureTransformGroup().appendChild(rect);\r\n      }\r\n    }, {\r\n      key: \"paintImageXObject\",\r\n      value: function paintImageXObject(objId) {\r\n        var imgData = objId.startsWith(\"g_\") ? this.commonObjs.get(objId) : this.objs.get(objId);\r\n\r\n        if (!imgData) {\r\n          (0, _util.warn)(\"Dependent image with object ID \".concat(objId, \" is not ready yet\"));\r\n          return;\r\n        }\r\n\r\n        this.paintInlineImageXObject(imgData);\r\n      }\r\n    }, {\r\n      key: \"paintInlineImageXObject\",\r\n      value: function paintInlineImageXObject(imgData, mask) {\r\n        var width = imgData.width;\r\n        var height = imgData.height;\r\n        var imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask);\r\n        var cliprect = this.svgFactory.createElement(\"svg:rect\");\r\n        cliprect.setAttributeNS(null, \"x\", \"0\");\r\n        cliprect.setAttributeNS(null, \"y\", \"0\");\r\n        cliprect.setAttributeNS(null, \"width\", pf(width));\r\n        cliprect.setAttributeNS(null, \"height\", pf(height));\r\n        this.current.element = cliprect;\r\n        this.clip(\"nonzero\");\r\n        var imgEl = this.svgFactory.createElement(\"svg:image\");\r\n        imgEl.setAttributeNS(XLINK_NS, \"xlink:href\", imgSrc);\r\n        imgEl.setAttributeNS(null, \"x\", \"0\");\r\n        imgEl.setAttributeNS(null, \"y\", pf(-height));\r\n        imgEl.setAttributeNS(null, \"width\", pf(width) + \"px\");\r\n        imgEl.setAttributeNS(null, \"height\", pf(height) + \"px\");\r\n        imgEl.setAttributeNS(null, \"transform\", \"scale(\".concat(pf(1 / width), \" \").concat(pf(-1 / height), \")\"));\r\n\r\n        if (mask) {\r\n          mask.appendChild(imgEl);\r\n        } else {\r\n          this._ensureTransformGroup().appendChild(imgEl);\r\n        }\r\n      }\r\n    }, {\r\n      key: \"paintImageMaskXObject\",\r\n      value: function paintImageMaskXObject(imgData) {\r\n        var current = this.current;\r\n        var width = imgData.width;\r\n        var height = imgData.height;\r\n        var fillColor = current.fillColor;\r\n        current.maskId = \"mask\".concat(maskCount++);\r\n        var mask = this.svgFactory.createElement(\"svg:mask\");\r\n        mask.setAttributeNS(null, \"id\", current.maskId);\r\n        var rect = this.svgFactory.createElement(\"svg:rect\");\r\n        rect.setAttributeNS(null, \"x\", \"0\");\r\n        rect.setAttributeNS(null, \"y\", \"0\");\r\n        rect.setAttributeNS(null, \"width\", pf(width));\r\n        rect.setAttributeNS(null, \"height\", pf(height));\r\n        rect.setAttributeNS(null, \"fill\", fillColor);\r\n        rect.setAttributeNS(null, \"mask\", \"url(#\".concat(current.maskId, \")\"));\r\n        this.defs.appendChild(mask);\r\n\r\n        this._ensureTransformGroup().appendChild(rect);\r\n\r\n        this.paintInlineImageXObject(imgData, mask);\r\n      }\r\n    }, {\r\n      key: \"paintFormXObjectBegin\",\r\n      value: function paintFormXObjectBegin(matrix, bbox) {\r\n        if (Array.isArray(matrix) && matrix.length === 6) {\r\n          this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);\r\n        }\r\n\r\n        if (bbox) {\r\n          var width = bbox[2] - bbox[0];\r\n          var height = bbox[3] - bbox[1];\r\n          var cliprect = this.svgFactory.createElement(\"svg:rect\");\r\n          cliprect.setAttributeNS(null, \"x\", bbox[0]);\r\n          cliprect.setAttributeNS(null, \"y\", bbox[1]);\r\n          cliprect.setAttributeNS(null, \"width\", pf(width));\r\n          cliprect.setAttributeNS(null, \"height\", pf(height));\r\n          this.current.element = cliprect;\r\n          this.clip(\"nonzero\");\r\n          this.endPath();\r\n        }\r\n      }\r\n    }, {\r\n      key: \"paintFormXObjectEnd\",\r\n      value: function paintFormXObjectEnd() {}\r\n    }, {\r\n      key: \"_initialize\",\r\n      value: function _initialize(viewport) {\r\n        var svg = this.svgFactory.create(viewport.width, viewport.height);\r\n        var definitions = this.svgFactory.createElement(\"svg:defs\");\r\n        svg.appendChild(definitions);\r\n        this.defs = definitions;\r\n        var rootGroup = this.svgFactory.createElement(\"svg:g\");\r\n        rootGroup.setAttributeNS(null, \"transform\", pm(viewport.transform));\r\n        svg.appendChild(rootGroup);\r\n        this.svg = rootGroup;\r\n        return svg;\r\n      }\r\n    }, {\r\n      key: \"_ensureClipGroup\",\r\n      value: function _ensureClipGroup() {\r\n        if (!this.current.clipGroup) {\r\n          var clipGroup = this.svgFactory.createElement(\"svg:g\");\r\n          clipGroup.setAttributeNS(null, \"clip-path\", this.current.activeClipUrl);\r\n          this.svg.appendChild(clipGroup);\r\n          this.current.clipGroup = clipGroup;\r\n        }\r\n\r\n        return this.current.clipGroup;\r\n      }\r\n    }, {\r\n      key: \"_ensureTransformGroup\",\r\n      value: function _ensureTransformGroup() {\r\n        if (!this.tgrp) {\r\n          this.tgrp = this.svgFactory.createElement(\"svg:g\");\r\n          this.tgrp.setAttributeNS(null, \"transform\", pm(this.transformMatrix));\r\n\r\n          if (this.current.activeClipUrl) {\r\n            this._ensureClipGroup().appendChild(this.tgrp);\r\n          } else {\r\n            this.svg.appendChild(this.tgrp);\r\n          }\r\n        }\r\n\r\n        return this.tgrp;\r\n      }\r\n    }]);\r\n\r\n    return SVGGraphics;\r\n  }();\r\n}\r\n\r\n/***/ }),\r\n/* 153 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFNodeStream = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _network_utils = __w_pdfjs_require__(154);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\n;\r\n\r\nvar fs = require(\"fs\");\r\n\r\nvar http = require(\"http\");\r\n\r\nvar https = require(\"https\");\r\n\r\nvar url = require(\"url\");\r\n\r\nvar fileUriRegex = /^file:\\/\\/\\/[a-zA-Z]:\\//;\r\n\r\nfunction parseUrl(sourceUrl) {\r\n  var parsedUrl = url.parse(sourceUrl);\r\n\r\n  if (parsedUrl.protocol === \"file:\" || parsedUrl.host) {\r\n    return parsedUrl;\r\n  }\r\n\r\n  if (/^[a-z]:[/\\\\]/i.test(sourceUrl)) {\r\n    return url.parse(\"file:///\".concat(sourceUrl));\r\n  }\r\n\r\n  if (!parsedUrl.host) {\r\n    parsedUrl.protocol = \"file:\";\r\n  }\r\n\r\n  return parsedUrl;\r\n}\r\n\r\nvar PDFNodeStream = /*#__PURE__*/function () {\r\n  function PDFNodeStream(source) {\r\n    _classCallCheck(this, PDFNodeStream);\r\n\r\n    this.source = source;\r\n    this.url = parseUrl(source.url);\r\n    this.isHttp = this.url.protocol === \"http:\" || this.url.protocol === \"https:\";\r\n    this.isFsUrl = this.url.protocol === \"file:\";\r\n    this.httpHeaders = this.isHttp && source.httpHeaders || {};\r\n    this._fullRequestReader = null;\r\n    this._rangeRequestReaders = [];\r\n  }\r\n\r\n  _createClass(PDFNodeStream, [{\r\n    key: \"_progressiveDataLength\",\r\n    get: function get() {\r\n      var _this$_fullRequestRea, _this$_fullRequestRea2;\r\n\r\n      return (_this$_fullRequestRea = (_this$_fullRequestRea2 = this._fullRequestReader) === null || _this$_fullRequestRea2 === void 0 ? void 0 : _this$_fullRequestRea2._loaded) !== null && _this$_fullRequestRea !== void 0 ? _this$_fullRequestRea : 0;\r\n    }\r\n  }, {\r\n    key: \"getFullReader\",\r\n    value: function getFullReader() {\r\n      (0, _util.assert)(!this._fullRequestReader, \"PDFNodeStream.getFullReader can only be called once.\");\r\n      this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this);\r\n      return this._fullRequestReader;\r\n    }\r\n  }, {\r\n    key: \"getRangeReader\",\r\n    value: function getRangeReader(start, end) {\r\n      if (end <= this._progressiveDataLength) {\r\n        return null;\r\n      }\r\n\r\n      var rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end);\r\n\r\n      this._rangeRequestReaders.push(rangeReader);\r\n\r\n      return rangeReader;\r\n    }\r\n  }, {\r\n    key: \"cancelAllRequests\",\r\n    value: function cancelAllRequests(reason) {\r\n      if (this._fullRequestReader) {\r\n        this._fullRequestReader.cancel(reason);\r\n      }\r\n\r\n      var readers = this._rangeRequestReaders.slice(0);\r\n\r\n      readers.forEach(function (reader) {\r\n        reader.cancel(reason);\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return PDFNodeStream;\r\n}();\r\n\r\nexports.PDFNodeStream = PDFNodeStream;\r\n\r\nvar BaseFullReader = /*#__PURE__*/function () {\r\n  function BaseFullReader(stream) {\r\n    _classCallCheck(this, BaseFullReader);\r\n\r\n    this._url = stream.url;\r\n    this._done = false;\r\n    this._storedError = null;\r\n    this.onProgress = null;\r\n    var source = stream.source;\r\n    this._contentLength = source.length;\r\n    this._loaded = 0;\r\n    this._filename = null;\r\n    this._disableRange = source.disableRange || false;\r\n    this._rangeChunkSize = source.rangeChunkSize;\r\n\r\n    if (!this._rangeChunkSize && !this._disableRange) {\r\n      this._disableRange = true;\r\n    }\r\n\r\n    this._isStreamingSupported = !source.disableStream;\r\n    this._isRangeSupported = !source.disableRange;\r\n    this._readableStream = null;\r\n    this._readCapability = (0, _util.createPromiseCapability)();\r\n    this._headersCapability = (0, _util.createPromiseCapability)();\r\n  }\r\n\r\n  _createClass(BaseFullReader, [{\r\n    key: \"headersReady\",\r\n    get: function get() {\r\n      return this._headersCapability.promise;\r\n    }\r\n  }, {\r\n    key: \"filename\",\r\n    get: function get() {\r\n      return this._filename;\r\n    }\r\n  }, {\r\n    key: \"contentLength\",\r\n    get: function get() {\r\n      return this._contentLength;\r\n    }\r\n  }, {\r\n    key: \"isRangeSupported\",\r\n    get: function get() {\r\n      return this._isRangeSupported;\r\n    }\r\n  }, {\r\n    key: \"isStreamingSupported\",\r\n    get: function get() {\r\n      return this._isStreamingSupported;\r\n    }\r\n  }, {\r\n    key: \"read\",\r\n    value: function () {\r\n      var _read = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var chunk, buffer;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                _context.next = 2;\r\n                return this._readCapability.promise;\r\n\r\n              case 2:\r\n                if (!this._done) {\r\n                  _context.next = 4;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\", {\r\n                  value: undefined,\r\n                  done: true\r\n                });\r\n\r\n              case 4:\r\n                if (!this._storedError) {\r\n                  _context.next = 6;\r\n                  break;\r\n                }\r\n\r\n                throw this._storedError;\r\n\r\n              case 6:\r\n                chunk = this._readableStream.read();\r\n\r\n                if (!(chunk === null)) {\r\n                  _context.next = 10;\r\n                  break;\r\n                }\r\n\r\n                this._readCapability = (0, _util.createPromiseCapability)();\r\n                return _context.abrupt(\"return\", this.read());\r\n\r\n              case 10:\r\n                this._loaded += chunk.length;\r\n\r\n                if (this.onProgress) {\r\n                  this.onProgress({\r\n                    loaded: this._loaded,\r\n                    total: this._contentLength\r\n                  });\r\n                }\r\n\r\n                buffer = new Uint8Array(chunk).buffer;\r\n                return _context.abrupt(\"return\", {\r\n                  value: buffer,\r\n                  done: false\r\n                });\r\n\r\n              case 14:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function read() {\r\n        return _read.apply(this, arguments);\r\n      }\r\n\r\n      return read;\r\n    }()\r\n  }, {\r\n    key: \"cancel\",\r\n    value: function cancel(reason) {\r\n      if (!this._readableStream) {\r\n        this._error(reason);\r\n\r\n        return;\r\n      }\r\n\r\n      this._readableStream.destroy(reason);\r\n    }\r\n  }, {\r\n    key: \"_error\",\r\n    value: function _error(reason) {\r\n      this._storedError = reason;\r\n\r\n      this._readCapability.resolve();\r\n    }\r\n  }, {\r\n    key: \"_setReadableStream\",\r\n    value: function _setReadableStream(readableStream) {\r\n      var _this = this;\r\n\r\n      this._readableStream = readableStream;\r\n      readableStream.on(\"readable\", function () {\r\n        _this._readCapability.resolve();\r\n      });\r\n      readableStream.on(\"end\", function () {\r\n        readableStream.destroy();\r\n        _this._done = true;\r\n\r\n        _this._readCapability.resolve();\r\n      });\r\n      readableStream.on(\"error\", function (reason) {\r\n        _this._error(reason);\r\n      });\r\n\r\n      if (!this._isStreamingSupported && this._isRangeSupported) {\r\n        this._error(new _util.AbortException(\"streaming is disabled\"));\r\n      }\r\n\r\n      if (this._storedError) {\r\n        this._readableStream.destroy(this._storedError);\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return BaseFullReader;\r\n}();\r\n\r\nvar BaseRangeReader = /*#__PURE__*/function () {\r\n  function BaseRangeReader(stream) {\r\n    _classCallCheck(this, BaseRangeReader);\r\n\r\n    this._url = stream.url;\r\n    this._done = false;\r\n    this._storedError = null;\r\n    this.onProgress = null;\r\n    this._loaded = 0;\r\n    this._readableStream = null;\r\n    this._readCapability = (0, _util.createPromiseCapability)();\r\n    var source = stream.source;\r\n    this._isStreamingSupported = !source.disableStream;\r\n  }\r\n\r\n  _createClass(BaseRangeReader, [{\r\n    key: \"isStreamingSupported\",\r\n    get: function get() {\r\n      return this._isStreamingSupported;\r\n    }\r\n  }, {\r\n    key: \"read\",\r\n    value: function () {\r\n      var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n        var chunk, buffer;\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                _context2.next = 2;\r\n                return this._readCapability.promise;\r\n\r\n              case 2:\r\n                if (!this._done) {\r\n                  _context2.next = 4;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", {\r\n                  value: undefined,\r\n                  done: true\r\n                });\r\n\r\n              case 4:\r\n                if (!this._storedError) {\r\n                  _context2.next = 6;\r\n                  break;\r\n                }\r\n\r\n                throw this._storedError;\r\n\r\n              case 6:\r\n                chunk = this._readableStream.read();\r\n\r\n                if (!(chunk === null)) {\r\n                  _context2.next = 10;\r\n                  break;\r\n                }\r\n\r\n                this._readCapability = (0, _util.createPromiseCapability)();\r\n                return _context2.abrupt(\"return\", this.read());\r\n\r\n              case 10:\r\n                this._loaded += chunk.length;\r\n\r\n                if (this.onProgress) {\r\n                  this.onProgress({\r\n                    loaded: this._loaded\r\n                  });\r\n                }\r\n\r\n                buffer = new Uint8Array(chunk).buffer;\r\n                return _context2.abrupt(\"return\", {\r\n                  value: buffer,\r\n                  done: false\r\n                });\r\n\r\n              case 14:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this);\r\n      }));\r\n\r\n      function read() {\r\n        return _read2.apply(this, arguments);\r\n      }\r\n\r\n      return read;\r\n    }()\r\n  }, {\r\n    key: \"cancel\",\r\n    value: function cancel(reason) {\r\n      if (!this._readableStream) {\r\n        this._error(reason);\r\n\r\n        return;\r\n      }\r\n\r\n      this._readableStream.destroy(reason);\r\n    }\r\n  }, {\r\n    key: \"_error\",\r\n    value: function _error(reason) {\r\n      this._storedError = reason;\r\n\r\n      this._readCapability.resolve();\r\n    }\r\n  }, {\r\n    key: \"_setReadableStream\",\r\n    value: function _setReadableStream(readableStream) {\r\n      var _this2 = this;\r\n\r\n      this._readableStream = readableStream;\r\n      readableStream.on(\"readable\", function () {\r\n        _this2._readCapability.resolve();\r\n      });\r\n      readableStream.on(\"end\", function () {\r\n        readableStream.destroy();\r\n        _this2._done = true;\r\n\r\n        _this2._readCapability.resolve();\r\n      });\r\n      readableStream.on(\"error\", function (reason) {\r\n        _this2._error(reason);\r\n      });\r\n\r\n      if (this._storedError) {\r\n        this._readableStream.destroy(this._storedError);\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return BaseRangeReader;\r\n}();\r\n\r\nfunction createRequestOptions(parsedUrl, headers) {\r\n  return {\r\n    protocol: parsedUrl.protocol,\r\n    auth: parsedUrl.auth,\r\n    host: parsedUrl.hostname,\r\n    port: parsedUrl.port,\r\n    path: parsedUrl.path,\r\n    method: \"GET\",\r\n    headers: headers\r\n  };\r\n}\r\n\r\nvar PDFNodeStreamFullReader = /*#__PURE__*/function (_BaseFullReader) {\r\n  _inherits(PDFNodeStreamFullReader, _BaseFullReader);\r\n\r\n  var _super = _createSuper(PDFNodeStreamFullReader);\r\n\r\n  function PDFNodeStreamFullReader(stream) {\r\n    var _this3;\r\n\r\n    _classCallCheck(this, PDFNodeStreamFullReader);\r\n\r\n    _this3 = _super.call(this, stream);\r\n\r\n    var handleResponse = function handleResponse(response) {\r\n      if (response.statusCode === 404) {\r\n        var error = new _util.MissingPDFException(\"Missing PDF \\\"\".concat(_this3._url, \"\\\".\"));\r\n        _this3._storedError = error;\r\n\r\n        _this3._headersCapability.reject(error);\r\n\r\n        return;\r\n      }\r\n\r\n      _this3._headersCapability.resolve();\r\n\r\n      _this3._setReadableStream(response);\r\n\r\n      var getResponseHeader = function getResponseHeader(name) {\r\n        return _this3._readableStream.headers[name.toLowerCase()];\r\n      };\r\n\r\n      var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({\r\n        getResponseHeader: getResponseHeader,\r\n        isHttp: stream.isHttp,\r\n        rangeChunkSize: _this3._rangeChunkSize,\r\n        disableRange: _this3._disableRange\r\n      }),\r\n          allowRangeRequests = _validateRangeRequest.allowRangeRequests,\r\n          suggestedLength = _validateRangeRequest.suggestedLength;\r\n\r\n      _this3._isRangeSupported = allowRangeRequests;\r\n      _this3._contentLength = suggestedLength || _this3._contentLength;\r\n      _this3._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);\r\n    };\r\n\r\n    _this3._request = null;\r\n\r\n    if (_this3._url.protocol === \"http:\") {\r\n      _this3._request = http.request(createRequestOptions(_this3._url, stream.httpHeaders), handleResponse);\r\n    } else {\r\n      _this3._request = https.request(createRequestOptions(_this3._url, stream.httpHeaders), handleResponse);\r\n    }\r\n\r\n    _this3._request.on(\"error\", function (reason) {\r\n      _this3._storedError = reason;\r\n\r\n      _this3._headersCapability.reject(reason);\r\n    });\r\n\r\n    _this3._request.end();\r\n\r\n    return _this3;\r\n  }\r\n\r\n  return PDFNodeStreamFullReader;\r\n}(BaseFullReader);\r\n\r\nvar PDFNodeStreamRangeReader = /*#__PURE__*/function (_BaseRangeReader) {\r\n  _inherits(PDFNodeStreamRangeReader, _BaseRangeReader);\r\n\r\n  var _super2 = _createSuper(PDFNodeStreamRangeReader);\r\n\r\n  function PDFNodeStreamRangeReader(stream, start, end) {\r\n    var _this4;\r\n\r\n    _classCallCheck(this, PDFNodeStreamRangeReader);\r\n\r\n    _this4 = _super2.call(this, stream);\r\n    _this4._httpHeaders = {};\r\n\r\n    for (var property in stream.httpHeaders) {\r\n      var value = stream.httpHeaders[property];\r\n\r\n      if (typeof value === \"undefined\") {\r\n        continue;\r\n      }\r\n\r\n      _this4._httpHeaders[property] = value;\r\n    }\r\n\r\n    _this4._httpHeaders.Range = \"bytes=\".concat(start, \"-\").concat(end - 1);\r\n\r\n    var handleResponse = function handleResponse(response) {\r\n      if (response.statusCode === 404) {\r\n        var error = new _util.MissingPDFException(\"Missing PDF \\\"\".concat(_this4._url, \"\\\".\"));\r\n        _this4._storedError = error;\r\n        return;\r\n      }\r\n\r\n      _this4._setReadableStream(response);\r\n    };\r\n\r\n    _this4._request = null;\r\n\r\n    if (_this4._url.protocol === \"http:\") {\r\n      _this4._request = http.request(createRequestOptions(_this4._url, _this4._httpHeaders), handleResponse);\r\n    } else {\r\n      _this4._request = https.request(createRequestOptions(_this4._url, _this4._httpHeaders), handleResponse);\r\n    }\r\n\r\n    _this4._request.on(\"error\", function (reason) {\r\n      _this4._storedError = reason;\r\n    });\r\n\r\n    _this4._request.end();\r\n\r\n    return _this4;\r\n  }\r\n\r\n  return PDFNodeStreamRangeReader;\r\n}(BaseRangeReader);\r\n\r\nvar PDFNodeStreamFsFullReader = /*#__PURE__*/function (_BaseFullReader2) {\r\n  _inherits(PDFNodeStreamFsFullReader, _BaseFullReader2);\r\n\r\n  var _super3 = _createSuper(PDFNodeStreamFsFullReader);\r\n\r\n  function PDFNodeStreamFsFullReader(stream) {\r\n    var _this5;\r\n\r\n    _classCallCheck(this, PDFNodeStreamFsFullReader);\r\n\r\n    _this5 = _super3.call(this, stream);\r\n    var path = decodeURIComponent(_this5._url.path);\r\n\r\n    if (fileUriRegex.test(_this5._url.href)) {\r\n      path = path.replace(/^\\//, \"\");\r\n    }\r\n\r\n    fs.lstat(path, function (error, stat) {\r\n      if (error) {\r\n        if (error.code === \"ENOENT\") {\r\n          error = new _util.MissingPDFException(\"Missing PDF \\\"\".concat(path, \"\\\".\"));\r\n        }\r\n\r\n        _this5._storedError = error;\r\n\r\n        _this5._headersCapability.reject(error);\r\n\r\n        return;\r\n      }\r\n\r\n      _this5._contentLength = stat.size;\r\n\r\n      _this5._setReadableStream(fs.createReadStream(path));\r\n\r\n      _this5._headersCapability.resolve();\r\n    });\r\n    return _this5;\r\n  }\r\n\r\n  return PDFNodeStreamFsFullReader;\r\n}(BaseFullReader);\r\n\r\nvar PDFNodeStreamFsRangeReader = /*#__PURE__*/function (_BaseRangeReader2) {\r\n  _inherits(PDFNodeStreamFsRangeReader, _BaseRangeReader2);\r\n\r\n  var _super4 = _createSuper(PDFNodeStreamFsRangeReader);\r\n\r\n  function PDFNodeStreamFsRangeReader(stream, start, end) {\r\n    var _this6;\r\n\r\n    _classCallCheck(this, PDFNodeStreamFsRangeReader);\r\n\r\n    _this6 = _super4.call(this, stream);\r\n    var path = decodeURIComponent(_this6._url.path);\r\n\r\n    if (fileUriRegex.test(_this6._url.href)) {\r\n      path = path.replace(/^\\//, \"\");\r\n    }\r\n\r\n    _this6._setReadableStream(fs.createReadStream(path, {\r\n      start: start,\r\n      end: end - 1\r\n    }));\r\n\r\n    return _this6;\r\n  }\r\n\r\n  return PDFNodeStreamFsRangeReader;\r\n}(BaseRangeReader);\r\n\r\n/***/ }),\r\n/* 154 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.createResponseStatusError = createResponseStatusError;\r\nexports.extractFilenameFromHeader = extractFilenameFromHeader;\r\nexports.validateRangeRequestCapabilities = validateRangeRequestCapabilities;\r\nexports.validateResponseStatus = validateResponseStatus;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _content_disposition = __w_pdfjs_require__(155);\r\n\r\nfunction validateRangeRequestCapabilities(_ref) {\r\n  var getResponseHeader = _ref.getResponseHeader,\r\n      isHttp = _ref.isHttp,\r\n      rangeChunkSize = _ref.rangeChunkSize,\r\n      disableRange = _ref.disableRange;\r\n  (0, _util.assert)(rangeChunkSize > 0, \"Range chunk size must be larger than zero\");\r\n  var returnValues = {\r\n    allowRangeRequests: false,\r\n    suggestedLength: undefined\r\n  };\r\n  var length = parseInt(getResponseHeader(\"Content-Length\"), 10);\r\n\r\n  if (!Number.isInteger(length)) {\r\n    return returnValues;\r\n  }\r\n\r\n  returnValues.suggestedLength = length;\r\n\r\n  if (length <= 2 * rangeChunkSize) {\r\n    return returnValues;\r\n  }\r\n\r\n  if (disableRange || !isHttp) {\r\n    return returnValues;\r\n  }\r\n\r\n  if (getResponseHeader(\"Accept-Ranges\") !== \"bytes\") {\r\n    return returnValues;\r\n  }\r\n\r\n  var contentEncoding = getResponseHeader(\"Content-Encoding\") || \"identity\";\r\n\r\n  if (contentEncoding !== \"identity\") {\r\n    return returnValues;\r\n  }\r\n\r\n  returnValues.allowRangeRequests = true;\r\n  return returnValues;\r\n}\r\n\r\nfunction extractFilenameFromHeader(getResponseHeader) {\r\n  var contentDisposition = getResponseHeader(\"Content-Disposition\");\r\n\r\n  if (contentDisposition) {\r\n    var filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition);\r\n\r\n    if (filename.includes(\"%\")) {\r\n      try {\r\n        filename = decodeURIComponent(filename);\r\n      } catch (ex) {}\r\n    }\r\n\r\n    if (/\\.pdf$/i.test(filename)) {\r\n      return filename;\r\n    }\r\n  }\r\n\r\n  return null;\r\n}\r\n\r\nfunction createResponseStatusError(status, url) {\r\n  if (status === 404 || status === 0 && url.startsWith(\"file:\")) {\r\n    return new _util.MissingPDFException('Missing PDF \"' + url + '\".');\r\n  }\r\n\r\n  return new _util.UnexpectedResponseException(\"Unexpected server response (\" + status + ') while retrieving PDF \"' + url + '\".', status);\r\n}\r\n\r\nfunction validateResponseStatus(status) {\r\n  return status === 200 || status === 206;\r\n}\r\n\r\n/***/ }),\r\n/* 155 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader;\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction getFilenameFromContentDispositionHeader(contentDisposition) {\r\n  var needsEncodingFixup = true;\r\n  var tmp = toParamRegExp(\"filename\\\\*\", \"i\").exec(contentDisposition);\r\n\r\n  if (tmp) {\r\n    tmp = tmp[1];\r\n    var filename = rfc2616unquote(tmp);\r\n    filename = unescape(filename);\r\n    filename = rfc5987decode(filename);\r\n    filename = rfc2047decode(filename);\r\n    return fixupEncoding(filename);\r\n  }\r\n\r\n  tmp = rfc2231getparam(contentDisposition);\r\n\r\n  if (tmp) {\r\n    var _filename = rfc2047decode(tmp);\r\n\r\n    return fixupEncoding(_filename);\r\n  }\r\n\r\n  tmp = toParamRegExp(\"filename\", \"i\").exec(contentDisposition);\r\n\r\n  if (tmp) {\r\n    tmp = tmp[1];\r\n\r\n    var _filename2 = rfc2616unquote(tmp);\r\n\r\n    _filename2 = rfc2047decode(_filename2);\r\n    return fixupEncoding(_filename2);\r\n  }\r\n\r\n  function toParamRegExp(attributePattern, flags) {\r\n    return new RegExp(\"(?:^|;)\\\\s*\" + attributePattern + \"\\\\s*=\\\\s*\" + \"(\" + '[^\";\\\\s][^;\\\\s]*' + \"|\" + '\"(?:[^\"\\\\\\\\]|\\\\\\\\\"?)+\"?' + \")\", flags);\r\n  }\r\n\r\n  function textdecode(encoding, value) {\r\n    if (encoding) {\r\n      if (!/^[\\x00-\\xFF]+$/.test(value)) {\r\n        return value;\r\n      }\r\n\r\n      try {\r\n        var decoder = new TextDecoder(encoding, {\r\n          fatal: true\r\n        });\r\n        var bytes = Array.from(value, function (ch) {\r\n          return ch.charCodeAt(0) & 0xff;\r\n        });\r\n        value = decoder.decode(new Uint8Array(bytes));\r\n        needsEncodingFixup = false;\r\n      } catch (e) {\r\n        if (/^utf-?8$/i.test(encoding)) {\r\n          try {\r\n            value = decodeURIComponent(escape(value));\r\n            needsEncodingFixup = false;\r\n          } catch (err) {}\r\n        }\r\n      }\r\n    }\r\n\r\n    return value;\r\n  }\r\n\r\n  function fixupEncoding(value) {\r\n    if (needsEncodingFixup && /[\\x80-\\xff]/.test(value)) {\r\n      value = textdecode(\"utf-8\", value);\r\n\r\n      if (needsEncodingFixup) {\r\n        value = textdecode(\"iso-8859-1\", value);\r\n      }\r\n    }\r\n\r\n    return value;\r\n  }\r\n\r\n  function rfc2231getparam(contentDispositionStr) {\r\n    var matches = [];\r\n    var match;\r\n    var iter = toParamRegExp(\"filename\\\\*((?!0\\\\d)\\\\d+)(\\\\*?)\", \"ig\");\r\n\r\n    while ((match = iter.exec(contentDispositionStr)) !== null) {\r\n      var _match = match,\r\n          _match2 = _slicedToArray(_match, 4),\r\n          n = _match2[1],\r\n          quot = _match2[2],\r\n          part = _match2[3];\r\n\r\n      n = parseInt(n, 10);\r\n\r\n      if (n in matches) {\r\n        if (n === 0) {\r\n          break;\r\n        }\r\n\r\n        continue;\r\n      }\r\n\r\n      matches[n] = [quot, part];\r\n    }\r\n\r\n    var parts = [];\r\n\r\n    for (var _n2 = 0; _n2 < matches.length; ++_n2) {\r\n      if (!(_n2 in matches)) {\r\n        break;\r\n      }\r\n\r\n      var _matches$_n = _slicedToArray(matches[_n2], 2),\r\n          _quot = _matches$_n[0],\r\n          _part = _matches$_n[1];\r\n\r\n      _part = rfc2616unquote(_part);\r\n\r\n      if (_quot) {\r\n        _part = unescape(_part);\r\n\r\n        if (_n2 === 0) {\r\n          _part = rfc5987decode(_part);\r\n        }\r\n      }\r\n\r\n      parts.push(_part);\r\n    }\r\n\r\n    return parts.join(\"\");\r\n  }\r\n\r\n  function rfc2616unquote(value) {\r\n    if (value.startsWith('\"')) {\r\n      var parts = value.slice(1).split('\\\\\"');\r\n\r\n      for (var i = 0; i < parts.length; ++i) {\r\n        var quotindex = parts[i].indexOf('\"');\r\n\r\n        if (quotindex !== -1) {\r\n          parts[i] = parts[i].slice(0, quotindex);\r\n          parts.length = i + 1;\r\n        }\r\n\r\n        parts[i] = parts[i].replace(/\\\\(.)/g, \"$1\");\r\n      }\r\n\r\n      value = parts.join('\"');\r\n    }\r\n\r\n    return value;\r\n  }\r\n\r\n  function rfc5987decode(extvalue) {\r\n    var encodingend = extvalue.indexOf(\"'\");\r\n\r\n    if (encodingend === -1) {\r\n      return extvalue;\r\n    }\r\n\r\n    var encoding = extvalue.slice(0, encodingend);\r\n    var langvalue = extvalue.slice(encodingend + 1);\r\n    var value = langvalue.replace(/^[^']*'/, \"\");\r\n    return textdecode(encoding, value);\r\n  }\r\n\r\n  function rfc2047decode(value) {\r\n    if (!value.startsWith(\"=?\") || /[\\x00-\\x19\\x80-\\xff]/.test(value)) {\r\n      return value;\r\n    }\r\n\r\n    return value.replace(/=\\?([\\w-]*)\\?([QqBb])\\?((?:[^?]|\\?(?!=))*)\\?=/g, function (matches, charset, encoding, text) {\r\n      if (encoding === \"q\" || encoding === \"Q\") {\r\n        text = text.replace(/_/g, \" \");\r\n        text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) {\r\n          return String.fromCharCode(parseInt(hex, 16));\r\n        });\r\n        return textdecode(charset, text);\r\n      }\r\n\r\n      try {\r\n        text = atob(text);\r\n      } catch (e) {}\r\n\r\n      return textdecode(charset, text);\r\n    });\r\n  }\r\n\r\n  return \"\";\r\n}\r\n\r\n/***/ }),\r\n/* 156 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFNetworkStream = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _network_utils = __w_pdfjs_require__(154);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\n;\r\nvar OK_RESPONSE = 200;\r\nvar PARTIAL_CONTENT_RESPONSE = 206;\r\n\r\nfunction getArrayBuffer(xhr) {\r\n  var data = xhr.response;\r\n\r\n  if (typeof data !== \"string\") {\r\n    return data;\r\n  }\r\n\r\n  var array = (0, _util.stringToBytes)(data);\r\n  return array.buffer;\r\n}\r\n\r\nvar NetworkManager = /*#__PURE__*/function () {\r\n  function NetworkManager(url, args) {\r\n    _classCallCheck(this, NetworkManager);\r\n\r\n    this.url = url;\r\n    args = args || {};\r\n    this.isHttp = /^https?:/i.test(url);\r\n    this.httpHeaders = this.isHttp && args.httpHeaders || {};\r\n    this.withCredentials = args.withCredentials || false;\r\n\r\n    this.getXhr = args.getXhr || function NetworkManager_getXhr() {\r\n      return new XMLHttpRequest();\r\n    };\r\n\r\n    this.currXhrId = 0;\r\n    this.pendingRequests = Object.create(null);\r\n  }\r\n\r\n  _createClass(NetworkManager, [{\r\n    key: \"requestRange\",\r\n    value: function requestRange(begin, end, listeners) {\r\n      var args = {\r\n        begin: begin,\r\n        end: end\r\n      };\r\n\r\n      for (var prop in listeners) {\r\n        args[prop] = listeners[prop];\r\n      }\r\n\r\n      return this.request(args);\r\n    }\r\n  }, {\r\n    key: \"requestFull\",\r\n    value: function requestFull(listeners) {\r\n      return this.request(listeners);\r\n    }\r\n  }, {\r\n    key: \"request\",\r\n    value: function request(args) {\r\n      var xhr = this.getXhr();\r\n      var xhrId = this.currXhrId++;\r\n      var pendingRequest = this.pendingRequests[xhrId] = {\r\n        xhr: xhr\r\n      };\r\n      xhr.open(\"GET\", this.url);\r\n      xhr.withCredentials = this.withCredentials;\r\n\r\n      for (var property in this.httpHeaders) {\r\n        var value = this.httpHeaders[property];\r\n\r\n        if (typeof value === \"undefined\") {\r\n          continue;\r\n        }\r\n\r\n        xhr.setRequestHeader(property, value);\r\n      }\r\n\r\n      if (this.isHttp && \"begin\" in args && \"end\" in args) {\r\n        xhr.setRequestHeader(\"Range\", \"bytes=\".concat(args.begin, \"-\").concat(args.end - 1));\r\n        pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;\r\n      } else {\r\n        pendingRequest.expectedStatus = OK_RESPONSE;\r\n      }\r\n\r\n      xhr.responseType = \"arraybuffer\";\r\n\r\n      if (args.onError) {\r\n        xhr.onerror = function (evt) {\r\n          args.onError(xhr.status);\r\n        };\r\n      }\r\n\r\n      xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);\r\n      xhr.onprogress = this.onProgress.bind(this, xhrId);\r\n      pendingRequest.onHeadersReceived = args.onHeadersReceived;\r\n      pendingRequest.onDone = args.onDone;\r\n      pendingRequest.onError = args.onError;\r\n      pendingRequest.onProgress = args.onProgress;\r\n      xhr.send(null);\r\n      return xhrId;\r\n    }\r\n  }, {\r\n    key: \"onProgress\",\r\n    value: function onProgress(xhrId, evt) {\r\n      var pendingRequest = this.pendingRequests[xhrId];\r\n\r\n      if (!pendingRequest) {\r\n        return;\r\n      }\r\n\r\n      if (pendingRequest.onProgress) {\r\n        pendingRequest.onProgress(evt);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"onStateChange\",\r\n    value: function onStateChange(xhrId, evt) {\r\n      var pendingRequest = this.pendingRequests[xhrId];\r\n\r\n      if (!pendingRequest) {\r\n        return;\r\n      }\r\n\r\n      var xhr = pendingRequest.xhr;\r\n\r\n      if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {\r\n        pendingRequest.onHeadersReceived();\r\n        delete pendingRequest.onHeadersReceived;\r\n      }\r\n\r\n      if (xhr.readyState !== 4) {\r\n        return;\r\n      }\r\n\r\n      if (!(xhrId in this.pendingRequests)) {\r\n        return;\r\n      }\r\n\r\n      delete this.pendingRequests[xhrId];\r\n\r\n      if (xhr.status === 0 && this.isHttp) {\r\n        if (pendingRequest.onError) {\r\n          pendingRequest.onError(xhr.status);\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      var xhrStatus = xhr.status || OK_RESPONSE;\r\n      var ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;\r\n\r\n      if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) {\r\n        if (pendingRequest.onError) {\r\n          pendingRequest.onError(xhr.status);\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      var chunk = getArrayBuffer(xhr);\r\n\r\n      if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {\r\n        var rangeHeader = xhr.getResponseHeader(\"Content-Range\");\r\n        var matches = /bytes (\\d+)-(\\d+)\\/(\\d+)/.exec(rangeHeader);\r\n        pendingRequest.onDone({\r\n          begin: parseInt(matches[1], 10),\r\n          chunk: chunk\r\n        });\r\n      } else if (chunk) {\r\n        pendingRequest.onDone({\r\n          begin: 0,\r\n          chunk: chunk\r\n        });\r\n      } else if (pendingRequest.onError) {\r\n        pendingRequest.onError(xhr.status);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getRequestXhr\",\r\n    value: function getRequestXhr(xhrId) {\r\n      return this.pendingRequests[xhrId].xhr;\r\n    }\r\n  }, {\r\n    key: \"isPendingRequest\",\r\n    value: function isPendingRequest(xhrId) {\r\n      return xhrId in this.pendingRequests;\r\n    }\r\n  }, {\r\n    key: \"abortRequest\",\r\n    value: function abortRequest(xhrId) {\r\n      var xhr = this.pendingRequests[xhrId].xhr;\r\n      delete this.pendingRequests[xhrId];\r\n      xhr.abort();\r\n    }\r\n  }]);\r\n\r\n  return NetworkManager;\r\n}();\r\n\r\nvar PDFNetworkStream = /*#__PURE__*/function () {\r\n  function PDFNetworkStream(source) {\r\n    _classCallCheck(this, PDFNetworkStream);\r\n\r\n    this._source = source;\r\n    this._manager = new NetworkManager(source.url, {\r\n      httpHeaders: source.httpHeaders,\r\n      withCredentials: source.withCredentials\r\n    });\r\n    this._rangeChunkSize = source.rangeChunkSize;\r\n    this._fullRequestReader = null;\r\n    this._rangeRequestReaders = [];\r\n  }\r\n\r\n  _createClass(PDFNetworkStream, [{\r\n    key: \"_onRangeRequestReaderClosed\",\r\n    value: function _onRangeRequestReaderClosed(reader) {\r\n      var i = this._rangeRequestReaders.indexOf(reader);\r\n\r\n      if (i >= 0) {\r\n        this._rangeRequestReaders.splice(i, 1);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getFullReader\",\r\n    value: function getFullReader() {\r\n      (0, _util.assert)(!this._fullRequestReader, \"PDFNetworkStream.getFullReader can only be called once.\");\r\n      this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source);\r\n      return this._fullRequestReader;\r\n    }\r\n  }, {\r\n    key: \"getRangeReader\",\r\n    value: function getRangeReader(begin, end) {\r\n      var reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end);\r\n      reader.onClosed = this._onRangeRequestReaderClosed.bind(this);\r\n\r\n      this._rangeRequestReaders.push(reader);\r\n\r\n      return reader;\r\n    }\r\n  }, {\r\n    key: \"cancelAllRequests\",\r\n    value: function cancelAllRequests(reason) {\r\n      if (this._fullRequestReader) {\r\n        this._fullRequestReader.cancel(reason);\r\n      }\r\n\r\n      var readers = this._rangeRequestReaders.slice(0);\r\n\r\n      readers.forEach(function (reader) {\r\n        reader.cancel(reason);\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return PDFNetworkStream;\r\n}();\r\n\r\nexports.PDFNetworkStream = PDFNetworkStream;\r\n\r\nvar PDFNetworkStreamFullRequestReader = /*#__PURE__*/function () {\r\n  function PDFNetworkStreamFullRequestReader(manager, source) {\r\n    _classCallCheck(this, PDFNetworkStreamFullRequestReader);\r\n\r\n    this._manager = manager;\r\n    var args = {\r\n      onHeadersReceived: this._onHeadersReceived.bind(this),\r\n      onDone: this._onDone.bind(this),\r\n      onError: this._onError.bind(this),\r\n      onProgress: this._onProgress.bind(this)\r\n    };\r\n    this._url = source.url;\r\n    this._fullRequestId = manager.requestFull(args);\r\n    this._headersReceivedCapability = (0, _util.createPromiseCapability)();\r\n    this._disableRange = source.disableRange || false;\r\n    this._contentLength = source.length;\r\n    this._rangeChunkSize = source.rangeChunkSize;\r\n\r\n    if (!this._rangeChunkSize && !this._disableRange) {\r\n      this._disableRange = true;\r\n    }\r\n\r\n    this._isStreamingSupported = false;\r\n    this._isRangeSupported = false;\r\n    this._cachedChunks = [];\r\n    this._requests = [];\r\n    this._done = false;\r\n    this._storedError = undefined;\r\n    this._filename = null;\r\n    this.onProgress = null;\r\n  }\r\n\r\n  _createClass(PDFNetworkStreamFullRequestReader, [{\r\n    key: \"_onHeadersReceived\",\r\n    value: function _onHeadersReceived() {\r\n      var fullRequestXhrId = this._fullRequestId;\r\n\r\n      var fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);\r\n\r\n      var getResponseHeader = function getResponseHeader(name) {\r\n        return fullRequestXhr.getResponseHeader(name);\r\n      };\r\n\r\n      var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({\r\n        getResponseHeader: getResponseHeader,\r\n        isHttp: this._manager.isHttp,\r\n        rangeChunkSize: this._rangeChunkSize,\r\n        disableRange: this._disableRange\r\n      }),\r\n          allowRangeRequests = _validateRangeRequest.allowRangeRequests,\r\n          suggestedLength = _validateRangeRequest.suggestedLength;\r\n\r\n      if (allowRangeRequests) {\r\n        this._isRangeSupported = true;\r\n      }\r\n\r\n      this._contentLength = suggestedLength || this._contentLength;\r\n      this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);\r\n\r\n      if (this._isRangeSupported) {\r\n        this._manager.abortRequest(fullRequestXhrId);\r\n      }\r\n\r\n      this._headersReceivedCapability.resolve();\r\n    }\r\n  }, {\r\n    key: \"_onDone\",\r\n    value: function _onDone(args) {\r\n      if (args) {\r\n        if (this._requests.length > 0) {\r\n          var requestCapability = this._requests.shift();\r\n\r\n          requestCapability.resolve({\r\n            value: args.chunk,\r\n            done: false\r\n          });\r\n        } else {\r\n          this._cachedChunks.push(args.chunk);\r\n        }\r\n      }\r\n\r\n      this._done = true;\r\n\r\n      if (this._cachedChunks.length > 0) {\r\n        return;\r\n      }\r\n\r\n      this._requests.forEach(function (requestCapability) {\r\n        requestCapability.resolve({\r\n          value: undefined,\r\n          done: true\r\n        });\r\n      });\r\n\r\n      this._requests = [];\r\n    }\r\n  }, {\r\n    key: \"_onError\",\r\n    value: function _onError(status) {\r\n      var url = this._url;\r\n      var exception = (0, _network_utils.createResponseStatusError)(status, url);\r\n      this._storedError = exception;\r\n\r\n      this._headersReceivedCapability.reject(exception);\r\n\r\n      this._requests.forEach(function (requestCapability) {\r\n        requestCapability.reject(exception);\r\n      });\r\n\r\n      this._requests = [];\r\n      this._cachedChunks = [];\r\n    }\r\n  }, {\r\n    key: \"_onProgress\",\r\n    value: function _onProgress(data) {\r\n      if (this.onProgress) {\r\n        this.onProgress({\r\n          loaded: data.loaded,\r\n          total: data.lengthComputable ? data.total : this._contentLength\r\n        });\r\n      }\r\n    }\r\n  }, {\r\n    key: \"filename\",\r\n    get: function get() {\r\n      return this._filename;\r\n    }\r\n  }, {\r\n    key: \"isRangeSupported\",\r\n    get: function get() {\r\n      return this._isRangeSupported;\r\n    }\r\n  }, {\r\n    key: \"isStreamingSupported\",\r\n    get: function get() {\r\n      return this._isStreamingSupported;\r\n    }\r\n  }, {\r\n    key: \"contentLength\",\r\n    get: function get() {\r\n      return this._contentLength;\r\n    }\r\n  }, {\r\n    key: \"headersReady\",\r\n    get: function get() {\r\n      return this._headersReceivedCapability.promise;\r\n    }\r\n  }, {\r\n    key: \"read\",\r\n    value: function () {\r\n      var _read = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var chunk, requestCapability;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                if (!this._storedError) {\r\n                  _context.next = 2;\r\n                  break;\r\n                }\r\n\r\n                throw this._storedError;\r\n\r\n              case 2:\r\n                if (!(this._cachedChunks.length > 0)) {\r\n                  _context.next = 5;\r\n                  break;\r\n                }\r\n\r\n                chunk = this._cachedChunks.shift();\r\n                return _context.abrupt(\"return\", {\r\n                  value: chunk,\r\n                  done: false\r\n                });\r\n\r\n              case 5:\r\n                if (!this._done) {\r\n                  _context.next = 7;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\", {\r\n                  value: undefined,\r\n                  done: true\r\n                });\r\n\r\n              case 7:\r\n                requestCapability = (0, _util.createPromiseCapability)();\r\n\r\n                this._requests.push(requestCapability);\r\n\r\n                return _context.abrupt(\"return\", requestCapability.promise);\r\n\r\n              case 10:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function read() {\r\n        return _read.apply(this, arguments);\r\n      }\r\n\r\n      return read;\r\n    }()\r\n  }, {\r\n    key: \"cancel\",\r\n    value: function cancel(reason) {\r\n      this._done = true;\r\n\r\n      this._headersReceivedCapability.reject(reason);\r\n\r\n      this._requests.forEach(function (requestCapability) {\r\n        requestCapability.resolve({\r\n          value: undefined,\r\n          done: true\r\n        });\r\n      });\r\n\r\n      this._requests = [];\r\n\r\n      if (this._manager.isPendingRequest(this._fullRequestId)) {\r\n        this._manager.abortRequest(this._fullRequestId);\r\n      }\r\n\r\n      this._fullRequestReader = null;\r\n    }\r\n  }]);\r\n\r\n  return PDFNetworkStreamFullRequestReader;\r\n}();\r\n\r\nvar PDFNetworkStreamRangeRequestReader = /*#__PURE__*/function () {\r\n  function PDFNetworkStreamRangeRequestReader(manager, begin, end) {\r\n    _classCallCheck(this, PDFNetworkStreamRangeRequestReader);\r\n\r\n    this._manager = manager;\r\n    var args = {\r\n      onDone: this._onDone.bind(this),\r\n      onProgress: this._onProgress.bind(this)\r\n    };\r\n    this._requestId = manager.requestRange(begin, end, args);\r\n    this._requests = [];\r\n    this._queuedChunk = null;\r\n    this._done = false;\r\n    this.onProgress = null;\r\n    this.onClosed = null;\r\n  }\r\n\r\n  _createClass(PDFNetworkStreamRangeRequestReader, [{\r\n    key: \"_close\",\r\n    value: function _close() {\r\n      if (this.onClosed) {\r\n        this.onClosed(this);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_onDone\",\r\n    value: function _onDone(data) {\r\n      var chunk = data.chunk;\r\n\r\n      if (this._requests.length > 0) {\r\n        var requestCapability = this._requests.shift();\r\n\r\n        requestCapability.resolve({\r\n          value: chunk,\r\n          done: false\r\n        });\r\n      } else {\r\n        this._queuedChunk = chunk;\r\n      }\r\n\r\n      this._done = true;\r\n\r\n      this._requests.forEach(function (requestCapability) {\r\n        requestCapability.resolve({\r\n          value: undefined,\r\n          done: true\r\n        });\r\n      });\r\n\r\n      this._requests = [];\r\n\r\n      this._close();\r\n    }\r\n  }, {\r\n    key: \"_onProgress\",\r\n    value: function _onProgress(evt) {\r\n      if (!this.isStreamingSupported && this.onProgress) {\r\n        this.onProgress({\r\n          loaded: evt.loaded\r\n        });\r\n      }\r\n    }\r\n  }, {\r\n    key: \"isStreamingSupported\",\r\n    get: function get() {\r\n      return false;\r\n    }\r\n  }, {\r\n    key: \"read\",\r\n    value: function () {\r\n      var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n        var chunk, requestCapability;\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                if (!(this._queuedChunk !== null)) {\r\n                  _context2.next = 4;\r\n                  break;\r\n                }\r\n\r\n                chunk = this._queuedChunk;\r\n                this._queuedChunk = null;\r\n                return _context2.abrupt(\"return\", {\r\n                  value: chunk,\r\n                  done: false\r\n                });\r\n\r\n              case 4:\r\n                if (!this._done) {\r\n                  _context2.next = 6;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", {\r\n                  value: undefined,\r\n                  done: true\r\n                });\r\n\r\n              case 6:\r\n                requestCapability = (0, _util.createPromiseCapability)();\r\n\r\n                this._requests.push(requestCapability);\r\n\r\n                return _context2.abrupt(\"return\", requestCapability.promise);\r\n\r\n              case 9:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this);\r\n      }));\r\n\r\n      function read() {\r\n        return _read2.apply(this, arguments);\r\n      }\r\n\r\n      return read;\r\n    }()\r\n  }, {\r\n    key: \"cancel\",\r\n    value: function cancel(reason) {\r\n      this._done = true;\r\n\r\n      this._requests.forEach(function (requestCapability) {\r\n        requestCapability.resolve({\r\n          value: undefined,\r\n          done: true\r\n        });\r\n      });\r\n\r\n      this._requests = [];\r\n\r\n      if (this._manager.isPendingRequest(this._requestId)) {\r\n        this._manager.abortRequest(this._requestId);\r\n      }\r\n\r\n      this._close();\r\n    }\r\n  }]);\r\n\r\n  return PDFNetworkStreamRangeRequestReader;\r\n}();\r\n\r\n/***/ }),\r\n/* 157 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFFetchStream = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _network_utils = __w_pdfjs_require__(154);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\n;\r\n\r\nfunction createFetchOptions(headers, withCredentials, abortController) {\r\n  return {\r\n    method: \"GET\",\r\n    headers: headers,\r\n    signal: abortController === null || abortController === void 0 ? void 0 : abortController.signal,\r\n    mode: \"cors\",\r\n    credentials: withCredentials ? \"include\" : \"same-origin\",\r\n    redirect: \"follow\"\r\n  };\r\n}\r\n\r\nfunction createHeaders(httpHeaders) {\r\n  var headers = new Headers();\r\n\r\n  for (var property in httpHeaders) {\r\n    var value = httpHeaders[property];\r\n\r\n    if (typeof value === \"undefined\") {\r\n      continue;\r\n    }\r\n\r\n    headers.append(property, value);\r\n  }\r\n\r\n  return headers;\r\n}\r\n\r\nvar PDFFetchStream = /*#__PURE__*/function () {\r\n  function PDFFetchStream(source) {\r\n    _classCallCheck(this, PDFFetchStream);\r\n\r\n    this.source = source;\r\n    this.isHttp = /^https?:/i.test(source.url);\r\n    this.httpHeaders = this.isHttp && source.httpHeaders || {};\r\n    this._fullRequestReader = null;\r\n    this._rangeRequestReaders = [];\r\n  }\r\n\r\n  _createClass(PDFFetchStream, [{\r\n    key: \"_progressiveDataLength\",\r\n    get: function get() {\r\n      var _this$_fullRequestRea, _this$_fullRequestRea2;\r\n\r\n      return (_this$_fullRequestRea = (_this$_fullRequestRea2 = this._fullRequestReader) === null || _this$_fullRequestRea2 === void 0 ? void 0 : _this$_fullRequestRea2._loaded) !== null && _this$_fullRequestRea !== void 0 ? _this$_fullRequestRea : 0;\r\n    }\r\n  }, {\r\n    key: \"getFullReader\",\r\n    value: function getFullReader() {\r\n      (0, _util.assert)(!this._fullRequestReader, \"PDFFetchStream.getFullReader can only be called once.\");\r\n      this._fullRequestReader = new PDFFetchStreamReader(this);\r\n      return this._fullRequestReader;\r\n    }\r\n  }, {\r\n    key: \"getRangeReader\",\r\n    value: function getRangeReader(begin, end) {\r\n      if (end <= this._progressiveDataLength) {\r\n        return null;\r\n      }\r\n\r\n      var reader = new PDFFetchStreamRangeReader(this, begin, end);\r\n\r\n      this._rangeRequestReaders.push(reader);\r\n\r\n      return reader;\r\n    }\r\n  }, {\r\n    key: \"cancelAllRequests\",\r\n    value: function cancelAllRequests(reason) {\r\n      if (this._fullRequestReader) {\r\n        this._fullRequestReader.cancel(reason);\r\n      }\r\n\r\n      var readers = this._rangeRequestReaders.slice(0);\r\n\r\n      readers.forEach(function (reader) {\r\n        reader.cancel(reason);\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return PDFFetchStream;\r\n}();\r\n\r\nexports.PDFFetchStream = PDFFetchStream;\r\n\r\nvar PDFFetchStreamReader = /*#__PURE__*/function () {\r\n  function PDFFetchStreamReader(stream) {\r\n    var _this = this;\r\n\r\n    _classCallCheck(this, PDFFetchStreamReader);\r\n\r\n    this._stream = stream;\r\n    this._reader = null;\r\n    this._loaded = 0;\r\n    this._filename = null;\r\n    var source = stream.source;\r\n    this._withCredentials = source.withCredentials || false;\r\n    this._contentLength = source.length;\r\n    this._headersCapability = (0, _util.createPromiseCapability)();\r\n    this._disableRange = source.disableRange || false;\r\n    this._rangeChunkSize = source.rangeChunkSize;\r\n\r\n    if (!this._rangeChunkSize && !this._disableRange) {\r\n      this._disableRange = true;\r\n    }\r\n\r\n    if (typeof AbortController !== \"undefined\") {\r\n      this._abortController = new AbortController();\r\n    }\r\n\r\n    this._isStreamingSupported = !source.disableStream;\r\n    this._isRangeSupported = !source.disableRange;\r\n    this._headers = createHeaders(this._stream.httpHeaders);\r\n    var url = source.url;\r\n    fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(function (response) {\r\n      if (!(0, _network_utils.validateResponseStatus)(response.status)) {\r\n        throw (0, _network_utils.createResponseStatusError)(response.status, url);\r\n      }\r\n\r\n      _this._reader = response.body.getReader();\r\n\r\n      _this._headersCapability.resolve();\r\n\r\n      var getResponseHeader = function getResponseHeader(name) {\r\n        return response.headers.get(name);\r\n      };\r\n\r\n      var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({\r\n        getResponseHeader: getResponseHeader,\r\n        isHttp: _this._stream.isHttp,\r\n        rangeChunkSize: _this._rangeChunkSize,\r\n        disableRange: _this._disableRange\r\n      }),\r\n          allowRangeRequests = _validateRangeRequest.allowRangeRequests,\r\n          suggestedLength = _validateRangeRequest.suggestedLength;\r\n\r\n      _this._isRangeSupported = allowRangeRequests;\r\n      _this._contentLength = suggestedLength || _this._contentLength;\r\n      _this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);\r\n\r\n      if (!_this._isStreamingSupported && _this._isRangeSupported) {\r\n        _this.cancel(new _util.AbortException(\"Streaming is disabled.\"));\r\n      }\r\n    })[\"catch\"](this._headersCapability.reject);\r\n    this.onProgress = null;\r\n  }\r\n\r\n  _createClass(PDFFetchStreamReader, [{\r\n    key: \"headersReady\",\r\n    get: function get() {\r\n      return this._headersCapability.promise;\r\n    }\r\n  }, {\r\n    key: \"filename\",\r\n    get: function get() {\r\n      return this._filename;\r\n    }\r\n  }, {\r\n    key: \"contentLength\",\r\n    get: function get() {\r\n      return this._contentLength;\r\n    }\r\n  }, {\r\n    key: \"isRangeSupported\",\r\n    get: function get() {\r\n      return this._isRangeSupported;\r\n    }\r\n  }, {\r\n    key: \"isStreamingSupported\",\r\n    get: function get() {\r\n      return this._isStreamingSupported;\r\n    }\r\n  }, {\r\n    key: \"read\",\r\n    value: function () {\r\n      var _read = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var _yield$this$_reader$r, value, done, buffer;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                _context.next = 2;\r\n                return this._headersCapability.promise;\r\n\r\n              case 2:\r\n                _context.next = 4;\r\n                return this._reader.read();\r\n\r\n              case 4:\r\n                _yield$this$_reader$r = _context.sent;\r\n                value = _yield$this$_reader$r.value;\r\n                done = _yield$this$_reader$r.done;\r\n\r\n                if (!done) {\r\n                  _context.next = 9;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\", {\r\n                  value: value,\r\n                  done: done\r\n                });\r\n\r\n              case 9:\r\n                this._loaded += value.byteLength;\r\n\r\n                if (this.onProgress) {\r\n                  this.onProgress({\r\n                    loaded: this._loaded,\r\n                    total: this._contentLength\r\n                  });\r\n                }\r\n\r\n                buffer = new Uint8Array(value).buffer;\r\n                return _context.abrupt(\"return\", {\r\n                  value: buffer,\r\n                  done: false\r\n                });\r\n\r\n              case 13:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function read() {\r\n        return _read.apply(this, arguments);\r\n      }\r\n\r\n      return read;\r\n    }()\r\n  }, {\r\n    key: \"cancel\",\r\n    value: function cancel(reason) {\r\n      if (this._reader) {\r\n        this._reader.cancel(reason);\r\n      }\r\n\r\n      if (this._abortController) {\r\n        this._abortController.abort();\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return PDFFetchStreamReader;\r\n}();\r\n\r\nvar PDFFetchStreamRangeReader = /*#__PURE__*/function () {\r\n  function PDFFetchStreamRangeReader(stream, begin, end) {\r\n    var _this2 = this;\r\n\r\n    _classCallCheck(this, PDFFetchStreamRangeReader);\r\n\r\n    this._stream = stream;\r\n    this._reader = null;\r\n    this._loaded = 0;\r\n    var source = stream.source;\r\n    this._withCredentials = source.withCredentials || false;\r\n    this._readCapability = (0, _util.createPromiseCapability)();\r\n    this._isStreamingSupported = !source.disableStream;\r\n\r\n    if (typeof AbortController !== \"undefined\") {\r\n      this._abortController = new AbortController();\r\n    }\r\n\r\n    this._headers = createHeaders(this._stream.httpHeaders);\r\n\r\n    this._headers.append(\"Range\", \"bytes=\".concat(begin, \"-\").concat(end - 1));\r\n\r\n    var url = source.url;\r\n    fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(function (response) {\r\n      if (!(0, _network_utils.validateResponseStatus)(response.status)) {\r\n        throw (0, _network_utils.createResponseStatusError)(response.status, url);\r\n      }\r\n\r\n      _this2._readCapability.resolve();\r\n\r\n      _this2._reader = response.body.getReader();\r\n    })[\"catch\"](function (reason) {\r\n      if ((reason === null || reason === void 0 ? void 0 : reason.name) === \"AbortError\") {\r\n        return;\r\n      }\r\n\r\n      throw reason;\r\n    });\r\n    this.onProgress = null;\r\n  }\r\n\r\n  _createClass(PDFFetchStreamRangeReader, [{\r\n    key: \"isStreamingSupported\",\r\n    get: function get() {\r\n      return this._isStreamingSupported;\r\n    }\r\n  }, {\r\n    key: \"read\",\r\n    value: function () {\r\n      var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n        var _yield$this$_reader$r2, value, done, buffer;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                _context2.next = 2;\r\n                return this._readCapability.promise;\r\n\r\n              case 2:\r\n                _context2.next = 4;\r\n                return this._reader.read();\r\n\r\n              case 4:\r\n                _yield$this$_reader$r2 = _context2.sent;\r\n                value = _yield$this$_reader$r2.value;\r\n                done = _yield$this$_reader$r2.done;\r\n\r\n                if (!done) {\r\n                  _context2.next = 9;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", {\r\n                  value: value,\r\n                  done: done\r\n                });\r\n\r\n              case 9:\r\n                this._loaded += value.byteLength;\r\n\r\n                if (this.onProgress) {\r\n                  this.onProgress({\r\n                    loaded: this._loaded\r\n                  });\r\n                }\r\n\r\n                buffer = new Uint8Array(value).buffer;\r\n                return _context2.abrupt(\"return\", {\r\n                  value: buffer,\r\n                  done: false\r\n                });\r\n\r\n              case 13:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this);\r\n      }));\r\n\r\n      function read() {\r\n        return _read2.apply(this, arguments);\r\n      }\r\n\r\n      return read;\r\n    }()\r\n  }, {\r\n    key: \"cancel\",\r\n    value: function cancel(reason) {\r\n      if (this._reader) {\r\n        this._reader.cancel(reason);\r\n      }\r\n\r\n      if (this._abortController) {\r\n        this._abortController.abort();\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return PDFFetchStreamRangeReader;\r\n}();\r\n\r\n/***/ })\r\n/******/ \t]);\r\n/************************************************************************/\r\n/******/ \t// The module cache\r\n/******/ \tvar __webpack_module_cache__ = {};\r\n/******/ \t\r\n/******/ \t// The require function\r\n/******/ \tfunction __w_pdfjs_require__(moduleId) {\r\n/******/ \t\t// Check if module is in cache\r\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\r\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\r\n/******/ \t\t}\r\n/******/ \t\t// Create a new module (and put it into the cache)\r\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\r\n/******/ \t\t\tid: moduleId,\r\n/******/ \t\t\tloaded: false,\r\n/******/ \t\t\texports: {}\r\n/******/ \t\t};\r\n/******/ \t\r\n/******/ \t\t// Execute the module function\r\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);\r\n/******/ \t\r\n/******/ \t\t// Flag the module as loaded\r\n/******/ \t\tmodule.loaded = true;\r\n/******/ \t\r\n/******/ \t\t// Return the exports of the module\r\n/******/ \t\treturn module.exports;\r\n/******/ \t}\r\n/******/ \t\r\n/************************************************************************/\r\n/******/ \t/* webpack/runtime/node module decorator */\r\n/******/ \t(() => {\r\n/******/ \t\t__w_pdfjs_require__.nmd = (module) => {\r\n/******/ \t\t\tmodule.paths = [];\r\n/******/ \t\t\tif (!module.children) module.children = [];\r\n/******/ \t\t\treturn module;\r\n/******/ \t\t};\r\n/******/ \t})();\r\n/******/ \t\r\n/************************************************************************/\r\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\r\n/******/ \t// startup\r\n/******/ \t// Load entry module and return exports\r\n/******/ \treturn __w_pdfjs_require__(0);\r\n/******/ })()\r\n;\r\n});\r\n//# sourceMappingURL=pdf.js.map"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/pdf.worker.js",
    "content": "/**\r\n * @licstart The following is the entire license notice for the\r\n * Javascript code in this page\r\n *\r\n * Copyright 2020 Mozilla Foundation\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *     http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n *\r\n * @licend The above is the entire license notice for the\r\n * Javascript code in this page\r\n */\r\n\r\n(function webpackUniversalModuleDefinition(root, factory) {\r\n\tif(typeof exports === 'object' && typeof module === 'object')\r\n\t\tmodule.exports = factory();\r\n\telse if(typeof define === 'function' && define.amd)\r\n\t\tdefine(\"pdfjs-dist/build/pdf.worker\", [], factory);\r\n\telse if(typeof exports === 'object')\r\n\t\texports[\"pdfjs-dist/build/pdf.worker\"] = factory();\r\n\telse\r\n\t\troot[\"pdfjs-dist/build/pdf.worker\"] = root.pdfjsWorker = factory();\r\n})(this, function() {\r\nreturn /******/ (() => { // webpackBootstrap\r\n/******/ \tvar __webpack_modules__ = ([\r\n/* 0 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nObject.defineProperty(exports, \"WorkerMessageHandler\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _worker.WorkerMessageHandler;\r\n  }\r\n}));\r\n\r\nvar _worker = __w_pdfjs_require__(1);\r\n\r\nvar pdfjsVersion = '2.8.57';\r\nvar pdfjsBuild = '3d33313e4';\r\n\r\n/***/ }),\r\n/* 1 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.WorkerTask = exports.WorkerMessageHandler = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _pdf_manager = __w_pdfjs_require__(136);\r\n\r\nvar _writer = __w_pdfjs_require__(176);\r\n\r\nvar _is_node = __w_pdfjs_require__(6);\r\n\r\nvar _message_handler = __w_pdfjs_require__(178);\r\n\r\nvar _worker_stream = __w_pdfjs_require__(179);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }\r\n\r\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar WorkerTask = /*#__PURE__*/function () {\r\n  function WorkerTask(name) {\r\n    _classCallCheck(this, WorkerTask);\r\n\r\n    this.name = name;\r\n    this.terminated = false;\r\n    this._capability = (0, _util.createPromiseCapability)();\r\n  }\r\n\r\n  _createClass(WorkerTask, [{\r\n    key: \"finished\",\r\n    get: function get() {\r\n      return this._capability.promise;\r\n    }\r\n  }, {\r\n    key: \"finish\",\r\n    value: function finish() {\r\n      this._capability.resolve();\r\n    }\r\n  }, {\r\n    key: \"terminate\",\r\n    value: function terminate() {\r\n      this.terminated = true;\r\n    }\r\n  }, {\r\n    key: \"ensureNotTerminated\",\r\n    value: function ensureNotTerminated() {\r\n      if (this.terminated) {\r\n        throw new Error(\"Worker task was terminated\");\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return WorkerTask;\r\n}();\r\n\r\nexports.WorkerTask = WorkerTask;\r\n\r\nvar WorkerMessageHandler = /*#__PURE__*/function () {\r\n  function WorkerMessageHandler() {\r\n    _classCallCheck(this, WorkerMessageHandler);\r\n  }\r\n\r\n  _createClass(WorkerMessageHandler, null, [{\r\n    key: \"setup\",\r\n    value: function setup(handler, port) {\r\n      var testMessageProcessed = false;\r\n      handler.on(\"test\", function wphSetupTest(data) {\r\n        if (testMessageProcessed) {\r\n          return;\r\n        }\r\n\r\n        testMessageProcessed = true;\r\n\r\n        if (!(data instanceof Uint8Array)) {\r\n          handler.send(\"test\", null);\r\n          return;\r\n        }\r\n\r\n        var supportTransfers = data[0] === 255;\r\n        handler.postMessageTransfers = supportTransfers;\r\n        handler.send(\"test\", {\r\n          supportTransfers: supportTransfers\r\n        });\r\n      });\r\n      handler.on(\"configure\", function wphConfigure(data) {\r\n        (0, _util.setVerbosityLevel)(data.verbosity);\r\n      });\r\n      handler.on(\"GetDocRequest\", function wphSetupDoc(data) {\r\n        return WorkerMessageHandler.createDocumentHandler(data, port);\r\n      });\r\n    }\r\n  }, {\r\n    key: \"createDocumentHandler\",\r\n    value: function createDocumentHandler(docParams, port) {\r\n      var pdfManager;\r\n      var terminated = false;\r\n      var cancelXHRs = null;\r\n      var WorkerTasks = [];\r\n      var verbosity = (0, _util.getVerbosityLevel)();\r\n      var apiVersion = docParams.apiVersion;\r\n      var workerVersion = '2.8.57';\r\n\r\n      if (apiVersion !== workerVersion) {\r\n        throw new Error(\"The API version \\\"\".concat(apiVersion, \"\\\" does not match \") + \"the Worker version \\\"\".concat(workerVersion, \"\\\".\"));\r\n      }\r\n\r\n      var enumerableProperties = [];\r\n\r\n      for (var property in []) {\r\n        enumerableProperties.push(property);\r\n      }\r\n\r\n      if (enumerableProperties.length) {\r\n        throw new Error(\"The `Array.prototype` contains unexpected enumerable properties: \" + enumerableProperties.join(\", \") + \"; thus breaking e.g. `for...in` iteration of `Array`s.\");\r\n      }\r\n\r\n      var docId = docParams.docId;\r\n      var docBaseUrl = docParams.docBaseUrl;\r\n      var workerHandlerName = docParams.docId + \"_worker\";\r\n      var handler = new _message_handler.MessageHandler(workerHandlerName, docId, port);\r\n      handler.postMessageTransfers = docParams.postMessageTransfers;\r\n\r\n      function ensureNotTerminated() {\r\n        if (terminated) {\r\n          throw new Error(\"Worker was terminated\");\r\n        }\r\n      }\r\n\r\n      function startWorkerTask(task) {\r\n        WorkerTasks.push(task);\r\n      }\r\n\r\n      function finishWorkerTask(task) {\r\n        task.finish();\r\n        var i = WorkerTasks.indexOf(task);\r\n        WorkerTasks.splice(i, 1);\r\n      }\r\n\r\n      function loadDocument(_x) {\r\n        return _loadDocument.apply(this, arguments);\r\n      }\r\n\r\n      function _loadDocument() {\r\n        _loadDocument = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(recoveryMode) {\r\n          var _yield$Promise$all, _yield$Promise$all2, numPages, fingerprint;\r\n\r\n          return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n            while (1) {\r\n              switch (_context.prev = _context.next) {\r\n                case 0:\r\n                  _context.next = 2;\r\n                  return pdfManager.ensureDoc(\"checkHeader\");\r\n\r\n                case 2:\r\n                  _context.next = 4;\r\n                  return pdfManager.ensureDoc(\"parseStartXRef\");\r\n\r\n                case 4:\r\n                  _context.next = 6;\r\n                  return pdfManager.ensureDoc(\"parse\", [recoveryMode]);\r\n\r\n                case 6:\r\n                  if (recoveryMode) {\r\n                    _context.next = 9;\r\n                    break;\r\n                  }\r\n\r\n                  _context.next = 9;\r\n                  return pdfManager.ensureDoc(\"checkFirstPage\");\r\n\r\n                case 9:\r\n                  _context.next = 11;\r\n                  return Promise.all([pdfManager.ensureDoc(\"numPages\"), pdfManager.ensureDoc(\"fingerprint\")]);\r\n\r\n                case 11:\r\n                  _yield$Promise$all = _context.sent;\r\n                  _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);\r\n                  numPages = _yield$Promise$all2[0];\r\n                  fingerprint = _yield$Promise$all2[1];\r\n                  return _context.abrupt(\"return\", {\r\n                    numPages: numPages,\r\n                    fingerprint: fingerprint\r\n                  });\r\n\r\n                case 16:\r\n                case \"end\":\r\n                  return _context.stop();\r\n              }\r\n            }\r\n          }, _callee);\r\n        }));\r\n        return _loadDocument.apply(this, arguments);\r\n      }\r\n\r\n      function getPdfManager(data, evaluatorOptions) {\r\n        var pdfManagerCapability = (0, _util.createPromiseCapability)();\r\n        var newPdfManager;\r\n        var source = data.source;\r\n\r\n        if (source.data) {\r\n          try {\r\n            newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, evaluatorOptions, docBaseUrl);\r\n            pdfManagerCapability.resolve(newPdfManager);\r\n          } catch (ex) {\r\n            pdfManagerCapability.reject(ex);\r\n          }\r\n\r\n          return pdfManagerCapability.promise;\r\n        }\r\n\r\n        var pdfStream,\r\n            cachedChunks = [];\r\n\r\n        try {\r\n          pdfStream = new _worker_stream.PDFWorkerStream(handler);\r\n        } catch (ex) {\r\n          pdfManagerCapability.reject(ex);\r\n          return pdfManagerCapability.promise;\r\n        }\r\n\r\n        var fullRequest = pdfStream.getFullReader();\r\n        fullRequest.headersReady.then(function () {\r\n          if (!fullRequest.isRangeSupported) {\r\n            return;\r\n          }\r\n\r\n          var disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported;\r\n          newPdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, {\r\n            msgHandler: handler,\r\n            password: source.password,\r\n            length: fullRequest.contentLength,\r\n            disableAutoFetch: disableAutoFetch,\r\n            rangeChunkSize: source.rangeChunkSize\r\n          }, evaluatorOptions, docBaseUrl);\r\n\r\n          for (var i = 0; i < cachedChunks.length; i++) {\r\n            newPdfManager.sendProgressiveData(cachedChunks[i]);\r\n          }\r\n\r\n          cachedChunks = [];\r\n          pdfManagerCapability.resolve(newPdfManager);\r\n          cancelXHRs = null;\r\n        })[\"catch\"](function (reason) {\r\n          pdfManagerCapability.reject(reason);\r\n          cancelXHRs = null;\r\n        });\r\n        var loaded = 0;\r\n\r\n        var flushChunks = function flushChunks() {\r\n          var pdfFile = (0, _util.arraysToBytes)(cachedChunks);\r\n\r\n          if (source.length && pdfFile.length !== source.length) {\r\n            (0, _util.warn)(\"reported HTTP length is different from actual\");\r\n          }\r\n\r\n          try {\r\n            newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, docBaseUrl);\r\n            pdfManagerCapability.resolve(newPdfManager);\r\n          } catch (ex) {\r\n            pdfManagerCapability.reject(ex);\r\n          }\r\n\r\n          cachedChunks = [];\r\n        };\r\n\r\n        var readPromise = new Promise(function (resolve, reject) {\r\n          var readChunk = function readChunk(_ref) {\r\n            var value = _ref.value,\r\n                done = _ref.done;\r\n\r\n            try {\r\n              ensureNotTerminated();\r\n\r\n              if (done) {\r\n                if (!newPdfManager) {\r\n                  flushChunks();\r\n                }\r\n\r\n                cancelXHRs = null;\r\n                return;\r\n              }\r\n\r\n              loaded += (0, _util.arrayByteLength)(value);\r\n\r\n              if (!fullRequest.isStreamingSupported) {\r\n                handler.send(\"DocProgress\", {\r\n                  loaded: loaded,\r\n                  total: Math.max(loaded, fullRequest.contentLength || 0)\r\n                });\r\n              }\r\n\r\n              if (newPdfManager) {\r\n                newPdfManager.sendProgressiveData(value);\r\n              } else {\r\n                cachedChunks.push(value);\r\n              }\r\n\r\n              fullRequest.read().then(readChunk, reject);\r\n            } catch (e) {\r\n              reject(e);\r\n            }\r\n          };\r\n\r\n          fullRequest.read().then(readChunk, reject);\r\n        });\r\n        readPromise[\"catch\"](function (e) {\r\n          pdfManagerCapability.reject(e);\r\n          cancelXHRs = null;\r\n        });\r\n\r\n        cancelXHRs = function cancelXHRs(reason) {\r\n          pdfStream.cancelAllRequests(reason);\r\n        };\r\n\r\n        return pdfManagerCapability.promise;\r\n      }\r\n\r\n      function setupDoc(data) {\r\n        function onSuccess(doc) {\r\n          ensureNotTerminated();\r\n          handler.send(\"GetDoc\", {\r\n            pdfInfo: doc\r\n          });\r\n        }\r\n\r\n        function onFailure(ex) {\r\n          ensureNotTerminated();\r\n\r\n          if (ex instanceof _util.PasswordException) {\r\n            var task = new WorkerTask(\"PasswordException: response \".concat(ex.code));\r\n            startWorkerTask(task);\r\n            handler.sendWithPromise(\"PasswordRequest\", ex).then(function (_ref2) {\r\n              var password = _ref2.password;\r\n              finishWorkerTask(task);\r\n              pdfManager.updatePassword(password);\r\n              pdfManagerReady();\r\n            })[\"catch\"](function () {\r\n              finishWorkerTask(task);\r\n              handler.send(\"DocException\", ex);\r\n            });\r\n          } else if (ex instanceof _util.InvalidPDFException || ex instanceof _util.MissingPDFException || ex instanceof _util.UnexpectedResponseException || ex instanceof _util.UnknownErrorException) {\r\n            handler.send(\"DocException\", ex);\r\n          } else {\r\n            handler.send(\"DocException\", new _util.UnknownErrorException(ex.message, ex.toString()));\r\n          }\r\n        }\r\n\r\n        function pdfManagerReady() {\r\n          ensureNotTerminated();\r\n          loadDocument(false).then(onSuccess, function (reason) {\r\n            ensureNotTerminated();\r\n\r\n            if (!(reason instanceof _core_utils.XRefParseException)) {\r\n              onFailure(reason);\r\n              return;\r\n            }\r\n\r\n            pdfManager.requestLoadedStream();\r\n            pdfManager.onLoadedStream().then(function () {\r\n              ensureNotTerminated();\r\n              loadDocument(true).then(onSuccess, onFailure);\r\n            });\r\n          });\r\n        }\r\n\r\n        ensureNotTerminated();\r\n        var evaluatorOptions = {\r\n          maxImageSize: data.maxImageSize,\r\n          disableFontFace: data.disableFontFace,\r\n          ignoreErrors: data.ignoreErrors,\r\n          isEvalSupported: data.isEvalSupported,\r\n          fontExtraProperties: data.fontExtraProperties\r\n        };\r\n        getPdfManager(data, evaluatorOptions).then(function (newPdfManager) {\r\n          if (terminated) {\r\n            newPdfManager.terminate(new _util.AbortException(\"Worker was terminated.\"));\r\n            throw new Error(\"Worker was terminated\");\r\n          }\r\n\r\n          pdfManager = newPdfManager;\r\n          pdfManager.onLoadedStream().then(function (stream) {\r\n            handler.send(\"DataLoaded\", {\r\n              length: stream.bytes.byteLength\r\n            });\r\n          });\r\n        }).then(pdfManagerReady, onFailure);\r\n      }\r\n\r\n      handler.on(\"GetPage\", function wphSetupGetPage(data) {\r\n        return pdfManager.getPage(data.pageIndex).then(function (page) {\r\n          return Promise.all([pdfManager.ensure(page, \"rotate\"), pdfManager.ensure(page, \"ref\"), pdfManager.ensure(page, \"userUnit\"), pdfManager.ensure(page, \"view\")]).then(function (_ref3) {\r\n            var _ref4 = _slicedToArray(_ref3, 4),\r\n                rotate = _ref4[0],\r\n                ref = _ref4[1],\r\n                userUnit = _ref4[2],\r\n                view = _ref4[3];\r\n\r\n            return {\r\n              rotate: rotate,\r\n              ref: ref,\r\n              userUnit: userUnit,\r\n              view: view\r\n            };\r\n          });\r\n        });\r\n      });\r\n      handler.on(\"GetPageIndex\", function wphSetupGetPageIndex(_ref5) {\r\n        var ref = _ref5.ref;\r\n\r\n        var pageRef = _primitives.Ref.get(ref.num, ref.gen);\r\n\r\n        return pdfManager.ensureCatalog(\"getPageIndex\", [pageRef]);\r\n      });\r\n      handler.on(\"GetDestinations\", function wphSetupGetDestinations(data) {\r\n        return pdfManager.ensureCatalog(\"destinations\");\r\n      });\r\n      handler.on(\"GetDestination\", function wphSetupGetDestination(data) {\r\n        return pdfManager.ensureCatalog(\"getDestination\", [data.id]);\r\n      });\r\n      handler.on(\"GetPageLabels\", function wphSetupGetPageLabels(data) {\r\n        return pdfManager.ensureCatalog(\"pageLabels\");\r\n      });\r\n      handler.on(\"GetPageLayout\", function wphSetupGetPageLayout(data) {\r\n        return pdfManager.ensureCatalog(\"pageLayout\");\r\n      });\r\n      handler.on(\"GetPageMode\", function wphSetupGetPageMode(data) {\r\n        return pdfManager.ensureCatalog(\"pageMode\");\r\n      });\r\n      handler.on(\"GetViewerPreferences\", function (data) {\r\n        return pdfManager.ensureCatalog(\"viewerPreferences\");\r\n      });\r\n      handler.on(\"GetOpenAction\", function (data) {\r\n        return pdfManager.ensureCatalog(\"openAction\");\r\n      });\r\n      handler.on(\"GetAttachments\", function wphSetupGetAttachments(data) {\r\n        return pdfManager.ensureCatalog(\"attachments\");\r\n      });\r\n      handler.on(\"GetJavaScript\", function wphSetupGetJavaScript(data) {\r\n        return pdfManager.ensureCatalog(\"javaScript\");\r\n      });\r\n      handler.on(\"GetDocJSActions\", function wphSetupGetDocJSActions(data) {\r\n        return pdfManager.ensureCatalog(\"jsActions\");\r\n      });\r\n      handler.on(\"GetPageJSActions\", function (_ref6) {\r\n        var pageIndex = _ref6.pageIndex;\r\n        return pdfManager.getPage(pageIndex).then(function (page) {\r\n          return page.jsActions;\r\n        });\r\n      });\r\n      handler.on(\"GetOutline\", function wphSetupGetOutline(data) {\r\n        return pdfManager.ensureCatalog(\"documentOutline\");\r\n      });\r\n      handler.on(\"GetOptionalContentConfig\", function (data) {\r\n        return pdfManager.ensureCatalog(\"optionalContentConfig\");\r\n      });\r\n      handler.on(\"GetPermissions\", function (data) {\r\n        return pdfManager.ensureCatalog(\"permissions\");\r\n      });\r\n      handler.on(\"GetMetadata\", function wphSetupGetMetadata(data) {\r\n        return Promise.all([pdfManager.ensureDoc(\"documentInfo\"), pdfManager.ensureCatalog(\"metadata\")]);\r\n      });\r\n      handler.on(\"GetMarkInfo\", function wphSetupGetMarkInfo(data) {\r\n        return pdfManager.ensureCatalog(\"markInfo\");\r\n      });\r\n      handler.on(\"GetData\", function wphSetupGetData(data) {\r\n        pdfManager.requestLoadedStream();\r\n        return pdfManager.onLoadedStream().then(function (stream) {\r\n          return stream.bytes;\r\n        });\r\n      });\r\n      handler.on(\"GetStats\", function wphSetupGetStats(data) {\r\n        return pdfManager.ensureXRef(\"stats\");\r\n      });\r\n      handler.on(\"GetAnnotations\", function (_ref7) {\r\n        var pageIndex = _ref7.pageIndex,\r\n            intent = _ref7.intent;\r\n        return pdfManager.getPage(pageIndex).then(function (page) {\r\n          return page.getAnnotationsData(intent);\r\n        });\r\n      });\r\n      handler.on(\"GetFieldObjects\", function (data) {\r\n        return pdfManager.ensureDoc(\"fieldObjects\");\r\n      });\r\n      handler.on(\"HasJSActions\", function (data) {\r\n        return pdfManager.ensureDoc(\"hasJSActions\");\r\n      });\r\n      handler.on(\"GetCalculationOrderIds\", function (data) {\r\n        return pdfManager.ensureDoc(\"calculationOrderIds\");\r\n      });\r\n      handler.on(\"SaveDocument\", function (_ref8) {\r\n        var numPages = _ref8.numPages,\r\n            annotationStorage = _ref8.annotationStorage,\r\n            filename = _ref8.filename;\r\n        pdfManager.requestLoadedStream();\r\n        var promises = [pdfManager.onLoadedStream(), pdfManager.ensureCatalog(\"acroForm\"), pdfManager.ensureDoc(\"xref\"), pdfManager.ensureDoc(\"startXRef\")];\r\n\r\n        var _loop = function _loop(pageIndex) {\r\n          promises.push(pdfManager.getPage(pageIndex).then(function (page) {\r\n            var task = new WorkerTask(\"Save: page \".concat(pageIndex));\r\n            startWorkerTask(task);\r\n            return page.save(handler, task, annotationStorage)[\"finally\"](function () {\r\n              finishWorkerTask(task);\r\n            });\r\n          }));\r\n        };\r\n\r\n        for (var pageIndex = 0; pageIndex < numPages; pageIndex++) {\r\n          _loop(pageIndex);\r\n        }\r\n\r\n        return Promise.all(promises).then(function (_ref9) {\r\n          var _ref10 = _toArray(_ref9),\r\n              stream = _ref10[0],\r\n              acroForm = _ref10[1],\r\n              xref = _ref10[2],\r\n              startXRef = _ref10[3],\r\n              refs = _ref10.slice(4);\r\n\r\n          var newRefs = [];\r\n\r\n          var _iterator = _createForOfIteratorHelper(refs),\r\n              _step;\r\n\r\n          try {\r\n            for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n              var ref = _step.value;\r\n              newRefs = ref.filter(function (x) {\r\n                return x !== null;\r\n              }).reduce(function (a, b) {\r\n                return a.concat(b);\r\n              }, newRefs);\r\n            }\r\n          } catch (err) {\r\n            _iterator.e(err);\r\n          } finally {\r\n            _iterator.f();\r\n          }\r\n\r\n          if (newRefs.length === 0) {\r\n            return stream.bytes;\r\n          }\r\n\r\n          var xfa = acroForm instanceof _primitives.Dict && acroForm.get(\"XFA\") || [];\r\n          var xfaDatasets = null;\r\n\r\n          if (Array.isArray(xfa)) {\r\n            for (var i = 0, ii = xfa.length; i < ii; i += 2) {\r\n              if (xfa[i] === \"datasets\") {\r\n                xfaDatasets = xfa[i + 1];\r\n              }\r\n            }\r\n          } else {\r\n            (0, _util.warn)(\"Unsupported XFA type.\");\r\n          }\r\n\r\n          var newXrefInfo = Object.create(null);\r\n\r\n          if (xref.trailer) {\r\n            var infoObj = Object.create(null);\r\n            var xrefInfo = xref.trailer.get(\"Info\") || null;\r\n\r\n            if (xrefInfo instanceof _primitives.Dict) {\r\n              xrefInfo.forEach(function (key, value) {\r\n                if ((0, _util.isString)(key) && (0, _util.isString)(value)) {\r\n                  infoObj[key] = (0, _util.stringToPDFString)(value);\r\n                }\r\n              });\r\n            }\r\n\r\n            newXrefInfo = {\r\n              rootRef: xref.trailer.getRaw(\"Root\") || null,\r\n              encrypt: xref.trailer.getRaw(\"Encrypt\") || null,\r\n              newRef: xref.getNewRef(),\r\n              infoRef: xref.trailer.getRaw(\"Info\") || null,\r\n              info: infoObj,\r\n              fileIds: xref.trailer.getRaw(\"ID\") || null,\r\n              startXRef: startXRef,\r\n              filename: filename\r\n            };\r\n          }\r\n\r\n          xref.resetNewRef();\r\n          return (0, _writer.incrementalUpdate)({\r\n            originalData: stream.bytes,\r\n            xrefInfo: newXrefInfo,\r\n            newRefs: newRefs,\r\n            xref: xref,\r\n            datasetsRef: xfaDatasets\r\n          });\r\n        });\r\n      });\r\n      handler.on(\"GetOperatorList\", function wphSetupRenderPage(data, sink) {\r\n        var pageIndex = data.pageIndex;\r\n        pdfManager.getPage(pageIndex).then(function (page) {\r\n          var task = new WorkerTask(\"GetOperatorList: page \".concat(pageIndex));\r\n          startWorkerTask(task);\r\n          var start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0;\r\n          page.getOperatorList({\r\n            handler: handler,\r\n            sink: sink,\r\n            task: task,\r\n            intent: data.intent,\r\n            renderInteractiveForms: data.renderInteractiveForms,\r\n            annotationStorage: data.annotationStorage\r\n          }).then(function (operatorListInfo) {\r\n            finishWorkerTask(task);\r\n\r\n            if (start) {\r\n              (0, _util.info)(\"page=\".concat(pageIndex + 1, \" - getOperatorList: time=\") + \"\".concat(Date.now() - start, \"ms, len=\").concat(operatorListInfo.length));\r\n            }\r\n\r\n            sink.close();\r\n          }, function (reason) {\r\n            finishWorkerTask(task);\r\n\r\n            if (task.terminated) {\r\n              return;\r\n            }\r\n\r\n            handler.send(\"UnsupportedFeature\", {\r\n              featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList\r\n            });\r\n            sink.error(reason);\r\n          });\r\n        });\r\n      });\r\n      handler.on(\"GetTextContent\", function wphExtractText(data, sink) {\r\n        var pageIndex = data.pageIndex;\r\n\r\n        sink.onPull = function (desiredSize) {};\r\n\r\n        sink.onCancel = function (reason) {};\r\n\r\n        pdfManager.getPage(pageIndex).then(function (page) {\r\n          var task = new WorkerTask(\"GetTextContent: page \" + pageIndex);\r\n          startWorkerTask(task);\r\n          var start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0;\r\n          page.extractTextContent({\r\n            handler: handler,\r\n            task: task,\r\n            sink: sink,\r\n            normalizeWhitespace: data.normalizeWhitespace,\r\n            combineTextItems: data.combineTextItems\r\n          }).then(function () {\r\n            finishWorkerTask(task);\r\n\r\n            if (start) {\r\n              (0, _util.info)(\"page=\".concat(pageIndex + 1, \" - getTextContent: time=\") + \"\".concat(Date.now() - start, \"ms\"));\r\n            }\r\n\r\n            sink.close();\r\n          }, function (reason) {\r\n            finishWorkerTask(task);\r\n\r\n            if (task.terminated) {\r\n              return;\r\n            }\r\n\r\n            sink.error(reason);\r\n          });\r\n        });\r\n      });\r\n      handler.on(\"FontFallback\", function (data) {\r\n        return pdfManager.fontFallback(data.id, handler);\r\n      });\r\n      handler.on(\"Cleanup\", function wphCleanup(data) {\r\n        return pdfManager.cleanup(true);\r\n      });\r\n      handler.on(\"Terminate\", function wphTerminate(data) {\r\n        terminated = true;\r\n        var waitOn = [];\r\n\r\n        if (pdfManager) {\r\n          pdfManager.terminate(new _util.AbortException(\"Worker was terminated.\"));\r\n          var cleanupPromise = pdfManager.cleanup();\r\n          waitOn.push(cleanupPromise);\r\n          pdfManager = null;\r\n        } else {\r\n          (0, _primitives.clearPrimitiveCaches)();\r\n        }\r\n\r\n        if (cancelXHRs) {\r\n          cancelXHRs(new _util.AbortException(\"Worker was terminated.\"));\r\n        }\r\n\r\n        WorkerTasks.forEach(function (task) {\r\n          waitOn.push(task.finished);\r\n          task.terminate();\r\n        });\r\n        return Promise.all(waitOn).then(function () {\r\n          handler.destroy();\r\n          handler = null;\r\n        });\r\n      });\r\n      handler.on(\"Ready\", function wphReady(data) {\r\n        setupDoc(docParams);\r\n        docParams = null;\r\n      });\r\n      return workerHandlerName;\r\n    }\r\n  }, {\r\n    key: \"initializeFromPort\",\r\n    value: function initializeFromPort(port) {\r\n      var handler = new _message_handler.MessageHandler(\"worker\", \"main\", port);\r\n      WorkerMessageHandler.setup(handler, port);\r\n      handler.send(\"ready\", null);\r\n    }\r\n  }]);\r\n\r\n  return WorkerMessageHandler;\r\n}();\r\n\r\nexports.WorkerMessageHandler = WorkerMessageHandler;\r\n\r\nfunction isMessagePort(maybePort) {\r\n  return typeof maybePort.postMessage === \"function\" && \"onmessage\" in maybePort;\r\n}\r\n\r\nif (typeof window === \"undefined\" && !_is_node.isNodeJS && typeof self !== \"undefined\" && isMessagePort(self)) {\r\n  WorkerMessageHandler.initializeFromPort(self);\r\n}\r\n\r\n/***/ }),\r\n/* 2 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nmodule.exports = __w_pdfjs_require__(3);\r\n\r\n/***/ }),\r\n/* 3 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n/* module decorator */ module = __w_pdfjs_require__.nmd(module);\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nvar runtime = function (exports) {\r\n  \"use strict\";\r\n\r\n  var Op = Object.prototype;\r\n  var hasOwn = Op.hasOwnProperty;\r\n  var undefined;\r\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\r\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\r\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\r\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\r\n\r\n  function define(obj, key, value) {\r\n    Object.defineProperty(obj, key, {\r\n      value: value,\r\n      enumerable: true,\r\n      configurable: true,\r\n      writable: true\r\n    });\r\n    return obj[key];\r\n  }\r\n\r\n  try {\r\n    define({}, \"\");\r\n  } catch (err) {\r\n    define = function define(obj, key, value) {\r\n      return obj[key] = value;\r\n    };\r\n  }\r\n\r\n  function wrap(innerFn, outerFn, self, tryLocsList) {\r\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\r\n    var generator = Object.create(protoGenerator.prototype);\r\n    var context = new Context(tryLocsList || []);\r\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\r\n    return generator;\r\n  }\r\n\r\n  exports.wrap = wrap;\r\n\r\n  function tryCatch(fn, obj, arg) {\r\n    try {\r\n      return {\r\n        type: \"normal\",\r\n        arg: fn.call(obj, arg)\r\n      };\r\n    } catch (err) {\r\n      return {\r\n        type: \"throw\",\r\n        arg: err\r\n      };\r\n    }\r\n  }\r\n\r\n  var GenStateSuspendedStart = \"suspendedStart\";\r\n  var GenStateSuspendedYield = \"suspendedYield\";\r\n  var GenStateExecuting = \"executing\";\r\n  var GenStateCompleted = \"completed\";\r\n  var ContinueSentinel = {};\r\n\r\n  function Generator() {}\r\n\r\n  function GeneratorFunction() {}\r\n\r\n  function GeneratorFunctionPrototype() {}\r\n\r\n  var IteratorPrototype = {};\r\n\r\n  IteratorPrototype[iteratorSymbol] = function () {\r\n    return this;\r\n  };\r\n\r\n  var getProto = Object.getPrototypeOf;\r\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\r\n\r\n  if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\r\n    IteratorPrototype = NativeIteratorPrototype;\r\n  }\r\n\r\n  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\r\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\r\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\r\n  GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\");\r\n\r\n  function defineIteratorMethods(prototype) {\r\n    [\"next\", \"throw\", \"return\"].forEach(function (method) {\r\n      define(prototype, method, function (arg) {\r\n        return this._invoke(method, arg);\r\n      });\r\n    });\r\n  }\r\n\r\n  exports.isGeneratorFunction = function (genFun) {\r\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\r\n    return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === \"GeneratorFunction\" : false;\r\n  };\r\n\r\n  exports.mark = function (genFun) {\r\n    if (Object.setPrototypeOf) {\r\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\r\n    } else {\r\n      genFun.__proto__ = GeneratorFunctionPrototype;\r\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\r\n    }\r\n\r\n    genFun.prototype = Object.create(Gp);\r\n    return genFun;\r\n  };\r\n\r\n  exports.awrap = function (arg) {\r\n    return {\r\n      __await: arg\r\n    };\r\n  };\r\n\r\n  function AsyncIterator(generator, PromiseImpl) {\r\n    function invoke(method, arg, resolve, reject) {\r\n      var record = tryCatch(generator[method], generator, arg);\r\n\r\n      if (record.type === \"throw\") {\r\n        reject(record.arg);\r\n      } else {\r\n        var result = record.arg;\r\n        var value = result.value;\r\n\r\n        if (value && _typeof(value) === \"object\" && hasOwn.call(value, \"__await\")) {\r\n          return PromiseImpl.resolve(value.__await).then(function (value) {\r\n            invoke(\"next\", value, resolve, reject);\r\n          }, function (err) {\r\n            invoke(\"throw\", err, resolve, reject);\r\n          });\r\n        }\r\n\r\n        return PromiseImpl.resolve(value).then(function (unwrapped) {\r\n          result.value = unwrapped;\r\n          resolve(result);\r\n        }, function (error) {\r\n          return invoke(\"throw\", error, resolve, reject);\r\n        });\r\n      }\r\n    }\r\n\r\n    var previousPromise;\r\n\r\n    function enqueue(method, arg) {\r\n      function callInvokeWithMethodAndArg() {\r\n        return new PromiseImpl(function (resolve, reject) {\r\n          invoke(method, arg, resolve, reject);\r\n        });\r\n      }\r\n\r\n      return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\r\n    }\r\n\r\n    this._invoke = enqueue;\r\n  }\r\n\r\n  defineIteratorMethods(AsyncIterator.prototype);\r\n\r\n  AsyncIterator.prototype[asyncIteratorSymbol] = function () {\r\n    return this;\r\n  };\r\n\r\n  exports.AsyncIterator = AsyncIterator;\r\n\r\n  exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\r\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\r\n    var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\r\n    return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\r\n      return result.done ? result.value : iter.next();\r\n    });\r\n  };\r\n\r\n  function makeInvokeMethod(innerFn, self, context) {\r\n    var state = GenStateSuspendedStart;\r\n    return function invoke(method, arg) {\r\n      if (state === GenStateExecuting) {\r\n        throw new Error(\"Generator is already running\");\r\n      }\r\n\r\n      if (state === GenStateCompleted) {\r\n        if (method === \"throw\") {\r\n          throw arg;\r\n        }\r\n\r\n        return doneResult();\r\n      }\r\n\r\n      context.method = method;\r\n      context.arg = arg;\r\n\r\n      while (true) {\r\n        var delegate = context.delegate;\r\n\r\n        if (delegate) {\r\n          var delegateResult = maybeInvokeDelegate(delegate, context);\r\n\r\n          if (delegateResult) {\r\n            if (delegateResult === ContinueSentinel) continue;\r\n            return delegateResult;\r\n          }\r\n        }\r\n\r\n        if (context.method === \"next\") {\r\n          context.sent = context._sent = context.arg;\r\n        } else if (context.method === \"throw\") {\r\n          if (state === GenStateSuspendedStart) {\r\n            state = GenStateCompleted;\r\n            throw context.arg;\r\n          }\r\n\r\n          context.dispatchException(context.arg);\r\n        } else if (context.method === \"return\") {\r\n          context.abrupt(\"return\", context.arg);\r\n        }\r\n\r\n        state = GenStateExecuting;\r\n        var record = tryCatch(innerFn, self, context);\r\n\r\n        if (record.type === \"normal\") {\r\n          state = context.done ? GenStateCompleted : GenStateSuspendedYield;\r\n\r\n          if (record.arg === ContinueSentinel) {\r\n            continue;\r\n          }\r\n\r\n          return {\r\n            value: record.arg,\r\n            done: context.done\r\n          };\r\n        } else if (record.type === \"throw\") {\r\n          state = GenStateCompleted;\r\n          context.method = \"throw\";\r\n          context.arg = record.arg;\r\n        }\r\n      }\r\n    };\r\n  }\r\n\r\n  function maybeInvokeDelegate(delegate, context) {\r\n    var method = delegate.iterator[context.method];\r\n\r\n    if (method === undefined) {\r\n      context.delegate = null;\r\n\r\n      if (context.method === \"throw\") {\r\n        if (delegate.iterator[\"return\"]) {\r\n          context.method = \"return\";\r\n          context.arg = undefined;\r\n          maybeInvokeDelegate(delegate, context);\r\n\r\n          if (context.method === \"throw\") {\r\n            return ContinueSentinel;\r\n          }\r\n        }\r\n\r\n        context.method = \"throw\";\r\n        context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\r\n      }\r\n\r\n      return ContinueSentinel;\r\n    }\r\n\r\n    var record = tryCatch(method, delegate.iterator, context.arg);\r\n\r\n    if (record.type === \"throw\") {\r\n      context.method = \"throw\";\r\n      context.arg = record.arg;\r\n      context.delegate = null;\r\n      return ContinueSentinel;\r\n    }\r\n\r\n    var info = record.arg;\r\n\r\n    if (!info) {\r\n      context.method = \"throw\";\r\n      context.arg = new TypeError(\"iterator result is not an object\");\r\n      context.delegate = null;\r\n      return ContinueSentinel;\r\n    }\r\n\r\n    if (info.done) {\r\n      context[delegate.resultName] = info.value;\r\n      context.next = delegate.nextLoc;\r\n\r\n      if (context.method !== \"return\") {\r\n        context.method = \"next\";\r\n        context.arg = undefined;\r\n      }\r\n    } else {\r\n      return info;\r\n    }\r\n\r\n    context.delegate = null;\r\n    return ContinueSentinel;\r\n  }\r\n\r\n  defineIteratorMethods(Gp);\r\n  define(Gp, toStringTagSymbol, \"Generator\");\r\n\r\n  Gp[iteratorSymbol] = function () {\r\n    return this;\r\n  };\r\n\r\n  Gp.toString = function () {\r\n    return \"[object Generator]\";\r\n  };\r\n\r\n  function pushTryEntry(locs) {\r\n    var entry = {\r\n      tryLoc: locs[0]\r\n    };\r\n\r\n    if (1 in locs) {\r\n      entry.catchLoc = locs[1];\r\n    }\r\n\r\n    if (2 in locs) {\r\n      entry.finallyLoc = locs[2];\r\n      entry.afterLoc = locs[3];\r\n    }\r\n\r\n    this.tryEntries.push(entry);\r\n  }\r\n\r\n  function resetTryEntry(entry) {\r\n    var record = entry.completion || {};\r\n    record.type = \"normal\";\r\n    delete record.arg;\r\n    entry.completion = record;\r\n  }\r\n\r\n  function Context(tryLocsList) {\r\n    this.tryEntries = [{\r\n      tryLoc: \"root\"\r\n    }];\r\n    tryLocsList.forEach(pushTryEntry, this);\r\n    this.reset(true);\r\n  }\r\n\r\n  exports.keys = function (object) {\r\n    var keys = [];\r\n\r\n    for (var key in object) {\r\n      keys.push(key);\r\n    }\r\n\r\n    keys.reverse();\r\n    return function next() {\r\n      while (keys.length) {\r\n        var key = keys.pop();\r\n\r\n        if (key in object) {\r\n          next.value = key;\r\n          next.done = false;\r\n          return next;\r\n        }\r\n      }\r\n\r\n      next.done = true;\r\n      return next;\r\n    };\r\n  };\r\n\r\n  function values(iterable) {\r\n    if (iterable) {\r\n      var iteratorMethod = iterable[iteratorSymbol];\r\n\r\n      if (iteratorMethod) {\r\n        return iteratorMethod.call(iterable);\r\n      }\r\n\r\n      if (typeof iterable.next === \"function\") {\r\n        return iterable;\r\n      }\r\n\r\n      if (!isNaN(iterable.length)) {\r\n        var i = -1,\r\n            next = function next() {\r\n          while (++i < iterable.length) {\r\n            if (hasOwn.call(iterable, i)) {\r\n              next.value = iterable[i];\r\n              next.done = false;\r\n              return next;\r\n            }\r\n          }\r\n\r\n          next.value = undefined;\r\n          next.done = true;\r\n          return next;\r\n        };\r\n\r\n        return next.next = next;\r\n      }\r\n    }\r\n\r\n    return {\r\n      next: doneResult\r\n    };\r\n  }\r\n\r\n  exports.values = values;\r\n\r\n  function doneResult() {\r\n    return {\r\n      value: undefined,\r\n      done: true\r\n    };\r\n  }\r\n\r\n  Context.prototype = {\r\n    constructor: Context,\r\n    reset: function reset(skipTempReset) {\r\n      this.prev = 0;\r\n      this.next = 0;\r\n      this.sent = this._sent = undefined;\r\n      this.done = false;\r\n      this.delegate = null;\r\n      this.method = \"next\";\r\n      this.arg = undefined;\r\n      this.tryEntries.forEach(resetTryEntry);\r\n\r\n      if (!skipTempReset) {\r\n        for (var name in this) {\r\n          if (name.charAt(0) === \"t\" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\r\n            this[name] = undefined;\r\n          }\r\n        }\r\n      }\r\n    },\r\n    stop: function stop() {\r\n      this.done = true;\r\n      var rootEntry = this.tryEntries[0];\r\n      var rootRecord = rootEntry.completion;\r\n\r\n      if (rootRecord.type === \"throw\") {\r\n        throw rootRecord.arg;\r\n      }\r\n\r\n      return this.rval;\r\n    },\r\n    dispatchException: function dispatchException(exception) {\r\n      if (this.done) {\r\n        throw exception;\r\n      }\r\n\r\n      var context = this;\r\n\r\n      function handle(loc, caught) {\r\n        record.type = \"throw\";\r\n        record.arg = exception;\r\n        context.next = loc;\r\n\r\n        if (caught) {\r\n          context.method = \"next\";\r\n          context.arg = undefined;\r\n        }\r\n\r\n        return !!caught;\r\n      }\r\n\r\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\r\n        var entry = this.tryEntries[i];\r\n        var record = entry.completion;\r\n\r\n        if (entry.tryLoc === \"root\") {\r\n          return handle(\"end\");\r\n        }\r\n\r\n        if (entry.tryLoc <= this.prev) {\r\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\r\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\r\n\r\n          if (hasCatch && hasFinally) {\r\n            if (this.prev < entry.catchLoc) {\r\n              return handle(entry.catchLoc, true);\r\n            } else if (this.prev < entry.finallyLoc) {\r\n              return handle(entry.finallyLoc);\r\n            }\r\n          } else if (hasCatch) {\r\n            if (this.prev < entry.catchLoc) {\r\n              return handle(entry.catchLoc, true);\r\n            }\r\n          } else if (hasFinally) {\r\n            if (this.prev < entry.finallyLoc) {\r\n              return handle(entry.finallyLoc);\r\n            }\r\n          } else {\r\n            throw new Error(\"try statement without catch or finally\");\r\n          }\r\n        }\r\n      }\r\n    },\r\n    abrupt: function abrupt(type, arg) {\r\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\r\n        var entry = this.tryEntries[i];\r\n\r\n        if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\r\n          var finallyEntry = entry;\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (finallyEntry && (type === \"break\" || type === \"continue\") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\r\n        finallyEntry = null;\r\n      }\r\n\r\n      var record = finallyEntry ? finallyEntry.completion : {};\r\n      record.type = type;\r\n      record.arg = arg;\r\n\r\n      if (finallyEntry) {\r\n        this.method = \"next\";\r\n        this.next = finallyEntry.finallyLoc;\r\n        return ContinueSentinel;\r\n      }\r\n\r\n      return this.complete(record);\r\n    },\r\n    complete: function complete(record, afterLoc) {\r\n      if (record.type === \"throw\") {\r\n        throw record.arg;\r\n      }\r\n\r\n      if (record.type === \"break\" || record.type === \"continue\") {\r\n        this.next = record.arg;\r\n      } else if (record.type === \"return\") {\r\n        this.rval = this.arg = record.arg;\r\n        this.method = \"return\";\r\n        this.next = \"end\";\r\n      } else if (record.type === \"normal\" && afterLoc) {\r\n        this.next = afterLoc;\r\n      }\r\n\r\n      return ContinueSentinel;\r\n    },\r\n    finish: function finish(finallyLoc) {\r\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\r\n        var entry = this.tryEntries[i];\r\n\r\n        if (entry.finallyLoc === finallyLoc) {\r\n          this.complete(entry.completion, entry.afterLoc);\r\n          resetTryEntry(entry);\r\n          return ContinueSentinel;\r\n        }\r\n      }\r\n    },\r\n    \"catch\": function _catch(tryLoc) {\r\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\r\n        var entry = this.tryEntries[i];\r\n\r\n        if (entry.tryLoc === tryLoc) {\r\n          var record = entry.completion;\r\n\r\n          if (record.type === \"throw\") {\r\n            var thrown = record.arg;\r\n            resetTryEntry(entry);\r\n          }\r\n\r\n          return thrown;\r\n        }\r\n      }\r\n\r\n      throw new Error(\"illegal catch attempt\");\r\n    },\r\n    delegateYield: function delegateYield(iterable, resultName, nextLoc) {\r\n      this.delegate = {\r\n        iterator: values(iterable),\r\n        resultName: resultName,\r\n        nextLoc: nextLoc\r\n      };\r\n\r\n      if (this.method === \"next\") {\r\n        this.arg = undefined;\r\n      }\r\n\r\n      return ContinueSentinel;\r\n    }\r\n  };\r\n  return exports;\r\n}(( false ? 0 : _typeof(module)) === \"object\" ? module.exports : {});\r\n\r\ntry {\r\n  regeneratorRuntime = runtime;\r\n} catch (accidentalStrictMode) {\r\n  Function(\"r\", \"regeneratorRuntime = r\")(runtime);\r\n}\r\n\r\n/***/ }),\r\n/* 4 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.arrayByteLength = arrayByteLength;\r\nexports.arraysToBytes = arraysToBytes;\r\nexports.assert = assert;\r\nexports.bytesToString = bytesToString;\r\nexports.createPromiseCapability = createPromiseCapability;\r\nexports.createValidAbsoluteUrl = createValidAbsoluteUrl;\r\nexports.encodeToXmlString = encodeToXmlString;\r\nexports.escapeString = escapeString;\r\nexports.getModificationDate = getModificationDate;\r\nexports.getVerbosityLevel = getVerbosityLevel;\r\nexports.info = info;\r\nexports.isArrayBuffer = isArrayBuffer;\r\nexports.isArrayEqual = isArrayEqual;\r\nexports.isAscii = isAscii;\r\nexports.isBool = isBool;\r\nexports.isNum = isNum;\r\nexports.isSameOrigin = isSameOrigin;\r\nexports.isString = isString;\r\nexports.objectFromEntries = objectFromEntries;\r\nexports.objectSize = objectSize;\r\nexports.removeNullCharacters = removeNullCharacters;\r\nexports.setVerbosityLevel = setVerbosityLevel;\r\nexports.shadow = shadow;\r\nexports.string32 = string32;\r\nexports.stringToBytes = stringToBytes;\r\nexports.stringToPDFString = stringToPDFString;\r\nexports.stringToUTF16BEString = stringToUTF16BEString;\r\nexports.stringToUTF8String = stringToUTF8String;\r\nexports.unreachable = unreachable;\r\nexports.utf8StringToString = utf8StringToString;\r\nexports.warn = warn;\r\nexports.VerbosityLevel = exports.Util = exports.UNSUPPORTED_FEATURES = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.createObjectURL = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;\r\n\r\n__w_pdfjs_require__(5);\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\r\n\r\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\r\n\r\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nvar IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\r\nexports.IDENTITY_MATRIX = IDENTITY_MATRIX;\r\nvar FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\r\nexports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;\r\nvar PermissionFlag = {\r\n  PRINT: 0x04,\r\n  MODIFY_CONTENTS: 0x08,\r\n  COPY: 0x10,\r\n  MODIFY_ANNOTATIONS: 0x20,\r\n  FILL_INTERACTIVE_FORMS: 0x100,\r\n  COPY_FOR_ACCESSIBILITY: 0x200,\r\n  ASSEMBLE: 0x400,\r\n  PRINT_HIGH_QUALITY: 0x800\r\n};\r\nexports.PermissionFlag = PermissionFlag;\r\nvar TextRenderingMode = {\r\n  FILL: 0,\r\n  STROKE: 1,\r\n  FILL_STROKE: 2,\r\n  INVISIBLE: 3,\r\n  FILL_ADD_TO_PATH: 4,\r\n  STROKE_ADD_TO_PATH: 5,\r\n  FILL_STROKE_ADD_TO_PATH: 6,\r\n  ADD_TO_PATH: 7,\r\n  FILL_STROKE_MASK: 3,\r\n  ADD_TO_PATH_FLAG: 4\r\n};\r\nexports.TextRenderingMode = TextRenderingMode;\r\nvar ImageKind = {\r\n  GRAYSCALE_1BPP: 1,\r\n  RGB_24BPP: 2,\r\n  RGBA_32BPP: 3\r\n};\r\nexports.ImageKind = ImageKind;\r\nvar AnnotationType = {\r\n  TEXT: 1,\r\n  LINK: 2,\r\n  FREETEXT: 3,\r\n  LINE: 4,\r\n  SQUARE: 5,\r\n  CIRCLE: 6,\r\n  POLYGON: 7,\r\n  POLYLINE: 8,\r\n  HIGHLIGHT: 9,\r\n  UNDERLINE: 10,\r\n  SQUIGGLY: 11,\r\n  STRIKEOUT: 12,\r\n  STAMP: 13,\r\n  CARET: 14,\r\n  INK: 15,\r\n  POPUP: 16,\r\n  FILEATTACHMENT: 17,\r\n  SOUND: 18,\r\n  MOVIE: 19,\r\n  WIDGET: 20,\r\n  SCREEN: 21,\r\n  PRINTERMARK: 22,\r\n  TRAPNET: 23,\r\n  WATERMARK: 24,\r\n  THREED: 25,\r\n  REDACT: 26\r\n};\r\nexports.AnnotationType = AnnotationType;\r\nvar AnnotationStateModelType = {\r\n  MARKED: \"Marked\",\r\n  REVIEW: \"Review\"\r\n};\r\nexports.AnnotationStateModelType = AnnotationStateModelType;\r\nvar AnnotationMarkedState = {\r\n  MARKED: \"Marked\",\r\n  UNMARKED: \"Unmarked\"\r\n};\r\nexports.AnnotationMarkedState = AnnotationMarkedState;\r\nvar AnnotationReviewState = {\r\n  ACCEPTED: \"Accepted\",\r\n  REJECTED: \"Rejected\",\r\n  CANCELLED: \"Cancelled\",\r\n  COMPLETED: \"Completed\",\r\n  NONE: \"None\"\r\n};\r\nexports.AnnotationReviewState = AnnotationReviewState;\r\nvar AnnotationReplyType = {\r\n  GROUP: \"Group\",\r\n  REPLY: \"R\"\r\n};\r\nexports.AnnotationReplyType = AnnotationReplyType;\r\nvar AnnotationFlag = {\r\n  INVISIBLE: 0x01,\r\n  HIDDEN: 0x02,\r\n  PRINT: 0x04,\r\n  NOZOOM: 0x08,\r\n  NOROTATE: 0x10,\r\n  NOVIEW: 0x20,\r\n  READONLY: 0x40,\r\n  LOCKED: 0x80,\r\n  TOGGLENOVIEW: 0x100,\r\n  LOCKEDCONTENTS: 0x200\r\n};\r\nexports.AnnotationFlag = AnnotationFlag;\r\nvar AnnotationFieldFlag = {\r\n  READONLY: 0x0000001,\r\n  REQUIRED: 0x0000002,\r\n  NOEXPORT: 0x0000004,\r\n  MULTILINE: 0x0001000,\r\n  PASSWORD: 0x0002000,\r\n  NOTOGGLETOOFF: 0x0004000,\r\n  RADIO: 0x0008000,\r\n  PUSHBUTTON: 0x0010000,\r\n  COMBO: 0x0020000,\r\n  EDIT: 0x0040000,\r\n  SORT: 0x0080000,\r\n  FILESELECT: 0x0100000,\r\n  MULTISELECT: 0x0200000,\r\n  DONOTSPELLCHECK: 0x0400000,\r\n  DONOTSCROLL: 0x0800000,\r\n  COMB: 0x1000000,\r\n  RICHTEXT: 0x2000000,\r\n  RADIOSINUNISON: 0x2000000,\r\n  COMMITONSELCHANGE: 0x4000000\r\n};\r\nexports.AnnotationFieldFlag = AnnotationFieldFlag;\r\nvar AnnotationBorderStyleType = {\r\n  SOLID: 1,\r\n  DASHED: 2,\r\n  BEVELED: 3,\r\n  INSET: 4,\r\n  UNDERLINE: 5\r\n};\r\nexports.AnnotationBorderStyleType = AnnotationBorderStyleType;\r\nvar AnnotationActionEventType = {\r\n  E: \"Mouse Enter\",\r\n  X: \"Mouse Exit\",\r\n  D: \"Mouse Down\",\r\n  U: \"Mouse Up\",\r\n  Fo: \"Focus\",\r\n  Bl: \"Blur\",\r\n  PO: \"PageOpen\",\r\n  PC: \"PageClose\",\r\n  PV: \"PageVisible\",\r\n  PI: \"PageInvisible\",\r\n  K: \"Keystroke\",\r\n  F: \"Format\",\r\n  V: \"Validate\",\r\n  C: \"Calculate\"\r\n};\r\nexports.AnnotationActionEventType = AnnotationActionEventType;\r\nvar DocumentActionEventType = {\r\n  WC: \"WillClose\",\r\n  WS: \"WillSave\",\r\n  DS: \"DidSave\",\r\n  WP: \"WillPrint\",\r\n  DP: \"DidPrint\"\r\n};\r\nexports.DocumentActionEventType = DocumentActionEventType;\r\nvar PageActionEventType = {\r\n  O: \"PageOpen\",\r\n  C: \"PageClose\"\r\n};\r\nexports.PageActionEventType = PageActionEventType;\r\nvar StreamType = {\r\n  UNKNOWN: \"UNKNOWN\",\r\n  FLATE: \"FLATE\",\r\n  LZW: \"LZW\",\r\n  DCT: \"DCT\",\r\n  JPX: \"JPX\",\r\n  JBIG: \"JBIG\",\r\n  A85: \"A85\",\r\n  AHX: \"AHX\",\r\n  CCF: \"CCF\",\r\n  RLX: \"RLX\"\r\n};\r\nexports.StreamType = StreamType;\r\nvar FontType = {\r\n  UNKNOWN: \"UNKNOWN\",\r\n  TYPE1: \"TYPE1\",\r\n  TYPE1C: \"TYPE1C\",\r\n  CIDFONTTYPE0: \"CIDFONTTYPE0\",\r\n  CIDFONTTYPE0C: \"CIDFONTTYPE0C\",\r\n  TRUETYPE: \"TRUETYPE\",\r\n  CIDFONTTYPE2: \"CIDFONTTYPE2\",\r\n  TYPE3: \"TYPE3\",\r\n  OPENTYPE: \"OPENTYPE\",\r\n  TYPE0: \"TYPE0\",\r\n  MMTYPE1: \"MMTYPE1\"\r\n};\r\nexports.FontType = FontType;\r\nvar VerbosityLevel = {\r\n  ERRORS: 0,\r\n  WARNINGS: 1,\r\n  INFOS: 5\r\n};\r\nexports.VerbosityLevel = VerbosityLevel;\r\nvar CMapCompressionType = {\r\n  NONE: 0,\r\n  BINARY: 1,\r\n  STREAM: 2\r\n};\r\nexports.CMapCompressionType = CMapCompressionType;\r\nvar OPS = {\r\n  dependency: 1,\r\n  setLineWidth: 2,\r\n  setLineCap: 3,\r\n  setLineJoin: 4,\r\n  setMiterLimit: 5,\r\n  setDash: 6,\r\n  setRenderingIntent: 7,\r\n  setFlatness: 8,\r\n  setGState: 9,\r\n  save: 10,\r\n  restore: 11,\r\n  transform: 12,\r\n  moveTo: 13,\r\n  lineTo: 14,\r\n  curveTo: 15,\r\n  curveTo2: 16,\r\n  curveTo3: 17,\r\n  closePath: 18,\r\n  rectangle: 19,\r\n  stroke: 20,\r\n  closeStroke: 21,\r\n  fill: 22,\r\n  eoFill: 23,\r\n  fillStroke: 24,\r\n  eoFillStroke: 25,\r\n  closeFillStroke: 26,\r\n  closeEOFillStroke: 27,\r\n  endPath: 28,\r\n  clip: 29,\r\n  eoClip: 30,\r\n  beginText: 31,\r\n  endText: 32,\r\n  setCharSpacing: 33,\r\n  setWordSpacing: 34,\r\n  setHScale: 35,\r\n  setLeading: 36,\r\n  setFont: 37,\r\n  setTextRenderingMode: 38,\r\n  setTextRise: 39,\r\n  moveText: 40,\r\n  setLeadingMoveText: 41,\r\n  setTextMatrix: 42,\r\n  nextLine: 43,\r\n  showText: 44,\r\n  showSpacedText: 45,\r\n  nextLineShowText: 46,\r\n  nextLineSetSpacingShowText: 47,\r\n  setCharWidth: 48,\r\n  setCharWidthAndBounds: 49,\r\n  setStrokeColorSpace: 50,\r\n  setFillColorSpace: 51,\r\n  setStrokeColor: 52,\r\n  setStrokeColorN: 53,\r\n  setFillColor: 54,\r\n  setFillColorN: 55,\r\n  setStrokeGray: 56,\r\n  setFillGray: 57,\r\n  setStrokeRGBColor: 58,\r\n  setFillRGBColor: 59,\r\n  setStrokeCMYKColor: 60,\r\n  setFillCMYKColor: 61,\r\n  shadingFill: 62,\r\n  beginInlineImage: 63,\r\n  beginImageData: 64,\r\n  endInlineImage: 65,\r\n  paintXObject: 66,\r\n  markPoint: 67,\r\n  markPointProps: 68,\r\n  beginMarkedContent: 69,\r\n  beginMarkedContentProps: 70,\r\n  endMarkedContent: 71,\r\n  beginCompat: 72,\r\n  endCompat: 73,\r\n  paintFormXObjectBegin: 74,\r\n  paintFormXObjectEnd: 75,\r\n  beginGroup: 76,\r\n  endGroup: 77,\r\n  beginAnnotations: 78,\r\n  endAnnotations: 79,\r\n  beginAnnotation: 80,\r\n  endAnnotation: 81,\r\n  paintJpegXObject: 82,\r\n  paintImageMaskXObject: 83,\r\n  paintImageMaskXObjectGroup: 84,\r\n  paintImageXObject: 85,\r\n  paintInlineImageXObject: 86,\r\n  paintInlineImageXObjectGroup: 87,\r\n  paintImageXObjectRepeat: 88,\r\n  paintImageMaskXObjectRepeat: 89,\r\n  paintSolidColorImageMask: 90,\r\n  constructPath: 91\r\n};\r\nexports.OPS = OPS;\r\nvar UNSUPPORTED_FEATURES = {\r\n  unknown: \"unknown\",\r\n  forms: \"forms\",\r\n  javaScript: \"javaScript\",\r\n  smask: \"smask\",\r\n  shadingPattern: \"shadingPattern\",\r\n  font: \"font\",\r\n  errorTilingPattern: \"errorTilingPattern\",\r\n  errorExtGState: \"errorExtGState\",\r\n  errorXObject: \"errorXObject\",\r\n  errorFontLoadType3: \"errorFontLoadType3\",\r\n  errorFontState: \"errorFontState\",\r\n  errorFontMissing: \"errorFontMissing\",\r\n  errorFontTranslate: \"errorFontTranslate\",\r\n  errorColorSpace: \"errorColorSpace\",\r\n  errorOperatorList: \"errorOperatorList\",\r\n  errorFontToUnicode: \"errorFontToUnicode\",\r\n  errorFontLoadNative: \"errorFontLoadNative\",\r\n  errorFontGetPath: \"errorFontGetPath\",\r\n  errorMarkedContent: \"errorMarkedContent\"\r\n};\r\nexports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;\r\nvar PasswordResponses = {\r\n  NEED_PASSWORD: 1,\r\n  INCORRECT_PASSWORD: 2\r\n};\r\nexports.PasswordResponses = PasswordResponses;\r\nvar verbosity = VerbosityLevel.WARNINGS;\r\n\r\nfunction setVerbosityLevel(level) {\r\n  if (Number.isInteger(level)) {\r\n    verbosity = level;\r\n  }\r\n}\r\n\r\nfunction getVerbosityLevel() {\r\n  return verbosity;\r\n}\r\n\r\nfunction info(msg) {\r\n  if (verbosity >= VerbosityLevel.INFOS) {\r\n    console.log(\"Info: \".concat(msg));\r\n  }\r\n}\r\n\r\nfunction warn(msg) {\r\n  if (verbosity >= VerbosityLevel.WARNINGS) {\r\n    console.log(\"Warning: \".concat(msg));\r\n  }\r\n}\r\n\r\nfunction unreachable(msg) {\r\n  throw new Error(msg);\r\n}\r\n\r\nfunction assert(cond, msg) {\r\n  if (!cond) {\r\n    unreachable(msg);\r\n  }\r\n}\r\n\r\nfunction isSameOrigin(baseUrl, otherUrl) {\r\n  var base;\r\n\r\n  try {\r\n    base = new URL(baseUrl);\r\n\r\n    if (!base.origin || base.origin === \"null\") {\r\n      return false;\r\n    }\r\n  } catch (e) {\r\n    return false;\r\n  }\r\n\r\n  var other = new URL(otherUrl, base);\r\n  return base.origin === other.origin;\r\n}\r\n\r\nfunction _isValidProtocol(url) {\r\n  if (!url) {\r\n    return false;\r\n  }\r\n\r\n  switch (url.protocol) {\r\n    case \"http:\":\r\n    case \"https:\":\r\n    case \"ftp:\":\r\n    case \"mailto:\":\r\n    case \"tel:\":\r\n      return true;\r\n\r\n    default:\r\n      return false;\r\n  }\r\n}\r\n\r\nfunction createValidAbsoluteUrl(url, baseUrl) {\r\n  if (!url) {\r\n    return null;\r\n  }\r\n\r\n  try {\r\n    var absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);\r\n\r\n    if (_isValidProtocol(absoluteUrl)) {\r\n      return absoluteUrl;\r\n    }\r\n  } catch (ex) {}\r\n\r\n  return null;\r\n}\r\n\r\nfunction shadow(obj, prop, value) {\r\n  Object.defineProperty(obj, prop, {\r\n    value: value,\r\n    enumerable: true,\r\n    configurable: true,\r\n    writable: false\r\n  });\r\n  return value;\r\n}\r\n\r\nvar BaseException = function BaseExceptionClosure() {\r\n  function BaseException(message) {\r\n    if (this.constructor === BaseException) {\r\n      unreachable(\"Cannot initialize BaseException.\");\r\n    }\r\n\r\n    this.message = message;\r\n    this.name = this.constructor.name;\r\n  }\r\n\r\n  BaseException.prototype = new Error();\r\n  BaseException.constructor = BaseException;\r\n  return BaseException;\r\n}();\r\n\r\nexports.BaseException = BaseException;\r\n\r\nvar PasswordException = /*#__PURE__*/function (_BaseException) {\r\n  _inherits(PasswordException, _BaseException);\r\n\r\n  var _super = _createSuper(PasswordException);\r\n\r\n  function PasswordException(msg, code) {\r\n    var _this;\r\n\r\n    _classCallCheck(this, PasswordException);\r\n\r\n    _this = _super.call(this, msg);\r\n    _this.code = code;\r\n    return _this;\r\n  }\r\n\r\n  return PasswordException;\r\n}(BaseException);\r\n\r\nexports.PasswordException = PasswordException;\r\n\r\nvar UnknownErrorException = /*#__PURE__*/function (_BaseException2) {\r\n  _inherits(UnknownErrorException, _BaseException2);\r\n\r\n  var _super2 = _createSuper(UnknownErrorException);\r\n\r\n  function UnknownErrorException(msg, details) {\r\n    var _this2;\r\n\r\n    _classCallCheck(this, UnknownErrorException);\r\n\r\n    _this2 = _super2.call(this, msg);\r\n    _this2.details = details;\r\n    return _this2;\r\n  }\r\n\r\n  return UnknownErrorException;\r\n}(BaseException);\r\n\r\nexports.UnknownErrorException = UnknownErrorException;\r\n\r\nvar InvalidPDFException = /*#__PURE__*/function (_BaseException3) {\r\n  _inherits(InvalidPDFException, _BaseException3);\r\n\r\n  var _super3 = _createSuper(InvalidPDFException);\r\n\r\n  function InvalidPDFException() {\r\n    _classCallCheck(this, InvalidPDFException);\r\n\r\n    return _super3.apply(this, arguments);\r\n  }\r\n\r\n  return InvalidPDFException;\r\n}(BaseException);\r\n\r\nexports.InvalidPDFException = InvalidPDFException;\r\n\r\nvar MissingPDFException = /*#__PURE__*/function (_BaseException4) {\r\n  _inherits(MissingPDFException, _BaseException4);\r\n\r\n  var _super4 = _createSuper(MissingPDFException);\r\n\r\n  function MissingPDFException() {\r\n    _classCallCheck(this, MissingPDFException);\r\n\r\n    return _super4.apply(this, arguments);\r\n  }\r\n\r\n  return MissingPDFException;\r\n}(BaseException);\r\n\r\nexports.MissingPDFException = MissingPDFException;\r\n\r\nvar UnexpectedResponseException = /*#__PURE__*/function (_BaseException5) {\r\n  _inherits(UnexpectedResponseException, _BaseException5);\r\n\r\n  var _super5 = _createSuper(UnexpectedResponseException);\r\n\r\n  function UnexpectedResponseException(msg, status) {\r\n    var _this3;\r\n\r\n    _classCallCheck(this, UnexpectedResponseException);\r\n\r\n    _this3 = _super5.call(this, msg);\r\n    _this3.status = status;\r\n    return _this3;\r\n  }\r\n\r\n  return UnexpectedResponseException;\r\n}(BaseException);\r\n\r\nexports.UnexpectedResponseException = UnexpectedResponseException;\r\n\r\nvar FormatError = /*#__PURE__*/function (_BaseException6) {\r\n  _inherits(FormatError, _BaseException6);\r\n\r\n  var _super6 = _createSuper(FormatError);\r\n\r\n  function FormatError() {\r\n    _classCallCheck(this, FormatError);\r\n\r\n    return _super6.apply(this, arguments);\r\n  }\r\n\r\n  return FormatError;\r\n}(BaseException);\r\n\r\nexports.FormatError = FormatError;\r\n\r\nvar AbortException = /*#__PURE__*/function (_BaseException7) {\r\n  _inherits(AbortException, _BaseException7);\r\n\r\n  var _super7 = _createSuper(AbortException);\r\n\r\n  function AbortException() {\r\n    _classCallCheck(this, AbortException);\r\n\r\n    return _super7.apply(this, arguments);\r\n  }\r\n\r\n  return AbortException;\r\n}(BaseException);\r\n\r\nexports.AbortException = AbortException;\r\nvar NullCharactersRegExp = /\\x00/g;\r\n\r\nfunction removeNullCharacters(str) {\r\n  if (typeof str !== \"string\") {\r\n    warn(\"The argument for removeNullCharacters must be a string.\");\r\n    return str;\r\n  }\r\n\r\n  return str.replace(NullCharactersRegExp, \"\");\r\n}\r\n\r\nfunction bytesToString(bytes) {\r\n  assert(bytes !== null && _typeof(bytes) === \"object\" && bytes.length !== undefined, \"Invalid argument for bytesToString\");\r\n  var length = bytes.length;\r\n  var MAX_ARGUMENT_COUNT = 8192;\r\n\r\n  if (length < MAX_ARGUMENT_COUNT) {\r\n    return String.fromCharCode.apply(null, bytes);\r\n  }\r\n\r\n  var strBuf = [];\r\n\r\n  for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\r\n    var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\r\n    var chunk = bytes.subarray(i, chunkEnd);\r\n    strBuf.push(String.fromCharCode.apply(null, chunk));\r\n  }\r\n\r\n  return strBuf.join(\"\");\r\n}\r\n\r\nfunction stringToBytes(str) {\r\n  assert(typeof str === \"string\", \"Invalid argument for stringToBytes\");\r\n  var length = str.length;\r\n  var bytes = new Uint8Array(length);\r\n\r\n  for (var i = 0; i < length; ++i) {\r\n    bytes[i] = str.charCodeAt(i) & 0xff;\r\n  }\r\n\r\n  return bytes;\r\n}\r\n\r\nfunction arrayByteLength(arr) {\r\n  if (arr.length !== undefined) {\r\n    return arr.length;\r\n  }\r\n\r\n  assert(arr.byteLength !== undefined, \"arrayByteLength - invalid argument.\");\r\n  return arr.byteLength;\r\n}\r\n\r\nfunction arraysToBytes(arr) {\r\n  var length = arr.length;\r\n\r\n  if (length === 1 && arr[0] instanceof Uint8Array) {\r\n    return arr[0];\r\n  }\r\n\r\n  var resultLength = 0;\r\n\r\n  for (var i = 0; i < length; i++) {\r\n    resultLength += arrayByteLength(arr[i]);\r\n  }\r\n\r\n  var pos = 0;\r\n  var data = new Uint8Array(resultLength);\r\n\r\n  for (var _i = 0; _i < length; _i++) {\r\n    var item = arr[_i];\r\n\r\n    if (!(item instanceof Uint8Array)) {\r\n      if (typeof item === \"string\") {\r\n        item = stringToBytes(item);\r\n      } else {\r\n        item = new Uint8Array(item);\r\n      }\r\n    }\r\n\r\n    var itemLength = item.byteLength;\r\n    data.set(item, pos);\r\n    pos += itemLength;\r\n  }\r\n\r\n  return data;\r\n}\r\n\r\nfunction string32(value) {\r\n  return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);\r\n}\r\n\r\nfunction objectSize(obj) {\r\n  return Object.keys(obj).length;\r\n}\r\n\r\nfunction objectFromEntries(iterable) {\r\n  return Object.assign(Object.create(null), Object.fromEntries(iterable));\r\n}\r\n\r\nfunction isLittleEndian() {\r\n  var buffer8 = new Uint8Array(4);\r\n  buffer8[0] = 1;\r\n  var view32 = new Uint32Array(buffer8.buffer, 0, 1);\r\n  return view32[0] === 1;\r\n}\r\n\r\nvar IsLittleEndianCached = {\r\n  get value() {\r\n    return shadow(this, \"value\", isLittleEndian());\r\n  }\r\n\r\n};\r\nexports.IsLittleEndianCached = IsLittleEndianCached;\r\n\r\nfunction isEvalSupported() {\r\n  try {\r\n    new Function(\"\");\r\n    return true;\r\n  } catch (e) {\r\n    return false;\r\n  }\r\n}\r\n\r\nvar IsEvalSupportedCached = {\r\n  get value() {\r\n    return shadow(this, \"value\", isEvalSupported());\r\n  }\r\n\r\n};\r\nexports.IsEvalSupportedCached = IsEvalSupportedCached;\r\n\r\nvar hexNumbers = _toConsumableArray(Array(256).keys()).map(function (n) {\r\n  return n.toString(16).padStart(2, \"0\");\r\n});\r\n\r\nvar Util = /*#__PURE__*/function () {\r\n  function Util() {\r\n    _classCallCheck(this, Util);\r\n  }\r\n\r\n  _createClass(Util, null, [{\r\n    key: \"makeHexColor\",\r\n    value: function makeHexColor(r, g, b) {\r\n      return \"#\".concat(hexNumbers[r]).concat(hexNumbers[g]).concat(hexNumbers[b]);\r\n    }\r\n  }, {\r\n    key: \"transform\",\r\n    value: function transform(m1, m2) {\r\n      return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];\r\n    }\r\n  }, {\r\n    key: \"applyTransform\",\r\n    value: function applyTransform(p, m) {\r\n      var xt = p[0] * m[0] + p[1] * m[2] + m[4];\r\n      var yt = p[0] * m[1] + p[1] * m[3] + m[5];\r\n      return [xt, yt];\r\n    }\r\n  }, {\r\n    key: \"applyInverseTransform\",\r\n    value: function applyInverseTransform(p, m) {\r\n      var d = m[0] * m[3] - m[1] * m[2];\r\n      var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\r\n      var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\r\n      return [xt, yt];\r\n    }\r\n  }, {\r\n    key: \"getAxialAlignedBoundingBox\",\r\n    value: function getAxialAlignedBoundingBox(r, m) {\r\n      var p1 = Util.applyTransform(r, m);\r\n      var p2 = Util.applyTransform(r.slice(2, 4), m);\r\n      var p3 = Util.applyTransform([r[0], r[3]], m);\r\n      var p4 = Util.applyTransform([r[2], r[1]], m);\r\n      return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];\r\n    }\r\n  }, {\r\n    key: \"inverseTransform\",\r\n    value: function inverseTransform(m) {\r\n      var d = m[0] * m[3] - m[1] * m[2];\r\n      return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];\r\n    }\r\n  }, {\r\n    key: \"apply3dTransform\",\r\n    value: function apply3dTransform(m, v) {\r\n      return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]];\r\n    }\r\n  }, {\r\n    key: \"singularValueDecompose2dScale\",\r\n    value: function singularValueDecompose2dScale(m) {\r\n      var transpose = [m[0], m[2], m[1], m[3]];\r\n      var a = m[0] * transpose[0] + m[1] * transpose[2];\r\n      var b = m[0] * transpose[1] + m[1] * transpose[3];\r\n      var c = m[2] * transpose[0] + m[3] * transpose[2];\r\n      var d = m[2] * transpose[1] + m[3] * transpose[3];\r\n      var first = (a + d) / 2;\r\n      var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;\r\n      var sx = first + second || 1;\r\n      var sy = first - second || 1;\r\n      return [Math.sqrt(sx), Math.sqrt(sy)];\r\n    }\r\n  }, {\r\n    key: \"normalizeRect\",\r\n    value: function normalizeRect(rect) {\r\n      var r = rect.slice(0);\r\n\r\n      if (rect[0] > rect[2]) {\r\n        r[0] = rect[2];\r\n        r[2] = rect[0];\r\n      }\r\n\r\n      if (rect[1] > rect[3]) {\r\n        r[1] = rect[3];\r\n        r[3] = rect[1];\r\n      }\r\n\r\n      return r;\r\n    }\r\n  }, {\r\n    key: \"intersect\",\r\n    value: function intersect(rect1, rect2) {\r\n      function compare(a, b) {\r\n        return a - b;\r\n      }\r\n\r\n      var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);\r\n      var orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);\r\n      var result = [];\r\n      rect1 = Util.normalizeRect(rect1);\r\n      rect2 = Util.normalizeRect(rect2);\r\n\r\n      if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {\r\n        result[0] = orderedX[1];\r\n        result[2] = orderedX[2];\r\n      } else {\r\n        return null;\r\n      }\r\n\r\n      if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {\r\n        result[1] = orderedY[1];\r\n        result[3] = orderedY[2];\r\n      } else {\r\n        return null;\r\n      }\r\n\r\n      return result;\r\n    }\r\n  }]);\r\n\r\n  return Util;\r\n}();\r\n\r\nexports.Util = Util;\r\nvar PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC];\r\n\r\nfunction stringToPDFString(str) {\r\n  var length = str.length,\r\n      strBuf = [];\r\n\r\n  if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\r\n    for (var i = 2; i < length; i += 2) {\r\n      strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1)));\r\n    }\r\n  } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\r\n    for (var _i2 = 2; _i2 < length; _i2 += 2) {\r\n      strBuf.push(String.fromCharCode(str.charCodeAt(_i2 + 1) << 8 | str.charCodeAt(_i2)));\r\n    }\r\n  } else {\r\n    for (var _i3 = 0; _i3 < length; ++_i3) {\r\n      var code = PDFStringTranslateTable[str.charCodeAt(_i3)];\r\n      strBuf.push(code ? String.fromCharCode(code) : str.charAt(_i3));\r\n    }\r\n  }\r\n\r\n  return strBuf.join(\"\");\r\n}\r\n\r\nfunction escapeString(str) {\r\n  return str.replace(/([()\\\\\\n\\r])/g, function (match) {\r\n    if (match === \"\\n\") {\r\n      return \"\\\\n\";\r\n    } else if (match === \"\\r\") {\r\n      return \"\\\\r\";\r\n    }\r\n\r\n    return \"\\\\\".concat(match);\r\n  });\r\n}\r\n\r\nfunction isAscii(str) {\r\n  return /^[\\x00-\\x7F]*$/.test(str);\r\n}\r\n\r\nfunction stringToUTF16BEString(str) {\r\n  var buf = [\"\\xFE\\xFF\"];\r\n\r\n  for (var i = 0, ii = str.length; i < ii; i++) {\r\n    var _char = str.charCodeAt(i);\r\n\r\n    buf.push(String.fromCharCode(_char >> 8 & 0xff));\r\n    buf.push(String.fromCharCode(_char & 0xff));\r\n  }\r\n\r\n  return buf.join(\"\");\r\n}\r\n\r\nfunction stringToUTF8String(str) {\r\n  return decodeURIComponent(escape(str));\r\n}\r\n\r\nfunction utf8StringToString(str) {\r\n  return unescape(encodeURIComponent(str));\r\n}\r\n\r\nfunction isBool(v) {\r\n  return typeof v === \"boolean\";\r\n}\r\n\r\nfunction isNum(v) {\r\n  return typeof v === \"number\";\r\n}\r\n\r\nfunction isString(v) {\r\n  return typeof v === \"string\";\r\n}\r\n\r\nfunction isArrayBuffer(v) {\r\n  return _typeof(v) === \"object\" && v !== null && v.byteLength !== undefined;\r\n}\r\n\r\nfunction isArrayEqual(arr1, arr2) {\r\n  if (arr1.length !== arr2.length) {\r\n    return false;\r\n  }\r\n\r\n  return arr1.every(function (element, index) {\r\n    return element === arr2[index];\r\n  });\r\n}\r\n\r\nfunction getModificationDate() {\r\n  var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Date();\r\n  var buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, \"0\"), date.getUTCDate().toString().padStart(2, \"0\"), date.getUTCHours().toString().padStart(2, \"0\"), date.getUTCMinutes().toString().padStart(2, \"0\"), date.getUTCSeconds().toString().padStart(2, \"0\")];\r\n  return buffer.join(\"\");\r\n}\r\n\r\nfunction createPromiseCapability() {\r\n  var capability = Object.create(null);\r\n  var isSettled = false;\r\n  Object.defineProperty(capability, \"settled\", {\r\n    get: function get() {\r\n      return isSettled;\r\n    }\r\n  });\r\n  capability.promise = new Promise(function (resolve, reject) {\r\n    capability.resolve = function (data) {\r\n      isSettled = true;\r\n      resolve(data);\r\n    };\r\n\r\n    capability.reject = function (reason) {\r\n      isSettled = true;\r\n      reject(reason);\r\n    };\r\n  });\r\n  return capability;\r\n}\r\n\r\nvar createObjectURL = function createObjectURLClosure() {\r\n  var digits = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n  return function createObjectURL(data, contentType) {\r\n    var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n\r\n    if (!forceDataSchema && URL.createObjectURL) {\r\n      var blob = new Blob([data], {\r\n        type: contentType\r\n      });\r\n      return URL.createObjectURL(blob);\r\n    }\r\n\r\n    var buffer = \"data:\".concat(contentType, \";base64,\");\r\n\r\n    for (var i = 0, ii = data.length; i < ii; i += 3) {\r\n      var b1 = data[i] & 0xff;\r\n      var b2 = data[i + 1] & 0xff;\r\n      var b3 = data[i + 2] & 0xff;\r\n      var d1 = b1 >> 2,\r\n          d2 = (b1 & 3) << 4 | b2 >> 4;\r\n      var d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;\r\n      var d4 = i + 2 < ii ? b3 & 0x3f : 64;\r\n      buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];\r\n    }\r\n\r\n    return buffer;\r\n  };\r\n}();\r\n\r\nexports.createObjectURL = createObjectURL;\r\nvar XMLEntities = {\r\n  0x3c: \"&lt;\",\r\n  0x3e: \"&gt;\",\r\n  0x26: \"&amp;\",\r\n  0x22: \"&quot;\",\r\n  0x27: \"&apos;\"\r\n};\r\n\r\nfunction encodeToXmlString(str) {\r\n  var buffer = [];\r\n  var start = 0;\r\n\r\n  for (var i = 0, ii = str.length; i < ii; i++) {\r\n    var _char2 = str.codePointAt(i);\r\n\r\n    if (0x20 <= _char2 && _char2 <= 0x7e) {\r\n      var entity = XMLEntities[_char2];\r\n\r\n      if (entity) {\r\n        if (start < i) {\r\n          buffer.push(str.substring(start, i));\r\n        }\r\n\r\n        buffer.push(entity);\r\n        start = i + 1;\r\n      }\r\n    } else {\r\n      if (start < i) {\r\n        buffer.push(str.substring(start, i));\r\n      }\r\n\r\n      buffer.push(\"&#x\".concat(_char2.toString(16).toUpperCase(), \";\"));\r\n\r\n      if (_char2 > 0xd7ff && (_char2 < 0xe000 || _char2 > 0xfffd)) {\r\n        i++;\r\n      }\r\n\r\n      start = i + 1;\r\n    }\r\n  }\r\n\r\n  if (buffer.length === 0) {\r\n    return str;\r\n  }\r\n\r\n  if (start < str.length) {\r\n    buffer.push(str.substring(start, str.length));\r\n  }\r\n\r\n  return buffer.join(\"\");\r\n}\r\n\r\n/***/ }),\r\n/* 5 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nvar _is_node = __w_pdfjs_require__(6);\r\n\r\nif (typeof globalThis === \"undefined\" || !globalThis._pdfjsCompatibilityChecked) {\r\n  if (typeof globalThis === \"undefined\" || globalThis.Math !== Math) {\r\n    globalThis = __w_pdfjs_require__(7);\r\n  }\r\n\r\n  globalThis._pdfjsCompatibilityChecked = true;\r\n\r\n  (function checkNodeBtoa() {\r\n    if (globalThis.btoa || !_is_node.isNodeJS) {\r\n      return;\r\n    }\r\n\r\n    globalThis.btoa = function (chars) {\r\n      return Buffer.from(chars, \"binary\").toString(\"base64\");\r\n    };\r\n  })();\r\n\r\n  (function checkNodeAtob() {\r\n    if (globalThis.atob || !_is_node.isNodeJS) {\r\n      return;\r\n    }\r\n\r\n    globalThis.atob = function (input) {\r\n      return Buffer.from(input, \"base64\").toString(\"binary\");\r\n    };\r\n  })();\r\n\r\n  (function checkObjectFromEntries() {\r\n    if (Object.fromEntries) {\r\n      return;\r\n    }\r\n\r\n    __w_pdfjs_require__(52);\r\n  })();\r\n\r\n  (function checkPromise() {\r\n    if (globalThis.Promise.allSettled) {\r\n      return;\r\n    }\r\n\r\n    globalThis.Promise = __w_pdfjs_require__(82);\r\n  })();\r\n\r\n  (function checkURL() {\r\n    globalThis.URL = __w_pdfjs_require__(111);\r\n  })();\r\n\r\n  (function checkReadableStream() {\r\n    var isReadableStreamSupported = false;\r\n\r\n    if (typeof ReadableStream !== \"undefined\") {\r\n      try {\r\n        new ReadableStream({\r\n          start: function start(controller) {\r\n            controller.close();\r\n          }\r\n        });\r\n        isReadableStreamSupported = true;\r\n      } catch (e) {}\r\n    }\r\n\r\n    if (isReadableStreamSupported) {\r\n      return;\r\n    }\r\n\r\n    globalThis.ReadableStream = __w_pdfjs_require__(121).ReadableStream;\r\n  })();\r\n\r\n  (function checkStringPadStart() {\r\n    if (String.prototype.padStart) {\r\n      return;\r\n    }\r\n\r\n    __w_pdfjs_require__(122);\r\n  })();\r\n\r\n  (function checkStringPadEnd() {\r\n    if (String.prototype.padEnd) {\r\n      return;\r\n    }\r\n\r\n    __w_pdfjs_require__(128);\r\n  })();\r\n\r\n  (function checkObjectValues() {\r\n    if (Object.values) {\r\n      return;\r\n    }\r\n\r\n    Object.values = __w_pdfjs_require__(130);\r\n  })();\r\n\r\n  (function checkObjectEntries() {\r\n    if (Object.entries) {\r\n      return;\r\n    }\r\n\r\n    Object.entries = __w_pdfjs_require__(133);\r\n  })();\r\n}\r\n\r\n/***/ }),\r\n/* 6 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.isNodeJS = void 0;\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nvar isNodeJS = (typeof process === \"undefined\" ? \"undefined\" : _typeof(process)) === \"object\" && process + \"\" === \"[object process]\" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== \"browser\");\r\nexports.isNodeJS = isNodeJS;\r\n\r\n/***/ }),\r\n/* 7 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(8);\r\nmodule.exports = __w_pdfjs_require__(10);\r\n\r\n/***/ }),\r\n/* 8 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar global = __w_pdfjs_require__(10);\r\n$({ global: true }, { globalThis: global });\r\n\r\n/***/ }),\r\n/* 9 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar getOwnPropertyDescriptor = __w_pdfjs_require__(11).f;\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar setGlobal = __w_pdfjs_require__(29);\r\nvar copyConstructorProperties = __w_pdfjs_require__(39);\r\nvar isForced = __w_pdfjs_require__(51);\r\nmodule.exports = function (options, source) {\r\n var TARGET = options.target;\r\n var GLOBAL = options.global;\r\n var STATIC = options.stat;\r\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\r\n if (GLOBAL) {\r\n  target = global;\r\n } else if (STATIC) {\r\n  target = global[TARGET] || setGlobal(TARGET, {});\r\n } else {\r\n  target = (global[TARGET] || {}).prototype;\r\n }\r\n if (target)\r\n  for (key in source) {\r\n   sourceProperty = source[key];\r\n   if (options.noTargetGet) {\r\n    descriptor = getOwnPropertyDescriptor(target, key);\r\n    targetProperty = descriptor && descriptor.value;\r\n   } else\r\n    targetProperty = target[key];\r\n   FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\r\n   if (!FORCED && targetProperty !== undefined) {\r\n    if (typeof sourceProperty === typeof targetProperty)\r\n     continue;\r\n    copyConstructorProperties(sourceProperty, targetProperty);\r\n   }\r\n   if (options.sham || targetProperty && targetProperty.sham) {\r\n    createNonEnumerableProperty(sourceProperty, 'sham', true);\r\n   }\r\n   redefine(target, key, sourceProperty, options);\r\n  }\r\n};\r\n\r\n/***/ }),\r\n/* 10 */\r\n/***/ ((module) => {\r\n\r\nvar check = function (it) {\r\n return it && it.Math == Math && it;\r\n};\r\nmodule.exports = check(typeof globalThis == 'object' && globalThis) || check(typeof window == 'object' && window) || check(typeof self == 'object' && self) || check(typeof global == 'object' && global) || function () {\r\n return this;\r\n}() || Function('return this')();\r\n\r\n/***/ }),\r\n/* 11 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar propertyIsEnumerableModule = __w_pdfjs_require__(14);\r\nvar createPropertyDescriptor = __w_pdfjs_require__(15);\r\nvar toIndexedObject = __w_pdfjs_require__(16);\r\nvar toPrimitive = __w_pdfjs_require__(20);\r\nvar has = __w_pdfjs_require__(22);\r\nvar IE8_DOM_DEFINE = __w_pdfjs_require__(23);\r\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\r\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\r\n O = toIndexedObject(O);\r\n P = toPrimitive(P, true);\r\n if (IE8_DOM_DEFINE)\r\n  try {\r\n   return nativeGetOwnPropertyDescriptor(O, P);\r\n  } catch (error) {\r\n  }\r\n if (has(O, P))\r\n  return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\r\n};\r\n\r\n/***/ }),\r\n/* 12 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nmodule.exports = !fails(function () {\r\n return Object.defineProperty({}, 1, {\r\n  get: function () {\r\n   return 7;\r\n  }\r\n })[1] != 7;\r\n});\r\n\r\n/***/ }),\r\n/* 13 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (exec) {\r\n try {\r\n  return !!exec();\r\n } catch (error) {\r\n  return true;\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 14 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\n\"use strict\";\r\n\r\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\r\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\r\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\r\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\r\n var descriptor = getOwnPropertyDescriptor(this, V);\r\n return !!descriptor && descriptor.enumerable;\r\n} : nativePropertyIsEnumerable;\r\n\r\n/***/ }),\r\n/* 15 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (bitmap, value) {\r\n return {\r\n  enumerable: !(bitmap & 1),\r\n  configurable: !(bitmap & 2),\r\n  writable: !(bitmap & 4),\r\n  value: value\r\n };\r\n};\r\n\r\n/***/ }),\r\n/* 16 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar IndexedObject = __w_pdfjs_require__(17);\r\nvar requireObjectCoercible = __w_pdfjs_require__(19);\r\nmodule.exports = function (it) {\r\n return IndexedObject(requireObjectCoercible(it));\r\n};\r\n\r\n/***/ }),\r\n/* 17 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nvar classof = __w_pdfjs_require__(18);\r\nvar split = ''.split;\r\nmodule.exports = fails(function () {\r\n return !Object('z').propertyIsEnumerable(0);\r\n}) ? function (it) {\r\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\r\n} : Object;\r\n\r\n/***/ }),\r\n/* 18 */\r\n/***/ ((module) => {\r\n\r\nvar toString = {}.toString;\r\nmodule.exports = function (it) {\r\n return toString.call(it).slice(8, -1);\r\n};\r\n\r\n/***/ }),\r\n/* 19 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (it) {\r\n if (it == undefined)\r\n  throw TypeError(\"Can't call method on \" + it);\r\n return it;\r\n};\r\n\r\n/***/ }),\r\n/* 20 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar isObject = __w_pdfjs_require__(21);\r\nmodule.exports = function (input, PREFERRED_STRING) {\r\n if (!isObject(input))\r\n  return input;\r\n var fn, val;\r\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input)))\r\n  return val;\r\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input)))\r\n  return val;\r\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input)))\r\n  return val;\r\n throw TypeError(\"Can't convert object to primitive value\");\r\n};\r\n\r\n/***/ }),\r\n/* 21 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (it) {\r\n return typeof it === 'object' ? it !== null : typeof it === 'function';\r\n};\r\n\r\n/***/ }),\r\n/* 22 */\r\n/***/ ((module) => {\r\n\r\nvar hasOwnProperty = {}.hasOwnProperty;\r\nmodule.exports = function (it, key) {\r\n return hasOwnProperty.call(it, key);\r\n};\r\n\r\n/***/ }),\r\n/* 23 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar fails = __w_pdfjs_require__(13);\r\nvar createElement = __w_pdfjs_require__(24);\r\nmodule.exports = !DESCRIPTORS && !fails(function () {\r\n return Object.defineProperty(createElement('div'), 'a', {\r\n  get: function () {\r\n   return 7;\r\n  }\r\n }).a != 7;\r\n});\r\n\r\n/***/ }),\r\n/* 24 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar isObject = __w_pdfjs_require__(21);\r\nvar document = global.document;\r\nvar EXISTS = isObject(document) && isObject(document.createElement);\r\nmodule.exports = function (it) {\r\n return EXISTS ? document.createElement(it) : {};\r\n};\r\n\r\n/***/ }),\r\n/* 25 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar definePropertyModule = __w_pdfjs_require__(26);\r\nvar createPropertyDescriptor = __w_pdfjs_require__(15);\r\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\r\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\r\n} : function (object, key, value) {\r\n object[key] = value;\r\n return object;\r\n};\r\n\r\n/***/ }),\r\n/* 26 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar IE8_DOM_DEFINE = __w_pdfjs_require__(23);\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar toPrimitive = __w_pdfjs_require__(20);\r\nvar nativeDefineProperty = Object.defineProperty;\r\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\r\n anObject(O);\r\n P = toPrimitive(P, true);\r\n anObject(Attributes);\r\n if (IE8_DOM_DEFINE)\r\n  try {\r\n   return nativeDefineProperty(O, P, Attributes);\r\n  } catch (error) {\r\n  }\r\n if ('get' in Attributes || 'set' in Attributes)\r\n  throw TypeError('Accessors not supported');\r\n if ('value' in Attributes)\r\n  O[P] = Attributes.value;\r\n return O;\r\n};\r\n\r\n/***/ }),\r\n/* 27 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar isObject = __w_pdfjs_require__(21);\r\nmodule.exports = function (it) {\r\n if (!isObject(it)) {\r\n  throw TypeError(String(it) + ' is not an object');\r\n }\r\n return it;\r\n};\r\n\r\n/***/ }),\r\n/* 28 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar has = __w_pdfjs_require__(22);\r\nvar setGlobal = __w_pdfjs_require__(29);\r\nvar inspectSource = __w_pdfjs_require__(30);\r\nvar InternalStateModule = __w_pdfjs_require__(32);\r\nvar getInternalState = InternalStateModule.get;\r\nvar enforceInternalState = InternalStateModule.enforce;\r\nvar TEMPLATE = String(String).split('String');\r\n(module.exports = function (O, key, value, options) {\r\n var unsafe = options ? !!options.unsafe : false;\r\n var simple = options ? !!options.enumerable : false;\r\n var noTargetGet = options ? !!options.noTargetGet : false;\r\n var state;\r\n if (typeof value == 'function') {\r\n  if (typeof key == 'string' && !has(value, 'name')) {\r\n   createNonEnumerableProperty(value, 'name', key);\r\n  }\r\n  state = enforceInternalState(value);\r\n  if (!state.source) {\r\n   state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\r\n  }\r\n }\r\n if (O === global) {\r\n  if (simple)\r\n   O[key] = value;\r\n  else\r\n   setGlobal(key, value);\r\n  return;\r\n } else if (!unsafe) {\r\n  delete O[key];\r\n } else if (!noTargetGet && O[key]) {\r\n  simple = true;\r\n }\r\n if (simple)\r\n  O[key] = value;\r\n else\r\n  createNonEnumerableProperty(O, key, value);\r\n})(Function.prototype, 'toString', function toString() {\r\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\r\n});\r\n\r\n/***/ }),\r\n/* 29 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nmodule.exports = function (key, value) {\r\n try {\r\n  createNonEnumerableProperty(global, key, value);\r\n } catch (error) {\r\n  global[key] = value;\r\n }\r\n return value;\r\n};\r\n\r\n/***/ }),\r\n/* 30 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar store = __w_pdfjs_require__(31);\r\nvar functionToString = Function.toString;\r\nif (typeof store.inspectSource != 'function') {\r\n store.inspectSource = function (it) {\r\n  return functionToString.call(it);\r\n };\r\n}\r\nmodule.exports = store.inspectSource;\r\n\r\n/***/ }),\r\n/* 31 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar setGlobal = __w_pdfjs_require__(29);\r\nvar SHARED = '__core-js_shared__';\r\nvar store = global[SHARED] || setGlobal(SHARED, {});\r\nmodule.exports = store;\r\n\r\n/***/ }),\r\n/* 32 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar NATIVE_WEAK_MAP = __w_pdfjs_require__(33);\r\nvar global = __w_pdfjs_require__(10);\r\nvar isObject = __w_pdfjs_require__(21);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar objectHas = __w_pdfjs_require__(22);\r\nvar shared = __w_pdfjs_require__(31);\r\nvar sharedKey = __w_pdfjs_require__(34);\r\nvar hiddenKeys = __w_pdfjs_require__(38);\r\nvar WeakMap = global.WeakMap;\r\nvar set, get, has;\r\nvar enforce = function (it) {\r\n return has(it) ? get(it) : set(it, {});\r\n};\r\nvar getterFor = function (TYPE) {\r\n return function (it) {\r\n  var state;\r\n  if (!isObject(it) || (state = get(it)).type !== TYPE) {\r\n   throw TypeError('Incompatible receiver, ' + TYPE + ' required');\r\n  }\r\n  return state;\r\n };\r\n};\r\nif (NATIVE_WEAK_MAP) {\r\n var store = shared.state || (shared.state = new WeakMap());\r\n var wmget = store.get;\r\n var wmhas = store.has;\r\n var wmset = store.set;\r\n set = function (it, metadata) {\r\n  metadata.facade = it;\r\n  wmset.call(store, it, metadata);\r\n  return metadata;\r\n };\r\n get = function (it) {\r\n  return wmget.call(store, it) || {};\r\n };\r\n has = function (it) {\r\n  return wmhas.call(store, it);\r\n };\r\n} else {\r\n var STATE = sharedKey('state');\r\n hiddenKeys[STATE] = true;\r\n set = function (it, metadata) {\r\n  metadata.facade = it;\r\n  createNonEnumerableProperty(it, STATE, metadata);\r\n  return metadata;\r\n };\r\n get = function (it) {\r\n  return objectHas(it, STATE) ? it[STATE] : {};\r\n };\r\n has = function (it) {\r\n  return objectHas(it, STATE);\r\n };\r\n}\r\nmodule.exports = {\r\n set: set,\r\n get: get,\r\n has: has,\r\n enforce: enforce,\r\n getterFor: getterFor\r\n};\r\n\r\n/***/ }),\r\n/* 33 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar inspectSource = __w_pdfjs_require__(30);\r\nvar WeakMap = global.WeakMap;\r\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\r\n\r\n/***/ }),\r\n/* 34 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar shared = __w_pdfjs_require__(35);\r\nvar uid = __w_pdfjs_require__(37);\r\nvar keys = shared('keys');\r\nmodule.exports = function (key) {\r\n return keys[key] || (keys[key] = uid(key));\r\n};\r\n\r\n/***/ }),\r\n/* 35 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar IS_PURE = __w_pdfjs_require__(36);\r\nvar store = __w_pdfjs_require__(31);\r\n(module.exports = function (key, value) {\r\n return store[key] || (store[key] = value !== undefined ? value : {});\r\n})('versions', []).push({\r\n version: '3.8.3',\r\n mode: IS_PURE ? 'pure' : 'global',\r\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\r\n});\r\n\r\n/***/ }),\r\n/* 36 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = false;\r\n\r\n/***/ }),\r\n/* 37 */\r\n/***/ ((module) => {\r\n\r\nvar id = 0;\r\nvar postfix = Math.random();\r\nmodule.exports = function (key) {\r\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\r\n};\r\n\r\n/***/ }),\r\n/* 38 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = {};\r\n\r\n/***/ }),\r\n/* 39 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar has = __w_pdfjs_require__(22);\r\nvar ownKeys = __w_pdfjs_require__(40);\r\nvar getOwnPropertyDescriptorModule = __w_pdfjs_require__(11);\r\nvar definePropertyModule = __w_pdfjs_require__(26);\r\nmodule.exports = function (target, source) {\r\n var keys = ownKeys(source);\r\n var defineProperty = definePropertyModule.f;\r\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\r\n for (var i = 0; i < keys.length; i++) {\r\n  var key = keys[i];\r\n  if (!has(target, key))\r\n   defineProperty(target, key, getOwnPropertyDescriptor(source, key));\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 40 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nvar getOwnPropertyNamesModule = __w_pdfjs_require__(43);\r\nvar getOwnPropertySymbolsModule = __w_pdfjs_require__(50);\r\nvar anObject = __w_pdfjs_require__(27);\r\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\r\n var keys = getOwnPropertyNamesModule.f(anObject(it));\r\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\r\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\r\n};\r\n\r\n/***/ }),\r\n/* 41 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar path = __w_pdfjs_require__(42);\r\nvar global = __w_pdfjs_require__(10);\r\nvar aFunction = function (variable) {\r\n return typeof variable == 'function' ? variable : undefined;\r\n};\r\nmodule.exports = function (namespace, method) {\r\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\r\n};\r\n\r\n/***/ }),\r\n/* 42 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nmodule.exports = global;\r\n\r\n/***/ }),\r\n/* 43 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\nvar internalObjectKeys = __w_pdfjs_require__(44);\r\nvar enumBugKeys = __w_pdfjs_require__(49);\r\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\r\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\r\n return internalObjectKeys(O, hiddenKeys);\r\n};\r\n\r\n/***/ }),\r\n/* 44 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar has = __w_pdfjs_require__(22);\r\nvar toIndexedObject = __w_pdfjs_require__(16);\r\nvar indexOf = __w_pdfjs_require__(45).indexOf;\r\nvar hiddenKeys = __w_pdfjs_require__(38);\r\nmodule.exports = function (object, names) {\r\n var O = toIndexedObject(object);\r\n var i = 0;\r\n var result = [];\r\n var key;\r\n for (key in O)\r\n  !has(hiddenKeys, key) && has(O, key) && result.push(key);\r\n while (names.length > i)\r\n  if (has(O, key = names[i++])) {\r\n   ~indexOf(result, key) || result.push(key);\r\n  }\r\n return result;\r\n};\r\n\r\n/***/ }),\r\n/* 45 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar toIndexedObject = __w_pdfjs_require__(16);\r\nvar toLength = __w_pdfjs_require__(46);\r\nvar toAbsoluteIndex = __w_pdfjs_require__(48);\r\nvar createMethod = function (IS_INCLUDES) {\r\n return function ($this, el, fromIndex) {\r\n  var O = toIndexedObject($this);\r\n  var length = toLength(O.length);\r\n  var index = toAbsoluteIndex(fromIndex, length);\r\n  var value;\r\n  if (IS_INCLUDES && el != el)\r\n   while (length > index) {\r\n    value = O[index++];\r\n    if (value != value)\r\n     return true;\r\n   }\r\n  else\r\n   for (; length > index; index++) {\r\n    if ((IS_INCLUDES || index in O) && O[index] === el)\r\n     return IS_INCLUDES || index || 0;\r\n   }\r\n  return !IS_INCLUDES && -1;\r\n };\r\n};\r\nmodule.exports = {\r\n includes: createMethod(true),\r\n indexOf: createMethod(false)\r\n};\r\n\r\n/***/ }),\r\n/* 46 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar toInteger = __w_pdfjs_require__(47);\r\nvar min = Math.min;\r\nmodule.exports = function (argument) {\r\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0;\r\n};\r\n\r\n/***/ }),\r\n/* 47 */\r\n/***/ ((module) => {\r\n\r\nvar ceil = Math.ceil;\r\nvar floor = Math.floor;\r\nmodule.exports = function (argument) {\r\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\r\n};\r\n\r\n/***/ }),\r\n/* 48 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar toInteger = __w_pdfjs_require__(47);\r\nvar max = Math.max;\r\nvar min = Math.min;\r\nmodule.exports = function (index, length) {\r\n var integer = toInteger(index);\r\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\r\n};\r\n\r\n/***/ }),\r\n/* 49 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = [\r\n 'constructor',\r\n 'hasOwnProperty',\r\n 'isPrototypeOf',\r\n 'propertyIsEnumerable',\r\n 'toLocaleString',\r\n 'toString',\r\n 'valueOf'\r\n];\r\n\r\n/***/ }),\r\n/* 50 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\nexports.f = Object.getOwnPropertySymbols;\r\n\r\n/***/ }),\r\n/* 51 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nvar replacement = /#|\\.prototype\\./;\r\nvar isForced = function (feature, detection) {\r\n var value = data[normalize(feature)];\r\n return value == POLYFILL ? true : value == NATIVE ? false : typeof detection == 'function' ? fails(detection) : !!detection;\r\n};\r\nvar normalize = isForced.normalize = function (string) {\r\n return String(string).replace(replacement, '.').toLowerCase();\r\n};\r\nvar data = isForced.data = {};\r\nvar NATIVE = isForced.NATIVE = 'N';\r\nvar POLYFILL = isForced.POLYFILL = 'P';\r\nmodule.exports = isForced;\r\n\r\n/***/ }),\r\n/* 52 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(53);\r\n__w_pdfjs_require__(72);\r\nvar path = __w_pdfjs_require__(42);\r\nmodule.exports = path.Object.fromEntries;\r\n\r\n/***/ }),\r\n/* 53 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar toIndexedObject = __w_pdfjs_require__(16);\r\nvar addToUnscopables = __w_pdfjs_require__(54);\r\nvar Iterators = __w_pdfjs_require__(62);\r\nvar InternalStateModule = __w_pdfjs_require__(32);\r\nvar defineIterator = __w_pdfjs_require__(63);\r\nvar ARRAY_ITERATOR = 'Array Iterator';\r\nvar setInternalState = InternalStateModule.set;\r\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\r\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\r\n setInternalState(this, {\r\n  type: ARRAY_ITERATOR,\r\n  target: toIndexedObject(iterated),\r\n  index: 0,\r\n  kind: kind\r\n });\r\n}, function () {\r\n var state = getInternalState(this);\r\n var target = state.target;\r\n var kind = state.kind;\r\n var index = state.index++;\r\n if (!target || index >= target.length) {\r\n  state.target = undefined;\r\n  return {\r\n   value: undefined,\r\n   done: true\r\n  };\r\n }\r\n if (kind == 'keys')\r\n  return {\r\n   value: index,\r\n   done: false\r\n  };\r\n if (kind == 'values')\r\n  return {\r\n   value: target[index],\r\n   done: false\r\n  };\r\n return {\r\n  value: [\r\n   index,\r\n   target[index]\r\n  ],\r\n  done: false\r\n };\r\n}, 'values');\r\nIterators.Arguments = Iterators.Array;\r\naddToUnscopables('keys');\r\naddToUnscopables('values');\r\naddToUnscopables('entries');\r\n\r\n/***/ }),\r\n/* 54 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar create = __w_pdfjs_require__(58);\r\nvar definePropertyModule = __w_pdfjs_require__(26);\r\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\r\nvar ArrayPrototype = Array.prototype;\r\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\r\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\r\n  configurable: true,\r\n  value: create(null)\r\n });\r\n}\r\nmodule.exports = function (key) {\r\n ArrayPrototype[UNSCOPABLES][key] = true;\r\n};\r\n\r\n/***/ }),\r\n/* 55 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar shared = __w_pdfjs_require__(35);\r\nvar has = __w_pdfjs_require__(22);\r\nvar uid = __w_pdfjs_require__(37);\r\nvar NATIVE_SYMBOL = __w_pdfjs_require__(56);\r\nvar USE_SYMBOL_AS_UID = __w_pdfjs_require__(57);\r\nvar WellKnownSymbolsStore = shared('wks');\r\nvar Symbol = global.Symbol;\r\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\r\nmodule.exports = function (name) {\r\n if (!has(WellKnownSymbolsStore, name)) {\r\n  if (NATIVE_SYMBOL && has(Symbol, name))\r\n   WellKnownSymbolsStore[name] = Symbol[name];\r\n  else\r\n   WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\r\n }\r\n return WellKnownSymbolsStore[name];\r\n};\r\n\r\n/***/ }),\r\n/* 56 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\r\n return !String(Symbol());\r\n});\r\n\r\n/***/ }),\r\n/* 57 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar NATIVE_SYMBOL = __w_pdfjs_require__(56);\r\nmodule.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == 'symbol';\r\n\r\n/***/ }),\r\n/* 58 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar defineProperties = __w_pdfjs_require__(59);\r\nvar enumBugKeys = __w_pdfjs_require__(49);\r\nvar hiddenKeys = __w_pdfjs_require__(38);\r\nvar html = __w_pdfjs_require__(61);\r\nvar documentCreateElement = __w_pdfjs_require__(24);\r\nvar sharedKey = __w_pdfjs_require__(34);\r\nvar GT = '>';\r\nvar LT = '<';\r\nvar PROTOTYPE = 'prototype';\r\nvar SCRIPT = 'script';\r\nvar IE_PROTO = sharedKey('IE_PROTO');\r\nvar EmptyConstructor = function () {\r\n};\r\nvar scriptTag = function (content) {\r\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\r\n};\r\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\r\n activeXDocument.write(scriptTag(''));\r\n activeXDocument.close();\r\n var temp = activeXDocument.parentWindow.Object;\r\n activeXDocument = null;\r\n return temp;\r\n};\r\nvar NullProtoObjectViaIFrame = function () {\r\n var iframe = documentCreateElement('iframe');\r\n var JS = 'java' + SCRIPT + ':';\r\n var iframeDocument;\r\n iframe.style.display = 'none';\r\n html.appendChild(iframe);\r\n iframe.src = String(JS);\r\n iframeDocument = iframe.contentWindow.document;\r\n iframeDocument.open();\r\n iframeDocument.write(scriptTag('document.F=Object'));\r\n iframeDocument.close();\r\n return iframeDocument.F;\r\n};\r\nvar activeXDocument;\r\nvar NullProtoObject = function () {\r\n try {\r\n  activeXDocument = document.domain && new ActiveXObject('htmlfile');\r\n } catch (error) {\r\n }\r\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\r\n var length = enumBugKeys.length;\r\n while (length--)\r\n  delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\r\n return NullProtoObject();\r\n};\r\nhiddenKeys[IE_PROTO] = true;\r\nmodule.exports = Object.create || function create(O, Properties) {\r\n var result;\r\n if (O !== null) {\r\n  EmptyConstructor[PROTOTYPE] = anObject(O);\r\n  result = new EmptyConstructor();\r\n  EmptyConstructor[PROTOTYPE] = null;\r\n  result[IE_PROTO] = O;\r\n } else\r\n  result = NullProtoObject();\r\n return Properties === undefined ? result : defineProperties(result, Properties);\r\n};\r\n\r\n/***/ }),\r\n/* 59 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar definePropertyModule = __w_pdfjs_require__(26);\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar objectKeys = __w_pdfjs_require__(60);\r\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\r\n anObject(O);\r\n var keys = objectKeys(Properties);\r\n var length = keys.length;\r\n var index = 0;\r\n var key;\r\n while (length > index)\r\n  definePropertyModule.f(O, key = keys[index++], Properties[key]);\r\n return O;\r\n};\r\n\r\n/***/ }),\r\n/* 60 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar internalObjectKeys = __w_pdfjs_require__(44);\r\nvar enumBugKeys = __w_pdfjs_require__(49);\r\nmodule.exports = Object.keys || function keys(O) {\r\n return internalObjectKeys(O, enumBugKeys);\r\n};\r\n\r\n/***/ }),\r\n/* 61 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nmodule.exports = getBuiltIn('document', 'documentElement');\r\n\r\n/***/ }),\r\n/* 62 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = {};\r\n\r\n/***/ }),\r\n/* 63 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar createIteratorConstructor = __w_pdfjs_require__(64);\r\nvar getPrototypeOf = __w_pdfjs_require__(66);\r\nvar setPrototypeOf = __w_pdfjs_require__(70);\r\nvar setToStringTag = __w_pdfjs_require__(69);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar IS_PURE = __w_pdfjs_require__(36);\r\nvar Iterators = __w_pdfjs_require__(62);\r\nvar IteratorsCore = __w_pdfjs_require__(65);\r\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\r\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nvar KEYS = 'keys';\r\nvar VALUES = 'values';\r\nvar ENTRIES = 'entries';\r\nvar returnThis = function () {\r\n return this;\r\n};\r\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\r\n createIteratorConstructor(IteratorConstructor, NAME, next);\r\n var getIterationMethod = function (KIND) {\r\n  if (KIND === DEFAULT && defaultIterator)\r\n   return defaultIterator;\r\n  if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype)\r\n   return IterablePrototype[KIND];\r\n  switch (KIND) {\r\n  case KEYS:\r\n   return function keys() {\r\n    return new IteratorConstructor(this, KIND);\r\n   };\r\n  case VALUES:\r\n   return function values() {\r\n    return new IteratorConstructor(this, KIND);\r\n   };\r\n  case ENTRIES:\r\n   return function entries() {\r\n    return new IteratorConstructor(this, KIND);\r\n   };\r\n  }\r\n  return function () {\r\n   return new IteratorConstructor(this);\r\n  };\r\n };\r\n var TO_STRING_TAG = NAME + ' Iterator';\r\n var INCORRECT_VALUES_NAME = false;\r\n var IterablePrototype = Iterable.prototype;\r\n var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype['@@iterator'] || DEFAULT && IterablePrototype[DEFAULT];\r\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\r\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\r\n var CurrentIteratorPrototype, methods, KEY;\r\n if (anyNativeIterator) {\r\n  CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\r\n  if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\r\n   if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\r\n    if (setPrototypeOf) {\r\n     setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\r\n    } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\r\n     createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\r\n    }\r\n   }\r\n   setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\r\n   if (IS_PURE)\r\n    Iterators[TO_STRING_TAG] = returnThis;\r\n  }\r\n }\r\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\r\n  INCORRECT_VALUES_NAME = true;\r\n  defaultIterator = function values() {\r\n   return nativeIterator.call(this);\r\n  };\r\n }\r\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\r\n  createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\r\n }\r\n Iterators[NAME] = defaultIterator;\r\n if (DEFAULT) {\r\n  methods = {\r\n   values: getIterationMethod(VALUES),\r\n   keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\r\n   entries: getIterationMethod(ENTRIES)\r\n  };\r\n  if (FORCED)\r\n   for (KEY in methods) {\r\n    if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\r\n     redefine(IterablePrototype, KEY, methods[KEY]);\r\n    }\r\n   }\r\n  else\r\n   $({\r\n    target: NAME,\r\n    proto: true,\r\n    forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME\r\n   }, methods);\r\n }\r\n return methods;\r\n};\r\n\r\n/***/ }),\r\n/* 64 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar IteratorPrototype = __w_pdfjs_require__(65).IteratorPrototype;\r\nvar create = __w_pdfjs_require__(58);\r\nvar createPropertyDescriptor = __w_pdfjs_require__(15);\r\nvar setToStringTag = __w_pdfjs_require__(69);\r\nvar Iterators = __w_pdfjs_require__(62);\r\nvar returnThis = function () {\r\n return this;\r\n};\r\nmodule.exports = function (IteratorConstructor, NAME, next) {\r\n var TO_STRING_TAG = NAME + ' Iterator';\r\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\r\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\r\n Iterators[TO_STRING_TAG] = returnThis;\r\n return IteratorConstructor;\r\n};\r\n\r\n/***/ }),\r\n/* 65 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nvar getPrototypeOf = __w_pdfjs_require__(66);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar has = __w_pdfjs_require__(22);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar IS_PURE = __w_pdfjs_require__(36);\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nvar BUGGY_SAFARI_ITERATORS = false;\r\nvar returnThis = function () {\r\n return this;\r\n};\r\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\r\nif ([].keys) {\r\n arrayIterator = [].keys();\r\n if (!('next' in arrayIterator))\r\n  BUGGY_SAFARI_ITERATORS = true;\r\n else {\r\n  PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\r\n  if (PrototypeOfArrayIteratorPrototype !== Object.prototype)\r\n   IteratorPrototype = PrototypeOfArrayIteratorPrototype;\r\n }\r\n}\r\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\r\n var test = {};\r\n return IteratorPrototype[ITERATOR].call(test) !== test;\r\n});\r\nif (NEW_ITERATOR_PROTOTYPE)\r\n IteratorPrototype = {};\r\nif ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {\r\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\r\n}\r\nmodule.exports = {\r\n IteratorPrototype: IteratorPrototype,\r\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\r\n};\r\n\r\n/***/ }),\r\n/* 66 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar has = __w_pdfjs_require__(22);\r\nvar toObject = __w_pdfjs_require__(67);\r\nvar sharedKey = __w_pdfjs_require__(34);\r\nvar CORRECT_PROTOTYPE_GETTER = __w_pdfjs_require__(68);\r\nvar IE_PROTO = sharedKey('IE_PROTO');\r\nvar ObjectPrototype = Object.prototype;\r\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\r\n O = toObject(O);\r\n if (has(O, IE_PROTO))\r\n  return O[IE_PROTO];\r\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\r\n  return O.constructor.prototype;\r\n }\r\n return O instanceof Object ? ObjectPrototype : null;\r\n};\r\n\r\n/***/ }),\r\n/* 67 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar requireObjectCoercible = __w_pdfjs_require__(19);\r\nmodule.exports = function (argument) {\r\n return Object(requireObjectCoercible(argument));\r\n};\r\n\r\n/***/ }),\r\n/* 68 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nmodule.exports = !fails(function () {\r\n function F() {\r\n }\r\n F.prototype.constructor = null;\r\n return Object.getPrototypeOf(new F()) !== F.prototype;\r\n});\r\n\r\n/***/ }),\r\n/* 69 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar defineProperty = __w_pdfjs_require__(26).f;\r\nvar has = __w_pdfjs_require__(22);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\r\nmodule.exports = function (it, TAG, STATIC) {\r\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\r\n  defineProperty(it, TO_STRING_TAG, {\r\n   configurable: true,\r\n   value: TAG\r\n  });\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 70 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar aPossiblePrototype = __w_pdfjs_require__(71);\r\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\r\n var CORRECT_SETTER = false;\r\n var test = {};\r\n var setter;\r\n try {\r\n  setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\r\n  setter.call(test, []);\r\n  CORRECT_SETTER = test instanceof Array;\r\n } catch (error) {\r\n }\r\n return function setPrototypeOf(O, proto) {\r\n  anObject(O);\r\n  aPossiblePrototype(proto);\r\n  if (CORRECT_SETTER)\r\n   setter.call(O, proto);\r\n  else\r\n   O.__proto__ = proto;\r\n  return O;\r\n };\r\n}() : undefined);\r\n\r\n/***/ }),\r\n/* 71 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar isObject = __w_pdfjs_require__(21);\r\nmodule.exports = function (it) {\r\n if (!isObject(it) && it !== null) {\r\n  throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\r\n }\r\n return it;\r\n};\r\n\r\n/***/ }),\r\n/* 72 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar iterate = __w_pdfjs_require__(73);\r\nvar createProperty = __w_pdfjs_require__(81);\r\n$({\r\n target: 'Object',\r\n stat: true\r\n}, {\r\n fromEntries: function fromEntries(iterable) {\r\n  var obj = {};\r\n  iterate(iterable, function (k, v) {\r\n   createProperty(obj, k, v);\r\n  }, { AS_ENTRIES: true });\r\n  return obj;\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 73 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar isArrayIteratorMethod = __w_pdfjs_require__(74);\r\nvar toLength = __w_pdfjs_require__(46);\r\nvar bind = __w_pdfjs_require__(75);\r\nvar getIteratorMethod = __w_pdfjs_require__(77);\r\nvar iteratorClose = __w_pdfjs_require__(80);\r\nvar Result = function (stopped, result) {\r\n this.stopped = stopped;\r\n this.result = result;\r\n};\r\nmodule.exports = function (iterable, unboundFunction, options) {\r\n var that = options && options.that;\r\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\r\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\r\n var INTERRUPTED = !!(options && options.INTERRUPTED);\r\n var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);\r\n var iterator, iterFn, index, length, result, next, step;\r\n var stop = function (condition) {\r\n  if (iterator)\r\n   iteratorClose(iterator);\r\n  return new Result(true, condition);\r\n };\r\n var callFn = function (value) {\r\n  if (AS_ENTRIES) {\r\n   anObject(value);\r\n   return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\r\n  }\r\n  return INTERRUPTED ? fn(value, stop) : fn(value);\r\n };\r\n if (IS_ITERATOR) {\r\n  iterator = iterable;\r\n } else {\r\n  iterFn = getIteratorMethod(iterable);\r\n  if (typeof iterFn != 'function')\r\n   throw TypeError('Target is not iterable');\r\n  if (isArrayIteratorMethod(iterFn)) {\r\n   for (index = 0, length = toLength(iterable.length); length > index; index++) {\r\n    result = callFn(iterable[index]);\r\n    if (result && result instanceof Result)\r\n     return result;\r\n   }\r\n   return new Result(false);\r\n  }\r\n  iterator = iterFn.call(iterable);\r\n }\r\n next = iterator.next;\r\n while (!(step = next.call(iterator)).done) {\r\n  try {\r\n   result = callFn(step.value);\r\n  } catch (error) {\r\n   iteratorClose(iterator);\r\n   throw error;\r\n  }\r\n  if (typeof result == 'object' && result && result instanceof Result)\r\n   return result;\r\n }\r\n return new Result(false);\r\n};\r\n\r\n/***/ }),\r\n/* 74 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar Iterators = __w_pdfjs_require__(62);\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nvar ArrayPrototype = Array.prototype;\r\nmodule.exports = function (it) {\r\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\r\n};\r\n\r\n/***/ }),\r\n/* 75 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar aFunction = __w_pdfjs_require__(76);\r\nmodule.exports = function (fn, that, length) {\r\n aFunction(fn);\r\n if (that === undefined)\r\n  return fn;\r\n switch (length) {\r\n case 0:\r\n  return function () {\r\n   return fn.call(that);\r\n  };\r\n case 1:\r\n  return function (a) {\r\n   return fn.call(that, a);\r\n  };\r\n case 2:\r\n  return function (a, b) {\r\n   return fn.call(that, a, b);\r\n  };\r\n case 3:\r\n  return function (a, b, c) {\r\n   return fn.call(that, a, b, c);\r\n  };\r\n }\r\n return function () {\r\n  return fn.apply(that, arguments);\r\n };\r\n};\r\n\r\n/***/ }),\r\n/* 76 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (it) {\r\n if (typeof it != 'function') {\r\n  throw TypeError(String(it) + ' is not a function');\r\n }\r\n return it;\r\n};\r\n\r\n/***/ }),\r\n/* 77 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar classof = __w_pdfjs_require__(78);\r\nvar Iterators = __w_pdfjs_require__(62);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nmodule.exports = function (it) {\r\n if (it != undefined)\r\n  return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)];\r\n};\r\n\r\n/***/ }),\r\n/* 78 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79);\r\nvar classofRaw = __w_pdfjs_require__(18);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\r\nvar CORRECT_ARGUMENTS = classofRaw(function () {\r\n return arguments;\r\n}()) == 'Arguments';\r\nvar tryGet = function (it, key) {\r\n try {\r\n  return it[key];\r\n } catch (error) {\r\n }\r\n};\r\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\r\n var O, tag, result;\r\n return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\r\n};\r\n\r\n/***/ }),\r\n/* 79 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\r\nvar test = {};\r\ntest[TO_STRING_TAG] = 'z';\r\nmodule.exports = String(test) === '[object z]';\r\n\r\n/***/ }),\r\n/* 80 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nmodule.exports = function (iterator) {\r\n var returnMethod = iterator['return'];\r\n if (returnMethod !== undefined) {\r\n  return anObject(returnMethod.call(iterator)).value;\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 81 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar toPrimitive = __w_pdfjs_require__(20);\r\nvar definePropertyModule = __w_pdfjs_require__(26);\r\nvar createPropertyDescriptor = __w_pdfjs_require__(15);\r\nmodule.exports = function (object, key, value) {\r\n var propertyKey = toPrimitive(key);\r\n if (propertyKey in object)\r\n  definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\r\n else\r\n  object[propertyKey] = value;\r\n};\r\n\r\n/***/ }),\r\n/* 82 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(83);\r\n__w_pdfjs_require__(84);\r\n__w_pdfjs_require__(86);\r\n__w_pdfjs_require__(104);\r\n__w_pdfjs_require__(105);\r\n__w_pdfjs_require__(106);\r\n__w_pdfjs_require__(107);\r\n__w_pdfjs_require__(109);\r\nvar path = __w_pdfjs_require__(42);\r\nmodule.exports = path.Promise;\r\n\r\n/***/ }),\r\n/* 83 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar getPrototypeOf = __w_pdfjs_require__(66);\r\nvar setPrototypeOf = __w_pdfjs_require__(70);\r\nvar create = __w_pdfjs_require__(58);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar createPropertyDescriptor = __w_pdfjs_require__(15);\r\nvar iterate = __w_pdfjs_require__(73);\r\nvar $AggregateError = function AggregateError(errors, message) {\r\n var that = this;\r\n if (!(that instanceof $AggregateError))\r\n  return new $AggregateError(errors, message);\r\n if (setPrototypeOf) {\r\n  that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));\r\n }\r\n if (message !== undefined)\r\n  createNonEnumerableProperty(that, 'message', String(message));\r\n var errorsArray = [];\r\n iterate(errors, errorsArray.push, { that: errorsArray });\r\n createNonEnumerableProperty(that, 'errors', errorsArray);\r\n return that;\r\n};\r\n$AggregateError.prototype = create(Error.prototype, {\r\n constructor: createPropertyDescriptor(5, $AggregateError),\r\n message: createPropertyDescriptor(5, ''),\r\n name: createPropertyDescriptor(5, 'AggregateError')\r\n});\r\n$({ global: true }, { AggregateError: $AggregateError });\r\n\r\n/***/ }),\r\n/* 84 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar toString = __w_pdfjs_require__(85);\r\nif (!TO_STRING_TAG_SUPPORT) {\r\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\r\n}\r\n\r\n/***/ }),\r\n/* 85 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar TO_STRING_TAG_SUPPORT = __w_pdfjs_require__(79);\r\nvar classof = __w_pdfjs_require__(78);\r\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\r\n return '[object ' + classof(this) + ']';\r\n};\r\n\r\n/***/ }),\r\n/* 86 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar IS_PURE = __w_pdfjs_require__(36);\r\nvar global = __w_pdfjs_require__(10);\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nvar NativePromise = __w_pdfjs_require__(87);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar redefineAll = __w_pdfjs_require__(88);\r\nvar setToStringTag = __w_pdfjs_require__(69);\r\nvar setSpecies = __w_pdfjs_require__(89);\r\nvar isObject = __w_pdfjs_require__(21);\r\nvar aFunction = __w_pdfjs_require__(76);\r\nvar anInstance = __w_pdfjs_require__(90);\r\nvar inspectSource = __w_pdfjs_require__(30);\r\nvar iterate = __w_pdfjs_require__(73);\r\nvar checkCorrectnessOfIteration = __w_pdfjs_require__(91);\r\nvar speciesConstructor = __w_pdfjs_require__(92);\r\nvar task = __w_pdfjs_require__(93).set;\r\nvar microtask = __w_pdfjs_require__(97);\r\nvar promiseResolve = __w_pdfjs_require__(99);\r\nvar hostReportErrors = __w_pdfjs_require__(101);\r\nvar newPromiseCapabilityModule = __w_pdfjs_require__(100);\r\nvar perform = __w_pdfjs_require__(102);\r\nvar InternalStateModule = __w_pdfjs_require__(32);\r\nvar isForced = __w_pdfjs_require__(51);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar IS_NODE = __w_pdfjs_require__(96);\r\nvar V8_VERSION = __w_pdfjs_require__(103);\r\nvar SPECIES = wellKnownSymbol('species');\r\nvar PROMISE = 'Promise';\r\nvar getInternalState = InternalStateModule.get;\r\nvar setInternalState = InternalStateModule.set;\r\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\r\nvar PromiseConstructor = NativePromise;\r\nvar TypeError = global.TypeError;\r\nvar document = global.document;\r\nvar process = global.process;\r\nvar $fetch = getBuiltIn('fetch');\r\nvar newPromiseCapability = newPromiseCapabilityModule.f;\r\nvar newGenericPromiseCapability = newPromiseCapability;\r\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\r\nvar NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';\r\nvar UNHANDLED_REJECTION = 'unhandledrejection';\r\nvar REJECTION_HANDLED = 'rejectionhandled';\r\nvar PENDING = 0;\r\nvar FULFILLED = 1;\r\nvar REJECTED = 2;\r\nvar HANDLED = 1;\r\nvar UNHANDLED = 2;\r\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\r\nvar FORCED = isForced(PROMISE, function () {\r\n var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);\r\n if (!GLOBAL_CORE_JS_PROMISE) {\r\n  if (V8_VERSION === 66)\r\n   return true;\r\n  if (!IS_NODE && !NATIVE_REJECTION_EVENT)\r\n   return true;\r\n }\r\n if (IS_PURE && !PromiseConstructor.prototype['finally'])\r\n  return true;\r\n if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor))\r\n  return false;\r\n var promise = PromiseConstructor.resolve(1);\r\n var FakePromise = function (exec) {\r\n  exec(function () {\r\n  }, function () {\r\n  });\r\n };\r\n var constructor = promise.constructor = {};\r\n constructor[SPECIES] = FakePromise;\r\n return !(promise.then(function () {\r\n }) instanceof FakePromise);\r\n});\r\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\r\n PromiseConstructor.all(iterable)['catch'](function () {\r\n });\r\n});\r\nvar isThenable = function (it) {\r\n var then;\r\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\r\n};\r\nvar notify = function (state, isReject) {\r\n if (state.notified)\r\n  return;\r\n state.notified = true;\r\n var chain = state.reactions;\r\n microtask(function () {\r\n  var value = state.value;\r\n  var ok = state.state == FULFILLED;\r\n  var index = 0;\r\n  while (chain.length > index) {\r\n   var reaction = chain[index++];\r\n   var handler = ok ? reaction.ok : reaction.fail;\r\n   var resolve = reaction.resolve;\r\n   var reject = reaction.reject;\r\n   var domain = reaction.domain;\r\n   var result, then, exited;\r\n   try {\r\n    if (handler) {\r\n     if (!ok) {\r\n      if (state.rejection === UNHANDLED)\r\n       onHandleUnhandled(state);\r\n      state.rejection = HANDLED;\r\n     }\r\n     if (handler === true)\r\n      result = value;\r\n     else {\r\n      if (domain)\r\n       domain.enter();\r\n      result = handler(value);\r\n      if (domain) {\r\n       domain.exit();\r\n       exited = true;\r\n      }\r\n     }\r\n     if (result === reaction.promise) {\r\n      reject(TypeError('Promise-chain cycle'));\r\n     } else if (then = isThenable(result)) {\r\n      then.call(result, resolve, reject);\r\n     } else\r\n      resolve(result);\r\n    } else\r\n     reject(value);\r\n   } catch (error) {\r\n    if (domain && !exited)\r\n     domain.exit();\r\n    reject(error);\r\n   }\r\n  }\r\n  state.reactions = [];\r\n  state.notified = false;\r\n  if (isReject && !state.rejection)\r\n   onUnhandled(state);\r\n });\r\n};\r\nvar dispatchEvent = function (name, promise, reason) {\r\n var event, handler;\r\n if (DISPATCH_EVENT) {\r\n  event = document.createEvent('Event');\r\n  event.promise = promise;\r\n  event.reason = reason;\r\n  event.initEvent(name, false, true);\r\n  global.dispatchEvent(event);\r\n } else\r\n  event = {\r\n   promise: promise,\r\n   reason: reason\r\n  };\r\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name]))\r\n  handler(event);\r\n else if (name === UNHANDLED_REJECTION)\r\n  hostReportErrors('Unhandled promise rejection', reason);\r\n};\r\nvar onUnhandled = function (state) {\r\n task.call(global, function () {\r\n  var promise = state.facade;\r\n  var value = state.value;\r\n  var IS_UNHANDLED = isUnhandled(state);\r\n  var result;\r\n  if (IS_UNHANDLED) {\r\n   result = perform(function () {\r\n    if (IS_NODE) {\r\n     process.emit('unhandledRejection', value, promise);\r\n    } else\r\n     dispatchEvent(UNHANDLED_REJECTION, promise, value);\r\n   });\r\n   state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\r\n   if (result.error)\r\n    throw result.value;\r\n  }\r\n });\r\n};\r\nvar isUnhandled = function (state) {\r\n return state.rejection !== HANDLED && !state.parent;\r\n};\r\nvar onHandleUnhandled = function (state) {\r\n task.call(global, function () {\r\n  var promise = state.facade;\r\n  if (IS_NODE) {\r\n   process.emit('rejectionHandled', promise);\r\n  } else\r\n   dispatchEvent(REJECTION_HANDLED, promise, state.value);\r\n });\r\n};\r\nvar bind = function (fn, state, unwrap) {\r\n return function (value) {\r\n  fn(state, value, unwrap);\r\n };\r\n};\r\nvar internalReject = function (state, value, unwrap) {\r\n if (state.done)\r\n  return;\r\n state.done = true;\r\n if (unwrap)\r\n  state = unwrap;\r\n state.value = value;\r\n state.state = REJECTED;\r\n notify(state, true);\r\n};\r\nvar internalResolve = function (state, value, unwrap) {\r\n if (state.done)\r\n  return;\r\n state.done = true;\r\n if (unwrap)\r\n  state = unwrap;\r\n try {\r\n  if (state.facade === value)\r\n   throw TypeError(\"Promise can't be resolved itself\");\r\n  var then = isThenable(value);\r\n  if (then) {\r\n   microtask(function () {\r\n    var wrapper = { done: false };\r\n    try {\r\n     then.call(value, bind(internalResolve, wrapper, state), bind(internalReject, wrapper, state));\r\n    } catch (error) {\r\n     internalReject(wrapper, error, state);\r\n    }\r\n   });\r\n  } else {\r\n   state.value = value;\r\n   state.state = FULFILLED;\r\n   notify(state, false);\r\n  }\r\n } catch (error) {\r\n  internalReject({ done: false }, error, state);\r\n }\r\n};\r\nif (FORCED) {\r\n PromiseConstructor = function Promise(executor) {\r\n  anInstance(this, PromiseConstructor, PROMISE);\r\n  aFunction(executor);\r\n  Internal.call(this);\r\n  var state = getInternalState(this);\r\n  try {\r\n   executor(bind(internalResolve, state), bind(internalReject, state));\r\n  } catch (error) {\r\n   internalReject(state, error);\r\n  }\r\n };\r\n Internal = function Promise(executor) {\r\n  setInternalState(this, {\r\n   type: PROMISE,\r\n   done: false,\r\n   notified: false,\r\n   parent: false,\r\n   reactions: [],\r\n   rejection: false,\r\n   state: PENDING,\r\n   value: undefined\r\n  });\r\n };\r\n Internal.prototype = redefineAll(PromiseConstructor.prototype, {\r\n  then: function then(onFulfilled, onRejected) {\r\n   var state = getInternalPromiseState(this);\r\n   var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\r\n   reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\r\n   reaction.fail = typeof onRejected == 'function' && onRejected;\r\n   reaction.domain = IS_NODE ? process.domain : undefined;\r\n   state.parent = true;\r\n   state.reactions.push(reaction);\r\n   if (state.state != PENDING)\r\n    notify(state, false);\r\n   return reaction.promise;\r\n  },\r\n  'catch': function (onRejected) {\r\n   return this.then(undefined, onRejected);\r\n  }\r\n });\r\n OwnPromiseCapability = function () {\r\n  var promise = new Internal();\r\n  var state = getInternalState(promise);\r\n  this.promise = promise;\r\n  this.resolve = bind(internalResolve, state);\r\n  this.reject = bind(internalReject, state);\r\n };\r\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\r\n  return C === PromiseConstructor || C === PromiseWrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C);\r\n };\r\n if (!IS_PURE && typeof NativePromise == 'function') {\r\n  nativeThen = NativePromise.prototype.then;\r\n  redefine(NativePromise.prototype, 'then', function then(onFulfilled, onRejected) {\r\n   var that = this;\r\n   return new PromiseConstructor(function (resolve, reject) {\r\n    nativeThen.call(that, resolve, reject);\r\n   }).then(onFulfilled, onRejected);\r\n  }, { unsafe: true });\r\n  if (typeof $fetch == 'function')\r\n   $({\r\n    global: true,\r\n    enumerable: true,\r\n    forced: true\r\n   }, {\r\n    fetch: function fetch(input) {\r\n     return promiseResolve(PromiseConstructor, $fetch.apply(global, arguments));\r\n    }\r\n   });\r\n }\r\n}\r\n$({\r\n global: true,\r\n wrap: true,\r\n forced: FORCED\r\n}, { Promise: PromiseConstructor });\r\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\r\nsetSpecies(PROMISE);\r\nPromiseWrapper = getBuiltIn(PROMISE);\r\n$({\r\n target: PROMISE,\r\n stat: true,\r\n forced: FORCED\r\n}, {\r\n reject: function reject(r) {\r\n  var capability = newPromiseCapability(this);\r\n  capability.reject.call(undefined, r);\r\n  return capability.promise;\r\n }\r\n});\r\n$({\r\n target: PROMISE,\r\n stat: true,\r\n forced: IS_PURE || FORCED\r\n}, {\r\n resolve: function resolve(x) {\r\n  return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\r\n }\r\n});\r\n$({\r\n target: PROMISE,\r\n stat: true,\r\n forced: INCORRECT_ITERATION\r\n}, {\r\n all: function all(iterable) {\r\n  var C = this;\r\n  var capability = newPromiseCapability(C);\r\n  var resolve = capability.resolve;\r\n  var reject = capability.reject;\r\n  var result = perform(function () {\r\n   var $promiseResolve = aFunction(C.resolve);\r\n   var values = [];\r\n   var counter = 0;\r\n   var remaining = 1;\r\n   iterate(iterable, function (promise) {\r\n    var index = counter++;\r\n    var alreadyCalled = false;\r\n    values.push(undefined);\r\n    remaining++;\r\n    $promiseResolve.call(C, promise).then(function (value) {\r\n     if (alreadyCalled)\r\n      return;\r\n     alreadyCalled = true;\r\n     values[index] = value;\r\n     --remaining || resolve(values);\r\n    }, reject);\r\n   });\r\n   --remaining || resolve(values);\r\n  });\r\n  if (result.error)\r\n   reject(result.value);\r\n  return capability.promise;\r\n },\r\n race: function race(iterable) {\r\n  var C = this;\r\n  var capability = newPromiseCapability(C);\r\n  var reject = capability.reject;\r\n  var result = perform(function () {\r\n   var $promiseResolve = aFunction(C.resolve);\r\n   iterate(iterable, function (promise) {\r\n    $promiseResolve.call(C, promise).then(capability.resolve, reject);\r\n   });\r\n  });\r\n  if (result.error)\r\n   reject(result.value);\r\n  return capability.promise;\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 87 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nmodule.exports = global.Promise;\r\n\r\n/***/ }),\r\n/* 88 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar redefine = __w_pdfjs_require__(28);\r\nmodule.exports = function (target, src, options) {\r\n for (var key in src)\r\n  redefine(target, key, src[key], options);\r\n return target;\r\n};\r\n\r\n/***/ }),\r\n/* 89 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nvar definePropertyModule = __w_pdfjs_require__(26);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar SPECIES = wellKnownSymbol('species');\r\nmodule.exports = function (CONSTRUCTOR_NAME) {\r\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\r\n var defineProperty = definePropertyModule.f;\r\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\r\n  defineProperty(Constructor, SPECIES, {\r\n   configurable: true,\r\n   get: function () {\r\n    return this;\r\n   }\r\n  });\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 90 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (it, Constructor, name) {\r\n if (!(it instanceof Constructor)) {\r\n  throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\r\n }\r\n return it;\r\n};\r\n\r\n/***/ }),\r\n/* 91 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nvar SAFE_CLOSING = false;\r\ntry {\r\n var called = 0;\r\n var iteratorWithReturn = {\r\n  next: function () {\r\n   return { done: !!called++ };\r\n  },\r\n  'return': function () {\r\n   SAFE_CLOSING = true;\r\n  }\r\n };\r\n iteratorWithReturn[ITERATOR] = function () {\r\n  return this;\r\n };\r\n Array.from(iteratorWithReturn, function () {\r\n  throw 2;\r\n });\r\n} catch (error) {\r\n}\r\nmodule.exports = function (exec, SKIP_CLOSING) {\r\n if (!SKIP_CLOSING && !SAFE_CLOSING)\r\n  return false;\r\n var ITERATION_SUPPORT = false;\r\n try {\r\n  var object = {};\r\n  object[ITERATOR] = function () {\r\n   return {\r\n    next: function () {\r\n     return { done: ITERATION_SUPPORT = true };\r\n    }\r\n   };\r\n  };\r\n  exec(object);\r\n } catch (error) {\r\n }\r\n return ITERATION_SUPPORT;\r\n};\r\n\r\n/***/ }),\r\n/* 92 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar aFunction = __w_pdfjs_require__(76);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar SPECIES = wellKnownSymbol('species');\r\nmodule.exports = function (O, defaultConstructor) {\r\n var C = anObject(O).constructor;\r\n var S;\r\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\r\n};\r\n\r\n/***/ }),\r\n/* 93 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar fails = __w_pdfjs_require__(13);\r\nvar bind = __w_pdfjs_require__(75);\r\nvar html = __w_pdfjs_require__(61);\r\nvar createElement = __w_pdfjs_require__(24);\r\nvar IS_IOS = __w_pdfjs_require__(94);\r\nvar IS_NODE = __w_pdfjs_require__(96);\r\nvar location = global.location;\r\nvar set = global.setImmediate;\r\nvar clear = global.clearImmediate;\r\nvar process = global.process;\r\nvar MessageChannel = global.MessageChannel;\r\nvar Dispatch = global.Dispatch;\r\nvar counter = 0;\r\nvar queue = {};\r\nvar ONREADYSTATECHANGE = 'onreadystatechange';\r\nvar defer, channel, port;\r\nvar run = function (id) {\r\n if (queue.hasOwnProperty(id)) {\r\n  var fn = queue[id];\r\n  delete queue[id];\r\n  fn();\r\n }\r\n};\r\nvar runner = function (id) {\r\n return function () {\r\n  run(id);\r\n };\r\n};\r\nvar listener = function (event) {\r\n run(event.data);\r\n};\r\nvar post = function (id) {\r\n global.postMessage(id + '', location.protocol + '//' + location.host);\r\n};\r\nif (!set || !clear) {\r\n set = function setImmediate(fn) {\r\n  var args = [];\r\n  var i = 1;\r\n  while (arguments.length > i)\r\n   args.push(arguments[i++]);\r\n  queue[++counter] = function () {\r\n   (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\r\n  };\r\n  defer(counter);\r\n  return counter;\r\n };\r\n clear = function clearImmediate(id) {\r\n  delete queue[id];\r\n };\r\n if (IS_NODE) {\r\n  defer = function (id) {\r\n   process.nextTick(runner(id));\r\n  };\r\n } else if (Dispatch && Dispatch.now) {\r\n  defer = function (id) {\r\n   Dispatch.now(runner(id));\r\n  };\r\n } else if (MessageChannel && !IS_IOS) {\r\n  channel = new MessageChannel();\r\n  port = channel.port2;\r\n  channel.port1.onmessage = listener;\r\n  defer = bind(port.postMessage, port, 1);\r\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts && location && location.protocol !== 'file:' && !fails(post)) {\r\n  defer = post;\r\n  global.addEventListener('message', listener, false);\r\n } else if (ONREADYSTATECHANGE in createElement('script')) {\r\n  defer = function (id) {\r\n   html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\r\n    html.removeChild(this);\r\n    run(id);\r\n   };\r\n  };\r\n } else {\r\n  defer = function (id) {\r\n   setTimeout(runner(id), 0);\r\n  };\r\n }\r\n}\r\nmodule.exports = {\r\n set: set,\r\n clear: clear\r\n};\r\n\r\n/***/ }),\r\n/* 94 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar userAgent = __w_pdfjs_require__(95);\r\nmodule.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent);\r\n\r\n/***/ }),\r\n/* 95 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\r\n\r\n/***/ }),\r\n/* 96 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar classof = __w_pdfjs_require__(18);\r\nvar global = __w_pdfjs_require__(10);\r\nmodule.exports = classof(global.process) == 'process';\r\n\r\n/***/ }),\r\n/* 97 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar getOwnPropertyDescriptor = __w_pdfjs_require__(11).f;\r\nvar macrotask = __w_pdfjs_require__(93).set;\r\nvar IS_IOS = __w_pdfjs_require__(94);\r\nvar IS_WEBOS_WEBKIT = __w_pdfjs_require__(98);\r\nvar IS_NODE = __w_pdfjs_require__(96);\r\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\r\nvar document = global.document;\r\nvar process = global.process;\r\nvar Promise = global.Promise;\r\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\r\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\r\nvar flush, head, last, notify, toggle, node, promise, then;\r\nif (!queueMicrotask) {\r\n flush = function () {\r\n  var parent, fn;\r\n  if (IS_NODE && (parent = process.domain))\r\n   parent.exit();\r\n  while (head) {\r\n   fn = head.fn;\r\n   head = head.next;\r\n   try {\r\n    fn();\r\n   } catch (error) {\r\n    if (head)\r\n     notify();\r\n    else\r\n     last = undefined;\r\n    throw error;\r\n   }\r\n  }\r\n  last = undefined;\r\n  if (parent)\r\n   parent.enter();\r\n };\r\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\r\n  toggle = true;\r\n  node = document.createTextNode('');\r\n  new MutationObserver(flush).observe(node, { characterData: true });\r\n  notify = function () {\r\n   node.data = toggle = !toggle;\r\n  };\r\n } else if (Promise && Promise.resolve) {\r\n  promise = Promise.resolve(undefined);\r\n  then = promise.then;\r\n  notify = function () {\r\n   then.call(promise, flush);\r\n  };\r\n } else if (IS_NODE) {\r\n  notify = function () {\r\n   process.nextTick(flush);\r\n  };\r\n } else {\r\n  notify = function () {\r\n   macrotask.call(global, flush);\r\n  };\r\n }\r\n}\r\nmodule.exports = queueMicrotask || function (fn) {\r\n var task = {\r\n  fn: fn,\r\n  next: undefined\r\n };\r\n if (last)\r\n  last.next = task;\r\n if (!head) {\r\n  head = task;\r\n  notify();\r\n }\r\n last = task;\r\n};\r\n\r\n/***/ }),\r\n/* 98 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar userAgent = __w_pdfjs_require__(95);\r\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\r\n\r\n/***/ }),\r\n/* 99 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar isObject = __w_pdfjs_require__(21);\r\nvar newPromiseCapability = __w_pdfjs_require__(100);\r\nmodule.exports = function (C, x) {\r\n anObject(C);\r\n if (isObject(x) && x.constructor === C)\r\n  return x;\r\n var promiseCapability = newPromiseCapability.f(C);\r\n var resolve = promiseCapability.resolve;\r\n resolve(x);\r\n return promiseCapability.promise;\r\n};\r\n\r\n/***/ }),\r\n/* 100 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar aFunction = __w_pdfjs_require__(76);\r\nvar PromiseCapability = function (C) {\r\n var resolve, reject;\r\n this.promise = new C(function ($$resolve, $$reject) {\r\n  if (resolve !== undefined || reject !== undefined)\r\n   throw TypeError('Bad Promise constructor');\r\n  resolve = $$resolve;\r\n  reject = $$reject;\r\n });\r\n this.resolve = aFunction(resolve);\r\n this.reject = aFunction(reject);\r\n};\r\nmodule.exports.f = function (C) {\r\n return new PromiseCapability(C);\r\n};\r\n\r\n/***/ }),\r\n/* 101 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nmodule.exports = function (a, b) {\r\n var console = global.console;\r\n if (console && console.error) {\r\n  arguments.length === 1 ? console.error(a) : console.error(a, b);\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 102 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = function (exec) {\r\n try {\r\n  return {\r\n   error: false,\r\n   value: exec()\r\n  };\r\n } catch (error) {\r\n  return {\r\n   error: true,\r\n   value: error\r\n  };\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 103 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar userAgent = __w_pdfjs_require__(95);\r\nvar process = global.process;\r\nvar versions = process && process.versions;\r\nvar v8 = versions && versions.v8;\r\nvar match, version;\r\nif (v8) {\r\n match = v8.split('.');\r\n version = match[0] + match[1];\r\n} else if (userAgent) {\r\n match = userAgent.match(/Edge\\/(\\d+)/);\r\n if (!match || match[1] >= 74) {\r\n  match = userAgent.match(/Chrome\\/(\\d+)/);\r\n  if (match)\r\n   version = match[1];\r\n }\r\n}\r\nmodule.exports = version && +version;\r\n\r\n/***/ }),\r\n/* 104 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar aFunction = __w_pdfjs_require__(76);\r\nvar newPromiseCapabilityModule = __w_pdfjs_require__(100);\r\nvar perform = __w_pdfjs_require__(102);\r\nvar iterate = __w_pdfjs_require__(73);\r\n$({\r\n target: 'Promise',\r\n stat: true\r\n}, {\r\n allSettled: function allSettled(iterable) {\r\n  var C = this;\r\n  var capability = newPromiseCapabilityModule.f(C);\r\n  var resolve = capability.resolve;\r\n  var reject = capability.reject;\r\n  var result = perform(function () {\r\n   var promiseResolve = aFunction(C.resolve);\r\n   var values = [];\r\n   var counter = 0;\r\n   var remaining = 1;\r\n   iterate(iterable, function (promise) {\r\n    var index = counter++;\r\n    var alreadyCalled = false;\r\n    values.push(undefined);\r\n    remaining++;\r\n    promiseResolve.call(C, promise).then(function (value) {\r\n     if (alreadyCalled)\r\n      return;\r\n     alreadyCalled = true;\r\n     values[index] = {\r\n      status: 'fulfilled',\r\n      value: value\r\n     };\r\n     --remaining || resolve(values);\r\n    }, function (error) {\r\n     if (alreadyCalled)\r\n      return;\r\n     alreadyCalled = true;\r\n     values[index] = {\r\n      status: 'rejected',\r\n      reason: error\r\n     };\r\n     --remaining || resolve(values);\r\n    });\r\n   });\r\n   --remaining || resolve(values);\r\n  });\r\n  if (result.error)\r\n   reject(result.value);\r\n  return capability.promise;\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 105 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar aFunction = __w_pdfjs_require__(76);\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nvar newPromiseCapabilityModule = __w_pdfjs_require__(100);\r\nvar perform = __w_pdfjs_require__(102);\r\nvar iterate = __w_pdfjs_require__(73);\r\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\r\n$({\r\n target: 'Promise',\r\n stat: true\r\n}, {\r\n any: function any(iterable) {\r\n  var C = this;\r\n  var capability = newPromiseCapabilityModule.f(C);\r\n  var resolve = capability.resolve;\r\n  var reject = capability.reject;\r\n  var result = perform(function () {\r\n   var promiseResolve = aFunction(C.resolve);\r\n   var errors = [];\r\n   var counter = 0;\r\n   var remaining = 1;\r\n   var alreadyResolved = false;\r\n   iterate(iterable, function (promise) {\r\n    var index = counter++;\r\n    var alreadyRejected = false;\r\n    errors.push(undefined);\r\n    remaining++;\r\n    promiseResolve.call(C, promise).then(function (value) {\r\n     if (alreadyRejected || alreadyResolved)\r\n      return;\r\n     alreadyResolved = true;\r\n     resolve(value);\r\n    }, function (error) {\r\n     if (alreadyRejected || alreadyResolved)\r\n      return;\r\n     alreadyRejected = true;\r\n     errors[index] = error;\r\n     --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR));\r\n    });\r\n   });\r\n   --remaining || reject(new (getBuiltIn('AggregateError'))(errors, PROMISE_ANY_ERROR));\r\n  });\r\n  if (result.error)\r\n   reject(result.value);\r\n  return capability.promise;\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 106 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar IS_PURE = __w_pdfjs_require__(36);\r\nvar NativePromise = __w_pdfjs_require__(87);\r\nvar fails = __w_pdfjs_require__(13);\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nvar speciesConstructor = __w_pdfjs_require__(92);\r\nvar promiseResolve = __w_pdfjs_require__(99);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar NON_GENERIC = !!NativePromise && fails(function () {\r\n NativePromise.prototype['finally'].call({\r\n  then: function () {\r\n  }\r\n }, function () {\r\n });\r\n});\r\n$({\r\n target: 'Promise',\r\n proto: true,\r\n real: true,\r\n forced: NON_GENERIC\r\n}, {\r\n 'finally': function (onFinally) {\r\n  var C = speciesConstructor(this, getBuiltIn('Promise'));\r\n  var isFunction = typeof onFinally == 'function';\r\n  return this.then(isFunction ? function (x) {\r\n   return promiseResolve(C, onFinally()).then(function () {\r\n    return x;\r\n   });\r\n  } : onFinally, isFunction ? function (e) {\r\n   return promiseResolve(C, onFinally()).then(function () {\r\n    throw e;\r\n   });\r\n  } : onFinally);\r\n }\r\n});\r\nif (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {\r\n redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);\r\n}\r\n\r\n/***/ }),\r\n/* 107 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar charAt = __w_pdfjs_require__(108).charAt;\r\nvar InternalStateModule = __w_pdfjs_require__(32);\r\nvar defineIterator = __w_pdfjs_require__(63);\r\nvar STRING_ITERATOR = 'String Iterator';\r\nvar setInternalState = InternalStateModule.set;\r\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\r\ndefineIterator(String, 'String', function (iterated) {\r\n setInternalState(this, {\r\n  type: STRING_ITERATOR,\r\n  string: String(iterated),\r\n  index: 0\r\n });\r\n}, function next() {\r\n var state = getInternalState(this);\r\n var string = state.string;\r\n var index = state.index;\r\n var point;\r\n if (index >= string.length)\r\n  return {\r\n   value: undefined,\r\n   done: true\r\n  };\r\n point = charAt(string, index);\r\n state.index += point.length;\r\n return {\r\n  value: point,\r\n  done: false\r\n };\r\n});\r\n\r\n/***/ }),\r\n/* 108 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar toInteger = __w_pdfjs_require__(47);\r\nvar requireObjectCoercible = __w_pdfjs_require__(19);\r\nvar createMethod = function (CONVERT_TO_STRING) {\r\n return function ($this, pos) {\r\n  var S = String(requireObjectCoercible($this));\r\n  var position = toInteger(pos);\r\n  var size = S.length;\r\n  var first, second;\r\n  if (position < 0 || position >= size)\r\n   return CONVERT_TO_STRING ? '' : undefined;\r\n  first = S.charCodeAt(position);\r\n  return first < 0xD800 || first > 0xDBFF || position + 1 === size || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF ? CONVERT_TO_STRING ? S.charAt(position) : first : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\r\n };\r\n};\r\nmodule.exports = {\r\n codeAt: createMethod(false),\r\n charAt: createMethod(true)\r\n};\r\n\r\n/***/ }),\r\n/* 109 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar DOMIterables = __w_pdfjs_require__(110);\r\nvar ArrayIteratorMethods = __w_pdfjs_require__(53);\r\nvar createNonEnumerableProperty = __w_pdfjs_require__(25);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\r\nvar ArrayValues = ArrayIteratorMethods.values;\r\nfor (var COLLECTION_NAME in DOMIterables) {\r\n var Collection = global[COLLECTION_NAME];\r\n var CollectionPrototype = Collection && Collection.prototype;\r\n if (CollectionPrototype) {\r\n  if (CollectionPrototype[ITERATOR] !== ArrayValues)\r\n   try {\r\n    createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\r\n   } catch (error) {\r\n    CollectionPrototype[ITERATOR] = ArrayValues;\r\n   }\r\n  if (!CollectionPrototype[TO_STRING_TAG]) {\r\n   createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\r\n  }\r\n  if (DOMIterables[COLLECTION_NAME])\r\n   for (var METHOD_NAME in ArrayIteratorMethods) {\r\n    if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME])\r\n     try {\r\n      createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\r\n     } catch (error) {\r\n      CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\r\n     }\r\n   }\r\n }\r\n}\r\n\r\n/***/ }),\r\n/* 110 */\r\n/***/ ((module) => {\r\n\r\nmodule.exports = {\r\n CSSRuleList: 0,\r\n CSSStyleDeclaration: 0,\r\n CSSValueList: 0,\r\n ClientRectList: 0,\r\n DOMRectList: 0,\r\n DOMStringList: 0,\r\n DOMTokenList: 1,\r\n DataTransferItemList: 0,\r\n FileList: 0,\r\n HTMLAllCollection: 0,\r\n HTMLCollection: 0,\r\n HTMLFormElement: 0,\r\n HTMLSelectElement: 0,\r\n MediaList: 0,\r\n MimeTypeArray: 0,\r\n NamedNodeMap: 0,\r\n NodeList: 1,\r\n PaintRequestList: 0,\r\n Plugin: 0,\r\n PluginArray: 0,\r\n SVGLengthList: 0,\r\n SVGNumberList: 0,\r\n SVGPathSegList: 0,\r\n SVGPointList: 0,\r\n SVGStringList: 0,\r\n SVGTransformList: 0,\r\n SourceBufferList: 0,\r\n StyleSheetList: 0,\r\n TextTrackCueList: 0,\r\n TextTrackList: 0,\r\n TouchList: 0\r\n};\r\n\r\n/***/ }),\r\n/* 111 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(112);\r\n__w_pdfjs_require__(120);\r\n__w_pdfjs_require__(118);\r\nvar path = __w_pdfjs_require__(42);\r\nmodule.exports = path.URL;\r\n\r\n/***/ }),\r\n/* 112 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n__w_pdfjs_require__(107);\r\nvar $ = __w_pdfjs_require__(9);\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar USE_NATIVE_URL = __w_pdfjs_require__(113);\r\nvar global = __w_pdfjs_require__(10);\r\nvar defineProperties = __w_pdfjs_require__(59);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar anInstance = __w_pdfjs_require__(90);\r\nvar has = __w_pdfjs_require__(22);\r\nvar assign = __w_pdfjs_require__(114);\r\nvar arrayFrom = __w_pdfjs_require__(115);\r\nvar codeAt = __w_pdfjs_require__(108).codeAt;\r\nvar toASCII = __w_pdfjs_require__(117);\r\nvar setToStringTag = __w_pdfjs_require__(69);\r\nvar URLSearchParamsModule = __w_pdfjs_require__(118);\r\nvar InternalStateModule = __w_pdfjs_require__(32);\r\nvar NativeURL = global.URL;\r\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\r\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\r\nvar setInternalState = InternalStateModule.set;\r\nvar getInternalURLState = InternalStateModule.getterFor('URL');\r\nvar floor = Math.floor;\r\nvar pow = Math.pow;\r\nvar INVALID_AUTHORITY = 'Invalid authority';\r\nvar INVALID_SCHEME = 'Invalid scheme';\r\nvar INVALID_HOST = 'Invalid host';\r\nvar INVALID_PORT = 'Invalid port';\r\nvar ALPHA = /[A-Za-z]/;\r\nvar ALPHANUMERIC = /[\\d+-.A-Za-z]/;\r\nvar DIGIT = /\\d/;\r\nvar HEX_START = /^(0x|0X)/;\r\nvar OCT = /^[0-7]+$/;\r\nvar DEC = /^\\d+$/;\r\nvar HEX = /^[\\dA-Fa-f]+$/;\r\nvar FORBIDDEN_HOST_CODE_POINT = /[\\u0000\\u0009\\u000A\\u000D #%/:?@[\\\\]]/;\r\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\u0000\\u0009\\u000A\\u000D #/:?@[\\\\]]/;\r\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u001F ]+|[\\u0000-\\u001F ]+$/g;\r\nvar TAB_AND_NEW_LINE = /[\\u0009\\u000A\\u000D]/g;\r\nvar EOF;\r\nvar parseHost = function (url, input) {\r\n var result, codePoints, index;\r\n if (input.charAt(0) == '[') {\r\n  if (input.charAt(input.length - 1) != ']')\r\n   return INVALID_HOST;\r\n  result = parseIPv6(input.slice(1, -1));\r\n  if (!result)\r\n   return INVALID_HOST;\r\n  url.host = result;\r\n } else if (!isSpecial(url)) {\r\n  if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input))\r\n   return INVALID_HOST;\r\n  result = '';\r\n  codePoints = arrayFrom(input);\r\n  for (index = 0; index < codePoints.length; index++) {\r\n   result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\r\n  }\r\n  url.host = result;\r\n } else {\r\n  input = toASCII(input);\r\n  if (FORBIDDEN_HOST_CODE_POINT.test(input))\r\n   return INVALID_HOST;\r\n  result = parseIPv4(input);\r\n  if (result === null)\r\n   return INVALID_HOST;\r\n  url.host = result;\r\n }\r\n};\r\nvar parseIPv4 = function (input) {\r\n var parts = input.split('.');\r\n var partsLength, numbers, index, part, radix, number, ipv4;\r\n if (parts.length && parts[parts.length - 1] == '') {\r\n  parts.pop();\r\n }\r\n partsLength = parts.length;\r\n if (partsLength > 4)\r\n  return input;\r\n numbers = [];\r\n for (index = 0; index < partsLength; index++) {\r\n  part = parts[index];\r\n  if (part == '')\r\n   return input;\r\n  radix = 10;\r\n  if (part.length > 1 && part.charAt(0) == '0') {\r\n   radix = HEX_START.test(part) ? 16 : 8;\r\n   part = part.slice(radix == 8 ? 1 : 2);\r\n  }\r\n  if (part === '') {\r\n   number = 0;\r\n  } else {\r\n   if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part))\r\n    return input;\r\n   number = parseInt(part, radix);\r\n  }\r\n  numbers.push(number);\r\n }\r\n for (index = 0; index < partsLength; index++) {\r\n  number = numbers[index];\r\n  if (index == partsLength - 1) {\r\n   if (number >= pow(256, 5 - partsLength))\r\n    return null;\r\n  } else if (number > 255)\r\n   return null;\r\n }\r\n ipv4 = numbers.pop();\r\n for (index = 0; index < numbers.length; index++) {\r\n  ipv4 += numbers[index] * pow(256, 3 - index);\r\n }\r\n return ipv4;\r\n};\r\nvar parseIPv6 = function (input) {\r\n var address = [\r\n  0,\r\n  0,\r\n  0,\r\n  0,\r\n  0,\r\n  0,\r\n  0,\r\n  0\r\n ];\r\n var pieceIndex = 0;\r\n var compress = null;\r\n var pointer = 0;\r\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\r\n var char = function () {\r\n  return input.charAt(pointer);\r\n };\r\n if (char() == ':') {\r\n  if (input.charAt(1) != ':')\r\n   return;\r\n  pointer += 2;\r\n  pieceIndex++;\r\n  compress = pieceIndex;\r\n }\r\n while (char()) {\r\n  if (pieceIndex == 8)\r\n   return;\r\n  if (char() == ':') {\r\n   if (compress !== null)\r\n    return;\r\n   pointer++;\r\n   pieceIndex++;\r\n   compress = pieceIndex;\r\n   continue;\r\n  }\r\n  value = length = 0;\r\n  while (length < 4 && HEX.test(char())) {\r\n   value = value * 16 + parseInt(char(), 16);\r\n   pointer++;\r\n   length++;\r\n  }\r\n  if (char() == '.') {\r\n   if (length == 0)\r\n    return;\r\n   pointer -= length;\r\n   if (pieceIndex > 6)\r\n    return;\r\n   numbersSeen = 0;\r\n   while (char()) {\r\n    ipv4Piece = null;\r\n    if (numbersSeen > 0) {\r\n     if (char() == '.' && numbersSeen < 4)\r\n      pointer++;\r\n     else\r\n      return;\r\n    }\r\n    if (!DIGIT.test(char()))\r\n     return;\r\n    while (DIGIT.test(char())) {\r\n     number = parseInt(char(), 10);\r\n     if (ipv4Piece === null)\r\n      ipv4Piece = number;\r\n     else if (ipv4Piece == 0)\r\n      return;\r\n     else\r\n      ipv4Piece = ipv4Piece * 10 + number;\r\n     if (ipv4Piece > 255)\r\n      return;\r\n     pointer++;\r\n    }\r\n    address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\r\n    numbersSeen++;\r\n    if (numbersSeen == 2 || numbersSeen == 4)\r\n     pieceIndex++;\r\n   }\r\n   if (numbersSeen != 4)\r\n    return;\r\n   break;\r\n  } else if (char() == ':') {\r\n   pointer++;\r\n   if (!char())\r\n    return;\r\n  } else if (char())\r\n   return;\r\n  address[pieceIndex++] = value;\r\n }\r\n if (compress !== null) {\r\n  swaps = pieceIndex - compress;\r\n  pieceIndex = 7;\r\n  while (pieceIndex != 0 && swaps > 0) {\r\n   swap = address[pieceIndex];\r\n   address[pieceIndex--] = address[compress + swaps - 1];\r\n   address[compress + --swaps] = swap;\r\n  }\r\n } else if (pieceIndex != 8)\r\n  return;\r\n return address;\r\n};\r\nvar findLongestZeroSequence = function (ipv6) {\r\n var maxIndex = null;\r\n var maxLength = 1;\r\n var currStart = null;\r\n var currLength = 0;\r\n var index = 0;\r\n for (; index < 8; index++) {\r\n  if (ipv6[index] !== 0) {\r\n   if (currLength > maxLength) {\r\n    maxIndex = currStart;\r\n    maxLength = currLength;\r\n   }\r\n   currStart = null;\r\n   currLength = 0;\r\n  } else {\r\n   if (currStart === null)\r\n    currStart = index;\r\n   ++currLength;\r\n  }\r\n }\r\n if (currLength > maxLength) {\r\n  maxIndex = currStart;\r\n  maxLength = currLength;\r\n }\r\n return maxIndex;\r\n};\r\nvar serializeHost = function (host) {\r\n var result, index, compress, ignore0;\r\n if (typeof host == 'number') {\r\n  result = [];\r\n  for (index = 0; index < 4; index++) {\r\n   result.unshift(host % 256);\r\n   host = floor(host / 256);\r\n  }\r\n  return result.join('.');\r\n } else if (typeof host == 'object') {\r\n  result = '';\r\n  compress = findLongestZeroSequence(host);\r\n  for (index = 0; index < 8; index++) {\r\n   if (ignore0 && host[index] === 0)\r\n    continue;\r\n   if (ignore0)\r\n    ignore0 = false;\r\n   if (compress === index) {\r\n    result += index ? ':' : '::';\r\n    ignore0 = true;\r\n   } else {\r\n    result += host[index].toString(16);\r\n    if (index < 7)\r\n     result += ':';\r\n   }\r\n  }\r\n  return '[' + result + ']';\r\n }\r\n return host;\r\n};\r\nvar C0ControlPercentEncodeSet = {};\r\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\r\n ' ': 1,\r\n '\"': 1,\r\n '<': 1,\r\n '>': 1,\r\n '`': 1\r\n});\r\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\r\n '#': 1,\r\n '?': 1,\r\n '{': 1,\r\n '}': 1\r\n});\r\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\r\n '/': 1,\r\n ':': 1,\r\n ';': 1,\r\n '=': 1,\r\n '@': 1,\r\n '[': 1,\r\n '\\\\': 1,\r\n ']': 1,\r\n '^': 1,\r\n '|': 1\r\n});\r\nvar percentEncode = function (char, set) {\r\n var code = codeAt(char, 0);\r\n return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\r\n};\r\nvar specialSchemes = {\r\n ftp: 21,\r\n file: null,\r\n http: 80,\r\n https: 443,\r\n ws: 80,\r\n wss: 443\r\n};\r\nvar isSpecial = function (url) {\r\n return has(specialSchemes, url.scheme);\r\n};\r\nvar includesCredentials = function (url) {\r\n return url.username != '' || url.password != '';\r\n};\r\nvar cannotHaveUsernamePasswordPort = function (url) {\r\n return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\r\n};\r\nvar isWindowsDriveLetter = function (string, normalized) {\r\n var second;\r\n return string.length == 2 && ALPHA.test(string.charAt(0)) && ((second = string.charAt(1)) == ':' || !normalized && second == '|');\r\n};\r\nvar startsWithWindowsDriveLetter = function (string) {\r\n var third;\r\n return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (string.length == 2 || ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#'));\r\n};\r\nvar shortenURLsPath = function (url) {\r\n var path = url.path;\r\n var pathSize = path.length;\r\n if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\r\n  path.pop();\r\n }\r\n};\r\nvar isSingleDot = function (segment) {\r\n return segment === '.' || segment.toLowerCase() === '%2e';\r\n};\r\nvar isDoubleDot = function (segment) {\r\n segment = segment.toLowerCase();\r\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\r\n};\r\nvar SCHEME_START = {};\r\nvar SCHEME = {};\r\nvar NO_SCHEME = {};\r\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\r\nvar PATH_OR_AUTHORITY = {};\r\nvar RELATIVE = {};\r\nvar RELATIVE_SLASH = {};\r\nvar SPECIAL_AUTHORITY_SLASHES = {};\r\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\r\nvar AUTHORITY = {};\r\nvar HOST = {};\r\nvar HOSTNAME = {};\r\nvar PORT = {};\r\nvar FILE = {};\r\nvar FILE_SLASH = {};\r\nvar FILE_HOST = {};\r\nvar PATH_START = {};\r\nvar PATH = {};\r\nvar CANNOT_BE_A_BASE_URL_PATH = {};\r\nvar QUERY = {};\r\nvar FRAGMENT = {};\r\nvar parseURL = function (url, input, stateOverride, base) {\r\n var state = stateOverride || SCHEME_START;\r\n var pointer = 0;\r\n var buffer = '';\r\n var seenAt = false;\r\n var seenBracket = false;\r\n var seenPasswordToken = false;\r\n var codePoints, char, bufferCodePoints, failure;\r\n if (!stateOverride) {\r\n  url.scheme = '';\r\n  url.username = '';\r\n  url.password = '';\r\n  url.host = null;\r\n  url.port = null;\r\n  url.path = [];\r\n  url.query = null;\r\n  url.fragment = null;\r\n  url.cannotBeABaseURL = false;\r\n  input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\r\n }\r\n input = input.replace(TAB_AND_NEW_LINE, '');\r\n codePoints = arrayFrom(input);\r\n while (pointer <= codePoints.length) {\r\n  char = codePoints[pointer];\r\n  switch (state) {\r\n  case SCHEME_START:\r\n   if (char && ALPHA.test(char)) {\r\n    buffer += char.toLowerCase();\r\n    state = SCHEME;\r\n   } else if (!stateOverride) {\r\n    state = NO_SCHEME;\r\n    continue;\r\n   } else\r\n    return INVALID_SCHEME;\r\n   break;\r\n  case SCHEME:\r\n   if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\r\n    buffer += char.toLowerCase();\r\n   } else if (char == ':') {\r\n    if (stateOverride && (isSpecial(url) != has(specialSchemes, buffer) || buffer == 'file' && (includesCredentials(url) || url.port !== null) || url.scheme == 'file' && !url.host))\r\n     return;\r\n    url.scheme = buffer;\r\n    if (stateOverride) {\r\n     if (isSpecial(url) && specialSchemes[url.scheme] == url.port)\r\n      url.port = null;\r\n     return;\r\n    }\r\n    buffer = '';\r\n    if (url.scheme == 'file') {\r\n     state = FILE;\r\n    } else if (isSpecial(url) && base && base.scheme == url.scheme) {\r\n     state = SPECIAL_RELATIVE_OR_AUTHORITY;\r\n    } else if (isSpecial(url)) {\r\n     state = SPECIAL_AUTHORITY_SLASHES;\r\n    } else if (codePoints[pointer + 1] == '/') {\r\n     state = PATH_OR_AUTHORITY;\r\n     pointer++;\r\n    } else {\r\n     url.cannotBeABaseURL = true;\r\n     url.path.push('');\r\n     state = CANNOT_BE_A_BASE_URL_PATH;\r\n    }\r\n   } else if (!stateOverride) {\r\n    buffer = '';\r\n    state = NO_SCHEME;\r\n    pointer = 0;\r\n    continue;\r\n   } else\r\n    return INVALID_SCHEME;\r\n   break;\r\n  case NO_SCHEME:\r\n   if (!base || base.cannotBeABaseURL && char != '#')\r\n    return INVALID_SCHEME;\r\n   if (base.cannotBeABaseURL && char == '#') {\r\n    url.scheme = base.scheme;\r\n    url.path = base.path.slice();\r\n    url.query = base.query;\r\n    url.fragment = '';\r\n    url.cannotBeABaseURL = true;\r\n    state = FRAGMENT;\r\n    break;\r\n   }\r\n   state = base.scheme == 'file' ? FILE : RELATIVE;\r\n   continue;\r\n  case SPECIAL_RELATIVE_OR_AUTHORITY:\r\n   if (char == '/' && codePoints[pointer + 1] == '/') {\r\n    state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\r\n    pointer++;\r\n   } else {\r\n    state = RELATIVE;\r\n    continue;\r\n   }\r\n   break;\r\n  case PATH_OR_AUTHORITY:\r\n   if (char == '/') {\r\n    state = AUTHORITY;\r\n    break;\r\n   } else {\r\n    state = PATH;\r\n    continue;\r\n   }\r\n  case RELATIVE:\r\n   url.scheme = base.scheme;\r\n   if (char == EOF) {\r\n    url.username = base.username;\r\n    url.password = base.password;\r\n    url.host = base.host;\r\n    url.port = base.port;\r\n    url.path = base.path.slice();\r\n    url.query = base.query;\r\n   } else if (char == '/' || char == '\\\\' && isSpecial(url)) {\r\n    state = RELATIVE_SLASH;\r\n   } else if (char == '?') {\r\n    url.username = base.username;\r\n    url.password = base.password;\r\n    url.host = base.host;\r\n    url.port = base.port;\r\n    url.path = base.path.slice();\r\n    url.query = '';\r\n    state = QUERY;\r\n   } else if (char == '#') {\r\n    url.username = base.username;\r\n    url.password = base.password;\r\n    url.host = base.host;\r\n    url.port = base.port;\r\n    url.path = base.path.slice();\r\n    url.query = base.query;\r\n    url.fragment = '';\r\n    state = FRAGMENT;\r\n   } else {\r\n    url.username = base.username;\r\n    url.password = base.password;\r\n    url.host = base.host;\r\n    url.port = base.port;\r\n    url.path = base.path.slice();\r\n    url.path.pop();\r\n    state = PATH;\r\n    continue;\r\n   }\r\n   break;\r\n  case RELATIVE_SLASH:\r\n   if (isSpecial(url) && (char == '/' || char == '\\\\')) {\r\n    state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\r\n   } else if (char == '/') {\r\n    state = AUTHORITY;\r\n   } else {\r\n    url.username = base.username;\r\n    url.password = base.password;\r\n    url.host = base.host;\r\n    url.port = base.port;\r\n    state = PATH;\r\n    continue;\r\n   }\r\n   break;\r\n  case SPECIAL_AUTHORITY_SLASHES:\r\n   state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\r\n   if (char != '/' || buffer.charAt(pointer + 1) != '/')\r\n    continue;\r\n   pointer++;\r\n   break;\r\n  case SPECIAL_AUTHORITY_IGNORE_SLASHES:\r\n   if (char != '/' && char != '\\\\') {\r\n    state = AUTHORITY;\r\n    continue;\r\n   }\r\n   break;\r\n  case AUTHORITY:\r\n   if (char == '@') {\r\n    if (seenAt)\r\n     buffer = '%40' + buffer;\r\n    seenAt = true;\r\n    bufferCodePoints = arrayFrom(buffer);\r\n    for (var i = 0; i < bufferCodePoints.length; i++) {\r\n     var codePoint = bufferCodePoints[i];\r\n     if (codePoint == ':' && !seenPasswordToken) {\r\n      seenPasswordToken = true;\r\n      continue;\r\n     }\r\n     var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\r\n     if (seenPasswordToken)\r\n      url.password += encodedCodePoints;\r\n     else\r\n      url.username += encodedCodePoints;\r\n    }\r\n    buffer = '';\r\n   } else if (char == EOF || char == '/' || char == '?' || char == '#' || char == '\\\\' && isSpecial(url)) {\r\n    if (seenAt && buffer == '')\r\n     return INVALID_AUTHORITY;\r\n    pointer -= arrayFrom(buffer).length + 1;\r\n    buffer = '';\r\n    state = HOST;\r\n   } else\r\n    buffer += char;\r\n   break;\r\n  case HOST:\r\n  case HOSTNAME:\r\n   if (stateOverride && url.scheme == 'file') {\r\n    state = FILE_HOST;\r\n    continue;\r\n   } else if (char == ':' && !seenBracket) {\r\n    if (buffer == '')\r\n     return INVALID_HOST;\r\n    failure = parseHost(url, buffer);\r\n    if (failure)\r\n     return failure;\r\n    buffer = '';\r\n    state = PORT;\r\n    if (stateOverride == HOSTNAME)\r\n     return;\r\n   } else if (char == EOF || char == '/' || char == '?' || char == '#' || char == '\\\\' && isSpecial(url)) {\r\n    if (isSpecial(url) && buffer == '')\r\n     return INVALID_HOST;\r\n    if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null))\r\n     return;\r\n    failure = parseHost(url, buffer);\r\n    if (failure)\r\n     return failure;\r\n    buffer = '';\r\n    state = PATH_START;\r\n    if (stateOverride)\r\n     return;\r\n    continue;\r\n   } else {\r\n    if (char == '[')\r\n     seenBracket = true;\r\n    else if (char == ']')\r\n     seenBracket = false;\r\n    buffer += char;\r\n   }\r\n   break;\r\n  case PORT:\r\n   if (DIGIT.test(char)) {\r\n    buffer += char;\r\n   } else if (char == EOF || char == '/' || char == '?' || char == '#' || char == '\\\\' && isSpecial(url) || stateOverride) {\r\n    if (buffer != '') {\r\n     var port = parseInt(buffer, 10);\r\n     if (port > 0xFFFF)\r\n      return INVALID_PORT;\r\n     url.port = isSpecial(url) && port === specialSchemes[url.scheme] ? null : port;\r\n     buffer = '';\r\n    }\r\n    if (stateOverride)\r\n     return;\r\n    state = PATH_START;\r\n    continue;\r\n   } else\r\n    return INVALID_PORT;\r\n   break;\r\n  case FILE:\r\n   url.scheme = 'file';\r\n   if (char == '/' || char == '\\\\')\r\n    state = FILE_SLASH;\r\n   else if (base && base.scheme == 'file') {\r\n    if (char == EOF) {\r\n     url.host = base.host;\r\n     url.path = base.path.slice();\r\n     url.query = base.query;\r\n    } else if (char == '?') {\r\n     url.host = base.host;\r\n     url.path = base.path.slice();\r\n     url.query = '';\r\n     state = QUERY;\r\n    } else if (char == '#') {\r\n     url.host = base.host;\r\n     url.path = base.path.slice();\r\n     url.query = base.query;\r\n     url.fragment = '';\r\n     state = FRAGMENT;\r\n    } else {\r\n     if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\r\n      url.host = base.host;\r\n      url.path = base.path.slice();\r\n      shortenURLsPath(url);\r\n     }\r\n     state = PATH;\r\n     continue;\r\n    }\r\n   } else {\r\n    state = PATH;\r\n    continue;\r\n   }\r\n   break;\r\n  case FILE_SLASH:\r\n   if (char == '/' || char == '\\\\') {\r\n    state = FILE_HOST;\r\n    break;\r\n   }\r\n   if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\r\n    if (isWindowsDriveLetter(base.path[0], true))\r\n     url.path.push(base.path[0]);\r\n    else\r\n     url.host = base.host;\r\n   }\r\n   state = PATH;\r\n   continue;\r\n  case FILE_HOST:\r\n   if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\r\n    if (!stateOverride && isWindowsDriveLetter(buffer)) {\r\n     state = PATH;\r\n    } else if (buffer == '') {\r\n     url.host = '';\r\n     if (stateOverride)\r\n      return;\r\n     state = PATH_START;\r\n    } else {\r\n     failure = parseHost(url, buffer);\r\n     if (failure)\r\n      return failure;\r\n     if (url.host == 'localhost')\r\n      url.host = '';\r\n     if (stateOverride)\r\n      return;\r\n     buffer = '';\r\n     state = PATH_START;\r\n    }\r\n    continue;\r\n   } else\r\n    buffer += char;\r\n   break;\r\n  case PATH_START:\r\n   if (isSpecial(url)) {\r\n    state = PATH;\r\n    if (char != '/' && char != '\\\\')\r\n     continue;\r\n   } else if (!stateOverride && char == '?') {\r\n    url.query = '';\r\n    state = QUERY;\r\n   } else if (!stateOverride && char == '#') {\r\n    url.fragment = '';\r\n    state = FRAGMENT;\r\n   } else if (char != EOF) {\r\n    state = PATH;\r\n    if (char != '/')\r\n     continue;\r\n   }\r\n   break;\r\n  case PATH:\r\n   if (char == EOF || char == '/' || char == '\\\\' && isSpecial(url) || !stateOverride && (char == '?' || char == '#')) {\r\n    if (isDoubleDot(buffer)) {\r\n     shortenURLsPath(url);\r\n     if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\r\n      url.path.push('');\r\n     }\r\n    } else if (isSingleDot(buffer)) {\r\n     if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\r\n      url.path.push('');\r\n     }\r\n    } else {\r\n     if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\r\n      if (url.host)\r\n       url.host = '';\r\n      buffer = buffer.charAt(0) + ':';\r\n     }\r\n     url.path.push(buffer);\r\n    }\r\n    buffer = '';\r\n    if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\r\n     while (url.path.length > 1 && url.path[0] === '') {\r\n      url.path.shift();\r\n     }\r\n    }\r\n    if (char == '?') {\r\n     url.query = '';\r\n     state = QUERY;\r\n    } else if (char == '#') {\r\n     url.fragment = '';\r\n     state = FRAGMENT;\r\n    }\r\n   } else {\r\n    buffer += percentEncode(char, pathPercentEncodeSet);\r\n   }\r\n   break;\r\n  case CANNOT_BE_A_BASE_URL_PATH:\r\n   if (char == '?') {\r\n    url.query = '';\r\n    state = QUERY;\r\n   } else if (char == '#') {\r\n    url.fragment = '';\r\n    state = FRAGMENT;\r\n   } else if (char != EOF) {\r\n    url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\r\n   }\r\n   break;\r\n  case QUERY:\r\n   if (!stateOverride && char == '#') {\r\n    url.fragment = '';\r\n    state = FRAGMENT;\r\n   } else if (char != EOF) {\r\n    if (char == \"'\" && isSpecial(url))\r\n     url.query += '%27';\r\n    else if (char == '#')\r\n     url.query += '%23';\r\n    else\r\n     url.query += percentEncode(char, C0ControlPercentEncodeSet);\r\n   }\r\n   break;\r\n  case FRAGMENT:\r\n   if (char != EOF)\r\n    url.fragment += percentEncode(char, fragmentPercentEncodeSet);\r\n   break;\r\n  }\r\n  pointer++;\r\n }\r\n};\r\nvar URLConstructor = function URL(url) {\r\n var that = anInstance(this, URLConstructor, 'URL');\r\n var base = arguments.length > 1 ? arguments[1] : undefined;\r\n var urlString = String(url);\r\n var state = setInternalState(that, { type: 'URL' });\r\n var baseState, failure;\r\n if (base !== undefined) {\r\n  if (base instanceof URLConstructor)\r\n   baseState = getInternalURLState(base);\r\n  else {\r\n   failure = parseURL(baseState = {}, String(base));\r\n   if (failure)\r\n    throw TypeError(failure);\r\n  }\r\n }\r\n failure = parseURL(state, urlString, null, baseState);\r\n if (failure)\r\n  throw TypeError(failure);\r\n var searchParams = state.searchParams = new URLSearchParams();\r\n var searchParamsState = getInternalSearchParamsState(searchParams);\r\n searchParamsState.updateSearchParams(state.query);\r\n searchParamsState.updateURL = function () {\r\n  state.query = String(searchParams) || null;\r\n };\r\n if (!DESCRIPTORS) {\r\n  that.href = serializeURL.call(that);\r\n  that.origin = getOrigin.call(that);\r\n  that.protocol = getProtocol.call(that);\r\n  that.username = getUsername.call(that);\r\n  that.password = getPassword.call(that);\r\n  that.host = getHost.call(that);\r\n  that.hostname = getHostname.call(that);\r\n  that.port = getPort.call(that);\r\n  that.pathname = getPathname.call(that);\r\n  that.search = getSearch.call(that);\r\n  that.searchParams = getSearchParams.call(that);\r\n  that.hash = getHash.call(that);\r\n }\r\n};\r\nvar URLPrototype = URLConstructor.prototype;\r\nvar serializeURL = function () {\r\n var url = getInternalURLState(this);\r\n var scheme = url.scheme;\r\n var username = url.username;\r\n var password = url.password;\r\n var host = url.host;\r\n var port = url.port;\r\n var path = url.path;\r\n var query = url.query;\r\n var fragment = url.fragment;\r\n var output = scheme + ':';\r\n if (host !== null) {\r\n  output += '//';\r\n  if (includesCredentials(url)) {\r\n   output += username + (password ? ':' + password : '') + '@';\r\n  }\r\n  output += serializeHost(host);\r\n  if (port !== null)\r\n   output += ':' + port;\r\n } else if (scheme == 'file')\r\n  output += '//';\r\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\r\n if (query !== null)\r\n  output += '?' + query;\r\n if (fragment !== null)\r\n  output += '#' + fragment;\r\n return output;\r\n};\r\nvar getOrigin = function () {\r\n var url = getInternalURLState(this);\r\n var scheme = url.scheme;\r\n var port = url.port;\r\n if (scheme == 'blob')\r\n  try {\r\n   return new URL(scheme.path[0]).origin;\r\n  } catch (error) {\r\n   return 'null';\r\n  }\r\n if (scheme == 'file' || !isSpecial(url))\r\n  return 'null';\r\n return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\r\n};\r\nvar getProtocol = function () {\r\n return getInternalURLState(this).scheme + ':';\r\n};\r\nvar getUsername = function () {\r\n return getInternalURLState(this).username;\r\n};\r\nvar getPassword = function () {\r\n return getInternalURLState(this).password;\r\n};\r\nvar getHost = function () {\r\n var url = getInternalURLState(this);\r\n var host = url.host;\r\n var port = url.port;\r\n return host === null ? '' : port === null ? serializeHost(host) : serializeHost(host) + ':' + port;\r\n};\r\nvar getHostname = function () {\r\n var host = getInternalURLState(this).host;\r\n return host === null ? '' : serializeHost(host);\r\n};\r\nvar getPort = function () {\r\n var port = getInternalURLState(this).port;\r\n return port === null ? '' : String(port);\r\n};\r\nvar getPathname = function () {\r\n var url = getInternalURLState(this);\r\n var path = url.path;\r\n return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\r\n};\r\nvar getSearch = function () {\r\n var query = getInternalURLState(this).query;\r\n return query ? '?' + query : '';\r\n};\r\nvar getSearchParams = function () {\r\n return getInternalURLState(this).searchParams;\r\n};\r\nvar getHash = function () {\r\n var fragment = getInternalURLState(this).fragment;\r\n return fragment ? '#' + fragment : '';\r\n};\r\nvar accessorDescriptor = function (getter, setter) {\r\n return {\r\n  get: getter,\r\n  set: setter,\r\n  configurable: true,\r\n  enumerable: true\r\n };\r\n};\r\nif (DESCRIPTORS) {\r\n defineProperties(URLPrototype, {\r\n  href: accessorDescriptor(serializeURL, function (href) {\r\n   var url = getInternalURLState(this);\r\n   var urlString = String(href);\r\n   var failure = parseURL(url, urlString);\r\n   if (failure)\r\n    throw TypeError(failure);\r\n   getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\r\n  }),\r\n  origin: accessorDescriptor(getOrigin),\r\n  protocol: accessorDescriptor(getProtocol, function (protocol) {\r\n   var url = getInternalURLState(this);\r\n   parseURL(url, String(protocol) + ':', SCHEME_START);\r\n  }),\r\n  username: accessorDescriptor(getUsername, function (username) {\r\n   var url = getInternalURLState(this);\r\n   var codePoints = arrayFrom(String(username));\r\n   if (cannotHaveUsernamePasswordPort(url))\r\n    return;\r\n   url.username = '';\r\n   for (var i = 0; i < codePoints.length; i++) {\r\n    url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\r\n   }\r\n  }),\r\n  password: accessorDescriptor(getPassword, function (password) {\r\n   var url = getInternalURLState(this);\r\n   var codePoints = arrayFrom(String(password));\r\n   if (cannotHaveUsernamePasswordPort(url))\r\n    return;\r\n   url.password = '';\r\n   for (var i = 0; i < codePoints.length; i++) {\r\n    url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\r\n   }\r\n  }),\r\n  host: accessorDescriptor(getHost, function (host) {\r\n   var url = getInternalURLState(this);\r\n   if (url.cannotBeABaseURL)\r\n    return;\r\n   parseURL(url, String(host), HOST);\r\n  }),\r\n  hostname: accessorDescriptor(getHostname, function (hostname) {\r\n   var url = getInternalURLState(this);\r\n   if (url.cannotBeABaseURL)\r\n    return;\r\n   parseURL(url, String(hostname), HOSTNAME);\r\n  }),\r\n  port: accessorDescriptor(getPort, function (port) {\r\n   var url = getInternalURLState(this);\r\n   if (cannotHaveUsernamePasswordPort(url))\r\n    return;\r\n   port = String(port);\r\n   if (port == '')\r\n    url.port = null;\r\n   else\r\n    parseURL(url, port, PORT);\r\n  }),\r\n  pathname: accessorDescriptor(getPathname, function (pathname) {\r\n   var url = getInternalURLState(this);\r\n   if (url.cannotBeABaseURL)\r\n    return;\r\n   url.path = [];\r\n   parseURL(url, pathname + '', PATH_START);\r\n  }),\r\n  search: accessorDescriptor(getSearch, function (search) {\r\n   var url = getInternalURLState(this);\r\n   search = String(search);\r\n   if (search == '') {\r\n    url.query = null;\r\n   } else {\r\n    if ('?' == search.charAt(0))\r\n     search = search.slice(1);\r\n    url.query = '';\r\n    parseURL(url, search, QUERY);\r\n   }\r\n   getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\r\n  }),\r\n  searchParams: accessorDescriptor(getSearchParams),\r\n  hash: accessorDescriptor(getHash, function (hash) {\r\n   var url = getInternalURLState(this);\r\n   hash = String(hash);\r\n   if (hash == '') {\r\n    url.fragment = null;\r\n    return;\r\n   }\r\n   if ('#' == hash.charAt(0))\r\n    hash = hash.slice(1);\r\n   url.fragment = '';\r\n   parseURL(url, hash, FRAGMENT);\r\n  })\r\n });\r\n}\r\nredefine(URLPrototype, 'toJSON', function toJSON() {\r\n return serializeURL.call(this);\r\n}, { enumerable: true });\r\nredefine(URLPrototype, 'toString', function toString() {\r\n return serializeURL.call(this);\r\n}, { enumerable: true });\r\nif (NativeURL) {\r\n var nativeCreateObjectURL = NativeURL.createObjectURL;\r\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\r\n if (nativeCreateObjectURL)\r\n  redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\r\n   return nativeCreateObjectURL.apply(NativeURL, arguments);\r\n  });\r\n if (nativeRevokeObjectURL)\r\n  redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\r\n   return nativeRevokeObjectURL.apply(NativeURL, arguments);\r\n  });\r\n}\r\nsetToStringTag(URLConstructor, 'URL');\r\n$({\r\n global: true,\r\n forced: !USE_NATIVE_URL,\r\n sham: !DESCRIPTORS\r\n}, { URL: URLConstructor });\r\n\r\n/***/ }),\r\n/* 113 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar fails = __w_pdfjs_require__(13);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar IS_PURE = __w_pdfjs_require__(36);\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nmodule.exports = !fails(function () {\r\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\r\n var searchParams = url.searchParams;\r\n var result = '';\r\n url.pathname = 'c%20d';\r\n searchParams.forEach(function (value, key) {\r\n  searchParams['delete']('b');\r\n  result += key + value;\r\n });\r\n return IS_PURE && !url.toJSON || !searchParams.sort || url.href !== 'http://a/c%20d?a=1&c=3' || searchParams.get('c') !== '3' || String(new URLSearchParams('?a=1')) !== 'a=1' || !searchParams[ITERATOR] || new URL('https://a@b').username !== 'a' || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b' || new URL('http://тест').host !== 'xn--e1aybc' || new URL('http://a#б').hash !== '#%D0%B1' || result !== 'a1c3' || new URL('http://x', undefined).host !== 'x';\r\n});\r\n\r\n/***/ }),\r\n/* 114 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar fails = __w_pdfjs_require__(13);\r\nvar objectKeys = __w_pdfjs_require__(60);\r\nvar getOwnPropertySymbolsModule = __w_pdfjs_require__(50);\r\nvar propertyIsEnumerableModule = __w_pdfjs_require__(14);\r\nvar toObject = __w_pdfjs_require__(67);\r\nvar IndexedObject = __w_pdfjs_require__(17);\r\nvar nativeAssign = Object.assign;\r\nvar defineProperty = Object.defineProperty;\r\nmodule.exports = !nativeAssign || fails(function () {\r\n if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\r\n   enumerable: true,\r\n   get: function () {\r\n    defineProperty(this, 'b', {\r\n     value: 3,\r\n     enumerable: false\r\n    });\r\n   }\r\n  }), { b: 2 })).b !== 1)\r\n  return true;\r\n var A = {};\r\n var B = {};\r\n var symbol = Symbol();\r\n var alphabet = 'abcdefghijklmnopqrst';\r\n A[symbol] = 7;\r\n alphabet.split('').forEach(function (chr) {\r\n  B[chr] = chr;\r\n });\r\n return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\r\n}) ? function assign(target, source) {\r\n var T = toObject(target);\r\n var argumentsLength = arguments.length;\r\n var index = 1;\r\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\r\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\r\n while (argumentsLength > index) {\r\n  var S = IndexedObject(arguments[index++]);\r\n  var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\r\n  var length = keys.length;\r\n  var j = 0;\r\n  var key;\r\n  while (length > j) {\r\n   key = keys[j++];\r\n   if (!DESCRIPTORS || propertyIsEnumerable.call(S, key))\r\n    T[key] = S[key];\r\n  }\r\n }\r\n return T;\r\n} : nativeAssign;\r\n\r\n/***/ }),\r\n/* 115 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar bind = __w_pdfjs_require__(75);\r\nvar toObject = __w_pdfjs_require__(67);\r\nvar callWithSafeIterationClosing = __w_pdfjs_require__(116);\r\nvar isArrayIteratorMethod = __w_pdfjs_require__(74);\r\nvar toLength = __w_pdfjs_require__(46);\r\nvar createProperty = __w_pdfjs_require__(81);\r\nvar getIteratorMethod = __w_pdfjs_require__(77);\r\nmodule.exports = function from(arrayLike) {\r\n var O = toObject(arrayLike);\r\n var C = typeof this == 'function' ? this : Array;\r\n var argumentsLength = arguments.length;\r\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\r\n var mapping = mapfn !== undefined;\r\n var iteratorMethod = getIteratorMethod(O);\r\n var index = 0;\r\n var length, result, step, iterator, next, value;\r\n if (mapping)\r\n  mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\r\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\r\n  iterator = iteratorMethod.call(O);\r\n  next = iterator.next;\r\n  result = new C();\r\n  for (; !(step = next.call(iterator)).done; index++) {\r\n   value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [\r\n    step.value,\r\n    index\r\n   ], true) : step.value;\r\n   createProperty(result, index, value);\r\n  }\r\n } else {\r\n  length = toLength(O.length);\r\n  result = new C(length);\r\n  for (; length > index; index++) {\r\n   value = mapping ? mapfn(O[index], index) : O[index];\r\n   createProperty(result, index, value);\r\n  }\r\n }\r\n result.length = index;\r\n return result;\r\n};\r\n\r\n/***/ }),\r\n/* 116 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar iteratorClose = __w_pdfjs_require__(80);\r\nmodule.exports = function (iterator, fn, value, ENTRIES) {\r\n try {\r\n  return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\r\n } catch (error) {\r\n  iteratorClose(iterator);\r\n  throw error;\r\n }\r\n};\r\n\r\n/***/ }),\r\n/* 117 */\r\n/***/ ((module) => {\r\n\r\n\"use strict\";\r\n\r\nvar maxInt = 2147483647;\r\nvar base = 36;\r\nvar tMin = 1;\r\nvar tMax = 26;\r\nvar skew = 38;\r\nvar damp = 700;\r\nvar initialBias = 72;\r\nvar initialN = 128;\r\nvar delimiter = '-';\r\nvar regexNonASCII = /[^\\0-\\u007E]/;\r\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g;\r\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\r\nvar baseMinusTMin = base - tMin;\r\nvar floor = Math.floor;\r\nvar stringFromCharCode = String.fromCharCode;\r\nvar ucs2decode = function (string) {\r\n var output = [];\r\n var counter = 0;\r\n var length = string.length;\r\n while (counter < length) {\r\n  var value = string.charCodeAt(counter++);\r\n  if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\r\n   var extra = string.charCodeAt(counter++);\r\n   if ((extra & 0xFC00) == 0xDC00) {\r\n    output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\r\n   } else {\r\n    output.push(value);\r\n    counter--;\r\n   }\r\n  } else {\r\n   output.push(value);\r\n  }\r\n }\r\n return output;\r\n};\r\nvar digitToBasic = function (digit) {\r\n return digit + 22 + 75 * (digit < 26);\r\n};\r\nvar adapt = function (delta, numPoints, firstTime) {\r\n var k = 0;\r\n delta = firstTime ? floor(delta / damp) : delta >> 1;\r\n delta += floor(delta / numPoints);\r\n for (; delta > baseMinusTMin * tMax >> 1; k += base) {\r\n  delta = floor(delta / baseMinusTMin);\r\n }\r\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\r\n};\r\nvar encode = function (input) {\r\n var output = [];\r\n input = ucs2decode(input);\r\n var inputLength = input.length;\r\n var n = initialN;\r\n var delta = 0;\r\n var bias = initialBias;\r\n var i, currentValue;\r\n for (i = 0; i < input.length; i++) {\r\n  currentValue = input[i];\r\n  if (currentValue < 0x80) {\r\n   output.push(stringFromCharCode(currentValue));\r\n  }\r\n }\r\n var basicLength = output.length;\r\n var handledCPCount = basicLength;\r\n if (basicLength) {\r\n  output.push(delimiter);\r\n }\r\n while (handledCPCount < inputLength) {\r\n  var m = maxInt;\r\n  for (i = 0; i < input.length; i++) {\r\n   currentValue = input[i];\r\n   if (currentValue >= n && currentValue < m) {\r\n    m = currentValue;\r\n   }\r\n  }\r\n  var handledCPCountPlusOne = handledCPCount + 1;\r\n  if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\r\n   throw RangeError(OVERFLOW_ERROR);\r\n  }\r\n  delta += (m - n) * handledCPCountPlusOne;\r\n  n = m;\r\n  for (i = 0; i < input.length; i++) {\r\n   currentValue = input[i];\r\n   if (currentValue < n && ++delta > maxInt) {\r\n    throw RangeError(OVERFLOW_ERROR);\r\n   }\r\n   if (currentValue == n) {\r\n    var q = delta;\r\n    for (var k = base;; k += base) {\r\n     var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\r\n     if (q < t)\r\n      break;\r\n     var qMinusT = q - t;\r\n     var baseMinusT = base - t;\r\n     output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\r\n     q = floor(qMinusT / baseMinusT);\r\n    }\r\n    output.push(stringFromCharCode(digitToBasic(q)));\r\n    bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\r\n    delta = 0;\r\n    ++handledCPCount;\r\n   }\r\n  }\r\n  ++delta;\r\n  ++n;\r\n }\r\n return output.join('');\r\n};\r\nmodule.exports = function (input) {\r\n var encoded = [];\r\n var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\r\n var i, label;\r\n for (i = 0; i < labels.length; i++) {\r\n  label = labels[i];\r\n  encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\r\n }\r\n return encoded.join('.');\r\n};\r\n\r\n/***/ }),\r\n/* 118 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n__w_pdfjs_require__(53);\r\nvar $ = __w_pdfjs_require__(9);\r\nvar getBuiltIn = __w_pdfjs_require__(41);\r\nvar USE_NATIVE_URL = __w_pdfjs_require__(113);\r\nvar redefine = __w_pdfjs_require__(28);\r\nvar redefineAll = __w_pdfjs_require__(88);\r\nvar setToStringTag = __w_pdfjs_require__(69);\r\nvar createIteratorConstructor = __w_pdfjs_require__(64);\r\nvar InternalStateModule = __w_pdfjs_require__(32);\r\nvar anInstance = __w_pdfjs_require__(90);\r\nvar hasOwn = __w_pdfjs_require__(22);\r\nvar bind = __w_pdfjs_require__(75);\r\nvar classof = __w_pdfjs_require__(78);\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar isObject = __w_pdfjs_require__(21);\r\nvar create = __w_pdfjs_require__(58);\r\nvar createPropertyDescriptor = __w_pdfjs_require__(15);\r\nvar getIterator = __w_pdfjs_require__(119);\r\nvar getIteratorMethod = __w_pdfjs_require__(77);\r\nvar wellKnownSymbol = __w_pdfjs_require__(55);\r\nvar $fetch = getBuiltIn('fetch');\r\nvar Headers = getBuiltIn('Headers');\r\nvar ITERATOR = wellKnownSymbol('iterator');\r\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\r\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\r\nvar setInternalState = InternalStateModule.set;\r\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\r\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\r\nvar plus = /\\+/g;\r\nvar sequences = Array(4);\r\nvar percentSequence = function (bytes) {\r\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\r\n};\r\nvar percentDecode = function (sequence) {\r\n try {\r\n  return decodeURIComponent(sequence);\r\n } catch (error) {\r\n  return sequence;\r\n }\r\n};\r\nvar deserialize = function (it) {\r\n var result = it.replace(plus, ' ');\r\n var bytes = 4;\r\n try {\r\n  return decodeURIComponent(result);\r\n } catch (error) {\r\n  while (bytes) {\r\n   result = result.replace(percentSequence(bytes--), percentDecode);\r\n  }\r\n  return result;\r\n }\r\n};\r\nvar find = /[!'()~]|%20/g;\r\nvar replace = {\r\n '!': '%21',\r\n \"'\": '%27',\r\n '(': '%28',\r\n ')': '%29',\r\n '~': '%7E',\r\n '%20': '+'\r\n};\r\nvar replacer = function (match) {\r\n return replace[match];\r\n};\r\nvar serialize = function (it) {\r\n return encodeURIComponent(it).replace(find, replacer);\r\n};\r\nvar parseSearchParams = function (result, query) {\r\n if (query) {\r\n  var attributes = query.split('&');\r\n  var index = 0;\r\n  var attribute, entry;\r\n  while (index < attributes.length) {\r\n   attribute = attributes[index++];\r\n   if (attribute.length) {\r\n    entry = attribute.split('=');\r\n    result.push({\r\n     key: deserialize(entry.shift()),\r\n     value: deserialize(entry.join('='))\r\n    });\r\n   }\r\n  }\r\n }\r\n};\r\nvar updateSearchParams = function (query) {\r\n this.entries.length = 0;\r\n parseSearchParams(this.entries, query);\r\n};\r\nvar validateArgumentsLength = function (passed, required) {\r\n if (passed < required)\r\n  throw TypeError('Not enough arguments');\r\n};\r\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\r\n setInternalState(this, {\r\n  type: URL_SEARCH_PARAMS_ITERATOR,\r\n  iterator: getIterator(getInternalParamsState(params).entries),\r\n  kind: kind\r\n });\r\n}, 'Iterator', function next() {\r\n var state = getInternalIteratorState(this);\r\n var kind = state.kind;\r\n var step = state.iterator.next();\r\n var entry = step.value;\r\n if (!step.done) {\r\n  step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [\r\n   entry.key,\r\n   entry.value\r\n  ];\r\n }\r\n return step;\r\n});\r\nvar URLSearchParamsConstructor = function URLSearchParams() {\r\n anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);\r\n var init = arguments.length > 0 ? arguments[0] : undefined;\r\n var that = this;\r\n var entries = [];\r\n var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;\r\n setInternalState(that, {\r\n  type: URL_SEARCH_PARAMS,\r\n  entries: entries,\r\n  updateURL: function () {\r\n  },\r\n  updateSearchParams: updateSearchParams\r\n });\r\n if (init !== undefined) {\r\n  if (isObject(init)) {\r\n   iteratorMethod = getIteratorMethod(init);\r\n   if (typeof iteratorMethod === 'function') {\r\n    iterator = iteratorMethod.call(init);\r\n    next = iterator.next;\r\n    while (!(step = next.call(iterator)).done) {\r\n     entryIterator = getIterator(anObject(step.value));\r\n     entryNext = entryIterator.next;\r\n     if ((first = entryNext.call(entryIterator)).done || (second = entryNext.call(entryIterator)).done || !entryNext.call(entryIterator).done)\r\n      throw TypeError('Expected sequence with length 2');\r\n     entries.push({\r\n      key: first.value + '',\r\n      value: second.value + ''\r\n     });\r\n    }\r\n   } else\r\n    for (key in init)\r\n     if (hasOwn(init, key))\r\n      entries.push({\r\n       key: key,\r\n       value: init[key] + ''\r\n      });\r\n  } else {\r\n   parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');\r\n  }\r\n }\r\n};\r\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\r\nredefineAll(URLSearchParamsPrototype, {\r\n append: function append(name, value) {\r\n  validateArgumentsLength(arguments.length, 2);\r\n  var state = getInternalParamsState(this);\r\n  state.entries.push({\r\n   key: name + '',\r\n   value: value + ''\r\n  });\r\n  state.updateURL();\r\n },\r\n 'delete': function (name) {\r\n  validateArgumentsLength(arguments.length, 1);\r\n  var state = getInternalParamsState(this);\r\n  var entries = state.entries;\r\n  var key = name + '';\r\n  var index = 0;\r\n  while (index < entries.length) {\r\n   if (entries[index].key === key)\r\n    entries.splice(index, 1);\r\n   else\r\n    index++;\r\n  }\r\n  state.updateURL();\r\n },\r\n get: function get(name) {\r\n  validateArgumentsLength(arguments.length, 1);\r\n  var entries = getInternalParamsState(this).entries;\r\n  var key = name + '';\r\n  var index = 0;\r\n  for (; index < entries.length; index++) {\r\n   if (entries[index].key === key)\r\n    return entries[index].value;\r\n  }\r\n  return null;\r\n },\r\n getAll: function getAll(name) {\r\n  validateArgumentsLength(arguments.length, 1);\r\n  var entries = getInternalParamsState(this).entries;\r\n  var key = name + '';\r\n  var result = [];\r\n  var index = 0;\r\n  for (; index < entries.length; index++) {\r\n   if (entries[index].key === key)\r\n    result.push(entries[index].value);\r\n  }\r\n  return result;\r\n },\r\n has: function has(name) {\r\n  validateArgumentsLength(arguments.length, 1);\r\n  var entries = getInternalParamsState(this).entries;\r\n  var key = name + '';\r\n  var index = 0;\r\n  while (index < entries.length) {\r\n   if (entries[index++].key === key)\r\n    return true;\r\n  }\r\n  return false;\r\n },\r\n set: function set(name, value) {\r\n  validateArgumentsLength(arguments.length, 1);\r\n  var state = getInternalParamsState(this);\r\n  var entries = state.entries;\r\n  var found = false;\r\n  var key = name + '';\r\n  var val = value + '';\r\n  var index = 0;\r\n  var entry;\r\n  for (; index < entries.length; index++) {\r\n   entry = entries[index];\r\n   if (entry.key === key) {\r\n    if (found)\r\n     entries.splice(index--, 1);\r\n    else {\r\n     found = true;\r\n     entry.value = val;\r\n    }\r\n   }\r\n  }\r\n  if (!found)\r\n   entries.push({\r\n    key: key,\r\n    value: val\r\n   });\r\n  state.updateURL();\r\n },\r\n sort: function sort() {\r\n  var state = getInternalParamsState(this);\r\n  var entries = state.entries;\r\n  var slice = entries.slice();\r\n  var entry, entriesIndex, sliceIndex;\r\n  entries.length = 0;\r\n  for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {\r\n   entry = slice[sliceIndex];\r\n   for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {\r\n    if (entries[entriesIndex].key > entry.key) {\r\n     entries.splice(entriesIndex, 0, entry);\r\n     break;\r\n    }\r\n   }\r\n   if (entriesIndex === sliceIndex)\r\n    entries.push(entry);\r\n  }\r\n  state.updateURL();\r\n },\r\n forEach: function forEach(callback) {\r\n  var entries = getInternalParamsState(this).entries;\r\n  var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);\r\n  var index = 0;\r\n  var entry;\r\n  while (index < entries.length) {\r\n   entry = entries[index++];\r\n   boundFunction(entry.value, entry.key, this);\r\n  }\r\n },\r\n keys: function keys() {\r\n  return new URLSearchParamsIterator(this, 'keys');\r\n },\r\n values: function values() {\r\n  return new URLSearchParamsIterator(this, 'values');\r\n },\r\n entries: function entries() {\r\n  return new URLSearchParamsIterator(this, 'entries');\r\n }\r\n}, { enumerable: true });\r\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);\r\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\r\n var entries = getInternalParamsState(this).entries;\r\n var result = [];\r\n var index = 0;\r\n var entry;\r\n while (index < entries.length) {\r\n  entry = entries[index++];\r\n  result.push(serialize(entry.key) + '=' + serialize(entry.value));\r\n }\r\n return result.join('&');\r\n}, { enumerable: true });\r\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\r\n$({\r\n global: true,\r\n forced: !USE_NATIVE_URL\r\n}, { URLSearchParams: URLSearchParamsConstructor });\r\nif (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') {\r\n $({\r\n  global: true,\r\n  enumerable: true,\r\n  forced: true\r\n }, {\r\n  fetch: function fetch(input) {\r\n   var args = [input];\r\n   var init, body, headers;\r\n   if (arguments.length > 1) {\r\n    init = arguments[1];\r\n    if (isObject(init)) {\r\n     body = init.body;\r\n     if (classof(body) === URL_SEARCH_PARAMS) {\r\n      headers = init.headers ? new Headers(init.headers) : new Headers();\r\n      if (!headers.has('content-type')) {\r\n       headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\r\n      }\r\n      init = create(init, {\r\n       body: createPropertyDescriptor(0, String(body)),\r\n       headers: createPropertyDescriptor(0, headers)\r\n      });\r\n     }\r\n    }\r\n    args.push(init);\r\n   }\r\n   return $fetch.apply(this, args);\r\n  }\r\n });\r\n}\r\nmodule.exports = {\r\n URLSearchParams: URLSearchParamsConstructor,\r\n getState: getInternalParamsState\r\n};\r\n\r\n/***/ }),\r\n/* 119 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar anObject = __w_pdfjs_require__(27);\r\nvar getIteratorMethod = __w_pdfjs_require__(77);\r\nmodule.exports = function (it) {\r\n var iteratorMethod = getIteratorMethod(it);\r\n if (typeof iteratorMethod != 'function') {\r\n  throw TypeError(String(it) + ' is not iterable');\r\n }\r\n return anObject(iteratorMethod.call(it));\r\n};\r\n\r\n/***/ }),\r\n/* 120 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\n$({\r\n target: 'URL',\r\n proto: true,\r\n enumerable: true\r\n}, {\r\n toJSON: function toJSON() {\r\n  return URL.prototype.toString.call(this);\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 121 */\r\n/***/ (function(__unused_webpack_module, exports) {\r\n\r\n(function (global, factory) {\r\n  true ? factory(exports) : 0;\r\n}(this, function (exports) {\r\n 'use strict';\r\n var SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol : function (description) {\r\n  return \"Symbol(\" + description + \")\";\r\n };\r\n function noop() {\r\n }\r\n function getGlobals() {\r\n  if (typeof self !== 'undefined') {\r\n   return self;\r\n  } else if (typeof window !== 'undefined') {\r\n   return window;\r\n  } else if (typeof global !== 'undefined') {\r\n   return global;\r\n  }\r\n  return undefined;\r\n }\r\n var globals = getGlobals();\r\n function typeIsObject(x) {\r\n  return typeof x === 'object' && x !== null || typeof x === 'function';\r\n }\r\n var rethrowAssertionErrorRejection = noop;\r\n var originalPromise = Promise;\r\n var originalPromiseThen = Promise.prototype.then;\r\n var originalPromiseResolve = Promise.resolve.bind(originalPromise);\r\n var originalPromiseReject = Promise.reject.bind(originalPromise);\r\n function newPromise(executor) {\r\n  return new originalPromise(executor);\r\n }\r\n function promiseResolvedWith(value) {\r\n  return originalPromiseResolve(value);\r\n }\r\n function promiseRejectedWith(reason) {\r\n  return originalPromiseReject(reason);\r\n }\r\n function PerformPromiseThen(promise, onFulfilled, onRejected) {\r\n  return originalPromiseThen.call(promise, onFulfilled, onRejected);\r\n }\r\n function uponPromise(promise, onFulfilled, onRejected) {\r\n  PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), undefined, rethrowAssertionErrorRejection);\r\n }\r\n function uponFulfillment(promise, onFulfilled) {\r\n  uponPromise(promise, onFulfilled);\r\n }\r\n function uponRejection(promise, onRejected) {\r\n  uponPromise(promise, undefined, onRejected);\r\n }\r\n function transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) {\r\n  return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\r\n }\r\n function setPromiseIsHandledToTrue(promise) {\r\n  PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\r\n }\r\n var queueMicrotask = function () {\r\n  var globalQueueMicrotask = globals && globals.queueMicrotask;\r\n  if (typeof globalQueueMicrotask === 'function') {\r\n   return globalQueueMicrotask;\r\n  }\r\n  var resolvedPromise = promiseResolvedWith(undefined);\r\n  return function (fn) {\r\n   return PerformPromiseThen(resolvedPromise, fn);\r\n  };\r\n }();\r\n function reflectCall(F, V, args) {\r\n  if (typeof F !== 'function') {\r\n   throw new TypeError('Argument is not a function');\r\n  }\r\n  return Function.prototype.apply.call(F, V, args);\r\n }\r\n function promiseCall(F, V, args) {\r\n  try {\r\n   return promiseResolvedWith(reflectCall(F, V, args));\r\n  } catch (value) {\r\n   return promiseRejectedWith(value);\r\n  }\r\n }\r\n var QUEUE_MAX_ARRAY_SIZE = 16384;\r\n var SimpleQueue = function () {\r\n  function SimpleQueue() {\r\n   this._cursor = 0;\r\n   this._size = 0;\r\n   this._front = {\r\n    _elements: [],\r\n    _next: undefined\r\n   };\r\n   this._back = this._front;\r\n   this._cursor = 0;\r\n   this._size = 0;\r\n  }\r\n  Object.defineProperty(SimpleQueue.prototype, \"length\", {\r\n   get: function () {\r\n    return this._size;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  SimpleQueue.prototype.push = function (element) {\r\n   var oldBack = this._back;\r\n   var newBack = oldBack;\r\n   if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\r\n    newBack = {\r\n     _elements: [],\r\n     _next: undefined\r\n    };\r\n   }\r\n   oldBack._elements.push(element);\r\n   if (newBack !== oldBack) {\r\n    this._back = newBack;\r\n    oldBack._next = newBack;\r\n   }\r\n   ++this._size;\r\n  };\r\n  SimpleQueue.prototype.shift = function () {\r\n   var oldFront = this._front;\r\n   var newFront = oldFront;\r\n   var oldCursor = this._cursor;\r\n   var newCursor = oldCursor + 1;\r\n   var elements = oldFront._elements;\r\n   var element = elements[oldCursor];\r\n   if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\r\n    newFront = oldFront._next;\r\n    newCursor = 0;\r\n   }\r\n   --this._size;\r\n   this._cursor = newCursor;\r\n   if (oldFront !== newFront) {\r\n    this._front = newFront;\r\n   }\r\n   elements[oldCursor] = undefined;\r\n   return element;\r\n  };\r\n  SimpleQueue.prototype.forEach = function (callback) {\r\n   var i = this._cursor;\r\n   var node = this._front;\r\n   var elements = node._elements;\r\n   while (i !== elements.length || node._next !== undefined) {\r\n    if (i === elements.length) {\r\n     node = node._next;\r\n     elements = node._elements;\r\n     i = 0;\r\n     if (elements.length === 0) {\r\n      break;\r\n     }\r\n    }\r\n    callback(elements[i]);\r\n    ++i;\r\n   }\r\n  };\r\n  SimpleQueue.prototype.peek = function () {\r\n   var front = this._front;\r\n   var cursor = this._cursor;\r\n   return front._elements[cursor];\r\n  };\r\n  return SimpleQueue;\r\n }();\r\n function ReadableStreamReaderGenericInitialize(reader, stream) {\r\n  reader._ownerReadableStream = stream;\r\n  stream._reader = reader;\r\n  if (stream._state === 'readable') {\r\n   defaultReaderClosedPromiseInitialize(reader);\r\n  } else if (stream._state === 'closed') {\r\n   defaultReaderClosedPromiseInitializeAsResolved(reader);\r\n  } else {\r\n   defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\r\n  }\r\n }\r\n function ReadableStreamReaderGenericCancel(reader, reason) {\r\n  var stream = reader._ownerReadableStream;\r\n  return ReadableStreamCancel(stream, reason);\r\n }\r\n function ReadableStreamReaderGenericRelease(reader) {\r\n  if (reader._ownerReadableStream._state === 'readable') {\r\n   defaultReaderClosedPromiseReject(reader, new TypeError(\"Reader was released and can no longer be used to monitor the stream's closedness\"));\r\n  } else {\r\n   defaultReaderClosedPromiseResetToRejected(reader, new TypeError(\"Reader was released and can no longer be used to monitor the stream's closedness\"));\r\n  }\r\n  reader._ownerReadableStream._reader = undefined;\r\n  reader._ownerReadableStream = undefined;\r\n }\r\n function readerLockException(name) {\r\n  return new TypeError('Cannot ' + name + ' a stream using a released reader');\r\n }\r\n function defaultReaderClosedPromiseInitialize(reader) {\r\n  reader._closedPromise = newPromise(function (resolve, reject) {\r\n   reader._closedPromise_resolve = resolve;\r\n   reader._closedPromise_reject = reject;\r\n  });\r\n }\r\n function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {\r\n  defaultReaderClosedPromiseInitialize(reader);\r\n  defaultReaderClosedPromiseReject(reader, reason);\r\n }\r\n function defaultReaderClosedPromiseInitializeAsResolved(reader) {\r\n  defaultReaderClosedPromiseInitialize(reader);\r\n  defaultReaderClosedPromiseResolve(reader);\r\n }\r\n function defaultReaderClosedPromiseReject(reader, reason) {\r\n  if (reader._closedPromise_reject === undefined) {\r\n   return;\r\n  }\r\n  setPromiseIsHandledToTrue(reader._closedPromise);\r\n  reader._closedPromise_reject(reason);\r\n  reader._closedPromise_resolve = undefined;\r\n  reader._closedPromise_reject = undefined;\r\n }\r\n function defaultReaderClosedPromiseResetToRejected(reader, reason) {\r\n  defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\r\n }\r\n function defaultReaderClosedPromiseResolve(reader) {\r\n  if (reader._closedPromise_resolve === undefined) {\r\n   return;\r\n  }\r\n  reader._closedPromise_resolve(undefined);\r\n  reader._closedPromise_resolve = undefined;\r\n  reader._closedPromise_reject = undefined;\r\n }\r\n var AbortSteps = SymbolPolyfill('[[AbortSteps]]');\r\n var ErrorSteps = SymbolPolyfill('[[ErrorSteps]]');\r\n var CancelSteps = SymbolPolyfill('[[CancelSteps]]');\r\n var PullSteps = SymbolPolyfill('[[PullSteps]]');\r\n var NumberIsFinite = Number.isFinite || function (x) {\r\n  return typeof x === 'number' && isFinite(x);\r\n };\r\n var MathTrunc = Math.trunc || function (v) {\r\n  return v < 0 ? Math.ceil(v) : Math.floor(v);\r\n };\r\n function isDictionary(x) {\r\n  return typeof x === 'object' || typeof x === 'function';\r\n }\r\n function assertDictionary(obj, context) {\r\n  if (obj !== undefined && !isDictionary(obj)) {\r\n   throw new TypeError(context + \" is not an object.\");\r\n  }\r\n }\r\n function assertFunction(x, context) {\r\n  if (typeof x !== 'function') {\r\n   throw new TypeError(context + \" is not a function.\");\r\n  }\r\n }\r\n function isObject(x) {\r\n  return typeof x === 'object' && x !== null || typeof x === 'function';\r\n }\r\n function assertObject(x, context) {\r\n  if (!isObject(x)) {\r\n   throw new TypeError(context + \" is not an object.\");\r\n  }\r\n }\r\n function assertRequiredArgument(x, position, context) {\r\n  if (x === undefined) {\r\n   throw new TypeError(\"Parameter \" + position + \" is required in '\" + context + \"'.\");\r\n  }\r\n }\r\n function assertRequiredField(x, field, context) {\r\n  if (x === undefined) {\r\n   throw new TypeError(field + \" is required in '\" + context + \"'.\");\r\n  }\r\n }\r\n function convertUnrestrictedDouble(value) {\r\n  return Number(value);\r\n }\r\n function censorNegativeZero(x) {\r\n  return x === 0 ? 0 : x;\r\n }\r\n function integerPart(x) {\r\n  return censorNegativeZero(MathTrunc(x));\r\n }\r\n function convertUnsignedLongLongWithEnforceRange(value, context) {\r\n  var lowerBound = 0;\r\n  var upperBound = Number.MAX_SAFE_INTEGER;\r\n  var x = Number(value);\r\n  x = censorNegativeZero(x);\r\n  if (!NumberIsFinite(x)) {\r\n   throw new TypeError(context + \" is not a finite number\");\r\n  }\r\n  x = integerPart(x);\r\n  if (x < lowerBound || x > upperBound) {\r\n   throw new TypeError(context + \" is outside the accepted range of \" + lowerBound + \" to \" + upperBound + \", inclusive\");\r\n  }\r\n  if (!NumberIsFinite(x) || x === 0) {\r\n   return 0;\r\n  }\r\n  return x;\r\n }\r\n function assertReadableStream(x, context) {\r\n  if (!IsReadableStream(x)) {\r\n   throw new TypeError(context + \" is not a ReadableStream.\");\r\n  }\r\n }\r\n function AcquireReadableStreamDefaultReader(stream) {\r\n  return new ReadableStreamDefaultReader(stream);\r\n }\r\n function ReadableStreamAddReadRequest(stream, readRequest) {\r\n  stream._reader._readRequests.push(readRequest);\r\n }\r\n function ReadableStreamFulfillReadRequest(stream, chunk, done) {\r\n  var reader = stream._reader;\r\n  var readRequest = reader._readRequests.shift();\r\n  if (done) {\r\n   readRequest._closeSteps();\r\n  } else {\r\n   readRequest._chunkSteps(chunk);\r\n  }\r\n }\r\n function ReadableStreamGetNumReadRequests(stream) {\r\n  return stream._reader._readRequests.length;\r\n }\r\n function ReadableStreamHasDefaultReader(stream) {\r\n  var reader = stream._reader;\r\n  if (reader === undefined) {\r\n   return false;\r\n  }\r\n  if (!IsReadableStreamDefaultReader(reader)) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n var ReadableStreamDefaultReader = function () {\r\n  function ReadableStreamDefaultReader(stream) {\r\n   assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\r\n   assertReadableStream(stream, 'First parameter');\r\n   if (IsReadableStreamLocked(stream)) {\r\n    throw new TypeError('This stream has already been locked for exclusive reading by another reader');\r\n   }\r\n   ReadableStreamReaderGenericInitialize(this, stream);\r\n   this._readRequests = new SimpleQueue();\r\n  }\r\n  Object.defineProperty(ReadableStreamDefaultReader.prototype, \"closed\", {\r\n   get: function () {\r\n    if (!IsReadableStreamDefaultReader(this)) {\r\n     return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\r\n    }\r\n    return this._closedPromise;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  ReadableStreamDefaultReader.prototype.cancel = function (reason) {\r\n   if (reason === void 0) {\r\n    reason = undefined;\r\n   }\r\n   if (!IsReadableStreamDefaultReader(this)) {\r\n    return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\r\n   }\r\n   if (this._ownerReadableStream === undefined) {\r\n    return promiseRejectedWith(readerLockException('cancel'));\r\n   }\r\n   return ReadableStreamReaderGenericCancel(this, reason);\r\n  };\r\n  ReadableStreamDefaultReader.prototype.read = function () {\r\n   if (!IsReadableStreamDefaultReader(this)) {\r\n    return promiseRejectedWith(defaultReaderBrandCheckException('read'));\r\n   }\r\n   if (this._ownerReadableStream === undefined) {\r\n    return promiseRejectedWith(readerLockException('read from'));\r\n   }\r\n   var resolvePromise;\r\n   var rejectPromise;\r\n   var promise = newPromise(function (resolve, reject) {\r\n    resolvePromise = resolve;\r\n    rejectPromise = reject;\r\n   });\r\n   var readRequest = {\r\n    _chunkSteps: function (chunk) {\r\n     return resolvePromise({\r\n      value: chunk,\r\n      done: false\r\n     });\r\n    },\r\n    _closeSteps: function () {\r\n     return resolvePromise({\r\n      value: undefined,\r\n      done: true\r\n     });\r\n    },\r\n    _errorSteps: function (e) {\r\n     return rejectPromise(e);\r\n    }\r\n   };\r\n   ReadableStreamDefaultReaderRead(this, readRequest);\r\n   return promise;\r\n  };\r\n  ReadableStreamDefaultReader.prototype.releaseLock = function () {\r\n   if (!IsReadableStreamDefaultReader(this)) {\r\n    throw defaultReaderBrandCheckException('releaseLock');\r\n   }\r\n   if (this._ownerReadableStream === undefined) {\r\n    return;\r\n   }\r\n   if (this._readRequests.length > 0) {\r\n    throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\r\n   }\r\n   ReadableStreamReaderGenericRelease(this);\r\n  };\r\n  return ReadableStreamDefaultReader;\r\n }();\r\n Object.defineProperties(ReadableStreamDefaultReader.prototype, {\r\n  cancel: { enumerable: true },\r\n  read: { enumerable: true },\r\n  releaseLock: { enumerable: true },\r\n  closed: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ReadableStreamDefaultReader.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ReadableStreamDefaultReader',\r\n   configurable: true\r\n  });\r\n }\r\n function IsReadableStreamDefaultReader(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function ReadableStreamDefaultReaderRead(reader, readRequest) {\r\n  var stream = reader._ownerReadableStream;\r\n  stream._disturbed = true;\r\n  if (stream._state === 'closed') {\r\n   readRequest._closeSteps();\r\n  } else if (stream._state === 'errored') {\r\n   readRequest._errorSteps(stream._storedError);\r\n  } else {\r\n   stream._readableStreamController[PullSteps](readRequest);\r\n  }\r\n }\r\n function defaultReaderBrandCheckException(name) {\r\n  return new TypeError(\"ReadableStreamDefaultReader.prototype.\" + name + \" can only be used on a ReadableStreamDefaultReader\");\r\n }\r\n var _a;\r\n var AsyncIteratorPrototype;\r\n if (typeof SymbolPolyfill.asyncIterator === 'symbol') {\r\n  AsyncIteratorPrototype = (_a = {}, _a[SymbolPolyfill.asyncIterator] = function () {\r\n   return this;\r\n  }, _a);\r\n  Object.defineProperty(AsyncIteratorPrototype, SymbolPolyfill.asyncIterator, { enumerable: false });\r\n }\r\n var ReadableStreamAsyncIteratorImpl = function () {\r\n  function ReadableStreamAsyncIteratorImpl(reader, preventCancel) {\r\n   this._ongoingPromise = undefined;\r\n   this._isFinished = false;\r\n   this._reader = reader;\r\n   this._preventCancel = preventCancel;\r\n  }\r\n  ReadableStreamAsyncIteratorImpl.prototype.next = function () {\r\n   var _this = this;\r\n   var nextSteps = function () {\r\n    return _this._nextSteps();\r\n   };\r\n   this._ongoingPromise = this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) : nextSteps();\r\n   return this._ongoingPromise;\r\n  };\r\n  ReadableStreamAsyncIteratorImpl.prototype.return = function (value) {\r\n   var _this = this;\r\n   var returnSteps = function () {\r\n    return _this._returnSteps(value);\r\n   };\r\n   return this._ongoingPromise ? transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) : returnSteps();\r\n  };\r\n  ReadableStreamAsyncIteratorImpl.prototype._nextSteps = function () {\r\n   var _this = this;\r\n   if (this._isFinished) {\r\n    return Promise.resolve({\r\n     value: undefined,\r\n     done: true\r\n    });\r\n   }\r\n   var reader = this._reader;\r\n   if (reader._ownerReadableStream === undefined) {\r\n    return promiseRejectedWith(readerLockException('iterate'));\r\n   }\r\n   var resolvePromise;\r\n   var rejectPromise;\r\n   var promise = newPromise(function (resolve, reject) {\r\n    resolvePromise = resolve;\r\n    rejectPromise = reject;\r\n   });\r\n   var readRequest = {\r\n    _chunkSteps: function (chunk) {\r\n     _this._ongoingPromise = undefined;\r\n     queueMicrotask(function () {\r\n      return resolvePromise({\r\n       value: chunk,\r\n       done: false\r\n      });\r\n     });\r\n    },\r\n    _closeSteps: function () {\r\n     _this._ongoingPromise = undefined;\r\n     _this._isFinished = true;\r\n     ReadableStreamReaderGenericRelease(reader);\r\n     resolvePromise({\r\n      value: undefined,\r\n      done: true\r\n     });\r\n    },\r\n    _errorSteps: function (reason) {\r\n     _this._ongoingPromise = undefined;\r\n     _this._isFinished = true;\r\n     ReadableStreamReaderGenericRelease(reader);\r\n     rejectPromise(reason);\r\n    }\r\n   };\r\n   ReadableStreamDefaultReaderRead(reader, readRequest);\r\n   return promise;\r\n  };\r\n  ReadableStreamAsyncIteratorImpl.prototype._returnSteps = function (value) {\r\n   if (this._isFinished) {\r\n    return Promise.resolve({\r\n     value: value,\r\n     done: true\r\n    });\r\n   }\r\n   this._isFinished = true;\r\n   var reader = this._reader;\r\n   if (reader._ownerReadableStream === undefined) {\r\n    return promiseRejectedWith(readerLockException('finish iterating'));\r\n   }\r\n   if (!this._preventCancel) {\r\n    var result = ReadableStreamReaderGenericCancel(reader, value);\r\n    ReadableStreamReaderGenericRelease(reader);\r\n    return transformPromiseWith(result, function () {\r\n     return {\r\n      value: value,\r\n      done: true\r\n     };\r\n    });\r\n   }\r\n   ReadableStreamReaderGenericRelease(reader);\r\n   return promiseResolvedWith({\r\n    value: value,\r\n    done: true\r\n   });\r\n  };\r\n  return ReadableStreamAsyncIteratorImpl;\r\n }();\r\n var ReadableStreamAsyncIteratorPrototype = {\r\n  next: function () {\r\n   if (!IsReadableStreamAsyncIterator(this)) {\r\n    return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\r\n   }\r\n   return this._asyncIteratorImpl.next();\r\n  },\r\n  return: function (value) {\r\n   if (!IsReadableStreamAsyncIterator(this)) {\r\n    return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\r\n   }\r\n   return this._asyncIteratorImpl.return(value);\r\n  }\r\n };\r\n if (AsyncIteratorPrototype !== undefined) {\r\n  Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\r\n }\r\n function AcquireReadableStreamAsyncIterator(stream, preventCancel) {\r\n  var reader = AcquireReadableStreamDefaultReader(stream);\r\n  var impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\r\n  var iterator = Object.create(ReadableStreamAsyncIteratorPrototype);\r\n  iterator._asyncIteratorImpl = impl;\r\n  return iterator;\r\n }\r\n function IsReadableStreamAsyncIterator(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function streamAsyncIteratorBrandCheckException(name) {\r\n  return new TypeError(\"ReadableStreamAsyncIterator.\" + name + \" can only be used on a ReadableSteamAsyncIterator\");\r\n }\r\n var NumberIsNaN = Number.isNaN || function (x) {\r\n  return x !== x;\r\n };\r\n function IsFiniteNonNegativeNumber(v) {\r\n  if (!IsNonNegativeNumber(v)) {\r\n   return false;\r\n  }\r\n  if (v === Infinity) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function IsNonNegativeNumber(v) {\r\n  if (typeof v !== 'number') {\r\n   return false;\r\n  }\r\n  if (NumberIsNaN(v)) {\r\n   return false;\r\n  }\r\n  if (v < 0) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function DequeueValue(container) {\r\n  var pair = container._queue.shift();\r\n  container._queueTotalSize -= pair.size;\r\n  if (container._queueTotalSize < 0) {\r\n   container._queueTotalSize = 0;\r\n  }\r\n  return pair.value;\r\n }\r\n function EnqueueValueWithSize(container, value, size) {\r\n  size = Number(size);\r\n  if (!IsFiniteNonNegativeNumber(size)) {\r\n   throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\r\n  }\r\n  container._queue.push({\r\n   value: value,\r\n   size: size\r\n  });\r\n  container._queueTotalSize += size;\r\n }\r\n function PeekQueueValue(container) {\r\n  var pair = container._queue.peek();\r\n  return pair.value;\r\n }\r\n function ResetQueue(container) {\r\n  container._queue = new SimpleQueue();\r\n  container._queueTotalSize = 0;\r\n }\r\n function CreateArrayFromList(elements) {\r\n  return elements.slice();\r\n }\r\n function CopyDataBlockBytes(dest, destOffset, src, srcOffset, n) {\r\n  new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\r\n }\r\n function TransferArrayBuffer(O) {\r\n  return O;\r\n }\r\n function IsDetachedBuffer(O) {\r\n  return false;\r\n }\r\n var ReadableStreamBYOBRequest = function () {\r\n  function ReadableStreamBYOBRequest() {\r\n   throw new TypeError('Illegal constructor');\r\n  }\r\n  Object.defineProperty(ReadableStreamBYOBRequest.prototype, \"view\", {\r\n   get: function () {\r\n    if (!IsReadableStreamBYOBRequest(this)) {\r\n     throw byobRequestBrandCheckException('view');\r\n    }\r\n    return this._view;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  ReadableStreamBYOBRequest.prototype.respond = function (bytesWritten) {\r\n   if (!IsReadableStreamBYOBRequest(this)) {\r\n    throw byobRequestBrandCheckException('respond');\r\n   }\r\n   assertRequiredArgument(bytesWritten, 1, 'respond');\r\n   bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\r\n   if (this._associatedReadableByteStreamController === undefined) {\r\n    throw new TypeError('This BYOB request has been invalidated');\r\n   }\r\n   if (IsDetachedBuffer(this._view.buffer));\r\n   ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\r\n  };\r\n  ReadableStreamBYOBRequest.prototype.respondWithNewView = function (view) {\r\n   if (!IsReadableStreamBYOBRequest(this)) {\r\n    throw byobRequestBrandCheckException('respondWithNewView');\r\n   }\r\n   assertRequiredArgument(view, 1, 'respondWithNewView');\r\n   if (!ArrayBuffer.isView(view)) {\r\n    throw new TypeError('You can only respond with array buffer views');\r\n   }\r\n   if (view.byteLength === 0) {\r\n    throw new TypeError('chunk must have non-zero byteLength');\r\n   }\r\n   if (view.buffer.byteLength === 0) {\r\n    throw new TypeError(\"chunk's buffer must have non-zero byteLength\");\r\n   }\r\n   if (this._associatedReadableByteStreamController === undefined) {\r\n    throw new TypeError('This BYOB request has been invalidated');\r\n   }\r\n   ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\r\n  };\r\n  return ReadableStreamBYOBRequest;\r\n }();\r\n Object.defineProperties(ReadableStreamBYOBRequest.prototype, {\r\n  respond: { enumerable: true },\r\n  respondWithNewView: { enumerable: true },\r\n  view: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ReadableStreamBYOBRequest.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ReadableStreamBYOBRequest',\r\n   configurable: true\r\n  });\r\n }\r\n var ReadableByteStreamController = function () {\r\n  function ReadableByteStreamController() {\r\n   throw new TypeError('Illegal constructor');\r\n  }\r\n  Object.defineProperty(ReadableByteStreamController.prototype, \"byobRequest\", {\r\n   get: function () {\r\n    if (!IsReadableByteStreamController(this)) {\r\n     throw byteStreamControllerBrandCheckException('byobRequest');\r\n    }\r\n    if (this._byobRequest === null && this._pendingPullIntos.length > 0) {\r\n     var firstDescriptor = this._pendingPullIntos.peek();\r\n     var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);\r\n     var byobRequest = Object.create(ReadableStreamBYOBRequest.prototype);\r\n     SetUpReadableStreamBYOBRequest(byobRequest, this, view);\r\n     this._byobRequest = byobRequest;\r\n    }\r\n    return this._byobRequest;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  Object.defineProperty(ReadableByteStreamController.prototype, \"desiredSize\", {\r\n   get: function () {\r\n    if (!IsReadableByteStreamController(this)) {\r\n     throw byteStreamControllerBrandCheckException('desiredSize');\r\n    }\r\n    return ReadableByteStreamControllerGetDesiredSize(this);\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  ReadableByteStreamController.prototype.close = function () {\r\n   if (!IsReadableByteStreamController(this)) {\r\n    throw byteStreamControllerBrandCheckException('close');\r\n   }\r\n   if (this._closeRequested) {\r\n    throw new TypeError('The stream has already been closed; do not close it again!');\r\n   }\r\n   var state = this._controlledReadableByteStream._state;\r\n   if (state !== 'readable') {\r\n    throw new TypeError(\"The stream (in \" + state + \" state) is not in the readable state and cannot be closed\");\r\n   }\r\n   ReadableByteStreamControllerClose(this);\r\n  };\r\n  ReadableByteStreamController.prototype.enqueue = function (chunk) {\r\n   if (!IsReadableByteStreamController(this)) {\r\n    throw byteStreamControllerBrandCheckException('enqueue');\r\n   }\r\n   assertRequiredArgument(chunk, 1, 'enqueue');\r\n   if (!ArrayBuffer.isView(chunk)) {\r\n    throw new TypeError('chunk must be an array buffer view');\r\n   }\r\n   if (chunk.byteLength === 0) {\r\n    throw new TypeError('chunk must have non-zero byteLength');\r\n   }\r\n   if (chunk.buffer.byteLength === 0) {\r\n    throw new TypeError(\"chunk's buffer must have non-zero byteLength\");\r\n   }\r\n   if (this._closeRequested) {\r\n    throw new TypeError('stream is closed or draining');\r\n   }\r\n   var state = this._controlledReadableByteStream._state;\r\n   if (state !== 'readable') {\r\n    throw new TypeError(\"The stream (in \" + state + \" state) is not in the readable state and cannot be enqueued to\");\r\n   }\r\n   ReadableByteStreamControllerEnqueue(this, chunk);\r\n  };\r\n  ReadableByteStreamController.prototype.error = function (e) {\r\n   if (e === void 0) {\r\n    e = undefined;\r\n   }\r\n   if (!IsReadableByteStreamController(this)) {\r\n    throw byteStreamControllerBrandCheckException('error');\r\n   }\r\n   ReadableByteStreamControllerError(this, e);\r\n  };\r\n  ReadableByteStreamController.prototype[CancelSteps] = function (reason) {\r\n   if (this._pendingPullIntos.length > 0) {\r\n    var firstDescriptor = this._pendingPullIntos.peek();\r\n    firstDescriptor.bytesFilled = 0;\r\n   }\r\n   ResetQueue(this);\r\n   var result = this._cancelAlgorithm(reason);\r\n   ReadableByteStreamControllerClearAlgorithms(this);\r\n   return result;\r\n  };\r\n  ReadableByteStreamController.prototype[PullSteps] = function (readRequest) {\r\n   var stream = this._controlledReadableByteStream;\r\n   if (this._queueTotalSize > 0) {\r\n    var entry = this._queue.shift();\r\n    this._queueTotalSize -= entry.byteLength;\r\n    ReadableByteStreamControllerHandleQueueDrain(this);\r\n    var view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\r\n    readRequest._chunkSteps(view);\r\n    return;\r\n   }\r\n   var autoAllocateChunkSize = this._autoAllocateChunkSize;\r\n   if (autoAllocateChunkSize !== undefined) {\r\n    var buffer = void 0;\r\n    try {\r\n     buffer = new ArrayBuffer(autoAllocateChunkSize);\r\n    } catch (bufferE) {\r\n     readRequest._errorSteps(bufferE);\r\n     return;\r\n    }\r\n    var pullIntoDescriptor = {\r\n     buffer: buffer,\r\n     byteOffset: 0,\r\n     byteLength: autoAllocateChunkSize,\r\n     bytesFilled: 0,\r\n     elementSize: 1,\r\n     viewConstructor: Uint8Array,\r\n     readerType: 'default'\r\n    };\r\n    this._pendingPullIntos.push(pullIntoDescriptor);\r\n   }\r\n   ReadableStreamAddReadRequest(stream, readRequest);\r\n   ReadableByteStreamControllerCallPullIfNeeded(this);\r\n  };\r\n  return ReadableByteStreamController;\r\n }();\r\n Object.defineProperties(ReadableByteStreamController.prototype, {\r\n  close: { enumerable: true },\r\n  enqueue: { enumerable: true },\r\n  error: { enumerable: true },\r\n  byobRequest: { enumerable: true },\r\n  desiredSize: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ReadableByteStreamController.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ReadableByteStreamController',\r\n   configurable: true\r\n  });\r\n }\r\n function IsReadableByteStreamController(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function IsReadableStreamBYOBRequest(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function ReadableByteStreamControllerCallPullIfNeeded(controller) {\r\n  var shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\r\n  if (!shouldPull) {\r\n   return;\r\n  }\r\n  if (controller._pulling) {\r\n   controller._pullAgain = true;\r\n   return;\r\n  }\r\n  controller._pulling = true;\r\n  var pullPromise = controller._pullAlgorithm();\r\n  uponPromise(pullPromise, function () {\r\n   controller._pulling = false;\r\n   if (controller._pullAgain) {\r\n    controller._pullAgain = false;\r\n    ReadableByteStreamControllerCallPullIfNeeded(controller);\r\n   }\r\n  }, function (e) {\r\n   ReadableByteStreamControllerError(controller, e);\r\n  });\r\n }\r\n function ReadableByteStreamControllerClearPendingPullIntos(controller) {\r\n  ReadableByteStreamControllerInvalidateBYOBRequest(controller);\r\n  controller._pendingPullIntos = new SimpleQueue();\r\n }\r\n function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {\r\n  var done = false;\r\n  if (stream._state === 'closed') {\r\n   done = true;\r\n  }\r\n  var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\r\n  if (pullIntoDescriptor.readerType === 'default') {\r\n   ReadableStreamFulfillReadRequest(stream, filledView, done);\r\n  } else {\r\n   ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\r\n  }\r\n }\r\n function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {\r\n  var bytesFilled = pullIntoDescriptor.bytesFilled;\r\n  var elementSize = pullIntoDescriptor.elementSize;\r\n  return new pullIntoDescriptor.viewConstructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);\r\n }\r\n function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {\r\n  controller._queue.push({\r\n   buffer: buffer,\r\n   byteOffset: byteOffset,\r\n   byteLength: byteLength\r\n  });\r\n  controller._queueTotalSize += byteLength;\r\n }\r\n function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {\r\n  var elementSize = pullIntoDescriptor.elementSize;\r\n  var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\r\n  var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\r\n  var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\r\n  var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\r\n  var totalBytesToCopyRemaining = maxBytesToCopy;\r\n  var ready = false;\r\n  if (maxAlignedBytes > currentAlignedBytes) {\r\n   totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\r\n   ready = true;\r\n  }\r\n  var queue = controller._queue;\r\n  while (totalBytesToCopyRemaining > 0) {\r\n   var headOfQueue = queue.peek();\r\n   var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\r\n   var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\r\n   CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\r\n   if (headOfQueue.byteLength === bytesToCopy) {\r\n    queue.shift();\r\n   } else {\r\n    headOfQueue.byteOffset += bytesToCopy;\r\n    headOfQueue.byteLength -= bytesToCopy;\r\n   }\r\n   controller._queueTotalSize -= bytesToCopy;\r\n   ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\r\n   totalBytesToCopyRemaining -= bytesToCopy;\r\n  }\r\n  return ready;\r\n }\r\n function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {\r\n  ReadableByteStreamControllerInvalidateBYOBRequest(controller);\r\n  pullIntoDescriptor.bytesFilled += size;\r\n }\r\n function ReadableByteStreamControllerHandleQueueDrain(controller) {\r\n  if (controller._queueTotalSize === 0 && controller._closeRequested) {\r\n   ReadableByteStreamControllerClearAlgorithms(controller);\r\n   ReadableStreamClose(controller._controlledReadableByteStream);\r\n  } else {\r\n   ReadableByteStreamControllerCallPullIfNeeded(controller);\r\n  }\r\n }\r\n function ReadableByteStreamControllerInvalidateBYOBRequest(controller) {\r\n  if (controller._byobRequest === null) {\r\n   return;\r\n  }\r\n  controller._byobRequest._associatedReadableByteStreamController = undefined;\r\n  controller._byobRequest._view = null;\r\n  controller._byobRequest = null;\r\n }\r\n function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {\r\n  while (controller._pendingPullIntos.length > 0) {\r\n   if (controller._queueTotalSize === 0) {\r\n    return;\r\n   }\r\n   var pullIntoDescriptor = controller._pendingPullIntos.peek();\r\n   if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\r\n    ReadableByteStreamControllerShiftPendingPullInto(controller);\r\n    ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\r\n   }\r\n  }\r\n }\r\n function ReadableByteStreamControllerPullInto(controller, view, readIntoRequest) {\r\n  var stream = controller._controlledReadableByteStream;\r\n  var elementSize = 1;\r\n  if (view.constructor !== DataView) {\r\n   elementSize = view.constructor.BYTES_PER_ELEMENT;\r\n  }\r\n  var ctor = view.constructor;\r\n  var buffer = TransferArrayBuffer(view.buffer);\r\n  var pullIntoDescriptor = {\r\n   buffer: buffer,\r\n   byteOffset: view.byteOffset,\r\n   byteLength: view.byteLength,\r\n   bytesFilled: 0,\r\n   elementSize: elementSize,\r\n   viewConstructor: ctor,\r\n   readerType: 'byob'\r\n  };\r\n  if (controller._pendingPullIntos.length > 0) {\r\n   controller._pendingPullIntos.push(pullIntoDescriptor);\r\n   ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\r\n   return;\r\n  }\r\n  if (stream._state === 'closed') {\r\n   var emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\r\n   readIntoRequest._closeSteps(emptyView);\r\n   return;\r\n  }\r\n  if (controller._queueTotalSize > 0) {\r\n   if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\r\n    var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\r\n    ReadableByteStreamControllerHandleQueueDrain(controller);\r\n    readIntoRequest._chunkSteps(filledView);\r\n    return;\r\n   }\r\n   if (controller._closeRequested) {\r\n    var e = new TypeError('Insufficient bytes to fill elements in the given buffer');\r\n    ReadableByteStreamControllerError(controller, e);\r\n    readIntoRequest._errorSteps(e);\r\n    return;\r\n   }\r\n  }\r\n  controller._pendingPullIntos.push(pullIntoDescriptor);\r\n  ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\r\n  ReadableByteStreamControllerCallPullIfNeeded(controller);\r\n }\r\n function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {\r\n  firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\r\n  var stream = controller._controlledReadableByteStream;\r\n  if (ReadableStreamHasBYOBReader(stream)) {\r\n   while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\r\n    var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\r\n    ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\r\n   }\r\n  }\r\n }\r\n function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {\r\n  if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) {\r\n   throw new RangeError('bytesWritten out of range');\r\n  }\r\n  ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\r\n  if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\r\n   return;\r\n  }\r\n  ReadableByteStreamControllerShiftPendingPullInto(controller);\r\n  var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\r\n  if (remainderSize > 0) {\r\n   var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\r\n   var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end);\r\n   ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\r\n  }\r\n  pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);\r\n  pullIntoDescriptor.bytesFilled -= remainderSize;\r\n  ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\r\n  ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\r\n }\r\n function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {\r\n  var firstDescriptor = controller._pendingPullIntos.peek();\r\n  var state = controller._controlledReadableByteStream._state;\r\n  if (state === 'closed') {\r\n   if (bytesWritten !== 0) {\r\n    throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\r\n   }\r\n   ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\r\n  } else {\r\n   ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\r\n  }\r\n  ReadableByteStreamControllerCallPullIfNeeded(controller);\r\n }\r\n function ReadableByteStreamControllerShiftPendingPullInto(controller) {\r\n  var descriptor = controller._pendingPullIntos.shift();\r\n  ReadableByteStreamControllerInvalidateBYOBRequest(controller);\r\n  return descriptor;\r\n }\r\n function ReadableByteStreamControllerShouldCallPull(controller) {\r\n  var stream = controller._controlledReadableByteStream;\r\n  if (stream._state !== 'readable') {\r\n   return false;\r\n  }\r\n  if (controller._closeRequested) {\r\n   return false;\r\n  }\r\n  if (!controller._started) {\r\n   return false;\r\n  }\r\n  if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\r\n   return true;\r\n  }\r\n  if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\r\n   return true;\r\n  }\r\n  var desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\r\n  if (desiredSize > 0) {\r\n   return true;\r\n  }\r\n  return false;\r\n }\r\n function ReadableByteStreamControllerClearAlgorithms(controller) {\r\n  controller._pullAlgorithm = undefined;\r\n  controller._cancelAlgorithm = undefined;\r\n }\r\n function ReadableByteStreamControllerClose(controller) {\r\n  var stream = controller._controlledReadableByteStream;\r\n  if (controller._closeRequested || stream._state !== 'readable') {\r\n   return;\r\n  }\r\n  if (controller._queueTotalSize > 0) {\r\n   controller._closeRequested = true;\r\n   return;\r\n  }\r\n  if (controller._pendingPullIntos.length > 0) {\r\n   var firstPendingPullInto = controller._pendingPullIntos.peek();\r\n   if (firstPendingPullInto.bytesFilled > 0) {\r\n    var e = new TypeError('Insufficient bytes to fill elements in the given buffer');\r\n    ReadableByteStreamControllerError(controller, e);\r\n    throw e;\r\n   }\r\n  }\r\n  ReadableByteStreamControllerClearAlgorithms(controller);\r\n  ReadableStreamClose(stream);\r\n }\r\n function ReadableByteStreamControllerEnqueue(controller, chunk) {\r\n  var stream = controller._controlledReadableByteStream;\r\n  if (controller._closeRequested || stream._state !== 'readable') {\r\n   return;\r\n  }\r\n  var buffer = chunk.buffer;\r\n  var byteOffset = chunk.byteOffset;\r\n  var byteLength = chunk.byteLength;\r\n  var transferredBuffer = TransferArrayBuffer(buffer);\r\n  if (ReadableStreamHasDefaultReader(stream)) {\r\n   if (ReadableStreamGetNumReadRequests(stream) === 0) {\r\n    ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\r\n   } else {\r\n    var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\r\n    ReadableStreamFulfillReadRequest(stream, transferredView, false);\r\n   }\r\n  } else if (ReadableStreamHasBYOBReader(stream)) {\r\n   ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\r\n   ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\r\n  } else {\r\n   ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\r\n  }\r\n  ReadableByteStreamControllerCallPullIfNeeded(controller);\r\n }\r\n function ReadableByteStreamControllerError(controller, e) {\r\n  var stream = controller._controlledReadableByteStream;\r\n  if (stream._state !== 'readable') {\r\n   return;\r\n  }\r\n  ReadableByteStreamControllerClearPendingPullIntos(controller);\r\n  ResetQueue(controller);\r\n  ReadableByteStreamControllerClearAlgorithms(controller);\r\n  ReadableStreamError(stream, e);\r\n }\r\n function ReadableByteStreamControllerGetDesiredSize(controller) {\r\n  var state = controller._controlledReadableByteStream._state;\r\n  if (state === 'errored') {\r\n   return null;\r\n  }\r\n  if (state === 'closed') {\r\n   return 0;\r\n  }\r\n  return controller._strategyHWM - controller._queueTotalSize;\r\n }\r\n function ReadableByteStreamControllerRespond(controller, bytesWritten) {\r\n  bytesWritten = Number(bytesWritten);\r\n  if (!IsFiniteNonNegativeNumber(bytesWritten)) {\r\n   throw new RangeError('bytesWritten must be a finite');\r\n  }\r\n  ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\r\n }\r\n function ReadableByteStreamControllerRespondWithNewView(controller, view) {\r\n  var firstDescriptor = controller._pendingPullIntos.peek();\r\n  if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\r\n   throw new RangeError('The region specified by view does not match byobRequest');\r\n  }\r\n  if (firstDescriptor.byteLength !== view.byteLength) {\r\n   throw new RangeError('The buffer of view has different capacity than byobRequest');\r\n  }\r\n  firstDescriptor.buffer = view.buffer;\r\n  ReadableByteStreamControllerRespondInternal(controller, view.byteLength);\r\n }\r\n function SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) {\r\n  controller._controlledReadableByteStream = stream;\r\n  controller._pullAgain = false;\r\n  controller._pulling = false;\r\n  controller._byobRequest = null;\r\n  controller._queue = controller._queueTotalSize = undefined;\r\n  ResetQueue(controller);\r\n  controller._closeRequested = false;\r\n  controller._started = false;\r\n  controller._strategyHWM = highWaterMark;\r\n  controller._pullAlgorithm = pullAlgorithm;\r\n  controller._cancelAlgorithm = cancelAlgorithm;\r\n  controller._autoAllocateChunkSize = autoAllocateChunkSize;\r\n  controller._pendingPullIntos = new SimpleQueue();\r\n  stream._readableStreamController = controller;\r\n  var startResult = startAlgorithm();\r\n  uponPromise(promiseResolvedWith(startResult), function () {\r\n   controller._started = true;\r\n   ReadableByteStreamControllerCallPullIfNeeded(controller);\r\n  }, function (r) {\r\n   ReadableByteStreamControllerError(controller, r);\r\n  });\r\n }\r\n function SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) {\r\n  var controller = Object.create(ReadableByteStreamController.prototype);\r\n  var startAlgorithm = function () {\r\n   return undefined;\r\n  };\r\n  var pullAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  var cancelAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  if (underlyingByteSource.start !== undefined) {\r\n   startAlgorithm = function () {\r\n    return underlyingByteSource.start(controller);\r\n   };\r\n  }\r\n  if (underlyingByteSource.pull !== undefined) {\r\n   pullAlgorithm = function () {\r\n    return underlyingByteSource.pull(controller);\r\n   };\r\n  }\r\n  if (underlyingByteSource.cancel !== undefined) {\r\n   cancelAlgorithm = function (reason) {\r\n    return underlyingByteSource.cancel(reason);\r\n   };\r\n  }\r\n  var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\r\n  SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize);\r\n }\r\n function SetUpReadableStreamBYOBRequest(request, controller, view) {\r\n  request._associatedReadableByteStreamController = controller;\r\n  request._view = view;\r\n }\r\n function byobRequestBrandCheckException(name) {\r\n  return new TypeError(\"ReadableStreamBYOBRequest.prototype.\" + name + \" can only be used on a ReadableStreamBYOBRequest\");\r\n }\r\n function byteStreamControllerBrandCheckException(name) {\r\n  return new TypeError(\"ReadableByteStreamController.prototype.\" + name + \" can only be used on a ReadableByteStreamController\");\r\n }\r\n function AcquireReadableStreamBYOBReader(stream) {\r\n  return new ReadableStreamBYOBReader(stream);\r\n }\r\n function ReadableStreamAddReadIntoRequest(stream, readIntoRequest) {\r\n  stream._reader._readIntoRequests.push(readIntoRequest);\r\n }\r\n function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {\r\n  var reader = stream._reader;\r\n  var readIntoRequest = reader._readIntoRequests.shift();\r\n  if (done) {\r\n   readIntoRequest._closeSteps(chunk);\r\n  } else {\r\n   readIntoRequest._chunkSteps(chunk);\r\n  }\r\n }\r\n function ReadableStreamGetNumReadIntoRequests(stream) {\r\n  return stream._reader._readIntoRequests.length;\r\n }\r\n function ReadableStreamHasBYOBReader(stream) {\r\n  var reader = stream._reader;\r\n  if (reader === undefined) {\r\n   return false;\r\n  }\r\n  if (!IsReadableStreamBYOBReader(reader)) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n var ReadableStreamBYOBReader = function () {\r\n  function ReadableStreamBYOBReader(stream) {\r\n   assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\r\n   assertReadableStream(stream, 'First parameter');\r\n   if (IsReadableStreamLocked(stream)) {\r\n    throw new TypeError('This stream has already been locked for exclusive reading by another reader');\r\n   }\r\n   if (!IsReadableByteStreamController(stream._readableStreamController)) {\r\n    throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source');\r\n   }\r\n   ReadableStreamReaderGenericInitialize(this, stream);\r\n   this._readIntoRequests = new SimpleQueue();\r\n  }\r\n  Object.defineProperty(ReadableStreamBYOBReader.prototype, \"closed\", {\r\n   get: function () {\r\n    if (!IsReadableStreamBYOBReader(this)) {\r\n     return promiseRejectedWith(byobReaderBrandCheckException('closed'));\r\n    }\r\n    return this._closedPromise;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  ReadableStreamBYOBReader.prototype.cancel = function (reason) {\r\n   if (reason === void 0) {\r\n    reason = undefined;\r\n   }\r\n   if (!IsReadableStreamBYOBReader(this)) {\r\n    return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\r\n   }\r\n   if (this._ownerReadableStream === undefined) {\r\n    return promiseRejectedWith(readerLockException('cancel'));\r\n   }\r\n   return ReadableStreamReaderGenericCancel(this, reason);\r\n  };\r\n  ReadableStreamBYOBReader.prototype.read = function (view) {\r\n   if (!IsReadableStreamBYOBReader(this)) {\r\n    return promiseRejectedWith(byobReaderBrandCheckException('read'));\r\n   }\r\n   if (!ArrayBuffer.isView(view)) {\r\n    return promiseRejectedWith(new TypeError('view must be an array buffer view'));\r\n   }\r\n   if (view.byteLength === 0) {\r\n    return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\r\n   }\r\n   if (view.buffer.byteLength === 0) {\r\n    return promiseRejectedWith(new TypeError(\"view's buffer must have non-zero byteLength\"));\r\n   }\r\n   if (this._ownerReadableStream === undefined) {\r\n    return promiseRejectedWith(readerLockException('read from'));\r\n   }\r\n   var resolvePromise;\r\n   var rejectPromise;\r\n   var promise = newPromise(function (resolve, reject) {\r\n    resolvePromise = resolve;\r\n    rejectPromise = reject;\r\n   });\r\n   var readIntoRequest = {\r\n    _chunkSteps: function (chunk) {\r\n     return resolvePromise({\r\n      value: chunk,\r\n      done: false\r\n     });\r\n    },\r\n    _closeSteps: function (chunk) {\r\n     return resolvePromise({\r\n      value: chunk,\r\n      done: true\r\n     });\r\n    },\r\n    _errorSteps: function (e) {\r\n     return rejectPromise(e);\r\n    }\r\n   };\r\n   ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\r\n   return promise;\r\n  };\r\n  ReadableStreamBYOBReader.prototype.releaseLock = function () {\r\n   if (!IsReadableStreamBYOBReader(this)) {\r\n    throw byobReaderBrandCheckException('releaseLock');\r\n   }\r\n   if (this._ownerReadableStream === undefined) {\r\n    return;\r\n   }\r\n   if (this._readIntoRequests.length > 0) {\r\n    throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\r\n   }\r\n   ReadableStreamReaderGenericRelease(this);\r\n  };\r\n  return ReadableStreamBYOBReader;\r\n }();\r\n Object.defineProperties(ReadableStreamBYOBReader.prototype, {\r\n  cancel: { enumerable: true },\r\n  read: { enumerable: true },\r\n  releaseLock: { enumerable: true },\r\n  closed: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ReadableStreamBYOBReader.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ReadableStreamBYOBReader',\r\n   configurable: true\r\n  });\r\n }\r\n function IsReadableStreamBYOBReader(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function ReadableStreamBYOBReaderRead(reader, view, readIntoRequest) {\r\n  var stream = reader._ownerReadableStream;\r\n  stream._disturbed = true;\r\n  if (stream._state === 'errored') {\r\n   readIntoRequest._errorSteps(stream._storedError);\r\n  } else {\r\n   ReadableByteStreamControllerPullInto(stream._readableStreamController, view, readIntoRequest);\r\n  }\r\n }\r\n function byobReaderBrandCheckException(name) {\r\n  return new TypeError(\"ReadableStreamBYOBReader.prototype.\" + name + \" can only be used on a ReadableStreamBYOBReader\");\r\n }\r\n function ExtractHighWaterMark(strategy, defaultHWM) {\r\n  var highWaterMark = strategy.highWaterMark;\r\n  if (highWaterMark === undefined) {\r\n   return defaultHWM;\r\n  }\r\n  if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\r\n   throw new RangeError('Invalid highWaterMark');\r\n  }\r\n  return highWaterMark;\r\n }\r\n function ExtractSizeAlgorithm(strategy) {\r\n  var size = strategy.size;\r\n  if (!size) {\r\n   return function () {\r\n    return 1;\r\n   };\r\n  }\r\n  return size;\r\n }\r\n function convertQueuingStrategy(init, context) {\r\n  assertDictionary(init, context);\r\n  var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;\r\n  var size = init === null || init === void 0 ? void 0 : init.size;\r\n  return {\r\n   highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\r\n   size: size === undefined ? undefined : convertQueuingStrategySize(size, context + \" has member 'size' that\")\r\n  };\r\n }\r\n function convertQueuingStrategySize(fn, context) {\r\n  assertFunction(fn, context);\r\n  return function (chunk) {\r\n   return convertUnrestrictedDouble(fn(chunk));\r\n  };\r\n }\r\n function convertUnderlyingSink(original, context) {\r\n  assertDictionary(original, context);\r\n  var abort = original === null || original === void 0 ? void 0 : original.abort;\r\n  var close = original === null || original === void 0 ? void 0 : original.close;\r\n  var start = original === null || original === void 0 ? void 0 : original.start;\r\n  var type = original === null || original === void 0 ? void 0 : original.type;\r\n  var write = original === null || original === void 0 ? void 0 : original.write;\r\n  return {\r\n   abort: abort === undefined ? undefined : convertUnderlyingSinkAbortCallback(abort, original, context + \" has member 'abort' that\"),\r\n   close: close === undefined ? undefined : convertUnderlyingSinkCloseCallback(close, original, context + \" has member 'close' that\"),\r\n   start: start === undefined ? undefined : convertUnderlyingSinkStartCallback(start, original, context + \" has member 'start' that\"),\r\n   write: write === undefined ? undefined : convertUnderlyingSinkWriteCallback(write, original, context + \" has member 'write' that\"),\r\n   type: type\r\n  };\r\n }\r\n function convertUnderlyingSinkAbortCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (reason) {\r\n   return promiseCall(fn, original, [reason]);\r\n  };\r\n }\r\n function convertUnderlyingSinkCloseCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function () {\r\n   return promiseCall(fn, original, []);\r\n  };\r\n }\r\n function convertUnderlyingSinkStartCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (controller) {\r\n   return reflectCall(fn, original, [controller]);\r\n  };\r\n }\r\n function convertUnderlyingSinkWriteCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (chunk, controller) {\r\n   return promiseCall(fn, original, [\r\n    chunk,\r\n    controller\r\n   ]);\r\n  };\r\n }\r\n function assertWritableStream(x, context) {\r\n  if (!IsWritableStream(x)) {\r\n   throw new TypeError(context + \" is not a WritableStream.\");\r\n  }\r\n }\r\n var WritableStream = function () {\r\n  function WritableStream(rawUnderlyingSink, rawStrategy) {\r\n   if (rawUnderlyingSink === void 0) {\r\n    rawUnderlyingSink = {};\r\n   }\r\n   if (rawStrategy === void 0) {\r\n    rawStrategy = {};\r\n   }\r\n   if (rawUnderlyingSink === undefined) {\r\n    rawUnderlyingSink = null;\r\n   } else {\r\n    assertObject(rawUnderlyingSink, 'First parameter');\r\n   }\r\n   var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\r\n   var underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\r\n   InitializeWritableStream(this);\r\n   var type = underlyingSink.type;\r\n   if (type !== undefined) {\r\n    throw new RangeError('Invalid type is specified');\r\n   }\r\n   var sizeAlgorithm = ExtractSizeAlgorithm(strategy);\r\n   var highWaterMark = ExtractHighWaterMark(strategy, 1);\r\n   SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\r\n  }\r\n  Object.defineProperty(WritableStream.prototype, \"locked\", {\r\n   get: function () {\r\n    if (!IsWritableStream(this)) {\r\n     throw streamBrandCheckException('locked');\r\n    }\r\n    return IsWritableStreamLocked(this);\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  WritableStream.prototype.abort = function (reason) {\r\n   if (reason === void 0) {\r\n    reason = undefined;\r\n   }\r\n   if (!IsWritableStream(this)) {\r\n    return promiseRejectedWith(streamBrandCheckException('abort'));\r\n   }\r\n   if (IsWritableStreamLocked(this)) {\r\n    return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\r\n   }\r\n   return WritableStreamAbort(this, reason);\r\n  };\r\n  WritableStream.prototype.close = function () {\r\n   if (!IsWritableStream(this)) {\r\n    return promiseRejectedWith(streamBrandCheckException('close'));\r\n   }\r\n   if (IsWritableStreamLocked(this)) {\r\n    return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\r\n   }\r\n   if (WritableStreamCloseQueuedOrInFlight(this)) {\r\n    return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\r\n   }\r\n   return WritableStreamClose(this);\r\n  };\r\n  WritableStream.prototype.getWriter = function () {\r\n   if (!IsWritableStream(this)) {\r\n    throw streamBrandCheckException('getWriter');\r\n   }\r\n   return AcquireWritableStreamDefaultWriter(this);\r\n  };\r\n  return WritableStream;\r\n }();\r\n Object.defineProperties(WritableStream.prototype, {\r\n  abort: { enumerable: true },\r\n  close: { enumerable: true },\r\n  getWriter: { enumerable: true },\r\n  locked: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(WritableStream.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'WritableStream',\r\n   configurable: true\r\n  });\r\n }\r\n function AcquireWritableStreamDefaultWriter(stream) {\r\n  return new WritableStreamDefaultWriter(stream);\r\n }\r\n function CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {\r\n  if (highWaterMark === void 0) {\r\n   highWaterMark = 1;\r\n  }\r\n  if (sizeAlgorithm === void 0) {\r\n   sizeAlgorithm = function () {\r\n    return 1;\r\n   };\r\n  }\r\n  var stream = Object.create(WritableStream.prototype);\r\n  InitializeWritableStream(stream);\r\n  var controller = Object.create(WritableStreamDefaultController.prototype);\r\n  SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\r\n  return stream;\r\n }\r\n function InitializeWritableStream(stream) {\r\n  stream._state = 'writable';\r\n  stream._storedError = undefined;\r\n  stream._writer = undefined;\r\n  stream._writableStreamController = undefined;\r\n  stream._writeRequests = new SimpleQueue();\r\n  stream._inFlightWriteRequest = undefined;\r\n  stream._closeRequest = undefined;\r\n  stream._inFlightCloseRequest = undefined;\r\n  stream._pendingAbortRequest = undefined;\r\n  stream._backpressure = false;\r\n }\r\n function IsWritableStream(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function IsWritableStreamLocked(stream) {\r\n  if (stream._writer === undefined) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function WritableStreamAbort(stream, reason) {\r\n  var state = stream._state;\r\n  if (state === 'closed' || state === 'errored') {\r\n   return promiseResolvedWith(undefined);\r\n  }\r\n  if (stream._pendingAbortRequest !== undefined) {\r\n   return stream._pendingAbortRequest._promise;\r\n  }\r\n  var wasAlreadyErroring = false;\r\n  if (state === 'erroring') {\r\n   wasAlreadyErroring = true;\r\n   reason = undefined;\r\n  }\r\n  var promise = newPromise(function (resolve, reject) {\r\n   stream._pendingAbortRequest = {\r\n    _promise: undefined,\r\n    _resolve: resolve,\r\n    _reject: reject,\r\n    _reason: reason,\r\n    _wasAlreadyErroring: wasAlreadyErroring\r\n   };\r\n  });\r\n  stream._pendingAbortRequest._promise = promise;\r\n  if (!wasAlreadyErroring) {\r\n   WritableStreamStartErroring(stream, reason);\r\n  }\r\n  return promise;\r\n }\r\n function WritableStreamClose(stream) {\r\n  var state = stream._state;\r\n  if (state === 'closed' || state === 'errored') {\r\n   return promiseRejectedWith(new TypeError(\"The stream (in \" + state + \" state) is not in the writable state and cannot be closed\"));\r\n  }\r\n  var promise = newPromise(function (resolve, reject) {\r\n   var closeRequest = {\r\n    _resolve: resolve,\r\n    _reject: reject\r\n   };\r\n   stream._closeRequest = closeRequest;\r\n  });\r\n  var writer = stream._writer;\r\n  if (writer !== undefined && stream._backpressure && state === 'writable') {\r\n   defaultWriterReadyPromiseResolve(writer);\r\n  }\r\n  WritableStreamDefaultControllerClose(stream._writableStreamController);\r\n  return promise;\r\n }\r\n function WritableStreamAddWriteRequest(stream) {\r\n  var promise = newPromise(function (resolve, reject) {\r\n   var writeRequest = {\r\n    _resolve: resolve,\r\n    _reject: reject\r\n   };\r\n   stream._writeRequests.push(writeRequest);\r\n  });\r\n  return promise;\r\n }\r\n function WritableStreamDealWithRejection(stream, error) {\r\n  var state = stream._state;\r\n  if (state === 'writable') {\r\n   WritableStreamStartErroring(stream, error);\r\n   return;\r\n  }\r\n  WritableStreamFinishErroring(stream);\r\n }\r\n function WritableStreamStartErroring(stream, reason) {\r\n  var controller = stream._writableStreamController;\r\n  stream._state = 'erroring';\r\n  stream._storedError = reason;\r\n  var writer = stream._writer;\r\n  if (writer !== undefined) {\r\n   WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\r\n  }\r\n  if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\r\n   WritableStreamFinishErroring(stream);\r\n  }\r\n }\r\n function WritableStreamFinishErroring(stream) {\r\n  stream._state = 'errored';\r\n  stream._writableStreamController[ErrorSteps]();\r\n  var storedError = stream._storedError;\r\n  stream._writeRequests.forEach(function (writeRequest) {\r\n   writeRequest._reject(storedError);\r\n  });\r\n  stream._writeRequests = new SimpleQueue();\r\n  if (stream._pendingAbortRequest === undefined) {\r\n   WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\r\n   return;\r\n  }\r\n  var abortRequest = stream._pendingAbortRequest;\r\n  stream._pendingAbortRequest = undefined;\r\n  if (abortRequest._wasAlreadyErroring) {\r\n   abortRequest._reject(storedError);\r\n   WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\r\n   return;\r\n  }\r\n  var promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\r\n  uponPromise(promise, function () {\r\n   abortRequest._resolve();\r\n   WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\r\n  }, function (reason) {\r\n   abortRequest._reject(reason);\r\n   WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\r\n  });\r\n }\r\n function WritableStreamFinishInFlightWrite(stream) {\r\n  stream._inFlightWriteRequest._resolve(undefined);\r\n  stream._inFlightWriteRequest = undefined;\r\n }\r\n function WritableStreamFinishInFlightWriteWithError(stream, error) {\r\n  stream._inFlightWriteRequest._reject(error);\r\n  stream._inFlightWriteRequest = undefined;\r\n  WritableStreamDealWithRejection(stream, error);\r\n }\r\n function WritableStreamFinishInFlightClose(stream) {\r\n  stream._inFlightCloseRequest._resolve(undefined);\r\n  stream._inFlightCloseRequest = undefined;\r\n  var state = stream._state;\r\n  if (state === 'erroring') {\r\n   stream._storedError = undefined;\r\n   if (stream._pendingAbortRequest !== undefined) {\r\n    stream._pendingAbortRequest._resolve();\r\n    stream._pendingAbortRequest = undefined;\r\n   }\r\n  }\r\n  stream._state = 'closed';\r\n  var writer = stream._writer;\r\n  if (writer !== undefined) {\r\n   defaultWriterClosedPromiseResolve(writer);\r\n  }\r\n }\r\n function WritableStreamFinishInFlightCloseWithError(stream, error) {\r\n  stream._inFlightCloseRequest._reject(error);\r\n  stream._inFlightCloseRequest = undefined;\r\n  if (stream._pendingAbortRequest !== undefined) {\r\n   stream._pendingAbortRequest._reject(error);\r\n   stream._pendingAbortRequest = undefined;\r\n  }\r\n  WritableStreamDealWithRejection(stream, error);\r\n }\r\n function WritableStreamCloseQueuedOrInFlight(stream) {\r\n  if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function WritableStreamHasOperationMarkedInFlight(stream) {\r\n  if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function WritableStreamMarkCloseRequestInFlight(stream) {\r\n  stream._inFlightCloseRequest = stream._closeRequest;\r\n  stream._closeRequest = undefined;\r\n }\r\n function WritableStreamMarkFirstWriteRequestInFlight(stream) {\r\n  stream._inFlightWriteRequest = stream._writeRequests.shift();\r\n }\r\n function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {\r\n  if (stream._closeRequest !== undefined) {\r\n   stream._closeRequest._reject(stream._storedError);\r\n   stream._closeRequest = undefined;\r\n  }\r\n  var writer = stream._writer;\r\n  if (writer !== undefined) {\r\n   defaultWriterClosedPromiseReject(writer, stream._storedError);\r\n  }\r\n }\r\n function WritableStreamUpdateBackpressure(stream, backpressure) {\r\n  var writer = stream._writer;\r\n  if (writer !== undefined && backpressure !== stream._backpressure) {\r\n   if (backpressure) {\r\n    defaultWriterReadyPromiseReset(writer);\r\n   } else {\r\n    defaultWriterReadyPromiseResolve(writer);\r\n   }\r\n  }\r\n  stream._backpressure = backpressure;\r\n }\r\n var WritableStreamDefaultWriter = function () {\r\n  function WritableStreamDefaultWriter(stream) {\r\n   assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\r\n   assertWritableStream(stream, 'First parameter');\r\n   if (IsWritableStreamLocked(stream)) {\r\n    throw new TypeError('This stream has already been locked for exclusive writing by another writer');\r\n   }\r\n   this._ownerWritableStream = stream;\r\n   stream._writer = this;\r\n   var state = stream._state;\r\n   if (state === 'writable') {\r\n    if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\r\n     defaultWriterReadyPromiseInitialize(this);\r\n    } else {\r\n     defaultWriterReadyPromiseInitializeAsResolved(this);\r\n    }\r\n    defaultWriterClosedPromiseInitialize(this);\r\n   } else if (state === 'erroring') {\r\n    defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\r\n    defaultWriterClosedPromiseInitialize(this);\r\n   } else if (state === 'closed') {\r\n    defaultWriterReadyPromiseInitializeAsResolved(this);\r\n    defaultWriterClosedPromiseInitializeAsResolved(this);\r\n   } else {\r\n    var storedError = stream._storedError;\r\n    defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\r\n    defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\r\n   }\r\n  }\r\n  Object.defineProperty(WritableStreamDefaultWriter.prototype, \"closed\", {\r\n   get: function () {\r\n    if (!IsWritableStreamDefaultWriter(this)) {\r\n     return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\r\n    }\r\n    return this._closedPromise;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  Object.defineProperty(WritableStreamDefaultWriter.prototype, \"desiredSize\", {\r\n   get: function () {\r\n    if (!IsWritableStreamDefaultWriter(this)) {\r\n     throw defaultWriterBrandCheckException('desiredSize');\r\n    }\r\n    if (this._ownerWritableStream === undefined) {\r\n     throw defaultWriterLockException('desiredSize');\r\n    }\r\n    return WritableStreamDefaultWriterGetDesiredSize(this);\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  Object.defineProperty(WritableStreamDefaultWriter.prototype, \"ready\", {\r\n   get: function () {\r\n    if (!IsWritableStreamDefaultWriter(this)) {\r\n     return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\r\n    }\r\n    return this._readyPromise;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  WritableStreamDefaultWriter.prototype.abort = function (reason) {\r\n   if (reason === void 0) {\r\n    reason = undefined;\r\n   }\r\n   if (!IsWritableStreamDefaultWriter(this)) {\r\n    return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\r\n   }\r\n   if (this._ownerWritableStream === undefined) {\r\n    return promiseRejectedWith(defaultWriterLockException('abort'));\r\n   }\r\n   return WritableStreamDefaultWriterAbort(this, reason);\r\n  };\r\n  WritableStreamDefaultWriter.prototype.close = function () {\r\n   if (!IsWritableStreamDefaultWriter(this)) {\r\n    return promiseRejectedWith(defaultWriterBrandCheckException('close'));\r\n   }\r\n   var stream = this._ownerWritableStream;\r\n   if (stream === undefined) {\r\n    return promiseRejectedWith(defaultWriterLockException('close'));\r\n   }\r\n   if (WritableStreamCloseQueuedOrInFlight(stream)) {\r\n    return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\r\n   }\r\n   return WritableStreamDefaultWriterClose(this);\r\n  };\r\n  WritableStreamDefaultWriter.prototype.releaseLock = function () {\r\n   if (!IsWritableStreamDefaultWriter(this)) {\r\n    throw defaultWriterBrandCheckException('releaseLock');\r\n   }\r\n   var stream = this._ownerWritableStream;\r\n   if (stream === undefined) {\r\n    return;\r\n   }\r\n   WritableStreamDefaultWriterRelease(this);\r\n  };\r\n  WritableStreamDefaultWriter.prototype.write = function (chunk) {\r\n   if (chunk === void 0) {\r\n    chunk = undefined;\r\n   }\r\n   if (!IsWritableStreamDefaultWriter(this)) {\r\n    return promiseRejectedWith(defaultWriterBrandCheckException('write'));\r\n   }\r\n   if (this._ownerWritableStream === undefined) {\r\n    return promiseRejectedWith(defaultWriterLockException('write to'));\r\n   }\r\n   return WritableStreamDefaultWriterWrite(this, chunk);\r\n  };\r\n  return WritableStreamDefaultWriter;\r\n }();\r\n Object.defineProperties(WritableStreamDefaultWriter.prototype, {\r\n  abort: { enumerable: true },\r\n  close: { enumerable: true },\r\n  releaseLock: { enumerable: true },\r\n  write: { enumerable: true },\r\n  closed: { enumerable: true },\r\n  desiredSize: { enumerable: true },\r\n  ready: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(WritableStreamDefaultWriter.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'WritableStreamDefaultWriter',\r\n   configurable: true\r\n  });\r\n }\r\n function IsWritableStreamDefaultWriter(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function WritableStreamDefaultWriterAbort(writer, reason) {\r\n  var stream = writer._ownerWritableStream;\r\n  return WritableStreamAbort(stream, reason);\r\n }\r\n function WritableStreamDefaultWriterClose(writer) {\r\n  var stream = writer._ownerWritableStream;\r\n  return WritableStreamClose(stream);\r\n }\r\n function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {\r\n  var stream = writer._ownerWritableStream;\r\n  var state = stream._state;\r\n  if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\r\n   return promiseResolvedWith(undefined);\r\n  }\r\n  if (state === 'errored') {\r\n   return promiseRejectedWith(stream._storedError);\r\n  }\r\n  return WritableStreamDefaultWriterClose(writer);\r\n }\r\n function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {\r\n  if (writer._closedPromiseState === 'pending') {\r\n   defaultWriterClosedPromiseReject(writer, error);\r\n  } else {\r\n   defaultWriterClosedPromiseResetToRejected(writer, error);\r\n  }\r\n }\r\n function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {\r\n  if (writer._readyPromiseState === 'pending') {\r\n   defaultWriterReadyPromiseReject(writer, error);\r\n  } else {\r\n   defaultWriterReadyPromiseResetToRejected(writer, error);\r\n  }\r\n }\r\n function WritableStreamDefaultWriterGetDesiredSize(writer) {\r\n  var stream = writer._ownerWritableStream;\r\n  var state = stream._state;\r\n  if (state === 'errored' || state === 'erroring') {\r\n   return null;\r\n  }\r\n  if (state === 'closed') {\r\n   return 0;\r\n  }\r\n  return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\r\n }\r\n function WritableStreamDefaultWriterRelease(writer) {\r\n  var stream = writer._ownerWritableStream;\r\n  var releasedError = new TypeError(\"Writer was released and can no longer be used to monitor the stream's closedness\");\r\n  WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\r\n  WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\r\n  stream._writer = undefined;\r\n  writer._ownerWritableStream = undefined;\r\n }\r\n function WritableStreamDefaultWriterWrite(writer, chunk) {\r\n  var stream = writer._ownerWritableStream;\r\n  var controller = stream._writableStreamController;\r\n  var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\r\n  if (stream !== writer._ownerWritableStream) {\r\n   return promiseRejectedWith(defaultWriterLockException('write to'));\r\n  }\r\n  var state = stream._state;\r\n  if (state === 'errored') {\r\n   return promiseRejectedWith(stream._storedError);\r\n  }\r\n  if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\r\n   return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\r\n  }\r\n  if (state === 'erroring') {\r\n   return promiseRejectedWith(stream._storedError);\r\n  }\r\n  var promise = WritableStreamAddWriteRequest(stream);\r\n  WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\r\n  return promise;\r\n }\r\n var closeSentinel = {};\r\n var WritableStreamDefaultController = function () {\r\n  function WritableStreamDefaultController() {\r\n   throw new TypeError('Illegal constructor');\r\n  }\r\n  WritableStreamDefaultController.prototype.error = function (e) {\r\n   if (e === void 0) {\r\n    e = undefined;\r\n   }\r\n   if (!IsWritableStreamDefaultController(this)) {\r\n    throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController');\r\n   }\r\n   var state = this._controlledWritableStream._state;\r\n   if (state !== 'writable') {\r\n    return;\r\n   }\r\n   WritableStreamDefaultControllerError(this, e);\r\n  };\r\n  WritableStreamDefaultController.prototype[AbortSteps] = function (reason) {\r\n   var result = this._abortAlgorithm(reason);\r\n   WritableStreamDefaultControllerClearAlgorithms(this);\r\n   return result;\r\n  };\r\n  WritableStreamDefaultController.prototype[ErrorSteps] = function () {\r\n   ResetQueue(this);\r\n  };\r\n  return WritableStreamDefaultController;\r\n }();\r\n Object.defineProperties(WritableStreamDefaultController.prototype, { error: { enumerable: true } });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(WritableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'WritableStreamDefaultController',\r\n   configurable: true\r\n  });\r\n }\r\n function IsWritableStreamDefaultController(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {\r\n  controller._controlledWritableStream = stream;\r\n  stream._writableStreamController = controller;\r\n  controller._queue = undefined;\r\n  controller._queueTotalSize = undefined;\r\n  ResetQueue(controller);\r\n  controller._started = false;\r\n  controller._strategySizeAlgorithm = sizeAlgorithm;\r\n  controller._strategyHWM = highWaterMark;\r\n  controller._writeAlgorithm = writeAlgorithm;\r\n  controller._closeAlgorithm = closeAlgorithm;\r\n  controller._abortAlgorithm = abortAlgorithm;\r\n  var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\r\n  WritableStreamUpdateBackpressure(stream, backpressure);\r\n  var startResult = startAlgorithm();\r\n  var startPromise = promiseResolvedWith(startResult);\r\n  uponPromise(startPromise, function () {\r\n   controller._started = true;\r\n   WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\r\n  }, function (r) {\r\n   controller._started = true;\r\n   WritableStreamDealWithRejection(stream, r);\r\n  });\r\n }\r\n function SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) {\r\n  var controller = Object.create(WritableStreamDefaultController.prototype);\r\n  var startAlgorithm = function () {\r\n   return undefined;\r\n  };\r\n  var writeAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  var closeAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  var abortAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  if (underlyingSink.start !== undefined) {\r\n   startAlgorithm = function () {\r\n    return underlyingSink.start(controller);\r\n   };\r\n  }\r\n  if (underlyingSink.write !== undefined) {\r\n   writeAlgorithm = function (chunk) {\r\n    return underlyingSink.write(chunk, controller);\r\n   };\r\n  }\r\n  if (underlyingSink.close !== undefined) {\r\n   closeAlgorithm = function () {\r\n    return underlyingSink.close();\r\n   };\r\n  }\r\n  if (underlyingSink.abort !== undefined) {\r\n   abortAlgorithm = function (reason) {\r\n    return underlyingSink.abort(reason);\r\n   };\r\n  }\r\n  SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\r\n }\r\n function WritableStreamDefaultControllerClearAlgorithms(controller) {\r\n  controller._writeAlgorithm = undefined;\r\n  controller._closeAlgorithm = undefined;\r\n  controller._abortAlgorithm = undefined;\r\n  controller._strategySizeAlgorithm = undefined;\r\n }\r\n function WritableStreamDefaultControllerClose(controller) {\r\n  EnqueueValueWithSize(controller, closeSentinel, 0);\r\n  WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\r\n }\r\n function WritableStreamDefaultControllerGetChunkSize(controller, chunk) {\r\n  try {\r\n   return controller._strategySizeAlgorithm(chunk);\r\n  } catch (chunkSizeE) {\r\n   WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\r\n   return 1;\r\n  }\r\n }\r\n function WritableStreamDefaultControllerGetDesiredSize(controller) {\r\n  return controller._strategyHWM - controller._queueTotalSize;\r\n }\r\n function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {\r\n  try {\r\n   EnqueueValueWithSize(controller, chunk, chunkSize);\r\n  } catch (enqueueE) {\r\n   WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\r\n   return;\r\n  }\r\n  var stream = controller._controlledWritableStream;\r\n  if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\r\n   var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\r\n   WritableStreamUpdateBackpressure(stream, backpressure);\r\n  }\r\n  WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\r\n }\r\n function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {\r\n  var stream = controller._controlledWritableStream;\r\n  if (!controller._started) {\r\n   return;\r\n  }\r\n  if (stream._inFlightWriteRequest !== undefined) {\r\n   return;\r\n  }\r\n  var state = stream._state;\r\n  if (state === 'erroring') {\r\n   WritableStreamFinishErroring(stream);\r\n   return;\r\n  }\r\n  if (controller._queue.length === 0) {\r\n   return;\r\n  }\r\n  var value = PeekQueueValue(controller);\r\n  if (value === closeSentinel) {\r\n   WritableStreamDefaultControllerProcessClose(controller);\r\n  } else {\r\n   WritableStreamDefaultControllerProcessWrite(controller, value);\r\n  }\r\n }\r\n function WritableStreamDefaultControllerErrorIfNeeded(controller, error) {\r\n  if (controller._controlledWritableStream._state === 'writable') {\r\n   WritableStreamDefaultControllerError(controller, error);\r\n  }\r\n }\r\n function WritableStreamDefaultControllerProcessClose(controller) {\r\n  var stream = controller._controlledWritableStream;\r\n  WritableStreamMarkCloseRequestInFlight(stream);\r\n  DequeueValue(controller);\r\n  var sinkClosePromise = controller._closeAlgorithm();\r\n  WritableStreamDefaultControllerClearAlgorithms(controller);\r\n  uponPromise(sinkClosePromise, function () {\r\n   WritableStreamFinishInFlightClose(stream);\r\n  }, function (reason) {\r\n   WritableStreamFinishInFlightCloseWithError(stream, reason);\r\n  });\r\n }\r\n function WritableStreamDefaultControllerProcessWrite(controller, chunk) {\r\n  var stream = controller._controlledWritableStream;\r\n  WritableStreamMarkFirstWriteRequestInFlight(stream);\r\n  var sinkWritePromise = controller._writeAlgorithm(chunk);\r\n  uponPromise(sinkWritePromise, function () {\r\n   WritableStreamFinishInFlightWrite(stream);\r\n   var state = stream._state;\r\n   DequeueValue(controller);\r\n   if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\r\n    var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\r\n    WritableStreamUpdateBackpressure(stream, backpressure);\r\n   }\r\n   WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\r\n  }, function (reason) {\r\n   if (stream._state === 'writable') {\r\n    WritableStreamDefaultControllerClearAlgorithms(controller);\r\n   }\r\n   WritableStreamFinishInFlightWriteWithError(stream, reason);\r\n  });\r\n }\r\n function WritableStreamDefaultControllerGetBackpressure(controller) {\r\n  var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\r\n  return desiredSize <= 0;\r\n }\r\n function WritableStreamDefaultControllerError(controller, error) {\r\n  var stream = controller._controlledWritableStream;\r\n  WritableStreamDefaultControllerClearAlgorithms(controller);\r\n  WritableStreamStartErroring(stream, error);\r\n }\r\n function streamBrandCheckException(name) {\r\n  return new TypeError(\"WritableStream.prototype.\" + name + \" can only be used on a WritableStream\");\r\n }\r\n function defaultWriterBrandCheckException(name) {\r\n  return new TypeError(\"WritableStreamDefaultWriter.prototype.\" + name + \" can only be used on a WritableStreamDefaultWriter\");\r\n }\r\n function defaultWriterLockException(name) {\r\n  return new TypeError('Cannot ' + name + ' a stream using a released writer');\r\n }\r\n function defaultWriterClosedPromiseInitialize(writer) {\r\n  writer._closedPromise = newPromise(function (resolve, reject) {\r\n   writer._closedPromise_resolve = resolve;\r\n   writer._closedPromise_reject = reject;\r\n   writer._closedPromiseState = 'pending';\r\n  });\r\n }\r\n function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {\r\n  defaultWriterClosedPromiseInitialize(writer);\r\n  defaultWriterClosedPromiseReject(writer, reason);\r\n }\r\n function defaultWriterClosedPromiseInitializeAsResolved(writer) {\r\n  defaultWriterClosedPromiseInitialize(writer);\r\n  defaultWriterClosedPromiseResolve(writer);\r\n }\r\n function defaultWriterClosedPromiseReject(writer, reason) {\r\n  if (writer._closedPromise_reject === undefined) {\r\n   return;\r\n  }\r\n  setPromiseIsHandledToTrue(writer._closedPromise);\r\n  writer._closedPromise_reject(reason);\r\n  writer._closedPromise_resolve = undefined;\r\n  writer._closedPromise_reject = undefined;\r\n  writer._closedPromiseState = 'rejected';\r\n }\r\n function defaultWriterClosedPromiseResetToRejected(writer, reason) {\r\n  defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\r\n }\r\n function defaultWriterClosedPromiseResolve(writer) {\r\n  if (writer._closedPromise_resolve === undefined) {\r\n   return;\r\n  }\r\n  writer._closedPromise_resolve(undefined);\r\n  writer._closedPromise_resolve = undefined;\r\n  writer._closedPromise_reject = undefined;\r\n  writer._closedPromiseState = 'resolved';\r\n }\r\n function defaultWriterReadyPromiseInitialize(writer) {\r\n  writer._readyPromise = newPromise(function (resolve, reject) {\r\n   writer._readyPromise_resolve = resolve;\r\n   writer._readyPromise_reject = reject;\r\n  });\r\n  writer._readyPromiseState = 'pending';\r\n }\r\n function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {\r\n  defaultWriterReadyPromiseInitialize(writer);\r\n  defaultWriterReadyPromiseReject(writer, reason);\r\n }\r\n function defaultWriterReadyPromiseInitializeAsResolved(writer) {\r\n  defaultWriterReadyPromiseInitialize(writer);\r\n  defaultWriterReadyPromiseResolve(writer);\r\n }\r\n function defaultWriterReadyPromiseReject(writer, reason) {\r\n  if (writer._readyPromise_reject === undefined) {\r\n   return;\r\n  }\r\n  setPromiseIsHandledToTrue(writer._readyPromise);\r\n  writer._readyPromise_reject(reason);\r\n  writer._readyPromise_resolve = undefined;\r\n  writer._readyPromise_reject = undefined;\r\n  writer._readyPromiseState = 'rejected';\r\n }\r\n function defaultWriterReadyPromiseReset(writer) {\r\n  defaultWriterReadyPromiseInitialize(writer);\r\n }\r\n function defaultWriterReadyPromiseResetToRejected(writer, reason) {\r\n  defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\r\n }\r\n function defaultWriterReadyPromiseResolve(writer) {\r\n  if (writer._readyPromise_resolve === undefined) {\r\n   return;\r\n  }\r\n  writer._readyPromise_resolve(undefined);\r\n  writer._readyPromise_resolve = undefined;\r\n  writer._readyPromise_reject = undefined;\r\n  writer._readyPromiseState = 'fulfilled';\r\n }\r\n function isAbortSignal(value) {\r\n  if (typeof value !== 'object' || value === null) {\r\n   return false;\r\n  }\r\n  try {\r\n   return typeof value.aborted === 'boolean';\r\n  } catch (_a) {\r\n   return false;\r\n  }\r\n }\r\n var NativeDOMException = typeof DOMException !== 'undefined' ? DOMException : undefined;\r\n function isDOMExceptionConstructor(ctor) {\r\n  if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\r\n   return false;\r\n  }\r\n  try {\r\n   new ctor();\r\n   return true;\r\n  } catch (_a) {\r\n   return false;\r\n  }\r\n }\r\n function createDOMExceptionPolyfill() {\r\n  var ctor = function DOMException(message, name) {\r\n   this.message = message || '';\r\n   this.name = name || 'Error';\r\n   if (Error.captureStackTrace) {\r\n    Error.captureStackTrace(this, this.constructor);\r\n   }\r\n  };\r\n  ctor.prototype = Object.create(Error.prototype);\r\n  Object.defineProperty(ctor.prototype, 'constructor', {\r\n   value: ctor,\r\n   writable: true,\r\n   configurable: true\r\n  });\r\n  return ctor;\r\n }\r\n var DOMException$1 = isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\r\n function ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) {\r\n  var reader = AcquireReadableStreamDefaultReader(source);\r\n  var writer = AcquireWritableStreamDefaultWriter(dest);\r\n  source._disturbed = true;\r\n  var shuttingDown = false;\r\n  var currentWrite = promiseResolvedWith(undefined);\r\n  return newPromise(function (resolve, reject) {\r\n   var abortAlgorithm;\r\n   if (signal !== undefined) {\r\n    abortAlgorithm = function () {\r\n     var error = new DOMException$1('Aborted', 'AbortError');\r\n     var actions = [];\r\n     if (!preventAbort) {\r\n      actions.push(function () {\r\n       if (dest._state === 'writable') {\r\n        return WritableStreamAbort(dest, error);\r\n       }\r\n       return promiseResolvedWith(undefined);\r\n      });\r\n     }\r\n     if (!preventCancel) {\r\n      actions.push(function () {\r\n       if (source._state === 'readable') {\r\n        return ReadableStreamCancel(source, error);\r\n       }\r\n       return promiseResolvedWith(undefined);\r\n      });\r\n     }\r\n     shutdownWithAction(function () {\r\n      return Promise.all(actions.map(function (action) {\r\n       return action();\r\n      }));\r\n     }, true, error);\r\n    };\r\n    if (signal.aborted) {\r\n     abortAlgorithm();\r\n     return;\r\n    }\r\n    signal.addEventListener('abort', abortAlgorithm);\r\n   }\r\n   function pipeLoop() {\r\n    return newPromise(function (resolveLoop, rejectLoop) {\r\n     function next(done) {\r\n      if (done) {\r\n       resolveLoop();\r\n      } else {\r\n       PerformPromiseThen(pipeStep(), next, rejectLoop);\r\n      }\r\n     }\r\n     next(false);\r\n    });\r\n   }\r\n   function pipeStep() {\r\n    if (shuttingDown) {\r\n     return promiseResolvedWith(true);\r\n    }\r\n    return PerformPromiseThen(writer._readyPromise, function () {\r\n     return newPromise(function (resolveRead, rejectRead) {\r\n      ReadableStreamDefaultReaderRead(reader, {\r\n       _chunkSteps: function (chunk) {\r\n        currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\r\n        resolveRead(false);\r\n       },\r\n       _closeSteps: function () {\r\n        return resolveRead(true);\r\n       },\r\n       _errorSteps: rejectRead\r\n      });\r\n     });\r\n    });\r\n   }\r\n   isOrBecomesErrored(source, reader._closedPromise, function (storedError) {\r\n    if (!preventAbort) {\r\n     shutdownWithAction(function () {\r\n      return WritableStreamAbort(dest, storedError);\r\n     }, true, storedError);\r\n    } else {\r\n     shutdown(true, storedError);\r\n    }\r\n   });\r\n   isOrBecomesErrored(dest, writer._closedPromise, function (storedError) {\r\n    if (!preventCancel) {\r\n     shutdownWithAction(function () {\r\n      return ReadableStreamCancel(source, storedError);\r\n     }, true, storedError);\r\n    } else {\r\n     shutdown(true, storedError);\r\n    }\r\n   });\r\n   isOrBecomesClosed(source, reader._closedPromise, function () {\r\n    if (!preventClose) {\r\n     shutdownWithAction(function () {\r\n      return WritableStreamDefaultWriterCloseWithErrorPropagation(writer);\r\n     });\r\n    } else {\r\n     shutdown();\r\n    }\r\n   });\r\n   if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\r\n    var destClosed_1 = new TypeError('the destination writable stream closed before all data could be piped to it');\r\n    if (!preventCancel) {\r\n     shutdownWithAction(function () {\r\n      return ReadableStreamCancel(source, destClosed_1);\r\n     }, true, destClosed_1);\r\n    } else {\r\n     shutdown(true, destClosed_1);\r\n    }\r\n   }\r\n   setPromiseIsHandledToTrue(pipeLoop());\r\n   function waitForWritesToFinish() {\r\n    var oldCurrentWrite = currentWrite;\r\n    return PerformPromiseThen(currentWrite, function () {\r\n     return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined;\r\n    });\r\n   }\r\n   function isOrBecomesErrored(stream, promise, action) {\r\n    if (stream._state === 'errored') {\r\n     action(stream._storedError);\r\n    } else {\r\n     uponRejection(promise, action);\r\n    }\r\n   }\r\n   function isOrBecomesClosed(stream, promise, action) {\r\n    if (stream._state === 'closed') {\r\n     action();\r\n    } else {\r\n     uponFulfillment(promise, action);\r\n    }\r\n   }\r\n   function shutdownWithAction(action, originalIsError, originalError) {\r\n    if (shuttingDown) {\r\n     return;\r\n    }\r\n    shuttingDown = true;\r\n    if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\r\n     uponFulfillment(waitForWritesToFinish(), doTheRest);\r\n    } else {\r\n     doTheRest();\r\n    }\r\n    function doTheRest() {\r\n     uponPromise(action(), function () {\r\n      return finalize(originalIsError, originalError);\r\n     }, function (newError) {\r\n      return finalize(true, newError);\r\n     });\r\n    }\r\n   }\r\n   function shutdown(isError, error) {\r\n    if (shuttingDown) {\r\n     return;\r\n    }\r\n    shuttingDown = true;\r\n    if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\r\n     uponFulfillment(waitForWritesToFinish(), function () {\r\n      return finalize(isError, error);\r\n     });\r\n    } else {\r\n     finalize(isError, error);\r\n    }\r\n   }\r\n   function finalize(isError, error) {\r\n    WritableStreamDefaultWriterRelease(writer);\r\n    ReadableStreamReaderGenericRelease(reader);\r\n    if (signal !== undefined) {\r\n     signal.removeEventListener('abort', abortAlgorithm);\r\n    }\r\n    if (isError) {\r\n     reject(error);\r\n    } else {\r\n     resolve(undefined);\r\n    }\r\n   }\r\n  });\r\n }\r\n var ReadableStreamDefaultController = function () {\r\n  function ReadableStreamDefaultController() {\r\n   throw new TypeError('Illegal constructor');\r\n  }\r\n  Object.defineProperty(ReadableStreamDefaultController.prototype, \"desiredSize\", {\r\n   get: function () {\r\n    if (!IsReadableStreamDefaultController(this)) {\r\n     throw defaultControllerBrandCheckException('desiredSize');\r\n    }\r\n    return ReadableStreamDefaultControllerGetDesiredSize(this);\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  ReadableStreamDefaultController.prototype.close = function () {\r\n   if (!IsReadableStreamDefaultController(this)) {\r\n    throw defaultControllerBrandCheckException('close');\r\n   }\r\n   if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\r\n    throw new TypeError('The stream is not in a state that permits close');\r\n   }\r\n   ReadableStreamDefaultControllerClose(this);\r\n  };\r\n  ReadableStreamDefaultController.prototype.enqueue = function (chunk) {\r\n   if (chunk === void 0) {\r\n    chunk = undefined;\r\n   }\r\n   if (!IsReadableStreamDefaultController(this)) {\r\n    throw defaultControllerBrandCheckException('enqueue');\r\n   }\r\n   if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\r\n    throw new TypeError('The stream is not in a state that permits enqueue');\r\n   }\r\n   return ReadableStreamDefaultControllerEnqueue(this, chunk);\r\n  };\r\n  ReadableStreamDefaultController.prototype.error = function (e) {\r\n   if (e === void 0) {\r\n    e = undefined;\r\n   }\r\n   if (!IsReadableStreamDefaultController(this)) {\r\n    throw defaultControllerBrandCheckException('error');\r\n   }\r\n   ReadableStreamDefaultControllerError(this, e);\r\n  };\r\n  ReadableStreamDefaultController.prototype[CancelSteps] = function (reason) {\r\n   ResetQueue(this);\r\n   var result = this._cancelAlgorithm(reason);\r\n   ReadableStreamDefaultControllerClearAlgorithms(this);\r\n   return result;\r\n  };\r\n  ReadableStreamDefaultController.prototype[PullSteps] = function (readRequest) {\r\n   var stream = this._controlledReadableStream;\r\n   if (this._queue.length > 0) {\r\n    var chunk = DequeueValue(this);\r\n    if (this._closeRequested && this._queue.length === 0) {\r\n     ReadableStreamDefaultControllerClearAlgorithms(this);\r\n     ReadableStreamClose(stream);\r\n    } else {\r\n     ReadableStreamDefaultControllerCallPullIfNeeded(this);\r\n    }\r\n    readRequest._chunkSteps(chunk);\r\n   } else {\r\n    ReadableStreamAddReadRequest(stream, readRequest);\r\n    ReadableStreamDefaultControllerCallPullIfNeeded(this);\r\n   }\r\n  };\r\n  return ReadableStreamDefaultController;\r\n }();\r\n Object.defineProperties(ReadableStreamDefaultController.prototype, {\r\n  close: { enumerable: true },\r\n  enqueue: { enumerable: true },\r\n  error: { enumerable: true },\r\n  desiredSize: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ReadableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ReadableStreamDefaultController',\r\n   configurable: true\r\n  });\r\n }\r\n function IsReadableStreamDefaultController(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function ReadableStreamDefaultControllerCallPullIfNeeded(controller) {\r\n  var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\r\n  if (!shouldPull) {\r\n   return;\r\n  }\r\n  if (controller._pulling) {\r\n   controller._pullAgain = true;\r\n   return;\r\n  }\r\n  controller._pulling = true;\r\n  var pullPromise = controller._pullAlgorithm();\r\n  uponPromise(pullPromise, function () {\r\n   controller._pulling = false;\r\n   if (controller._pullAgain) {\r\n    controller._pullAgain = false;\r\n    ReadableStreamDefaultControllerCallPullIfNeeded(controller);\r\n   }\r\n  }, function (e) {\r\n   ReadableStreamDefaultControllerError(controller, e);\r\n  });\r\n }\r\n function ReadableStreamDefaultControllerShouldCallPull(controller) {\r\n  var stream = controller._controlledReadableStream;\r\n  if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\r\n   return false;\r\n  }\r\n  if (!controller._started) {\r\n   return false;\r\n  }\r\n  if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\r\n   return true;\r\n  }\r\n  var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\r\n  if (desiredSize > 0) {\r\n   return true;\r\n  }\r\n  return false;\r\n }\r\n function ReadableStreamDefaultControllerClearAlgorithms(controller) {\r\n  controller._pullAlgorithm = undefined;\r\n  controller._cancelAlgorithm = undefined;\r\n  controller._strategySizeAlgorithm = undefined;\r\n }\r\n function ReadableStreamDefaultControllerClose(controller) {\r\n  if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\r\n   return;\r\n  }\r\n  var stream = controller._controlledReadableStream;\r\n  controller._closeRequested = true;\r\n  if (controller._queue.length === 0) {\r\n   ReadableStreamDefaultControllerClearAlgorithms(controller);\r\n   ReadableStreamClose(stream);\r\n  }\r\n }\r\n function ReadableStreamDefaultControllerEnqueue(controller, chunk) {\r\n  if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\r\n   return;\r\n  }\r\n  var stream = controller._controlledReadableStream;\r\n  if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\r\n   ReadableStreamFulfillReadRequest(stream, chunk, false);\r\n  } else {\r\n   var chunkSize = void 0;\r\n   try {\r\n    chunkSize = controller._strategySizeAlgorithm(chunk);\r\n   } catch (chunkSizeE) {\r\n    ReadableStreamDefaultControllerError(controller, chunkSizeE);\r\n    throw chunkSizeE;\r\n   }\r\n   try {\r\n    EnqueueValueWithSize(controller, chunk, chunkSize);\r\n   } catch (enqueueE) {\r\n    ReadableStreamDefaultControllerError(controller, enqueueE);\r\n    throw enqueueE;\r\n   }\r\n  }\r\n  ReadableStreamDefaultControllerCallPullIfNeeded(controller);\r\n }\r\n function ReadableStreamDefaultControllerError(controller, e) {\r\n  var stream = controller._controlledReadableStream;\r\n  if (stream._state !== 'readable') {\r\n   return;\r\n  }\r\n  ResetQueue(controller);\r\n  ReadableStreamDefaultControllerClearAlgorithms(controller);\r\n  ReadableStreamError(stream, e);\r\n }\r\n function ReadableStreamDefaultControllerGetDesiredSize(controller) {\r\n  var state = controller._controlledReadableStream._state;\r\n  if (state === 'errored') {\r\n   return null;\r\n  }\r\n  if (state === 'closed') {\r\n   return 0;\r\n  }\r\n  return controller._strategyHWM - controller._queueTotalSize;\r\n }\r\n function ReadableStreamDefaultControllerHasBackpressure(controller) {\r\n  if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) {\r\n  var state = controller._controlledReadableStream._state;\r\n  if (!controller._closeRequested && state === 'readable') {\r\n   return true;\r\n  }\r\n  return false;\r\n }\r\n function SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {\r\n  controller._controlledReadableStream = stream;\r\n  controller._queue = undefined;\r\n  controller._queueTotalSize = undefined;\r\n  ResetQueue(controller);\r\n  controller._started = false;\r\n  controller._closeRequested = false;\r\n  controller._pullAgain = false;\r\n  controller._pulling = false;\r\n  controller._strategySizeAlgorithm = sizeAlgorithm;\r\n  controller._strategyHWM = highWaterMark;\r\n  controller._pullAlgorithm = pullAlgorithm;\r\n  controller._cancelAlgorithm = cancelAlgorithm;\r\n  stream._readableStreamController = controller;\r\n  var startResult = startAlgorithm();\r\n  uponPromise(promiseResolvedWith(startResult), function () {\r\n   controller._started = true;\r\n   ReadableStreamDefaultControllerCallPullIfNeeded(controller);\r\n  }, function (r) {\r\n   ReadableStreamDefaultControllerError(controller, r);\r\n  });\r\n }\r\n function SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) {\r\n  var controller = Object.create(ReadableStreamDefaultController.prototype);\r\n  var startAlgorithm = function () {\r\n   return undefined;\r\n  };\r\n  var pullAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  var cancelAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  if (underlyingSource.start !== undefined) {\r\n   startAlgorithm = function () {\r\n    return underlyingSource.start(controller);\r\n   };\r\n  }\r\n  if (underlyingSource.pull !== undefined) {\r\n   pullAlgorithm = function () {\r\n    return underlyingSource.pull(controller);\r\n   };\r\n  }\r\n  if (underlyingSource.cancel !== undefined) {\r\n   cancelAlgorithm = function (reason) {\r\n    return underlyingSource.cancel(reason);\r\n   };\r\n  }\r\n  SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\r\n }\r\n function defaultControllerBrandCheckException(name) {\r\n  return new TypeError(\"ReadableStreamDefaultController.prototype.\" + name + \" can only be used on a ReadableStreamDefaultController\");\r\n }\r\n function ReadableStreamTee(stream, cloneForBranch2) {\r\n  var reader = AcquireReadableStreamDefaultReader(stream);\r\n  var reading = false;\r\n  var canceled1 = false;\r\n  var canceled2 = false;\r\n  var reason1;\r\n  var reason2;\r\n  var branch1;\r\n  var branch2;\r\n  var resolveCancelPromise;\r\n  var cancelPromise = newPromise(function (resolve) {\r\n   resolveCancelPromise = resolve;\r\n  });\r\n  function pullAlgorithm() {\r\n   if (reading) {\r\n    return promiseResolvedWith(undefined);\r\n   }\r\n   reading = true;\r\n   var readRequest = {\r\n    _chunkSteps: function (value) {\r\n     queueMicrotask(function () {\r\n      reading = false;\r\n      var value1 = value;\r\n      var value2 = value;\r\n      if (!canceled1) {\r\n       ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, value1);\r\n      }\r\n      if (!canceled2) {\r\n       ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, value2);\r\n      }\r\n      resolveCancelPromise(undefined);\r\n     });\r\n    },\r\n    _closeSteps: function () {\r\n     reading = false;\r\n     if (!canceled1) {\r\n      ReadableStreamDefaultControllerClose(branch1._readableStreamController);\r\n     }\r\n     if (!canceled2) {\r\n      ReadableStreamDefaultControllerClose(branch2._readableStreamController);\r\n     }\r\n    },\r\n    _errorSteps: function () {\r\n     reading = false;\r\n    }\r\n   };\r\n   ReadableStreamDefaultReaderRead(reader, readRequest);\r\n   return promiseResolvedWith(undefined);\r\n  }\r\n  function cancel1Algorithm(reason) {\r\n   canceled1 = true;\r\n   reason1 = reason;\r\n   if (canceled2) {\r\n    var compositeReason = CreateArrayFromList([\r\n     reason1,\r\n     reason2\r\n    ]);\r\n    var cancelResult = ReadableStreamCancel(stream, compositeReason);\r\n    resolveCancelPromise(cancelResult);\r\n   }\r\n   return cancelPromise;\r\n  }\r\n  function cancel2Algorithm(reason) {\r\n   canceled2 = true;\r\n   reason2 = reason;\r\n   if (canceled1) {\r\n    var compositeReason = CreateArrayFromList([\r\n     reason1,\r\n     reason2\r\n    ]);\r\n    var cancelResult = ReadableStreamCancel(stream, compositeReason);\r\n    resolveCancelPromise(cancelResult);\r\n   }\r\n   return cancelPromise;\r\n  }\r\n  function startAlgorithm() {\r\n  }\r\n  branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\r\n  branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\r\n  uponRejection(reader._closedPromise, function (r) {\r\n   ReadableStreamDefaultControllerError(branch1._readableStreamController, r);\r\n   ReadableStreamDefaultControllerError(branch2._readableStreamController, r);\r\n   resolveCancelPromise(undefined);\r\n  });\r\n  return [\r\n   branch1,\r\n   branch2\r\n  ];\r\n }\r\n function convertUnderlyingDefaultOrByteSource(source, context) {\r\n  assertDictionary(source, context);\r\n  var original = source;\r\n  var autoAllocateChunkSize = original === null || original === void 0 ? void 0 : original.autoAllocateChunkSize;\r\n  var cancel = original === null || original === void 0 ? void 0 : original.cancel;\r\n  var pull = original === null || original === void 0 ? void 0 : original.pull;\r\n  var start = original === null || original === void 0 ? void 0 : original.start;\r\n  var type = original === null || original === void 0 ? void 0 : original.type;\r\n  return {\r\n   autoAllocateChunkSize: autoAllocateChunkSize === undefined ? undefined : convertUnsignedLongLongWithEnforceRange(autoAllocateChunkSize, context + \" has member 'autoAllocateChunkSize' that\"),\r\n   cancel: cancel === undefined ? undefined : convertUnderlyingSourceCancelCallback(cancel, original, context + \" has member 'cancel' that\"),\r\n   pull: pull === undefined ? undefined : convertUnderlyingSourcePullCallback(pull, original, context + \" has member 'pull' that\"),\r\n   start: start === undefined ? undefined : convertUnderlyingSourceStartCallback(start, original, context + \" has member 'start' that\"),\r\n   type: type === undefined ? undefined : convertReadableStreamType(type, context + \" has member 'type' that\")\r\n  };\r\n }\r\n function convertUnderlyingSourceCancelCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (reason) {\r\n   return promiseCall(fn, original, [reason]);\r\n  };\r\n }\r\n function convertUnderlyingSourcePullCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (controller) {\r\n   return promiseCall(fn, original, [controller]);\r\n  };\r\n }\r\n function convertUnderlyingSourceStartCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (controller) {\r\n   return reflectCall(fn, original, [controller]);\r\n  };\r\n }\r\n function convertReadableStreamType(type, context) {\r\n  type = \"\" + type;\r\n  if (type !== 'bytes') {\r\n   throw new TypeError(context + \" '\" + type + \"' is not a valid enumeration value for ReadableStreamType\");\r\n  }\r\n  return type;\r\n }\r\n function convertReaderOptions(options, context) {\r\n  assertDictionary(options, context);\r\n  var mode = options === null || options === void 0 ? void 0 : options.mode;\r\n  return { mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, context + \" has member 'mode' that\") };\r\n }\r\n function convertReadableStreamReaderMode(mode, context) {\r\n  mode = \"\" + mode;\r\n  if (mode !== 'byob') {\r\n   throw new TypeError(context + \" '\" + mode + \"' is not a valid enumeration value for ReadableStreamReaderMode\");\r\n  }\r\n  return mode;\r\n }\r\n function convertIteratorOptions(options, context) {\r\n  assertDictionary(options, context);\r\n  var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;\r\n  return { preventCancel: Boolean(preventCancel) };\r\n }\r\n function convertPipeOptions(options, context) {\r\n  assertDictionary(options, context);\r\n  var preventAbort = options === null || options === void 0 ? void 0 : options.preventAbort;\r\n  var preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;\r\n  var preventClose = options === null || options === void 0 ? void 0 : options.preventClose;\r\n  var signal = options === null || options === void 0 ? void 0 : options.signal;\r\n  if (signal !== undefined) {\r\n   assertAbortSignal(signal, context + \" has member 'signal' that\");\r\n  }\r\n  return {\r\n   preventAbort: Boolean(preventAbort),\r\n   preventCancel: Boolean(preventCancel),\r\n   preventClose: Boolean(preventClose),\r\n   signal: signal\r\n  };\r\n }\r\n function assertAbortSignal(signal, context) {\r\n  if (!isAbortSignal(signal)) {\r\n   throw new TypeError(context + \" is not an AbortSignal.\");\r\n  }\r\n }\r\n function convertReadableWritablePair(pair, context) {\r\n  assertDictionary(pair, context);\r\n  var readable = pair === null || pair === void 0 ? void 0 : pair.readable;\r\n  assertRequiredField(readable, 'readable', 'ReadableWritablePair');\r\n  assertReadableStream(readable, context + \" has member 'readable' that\");\r\n  var writable = pair === null || pair === void 0 ? void 0 : pair.writable;\r\n  assertRequiredField(writable, 'writable', 'ReadableWritablePair');\r\n  assertWritableStream(writable, context + \" has member 'writable' that\");\r\n  return {\r\n   readable: readable,\r\n   writable: writable\r\n  };\r\n }\r\n var ReadableStream = function () {\r\n  function ReadableStream(rawUnderlyingSource, rawStrategy) {\r\n   if (rawUnderlyingSource === void 0) {\r\n    rawUnderlyingSource = {};\r\n   }\r\n   if (rawStrategy === void 0) {\r\n    rawStrategy = {};\r\n   }\r\n   if (rawUnderlyingSource === undefined) {\r\n    rawUnderlyingSource = null;\r\n   } else {\r\n    assertObject(rawUnderlyingSource, 'First parameter');\r\n   }\r\n   var strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\r\n   var underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\r\n   InitializeReadableStream(this);\r\n   if (underlyingSource.type === 'bytes') {\r\n    if (strategy.size !== undefined) {\r\n     throw new RangeError('The strategy for a byte stream cannot have a size function');\r\n    }\r\n    var highWaterMark = ExtractHighWaterMark(strategy, 0);\r\n    SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark);\r\n   } else {\r\n    var sizeAlgorithm = ExtractSizeAlgorithm(strategy);\r\n    var highWaterMark = ExtractHighWaterMark(strategy, 1);\r\n    SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm);\r\n   }\r\n  }\r\n  Object.defineProperty(ReadableStream.prototype, \"locked\", {\r\n   get: function () {\r\n    if (!IsReadableStream(this)) {\r\n     throw streamBrandCheckException$1('locked');\r\n    }\r\n    return IsReadableStreamLocked(this);\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  ReadableStream.prototype.cancel = function (reason) {\r\n   if (reason === void 0) {\r\n    reason = undefined;\r\n   }\r\n   if (!IsReadableStream(this)) {\r\n    return promiseRejectedWith(streamBrandCheckException$1('cancel'));\r\n   }\r\n   if (IsReadableStreamLocked(this)) {\r\n    return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\r\n   }\r\n   return ReadableStreamCancel(this, reason);\r\n  };\r\n  ReadableStream.prototype.getReader = function (rawOptions) {\r\n   if (rawOptions === void 0) {\r\n    rawOptions = undefined;\r\n   }\r\n   if (!IsReadableStream(this)) {\r\n    throw streamBrandCheckException$1('getReader');\r\n   }\r\n   var options = convertReaderOptions(rawOptions, 'First parameter');\r\n   if (options.mode === undefined) {\r\n    return AcquireReadableStreamDefaultReader(this);\r\n   }\r\n   return AcquireReadableStreamBYOBReader(this);\r\n  };\r\n  ReadableStream.prototype.pipeThrough = function (rawTransform, rawOptions) {\r\n   if (rawOptions === void 0) {\r\n    rawOptions = {};\r\n   }\r\n   if (!IsReadableStream(this)) {\r\n    throw streamBrandCheckException$1('pipeThrough');\r\n   }\r\n   assertRequiredArgument(rawTransform, 1, 'pipeThrough');\r\n   var transform = convertReadableWritablePair(rawTransform, 'First parameter');\r\n   var options = convertPipeOptions(rawOptions, 'Second parameter');\r\n   if (IsReadableStreamLocked(this)) {\r\n    throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\r\n   }\r\n   if (IsWritableStreamLocked(transform.writable)) {\r\n    throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\r\n   }\r\n   var promise = ReadableStreamPipeTo(this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal);\r\n   setPromiseIsHandledToTrue(promise);\r\n   return transform.readable;\r\n  };\r\n  ReadableStream.prototype.pipeTo = function (destination, rawOptions) {\r\n   if (rawOptions === void 0) {\r\n    rawOptions = {};\r\n   }\r\n   if (!IsReadableStream(this)) {\r\n    return promiseRejectedWith(streamBrandCheckException$1('pipeTo'));\r\n   }\r\n   if (destination === undefined) {\r\n    return promiseRejectedWith(\"Parameter 1 is required in 'pipeTo'.\");\r\n   }\r\n   if (!IsWritableStream(destination)) {\r\n    return promiseRejectedWith(new TypeError(\"ReadableStream.prototype.pipeTo's first argument must be a WritableStream\"));\r\n   }\r\n   var options;\r\n   try {\r\n    options = convertPipeOptions(rawOptions, 'Second parameter');\r\n   } catch (e) {\r\n    return promiseRejectedWith(e);\r\n   }\r\n   if (IsReadableStreamLocked(this)) {\r\n    return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));\r\n   }\r\n   if (IsWritableStreamLocked(destination)) {\r\n    return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));\r\n   }\r\n   return ReadableStreamPipeTo(this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal);\r\n  };\r\n  ReadableStream.prototype.tee = function () {\r\n   if (!IsReadableStream(this)) {\r\n    throw streamBrandCheckException$1('tee');\r\n   }\r\n   var branches = ReadableStreamTee(this);\r\n   return CreateArrayFromList(branches);\r\n  };\r\n  ReadableStream.prototype.values = function (rawOptions) {\r\n   if (rawOptions === void 0) {\r\n    rawOptions = undefined;\r\n   }\r\n   if (!IsReadableStream(this)) {\r\n    throw streamBrandCheckException$1('values');\r\n   }\r\n   var options = convertIteratorOptions(rawOptions, 'First parameter');\r\n   return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\r\n  };\r\n  return ReadableStream;\r\n }();\r\n Object.defineProperties(ReadableStream.prototype, {\r\n  cancel: { enumerable: true },\r\n  getReader: { enumerable: true },\r\n  pipeThrough: { enumerable: true },\r\n  pipeTo: { enumerable: true },\r\n  tee: { enumerable: true },\r\n  values: { enumerable: true },\r\n  locked: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ReadableStream',\r\n   configurable: true\r\n  });\r\n }\r\n if (typeof SymbolPolyfill.asyncIterator === 'symbol') {\r\n  Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.asyncIterator, {\r\n   value: ReadableStream.prototype.values,\r\n   writable: true,\r\n   configurable: true\r\n  });\r\n }\r\n function CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {\r\n  if (highWaterMark === void 0) {\r\n   highWaterMark = 1;\r\n  }\r\n  if (sizeAlgorithm === void 0) {\r\n   sizeAlgorithm = function () {\r\n    return 1;\r\n   };\r\n  }\r\n  var stream = Object.create(ReadableStream.prototype);\r\n  InitializeReadableStream(stream);\r\n  var controller = Object.create(ReadableStreamDefaultController.prototype);\r\n  SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\r\n  return stream;\r\n }\r\n function InitializeReadableStream(stream) {\r\n  stream._state = 'readable';\r\n  stream._reader = undefined;\r\n  stream._storedError = undefined;\r\n  stream._disturbed = false;\r\n }\r\n function IsReadableStream(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function IsReadableStreamLocked(stream) {\r\n  if (stream._reader === undefined) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function ReadableStreamCancel(stream, reason) {\r\n  stream._disturbed = true;\r\n  if (stream._state === 'closed') {\r\n   return promiseResolvedWith(undefined);\r\n  }\r\n  if (stream._state === 'errored') {\r\n   return promiseRejectedWith(stream._storedError);\r\n  }\r\n  ReadableStreamClose(stream);\r\n  var sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\r\n  return transformPromiseWith(sourceCancelPromise, noop);\r\n }\r\n function ReadableStreamClose(stream) {\r\n  stream._state = 'closed';\r\n  var reader = stream._reader;\r\n  if (reader === undefined) {\r\n   return;\r\n  }\r\n  if (IsReadableStreamDefaultReader(reader)) {\r\n   reader._readRequests.forEach(function (readRequest) {\r\n    readRequest._closeSteps();\r\n   });\r\n   reader._readRequests = new SimpleQueue();\r\n  }\r\n  defaultReaderClosedPromiseResolve(reader);\r\n }\r\n function ReadableStreamError(stream, e) {\r\n  stream._state = 'errored';\r\n  stream._storedError = e;\r\n  var reader = stream._reader;\r\n  if (reader === undefined) {\r\n   return;\r\n  }\r\n  if (IsReadableStreamDefaultReader(reader)) {\r\n   reader._readRequests.forEach(function (readRequest) {\r\n    readRequest._errorSteps(e);\r\n   });\r\n   reader._readRequests = new SimpleQueue();\r\n  } else {\r\n   reader._readIntoRequests.forEach(function (readIntoRequest) {\r\n    readIntoRequest._errorSteps(e);\r\n   });\r\n   reader._readIntoRequests = new SimpleQueue();\r\n  }\r\n  defaultReaderClosedPromiseReject(reader, e);\r\n }\r\n function streamBrandCheckException$1(name) {\r\n  return new TypeError(\"ReadableStream.prototype.\" + name + \" can only be used on a ReadableStream\");\r\n }\r\n function convertQueuingStrategyInit(init, context) {\r\n  assertDictionary(init, context);\r\n  var highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;\r\n  assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\r\n  return { highWaterMark: convertUnrestrictedDouble(highWaterMark) };\r\n }\r\n var byteLengthSizeFunction = function size(chunk) {\r\n  return chunk.byteLength;\r\n };\r\n var ByteLengthQueuingStrategy = function () {\r\n  function ByteLengthQueuingStrategy(options) {\r\n   assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\r\n   options = convertQueuingStrategyInit(options, 'First parameter');\r\n   this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\r\n  }\r\n  Object.defineProperty(ByteLengthQueuingStrategy.prototype, \"highWaterMark\", {\r\n   get: function () {\r\n    if (!IsByteLengthQueuingStrategy(this)) {\r\n     throw byteLengthBrandCheckException('highWaterMark');\r\n    }\r\n    return this._byteLengthQueuingStrategyHighWaterMark;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  Object.defineProperty(ByteLengthQueuingStrategy.prototype, \"size\", {\r\n   get: function () {\r\n    if (!IsByteLengthQueuingStrategy(this)) {\r\n     throw byteLengthBrandCheckException('size');\r\n    }\r\n    return byteLengthSizeFunction;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  return ByteLengthQueuingStrategy;\r\n }();\r\n Object.defineProperties(ByteLengthQueuingStrategy.prototype, {\r\n  highWaterMark: { enumerable: true },\r\n  size: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(ByteLengthQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'ByteLengthQueuingStrategy',\r\n   configurable: true\r\n  });\r\n }\r\n function byteLengthBrandCheckException(name) {\r\n  return new TypeError(\"ByteLengthQueuingStrategy.prototype.\" + name + \" can only be used on a ByteLengthQueuingStrategy\");\r\n }\r\n function IsByteLengthQueuingStrategy(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n var countSizeFunction = function size() {\r\n  return 1;\r\n };\r\n var CountQueuingStrategy = function () {\r\n  function CountQueuingStrategy(options) {\r\n   assertRequiredArgument(options, 1, 'CountQueuingStrategy');\r\n   options = convertQueuingStrategyInit(options, 'First parameter');\r\n   this._countQueuingStrategyHighWaterMark = options.highWaterMark;\r\n  }\r\n  Object.defineProperty(CountQueuingStrategy.prototype, \"highWaterMark\", {\r\n   get: function () {\r\n    if (!IsCountQueuingStrategy(this)) {\r\n     throw countBrandCheckException('highWaterMark');\r\n    }\r\n    return this._countQueuingStrategyHighWaterMark;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  Object.defineProperty(CountQueuingStrategy.prototype, \"size\", {\r\n   get: function () {\r\n    if (!IsCountQueuingStrategy(this)) {\r\n     throw countBrandCheckException('size');\r\n    }\r\n    return countSizeFunction;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  return CountQueuingStrategy;\r\n }();\r\n Object.defineProperties(CountQueuingStrategy.prototype, {\r\n  highWaterMark: { enumerable: true },\r\n  size: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(CountQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'CountQueuingStrategy',\r\n   configurable: true\r\n  });\r\n }\r\n function countBrandCheckException(name) {\r\n  return new TypeError(\"CountQueuingStrategy.prototype.\" + name + \" can only be used on a CountQueuingStrategy\");\r\n }\r\n function IsCountQueuingStrategy(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function convertTransformer(original, context) {\r\n  assertDictionary(original, context);\r\n  var flush = original === null || original === void 0 ? void 0 : original.flush;\r\n  var readableType = original === null || original === void 0 ? void 0 : original.readableType;\r\n  var start = original === null || original === void 0 ? void 0 : original.start;\r\n  var transform = original === null || original === void 0 ? void 0 : original.transform;\r\n  var writableType = original === null || original === void 0 ? void 0 : original.writableType;\r\n  return {\r\n   flush: flush === undefined ? undefined : convertTransformerFlushCallback(flush, original, context + \" has member 'flush' that\"),\r\n   readableType: readableType,\r\n   start: start === undefined ? undefined : convertTransformerStartCallback(start, original, context + \" has member 'start' that\"),\r\n   transform: transform === undefined ? undefined : convertTransformerTransformCallback(transform, original, context + \" has member 'transform' that\"),\r\n   writableType: writableType\r\n  };\r\n }\r\n function convertTransformerFlushCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (controller) {\r\n   return promiseCall(fn, original, [controller]);\r\n  };\r\n }\r\n function convertTransformerStartCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (controller) {\r\n   return reflectCall(fn, original, [controller]);\r\n  };\r\n }\r\n function convertTransformerTransformCallback(fn, original, context) {\r\n  assertFunction(fn, context);\r\n  return function (chunk, controller) {\r\n   return promiseCall(fn, original, [\r\n    chunk,\r\n    controller\r\n   ]);\r\n  };\r\n }\r\n var TransformStream = function () {\r\n  function TransformStream(rawTransformer, rawWritableStrategy, rawReadableStrategy) {\r\n   if (rawTransformer === void 0) {\r\n    rawTransformer = {};\r\n   }\r\n   if (rawWritableStrategy === void 0) {\r\n    rawWritableStrategy = {};\r\n   }\r\n   if (rawReadableStrategy === void 0) {\r\n    rawReadableStrategy = {};\r\n   }\r\n   if (rawTransformer === undefined) {\r\n    rawTransformer = null;\r\n   }\r\n   var writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\r\n   var readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\r\n   var transformer = convertTransformer(rawTransformer, 'First parameter');\r\n   if (transformer.readableType !== undefined) {\r\n    throw new RangeError('Invalid readableType specified');\r\n   }\r\n   if (transformer.writableType !== undefined) {\r\n    throw new RangeError('Invalid writableType specified');\r\n   }\r\n   var readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\r\n   var readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\r\n   var writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\r\n   var writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\r\n   var startPromise_resolve;\r\n   var startPromise = newPromise(function (resolve) {\r\n    startPromise_resolve = resolve;\r\n   });\r\n   InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\r\n   SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\r\n   if (transformer.start !== undefined) {\r\n    startPromise_resolve(transformer.start(this._transformStreamController));\r\n   } else {\r\n    startPromise_resolve(undefined);\r\n   }\r\n  }\r\n  Object.defineProperty(TransformStream.prototype, \"readable\", {\r\n   get: function () {\r\n    if (!IsTransformStream(this)) {\r\n     throw streamBrandCheckException$2('readable');\r\n    }\r\n    return this._readable;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  Object.defineProperty(TransformStream.prototype, \"writable\", {\r\n   get: function () {\r\n    if (!IsTransformStream(this)) {\r\n     throw streamBrandCheckException$2('writable');\r\n    }\r\n    return this._writable;\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  return TransformStream;\r\n }();\r\n Object.defineProperties(TransformStream.prototype, {\r\n  readable: { enumerable: true },\r\n  writable: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(TransformStream.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'TransformStream',\r\n   configurable: true\r\n  });\r\n }\r\n function InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) {\r\n  function startAlgorithm() {\r\n   return startPromise;\r\n  }\r\n  function writeAlgorithm(chunk) {\r\n   return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\r\n  }\r\n  function abortAlgorithm(reason) {\r\n   return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\r\n  }\r\n  function closeAlgorithm() {\r\n   return TransformStreamDefaultSinkCloseAlgorithm(stream);\r\n  }\r\n  stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm);\r\n  function pullAlgorithm() {\r\n   return TransformStreamDefaultSourcePullAlgorithm(stream);\r\n  }\r\n  function cancelAlgorithm(reason) {\r\n   TransformStreamErrorWritableAndUnblockWrite(stream, reason);\r\n   return promiseResolvedWith(undefined);\r\n  }\r\n  stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\r\n  stream._backpressure = undefined;\r\n  stream._backpressureChangePromise = undefined;\r\n  stream._backpressureChangePromise_resolve = undefined;\r\n  TransformStreamSetBackpressure(stream, true);\r\n  stream._transformStreamController = undefined;\r\n }\r\n function IsTransformStream(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function TransformStreamError(stream, e) {\r\n  ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e);\r\n  TransformStreamErrorWritableAndUnblockWrite(stream, e);\r\n }\r\n function TransformStreamErrorWritableAndUnblockWrite(stream, e) {\r\n  TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\r\n  WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\r\n  if (stream._backpressure) {\r\n   TransformStreamSetBackpressure(stream, false);\r\n  }\r\n }\r\n function TransformStreamSetBackpressure(stream, backpressure) {\r\n  if (stream._backpressureChangePromise !== undefined) {\r\n   stream._backpressureChangePromise_resolve();\r\n  }\r\n  stream._backpressureChangePromise = newPromise(function (resolve) {\r\n   stream._backpressureChangePromise_resolve = resolve;\r\n  });\r\n  stream._backpressure = backpressure;\r\n }\r\n var TransformStreamDefaultController = function () {\r\n  function TransformStreamDefaultController() {\r\n   throw new TypeError('Illegal constructor');\r\n  }\r\n  Object.defineProperty(TransformStreamDefaultController.prototype, \"desiredSize\", {\r\n   get: function () {\r\n    if (!IsTransformStreamDefaultController(this)) {\r\n     throw defaultControllerBrandCheckException$1('desiredSize');\r\n    }\r\n    var readableController = this._controlledTransformStream._readable._readableStreamController;\r\n    return ReadableStreamDefaultControllerGetDesiredSize(readableController);\r\n   },\r\n   enumerable: false,\r\n   configurable: true\r\n  });\r\n  TransformStreamDefaultController.prototype.enqueue = function (chunk) {\r\n   if (chunk === void 0) {\r\n    chunk = undefined;\r\n   }\r\n   if (!IsTransformStreamDefaultController(this)) {\r\n    throw defaultControllerBrandCheckException$1('enqueue');\r\n   }\r\n   TransformStreamDefaultControllerEnqueue(this, chunk);\r\n  };\r\n  TransformStreamDefaultController.prototype.error = function (reason) {\r\n   if (reason === void 0) {\r\n    reason = undefined;\r\n   }\r\n   if (!IsTransformStreamDefaultController(this)) {\r\n    throw defaultControllerBrandCheckException$1('error');\r\n   }\r\n   TransformStreamDefaultControllerError(this, reason);\r\n  };\r\n  TransformStreamDefaultController.prototype.terminate = function () {\r\n   if (!IsTransformStreamDefaultController(this)) {\r\n    throw defaultControllerBrandCheckException$1('terminate');\r\n   }\r\n   TransformStreamDefaultControllerTerminate(this);\r\n  };\r\n  return TransformStreamDefaultController;\r\n }();\r\n Object.defineProperties(TransformStreamDefaultController.prototype, {\r\n  enqueue: { enumerable: true },\r\n  error: { enumerable: true },\r\n  terminate: { enumerable: true },\r\n  desiredSize: { enumerable: true }\r\n });\r\n if (typeof SymbolPolyfill.toStringTag === 'symbol') {\r\n  Object.defineProperty(TransformStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\r\n   value: 'TransformStreamDefaultController',\r\n   configurable: true\r\n  });\r\n }\r\n function IsTransformStreamDefaultController(x) {\r\n  if (!typeIsObject(x)) {\r\n   return false;\r\n  }\r\n  if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\r\n   return false;\r\n  }\r\n  return true;\r\n }\r\n function SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm) {\r\n  controller._controlledTransformStream = stream;\r\n  stream._transformStreamController = controller;\r\n  controller._transformAlgorithm = transformAlgorithm;\r\n  controller._flushAlgorithm = flushAlgorithm;\r\n }\r\n function SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) {\r\n  var controller = Object.create(TransformStreamDefaultController.prototype);\r\n  var transformAlgorithm = function (chunk) {\r\n   try {\r\n    TransformStreamDefaultControllerEnqueue(controller, chunk);\r\n    return promiseResolvedWith(undefined);\r\n   } catch (transformResultE) {\r\n    return promiseRejectedWith(transformResultE);\r\n   }\r\n  };\r\n  var flushAlgorithm = function () {\r\n   return promiseResolvedWith(undefined);\r\n  };\r\n  if (transformer.transform !== undefined) {\r\n   transformAlgorithm = function (chunk) {\r\n    return transformer.transform(chunk, controller);\r\n   };\r\n  }\r\n  if (transformer.flush !== undefined) {\r\n   flushAlgorithm = function () {\r\n    return transformer.flush(controller);\r\n   };\r\n  }\r\n  SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\r\n }\r\n function TransformStreamDefaultControllerClearAlgorithms(controller) {\r\n  controller._transformAlgorithm = undefined;\r\n  controller._flushAlgorithm = undefined;\r\n }\r\n function TransformStreamDefaultControllerEnqueue(controller, chunk) {\r\n  var stream = controller._controlledTransformStream;\r\n  var readableController = stream._readable._readableStreamController;\r\n  if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\r\n   throw new TypeError('Readable side is not in a state that permits enqueue');\r\n  }\r\n  try {\r\n   ReadableStreamDefaultControllerEnqueue(readableController, chunk);\r\n  } catch (e) {\r\n   TransformStreamErrorWritableAndUnblockWrite(stream, e);\r\n   throw stream._readable._storedError;\r\n  }\r\n  var backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\r\n  if (backpressure !== stream._backpressure) {\r\n   TransformStreamSetBackpressure(stream, true);\r\n  }\r\n }\r\n function TransformStreamDefaultControllerError(controller, e) {\r\n  TransformStreamError(controller._controlledTransformStream, e);\r\n }\r\n function TransformStreamDefaultControllerPerformTransform(controller, chunk) {\r\n  var transformPromise = controller._transformAlgorithm(chunk);\r\n  return transformPromiseWith(transformPromise, undefined, function (r) {\r\n   TransformStreamError(controller._controlledTransformStream, r);\r\n   throw r;\r\n  });\r\n }\r\n function TransformStreamDefaultControllerTerminate(controller) {\r\n  var stream = controller._controlledTransformStream;\r\n  var readableController = stream._readable._readableStreamController;\r\n  ReadableStreamDefaultControllerClose(readableController);\r\n  var error = new TypeError('TransformStream terminated');\r\n  TransformStreamErrorWritableAndUnblockWrite(stream, error);\r\n }\r\n function TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) {\r\n  var controller = stream._transformStreamController;\r\n  if (stream._backpressure) {\r\n   var backpressureChangePromise = stream._backpressureChangePromise;\r\n   return transformPromiseWith(backpressureChangePromise, function () {\r\n    var writable = stream._writable;\r\n    var state = writable._state;\r\n    if (state === 'erroring') {\r\n     throw writable._storedError;\r\n    }\r\n    return TransformStreamDefaultControllerPerformTransform(controller, chunk);\r\n   });\r\n  }\r\n  return TransformStreamDefaultControllerPerformTransform(controller, chunk);\r\n }\r\n function TransformStreamDefaultSinkAbortAlgorithm(stream, reason) {\r\n  TransformStreamError(stream, reason);\r\n  return promiseResolvedWith(undefined);\r\n }\r\n function TransformStreamDefaultSinkCloseAlgorithm(stream) {\r\n  var readable = stream._readable;\r\n  var controller = stream._transformStreamController;\r\n  var flushPromise = controller._flushAlgorithm();\r\n  TransformStreamDefaultControllerClearAlgorithms(controller);\r\n  return transformPromiseWith(flushPromise, function () {\r\n   if (readable._state === 'errored') {\r\n    throw readable._storedError;\r\n   }\r\n   ReadableStreamDefaultControllerClose(readable._readableStreamController);\r\n  }, function (r) {\r\n   TransformStreamError(stream, r);\r\n   throw readable._storedError;\r\n  });\r\n }\r\n function TransformStreamDefaultSourcePullAlgorithm(stream) {\r\n  TransformStreamSetBackpressure(stream, false);\r\n  return stream._backpressureChangePromise;\r\n }\r\n function defaultControllerBrandCheckException$1(name) {\r\n  return new TypeError(\"TransformStreamDefaultController.prototype.\" + name + \" can only be used on a TransformStreamDefaultController\");\r\n }\r\n function streamBrandCheckException$2(name) {\r\n  return new TypeError(\"TransformStream.prototype.\" + name + \" can only be used on a TransformStream\");\r\n }\r\n exports.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy;\r\n exports.CountQueuingStrategy = CountQueuingStrategy;\r\n exports.ReadableByteStreamController = ReadableByteStreamController;\r\n exports.ReadableStream = ReadableStream;\r\n exports.ReadableStreamBYOBReader = ReadableStreamBYOBReader;\r\n exports.ReadableStreamBYOBRequest = ReadableStreamBYOBRequest;\r\n exports.ReadableStreamDefaultController = ReadableStreamDefaultController;\r\n exports.ReadableStreamDefaultReader = ReadableStreamDefaultReader;\r\n exports.TransformStream = TransformStream;\r\n exports.TransformStreamDefaultController = TransformStreamDefaultController;\r\n exports.WritableStream = WritableStream;\r\n exports.WritableStreamDefaultController = WritableStreamDefaultController;\r\n exports.WritableStreamDefaultWriter = WritableStreamDefaultWriter;\r\n Object.defineProperty(exports, '__esModule', { value: true });\r\n}));\r\n\r\n/***/ }),\r\n/* 122 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(123);\r\nvar entryUnbind = __w_pdfjs_require__(127);\r\nmodule.exports = entryUnbind('String', 'padStart');\r\n\r\n/***/ }),\r\n/* 123 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar $padStart = __w_pdfjs_require__(124).start;\r\nvar WEBKIT_BUG = __w_pdfjs_require__(126);\r\n$({\r\n target: 'String',\r\n proto: true,\r\n forced: WEBKIT_BUG\r\n}, {\r\n padStart: function padStart(maxLength) {\r\n  return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 124 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar toLength = __w_pdfjs_require__(46);\r\nvar repeat = __w_pdfjs_require__(125);\r\nvar requireObjectCoercible = __w_pdfjs_require__(19);\r\nvar ceil = Math.ceil;\r\nvar createMethod = function (IS_END) {\r\n return function ($this, maxLength, fillString) {\r\n  var S = String(requireObjectCoercible($this));\r\n  var stringLength = S.length;\r\n  var fillStr = fillString === undefined ? ' ' : String(fillString);\r\n  var intMaxLength = toLength(maxLength);\r\n  var fillLen, stringFiller;\r\n  if (intMaxLength <= stringLength || fillStr == '')\r\n   return S;\r\n  fillLen = intMaxLength - stringLength;\r\n  stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length));\r\n  if (stringFiller.length > fillLen)\r\n   stringFiller = stringFiller.slice(0, fillLen);\r\n  return IS_END ? S + stringFiller : stringFiller + S;\r\n };\r\n};\r\nmodule.exports = {\r\n start: createMethod(false),\r\n end: createMethod(true)\r\n};\r\n\r\n/***/ }),\r\n/* 125 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar toInteger = __w_pdfjs_require__(47);\r\nvar requireObjectCoercible = __w_pdfjs_require__(19);\r\nmodule.exports = ''.repeat || function repeat(count) {\r\n var str = String(requireObjectCoercible(this));\r\n var result = '';\r\n var n = toInteger(count);\r\n if (n < 0 || n == Infinity)\r\n  throw RangeError('Wrong number of repetitions');\r\n for (; n > 0; (n >>>= 1) && (str += str))\r\n  if (n & 1)\r\n   result += str;\r\n return result;\r\n};\r\n\r\n/***/ }),\r\n/* 126 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar userAgent = __w_pdfjs_require__(95);\r\nmodule.exports = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\r\n\r\n/***/ }),\r\n/* 127 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar global = __w_pdfjs_require__(10);\r\nvar bind = __w_pdfjs_require__(75);\r\nvar call = Function.call;\r\nmodule.exports = function (CONSTRUCTOR, METHOD, length) {\r\n return bind(call, global[CONSTRUCTOR].prototype[METHOD], length);\r\n};\r\n\r\n/***/ }),\r\n/* 128 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(129);\r\nvar entryUnbind = __w_pdfjs_require__(127);\r\nmodule.exports = entryUnbind('String', 'padEnd');\r\n\r\n/***/ }),\r\n/* 129 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar $padEnd = __w_pdfjs_require__(124).end;\r\nvar WEBKIT_BUG = __w_pdfjs_require__(126);\r\n$({\r\n target: 'String',\r\n proto: true,\r\n forced: WEBKIT_BUG\r\n}, {\r\n padEnd: function padEnd(maxLength) {\r\n  return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 130 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(131);\r\nvar path = __w_pdfjs_require__(42);\r\nmodule.exports = path.Object.values;\r\n\r\n/***/ }),\r\n/* 131 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar $values = __w_pdfjs_require__(132).values;\r\n$({\r\n target: 'Object',\r\n stat: true\r\n}, {\r\n values: function values(O) {\r\n  return $values(O);\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 132 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar DESCRIPTORS = __w_pdfjs_require__(12);\r\nvar objectKeys = __w_pdfjs_require__(60);\r\nvar toIndexedObject = __w_pdfjs_require__(16);\r\nvar propertyIsEnumerable = __w_pdfjs_require__(14).f;\r\nvar createMethod = function (TO_ENTRIES) {\r\n return function (it) {\r\n  var O = toIndexedObject(it);\r\n  var keys = objectKeys(O);\r\n  var length = keys.length;\r\n  var i = 0;\r\n  var result = [];\r\n  var key;\r\n  while (length > i) {\r\n   key = keys[i++];\r\n   if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\r\n    result.push(TO_ENTRIES ? [\r\n     key,\r\n     O[key]\r\n    ] : O[key]);\r\n   }\r\n  }\r\n  return result;\r\n };\r\n};\r\nmodule.exports = {\r\n entries: createMethod(true),\r\n values: createMethod(false)\r\n};\r\n\r\n/***/ }),\r\n/* 133 */\r\n/***/ ((module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\n__w_pdfjs_require__(134);\r\nvar path = __w_pdfjs_require__(42);\r\nmodule.exports = path.Object.entries;\r\n\r\n/***/ }),\r\n/* 134 */\r\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {\r\n\r\nvar $ = __w_pdfjs_require__(9);\r\nvar $entries = __w_pdfjs_require__(132).entries;\r\n$({\r\n target: 'Object',\r\n stat: true\r\n}, {\r\n entries: function entries(O) {\r\n  return $entries(O);\r\n }\r\n});\r\n\r\n/***/ }),\r\n/* 135 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.clearPrimitiveCaches = clearPrimitiveCaches;\r\nexports.isCmd = isCmd;\r\nexports.isDict = isDict;\r\nexports.isEOF = isEOF;\r\nexports.isName = isName;\r\nexports.isRef = isRef;\r\nexports.isRefsEqual = isRefsEqual;\r\nexports.isStream = isStream;\r\nexports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.EOF = exports.Dict = exports.Cmd = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nvar EOF = {};\r\nexports.EOF = EOF;\r\n\r\nvar Name = function NameClosure() {\r\n  var nameCache = Object.create(null);\r\n\r\n  function Name(name) {\r\n    this.name = name;\r\n  }\r\n\r\n  Name.prototype = {};\r\n\r\n  Name.get = function Name_get(name) {\r\n    var nameValue = nameCache[name];\r\n    return nameValue ? nameValue : nameCache[name] = new Name(name);\r\n  };\r\n\r\n  Name._clearCache = function () {\r\n    nameCache = Object.create(null);\r\n  };\r\n\r\n  return Name;\r\n}();\r\n\r\nexports.Name = Name;\r\n\r\nvar Cmd = function CmdClosure() {\r\n  var cmdCache = Object.create(null);\r\n\r\n  function Cmd(cmd) {\r\n    this.cmd = cmd;\r\n  }\r\n\r\n  Cmd.prototype = {};\r\n\r\n  Cmd.get = function Cmd_get(cmd) {\r\n    var cmdValue = cmdCache[cmd];\r\n    return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd);\r\n  };\r\n\r\n  Cmd._clearCache = function () {\r\n    cmdCache = Object.create(null);\r\n  };\r\n\r\n  return Cmd;\r\n}();\r\n\r\nexports.Cmd = Cmd;\r\n\r\nvar Dict = function DictClosure() {\r\n  var nonSerializable = function nonSerializableClosure() {\r\n    return nonSerializable;\r\n  };\r\n\r\n  function Dict(xref) {\r\n    this._map = Object.create(null);\r\n    this.xref = xref;\r\n    this.objId = null;\r\n    this.suppressEncryption = false;\r\n    this.__nonSerializable__ = nonSerializable;\r\n  }\r\n\r\n  Dict.prototype = {\r\n    assignXref: function Dict_assignXref(newXref) {\r\n      this.xref = newXref;\r\n    },\r\n\r\n    get size() {\r\n      return Object.keys(this._map).length;\r\n    },\r\n\r\n    get: function get(key1, key2, key3) {\r\n      var value = this._map[key1];\r\n\r\n      if (value === undefined && key2 !== undefined) {\r\n        value = this._map[key2];\r\n\r\n        if (value === undefined && key3 !== undefined) {\r\n          value = this._map[key3];\r\n        }\r\n      }\r\n\r\n      if (value instanceof Ref && this.xref) {\r\n        return this.xref.fetch(value, this.suppressEncryption);\r\n      }\r\n\r\n      return value;\r\n    },\r\n    getAsync: function getAsync(key1, key2, key3) {\r\n      var _this = this;\r\n\r\n      return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var value;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                value = _this._map[key1];\r\n\r\n                if (value === undefined && key2 !== undefined) {\r\n                  value = _this._map[key2];\r\n\r\n                  if (value === undefined && key3 !== undefined) {\r\n                    value = _this._map[key3];\r\n                  }\r\n                }\r\n\r\n                if (!(value instanceof Ref && _this.xref)) {\r\n                  _context.next = 4;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\", _this.xref.fetchAsync(value, _this.suppressEncryption));\r\n\r\n              case 4:\r\n                return _context.abrupt(\"return\", value);\r\n\r\n              case 5:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee);\r\n      }))();\r\n    },\r\n    getArray: function getArray(key1, key2, key3) {\r\n      var value = this.get(key1, key2, key3);\r\n\r\n      if (!Array.isArray(value) || !this.xref) {\r\n        return value;\r\n      }\r\n\r\n      value = value.slice();\r\n\r\n      for (var i = 0, ii = value.length; i < ii; i++) {\r\n        if (!(value[i] instanceof Ref)) {\r\n          continue;\r\n        }\r\n\r\n        value[i] = this.xref.fetch(value[i], this.suppressEncryption);\r\n      }\r\n\r\n      return value;\r\n    },\r\n    getRaw: function Dict_getRaw(key) {\r\n      return this._map[key];\r\n    },\r\n    getKeys: function Dict_getKeys() {\r\n      return Object.keys(this._map);\r\n    },\r\n    getRawValues: function Dict_getRawValues() {\r\n      return Object.values(this._map);\r\n    },\r\n    set: function Dict_set(key, value) {\r\n      this._map[key] = value;\r\n    },\r\n    has: function Dict_has(key) {\r\n      return this._map[key] !== undefined;\r\n    },\r\n    forEach: function Dict_forEach(callback) {\r\n      for (var key in this._map) {\r\n        callback(key, this.get(key));\r\n      }\r\n    }\r\n  };\r\n\r\n  Dict.empty = function () {\r\n    var emptyDict = new Dict(null);\r\n\r\n    emptyDict.set = function (key, value) {\r\n      (0, _util.unreachable)(\"Should not call `set` on the empty dictionary.\");\r\n    };\r\n\r\n    return emptyDict;\r\n  }();\r\n\r\n  Dict.merge = function (_ref) {\r\n    var xref = _ref.xref,\r\n        dictArray = _ref.dictArray,\r\n        _ref$mergeSubDicts = _ref.mergeSubDicts,\r\n        mergeSubDicts = _ref$mergeSubDicts === void 0 ? false : _ref$mergeSubDicts;\r\n    var mergedDict = new Dict(xref);\r\n\r\n    if (!mergeSubDicts) {\r\n      var _iterator = _createForOfIteratorHelper(dictArray),\r\n          _step;\r\n\r\n      try {\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          var dict = _step.value;\r\n\r\n          if (!(dict instanceof Dict)) {\r\n            continue;\r\n          }\r\n\r\n          for (var _i = 0, _Object$entries = Object.entries(dict._map); _i < _Object$entries.length; _i++) {\r\n            var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\r\n                key = _Object$entries$_i[0],\r\n                value = _Object$entries$_i[1];\r\n\r\n            if (mergedDict._map[key] === undefined) {\r\n              mergedDict._map[key] = value;\r\n            }\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n\r\n      return mergedDict.size > 0 ? mergedDict : Dict.empty;\r\n    }\r\n\r\n    var properties = new Map();\r\n\r\n    var _iterator2 = _createForOfIteratorHelper(dictArray),\r\n        _step2;\r\n\r\n    try {\r\n      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n        var _dict = _step2.value;\r\n\r\n        if (!(_dict instanceof Dict)) {\r\n          continue;\r\n        }\r\n\r\n        for (var _i2 = 0, _Object$entries2 = Object.entries(_dict._map); _i2 < _Object$entries2.length; _i2++) {\r\n          var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2),\r\n              _key = _Object$entries2$_i[0],\r\n              _value = _Object$entries2$_i[1];\r\n\r\n          var property = properties.get(_key);\r\n\r\n          if (property === undefined) {\r\n            property = [];\r\n            properties.set(_key, property);\r\n          }\r\n\r\n          property.push(_value);\r\n        }\r\n      }\r\n    } catch (err) {\r\n      _iterator2.e(err);\r\n    } finally {\r\n      _iterator2.f();\r\n    }\r\n\r\n    var _iterator3 = _createForOfIteratorHelper(properties),\r\n        _step3;\r\n\r\n    try {\r\n      for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n        var _step3$value = _slicedToArray(_step3.value, 2),\r\n            name = _step3$value[0],\r\n            values = _step3$value[1];\r\n\r\n        if (values.length === 1 || !(values[0] instanceof Dict)) {\r\n          mergedDict._map[name] = values[0];\r\n          continue;\r\n        }\r\n\r\n        var subDict = new Dict(xref);\r\n\r\n        var _iterator4 = _createForOfIteratorHelper(values),\r\n            _step4;\r\n\r\n        try {\r\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\r\n            var _dict2 = _step4.value;\r\n\r\n            if (!(_dict2 instanceof Dict)) {\r\n              continue;\r\n            }\r\n\r\n            for (var _i3 = 0, _Object$entries3 = Object.entries(_dict2._map); _i3 < _Object$entries3.length; _i3++) {\r\n              var _Object$entries3$_i = _slicedToArray(_Object$entries3[_i3], 2),\r\n                  _key2 = _Object$entries3$_i[0],\r\n                  _value2 = _Object$entries3$_i[1];\r\n\r\n              if (subDict._map[_key2] === undefined) {\r\n                subDict._map[_key2] = _value2;\r\n              }\r\n            }\r\n          }\r\n        } catch (err) {\r\n          _iterator4.e(err);\r\n        } finally {\r\n          _iterator4.f();\r\n        }\r\n\r\n        if (subDict.size > 0) {\r\n          mergedDict._map[name] = subDict;\r\n        }\r\n      }\r\n    } catch (err) {\r\n      _iterator3.e(err);\r\n    } finally {\r\n      _iterator3.f();\r\n    }\r\n\r\n    properties.clear();\r\n    return mergedDict.size > 0 ? mergedDict : Dict.empty;\r\n  };\r\n\r\n  return Dict;\r\n}();\r\n\r\nexports.Dict = Dict;\r\n\r\nvar Ref = function RefClosure() {\r\n  var refCache = Object.create(null);\r\n\r\n  function Ref(num, gen) {\r\n    this.num = num;\r\n    this.gen = gen;\r\n  }\r\n\r\n  Ref.prototype = {\r\n    toString: function Ref_toString() {\r\n      if (this.gen === 0) {\r\n        return \"\".concat(this.num, \"R\");\r\n      }\r\n\r\n      return \"\".concat(this.num, \"R\").concat(this.gen);\r\n    }\r\n  };\r\n\r\n  Ref.get = function (num, gen) {\r\n    var key = gen === 0 ? \"\".concat(num, \"R\") : \"\".concat(num, \"R\").concat(gen);\r\n    var refValue = refCache[key];\r\n    return refValue ? refValue : refCache[key] = new Ref(num, gen);\r\n  };\r\n\r\n  Ref._clearCache = function () {\r\n    refCache = Object.create(null);\r\n  };\r\n\r\n  return Ref;\r\n}();\r\n\r\nexports.Ref = Ref;\r\n\r\nvar RefSet = /*#__PURE__*/function () {\r\n  function RefSet() {\r\n    var parent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\r\n\r\n    _classCallCheck(this, RefSet);\r\n\r\n    this._set = new Set(parent && parent._set);\r\n  }\r\n\r\n  _createClass(RefSet, [{\r\n    key: \"has\",\r\n    value: function has(ref) {\r\n      return this._set.has(ref.toString());\r\n    }\r\n  }, {\r\n    key: \"put\",\r\n    value: function put(ref) {\r\n      this._set.add(ref.toString());\r\n    }\r\n  }, {\r\n    key: \"remove\",\r\n    value: function remove(ref) {\r\n      this._set[\"delete\"](ref.toString());\r\n    }\r\n  }, {\r\n    key: \"forEach\",\r\n    value: function forEach(callback) {\r\n      var _iterator5 = _createForOfIteratorHelper(this._set.values()),\r\n          _step5;\r\n\r\n      try {\r\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\r\n          var ref = _step5.value;\r\n          callback(ref);\r\n        }\r\n      } catch (err) {\r\n        _iterator5.e(err);\r\n      } finally {\r\n        _iterator5.f();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"clear\",\r\n    value: function clear() {\r\n      this._set.clear();\r\n    }\r\n  }]);\r\n\r\n  return RefSet;\r\n}();\r\n\r\nexports.RefSet = RefSet;\r\n\r\nvar RefSetCache = /*#__PURE__*/function () {\r\n  function RefSetCache() {\r\n    _classCallCheck(this, RefSetCache);\r\n\r\n    this._map = new Map();\r\n  }\r\n\r\n  _createClass(RefSetCache, [{\r\n    key: \"size\",\r\n    get: function get() {\r\n      return this._map.size;\r\n    }\r\n  }, {\r\n    key: \"get\",\r\n    value: function get(ref) {\r\n      return this._map.get(ref.toString());\r\n    }\r\n  }, {\r\n    key: \"has\",\r\n    value: function has(ref) {\r\n      return this._map.has(ref.toString());\r\n    }\r\n  }, {\r\n    key: \"put\",\r\n    value: function put(ref, obj) {\r\n      this._map.set(ref.toString(), obj);\r\n    }\r\n  }, {\r\n    key: \"putAlias\",\r\n    value: function putAlias(ref, aliasRef) {\r\n      this._map.set(ref.toString(), this.get(aliasRef));\r\n    }\r\n  }, {\r\n    key: \"forEach\",\r\n    value: function forEach(callback) {\r\n      var _iterator6 = _createForOfIteratorHelper(this._map.values()),\r\n          _step6;\r\n\r\n      try {\r\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\r\n          var value = _step6.value;\r\n          callback(value);\r\n        }\r\n      } catch (err) {\r\n        _iterator6.e(err);\r\n      } finally {\r\n        _iterator6.f();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"clear\",\r\n    value: function clear() {\r\n      this._map.clear();\r\n    }\r\n  }]);\r\n\r\n  return RefSetCache;\r\n}();\r\n\r\nexports.RefSetCache = RefSetCache;\r\n\r\nfunction isEOF(v) {\r\n  return v === EOF;\r\n}\r\n\r\nfunction isName(v, name) {\r\n  return v instanceof Name && (name === undefined || v.name === name);\r\n}\r\n\r\nfunction isCmd(v, cmd) {\r\n  return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);\r\n}\r\n\r\nfunction isDict(v, type) {\r\n  return v instanceof Dict && (type === undefined || isName(v.get(\"Type\"), type));\r\n}\r\n\r\nfunction isRef(v) {\r\n  return v instanceof Ref;\r\n}\r\n\r\nfunction isRefsEqual(v1, v2) {\r\n  return v1.num === v2.num && v1.gen === v2.gen;\r\n}\r\n\r\nfunction isStream(v) {\r\n  return _typeof(v) === \"object\" && v !== null && v.getBytes !== undefined;\r\n}\r\n\r\nfunction clearPrimitiveCaches() {\r\n  Cmd._clearCache();\r\n\r\n  Name._clearCache();\r\n\r\n  Ref._clearCache();\r\n}\r\n\r\n/***/ }),\r\n/* 136 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.NetworkPdfManager = exports.LocalPdfManager = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _chunked_stream = __w_pdfjs_require__(137);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar _document = __w_pdfjs_require__(139);\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar BasePdfManager = /*#__PURE__*/function () {\r\n  function BasePdfManager() {\r\n    _classCallCheck(this, BasePdfManager);\r\n\r\n    if (this.constructor === BasePdfManager) {\r\n      (0, _util.unreachable)(\"Cannot initialize BasePdfManager.\");\r\n    }\r\n  }\r\n\r\n  _createClass(BasePdfManager, [{\r\n    key: \"docId\",\r\n    get: function get() {\r\n      return this._docId;\r\n    }\r\n  }, {\r\n    key: \"password\",\r\n    get: function get() {\r\n      return this._password;\r\n    }\r\n  }, {\r\n    key: \"docBaseUrl\",\r\n    get: function get() {\r\n      var docBaseUrl = null;\r\n\r\n      if (this._docBaseUrl) {\r\n        var absoluteUrl = (0, _util.createValidAbsoluteUrl)(this._docBaseUrl);\r\n\r\n        if (absoluteUrl) {\r\n          docBaseUrl = absoluteUrl.href;\r\n        } else {\r\n          (0, _util.warn)(\"Invalid absolute docBaseUrl: \\\"\".concat(this._docBaseUrl, \"\\\".\"));\r\n        }\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"docBaseUrl\", docBaseUrl);\r\n    }\r\n  }, {\r\n    key: \"onLoadedStream\",\r\n    value: function onLoadedStream() {\r\n      (0, _util.unreachable)(\"Abstract method `onLoadedStream` called\");\r\n    }\r\n  }, {\r\n    key: \"ensureDoc\",\r\n    value: function ensureDoc(prop, args) {\r\n      return this.ensure(this.pdfDocument, prop, args);\r\n    }\r\n  }, {\r\n    key: \"ensureXRef\",\r\n    value: function ensureXRef(prop, args) {\r\n      return this.ensure(this.pdfDocument.xref, prop, args);\r\n    }\r\n  }, {\r\n    key: \"ensureCatalog\",\r\n    value: function ensureCatalog(prop, args) {\r\n      return this.ensure(this.pdfDocument.catalog, prop, args);\r\n    }\r\n  }, {\r\n    key: \"getPage\",\r\n    value: function getPage(pageIndex) {\r\n      return this.pdfDocument.getPage(pageIndex);\r\n    }\r\n  }, {\r\n    key: \"fontFallback\",\r\n    value: function fontFallback(id, handler) {\r\n      return this.pdfDocument.fontFallback(id, handler);\r\n    }\r\n  }, {\r\n    key: \"cleanup\",\r\n    value: function cleanup() {\r\n      var manuallyTriggered = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n      return this.pdfDocument.cleanup(manuallyTriggered);\r\n    }\r\n  }, {\r\n    key: \"ensure\",\r\n    value: function () {\r\n      var _ensure = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(obj, prop, args) {\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                (0, _util.unreachable)(\"Abstract method `ensure` called\");\r\n\r\n              case 1:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee);\r\n      }));\r\n\r\n      function ensure(_x, _x2, _x3) {\r\n        return _ensure.apply(this, arguments);\r\n      }\r\n\r\n      return ensure;\r\n    }()\r\n  }, {\r\n    key: \"requestRange\",\r\n    value: function requestRange(begin, end) {\r\n      (0, _util.unreachable)(\"Abstract method `requestRange` called\");\r\n    }\r\n  }, {\r\n    key: \"requestLoadedStream\",\r\n    value: function requestLoadedStream() {\r\n      (0, _util.unreachable)(\"Abstract method `requestLoadedStream` called\");\r\n    }\r\n  }, {\r\n    key: \"sendProgressiveData\",\r\n    value: function sendProgressiveData(chunk) {\r\n      (0, _util.unreachable)(\"Abstract method `sendProgressiveData` called\");\r\n    }\r\n  }, {\r\n    key: \"updatePassword\",\r\n    value: function updatePassword(password) {\r\n      this._password = password;\r\n    }\r\n  }, {\r\n    key: \"terminate\",\r\n    value: function terminate(reason) {\r\n      (0, _util.unreachable)(\"Abstract method `terminate` called\");\r\n    }\r\n  }]);\r\n\r\n  return BasePdfManager;\r\n}();\r\n\r\nvar LocalPdfManager = /*#__PURE__*/function (_BasePdfManager) {\r\n  _inherits(LocalPdfManager, _BasePdfManager);\r\n\r\n  var _super = _createSuper(LocalPdfManager);\r\n\r\n  function LocalPdfManager(docId, data, password, evaluatorOptions, docBaseUrl) {\r\n    var _this;\r\n\r\n    _classCallCheck(this, LocalPdfManager);\r\n\r\n    _this = _super.call(this);\r\n    _this._docId = docId;\r\n    _this._password = password;\r\n    _this._docBaseUrl = docBaseUrl;\r\n    _this.evaluatorOptions = evaluatorOptions;\r\n    var stream = new _stream.Stream(data);\r\n    _this.pdfDocument = new _document.PDFDocument(_assertThisInitialized(_this), stream);\r\n    _this._loadedStreamPromise = Promise.resolve(stream);\r\n    return _this;\r\n  }\r\n\r\n  _createClass(LocalPdfManager, [{\r\n    key: \"ensure\",\r\n    value: function () {\r\n      var _ensure2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(obj, prop, args) {\r\n        var value;\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                value = obj[prop];\r\n\r\n                if (!(typeof value === \"function\")) {\r\n                  _context2.next = 3;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", value.apply(obj, args));\r\n\r\n              case 3:\r\n                return _context2.abrupt(\"return\", value);\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2);\r\n      }));\r\n\r\n      function ensure(_x4, _x5, _x6) {\r\n        return _ensure2.apply(this, arguments);\r\n      }\r\n\r\n      return ensure;\r\n    }()\r\n  }, {\r\n    key: \"requestRange\",\r\n    value: function requestRange(begin, end) {\r\n      return Promise.resolve();\r\n    }\r\n  }, {\r\n    key: \"requestLoadedStream\",\r\n    value: function requestLoadedStream() {}\r\n  }, {\r\n    key: \"onLoadedStream\",\r\n    value: function onLoadedStream() {\r\n      return this._loadedStreamPromise;\r\n    }\r\n  }, {\r\n    key: \"terminate\",\r\n    value: function terminate(reason) {}\r\n  }]);\r\n\r\n  return LocalPdfManager;\r\n}(BasePdfManager);\r\n\r\nexports.LocalPdfManager = LocalPdfManager;\r\n\r\nvar NetworkPdfManager = /*#__PURE__*/function (_BasePdfManager2) {\r\n  _inherits(NetworkPdfManager, _BasePdfManager2);\r\n\r\n  var _super2 = _createSuper(NetworkPdfManager);\r\n\r\n  function NetworkPdfManager(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) {\r\n    var _this2;\r\n\r\n    _classCallCheck(this, NetworkPdfManager);\r\n\r\n    _this2 = _super2.call(this);\r\n    _this2._docId = docId;\r\n    _this2._password = args.password;\r\n    _this2._docBaseUrl = docBaseUrl;\r\n    _this2.msgHandler = args.msgHandler;\r\n    _this2.evaluatorOptions = evaluatorOptions;\r\n    _this2.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, {\r\n      msgHandler: args.msgHandler,\r\n      length: args.length,\r\n      disableAutoFetch: args.disableAutoFetch,\r\n      rangeChunkSize: args.rangeChunkSize\r\n    });\r\n    _this2.pdfDocument = new _document.PDFDocument(_assertThisInitialized(_this2), _this2.streamManager.getStream());\r\n    return _this2;\r\n  }\r\n\r\n  _createClass(NetworkPdfManager, [{\r\n    key: \"ensure\",\r\n    value: function () {\r\n      var _ensure3 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3(obj, prop, args) {\r\n        var value;\r\n        return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\r\n          while (1) {\r\n            switch (_context3.prev = _context3.next) {\r\n              case 0:\r\n                _context3.prev = 0;\r\n                value = obj[prop];\r\n\r\n                if (!(typeof value === \"function\")) {\r\n                  _context3.next = 4;\r\n                  break;\r\n                }\r\n\r\n                return _context3.abrupt(\"return\", value.apply(obj, args));\r\n\r\n              case 4:\r\n                return _context3.abrupt(\"return\", value);\r\n\r\n              case 7:\r\n                _context3.prev = 7;\r\n                _context3.t0 = _context3[\"catch\"](0);\r\n\r\n                if (_context3.t0 instanceof _core_utils.MissingDataException) {\r\n                  _context3.next = 11;\r\n                  break;\r\n                }\r\n\r\n                throw _context3.t0;\r\n\r\n              case 11:\r\n                _context3.next = 13;\r\n                return this.requestRange(_context3.t0.begin, _context3.t0.end);\r\n\r\n              case 13:\r\n                return _context3.abrupt(\"return\", this.ensure(obj, prop, args));\r\n\r\n              case 14:\r\n              case \"end\":\r\n                return _context3.stop();\r\n            }\r\n          }\r\n        }, _callee3, this, [[0, 7]]);\r\n      }));\r\n\r\n      function ensure(_x7, _x8, _x9) {\r\n        return _ensure3.apply(this, arguments);\r\n      }\r\n\r\n      return ensure;\r\n    }()\r\n  }, {\r\n    key: \"requestRange\",\r\n    value: function requestRange(begin, end) {\r\n      return this.streamManager.requestRange(begin, end);\r\n    }\r\n  }, {\r\n    key: \"requestLoadedStream\",\r\n    value: function requestLoadedStream() {\r\n      this.streamManager.requestAllChunks();\r\n    }\r\n  }, {\r\n    key: \"sendProgressiveData\",\r\n    value: function sendProgressiveData(chunk) {\r\n      this.streamManager.onReceiveData({\r\n        chunk: chunk\r\n      });\r\n    }\r\n  }, {\r\n    key: \"onLoadedStream\",\r\n    value: function onLoadedStream() {\r\n      return this.streamManager.onLoadedStream();\r\n    }\r\n  }, {\r\n    key: \"terminate\",\r\n    value: function terminate(reason) {\r\n      this.streamManager.abort(reason);\r\n    }\r\n  }]);\r\n\r\n  return NetworkPdfManager;\r\n}(BasePdfManager);\r\n\r\nexports.NetworkPdfManager = NetworkPdfManager;\r\n\r\n/***/ }),\r\n/* 137 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.ChunkedStreamManager = exports.ChunkedStream = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar ChunkedStream = /*#__PURE__*/function () {\r\n  function ChunkedStream(length, chunkSize, manager) {\r\n    _classCallCheck(this, ChunkedStream);\r\n\r\n    this.bytes = new Uint8Array(length);\r\n    this.start = 0;\r\n    this.pos = 0;\r\n    this.end = length;\r\n    this.chunkSize = chunkSize;\r\n    this._loadedChunks = new Set();\r\n    this.numChunks = Math.ceil(length / chunkSize);\r\n    this.manager = manager;\r\n    this.progressiveDataLength = 0;\r\n    this.lastSuccessfulEnsureByteChunk = -1;\r\n  }\r\n\r\n  _createClass(ChunkedStream, [{\r\n    key: \"getMissingChunks\",\r\n    value: function getMissingChunks() {\r\n      var chunks = [];\r\n\r\n      for (var chunk = 0, n = this.numChunks; chunk < n; ++chunk) {\r\n        if (!this._loadedChunks.has(chunk)) {\r\n          chunks.push(chunk);\r\n        }\r\n      }\r\n\r\n      return chunks;\r\n    }\r\n  }, {\r\n    key: \"getBaseStreams\",\r\n    value: function getBaseStreams() {\r\n      return [this];\r\n    }\r\n  }, {\r\n    key: \"numChunksLoaded\",\r\n    get: function get() {\r\n      return this._loadedChunks.size;\r\n    }\r\n  }, {\r\n    key: \"allChunksLoaded\",\r\n    value: function allChunksLoaded() {\r\n      return this.numChunksLoaded === this.numChunks;\r\n    }\r\n  }, {\r\n    key: \"onReceiveData\",\r\n    value: function onReceiveData(begin, chunk) {\r\n      var chunkSize = this.chunkSize;\r\n\r\n      if (begin % chunkSize !== 0) {\r\n        throw new Error(\"Bad begin offset: \".concat(begin));\r\n      }\r\n\r\n      var end = begin + chunk.byteLength;\r\n\r\n      if (end % chunkSize !== 0 && end !== this.bytes.length) {\r\n        throw new Error(\"Bad end offset: \".concat(end));\r\n      }\r\n\r\n      this.bytes.set(new Uint8Array(chunk), begin);\r\n      var beginChunk = Math.floor(begin / chunkSize);\r\n      var endChunk = Math.floor((end - 1) / chunkSize) + 1;\r\n\r\n      for (var curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\r\n        this._loadedChunks.add(curChunk);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"onReceiveProgressiveData\",\r\n    value: function onReceiveProgressiveData(data) {\r\n      var position = this.progressiveDataLength;\r\n      var beginChunk = Math.floor(position / this.chunkSize);\r\n      this.bytes.set(new Uint8Array(data), position);\r\n      position += data.byteLength;\r\n      this.progressiveDataLength = position;\r\n      var endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize);\r\n\r\n      for (var curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\r\n        this._loadedChunks.add(curChunk);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"ensureByte\",\r\n    value: function ensureByte(pos) {\r\n      if (pos < this.progressiveDataLength) {\r\n        return;\r\n      }\r\n\r\n      var chunk = Math.floor(pos / this.chunkSize);\r\n\r\n      if (chunk === this.lastSuccessfulEnsureByteChunk) {\r\n        return;\r\n      }\r\n\r\n      if (!this._loadedChunks.has(chunk)) {\r\n        throw new _core_utils.MissingDataException(pos, pos + 1);\r\n      }\r\n\r\n      this.lastSuccessfulEnsureByteChunk = chunk;\r\n    }\r\n  }, {\r\n    key: \"ensureRange\",\r\n    value: function ensureRange(begin, end) {\r\n      if (begin >= end) {\r\n        return;\r\n      }\r\n\r\n      if (end <= this.progressiveDataLength) {\r\n        return;\r\n      }\r\n\r\n      var chunkSize = this.chunkSize;\r\n      var beginChunk = Math.floor(begin / chunkSize);\r\n      var endChunk = Math.floor((end - 1) / chunkSize) + 1;\r\n\r\n      for (var chunk = beginChunk; chunk < endChunk; ++chunk) {\r\n        if (!this._loadedChunks.has(chunk)) {\r\n          throw new _core_utils.MissingDataException(begin, end);\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"nextEmptyChunk\",\r\n    value: function nextEmptyChunk(beginChunk) {\r\n      var numChunks = this.numChunks;\r\n\r\n      for (var i = 0; i < numChunks; ++i) {\r\n        var chunk = (beginChunk + i) % numChunks;\r\n\r\n        if (!this._loadedChunks.has(chunk)) {\r\n          return chunk;\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n  }, {\r\n    key: \"hasChunk\",\r\n    value: function hasChunk(chunk) {\r\n      return this._loadedChunks.has(chunk);\r\n    }\r\n  }, {\r\n    key: \"length\",\r\n    get: function get() {\r\n      return this.end - this.start;\r\n    }\r\n  }, {\r\n    key: \"isEmpty\",\r\n    get: function get() {\r\n      return this.length === 0;\r\n    }\r\n  }, {\r\n    key: \"getByte\",\r\n    value: function getByte() {\r\n      var pos = this.pos;\r\n\r\n      if (pos >= this.end) {\r\n        return -1;\r\n      }\r\n\r\n      if (pos >= this.progressiveDataLength) {\r\n        this.ensureByte(pos);\r\n      }\r\n\r\n      return this.bytes[this.pos++];\r\n    }\r\n  }, {\r\n    key: \"getUint16\",\r\n    value: function getUint16() {\r\n      var b0 = this.getByte();\r\n      var b1 = this.getByte();\r\n\r\n      if (b0 === -1 || b1 === -1) {\r\n        return -1;\r\n      }\r\n\r\n      return (b0 << 8) + b1;\r\n    }\r\n  }, {\r\n    key: \"getInt32\",\r\n    value: function getInt32() {\r\n      var b0 = this.getByte();\r\n      var b1 = this.getByte();\r\n      var b2 = this.getByte();\r\n      var b3 = this.getByte();\r\n      return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\r\n    }\r\n  }, {\r\n    key: \"getBytes\",\r\n    value: function getBytes(length) {\r\n      var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      var bytes = this.bytes;\r\n      var pos = this.pos;\r\n      var strEnd = this.end;\r\n\r\n      if (!length) {\r\n        if (strEnd > this.progressiveDataLength) {\r\n          this.ensureRange(pos, strEnd);\r\n        }\r\n\r\n        var _subarray = bytes.subarray(pos, strEnd);\r\n\r\n        return forceClamped ? new Uint8ClampedArray(_subarray) : _subarray;\r\n      }\r\n\r\n      var end = pos + length;\r\n\r\n      if (end > strEnd) {\r\n        end = strEnd;\r\n      }\r\n\r\n      if (end > this.progressiveDataLength) {\r\n        this.ensureRange(pos, end);\r\n      }\r\n\r\n      this.pos = end;\r\n      var subarray = bytes.subarray(pos, end);\r\n      return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\r\n    }\r\n  }, {\r\n    key: \"peekByte\",\r\n    value: function peekByte() {\r\n      var peekedByte = this.getByte();\r\n\r\n      if (peekedByte !== -1) {\r\n        this.pos--;\r\n      }\r\n\r\n      return peekedByte;\r\n    }\r\n  }, {\r\n    key: \"peekBytes\",\r\n    value: function peekBytes(length) {\r\n      var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      var bytes = this.getBytes(length, forceClamped);\r\n      this.pos -= bytes.length;\r\n      return bytes;\r\n    }\r\n  }, {\r\n    key: \"getByteRange\",\r\n    value: function getByteRange(begin, end) {\r\n      if (begin < 0) {\r\n        begin = 0;\r\n      }\r\n\r\n      if (end > this.end) {\r\n        end = this.end;\r\n      }\r\n\r\n      if (end > this.progressiveDataLength) {\r\n        this.ensureRange(begin, end);\r\n      }\r\n\r\n      return this.bytes.subarray(begin, end);\r\n    }\r\n  }, {\r\n    key: \"skip\",\r\n    value: function skip(n) {\r\n      if (!n) {\r\n        n = 1;\r\n      }\r\n\r\n      this.pos += n;\r\n    }\r\n  }, {\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      this.pos = this.start;\r\n    }\r\n  }, {\r\n    key: \"moveStart\",\r\n    value: function moveStart() {\r\n      this.start = this.pos;\r\n    }\r\n  }, {\r\n    key: \"makeSubStream\",\r\n    value: function makeSubStream(start, length, dict) {\r\n      if (length) {\r\n        if (start + length > this.progressiveDataLength) {\r\n          this.ensureRange(start, start + length);\r\n        }\r\n      } else {\r\n        if (start >= this.progressiveDataLength) {\r\n          this.ensureByte(start);\r\n        }\r\n      }\r\n\r\n      function ChunkedStreamSubstream() {}\r\n\r\n      ChunkedStreamSubstream.prototype = Object.create(this);\r\n\r\n      ChunkedStreamSubstream.prototype.getMissingChunks = function () {\r\n        var chunkSize = this.chunkSize;\r\n        var beginChunk = Math.floor(this.start / chunkSize);\r\n        var endChunk = Math.floor((this.end - 1) / chunkSize) + 1;\r\n        var missingChunks = [];\r\n\r\n        for (var chunk = beginChunk; chunk < endChunk; ++chunk) {\r\n          if (!this._loadedChunks.has(chunk)) {\r\n            missingChunks.push(chunk);\r\n          }\r\n        }\r\n\r\n        return missingChunks;\r\n      };\r\n\r\n      ChunkedStreamSubstream.prototype.allChunksLoaded = function () {\r\n        if (this.numChunksLoaded === this.numChunks) {\r\n          return true;\r\n        }\r\n\r\n        return this.getMissingChunks().length === 0;\r\n      };\r\n\r\n      var subStream = new ChunkedStreamSubstream();\r\n      subStream.pos = subStream.start = start;\r\n      subStream.end = start + length || this.end;\r\n      subStream.dict = dict;\r\n      return subStream;\r\n    }\r\n  }]);\r\n\r\n  return ChunkedStream;\r\n}();\r\n\r\nexports.ChunkedStream = ChunkedStream;\r\n\r\nvar ChunkedStreamManager = /*#__PURE__*/function () {\r\n  function ChunkedStreamManager(pdfNetworkStream, args) {\r\n    _classCallCheck(this, ChunkedStreamManager);\r\n\r\n    this.length = args.length;\r\n    this.chunkSize = args.rangeChunkSize;\r\n    this.stream = new ChunkedStream(this.length, this.chunkSize, this);\r\n    this.pdfNetworkStream = pdfNetworkStream;\r\n    this.disableAutoFetch = args.disableAutoFetch;\r\n    this.msgHandler = args.msgHandler;\r\n    this.currRequestId = 0;\r\n    this._chunksNeededByRequest = new Map();\r\n    this._requestsByChunk = new Map();\r\n    this._promisesByRequest = new Map();\r\n    this.progressiveDataLength = 0;\r\n    this.aborted = false;\r\n    this._loadedStreamCapability = (0, _util.createPromiseCapability)();\r\n  }\r\n\r\n  _createClass(ChunkedStreamManager, [{\r\n    key: \"onLoadedStream\",\r\n    value: function onLoadedStream() {\r\n      return this._loadedStreamCapability.promise;\r\n    }\r\n  }, {\r\n    key: \"sendRequest\",\r\n    value: function sendRequest(begin, end) {\r\n      var _this = this;\r\n\r\n      var rangeReader = this.pdfNetworkStream.getRangeReader(begin, end);\r\n\r\n      if (!rangeReader.isStreamingSupported) {\r\n        rangeReader.onProgress = this.onProgress.bind(this);\r\n      }\r\n\r\n      var chunks = [],\r\n          loaded = 0;\r\n      var promise = new Promise(function (resolve, reject) {\r\n        var readChunk = function readChunk(chunk) {\r\n          try {\r\n            if (!chunk.done) {\r\n              var data = chunk.value;\r\n              chunks.push(data);\r\n              loaded += (0, _util.arrayByteLength)(data);\r\n\r\n              if (rangeReader.isStreamingSupported) {\r\n                _this.onProgress({\r\n                  loaded: loaded\r\n                });\r\n              }\r\n\r\n              rangeReader.read().then(readChunk, reject);\r\n              return;\r\n            }\r\n\r\n            var chunkData = (0, _util.arraysToBytes)(chunks);\r\n            chunks = null;\r\n            resolve(chunkData);\r\n          } catch (e) {\r\n            reject(e);\r\n          }\r\n        };\r\n\r\n        rangeReader.read().then(readChunk, reject);\r\n      });\r\n      promise.then(function (data) {\r\n        if (_this.aborted) {\r\n          return;\r\n        }\r\n\r\n        _this.onReceiveData({\r\n          chunk: data,\r\n          begin: begin\r\n        });\r\n      });\r\n    }\r\n  }, {\r\n    key: \"requestAllChunks\",\r\n    value: function requestAllChunks() {\r\n      var missingChunks = this.stream.getMissingChunks();\r\n\r\n      this._requestChunks(missingChunks);\r\n\r\n      return this._loadedStreamCapability.promise;\r\n    }\r\n  }, {\r\n    key: \"_requestChunks\",\r\n    value: function _requestChunks(chunks) {\r\n      var _this2 = this;\r\n\r\n      var requestId = this.currRequestId++;\r\n      var chunksNeeded = new Set();\r\n\r\n      this._chunksNeededByRequest.set(requestId, chunksNeeded);\r\n\r\n      var _iterator = _createForOfIteratorHelper(chunks),\r\n          _step;\r\n\r\n      try {\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          var chunk = _step.value;\r\n\r\n          if (!this.stream.hasChunk(chunk)) {\r\n            chunksNeeded.add(chunk);\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n\r\n      if (chunksNeeded.size === 0) {\r\n        return Promise.resolve();\r\n      }\r\n\r\n      var capability = (0, _util.createPromiseCapability)();\r\n\r\n      this._promisesByRequest.set(requestId, capability);\r\n\r\n      var chunksToRequest = [];\r\n\r\n      var _iterator2 = _createForOfIteratorHelper(chunksNeeded),\r\n          _step2;\r\n\r\n      try {\r\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n          var _chunk = _step2.value;\r\n\r\n          var requestIds = this._requestsByChunk.get(_chunk);\r\n\r\n          if (!requestIds) {\r\n            requestIds = [];\r\n\r\n            this._requestsByChunk.set(_chunk, requestIds);\r\n\r\n            chunksToRequest.push(_chunk);\r\n          }\r\n\r\n          requestIds.push(requestId);\r\n        }\r\n      } catch (err) {\r\n        _iterator2.e(err);\r\n      } finally {\r\n        _iterator2.f();\r\n      }\r\n\r\n      if (chunksToRequest.length > 0) {\r\n        var groupedChunksToRequest = this.groupChunks(chunksToRequest);\r\n\r\n        var _iterator3 = _createForOfIteratorHelper(groupedChunksToRequest),\r\n            _step3;\r\n\r\n        try {\r\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n            var groupedChunk = _step3.value;\r\n            var begin = groupedChunk.beginChunk * this.chunkSize;\r\n            var end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length);\r\n            this.sendRequest(begin, end);\r\n          }\r\n        } catch (err) {\r\n          _iterator3.e(err);\r\n        } finally {\r\n          _iterator3.f();\r\n        }\r\n      }\r\n\r\n      return capability.promise[\"catch\"](function (reason) {\r\n        if (_this2.aborted) {\r\n          return;\r\n        }\r\n\r\n        throw reason;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getStream\",\r\n    value: function getStream() {\r\n      return this.stream;\r\n    }\r\n  }, {\r\n    key: \"requestRange\",\r\n    value: function requestRange(begin, end) {\r\n      end = Math.min(end, this.length);\r\n      var beginChunk = this.getBeginChunk(begin);\r\n      var endChunk = this.getEndChunk(end);\r\n      var chunks = [];\r\n\r\n      for (var chunk = beginChunk; chunk < endChunk; ++chunk) {\r\n        chunks.push(chunk);\r\n      }\r\n\r\n      return this._requestChunks(chunks);\r\n    }\r\n  }, {\r\n    key: \"requestRanges\",\r\n    value: function requestRanges() {\r\n      var ranges = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\r\n      var chunksToRequest = [];\r\n\r\n      var _iterator4 = _createForOfIteratorHelper(ranges),\r\n          _step4;\r\n\r\n      try {\r\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\r\n          var range = _step4.value;\r\n          var beginChunk = this.getBeginChunk(range.begin);\r\n          var endChunk = this.getEndChunk(range.end);\r\n\r\n          for (var chunk = beginChunk; chunk < endChunk; ++chunk) {\r\n            if (!chunksToRequest.includes(chunk)) {\r\n              chunksToRequest.push(chunk);\r\n            }\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator4.e(err);\r\n      } finally {\r\n        _iterator4.f();\r\n      }\r\n\r\n      chunksToRequest.sort(function (a, b) {\r\n        return a - b;\r\n      });\r\n      return this._requestChunks(chunksToRequest);\r\n    }\r\n  }, {\r\n    key: \"groupChunks\",\r\n    value: function groupChunks(chunks) {\r\n      var groupedChunks = [];\r\n      var beginChunk = -1;\r\n      var prevChunk = -1;\r\n\r\n      for (var i = 0, ii = chunks.length; i < ii; ++i) {\r\n        var chunk = chunks[i];\r\n\r\n        if (beginChunk < 0) {\r\n          beginChunk = chunk;\r\n        }\r\n\r\n        if (prevChunk >= 0 && prevChunk + 1 !== chunk) {\r\n          groupedChunks.push({\r\n            beginChunk: beginChunk,\r\n            endChunk: prevChunk + 1\r\n          });\r\n          beginChunk = chunk;\r\n        }\r\n\r\n        if (i + 1 === chunks.length) {\r\n          groupedChunks.push({\r\n            beginChunk: beginChunk,\r\n            endChunk: chunk + 1\r\n          });\r\n        }\r\n\r\n        prevChunk = chunk;\r\n      }\r\n\r\n      return groupedChunks;\r\n    }\r\n  }, {\r\n    key: \"onProgress\",\r\n    value: function onProgress(args) {\r\n      this.msgHandler.send(\"DocProgress\", {\r\n        loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded,\r\n        total: this.length\r\n      });\r\n    }\r\n  }, {\r\n    key: \"onReceiveData\",\r\n    value: function onReceiveData(args) {\r\n      var chunk = args.chunk;\r\n      var isProgressive = args.begin === undefined;\r\n      var begin = isProgressive ? this.progressiveDataLength : args.begin;\r\n      var end = begin + chunk.byteLength;\r\n      var beginChunk = Math.floor(begin / this.chunkSize);\r\n      var endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize);\r\n\r\n      if (isProgressive) {\r\n        this.stream.onReceiveProgressiveData(chunk);\r\n        this.progressiveDataLength = end;\r\n      } else {\r\n        this.stream.onReceiveData(begin, chunk);\r\n      }\r\n\r\n      if (this.stream.allChunksLoaded()) {\r\n        this._loadedStreamCapability.resolve(this.stream);\r\n      }\r\n\r\n      var loadedRequests = [];\r\n\r\n      for (var curChunk = beginChunk; curChunk < endChunk; ++curChunk) {\r\n        var requestIds = this._requestsByChunk.get(curChunk);\r\n\r\n        if (!requestIds) {\r\n          continue;\r\n        }\r\n\r\n        this._requestsByChunk[\"delete\"](curChunk);\r\n\r\n        var _iterator5 = _createForOfIteratorHelper(requestIds),\r\n            _step5;\r\n\r\n        try {\r\n          for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\r\n            var requestId = _step5.value;\r\n\r\n            var chunksNeeded = this._chunksNeededByRequest.get(requestId);\r\n\r\n            if (chunksNeeded.has(curChunk)) {\r\n              chunksNeeded[\"delete\"](curChunk);\r\n            }\r\n\r\n            if (chunksNeeded.size > 0) {\r\n              continue;\r\n            }\r\n\r\n            loadedRequests.push(requestId);\r\n          }\r\n        } catch (err) {\r\n          _iterator5.e(err);\r\n        } finally {\r\n          _iterator5.f();\r\n        }\r\n      }\r\n\r\n      if (!this.disableAutoFetch && this._requestsByChunk.size === 0) {\r\n        var nextEmptyChunk;\r\n\r\n        if (this.stream.numChunksLoaded === 1) {\r\n          var lastChunk = this.stream.numChunks - 1;\r\n\r\n          if (!this.stream.hasChunk(lastChunk)) {\r\n            nextEmptyChunk = lastChunk;\r\n          }\r\n        } else {\r\n          nextEmptyChunk = this.stream.nextEmptyChunk(endChunk);\r\n        }\r\n\r\n        if (Number.isInteger(nextEmptyChunk)) {\r\n          this._requestChunks([nextEmptyChunk]);\r\n        }\r\n      }\r\n\r\n      for (var _i = 0, _loadedRequests = loadedRequests; _i < _loadedRequests.length; _i++) {\r\n        var _requestId = _loadedRequests[_i];\r\n\r\n        var capability = this._promisesByRequest.get(_requestId);\r\n\r\n        this._promisesByRequest[\"delete\"](_requestId);\r\n\r\n        capability.resolve();\r\n      }\r\n\r\n      this.msgHandler.send(\"DocProgress\", {\r\n        loaded: this.stream.numChunksLoaded * this.chunkSize,\r\n        total: this.length\r\n      });\r\n    }\r\n  }, {\r\n    key: \"onError\",\r\n    value: function onError(err) {\r\n      this._loadedStreamCapability.reject(err);\r\n    }\r\n  }, {\r\n    key: \"getBeginChunk\",\r\n    value: function getBeginChunk(begin) {\r\n      return Math.floor(begin / this.chunkSize);\r\n    }\r\n  }, {\r\n    key: \"getEndChunk\",\r\n    value: function getEndChunk(end) {\r\n      return Math.floor((end - 1) / this.chunkSize) + 1;\r\n    }\r\n  }, {\r\n    key: \"abort\",\r\n    value: function abort(reason) {\r\n      this.aborted = true;\r\n\r\n      if (this.pdfNetworkStream) {\r\n        this.pdfNetworkStream.cancelAllRequests(reason);\r\n      }\r\n\r\n      var _iterator6 = _createForOfIteratorHelper(this._promisesByRequest.values()),\r\n          _step6;\r\n\r\n      try {\r\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\r\n          var capability = _step6.value;\r\n          capability.reject(reason);\r\n        }\r\n      } catch (err) {\r\n        _iterator6.e(err);\r\n      } finally {\r\n        _iterator6.f();\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return ChunkedStreamManager;\r\n}();\r\n\r\nexports.ChunkedStreamManager = ChunkedStreamManager;\r\n\r\n/***/ }),\r\n/* 138 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.collectActions = collectActions;\r\nexports.escapePDFName = escapePDFName;\r\nexports.getArrayLookupTableFactory = getArrayLookupTableFactory;\r\nexports.getInheritableProperty = getInheritableProperty;\r\nexports.getLookupTableFactory = getLookupTableFactory;\r\nexports.isWhiteSpace = isWhiteSpace;\r\nexports.log2 = log2;\r\nexports.parseXFAPath = parseXFAPath;\r\nexports.readInt8 = readInt8;\r\nexports.readUint16 = readUint16;\r\nexports.readUint32 = readUint32;\r\nexports.toRomanNumerals = toRomanNumerals;\r\nexports.XRefParseException = exports.XRefEntryException = exports.MissingDataException = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction getLookupTableFactory(initializer) {\r\n  var lookup;\r\n  return function () {\r\n    if (initializer) {\r\n      lookup = Object.create(null);\r\n      initializer(lookup);\r\n      initializer = null;\r\n    }\r\n\r\n    return lookup;\r\n  };\r\n}\r\n\r\nfunction getArrayLookupTableFactory(initializer) {\r\n  var lookup;\r\n  return function () {\r\n    if (initializer) {\r\n      var arr = initializer();\r\n      initializer = null;\r\n      lookup = Object.create(null);\r\n\r\n      for (var i = 0, ii = arr.length; i < ii; i += 2) {\r\n        lookup[arr[i]] = arr[i + 1];\r\n      }\r\n\r\n      arr = null;\r\n    }\r\n\r\n    return lookup;\r\n  };\r\n}\r\n\r\nvar MissingDataException = /*#__PURE__*/function (_BaseException) {\r\n  _inherits(MissingDataException, _BaseException);\r\n\r\n  var _super = _createSuper(MissingDataException);\r\n\r\n  function MissingDataException(begin, end) {\r\n    var _this;\r\n\r\n    _classCallCheck(this, MissingDataException);\r\n\r\n    _this = _super.call(this, \"Missing data [\".concat(begin, \", \").concat(end, \")\"));\r\n    _this.begin = begin;\r\n    _this.end = end;\r\n    return _this;\r\n  }\r\n\r\n  return MissingDataException;\r\n}(_util.BaseException);\r\n\r\nexports.MissingDataException = MissingDataException;\r\n\r\nvar XRefEntryException = /*#__PURE__*/function (_BaseException2) {\r\n  _inherits(XRefEntryException, _BaseException2);\r\n\r\n  var _super2 = _createSuper(XRefEntryException);\r\n\r\n  function XRefEntryException() {\r\n    _classCallCheck(this, XRefEntryException);\r\n\r\n    return _super2.apply(this, arguments);\r\n  }\r\n\r\n  return XRefEntryException;\r\n}(_util.BaseException);\r\n\r\nexports.XRefEntryException = XRefEntryException;\r\n\r\nvar XRefParseException = /*#__PURE__*/function (_BaseException3) {\r\n  _inherits(XRefParseException, _BaseException3);\r\n\r\n  var _super3 = _createSuper(XRefParseException);\r\n\r\n  function XRefParseException() {\r\n    _classCallCheck(this, XRefParseException);\r\n\r\n    return _super3.apply(this, arguments);\r\n  }\r\n\r\n  return XRefParseException;\r\n}(_util.BaseException);\r\n\r\nexports.XRefParseException = XRefParseException;\r\n\r\nfunction getInheritableProperty(_ref) {\r\n  var dict = _ref.dict,\r\n      key = _ref.key,\r\n      _ref$getArray = _ref.getArray,\r\n      getArray = _ref$getArray === void 0 ? false : _ref$getArray,\r\n      _ref$stopWhenFound = _ref.stopWhenFound,\r\n      stopWhenFound = _ref$stopWhenFound === void 0 ? true : _ref$stopWhenFound;\r\n  var LOOP_LIMIT = 100;\r\n  var loopCount = 0;\r\n  var values;\r\n\r\n  while (dict) {\r\n    var value = getArray ? dict.getArray(key) : dict.get(key);\r\n\r\n    if (value !== undefined) {\r\n      if (stopWhenFound) {\r\n        return value;\r\n      }\r\n\r\n      if (!values) {\r\n        values = [];\r\n      }\r\n\r\n      values.push(value);\r\n    }\r\n\r\n    if (++loopCount > LOOP_LIMIT) {\r\n      (0, _util.warn)(\"getInheritableProperty: maximum loop count exceeded for \\\"\".concat(key, \"\\\"\"));\r\n      break;\r\n    }\r\n\r\n    dict = dict.get(\"Parent\");\r\n  }\r\n\r\n  return values;\r\n}\r\n\r\nvar ROMAN_NUMBER_MAP = [\"\", \"C\", \"CC\", \"CCC\", \"CD\", \"D\", \"DC\", \"DCC\", \"DCCC\", \"CM\", \"\", \"X\", \"XX\", \"XXX\", \"XL\", \"L\", \"LX\", \"LXX\", \"LXXX\", \"XC\", \"\", \"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\"];\r\n\r\nfunction toRomanNumerals(number) {\r\n  var lowerCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n  (0, _util.assert)(Number.isInteger(number) && number > 0, \"The number should be a positive integer.\");\r\n  var romanBuf = [];\r\n  var pos;\r\n\r\n  while (number >= 1000) {\r\n    number -= 1000;\r\n    romanBuf.push(\"M\");\r\n  }\r\n\r\n  pos = number / 100 | 0;\r\n  number %= 100;\r\n  romanBuf.push(ROMAN_NUMBER_MAP[pos]);\r\n  pos = number / 10 | 0;\r\n  number %= 10;\r\n  romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]);\r\n  romanBuf.push(ROMAN_NUMBER_MAP[20 + number]);\r\n  var romanStr = romanBuf.join(\"\");\r\n  return lowerCase ? romanStr.toLowerCase() : romanStr;\r\n}\r\n\r\nfunction log2(x) {\r\n  if (x <= 0) {\r\n    return 0;\r\n  }\r\n\r\n  return Math.ceil(Math.log2(x));\r\n}\r\n\r\nfunction readInt8(data, offset) {\r\n  return data[offset] << 24 >> 24;\r\n}\r\n\r\nfunction readUint16(data, offset) {\r\n  return data[offset] << 8 | data[offset + 1];\r\n}\r\n\r\nfunction readUint32(data, offset) {\r\n  return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0;\r\n}\r\n\r\nfunction isWhiteSpace(ch) {\r\n  return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a;\r\n}\r\n\r\nfunction parseXFAPath(path) {\r\n  var positionPattern = /(.+)\\[([0-9]+)\\]$/;\r\n  return path.split(\".\").map(function (component) {\r\n    var m = component.match(positionPattern);\r\n\r\n    if (m) {\r\n      return {\r\n        name: m[1],\r\n        pos: parseInt(m[2], 10)\r\n      };\r\n    }\r\n\r\n    return {\r\n      name: component,\r\n      pos: 0\r\n    };\r\n  });\r\n}\r\n\r\nfunction escapePDFName(str) {\r\n  var buffer = [];\r\n  var start = 0;\r\n\r\n  for (var i = 0, ii = str.length; i < ii; i++) {\r\n    var _char = str.charCodeAt(i);\r\n\r\n    if (_char < 0x21 || _char > 0x7e || _char === 0x23 || _char === 0x28 || _char === 0x29 || _char === 0x3c || _char === 0x3e || _char === 0x5b || _char === 0x5d || _char === 0x7b || _char === 0x7d || _char === 0x2f || _char === 0x25) {\r\n      if (start < i) {\r\n        buffer.push(str.substring(start, i));\r\n      }\r\n\r\n      buffer.push(\"#\".concat(_char.toString(16)));\r\n      start = i + 1;\r\n    }\r\n  }\r\n\r\n  if (buffer.length === 0) {\r\n    return str;\r\n  }\r\n\r\n  if (start < str.length) {\r\n    buffer.push(str.substring(start, str.length));\r\n  }\r\n\r\n  return buffer.join(\"\");\r\n}\r\n\r\nfunction _collectJS(entry, xref, list, parents) {\r\n  if (!entry) {\r\n    return;\r\n  }\r\n\r\n  var parent = null;\r\n\r\n  if ((0, _primitives.isRef)(entry)) {\r\n    if (parents.has(entry)) {\r\n      return;\r\n    }\r\n\r\n    parent = entry;\r\n    parents.put(parent);\r\n    entry = xref.fetch(entry);\r\n  }\r\n\r\n  if (Array.isArray(entry)) {\r\n    var _iterator = _createForOfIteratorHelper(entry),\r\n        _step;\r\n\r\n    try {\r\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n        var element = _step.value;\r\n\r\n        _collectJS(element, xref, list, parents);\r\n      }\r\n    } catch (err) {\r\n      _iterator.e(err);\r\n    } finally {\r\n      _iterator.f();\r\n    }\r\n  } else if (entry instanceof _primitives.Dict) {\r\n    if ((0, _primitives.isName)(entry.get(\"S\"), \"JavaScript\") && entry.has(\"JS\")) {\r\n      var js = entry.get(\"JS\");\r\n      var code;\r\n\r\n      if ((0, _primitives.isStream)(js)) {\r\n        code = (0, _util.bytesToString)(js.getBytes());\r\n      } else {\r\n        code = js;\r\n      }\r\n\r\n      code = (0, _util.stringToPDFString)(code);\r\n\r\n      if (code) {\r\n        list.push(code);\r\n      }\r\n    }\r\n\r\n    _collectJS(entry.getRaw(\"Next\"), xref, list, parents);\r\n  }\r\n\r\n  if (parent) {\r\n    parents.remove(parent);\r\n  }\r\n}\r\n\r\nfunction collectActions(xref, dict, eventType) {\r\n  var actions = Object.create(null);\r\n\r\n  if (dict.has(\"AA\")) {\r\n    var additionalActions = dict.get(\"AA\");\r\n\r\n    var _iterator2 = _createForOfIteratorHelper(additionalActions.getKeys()),\r\n        _step2;\r\n\r\n    try {\r\n      for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n        var key = _step2.value;\r\n        var action = eventType[key];\r\n\r\n        if (!action) {\r\n          continue;\r\n        }\r\n\r\n        var actionDict = additionalActions.getRaw(key);\r\n        var parents = new _primitives.RefSet();\r\n        var list = [];\r\n\r\n        _collectJS(actionDict, xref, list, parents);\r\n\r\n        if (list.length > 0) {\r\n          actions[action] = list;\r\n        }\r\n      }\r\n    } catch (err) {\r\n      _iterator2.e(err);\r\n    } finally {\r\n      _iterator2.f();\r\n    }\r\n  }\r\n\r\n  if (dict.has(\"A\")) {\r\n    var _actionDict = dict.get(\"A\");\r\n\r\n    var _parents = new _primitives.RefSet();\r\n\r\n    var _list = [];\r\n\r\n    _collectJS(_actionDict, xref, _list, _parents);\r\n\r\n    if (_list.length > 0) {\r\n      actions.Action = _list;\r\n    }\r\n  }\r\n\r\n  return (0, _util.objectSize)(actions) > 0 ? actions : null;\r\n}\r\n\r\n/***/ }),\r\n/* 139 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFDocument = exports.Page = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _obj = __w_pdfjs_require__(140);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nvar _annotation = __w_pdfjs_require__(155);\r\n\r\nvar _crypto = __w_pdfjs_require__(152);\r\n\r\nvar _parser = __w_pdfjs_require__(141);\r\n\r\nvar _operator_list = __w_pdfjs_require__(174);\r\n\r\nvar _evaluator = __w_pdfjs_require__(157);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar DEFAULT_USER_UNIT = 1.0;\r\nvar LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];\r\n\r\nfunction isAnnotationRenderable(annotation, intent) {\r\n  return intent === \"display\" && annotation.viewable || intent === \"print\" && annotation.printable;\r\n}\r\n\r\nvar Page = /*#__PURE__*/function () {\r\n  function Page(_ref) {\r\n    var pdfManager = _ref.pdfManager,\r\n        xref = _ref.xref,\r\n        pageIndex = _ref.pageIndex,\r\n        pageDict = _ref.pageDict,\r\n        ref = _ref.ref,\r\n        globalIdFactory = _ref.globalIdFactory,\r\n        fontCache = _ref.fontCache,\r\n        builtInCMapCache = _ref.builtInCMapCache,\r\n        globalImageCache = _ref.globalImageCache,\r\n        nonBlendModesSet = _ref.nonBlendModesSet;\r\n\r\n    _classCallCheck(this, Page);\r\n\r\n    this.pdfManager = pdfManager;\r\n    this.pageIndex = pageIndex;\r\n    this.pageDict = pageDict;\r\n    this.xref = xref;\r\n    this.ref = ref;\r\n    this.fontCache = fontCache;\r\n    this.builtInCMapCache = builtInCMapCache;\r\n    this.globalImageCache = globalImageCache;\r\n    this.nonBlendModesSet = nonBlendModesSet;\r\n    this.evaluatorOptions = pdfManager.evaluatorOptions;\r\n    this.resourcesPromise = null;\r\n    var idCounters = {\r\n      obj: 0\r\n    };\r\n\r\n    this._localIdFactory = /*#__PURE__*/function (_globalIdFactory) {\r\n      _inherits(_class, _globalIdFactory);\r\n\r\n      var _super = _createSuper(_class);\r\n\r\n      function _class() {\r\n        _classCallCheck(this, _class);\r\n\r\n        return _super.apply(this, arguments);\r\n      }\r\n\r\n      _createClass(_class, null, [{\r\n        key: \"createObjId\",\r\n        value: function createObjId() {\r\n          return \"p\".concat(pageIndex, \"_\").concat(++idCounters.obj);\r\n        }\r\n      }]);\r\n\r\n      return _class;\r\n    }(globalIdFactory);\r\n  }\r\n\r\n  _createClass(Page, [{\r\n    key: \"_getInheritableProperty\",\r\n    value: function _getInheritableProperty(key) {\r\n      var getArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      var value = (0, _core_utils.getInheritableProperty)({\r\n        dict: this.pageDict,\r\n        key: key,\r\n        getArray: getArray,\r\n        stopWhenFound: false\r\n      });\r\n\r\n      if (!Array.isArray(value)) {\r\n        return value;\r\n      }\r\n\r\n      if (value.length === 1 || !(0, _primitives.isDict)(value[0])) {\r\n        return value[0];\r\n      }\r\n\r\n      return _primitives.Dict.merge({\r\n        xref: this.xref,\r\n        dictArray: value\r\n      });\r\n    }\r\n  }, {\r\n    key: \"content\",\r\n    get: function get() {\r\n      return this.pageDict.get(\"Contents\");\r\n    }\r\n  }, {\r\n    key: \"resources\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"resources\", this._getInheritableProperty(\"Resources\") || _primitives.Dict.empty);\r\n    }\r\n  }, {\r\n    key: \"_getBoundingBox\",\r\n    value: function _getBoundingBox(name) {\r\n      var box = this._getInheritableProperty(name, true);\r\n\r\n      if (Array.isArray(box) && box.length === 4) {\r\n        if (box[2] - box[0] !== 0 && box[3] - box[1] !== 0) {\r\n          return box;\r\n        }\r\n\r\n        (0, _util.warn)(\"Empty /\".concat(name, \" entry.\"));\r\n      }\r\n\r\n      return null;\r\n    }\r\n  }, {\r\n    key: \"mediaBox\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"mediaBox\", this._getBoundingBox(\"MediaBox\") || LETTER_SIZE_MEDIABOX);\r\n    }\r\n  }, {\r\n    key: \"cropBox\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"cropBox\", this._getBoundingBox(\"CropBox\") || this.mediaBox);\r\n    }\r\n  }, {\r\n    key: \"userUnit\",\r\n    get: function get() {\r\n      var obj = this.pageDict.get(\"UserUnit\");\r\n\r\n      if (!(0, _util.isNum)(obj) || obj <= 0) {\r\n        obj = DEFAULT_USER_UNIT;\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"userUnit\", obj);\r\n    }\r\n  }, {\r\n    key: \"view\",\r\n    get: function get() {\r\n      var cropBox = this.cropBox,\r\n          mediaBox = this.mediaBox;\r\n      var view;\r\n\r\n      if (cropBox === mediaBox || (0, _util.isArrayEqual)(cropBox, mediaBox)) {\r\n        view = mediaBox;\r\n      } else {\r\n        var box = _util.Util.intersect(cropBox, mediaBox);\r\n\r\n        if (box && box[2] - box[0] !== 0 && box[3] - box[1] !== 0) {\r\n          view = box;\r\n        } else {\r\n          (0, _util.warn)(\"Empty /CropBox and /MediaBox intersection.\");\r\n        }\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"view\", view || mediaBox);\r\n    }\r\n  }, {\r\n    key: \"rotate\",\r\n    get: function get() {\r\n      var rotate = this._getInheritableProperty(\"Rotate\") || 0;\r\n\r\n      if (rotate % 90 !== 0) {\r\n        rotate = 0;\r\n      } else if (rotate >= 360) {\r\n        rotate = rotate % 360;\r\n      } else if (rotate < 0) {\r\n        rotate = (rotate % 360 + 360) % 360;\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"rotate\", rotate);\r\n    }\r\n  }, {\r\n    key: \"getContentStream\",\r\n    value: function getContentStream() {\r\n      var content = this.content;\r\n      var stream;\r\n\r\n      if (Array.isArray(content)) {\r\n        var xref = this.xref;\r\n        var streams = [];\r\n\r\n        var _iterator = _createForOfIteratorHelper(content),\r\n            _step;\r\n\r\n        try {\r\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n            var subStream = _step.value;\r\n            streams.push(xref.fetchIfRef(subStream));\r\n          }\r\n        } catch (err) {\r\n          _iterator.e(err);\r\n        } finally {\r\n          _iterator.f();\r\n        }\r\n\r\n        stream = new _stream.StreamsSequenceStream(streams);\r\n      } else if ((0, _primitives.isStream)(content)) {\r\n        stream = content;\r\n      } else {\r\n        stream = new _stream.NullStream();\r\n      }\r\n\r\n      return stream;\r\n    }\r\n  }, {\r\n    key: \"save\",\r\n    value: function save(handler, task, annotationStorage) {\r\n      var partialEvaluator = new _evaluator.PartialEvaluator({\r\n        xref: this.xref,\r\n        handler: handler,\r\n        pageIndex: this.pageIndex,\r\n        idFactory: this._localIdFactory,\r\n        fontCache: this.fontCache,\r\n        builtInCMapCache: this.builtInCMapCache,\r\n        globalImageCache: this.globalImageCache,\r\n        options: this.evaluatorOptions\r\n      });\r\n      return this._parsedAnnotations.then(function (annotations) {\r\n        var newRefsPromises = [];\r\n\r\n        var _iterator2 = _createForOfIteratorHelper(annotations),\r\n            _step2;\r\n\r\n        try {\r\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n            var annotation = _step2.value;\r\n\r\n            if (!isAnnotationRenderable(annotation, \"print\")) {\r\n              continue;\r\n            }\r\n\r\n            newRefsPromises.push(annotation.save(partialEvaluator, task, annotationStorage)[\"catch\"](function (reason) {\r\n              (0, _util.warn)(\"save - ignoring annotation data during \" + \"\\\"\".concat(task.name, \"\\\" task: \\\"\").concat(reason, \"\\\".\"));\r\n              return null;\r\n            }));\r\n          }\r\n        } catch (err) {\r\n          _iterator2.e(err);\r\n        } finally {\r\n          _iterator2.f();\r\n        }\r\n\r\n        return Promise.all(newRefsPromises);\r\n      });\r\n    }\r\n  }, {\r\n    key: \"loadResources\",\r\n    value: function loadResources(keys) {\r\n      var _this = this;\r\n\r\n      if (!this.resourcesPromise) {\r\n        this.resourcesPromise = this.pdfManager.ensure(this, \"resources\");\r\n      }\r\n\r\n      return this.resourcesPromise.then(function () {\r\n        var objectLoader = new _obj.ObjectLoader(_this.resources, keys, _this.xref);\r\n        return objectLoader.load();\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getOperatorList\",\r\n    value: function getOperatorList(_ref2) {\r\n      var _this2 = this;\r\n\r\n      var handler = _ref2.handler,\r\n          sink = _ref2.sink,\r\n          task = _ref2.task,\r\n          intent = _ref2.intent,\r\n          renderInteractiveForms = _ref2.renderInteractiveForms,\r\n          annotationStorage = _ref2.annotationStorage;\r\n      var contentStreamPromise = this.pdfManager.ensure(this, \"getContentStream\");\r\n      var resourcesPromise = this.loadResources([\"ExtGState\", \"ColorSpace\", \"Pattern\", \"Shading\", \"XObject\", \"Font\"]);\r\n      var partialEvaluator = new _evaluator.PartialEvaluator({\r\n        xref: this.xref,\r\n        handler: handler,\r\n        pageIndex: this.pageIndex,\r\n        idFactory: this._localIdFactory,\r\n        fontCache: this.fontCache,\r\n        builtInCMapCache: this.builtInCMapCache,\r\n        globalImageCache: this.globalImageCache,\r\n        options: this.evaluatorOptions\r\n      });\r\n      var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);\r\n      var pageListPromise = dataPromises.then(function (_ref3) {\r\n        var _ref4 = _slicedToArray(_ref3, 1),\r\n            contentStream = _ref4[0];\r\n\r\n        var opList = new _operator_list.OperatorList(intent, sink);\r\n        handler.send(\"StartRenderPage\", {\r\n          transparency: partialEvaluator.hasBlendModes(_this2.resources, _this2.nonBlendModesSet),\r\n          pageIndex: _this2.pageIndex,\r\n          intent: intent\r\n        });\r\n        return partialEvaluator.getOperatorList({\r\n          stream: contentStream,\r\n          task: task,\r\n          resources: _this2.resources,\r\n          operatorList: opList\r\n        }).then(function () {\r\n          return opList;\r\n        });\r\n      });\r\n      return Promise.all([pageListPromise, this._parsedAnnotations]).then(function (_ref5) {\r\n        var _ref6 = _slicedToArray(_ref5, 2),\r\n            pageOpList = _ref6[0],\r\n            annotations = _ref6[1];\r\n\r\n        if (annotations.length === 0) {\r\n          pageOpList.flush(true);\r\n          return {\r\n            length: pageOpList.totalLength\r\n          };\r\n        }\r\n\r\n        var opListPromises = [];\r\n\r\n        var _iterator3 = _createForOfIteratorHelper(annotations),\r\n            _step3;\r\n\r\n        try {\r\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n            var annotation = _step3.value;\r\n\r\n            if (isAnnotationRenderable(annotation, intent) && !annotation.isHidden(annotationStorage)) {\r\n              opListPromises.push(annotation.getOperatorList(partialEvaluator, task, renderInteractiveForms, annotationStorage)[\"catch\"](function (reason) {\r\n                (0, _util.warn)(\"getOperatorList - ignoring annotation data during \" + \"\\\"\".concat(task.name, \"\\\" task: \\\"\").concat(reason, \"\\\".\"));\r\n                return null;\r\n              }));\r\n            }\r\n          }\r\n        } catch (err) {\r\n          _iterator3.e(err);\r\n        } finally {\r\n          _iterator3.f();\r\n        }\r\n\r\n        return Promise.all(opListPromises).then(function (opLists) {\r\n          pageOpList.addOp(_util.OPS.beginAnnotations, []);\r\n\r\n          var _iterator4 = _createForOfIteratorHelper(opLists),\r\n              _step4;\r\n\r\n          try {\r\n            for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\r\n              var opList = _step4.value;\r\n              pageOpList.addOpList(opList);\r\n            }\r\n          } catch (err) {\r\n            _iterator4.e(err);\r\n          } finally {\r\n            _iterator4.f();\r\n          }\r\n\r\n          pageOpList.addOp(_util.OPS.endAnnotations, []);\r\n          pageOpList.flush(true);\r\n          return {\r\n            length: pageOpList.totalLength\r\n          };\r\n        });\r\n      });\r\n    }\r\n  }, {\r\n    key: \"extractTextContent\",\r\n    value: function extractTextContent(_ref7) {\r\n      var _this3 = this;\r\n\r\n      var handler = _ref7.handler,\r\n          task = _ref7.task,\r\n          normalizeWhitespace = _ref7.normalizeWhitespace,\r\n          sink = _ref7.sink,\r\n          combineTextItems = _ref7.combineTextItems;\r\n      var contentStreamPromise = this.pdfManager.ensure(this, \"getContentStream\");\r\n      var resourcesPromise = this.loadResources([\"ExtGState\", \"XObject\", \"Font\"]);\r\n      var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);\r\n      return dataPromises.then(function (_ref8) {\r\n        var _ref9 = _slicedToArray(_ref8, 1),\r\n            contentStream = _ref9[0];\r\n\r\n        var partialEvaluator = new _evaluator.PartialEvaluator({\r\n          xref: _this3.xref,\r\n          handler: handler,\r\n          pageIndex: _this3.pageIndex,\r\n          idFactory: _this3._localIdFactory,\r\n          fontCache: _this3.fontCache,\r\n          builtInCMapCache: _this3.builtInCMapCache,\r\n          globalImageCache: _this3.globalImageCache,\r\n          options: _this3.evaluatorOptions\r\n        });\r\n        return partialEvaluator.getTextContent({\r\n          stream: contentStream,\r\n          task: task,\r\n          resources: _this3.resources,\r\n          normalizeWhitespace: normalizeWhitespace,\r\n          combineTextItems: combineTextItems,\r\n          sink: sink\r\n        });\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getAnnotationsData\",\r\n    value: function getAnnotationsData(intent) {\r\n      return this._parsedAnnotations.then(function (annotations) {\r\n        var annotationsData = [];\r\n\r\n        for (var i = 0, ii = annotations.length; i < ii; i++) {\r\n          if (!intent || isAnnotationRenderable(annotations[i], intent)) {\r\n            annotationsData.push(annotations[i].data);\r\n          }\r\n        }\r\n\r\n        return annotationsData;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"annotations\",\r\n    get: function get() {\r\n      var annots = this._getInheritableProperty(\"Annots\");\r\n\r\n      return (0, _util.shadow)(this, \"annotations\", Array.isArray(annots) ? annots : []);\r\n    }\r\n  }, {\r\n    key: \"_parsedAnnotations\",\r\n    get: function get() {\r\n      var _this4 = this;\r\n\r\n      var parsedAnnotations = this.pdfManager.ensure(this, \"annotations\").then(function () {\r\n        var annotationPromises = [];\r\n\r\n        var _iterator5 = _createForOfIteratorHelper(_this4.annotations),\r\n            _step5;\r\n\r\n        try {\r\n          for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\r\n            var annotationRef = _step5.value;\r\n            annotationPromises.push(_annotation.AnnotationFactory.create(_this4.xref, annotationRef, _this4.pdfManager, _this4._localIdFactory)[\"catch\"](function (reason) {\r\n              (0, _util.warn)(\"_parsedAnnotations: \\\"\".concat(reason, \"\\\".\"));\r\n              return null;\r\n            }));\r\n          }\r\n        } catch (err) {\r\n          _iterator5.e(err);\r\n        } finally {\r\n          _iterator5.f();\r\n        }\r\n\r\n        return Promise.all(annotationPromises).then(function (annotations) {\r\n          return annotations.filter(function (annotation) {\r\n            return !!annotation;\r\n          });\r\n        });\r\n      });\r\n      return (0, _util.shadow)(this, \"_parsedAnnotations\", parsedAnnotations);\r\n    }\r\n  }, {\r\n    key: \"jsActions\",\r\n    get: function get() {\r\n      var actions = (0, _core_utils.collectActions)(this.xref, this.pageDict, _util.PageActionEventType);\r\n      return (0, _util.shadow)(this, \"jsActions\", actions);\r\n    }\r\n  }]);\r\n\r\n  return Page;\r\n}();\r\n\r\nexports.Page = Page;\r\nvar PDF_HEADER_SIGNATURE = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d]);\r\nvar STARTXREF_SIGNATURE = new Uint8Array([0x73, 0x74, 0x61, 0x72, 0x74, 0x78, 0x72, 0x65, 0x66]);\r\nvar ENDOBJ_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a]);\r\nvar FINGERPRINT_FIRST_BYTES = 1024;\r\nvar EMPTY_FINGERPRINT = \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";\r\nvar PDF_HEADER_VERSION_REGEXP = /^[1-9]\\.[0-9]$/;\r\n\r\nfunction find(stream, signature) {\r\n  var limit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1024;\r\n  var backwards = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\r\n  var signatureLength = signature.length;\r\n  var scanBytes = stream.peekBytes(limit);\r\n  var scanLength = scanBytes.length - signatureLength;\r\n\r\n  if (scanLength <= 0) {\r\n    return false;\r\n  }\r\n\r\n  if (backwards) {\r\n    var signatureEnd = signatureLength - 1;\r\n    var pos = scanBytes.length - 1;\r\n\r\n    while (pos >= signatureEnd) {\r\n      var j = 0;\r\n\r\n      while (j < signatureLength && scanBytes[pos - j] === signature[signatureEnd - j]) {\r\n        j++;\r\n      }\r\n\r\n      if (j >= signatureLength) {\r\n        stream.pos += pos - signatureEnd;\r\n        return true;\r\n      }\r\n\r\n      pos--;\r\n    }\r\n  } else {\r\n    var _pos = 0;\r\n\r\n    while (_pos <= scanLength) {\r\n      var _j = 0;\r\n\r\n      while (_j < signatureLength && scanBytes[_pos + _j] === signature[_j]) {\r\n        _j++;\r\n      }\r\n\r\n      if (_j >= signatureLength) {\r\n        stream.pos += _pos;\r\n        return true;\r\n      }\r\n\r\n      _pos++;\r\n    }\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nvar PDFDocument = /*#__PURE__*/function () {\r\n  function PDFDocument(pdfManager, arg) {\r\n    _classCallCheck(this, PDFDocument);\r\n\r\n    var stream;\r\n\r\n    if ((0, _primitives.isStream)(arg)) {\r\n      stream = arg;\r\n    } else if ((0, _util.isArrayBuffer)(arg)) {\r\n      stream = new _stream.Stream(arg);\r\n    } else {\r\n      throw new Error(\"PDFDocument: Unknown argument type\");\r\n    }\r\n\r\n    if (stream.length <= 0) {\r\n      throw new _util.InvalidPDFException(\"The PDF file is empty, i.e. its size is zero bytes.\");\r\n    }\r\n\r\n    this.pdfManager = pdfManager;\r\n    this.stream = stream;\r\n    this.xref = new _obj.XRef(stream, pdfManager);\r\n    this._pagePromises = [];\r\n    this._version = null;\r\n    var idCounters = {\r\n      font: 0\r\n    };\r\n\r\n    this._globalIdFactory = /*#__PURE__*/function () {\r\n      function _class2() {\r\n        _classCallCheck(this, _class2);\r\n      }\r\n\r\n      _createClass(_class2, null, [{\r\n        key: \"getDocId\",\r\n        value: function getDocId() {\r\n          return \"g_\".concat(pdfManager.docId);\r\n        }\r\n      }, {\r\n        key: \"createFontId\",\r\n        value: function createFontId() {\r\n          return \"f\".concat(++idCounters.font);\r\n        }\r\n      }, {\r\n        key: \"createObjId\",\r\n        value: function createObjId() {\r\n          (0, _util.unreachable)(\"Abstract method `createObjId` called.\");\r\n        }\r\n      }]);\r\n\r\n      return _class2;\r\n    }();\r\n  }\r\n\r\n  _createClass(PDFDocument, [{\r\n    key: \"parse\",\r\n    value: function parse(recoveryMode) {\r\n      this.xref.parse(recoveryMode);\r\n      this.catalog = new _obj.Catalog(this.pdfManager, this.xref);\r\n\r\n      if (this.catalog.version) {\r\n        this._version = this.catalog.version;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"linearization\",\r\n    get: function get() {\r\n      var linearization = null;\r\n\r\n      try {\r\n        linearization = _parser.Linearization.create(this.stream);\r\n      } catch (err) {\r\n        if (err instanceof _core_utils.MissingDataException) {\r\n          throw err;\r\n        }\r\n\r\n        (0, _util.info)(err);\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"linearization\", linearization);\r\n    }\r\n  }, {\r\n    key: \"startXRef\",\r\n    get: function get() {\r\n      var stream = this.stream;\r\n      var startXRef = 0;\r\n\r\n      if (this.linearization) {\r\n        stream.reset();\r\n\r\n        if (find(stream, ENDOBJ_SIGNATURE)) {\r\n          startXRef = stream.pos + 6 - stream.start;\r\n        }\r\n      } else {\r\n        var step = 1024;\r\n        var startXRefLength = STARTXREF_SIGNATURE.length;\r\n        var found = false,\r\n            pos = stream.end;\r\n\r\n        while (!found && pos > 0) {\r\n          pos -= step - startXRefLength;\r\n\r\n          if (pos < 0) {\r\n            pos = 0;\r\n          }\r\n\r\n          stream.pos = pos;\r\n          found = find(stream, STARTXREF_SIGNATURE, step, true);\r\n        }\r\n\r\n        if (found) {\r\n          stream.skip(9);\r\n          var ch;\r\n\r\n          do {\r\n            ch = stream.getByte();\r\n          } while ((0, _core_utils.isWhiteSpace)(ch));\r\n\r\n          var str = \"\";\r\n\r\n          while (ch >= 0x20 && ch <= 0x39) {\r\n            str += String.fromCharCode(ch);\r\n            ch = stream.getByte();\r\n          }\r\n\r\n          startXRef = parseInt(str, 10);\r\n\r\n          if (isNaN(startXRef)) {\r\n            startXRef = 0;\r\n          }\r\n        }\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"startXRef\", startXRef);\r\n    }\r\n  }, {\r\n    key: \"checkHeader\",\r\n    value: function checkHeader() {\r\n      var stream = this.stream;\r\n      stream.reset();\r\n\r\n      if (!find(stream, PDF_HEADER_SIGNATURE)) {\r\n        return;\r\n      }\r\n\r\n      stream.moveStart();\r\n      var MAX_PDF_VERSION_LENGTH = 12;\r\n      var version = \"\",\r\n          ch;\r\n\r\n      while ((ch = stream.getByte()) > 0x20) {\r\n        if (version.length >= MAX_PDF_VERSION_LENGTH) {\r\n          break;\r\n        }\r\n\r\n        version += String.fromCharCode(ch);\r\n      }\r\n\r\n      if (!this._version) {\r\n        this._version = version.substring(5);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"parseStartXRef\",\r\n    value: function parseStartXRef() {\r\n      this.xref.setStartXRef(this.startXRef);\r\n    }\r\n  }, {\r\n    key: \"numPages\",\r\n    get: function get() {\r\n      var linearization = this.linearization;\r\n      var num = linearization ? linearization.numPages : this.catalog.numPages;\r\n      return (0, _util.shadow)(this, \"numPages\", num);\r\n    }\r\n  }, {\r\n    key: \"_hasOnlyDocumentSignatures\",\r\n    value: function _hasOnlyDocumentSignatures(fields) {\r\n      var _this5 = this;\r\n\r\n      var recursionDepth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\r\n      var RECURSION_LIMIT = 10;\r\n\r\n      if (!Array.isArray(fields)) {\r\n        return false;\r\n      }\r\n\r\n      return fields.every(function (field) {\r\n        field = _this5.xref.fetchIfRef(field);\r\n\r\n        if (!(field instanceof _primitives.Dict)) {\r\n          return false;\r\n        }\r\n\r\n        if (field.has(\"Kids\")) {\r\n          if (++recursionDepth > RECURSION_LIMIT) {\r\n            (0, _util.warn)(\"_hasOnlyDocumentSignatures: maximum recursion depth reached\");\r\n            return false;\r\n          }\r\n\r\n          return _this5._hasOnlyDocumentSignatures(field.get(\"Kids\"), recursionDepth);\r\n        }\r\n\r\n        var isSignature = (0, _primitives.isName)(field.get(\"FT\"), \"Sig\");\r\n        var rectangle = field.get(\"Rect\");\r\n        var isInvisible = Array.isArray(rectangle) && rectangle.every(function (value) {\r\n          return value === 0;\r\n        });\r\n        return isSignature && isInvisible;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"formInfo\",\r\n    get: function get() {\r\n      var formInfo = {\r\n        hasFields: false,\r\n        hasAcroForm: false,\r\n        hasXfa: false\r\n      };\r\n      var acroForm = this.catalog.acroForm;\r\n\r\n      if (!acroForm) {\r\n        return (0, _util.shadow)(this, \"formInfo\", formInfo);\r\n      }\r\n\r\n      try {\r\n        var fields = acroForm.get(\"Fields\");\r\n        var hasFields = Array.isArray(fields) && fields.length > 0;\r\n        formInfo.hasFields = hasFields;\r\n        var xfa = acroForm.get(\"XFA\");\r\n        formInfo.hasXfa = Array.isArray(xfa) && xfa.length > 0 || (0, _primitives.isStream)(xfa) && !xfa.isEmpty;\r\n        var sigFlags = acroForm.get(\"SigFlags\");\r\n\r\n        var hasOnlyDocumentSignatures = !!(sigFlags & 0x1) && this._hasOnlyDocumentSignatures(fields);\r\n\r\n        formInfo.hasAcroForm = hasFields && !hasOnlyDocumentSignatures;\r\n      } catch (ex) {\r\n        if (ex instanceof _core_utils.MissingDataException) {\r\n          throw ex;\r\n        }\r\n\r\n        (0, _util.warn)(\"Cannot fetch form information: \\\"\".concat(ex, \"\\\".\"));\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"formInfo\", formInfo);\r\n    }\r\n  }, {\r\n    key: \"documentInfo\",\r\n    get: function get() {\r\n      var DocumentInfoValidators = {\r\n        Title: _util.isString,\r\n        Author: _util.isString,\r\n        Subject: _util.isString,\r\n        Keywords: _util.isString,\r\n        Creator: _util.isString,\r\n        Producer: _util.isString,\r\n        CreationDate: _util.isString,\r\n        ModDate: _util.isString,\r\n        Trapped: _primitives.isName\r\n      };\r\n      var version = this._version;\r\n\r\n      if (typeof version !== \"string\" || !PDF_HEADER_VERSION_REGEXP.test(version)) {\r\n        (0, _util.warn)(\"Invalid PDF header version number: \".concat(version));\r\n        version = null;\r\n      }\r\n\r\n      var docInfo = {\r\n        PDFFormatVersion: version,\r\n        IsLinearized: !!this.linearization,\r\n        IsAcroFormPresent: this.formInfo.hasAcroForm,\r\n        IsXFAPresent: this.formInfo.hasXfa,\r\n        IsCollectionPresent: !!this.catalog.collection\r\n      };\r\n      var infoDict;\r\n\r\n      try {\r\n        infoDict = this.xref.trailer.get(\"Info\");\r\n      } catch (err) {\r\n        if (err instanceof _core_utils.MissingDataException) {\r\n          throw err;\r\n        }\r\n\r\n        (0, _util.info)(\"The document information dictionary is invalid.\");\r\n      }\r\n\r\n      if ((0, _primitives.isDict)(infoDict)) {\r\n        var _iterator6 = _createForOfIteratorHelper(infoDict.getKeys()),\r\n            _step6;\r\n\r\n        try {\r\n          for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\r\n            var key = _step6.value;\r\n            var value = infoDict.get(key);\r\n\r\n            if (DocumentInfoValidators[key]) {\r\n              if (DocumentInfoValidators[key](value)) {\r\n                docInfo[key] = typeof value !== \"string\" ? value : (0, _util.stringToPDFString)(value);\r\n              } else {\r\n                (0, _util.info)(\"Bad value in document info for \\\"\".concat(key, \"\\\".\"));\r\n              }\r\n            } else if (typeof key === \"string\") {\r\n              var customValue = void 0;\r\n\r\n              if ((0, _util.isString)(value)) {\r\n                customValue = (0, _util.stringToPDFString)(value);\r\n              } else if ((0, _primitives.isName)(value) || (0, _util.isNum)(value) || (0, _util.isBool)(value)) {\r\n                customValue = value;\r\n              } else {\r\n                (0, _util.info)(\"Unsupported value in document info for (custom) \\\"\".concat(key, \"\\\".\"));\r\n                continue;\r\n              }\r\n\r\n              if (!docInfo.Custom) {\r\n                docInfo.Custom = Object.create(null);\r\n              }\r\n\r\n              docInfo.Custom[key] = customValue;\r\n            }\r\n          }\r\n        } catch (err) {\r\n          _iterator6.e(err);\r\n        } finally {\r\n          _iterator6.f();\r\n        }\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"documentInfo\", docInfo);\r\n    }\r\n  }, {\r\n    key: \"fingerprint\",\r\n    get: function get() {\r\n      var hash;\r\n      var idArray = this.xref.trailer.get(\"ID\");\r\n\r\n      if (Array.isArray(idArray) && idArray[0] && (0, _util.isString)(idArray[0]) && idArray[0] !== EMPTY_FINGERPRINT) {\r\n        hash = (0, _util.stringToBytes)(idArray[0]);\r\n      } else {\r\n        hash = (0, _crypto.calculateMD5)(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES);\r\n      }\r\n\r\n      var fingerprintBuf = [];\r\n\r\n      for (var i = 0, ii = hash.length; i < ii; i++) {\r\n        var hex = hash[i].toString(16);\r\n        fingerprintBuf.push(hex.padStart(2, \"0\"));\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"fingerprint\", fingerprintBuf.join(\"\"));\r\n    }\r\n  }, {\r\n    key: \"_getLinearizationPage\",\r\n    value: function _getLinearizationPage(pageIndex) {\r\n      var catalog = this.catalog,\r\n          linearization = this.linearization;\r\n\r\n      var ref = _primitives.Ref.get(linearization.objectNumberFirst, 0);\r\n\r\n      return this.xref.fetchAsync(ref).then(function (obj) {\r\n        if ((0, _primitives.isDict)(obj, \"Page\") || (0, _primitives.isDict)(obj) && !obj.has(\"Type\") && obj.has(\"Contents\")) {\r\n          if (ref && !catalog.pageKidsCountCache.has(ref)) {\r\n            catalog.pageKidsCountCache.put(ref, 1);\r\n          }\r\n\r\n          return [obj, ref];\r\n        }\r\n\r\n        throw new _util.FormatError(\"The Linearization dictionary doesn't point \" + \"to a valid Page dictionary.\");\r\n      })[\"catch\"](function (reason) {\r\n        (0, _util.info)(reason);\r\n        return catalog.getPageDict(pageIndex);\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getPage\",\r\n    value: function getPage(pageIndex) {\r\n      var _this6 = this;\r\n\r\n      if (this._pagePromises[pageIndex] !== undefined) {\r\n        return this._pagePromises[pageIndex];\r\n      }\r\n\r\n      var catalog = this.catalog,\r\n          linearization = this.linearization;\r\n      var promise = linearization && linearization.pageFirst === pageIndex ? this._getLinearizationPage(pageIndex) : catalog.getPageDict(pageIndex);\r\n      return this._pagePromises[pageIndex] = promise.then(function (_ref10) {\r\n        var _ref11 = _slicedToArray(_ref10, 2),\r\n            pageDict = _ref11[0],\r\n            ref = _ref11[1];\r\n\r\n        return new Page({\r\n          pdfManager: _this6.pdfManager,\r\n          xref: _this6.xref,\r\n          pageIndex: pageIndex,\r\n          pageDict: pageDict,\r\n          ref: ref,\r\n          globalIdFactory: _this6._globalIdFactory,\r\n          fontCache: catalog.fontCache,\r\n          builtInCMapCache: catalog.builtInCMapCache,\r\n          globalImageCache: catalog.globalImageCache,\r\n          nonBlendModesSet: catalog.nonBlendModesSet\r\n        });\r\n      });\r\n    }\r\n  }, {\r\n    key: \"checkFirstPage\",\r\n    value: function checkFirstPage() {\r\n      var _this7 = this;\r\n\r\n      return this.getPage(0)[\"catch\"]( /*#__PURE__*/function () {\r\n        var _ref12 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(reason) {\r\n          return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n            while (1) {\r\n              switch (_context.prev = _context.next) {\r\n                case 0:\r\n                  if (!(reason instanceof _core_utils.XRefEntryException)) {\r\n                    _context.next = 5;\r\n                    break;\r\n                  }\r\n\r\n                  _this7._pagePromises.length = 0;\r\n                  _context.next = 4;\r\n                  return _this7.cleanup();\r\n\r\n                case 4:\r\n                  throw new _core_utils.XRefParseException();\r\n\r\n                case 5:\r\n                case \"end\":\r\n                  return _context.stop();\r\n              }\r\n            }\r\n          }, _callee);\r\n        }));\r\n\r\n        return function (_x) {\r\n          return _ref12.apply(this, arguments);\r\n        };\r\n      }());\r\n    }\r\n  }, {\r\n    key: \"fontFallback\",\r\n    value: function fontFallback(id, handler) {\r\n      return this.catalog.fontFallback(id, handler);\r\n    }\r\n  }, {\r\n    key: \"cleanup\",\r\n    value: function () {\r\n      var _cleanup = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n        var manuallyTriggered,\r\n            _args2 = arguments;\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                manuallyTriggered = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : false;\r\n                return _context2.abrupt(\"return\", this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _primitives.clearPrimitiveCaches)());\r\n\r\n              case 2:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this);\r\n      }));\r\n\r\n      function cleanup() {\r\n        return _cleanup.apply(this, arguments);\r\n      }\r\n\r\n      return cleanup;\r\n    }()\r\n  }, {\r\n    key: \"_collectFieldObjects\",\r\n    value: function _collectFieldObjects(name, fieldRef, promises) {\r\n      var field = this.xref.fetchIfRef(fieldRef);\r\n\r\n      if (field.has(\"T\")) {\r\n        var partName = (0, _util.stringToPDFString)(field.get(\"T\"));\r\n\r\n        if (name === \"\") {\r\n          name = partName;\r\n        } else {\r\n          name = \"\".concat(name, \".\").concat(partName);\r\n        }\r\n      }\r\n\r\n      if (!promises.has(name)) {\r\n        promises.set(name, []);\r\n      }\r\n\r\n      promises.get(name).push(_annotation.AnnotationFactory.create(this.xref, fieldRef, this.pdfManager, this._localIdFactory).then(function (annotation) {\r\n        return annotation && annotation.getFieldObject();\r\n      })[\"catch\"](function (reason) {\r\n        (0, _util.warn)(\"_collectFieldObjects: \\\"\".concat(reason, \"\\\".\"));\r\n        return null;\r\n      }));\r\n\r\n      if (field.has(\"Kids\")) {\r\n        var kids = field.get(\"Kids\");\r\n\r\n        var _iterator7 = _createForOfIteratorHelper(kids),\r\n            _step7;\r\n\r\n        try {\r\n          for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\r\n            var kid = _step7.value;\r\n\r\n            this._collectFieldObjects(name, kid, promises);\r\n          }\r\n        } catch (err) {\r\n          _iterator7.e(err);\r\n        } finally {\r\n          _iterator7.f();\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"fieldObjects\",\r\n    get: function get() {\r\n      if (!this.formInfo.hasFields) {\r\n        return (0, _util.shadow)(this, \"fieldObjects\", Promise.resolve(null));\r\n      }\r\n\r\n      var allFields = Object.create(null);\r\n      var fieldPromises = new Map();\r\n\r\n      var _iterator8 = _createForOfIteratorHelper(this.catalog.acroForm.get(\"Fields\")),\r\n          _step8;\r\n\r\n      try {\r\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\r\n          var fieldRef = _step8.value;\r\n\r\n          this._collectFieldObjects(\"\", fieldRef, fieldPromises);\r\n        }\r\n      } catch (err) {\r\n        _iterator8.e(err);\r\n      } finally {\r\n        _iterator8.f();\r\n      }\r\n\r\n      var allPromises = [];\r\n\r\n      var _iterator9 = _createForOfIteratorHelper(fieldPromises),\r\n          _step9;\r\n\r\n      try {\r\n        var _loop = function _loop() {\r\n          var _step9$value = _slicedToArray(_step9.value, 2),\r\n              name = _step9$value[0],\r\n              promises = _step9$value[1];\r\n\r\n          allPromises.push(Promise.all(promises).then(function (fields) {\r\n            fields = fields.filter(function (field) {\r\n              return !!field;\r\n            });\r\n\r\n            if (fields.length > 0) {\r\n              allFields[name] = fields;\r\n            }\r\n          }));\r\n        };\r\n\r\n        for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\r\n          _loop();\r\n        }\r\n      } catch (err) {\r\n        _iterator9.e(err);\r\n      } finally {\r\n        _iterator9.f();\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"fieldObjects\", Promise.all(allPromises).then(function () {\r\n        return allFields;\r\n      }));\r\n    }\r\n  }, {\r\n    key: \"hasJSActions\",\r\n    get: function get() {\r\n      var _this8 = this;\r\n\r\n      return (0, _util.shadow)(this, \"hasJSActions\", this.fieldObjects.then(function (fieldObjects) {\r\n        return fieldObjects !== null && Object.values(fieldObjects).some(function (fieldObject) {\r\n          return fieldObject.some(function (object) {\r\n            return object.actions !== null;\r\n          });\r\n        }) || !!_this8.catalog.jsActions;\r\n      }));\r\n    }\r\n  }, {\r\n    key: \"calculationOrderIds\",\r\n    get: function get() {\r\n      var acroForm = this.catalog.acroForm;\r\n\r\n      if (!acroForm || !acroForm.has(\"CO\")) {\r\n        return (0, _util.shadow)(this, \"calculationOrderIds\", null);\r\n      }\r\n\r\n      var calculationOrder = acroForm.get(\"CO\");\r\n\r\n      if (!Array.isArray(calculationOrder) || calculationOrder.length === 0) {\r\n        return (0, _util.shadow)(this, \"calculationOrderIds\", null);\r\n      }\r\n\r\n      var ids = calculationOrder.filter(_primitives.isRef).map(function (ref) {\r\n        return ref.toString();\r\n      });\r\n\r\n      if (ids.length === 0) {\r\n        return (0, _util.shadow)(this, \"calculationOrderIds\", null);\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"calculationOrderIds\", ids);\r\n    }\r\n  }]);\r\n\r\n  return PDFDocument;\r\n}();\r\n\r\nexports.PDFDocument = PDFDocument;\r\n\r\n/***/ }),\r\n/* 140 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.XRef = exports.ObjectLoader = exports.FileSpec = exports.Catalog = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar _parser = __w_pdfjs_require__(141);\r\n\r\nvar _crypto = __w_pdfjs_require__(152);\r\n\r\nvar _colorspace = __w_pdfjs_require__(153);\r\n\r\nvar _image_utils = __w_pdfjs_require__(154);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction fetchDestination(dest) {\r\n  return (0, _primitives.isDict)(dest) ? dest.get(\"D\") : dest;\r\n}\r\n\r\nvar Catalog = /*#__PURE__*/function () {\r\n  function Catalog(pdfManager, xref) {\r\n    _classCallCheck(this, Catalog);\r\n\r\n    this.pdfManager = pdfManager;\r\n    this.xref = xref;\r\n    this._catDict = xref.getCatalogObj();\r\n\r\n    if (!(0, _primitives.isDict)(this._catDict)) {\r\n      throw new _util.FormatError(\"Catalog object is not a dictionary.\");\r\n    }\r\n\r\n    this.fontCache = new _primitives.RefSetCache();\r\n    this.builtInCMapCache = new Map();\r\n    this.globalImageCache = new _image_utils.GlobalImageCache();\r\n    this.pageKidsCountCache = new _primitives.RefSetCache();\r\n    this.nonBlendModesSet = new _primitives.RefSet();\r\n  }\r\n\r\n  _createClass(Catalog, [{\r\n    key: \"version\",\r\n    get: function get() {\r\n      var version = this._catDict.get(\"Version\");\r\n\r\n      if (!(0, _primitives.isName)(version)) {\r\n        return (0, _util.shadow)(this, \"version\", null);\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"version\", version.name);\r\n    }\r\n  }, {\r\n    key: \"collection\",\r\n    get: function get() {\r\n      var collection = null;\r\n\r\n      try {\r\n        var obj = this._catDict.get(\"Collection\");\r\n\r\n        if ((0, _primitives.isDict)(obj) && obj.size > 0) {\r\n          collection = obj;\r\n        }\r\n      } catch (ex) {\r\n        if (ex instanceof _core_utils.MissingDataException) {\r\n          throw ex;\r\n        }\r\n\r\n        (0, _util.info)(\"Cannot fetch Collection entry; assuming no collection is present.\");\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"collection\", collection);\r\n    }\r\n  }, {\r\n    key: \"acroForm\",\r\n    get: function get() {\r\n      var acroForm = null;\r\n\r\n      try {\r\n        var obj = this._catDict.get(\"AcroForm\");\r\n\r\n        if ((0, _primitives.isDict)(obj) && obj.size > 0) {\r\n          acroForm = obj;\r\n        }\r\n      } catch (ex) {\r\n        if (ex instanceof _core_utils.MissingDataException) {\r\n          throw ex;\r\n        }\r\n\r\n        (0, _util.info)(\"Cannot fetch AcroForm entry; assuming no forms are present.\");\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"acroForm\", acroForm);\r\n    }\r\n  }, {\r\n    key: \"metadata\",\r\n    get: function get() {\r\n      var streamRef = this._catDict.getRaw(\"Metadata\");\r\n\r\n      if (!(0, _primitives.isRef)(streamRef)) {\r\n        return (0, _util.shadow)(this, \"metadata\", null);\r\n      }\r\n\r\n      var suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata);\r\n      var stream = this.xref.fetch(streamRef, suppressEncryption);\r\n      var metadata;\r\n\r\n      if (stream && (0, _primitives.isDict)(stream.dict)) {\r\n        var type = stream.dict.get(\"Type\");\r\n        var subtype = stream.dict.get(\"Subtype\");\r\n\r\n        if ((0, _primitives.isName)(type, \"Metadata\") && (0, _primitives.isName)(subtype, \"XML\")) {\r\n          try {\r\n            metadata = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes()));\r\n          } catch (e) {\r\n            if (e instanceof _core_utils.MissingDataException) {\r\n              throw e;\r\n            }\r\n\r\n            (0, _util.info)(\"Skipping invalid metadata.\");\r\n          }\r\n        }\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"metadata\", metadata);\r\n    }\r\n  }, {\r\n    key: \"markInfo\",\r\n    get: function get() {\r\n      var markInfo = null;\r\n\r\n      try {\r\n        markInfo = this._readMarkInfo();\r\n      } catch (ex) {\r\n        if (ex instanceof _core_utils.MissingDataException) {\r\n          throw ex;\r\n        }\r\n\r\n        (0, _util.warn)(\"Unable to read mark info.\");\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"markInfo\", markInfo);\r\n    }\r\n  }, {\r\n    key: \"_readMarkInfo\",\r\n    value: function _readMarkInfo() {\r\n      var obj = this._catDict.get(\"MarkInfo\");\r\n\r\n      if (!(0, _primitives.isDict)(obj)) {\r\n        return null;\r\n      }\r\n\r\n      var markInfo = Object.assign(Object.create(null), {\r\n        Marked: false,\r\n        UserProperties: false,\r\n        Suspects: false\r\n      });\r\n\r\n      for (var key in markInfo) {\r\n        if (!obj.has(key)) {\r\n          continue;\r\n        }\r\n\r\n        var value = obj.get(key);\r\n\r\n        if (!(0, _util.isBool)(value)) {\r\n          continue;\r\n        }\r\n\r\n        markInfo[key] = value;\r\n      }\r\n\r\n      return markInfo;\r\n    }\r\n  }, {\r\n    key: \"toplevelPagesDict\",\r\n    get: function get() {\r\n      var pagesObj = this._catDict.get(\"Pages\");\r\n\r\n      if (!(0, _primitives.isDict)(pagesObj)) {\r\n        throw new _util.FormatError(\"Invalid top-level pages dictionary.\");\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"toplevelPagesDict\", pagesObj);\r\n    }\r\n  }, {\r\n    key: \"documentOutline\",\r\n    get: function get() {\r\n      var obj = null;\r\n\r\n      try {\r\n        obj = this._readDocumentOutline();\r\n      } catch (ex) {\r\n        if (ex instanceof _core_utils.MissingDataException) {\r\n          throw ex;\r\n        }\r\n\r\n        (0, _util.warn)(\"Unable to read document outline.\");\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"documentOutline\", obj);\r\n    }\r\n  }, {\r\n    key: \"_readDocumentOutline\",\r\n    value: function _readDocumentOutline() {\r\n      var obj = this._catDict.get(\"Outlines\");\r\n\r\n      if (!(0, _primitives.isDict)(obj)) {\r\n        return null;\r\n      }\r\n\r\n      obj = obj.getRaw(\"First\");\r\n\r\n      if (!(0, _primitives.isRef)(obj)) {\r\n        return null;\r\n      }\r\n\r\n      var root = {\r\n        items: []\r\n      };\r\n      var queue = [{\r\n        obj: obj,\r\n        parent: root\r\n      }];\r\n      var processed = new _primitives.RefSet();\r\n      processed.put(obj);\r\n      var xref = this.xref,\r\n          blackColor = new Uint8ClampedArray(3);\r\n\r\n      while (queue.length > 0) {\r\n        var i = queue.shift();\r\n        var outlineDict = xref.fetchIfRef(i.obj);\r\n\r\n        if (outlineDict === null) {\r\n          continue;\r\n        }\r\n\r\n        if (!outlineDict.has(\"Title\")) {\r\n          throw new _util.FormatError(\"Invalid outline item encountered.\");\r\n        }\r\n\r\n        var data = {\r\n          url: null,\r\n          dest: null\r\n        };\r\n        Catalog.parseDestDictionary({\r\n          destDict: outlineDict,\r\n          resultObj: data,\r\n          docBaseUrl: this.pdfManager.docBaseUrl\r\n        });\r\n        var title = outlineDict.get(\"Title\");\r\n        var flags = outlineDict.get(\"F\") || 0;\r\n        var color = outlineDict.getArray(\"C\");\r\n        var count = outlineDict.get(\"Count\");\r\n        var rgbColor = blackColor;\r\n\r\n        if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) {\r\n          rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0);\r\n        }\r\n\r\n        var outlineItem = {\r\n          dest: data.dest,\r\n          url: data.url,\r\n          unsafeUrl: data.unsafeUrl,\r\n          newWindow: data.newWindow,\r\n          title: (0, _util.stringToPDFString)(title),\r\n          color: rgbColor,\r\n          count: Number.isInteger(count) ? count : undefined,\r\n          bold: !!(flags & 2),\r\n          italic: !!(flags & 1),\r\n          items: []\r\n        };\r\n        i.parent.items.push(outlineItem);\r\n        obj = outlineDict.getRaw(\"First\");\r\n\r\n        if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {\r\n          queue.push({\r\n            obj: obj,\r\n            parent: outlineItem\r\n          });\r\n          processed.put(obj);\r\n        }\r\n\r\n        obj = outlineDict.getRaw(\"Next\");\r\n\r\n        if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {\r\n          queue.push({\r\n            obj: obj,\r\n            parent: i.parent\r\n          });\r\n          processed.put(obj);\r\n        }\r\n      }\r\n\r\n      return root.items.length > 0 ? root.items : null;\r\n    }\r\n  }, {\r\n    key: \"permissions\",\r\n    get: function get() {\r\n      var permissions = null;\r\n\r\n      try {\r\n        permissions = this._readPermissions();\r\n      } catch (ex) {\r\n        if (ex instanceof _core_utils.MissingDataException) {\r\n          throw ex;\r\n        }\r\n\r\n        (0, _util.warn)(\"Unable to read permissions.\");\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"permissions\", permissions);\r\n    }\r\n  }, {\r\n    key: \"_readPermissions\",\r\n    value: function _readPermissions() {\r\n      var encrypt = this.xref.trailer.get(\"Encrypt\");\r\n\r\n      if (!(0, _primitives.isDict)(encrypt)) {\r\n        return null;\r\n      }\r\n\r\n      var flags = encrypt.get(\"P\");\r\n\r\n      if (!(0, _util.isNum)(flags)) {\r\n        return null;\r\n      }\r\n\r\n      flags += Math.pow(2, 32);\r\n      var permissions = [];\r\n\r\n      for (var key in _util.PermissionFlag) {\r\n        var value = _util.PermissionFlag[key];\r\n\r\n        if (flags & value) {\r\n          permissions.push(value);\r\n        }\r\n      }\r\n\r\n      return permissions;\r\n    }\r\n  }, {\r\n    key: \"optionalContentConfig\",\r\n    get: function get() {\r\n      var config = null;\r\n\r\n      try {\r\n        var properties = this._catDict.get(\"OCProperties\");\r\n\r\n        if (!properties) {\r\n          return (0, _util.shadow)(this, \"optionalContentConfig\", null);\r\n        }\r\n\r\n        var defaultConfig = properties.get(\"D\");\r\n\r\n        if (!defaultConfig) {\r\n          return (0, _util.shadow)(this, \"optionalContentConfig\", null);\r\n        }\r\n\r\n        var groupsData = properties.get(\"OCGs\");\r\n\r\n        if (!Array.isArray(groupsData)) {\r\n          return (0, _util.shadow)(this, \"optionalContentConfig\", null);\r\n        }\r\n\r\n        var groups = [];\r\n        var groupRefs = [];\r\n\r\n        var _iterator = _createForOfIteratorHelper(groupsData),\r\n            _step;\r\n\r\n        try {\r\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n            var groupRef = _step.value;\r\n\r\n            if (!(0, _primitives.isRef)(groupRef)) {\r\n              continue;\r\n            }\r\n\r\n            groupRefs.push(groupRef);\r\n            var group = this.xref.fetchIfRef(groupRef);\r\n            groups.push({\r\n              id: groupRef.toString(),\r\n              name: (0, _util.isString)(group.get(\"Name\")) ? (0, _util.stringToPDFString)(group.get(\"Name\")) : null,\r\n              intent: (0, _util.isString)(group.get(\"Intent\")) ? (0, _util.stringToPDFString)(group.get(\"Intent\")) : null\r\n            });\r\n          }\r\n        } catch (err) {\r\n          _iterator.e(err);\r\n        } finally {\r\n          _iterator.f();\r\n        }\r\n\r\n        config = this._readOptionalContentConfig(defaultConfig, groupRefs);\r\n        config.groups = groups;\r\n      } catch (ex) {\r\n        if (ex instanceof _core_utils.MissingDataException) {\r\n          throw ex;\r\n        }\r\n\r\n        (0, _util.warn)(\"Unable to read optional content config: \".concat(ex));\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"optionalContentConfig\", config);\r\n    }\r\n  }, {\r\n    key: \"_readOptionalContentConfig\",\r\n    value: function _readOptionalContentConfig(config, contentGroupRefs) {\r\n      function parseOnOff(refs) {\r\n        var onParsed = [];\r\n\r\n        if (Array.isArray(refs)) {\r\n          var _iterator2 = _createForOfIteratorHelper(refs),\r\n              _step2;\r\n\r\n          try {\r\n            for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n              var value = _step2.value;\r\n\r\n              if (!(0, _primitives.isRef)(value)) {\r\n                continue;\r\n              }\r\n\r\n              if (contentGroupRefs.includes(value)) {\r\n                onParsed.push(value.toString());\r\n              }\r\n            }\r\n          } catch (err) {\r\n            _iterator2.e(err);\r\n          } finally {\r\n            _iterator2.f();\r\n          }\r\n        }\r\n\r\n        return onParsed;\r\n      }\r\n\r\n      function parseOrder(refs) {\r\n        var nestedLevels = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\r\n\r\n        if (!Array.isArray(refs)) {\r\n          return null;\r\n        }\r\n\r\n        var order = [];\r\n\r\n        var _iterator3 = _createForOfIteratorHelper(refs),\r\n            _step3;\r\n\r\n        try {\r\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n            var value = _step3.value;\r\n\r\n            if ((0, _primitives.isRef)(value) && contentGroupRefs.includes(value)) {\r\n              parsedOrderRefs.put(value);\r\n              order.push(value.toString());\r\n              continue;\r\n            }\r\n\r\n            var nestedOrder = parseNestedOrder(value, nestedLevels);\r\n\r\n            if (nestedOrder) {\r\n              order.push(nestedOrder);\r\n            }\r\n          }\r\n        } catch (err) {\r\n          _iterator3.e(err);\r\n        } finally {\r\n          _iterator3.f();\r\n        }\r\n\r\n        if (nestedLevels > 0) {\r\n          return order;\r\n        }\r\n\r\n        var hiddenGroups = [];\r\n\r\n        var _iterator4 = _createForOfIteratorHelper(contentGroupRefs),\r\n            _step4;\r\n\r\n        try {\r\n          for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\r\n            var groupRef = _step4.value;\r\n\r\n            if (parsedOrderRefs.has(groupRef)) {\r\n              continue;\r\n            }\r\n\r\n            hiddenGroups.push(groupRef.toString());\r\n          }\r\n        } catch (err) {\r\n          _iterator4.e(err);\r\n        } finally {\r\n          _iterator4.f();\r\n        }\r\n\r\n        if (hiddenGroups.length) {\r\n          order.push({\r\n            name: null,\r\n            order: hiddenGroups\r\n          });\r\n        }\r\n\r\n        return order;\r\n      }\r\n\r\n      function parseNestedOrder(ref, nestedLevels) {\r\n        if (++nestedLevels > MAX_NESTED_LEVELS) {\r\n          (0, _util.warn)(\"parseNestedOrder - reached MAX_NESTED_LEVELS.\");\r\n          return null;\r\n        }\r\n\r\n        var value = xref.fetchIfRef(ref);\r\n\r\n        if (!Array.isArray(value)) {\r\n          return null;\r\n        }\r\n\r\n        var nestedName = xref.fetchIfRef(value[0]);\r\n\r\n        if (typeof nestedName !== \"string\") {\r\n          return null;\r\n        }\r\n\r\n        var nestedOrder = parseOrder(value.slice(1), nestedLevels);\r\n\r\n        if (!nestedOrder || !nestedOrder.length) {\r\n          return null;\r\n        }\r\n\r\n        return {\r\n          name: (0, _util.stringToPDFString)(nestedName),\r\n          order: nestedOrder\r\n        };\r\n      }\r\n\r\n      var xref = this.xref,\r\n          parsedOrderRefs = new _primitives.RefSet(),\r\n          MAX_NESTED_LEVELS = 10;\r\n      return {\r\n        name: (0, _util.isString)(config.get(\"Name\")) ? (0, _util.stringToPDFString)(config.get(\"Name\")) : null,\r\n        creator: (0, _util.isString)(config.get(\"Creator\")) ? (0, _util.stringToPDFString)(config.get(\"Creator\")) : null,\r\n        baseState: (0, _primitives.isName)(config.get(\"BaseState\")) ? config.get(\"BaseState\").name : null,\r\n        on: parseOnOff(config.get(\"ON\")),\r\n        off: parseOnOff(config.get(\"OFF\")),\r\n        order: parseOrder(config.get(\"Order\")),\r\n        groups: null\r\n      };\r\n    }\r\n  }, {\r\n    key: \"numPages\",\r\n    get: function get() {\r\n      var obj = this.toplevelPagesDict.get(\"Count\");\r\n\r\n      if (!Number.isInteger(obj)) {\r\n        throw new _util.FormatError(\"Page count in top-level pages dictionary is not an integer.\");\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"numPages\", obj);\r\n    }\r\n  }, {\r\n    key: \"destinations\",\r\n    get: function get() {\r\n      var obj = this._readDests(),\r\n          dests = Object.create(null);\r\n\r\n      if (obj instanceof NameTree) {\r\n        var names = obj.getAll();\r\n\r\n        for (var name in names) {\r\n          dests[name] = fetchDestination(names[name]);\r\n        }\r\n      } else if (obj instanceof _primitives.Dict) {\r\n        obj.forEach(function (key, value) {\r\n          if (value) {\r\n            dests[key] = fetchDestination(value);\r\n          }\r\n        });\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"destinations\", dests);\r\n    }\r\n  }, {\r\n    key: \"getDestination\",\r\n    value: function getDestination(destinationId) {\r\n      var obj = this._readDests();\r\n\r\n      if (obj instanceof NameTree || obj instanceof _primitives.Dict) {\r\n        return fetchDestination(obj.get(destinationId) || null);\r\n      }\r\n\r\n      return null;\r\n    }\r\n  }, {\r\n    key: \"_readDests\",\r\n    value: function _readDests() {\r\n      var obj = this._catDict.get(\"Names\");\r\n\r\n      if (obj && obj.has(\"Dests\")) {\r\n        return new NameTree(obj.getRaw(\"Dests\"), this.xref);\r\n      } else if (this._catDict.has(\"Dests\")) {\r\n        return this._catDict.get(\"Dests\");\r\n      }\r\n\r\n      return undefined;\r\n    }\r\n  }, {\r\n    key: \"pageLabels\",\r\n    get: function get() {\r\n      var obj = null;\r\n\r\n      try {\r\n        obj = this._readPageLabels();\r\n      } catch (ex) {\r\n        if (ex instanceof _core_utils.MissingDataException) {\r\n          throw ex;\r\n        }\r\n\r\n        (0, _util.warn)(\"Unable to read page labels.\");\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"pageLabels\", obj);\r\n    }\r\n  }, {\r\n    key: \"_readPageLabels\",\r\n    value: function _readPageLabels() {\r\n      var obj = this._catDict.getRaw(\"PageLabels\");\r\n\r\n      if (!obj) {\r\n        return null;\r\n      }\r\n\r\n      var pageLabels = new Array(this.numPages);\r\n      var style = null,\r\n          prefix = \"\";\r\n      var numberTree = new NumberTree(obj, this.xref);\r\n      var nums = numberTree.getAll();\r\n      var currentLabel = \"\",\r\n          currentIndex = 1;\r\n\r\n      for (var i = 0, ii = this.numPages; i < ii; i++) {\r\n        if (i in nums) {\r\n          var labelDict = nums[i];\r\n\r\n          if (!(0, _primitives.isDict)(labelDict)) {\r\n            throw new _util.FormatError(\"PageLabel is not a dictionary.\");\r\n          }\r\n\r\n          if (labelDict.has(\"Type\") && !(0, _primitives.isName)(labelDict.get(\"Type\"), \"PageLabel\")) {\r\n            throw new _util.FormatError(\"Invalid type in PageLabel dictionary.\");\r\n          }\r\n\r\n          if (labelDict.has(\"S\")) {\r\n            var s = labelDict.get(\"S\");\r\n\r\n            if (!(0, _primitives.isName)(s)) {\r\n              throw new _util.FormatError(\"Invalid style in PageLabel dictionary.\");\r\n            }\r\n\r\n            style = s.name;\r\n          } else {\r\n            style = null;\r\n          }\r\n\r\n          if (labelDict.has(\"P\")) {\r\n            var p = labelDict.get(\"P\");\r\n\r\n            if (!(0, _util.isString)(p)) {\r\n              throw new _util.FormatError(\"Invalid prefix in PageLabel dictionary.\");\r\n            }\r\n\r\n            prefix = (0, _util.stringToPDFString)(p);\r\n          } else {\r\n            prefix = \"\";\r\n          }\r\n\r\n          if (labelDict.has(\"St\")) {\r\n            var st = labelDict.get(\"St\");\r\n\r\n            if (!(Number.isInteger(st) && st >= 1)) {\r\n              throw new _util.FormatError(\"Invalid start in PageLabel dictionary.\");\r\n            }\r\n\r\n            currentIndex = st;\r\n          } else {\r\n            currentIndex = 1;\r\n          }\r\n        }\r\n\r\n        switch (style) {\r\n          case \"D\":\r\n            currentLabel = currentIndex;\r\n            break;\r\n\r\n          case \"R\":\r\n          case \"r\":\r\n            currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === \"r\");\r\n            break;\r\n\r\n          case \"A\":\r\n          case \"a\":\r\n            var LIMIT = 26;\r\n            var A_UPPER_CASE = 0x41,\r\n                A_LOWER_CASE = 0x61;\r\n            var baseCharCode = style === \"a\" ? A_LOWER_CASE : A_UPPER_CASE;\r\n            var letterIndex = currentIndex - 1;\r\n            var character = String.fromCharCode(baseCharCode + letterIndex % LIMIT);\r\n            var charBuf = [];\r\n\r\n            for (var j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) {\r\n              charBuf.push(character);\r\n            }\r\n\r\n            currentLabel = charBuf.join(\"\");\r\n            break;\r\n\r\n          default:\r\n            if (style) {\r\n              throw new _util.FormatError(\"Invalid style \\\"\".concat(style, \"\\\" in PageLabel dictionary.\"));\r\n            }\r\n\r\n            currentLabel = \"\";\r\n        }\r\n\r\n        pageLabels[i] = prefix + currentLabel;\r\n        currentIndex++;\r\n      }\r\n\r\n      return pageLabels;\r\n    }\r\n  }, {\r\n    key: \"pageLayout\",\r\n    get: function get() {\r\n      var obj = this._catDict.get(\"PageLayout\");\r\n\r\n      var pageLayout = \"\";\r\n\r\n      if ((0, _primitives.isName)(obj)) {\r\n        switch (obj.name) {\r\n          case \"SinglePage\":\r\n          case \"OneColumn\":\r\n          case \"TwoColumnLeft\":\r\n          case \"TwoColumnRight\":\r\n          case \"TwoPageLeft\":\r\n          case \"TwoPageRight\":\r\n            pageLayout = obj.name;\r\n        }\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"pageLayout\", pageLayout);\r\n    }\r\n  }, {\r\n    key: \"pageMode\",\r\n    get: function get() {\r\n      var obj = this._catDict.get(\"PageMode\");\r\n\r\n      var pageMode = \"UseNone\";\r\n\r\n      if ((0, _primitives.isName)(obj)) {\r\n        switch (obj.name) {\r\n          case \"UseNone\":\r\n          case \"UseOutlines\":\r\n          case \"UseThumbs\":\r\n          case \"FullScreen\":\r\n          case \"UseOC\":\r\n          case \"UseAttachments\":\r\n            pageMode = obj.name;\r\n        }\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"pageMode\", pageMode);\r\n    }\r\n  }, {\r\n    key: \"viewerPreferences\",\r\n    get: function get() {\r\n      var _this = this;\r\n\r\n      var ViewerPreferencesValidators = {\r\n        HideToolbar: _util.isBool,\r\n        HideMenubar: _util.isBool,\r\n        HideWindowUI: _util.isBool,\r\n        FitWindow: _util.isBool,\r\n        CenterWindow: _util.isBool,\r\n        DisplayDocTitle: _util.isBool,\r\n        NonFullScreenPageMode: _primitives.isName,\r\n        Direction: _primitives.isName,\r\n        ViewArea: _primitives.isName,\r\n        ViewClip: _primitives.isName,\r\n        PrintArea: _primitives.isName,\r\n        PrintClip: _primitives.isName,\r\n        PrintScaling: _primitives.isName,\r\n        Duplex: _primitives.isName,\r\n        PickTrayByPDFSize: _util.isBool,\r\n        PrintPageRange: Array.isArray,\r\n        NumCopies: Number.isInteger\r\n      };\r\n\r\n      var obj = this._catDict.get(\"ViewerPreferences\");\r\n\r\n      var prefs = null;\r\n\r\n      if ((0, _primitives.isDict)(obj)) {\r\n        for (var key in ViewerPreferencesValidators) {\r\n          if (!obj.has(key)) {\r\n            continue;\r\n          }\r\n\r\n          var value = obj.get(key);\r\n\r\n          if (!ViewerPreferencesValidators[key](value)) {\r\n            (0, _util.info)(\"Bad value in ViewerPreferences for \\\"\".concat(key, \"\\\".\"));\r\n            continue;\r\n          }\r\n\r\n          var prefValue = void 0;\r\n\r\n          switch (key) {\r\n            case \"NonFullScreenPageMode\":\r\n              switch (value.name) {\r\n                case \"UseNone\":\r\n                case \"UseOutlines\":\r\n                case \"UseThumbs\":\r\n                case \"UseOC\":\r\n                  prefValue = value.name;\r\n                  break;\r\n\r\n                default:\r\n                  prefValue = \"UseNone\";\r\n              }\r\n\r\n              break;\r\n\r\n            case \"Direction\":\r\n              switch (value.name) {\r\n                case \"L2R\":\r\n                case \"R2L\":\r\n                  prefValue = value.name;\r\n                  break;\r\n\r\n                default:\r\n                  prefValue = \"L2R\";\r\n              }\r\n\r\n              break;\r\n\r\n            case \"ViewArea\":\r\n            case \"ViewClip\":\r\n            case \"PrintArea\":\r\n            case \"PrintClip\":\r\n              switch (value.name) {\r\n                case \"MediaBox\":\r\n                case \"CropBox\":\r\n                case \"BleedBox\":\r\n                case \"TrimBox\":\r\n                case \"ArtBox\":\r\n                  prefValue = value.name;\r\n                  break;\r\n\r\n                default:\r\n                  prefValue = \"CropBox\";\r\n              }\r\n\r\n              break;\r\n\r\n            case \"PrintScaling\":\r\n              switch (value.name) {\r\n                case \"None\":\r\n                case \"AppDefault\":\r\n                  prefValue = value.name;\r\n                  break;\r\n\r\n                default:\r\n                  prefValue = \"AppDefault\";\r\n              }\r\n\r\n              break;\r\n\r\n            case \"Duplex\":\r\n              switch (value.name) {\r\n                case \"Simplex\":\r\n                case \"DuplexFlipShortEdge\":\r\n                case \"DuplexFlipLongEdge\":\r\n                  prefValue = value.name;\r\n                  break;\r\n\r\n                default:\r\n                  prefValue = \"None\";\r\n              }\r\n\r\n              break;\r\n\r\n            case \"PrintPageRange\":\r\n              var length = value.length;\r\n\r\n              if (length % 2 !== 0) {\r\n                break;\r\n              }\r\n\r\n              var isValid = value.every(function (page, i, arr) {\r\n                return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= _this.numPages;\r\n              });\r\n\r\n              if (isValid) {\r\n                prefValue = value;\r\n              }\r\n\r\n              break;\r\n\r\n            case \"NumCopies\":\r\n              if (value > 0) {\r\n                prefValue = value;\r\n              }\r\n\r\n              break;\r\n\r\n            default:\r\n              if (typeof value !== \"boolean\") {\r\n                throw new _util.FormatError(\"viewerPreferences - expected a boolean value for: \".concat(key));\r\n              }\r\n\r\n              prefValue = value;\r\n          }\r\n\r\n          if (prefValue !== undefined) {\r\n            if (!prefs) {\r\n              prefs = Object.create(null);\r\n            }\r\n\r\n            prefs[key] = prefValue;\r\n          } else {\r\n            (0, _util.info)(\"Bad value in ViewerPreferences for \\\"\".concat(key, \"\\\".\"));\r\n          }\r\n        }\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"viewerPreferences\", prefs);\r\n    }\r\n  }, {\r\n    key: \"openAction\",\r\n    get: function get() {\r\n      var obj = this._catDict.get(\"OpenAction\");\r\n\r\n      var openAction = Object.create(null);\r\n\r\n      if ((0, _primitives.isDict)(obj)) {\r\n        var destDict = new _primitives.Dict(this.xref);\r\n        destDict.set(\"A\", obj);\r\n        var resultObj = {\r\n          url: null,\r\n          dest: null,\r\n          action: null\r\n        };\r\n        Catalog.parseDestDictionary({\r\n          destDict: destDict,\r\n          resultObj: resultObj\r\n        });\r\n\r\n        if (Array.isArray(resultObj.dest)) {\r\n          openAction.dest = resultObj.dest;\r\n        } else if (resultObj.action) {\r\n          openAction.action = resultObj.action;\r\n        }\r\n      } else if (Array.isArray(obj)) {\r\n        openAction.dest = obj;\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"openAction\", (0, _util.objectSize)(openAction) > 0 ? openAction : null);\r\n    }\r\n  }, {\r\n    key: \"attachments\",\r\n    get: function get() {\r\n      var obj = this._catDict.get(\"Names\");\r\n\r\n      var attachments = null;\r\n\r\n      if (obj && obj.has(\"EmbeddedFiles\")) {\r\n        var nameTree = new NameTree(obj.getRaw(\"EmbeddedFiles\"), this.xref);\r\n        var names = nameTree.getAll();\r\n\r\n        for (var name in names) {\r\n          var fs = new FileSpec(names[name], this.xref);\r\n\r\n          if (!attachments) {\r\n            attachments = Object.create(null);\r\n          }\r\n\r\n          attachments[(0, _util.stringToPDFString)(name)] = fs.serializable;\r\n        }\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"attachments\", attachments);\r\n    }\r\n  }, {\r\n    key: \"_collectJavaScript\",\r\n    value: function _collectJavaScript() {\r\n      var obj = this._catDict.get(\"Names\");\r\n\r\n      var javaScript = null;\r\n\r\n      function appendIfJavaScriptDict(name, jsDict) {\r\n        var type = jsDict.get(\"S\");\r\n\r\n        if (!(0, _primitives.isName)(type, \"JavaScript\")) {\r\n          return;\r\n        }\r\n\r\n        var js = jsDict.get(\"JS\");\r\n\r\n        if ((0, _primitives.isStream)(js)) {\r\n          js = (0, _util.bytesToString)(js.getBytes());\r\n        } else if (!(0, _util.isString)(js)) {\r\n          return;\r\n        }\r\n\r\n        if (javaScript === null) {\r\n          javaScript = Object.create(null);\r\n        }\r\n\r\n        javaScript[name] = (0, _util.stringToPDFString)(js);\r\n      }\r\n\r\n      if (obj && obj.has(\"JavaScript\")) {\r\n        var nameTree = new NameTree(obj.getRaw(\"JavaScript\"), this.xref);\r\n        var names = nameTree.getAll();\r\n\r\n        for (var name in names) {\r\n          var jsDict = names[name];\r\n\r\n          if ((0, _primitives.isDict)(jsDict)) {\r\n            appendIfJavaScriptDict(name, jsDict);\r\n          }\r\n        }\r\n      }\r\n\r\n      var openAction = this._catDict.get(\"OpenAction\");\r\n\r\n      if ((0, _primitives.isDict)(openAction) && (0, _primitives.isName)(openAction.get(\"S\"), \"JavaScript\")) {\r\n        appendIfJavaScriptDict(\"OpenAction\", openAction);\r\n      }\r\n\r\n      return javaScript;\r\n    }\r\n  }, {\r\n    key: \"javaScript\",\r\n    get: function get() {\r\n      var javaScript = this._collectJavaScript();\r\n\r\n      return (0, _util.shadow)(this, \"javaScript\", javaScript ? Object.values(javaScript) : null);\r\n    }\r\n  }, {\r\n    key: \"jsActions\",\r\n    get: function get() {\r\n      var js = this._collectJavaScript();\r\n\r\n      var actions = (0, _core_utils.collectActions)(this.xref, this._catDict, _util.DocumentActionEventType);\r\n\r\n      if (!actions && js) {\r\n        actions = Object.create(null);\r\n      }\r\n\r\n      if (actions && js) {\r\n        for (var _i = 0, _Object$entries = Object.entries(js); _i < _Object$entries.length; _i++) {\r\n          var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\r\n              key = _Object$entries$_i[0],\r\n              val = _Object$entries$_i[1];\r\n\r\n          if (key in actions) {\r\n            actions[key].push(val);\r\n          } else {\r\n            actions[key] = [val];\r\n          }\r\n        }\r\n      }\r\n\r\n      return (0, _util.shadow)(this, \"jsActions\", actions);\r\n    }\r\n  }, {\r\n    key: \"fontFallback\",\r\n    value: function fontFallback(id, handler) {\r\n      var promises = [];\r\n      this.fontCache.forEach(function (promise) {\r\n        promises.push(promise);\r\n      });\r\n      return Promise.all(promises).then(function (translatedFonts) {\r\n        var _iterator5 = _createForOfIteratorHelper(translatedFonts),\r\n            _step5;\r\n\r\n        try {\r\n          for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\r\n            var translatedFont = _step5.value;\r\n\r\n            if (translatedFont.loadedName === id) {\r\n              translatedFont.fallback(handler);\r\n              return;\r\n            }\r\n          }\r\n        } catch (err) {\r\n          _iterator5.e(err);\r\n        } finally {\r\n          _iterator5.f();\r\n        }\r\n      });\r\n    }\r\n  }, {\r\n    key: \"cleanup\",\r\n    value: function cleanup() {\r\n      var _this2 = this;\r\n\r\n      var manuallyTriggered = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n      (0, _primitives.clearPrimitiveCaches)();\r\n      this.globalImageCache.clear(manuallyTriggered);\r\n      this.pageKidsCountCache.clear();\r\n      this.nonBlendModesSet.clear();\r\n      var promises = [];\r\n      this.fontCache.forEach(function (promise) {\r\n        promises.push(promise);\r\n      });\r\n      return Promise.all(promises).then(function (translatedFonts) {\r\n        var _iterator6 = _createForOfIteratorHelper(translatedFonts),\r\n            _step6;\r\n\r\n        try {\r\n          for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\r\n            var dict = _step6.value.dict;\r\n            delete dict.cacheKey;\r\n          }\r\n        } catch (err) {\r\n          _iterator6.e(err);\r\n        } finally {\r\n          _iterator6.f();\r\n        }\r\n\r\n        _this2.fontCache.clear();\r\n\r\n        _this2.builtInCMapCache.clear();\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getPageDict\",\r\n    value: function getPageDict(pageIndex) {\r\n      var capability = (0, _util.createPromiseCapability)();\r\n      var nodesToVisit = [this._catDict.getRaw(\"Pages\")];\r\n      var visitedNodes = new _primitives.RefSet();\r\n      var xref = this.xref,\r\n          pageKidsCountCache = this.pageKidsCountCache;\r\n      var count,\r\n          currentPageIndex = 0;\r\n\r\n      function next() {\r\n        var _loop = function _loop() {\r\n          var currentNode = nodesToVisit.pop();\r\n\r\n          if ((0, _primitives.isRef)(currentNode)) {\r\n            count = pageKidsCountCache.get(currentNode);\r\n\r\n            if (count > 0 && currentPageIndex + count < pageIndex) {\r\n              currentPageIndex += count;\r\n              return \"continue\";\r\n            }\r\n\r\n            if (visitedNodes.has(currentNode)) {\r\n              capability.reject(new _util.FormatError(\"Pages tree contains circular reference.\"));\r\n              return {\r\n                v: void 0\r\n              };\r\n            }\r\n\r\n            visitedNodes.put(currentNode);\r\n            xref.fetchAsync(currentNode).then(function (obj) {\r\n              if ((0, _primitives.isDict)(obj, \"Page\") || (0, _primitives.isDict)(obj) && !obj.has(\"Kids\")) {\r\n                if (pageIndex === currentPageIndex) {\r\n                  if (currentNode && !pageKidsCountCache.has(currentNode)) {\r\n                    pageKidsCountCache.put(currentNode, 1);\r\n                  }\r\n\r\n                  capability.resolve([obj, currentNode]);\r\n                } else {\r\n                  currentPageIndex++;\r\n                  next();\r\n                }\r\n\r\n                return;\r\n              }\r\n\r\n              nodesToVisit.push(obj);\r\n              next();\r\n            }, capability.reject);\r\n            return {\r\n              v: void 0\r\n            };\r\n          }\r\n\r\n          if (!(0, _primitives.isDict)(currentNode)) {\r\n            capability.reject(new _util.FormatError(\"Page dictionary kid reference points to wrong type of object.\"));\r\n            return {\r\n              v: void 0\r\n            };\r\n          }\r\n\r\n          count = currentNode.get(\"Count\");\r\n\r\n          if (Number.isInteger(count) && count >= 0) {\r\n            var objId = currentNode.objId;\r\n\r\n            if (objId && !pageKidsCountCache.has(objId)) {\r\n              pageKidsCountCache.put(objId, count);\r\n            }\r\n\r\n            if (currentPageIndex + count <= pageIndex) {\r\n              currentPageIndex += count;\r\n              return \"continue\";\r\n            }\r\n          }\r\n\r\n          var kids = currentNode.get(\"Kids\");\r\n\r\n          if (!Array.isArray(kids)) {\r\n            if ((0, _primitives.isName)(currentNode.get(\"Type\"), \"Page\") || !currentNode.has(\"Type\") && currentNode.has(\"Contents\")) {\r\n              if (currentPageIndex === pageIndex) {\r\n                capability.resolve([currentNode, null]);\r\n                return {\r\n                  v: void 0\r\n                };\r\n              }\r\n\r\n              currentPageIndex++;\r\n              return \"continue\";\r\n            }\r\n\r\n            capability.reject(new _util.FormatError(\"Page dictionary kids object is not an array.\"));\r\n            return {\r\n              v: void 0\r\n            };\r\n          }\r\n\r\n          for (var last = kids.length - 1; last >= 0; last--) {\r\n            nodesToVisit.push(kids[last]);\r\n          }\r\n        };\r\n\r\n        while (nodesToVisit.length) {\r\n          var _ret = _loop();\r\n\r\n          if (_ret === \"continue\") continue;\r\n          if (_typeof(_ret) === \"object\") return _ret.v;\r\n        }\r\n\r\n        capability.reject(new Error(\"Page index \".concat(pageIndex, \" not found.\")));\r\n      }\r\n\r\n      next();\r\n      return capability.promise;\r\n    }\r\n  }, {\r\n    key: \"getPageIndex\",\r\n    value: function getPageIndex(pageRef) {\r\n      var xref = this.xref;\r\n\r\n      function pagesBeforeRef(kidRef) {\r\n        var total = 0,\r\n            parentRef;\r\n        return xref.fetchAsync(kidRef).then(function (node) {\r\n          if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, \"Page\") && !((0, _primitives.isDict)(node) && !node.has(\"Type\") && node.has(\"Contents\"))) {\r\n            throw new _util.FormatError(\"The reference does not point to a /Page dictionary.\");\r\n          }\r\n\r\n          if (!node) {\r\n            return null;\r\n          }\r\n\r\n          if (!(0, _primitives.isDict)(node)) {\r\n            throw new _util.FormatError(\"Node must be a dictionary.\");\r\n          }\r\n\r\n          parentRef = node.getRaw(\"Parent\");\r\n          return node.getAsync(\"Parent\");\r\n        }).then(function (parent) {\r\n          if (!parent) {\r\n            return null;\r\n          }\r\n\r\n          if (!(0, _primitives.isDict)(parent)) {\r\n            throw new _util.FormatError(\"Parent must be a dictionary.\");\r\n          }\r\n\r\n          return parent.getAsync(\"Kids\");\r\n        }).then(function (kids) {\r\n          if (!kids) {\r\n            return null;\r\n          }\r\n\r\n          var kidPromises = [];\r\n          var found = false;\r\n\r\n          for (var i = 0, ii = kids.length; i < ii; i++) {\r\n            var kid = kids[i];\r\n\r\n            if (!(0, _primitives.isRef)(kid)) {\r\n              throw new _util.FormatError(\"Kid must be a reference.\");\r\n            }\r\n\r\n            if ((0, _primitives.isRefsEqual)(kid, kidRef)) {\r\n              found = true;\r\n              break;\r\n            }\r\n\r\n            kidPromises.push(xref.fetchAsync(kid).then(function (obj) {\r\n              if (!(0, _primitives.isDict)(obj)) {\r\n                throw new _util.FormatError(\"Kid node must be a dictionary.\");\r\n              }\r\n\r\n              if (obj.has(\"Count\")) {\r\n                total += obj.get(\"Count\");\r\n              } else {\r\n                total++;\r\n              }\r\n            }));\r\n          }\r\n\r\n          if (!found) {\r\n            throw new _util.FormatError(\"Kid reference not found in parent's kids.\");\r\n          }\r\n\r\n          return Promise.all(kidPromises).then(function () {\r\n            return [total, parentRef];\r\n          });\r\n        });\r\n      }\r\n\r\n      var total = 0;\r\n\r\n      function next(ref) {\r\n        return pagesBeforeRef(ref).then(function (args) {\r\n          if (!args) {\r\n            return total;\r\n          }\r\n\r\n          var _args = _slicedToArray(args, 2),\r\n              count = _args[0],\r\n              parentRef = _args[1];\r\n\r\n          total += count;\r\n          return next(parentRef);\r\n        });\r\n      }\r\n\r\n      return next(pageRef);\r\n    }\r\n  }], [{\r\n    key: \"parseDestDictionary\",\r\n    value: function parseDestDictionary(params) {\r\n      function addDefaultProtocolToUrl(url) {\r\n        return url.startsWith(\"www.\") ? \"http://\".concat(url) : url;\r\n      }\r\n\r\n      function tryConvertUrlEncoding(url) {\r\n        try {\r\n          return (0, _util.stringToUTF8String)(url);\r\n        } catch (e) {\r\n          return url;\r\n        }\r\n      }\r\n\r\n      var destDict = params.destDict;\r\n\r\n      if (!(0, _primitives.isDict)(destDict)) {\r\n        (0, _util.warn)(\"parseDestDictionary: `destDict` must be a dictionary.\");\r\n        return;\r\n      }\r\n\r\n      var resultObj = params.resultObj;\r\n\r\n      if (_typeof(resultObj) !== \"object\") {\r\n        (0, _util.warn)(\"parseDestDictionary: `resultObj` must be an object.\");\r\n        return;\r\n      }\r\n\r\n      var docBaseUrl = params.docBaseUrl || null;\r\n      var action = destDict.get(\"A\"),\r\n          url,\r\n          dest;\r\n\r\n      if (!(0, _primitives.isDict)(action)) {\r\n        if (destDict.has(\"Dest\")) {\r\n          action = destDict.get(\"Dest\");\r\n        } else {\r\n          action = destDict.get(\"AA\");\r\n\r\n          if ((0, _primitives.isDict)(action)) {\r\n            if (action.has(\"D\")) {\r\n              action = action.get(\"D\");\r\n            } else if (action.has(\"U\")) {\r\n              action = action.get(\"U\");\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if ((0, _primitives.isDict)(action)) {\r\n        var actionType = action.get(\"S\");\r\n\r\n        if (!(0, _primitives.isName)(actionType)) {\r\n          (0, _util.warn)(\"parseDestDictionary: Invalid type in Action dictionary.\");\r\n          return;\r\n        }\r\n\r\n        var actionName = actionType.name;\r\n\r\n        switch (actionName) {\r\n          case \"URI\":\r\n            url = action.get(\"URI\");\r\n\r\n            if ((0, _primitives.isName)(url)) {\r\n              url = \"/\" + url.name;\r\n            } else if ((0, _util.isString)(url)) {\r\n              url = addDefaultProtocolToUrl(url);\r\n            }\r\n\r\n            break;\r\n\r\n          case \"GoTo\":\r\n            dest = action.get(\"D\");\r\n            break;\r\n\r\n          case \"Launch\":\r\n          case \"GoToR\":\r\n            var urlDict = action.get(\"F\");\r\n\r\n            if ((0, _primitives.isDict)(urlDict)) {\r\n              url = urlDict.get(\"F\") || null;\r\n            } else if ((0, _util.isString)(urlDict)) {\r\n              url = urlDict;\r\n            }\r\n\r\n            var remoteDest = action.get(\"D\");\r\n\r\n            if (remoteDest) {\r\n              if ((0, _primitives.isName)(remoteDest)) {\r\n                remoteDest = remoteDest.name;\r\n              }\r\n\r\n              if ((0, _util.isString)(url)) {\r\n                var baseUrl = url.split(\"#\")[0];\r\n\r\n                if ((0, _util.isString)(remoteDest)) {\r\n                  url = baseUrl + \"#\" + remoteDest;\r\n                } else if (Array.isArray(remoteDest)) {\r\n                  url = baseUrl + \"#\" + JSON.stringify(remoteDest);\r\n                }\r\n              }\r\n            }\r\n\r\n            var newWindow = action.get(\"NewWindow\");\r\n\r\n            if ((0, _util.isBool)(newWindow)) {\r\n              resultObj.newWindow = newWindow;\r\n            }\r\n\r\n            break;\r\n\r\n          case \"Named\":\r\n            var namedAction = action.get(\"N\");\r\n\r\n            if ((0, _primitives.isName)(namedAction)) {\r\n              resultObj.action = namedAction.name;\r\n            }\r\n\r\n            break;\r\n\r\n          case \"JavaScript\":\r\n            var jsAction = action.get(\"JS\");\r\n            var js;\r\n\r\n            if ((0, _primitives.isStream)(jsAction)) {\r\n              js = (0, _util.bytesToString)(jsAction.getBytes());\r\n            } else if ((0, _util.isString)(jsAction)) {\r\n              js = jsAction;\r\n            }\r\n\r\n            if (js) {\r\n              var URL_OPEN_METHODS = [\"app.launchURL\", \"window.open\"];\r\n              var regex = new RegExp(\"^\\\\s*(\" + URL_OPEN_METHODS.join(\"|\").split(\".\").join(\"\\\\.\") + \")\\\\((?:'|\\\")([^'\\\"]*)(?:'|\\\")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))\", \"i\");\r\n              var jsUrl = regex.exec((0, _util.stringToPDFString)(js));\r\n\r\n              if (jsUrl && jsUrl[2]) {\r\n                url = jsUrl[2];\r\n\r\n                if (jsUrl[3] === \"true\" && jsUrl[1] === \"app.launchURL\") {\r\n                  resultObj.newWindow = true;\r\n                }\r\n\r\n                break;\r\n              }\r\n            }\r\n\r\n          default:\r\n            (0, _util.warn)(\"parseDestDictionary: unsupported action type \\\"\".concat(actionName, \"\\\".\"));\r\n            break;\r\n        }\r\n      } else if (destDict.has(\"Dest\")) {\r\n        dest = destDict.get(\"Dest\");\r\n      }\r\n\r\n      if ((0, _util.isString)(url)) {\r\n        url = tryConvertUrlEncoding(url);\r\n        var absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl);\r\n\r\n        if (absoluteUrl) {\r\n          resultObj.url = absoluteUrl.href;\r\n        }\r\n\r\n        resultObj.unsafeUrl = url;\r\n      }\r\n\r\n      if (dest) {\r\n        if ((0, _primitives.isName)(dest)) {\r\n          dest = dest.name;\r\n        }\r\n\r\n        if ((0, _util.isString)(dest) || Array.isArray(dest)) {\r\n          resultObj.dest = dest;\r\n        }\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return Catalog;\r\n}();\r\n\r\nexports.Catalog = Catalog;\r\n\r\nvar XRef = function XRefClosure() {\r\n  function XRef(stream, pdfManager) {\r\n    this.stream = stream;\r\n    this.pdfManager = pdfManager;\r\n    this.entries = [];\r\n    this.xrefstms = Object.create(null);\r\n    this._cacheMap = new Map();\r\n    this.stats = {\r\n      streamTypes: Object.create(null),\r\n      fontTypes: Object.create(null)\r\n    };\r\n    this._newRefNum = null;\r\n  }\r\n\r\n  XRef.prototype = {\r\n    getNewRef: function XRef_getNewRef() {\r\n      if (this._newRefNum === null) {\r\n        this._newRefNum = this.entries.length;\r\n      }\r\n\r\n      return _primitives.Ref.get(this._newRefNum++, 0);\r\n    },\r\n    resetNewRef: function XRef_resetNewRef() {\r\n      this._newRefNum = null;\r\n    },\r\n    setStartXRef: function XRef_setStartXRef(startXRef) {\r\n      this.startXRefQueue = [startXRef];\r\n    },\r\n    parse: function XRef_parse(recoveryMode) {\r\n      var trailerDict;\r\n\r\n      if (!recoveryMode) {\r\n        trailerDict = this.readXRef();\r\n      } else {\r\n        (0, _util.warn)(\"Indexing all PDF objects\");\r\n        trailerDict = this.indexObjects();\r\n      }\r\n\r\n      trailerDict.assignXref(this);\r\n      this.trailer = trailerDict;\r\n      var encrypt;\r\n\r\n      try {\r\n        encrypt = trailerDict.get(\"Encrypt\");\r\n      } catch (ex) {\r\n        if (ex instanceof _core_utils.MissingDataException) {\r\n          throw ex;\r\n        }\r\n\r\n        (0, _util.warn)(\"XRef.parse - Invalid \\\"Encrypt\\\" reference: \\\"\".concat(ex, \"\\\".\"));\r\n      }\r\n\r\n      if ((0, _primitives.isDict)(encrypt)) {\r\n        var ids = trailerDict.get(\"ID\");\r\n        var fileId = ids && ids.length ? ids[0] : \"\";\r\n        encrypt.suppressEncryption = true;\r\n        this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password);\r\n      }\r\n\r\n      var root;\r\n\r\n      try {\r\n        root = trailerDict.get(\"Root\");\r\n      } catch (ex) {\r\n        if (ex instanceof _core_utils.MissingDataException) {\r\n          throw ex;\r\n        }\r\n\r\n        (0, _util.warn)(\"XRef.parse - Invalid \\\"Root\\\" reference: \\\"\".concat(ex, \"\\\".\"));\r\n      }\r\n\r\n      if ((0, _primitives.isDict)(root) && root.has(\"Pages\")) {\r\n        this.root = root;\r\n      } else {\r\n        if (!recoveryMode) {\r\n          throw new _core_utils.XRefParseException();\r\n        }\r\n\r\n        throw new _util.FormatError(\"Invalid root reference\");\r\n      }\r\n    },\r\n    processXRefTable: function XRef_processXRefTable(parser) {\r\n      if (!(\"tableState\" in this)) {\r\n        this.tableState = {\r\n          entryNum: 0,\r\n          streamPos: parser.lexer.stream.pos,\r\n          parserBuf1: parser.buf1,\r\n          parserBuf2: parser.buf2\r\n        };\r\n      }\r\n\r\n      var obj = this.readXRefTable(parser);\r\n\r\n      if (!(0, _primitives.isCmd)(obj, \"trailer\")) {\r\n        throw new _util.FormatError(\"Invalid XRef table: could not find trailer dictionary\");\r\n      }\r\n\r\n      var dict = parser.getObj();\r\n\r\n      if (!(0, _primitives.isDict)(dict) && dict.dict) {\r\n        dict = dict.dict;\r\n      }\r\n\r\n      if (!(0, _primitives.isDict)(dict)) {\r\n        throw new _util.FormatError(\"Invalid XRef table: could not parse trailer dictionary\");\r\n      }\r\n\r\n      delete this.tableState;\r\n      return dict;\r\n    },\r\n    readXRefTable: function XRef_readXRefTable(parser) {\r\n      var stream = parser.lexer.stream;\r\n      var tableState = this.tableState;\r\n      stream.pos = tableState.streamPos;\r\n      parser.buf1 = tableState.parserBuf1;\r\n      parser.buf2 = tableState.parserBuf2;\r\n      var obj;\r\n\r\n      while (true) {\r\n        if (!(\"firstEntryNum\" in tableState) || !(\"entryCount\" in tableState)) {\r\n          if ((0, _primitives.isCmd)(obj = parser.getObj(), \"trailer\")) {\r\n            break;\r\n          }\r\n\r\n          tableState.firstEntryNum = obj;\r\n          tableState.entryCount = parser.getObj();\r\n        }\r\n\r\n        var first = tableState.firstEntryNum;\r\n        var count = tableState.entryCount;\r\n\r\n        if (!Number.isInteger(first) || !Number.isInteger(count)) {\r\n          throw new _util.FormatError(\"Invalid XRef table: wrong types in subsection header\");\r\n        }\r\n\r\n        for (var i = tableState.entryNum; i < count; i++) {\r\n          tableState.streamPos = stream.pos;\r\n          tableState.entryNum = i;\r\n          tableState.parserBuf1 = parser.buf1;\r\n          tableState.parserBuf2 = parser.buf2;\r\n          var entry = {};\r\n          entry.offset = parser.getObj();\r\n          entry.gen = parser.getObj();\r\n          var type = parser.getObj();\r\n\r\n          if (type instanceof _primitives.Cmd) {\r\n            switch (type.cmd) {\r\n              case \"f\":\r\n                entry.free = true;\r\n                break;\r\n\r\n              case \"n\":\r\n                entry.uncompressed = true;\r\n                break;\r\n            }\r\n          }\r\n\r\n          if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) {\r\n            throw new _util.FormatError(\"Invalid entry in XRef subsection: \".concat(first, \", \").concat(count));\r\n          }\r\n\r\n          if (i === 0 && entry.free && first === 1) {\r\n            first = 0;\r\n          }\r\n\r\n          if (!this.entries[i + first]) {\r\n            this.entries[i + first] = entry;\r\n          }\r\n        }\r\n\r\n        tableState.entryNum = 0;\r\n        tableState.streamPos = stream.pos;\r\n        tableState.parserBuf1 = parser.buf1;\r\n        tableState.parserBuf2 = parser.buf2;\r\n        delete tableState.firstEntryNum;\r\n        delete tableState.entryCount;\r\n      }\r\n\r\n      if (this.entries[0] && !this.entries[0].free) {\r\n        throw new _util.FormatError(\"Invalid XRef table: unexpected first object\");\r\n      }\r\n\r\n      return obj;\r\n    },\r\n    processXRefStream: function XRef_processXRefStream(stream) {\r\n      if (!(\"streamState\" in this)) {\r\n        var streamParameters = stream.dict;\r\n        var byteWidths = streamParameters.get(\"W\");\r\n        var range = streamParameters.get(\"Index\");\r\n\r\n        if (!range) {\r\n          range = [0, streamParameters.get(\"Size\")];\r\n        }\r\n\r\n        this.streamState = {\r\n          entryRanges: range,\r\n          byteWidths: byteWidths,\r\n          entryNum: 0,\r\n          streamPos: stream.pos\r\n        };\r\n      }\r\n\r\n      this.readXRefStream(stream);\r\n      delete this.streamState;\r\n      return stream.dict;\r\n    },\r\n    readXRefStream: function XRef_readXRefStream(stream) {\r\n      var i, j;\r\n      var streamState = this.streamState;\r\n      stream.pos = streamState.streamPos;\r\n      var byteWidths = streamState.byteWidths;\r\n      var typeFieldWidth = byteWidths[0];\r\n      var offsetFieldWidth = byteWidths[1];\r\n      var generationFieldWidth = byteWidths[2];\r\n      var entryRanges = streamState.entryRanges;\r\n\r\n      while (entryRanges.length > 0) {\r\n        var first = entryRanges[0];\r\n        var n = entryRanges[1];\r\n\r\n        if (!Number.isInteger(first) || !Number.isInteger(n)) {\r\n          throw new _util.FormatError(\"Invalid XRef range fields: \".concat(first, \", \").concat(n));\r\n        }\r\n\r\n        if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) {\r\n          throw new _util.FormatError(\"Invalid XRef entry fields length: \".concat(first, \", \").concat(n));\r\n        }\r\n\r\n        for (i = streamState.entryNum; i < n; ++i) {\r\n          streamState.entryNum = i;\r\n          streamState.streamPos = stream.pos;\r\n          var type = 0,\r\n              offset = 0,\r\n              generation = 0;\r\n\r\n          for (j = 0; j < typeFieldWidth; ++j) {\r\n            type = type << 8 | stream.getByte();\r\n          }\r\n\r\n          if (typeFieldWidth === 0) {\r\n            type = 1;\r\n          }\r\n\r\n          for (j = 0; j < offsetFieldWidth; ++j) {\r\n            offset = offset << 8 | stream.getByte();\r\n          }\r\n\r\n          for (j = 0; j < generationFieldWidth; ++j) {\r\n            generation = generation << 8 | stream.getByte();\r\n          }\r\n\r\n          var entry = {};\r\n          entry.offset = offset;\r\n          entry.gen = generation;\r\n\r\n          switch (type) {\r\n            case 0:\r\n              entry.free = true;\r\n              break;\r\n\r\n            case 1:\r\n              entry.uncompressed = true;\r\n              break;\r\n\r\n            case 2:\r\n              break;\r\n\r\n            default:\r\n              throw new _util.FormatError(\"Invalid XRef entry type: \".concat(type));\r\n          }\r\n\r\n          if (!this.entries[first + i]) {\r\n            this.entries[first + i] = entry;\r\n          }\r\n        }\r\n\r\n        streamState.entryNum = 0;\r\n        streamState.streamPos = stream.pos;\r\n        entryRanges.splice(0, 2);\r\n      }\r\n    },\r\n    indexObjects: function XRef_indexObjects() {\r\n      var TAB = 0x9,\r\n          LF = 0xa,\r\n          CR = 0xd,\r\n          SPACE = 0x20;\r\n      var PERCENT = 0x25,\r\n          LT = 0x3c;\r\n\r\n      function readToken(data, offset) {\r\n        var token = \"\",\r\n            ch = data[offset];\r\n\r\n        while (ch !== LF && ch !== CR && ch !== LT) {\r\n          if (++offset >= data.length) {\r\n            break;\r\n          }\r\n\r\n          token += String.fromCharCode(ch);\r\n          ch = data[offset];\r\n        }\r\n\r\n        return token;\r\n      }\r\n\r\n      function skipUntil(data, offset, what) {\r\n        var length = what.length,\r\n            dataLength = data.length;\r\n        var skipped = 0;\r\n\r\n        while (offset < dataLength) {\r\n          var i = 0;\r\n\r\n          while (i < length && data[offset + i] === what[i]) {\r\n            ++i;\r\n          }\r\n\r\n          if (i >= length) {\r\n            break;\r\n          }\r\n\r\n          offset++;\r\n          skipped++;\r\n        }\r\n\r\n        return skipped;\r\n      }\r\n\r\n      var objRegExp = /^(\\d+)\\s+(\\d+)\\s+obj\\b/;\r\n      var endobjRegExp = /\\bendobj[\\b\\s]$/;\r\n      var nestedObjRegExp = /\\s+(\\d+\\s+\\d+\\s+obj[\\b\\s<])$/;\r\n      var CHECK_CONTENT_LENGTH = 25;\r\n      var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);\r\n      var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]);\r\n      var objBytes = new Uint8Array([111, 98, 106]);\r\n      var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);\r\n      this.entries.length = 0;\r\n      var stream = this.stream;\r\n      stream.pos = 0;\r\n      var buffer = stream.getBytes();\r\n      var position = stream.start,\r\n          length = buffer.length;\r\n      var trailers = [],\r\n          xrefStms = [];\r\n\r\n      while (position < length) {\r\n        var ch = buffer[position];\r\n\r\n        if (ch === TAB || ch === LF || ch === CR || ch === SPACE) {\r\n          ++position;\r\n          continue;\r\n        }\r\n\r\n        if (ch === PERCENT) {\r\n          do {\r\n            ++position;\r\n\r\n            if (position >= length) {\r\n              break;\r\n            }\r\n\r\n            ch = buffer[position];\r\n          } while (ch !== LF && ch !== CR);\r\n\r\n          continue;\r\n        }\r\n\r\n        var token = readToken(buffer, position);\r\n        var m;\r\n\r\n        if (token.startsWith(\"xref\") && (token.length === 4 || /\\s/.test(token[4]))) {\r\n          position += skipUntil(buffer, position, trailerBytes);\r\n          trailers.push(position);\r\n          position += skipUntil(buffer, position, startxrefBytes);\r\n        } else if (m = objRegExp.exec(token)) {\r\n          var num = m[1] | 0,\r\n              gen = m[2] | 0;\r\n\r\n          if (!this.entries[num] || this.entries[num].gen === gen) {\r\n            this.entries[num] = {\r\n              offset: position - stream.start,\r\n              gen: gen,\r\n              uncompressed: true\r\n            };\r\n          }\r\n\r\n          var contentLength = void 0,\r\n              startPos = position + token.length;\r\n\r\n          while (startPos < buffer.length) {\r\n            var endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4;\r\n            contentLength = endPos - position;\r\n            var checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos);\r\n            var tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos));\r\n\r\n            if (endobjRegExp.test(tokenStr)) {\r\n              break;\r\n            } else {\r\n              var objToken = nestedObjRegExp.exec(tokenStr);\r\n\r\n              if (objToken && objToken[1]) {\r\n                (0, _util.warn)('indexObjects: Found new \"obj\" inside of another \"obj\", ' + 'caused by missing \"endobj\" -- trying to recover.');\r\n                contentLength -= objToken[1].length;\r\n                break;\r\n              }\r\n            }\r\n\r\n            startPos = endPos;\r\n          }\r\n\r\n          var content = buffer.subarray(position, position + contentLength);\r\n          var xrefTagOffset = skipUntil(content, 0, xrefBytes);\r\n\r\n          if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) {\r\n            xrefStms.push(position - stream.start);\r\n            this.xrefstms[position - stream.start] = 1;\r\n          }\r\n\r\n          position += contentLength;\r\n        } else if (token.startsWith(\"trailer\") && (token.length === 7 || /\\s/.test(token[7]))) {\r\n          trailers.push(position);\r\n          position += skipUntil(buffer, position, startxrefBytes);\r\n        } else {\r\n          position += token.length + 1;\r\n        }\r\n      }\r\n\r\n      for (var i = 0, ii = xrefStms.length; i < ii; ++i) {\r\n        this.startXRefQueue.push(xrefStms[i]);\r\n        this.readXRef(true);\r\n      }\r\n\r\n      var trailerDict;\r\n\r\n      for (var _i2 = 0, _ii = trailers.length; _i2 < _ii; ++_i2) {\r\n        stream.pos = trailers[_i2];\r\n        var parser = new _parser.Parser({\r\n          lexer: new _parser.Lexer(stream),\r\n          xref: this,\r\n          allowStreams: true,\r\n          recoveryMode: true\r\n        });\r\n        var obj = parser.getObj();\r\n\r\n        if (!(0, _primitives.isCmd)(obj, \"trailer\")) {\r\n          continue;\r\n        }\r\n\r\n        var dict = parser.getObj();\r\n\r\n        if (!(0, _primitives.isDict)(dict)) {\r\n          continue;\r\n        }\r\n\r\n        try {\r\n          var rootDict = dict.get(\"Root\");\r\n\r\n          if (!(rootDict instanceof _primitives.Dict)) {\r\n            continue;\r\n          }\r\n\r\n          var pagesDict = rootDict.get(\"Pages\");\r\n\r\n          if (!(pagesDict instanceof _primitives.Dict)) {\r\n            continue;\r\n          }\r\n\r\n          var pagesCount = pagesDict.get(\"Count\");\r\n\r\n          if (!Number.isInteger(pagesCount)) {\r\n            continue;\r\n          }\r\n        } catch (ex) {\r\n          if (ex instanceof _core_utils.MissingDataException) {\r\n            throw ex;\r\n          }\r\n\r\n          continue;\r\n        }\r\n\r\n        if (dict.has(\"ID\")) {\r\n          return dict;\r\n        }\r\n\r\n        trailerDict = dict;\r\n      }\r\n\r\n      if (trailerDict) {\r\n        return trailerDict;\r\n      }\r\n\r\n      throw new _util.InvalidPDFException(\"Invalid PDF structure.\");\r\n    },\r\n    readXRef: function XRef_readXRef(recoveryMode) {\r\n      var stream = this.stream;\r\n      var startXRefParsedCache = Object.create(null);\r\n\r\n      try {\r\n        while (this.startXRefQueue.length) {\r\n          var startXRef = this.startXRefQueue[0];\r\n\r\n          if (startXRefParsedCache[startXRef]) {\r\n            (0, _util.warn)(\"readXRef - skipping XRef table since it was already parsed.\");\r\n            this.startXRefQueue.shift();\r\n            continue;\r\n          }\r\n\r\n          startXRefParsedCache[startXRef] = true;\r\n          stream.pos = startXRef + stream.start;\r\n          var parser = new _parser.Parser({\r\n            lexer: new _parser.Lexer(stream),\r\n            xref: this,\r\n            allowStreams: true\r\n          });\r\n          var obj = parser.getObj();\r\n          var dict;\r\n\r\n          if ((0, _primitives.isCmd)(obj, \"xref\")) {\r\n            dict = this.processXRefTable(parser);\r\n\r\n            if (!this.topDict) {\r\n              this.topDict = dict;\r\n            }\r\n\r\n            obj = dict.get(\"XRefStm\");\r\n\r\n            if (Number.isInteger(obj)) {\r\n              var pos = obj;\r\n\r\n              if (!(pos in this.xrefstms)) {\r\n                this.xrefstms[pos] = 1;\r\n                this.startXRefQueue.push(pos);\r\n              }\r\n            }\r\n          } else if (Number.isInteger(obj)) {\r\n            if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), \"obj\") || !(0, _primitives.isStream)(obj = parser.getObj())) {\r\n              throw new _util.FormatError(\"Invalid XRef stream\");\r\n            }\r\n\r\n            dict = this.processXRefStream(obj);\r\n\r\n            if (!this.topDict) {\r\n              this.topDict = dict;\r\n            }\r\n\r\n            if (!dict) {\r\n              throw new _util.FormatError(\"Failed to read XRef stream\");\r\n            }\r\n          } else {\r\n            throw new _util.FormatError(\"Invalid XRef stream header\");\r\n          }\r\n\r\n          obj = dict.get(\"Prev\");\r\n\r\n          if (Number.isInteger(obj)) {\r\n            this.startXRefQueue.push(obj);\r\n          } else if ((0, _primitives.isRef)(obj)) {\r\n            this.startXRefQueue.push(obj.num);\r\n          }\r\n\r\n          this.startXRefQueue.shift();\r\n        }\r\n\r\n        return this.topDict;\r\n      } catch (e) {\r\n        if (e instanceof _core_utils.MissingDataException) {\r\n          throw e;\r\n        }\r\n\r\n        (0, _util.info)(\"(while reading XRef): \" + e);\r\n      }\r\n\r\n      if (recoveryMode) {\r\n        return undefined;\r\n      }\r\n\r\n      throw new _core_utils.XRefParseException();\r\n    },\r\n    getEntry: function XRef_getEntry(i) {\r\n      var xrefEntry = this.entries[i];\r\n\r\n      if (xrefEntry && !xrefEntry.free && xrefEntry.offset) {\r\n        return xrefEntry;\r\n      }\r\n\r\n      return null;\r\n    },\r\n    fetchIfRef: function XRef_fetchIfRef(obj, suppressEncryption) {\r\n      if (obj instanceof _primitives.Ref) {\r\n        return this.fetch(obj, suppressEncryption);\r\n      }\r\n\r\n      return obj;\r\n    },\r\n    fetch: function XRef_fetch(ref, suppressEncryption) {\r\n      if (!(ref instanceof _primitives.Ref)) {\r\n        throw new Error(\"ref object is not a reference\");\r\n      }\r\n\r\n      var num = ref.num;\r\n\r\n      var cacheEntry = this._cacheMap.get(num);\r\n\r\n      if (cacheEntry !== undefined) {\r\n        if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) {\r\n          cacheEntry.objId = ref.toString();\r\n        }\r\n\r\n        return cacheEntry;\r\n      }\r\n\r\n      var xrefEntry = this.getEntry(num);\r\n\r\n      if (xrefEntry === null) {\r\n        this._cacheMap.set(num, xrefEntry);\r\n\r\n        return xrefEntry;\r\n      }\r\n\r\n      if (xrefEntry.uncompressed) {\r\n        xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption);\r\n      } else {\r\n        xrefEntry = this.fetchCompressed(ref, xrefEntry, suppressEncryption);\r\n      }\r\n\r\n      if ((0, _primitives.isDict)(xrefEntry)) {\r\n        xrefEntry.objId = ref.toString();\r\n      } else if ((0, _primitives.isStream)(xrefEntry)) {\r\n        xrefEntry.dict.objId = ref.toString();\r\n      }\r\n\r\n      return xrefEntry;\r\n    },\r\n    fetchUncompressed: function fetchUncompressed(ref, xrefEntry) {\r\n      var suppressEncryption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n      var gen = ref.gen;\r\n      var num = ref.num;\r\n\r\n      if (xrefEntry.gen !== gen) {\r\n        throw new _core_utils.XRefEntryException(\"Inconsistent generation in XRef: \".concat(ref));\r\n      }\r\n\r\n      var stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start);\r\n      var parser = new _parser.Parser({\r\n        lexer: new _parser.Lexer(stream),\r\n        xref: this,\r\n        allowStreams: true\r\n      });\r\n      var obj1 = parser.getObj();\r\n      var obj2 = parser.getObj();\r\n      var obj3 = parser.getObj();\r\n\r\n      if (obj1 !== num || obj2 !== gen || !(obj3 instanceof _primitives.Cmd)) {\r\n        throw new _core_utils.XRefEntryException(\"Bad (uncompressed) XRef entry: \".concat(ref));\r\n      }\r\n\r\n      if (obj3.cmd !== \"obj\") {\r\n        if (obj3.cmd.startsWith(\"obj\")) {\r\n          num = parseInt(obj3.cmd.substring(3), 10);\r\n\r\n          if (!Number.isNaN(num)) {\r\n            return num;\r\n          }\r\n        }\r\n\r\n        throw new _core_utils.XRefEntryException(\"Bad (uncompressed) XRef entry: \".concat(ref));\r\n      }\r\n\r\n      if (this.encrypt && !suppressEncryption) {\r\n        xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen));\r\n      } else {\r\n        xrefEntry = parser.getObj();\r\n      }\r\n\r\n      if (!(0, _primitives.isStream)(xrefEntry)) {\r\n        this._cacheMap.set(num, xrefEntry);\r\n      }\r\n\r\n      return xrefEntry;\r\n    },\r\n    fetchCompressed: function fetchCompressed(ref, xrefEntry) {\r\n      var suppressEncryption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n      var tableOffset = xrefEntry.offset;\r\n      var stream = this.fetch(_primitives.Ref.get(tableOffset, 0));\r\n\r\n      if (!(0, _primitives.isStream)(stream)) {\r\n        throw new _util.FormatError(\"bad ObjStm stream\");\r\n      }\r\n\r\n      var first = stream.dict.get(\"First\");\r\n      var n = stream.dict.get(\"N\");\r\n\r\n      if (!Number.isInteger(first) || !Number.isInteger(n)) {\r\n        throw new _util.FormatError(\"invalid first and n parameters for ObjStm stream\");\r\n      }\r\n\r\n      var parser = new _parser.Parser({\r\n        lexer: new _parser.Lexer(stream),\r\n        xref: this,\r\n        allowStreams: true\r\n      });\r\n      var nums = new Array(n);\r\n\r\n      for (var i = 0; i < n; ++i) {\r\n        var num = parser.getObj();\r\n\r\n        if (!Number.isInteger(num)) {\r\n          throw new _util.FormatError(\"invalid object number in the ObjStm stream: \".concat(num));\r\n        }\r\n\r\n        var offset = parser.getObj();\r\n\r\n        if (!Number.isInteger(offset)) {\r\n          throw new _util.FormatError(\"invalid object offset in the ObjStm stream: \".concat(offset));\r\n        }\r\n\r\n        nums[i] = num;\r\n      }\r\n\r\n      var entries = new Array(n);\r\n\r\n      for (var _i3 = 0; _i3 < n; ++_i3) {\r\n        var obj = parser.getObj();\r\n        entries[_i3] = obj;\r\n\r\n        if (parser.buf1 instanceof _primitives.Cmd && parser.buf1.cmd === \"endobj\") {\r\n          parser.shift();\r\n        }\r\n\r\n        if ((0, _primitives.isStream)(obj)) {\r\n          continue;\r\n        }\r\n\r\n        var _num = nums[_i3],\r\n            entry = this.entries[_num];\r\n\r\n        if (entry && entry.offset === tableOffset && entry.gen === _i3) {\r\n          this._cacheMap.set(_num, obj);\r\n        }\r\n      }\r\n\r\n      xrefEntry = entries[xrefEntry.gen];\r\n\r\n      if (xrefEntry === undefined) {\r\n        throw new _core_utils.XRefEntryException(\"Bad (compressed) XRef entry: \".concat(ref));\r\n      }\r\n\r\n      return xrefEntry;\r\n    },\r\n    fetchIfRefAsync: function fetchIfRefAsync(obj, suppressEncryption) {\r\n      var _this3 = this;\r\n\r\n      return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                if (!(obj instanceof _primitives.Ref)) {\r\n                  _context.next = 2;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\", _this3.fetchAsync(obj, suppressEncryption));\r\n\r\n              case 2:\r\n                return _context.abrupt(\"return\", obj);\r\n\r\n              case 3:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee);\r\n      }))();\r\n    },\r\n    fetchAsync: function fetchAsync(ref, suppressEncryption) {\r\n      var _this4 = this;\r\n\r\n      return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                _context2.prev = 0;\r\n                return _context2.abrupt(\"return\", _this4.fetch(ref, suppressEncryption));\r\n\r\n              case 4:\r\n                _context2.prev = 4;\r\n                _context2.t0 = _context2[\"catch\"](0);\r\n\r\n                if (_context2.t0 instanceof _core_utils.MissingDataException) {\r\n                  _context2.next = 8;\r\n                  break;\r\n                }\r\n\r\n                throw _context2.t0;\r\n\r\n              case 8:\r\n                _context2.next = 10;\r\n                return _this4.pdfManager.requestRange(_context2.t0.begin, _context2.t0.end);\r\n\r\n              case 10:\r\n                return _context2.abrupt(\"return\", _this4.fetchAsync(ref, suppressEncryption));\r\n\r\n              case 11:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, null, [[0, 4]]);\r\n      }))();\r\n    },\r\n    getCatalogObj: function XRef_getCatalogObj() {\r\n      return this.root;\r\n    }\r\n  };\r\n  return XRef;\r\n}();\r\n\r\nexports.XRef = XRef;\r\n\r\nvar NameOrNumberTree = /*#__PURE__*/function () {\r\n  function NameOrNumberTree(root, xref, type) {\r\n    _classCallCheck(this, NameOrNumberTree);\r\n\r\n    if (this.constructor === NameOrNumberTree) {\r\n      (0, _util.unreachable)(\"Cannot initialize NameOrNumberTree.\");\r\n    }\r\n\r\n    this.root = root;\r\n    this.xref = xref;\r\n    this._type = type;\r\n  }\r\n\r\n  _createClass(NameOrNumberTree, [{\r\n    key: \"getAll\",\r\n    value: function getAll() {\r\n      var dict = Object.create(null);\r\n\r\n      if (!this.root) {\r\n        return dict;\r\n      }\r\n\r\n      var xref = this.xref;\r\n      var processed = new _primitives.RefSet();\r\n      processed.put(this.root);\r\n      var queue = [this.root];\r\n\r\n      while (queue.length > 0) {\r\n        var obj = xref.fetchIfRef(queue.shift());\r\n\r\n        if (!(0, _primitives.isDict)(obj)) {\r\n          continue;\r\n        }\r\n\r\n        if (obj.has(\"Kids\")) {\r\n          var kids = obj.get(\"Kids\");\r\n\r\n          for (var i = 0, ii = kids.length; i < ii; i++) {\r\n            var kid = kids[i];\r\n\r\n            if (processed.has(kid)) {\r\n              throw new _util.FormatError(\"Duplicate entry in \\\"\".concat(this._type, \"\\\" tree.\"));\r\n            }\r\n\r\n            queue.push(kid);\r\n            processed.put(kid);\r\n          }\r\n\r\n          continue;\r\n        }\r\n\r\n        var entries = obj.get(this._type);\r\n\r\n        if (Array.isArray(entries)) {\r\n          for (var _i4 = 0, _ii2 = entries.length; _i4 < _ii2; _i4 += 2) {\r\n            dict[xref.fetchIfRef(entries[_i4])] = xref.fetchIfRef(entries[_i4 + 1]);\r\n          }\r\n        }\r\n      }\r\n\r\n      return dict;\r\n    }\r\n  }, {\r\n    key: \"get\",\r\n    value: function get(key) {\r\n      if (!this.root) {\r\n        return null;\r\n      }\r\n\r\n      var xref = this.xref;\r\n      var kidsOrEntries = xref.fetchIfRef(this.root);\r\n      var loopCount = 0;\r\n      var MAX_LEVELS = 10;\r\n\r\n      while (kidsOrEntries.has(\"Kids\")) {\r\n        if (++loopCount > MAX_LEVELS) {\r\n          (0, _util.warn)(\"Search depth limit reached for \\\"\".concat(this._type, \"\\\" tree.\"));\r\n          return null;\r\n        }\r\n\r\n        var kids = kidsOrEntries.get(\"Kids\");\r\n\r\n        if (!Array.isArray(kids)) {\r\n          return null;\r\n        }\r\n\r\n        var l = 0,\r\n            r = kids.length - 1;\r\n\r\n        while (l <= r) {\r\n          var m = l + r >> 1;\r\n          var kid = xref.fetchIfRef(kids[m]);\r\n          var limits = kid.get(\"Limits\");\r\n\r\n          if (key < xref.fetchIfRef(limits[0])) {\r\n            r = m - 1;\r\n          } else if (key > xref.fetchIfRef(limits[1])) {\r\n            l = m + 1;\r\n          } else {\r\n            kidsOrEntries = xref.fetchIfRef(kids[m]);\r\n            break;\r\n          }\r\n        }\r\n\r\n        if (l > r) {\r\n          return null;\r\n        }\r\n      }\r\n\r\n      var entries = kidsOrEntries.get(this._type);\r\n\r\n      if (Array.isArray(entries)) {\r\n        var _l = 0,\r\n            _r = entries.length - 2;\r\n\r\n        while (_l <= _r) {\r\n          var tmp = _l + _r >> 1,\r\n              _m = tmp + (tmp & 1);\r\n\r\n          var currentKey = xref.fetchIfRef(entries[_m]);\r\n\r\n          if (key < currentKey) {\r\n            _r = _m - 2;\r\n          } else if (key > currentKey) {\r\n            _l = _m + 2;\r\n          } else {\r\n            return xref.fetchIfRef(entries[_m + 1]);\r\n          }\r\n        }\r\n\r\n        (0, _util.info)(\"Falling back to an exhaustive search, for key \\\"\".concat(key, \"\\\", \") + \"in \\\"\".concat(this._type, \"\\\" tree.\"));\r\n\r\n        for (var _m2 = 0, mm = entries.length; _m2 < mm; _m2 += 2) {\r\n          var _currentKey = xref.fetchIfRef(entries[_m2]);\r\n\r\n          if (_currentKey === key) {\r\n            (0, _util.warn)(\"The \\\"\".concat(key, \"\\\" key was found at an incorrect, \") + \"i.e. out-of-order, position in \\\"\".concat(this._type, \"\\\" tree.\"));\r\n            return xref.fetchIfRef(entries[_m2 + 1]);\r\n          }\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n  }]);\r\n\r\n  return NameOrNumberTree;\r\n}();\r\n\r\nvar NameTree = /*#__PURE__*/function (_NameOrNumberTree) {\r\n  _inherits(NameTree, _NameOrNumberTree);\r\n\r\n  var _super = _createSuper(NameTree);\r\n\r\n  function NameTree(root, xref) {\r\n    _classCallCheck(this, NameTree);\r\n\r\n    return _super.call(this, root, xref, \"Names\");\r\n  }\r\n\r\n  return NameTree;\r\n}(NameOrNumberTree);\r\n\r\nvar NumberTree = /*#__PURE__*/function (_NameOrNumberTree2) {\r\n  _inherits(NumberTree, _NameOrNumberTree2);\r\n\r\n  var _super2 = _createSuper(NumberTree);\r\n\r\n  function NumberTree(root, xref) {\r\n    _classCallCheck(this, NumberTree);\r\n\r\n    return _super2.call(this, root, xref, \"Nums\");\r\n  }\r\n\r\n  return NumberTree;\r\n}(NameOrNumberTree);\r\n\r\nvar FileSpec = function FileSpecClosure() {\r\n  function FileSpec(root, xref) {\r\n    if (!root || !(0, _primitives.isDict)(root)) {\r\n      return;\r\n    }\r\n\r\n    this.xref = xref;\r\n    this.root = root;\r\n\r\n    if (root.has(\"FS\")) {\r\n      this.fs = root.get(\"FS\");\r\n    }\r\n\r\n    this.description = root.has(\"Desc\") ? (0, _util.stringToPDFString)(root.get(\"Desc\")) : \"\";\r\n\r\n    if (root.has(\"RF\")) {\r\n      (0, _util.warn)(\"Related file specifications are not supported\");\r\n    }\r\n\r\n    this.contentAvailable = true;\r\n\r\n    if (!root.has(\"EF\")) {\r\n      this.contentAvailable = false;\r\n      (0, _util.warn)(\"Non-embedded file specifications are not supported\");\r\n    }\r\n  }\r\n\r\n  function pickPlatformItem(dict) {\r\n    if (dict.has(\"UF\")) {\r\n      return dict.get(\"UF\");\r\n    } else if (dict.has(\"F\")) {\r\n      return dict.get(\"F\");\r\n    } else if (dict.has(\"Unix\")) {\r\n      return dict.get(\"Unix\");\r\n    } else if (dict.has(\"Mac\")) {\r\n      return dict.get(\"Mac\");\r\n    } else if (dict.has(\"DOS\")) {\r\n      return dict.get(\"DOS\");\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  FileSpec.prototype = {\r\n    get filename() {\r\n      if (!this._filename && this.root) {\r\n        var filename = pickPlatformItem(this.root) || \"unnamed\";\r\n        this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\\\\\/g, \"\\\\\").replace(/\\\\\\//g, \"/\").replace(/\\\\/g, \"/\");\r\n      }\r\n\r\n      return this._filename;\r\n    },\r\n\r\n    get content() {\r\n      if (!this.contentAvailable) {\r\n        return null;\r\n      }\r\n\r\n      if (!this.contentRef && this.root) {\r\n        this.contentRef = pickPlatformItem(this.root.get(\"EF\"));\r\n      }\r\n\r\n      var content = null;\r\n\r\n      if (this.contentRef) {\r\n        var xref = this.xref;\r\n        var fileObj = xref.fetchIfRef(this.contentRef);\r\n\r\n        if (fileObj && (0, _primitives.isStream)(fileObj)) {\r\n          content = fileObj.getBytes();\r\n        } else {\r\n          (0, _util.warn)(\"Embedded file specification points to non-existing/invalid \" + \"content\");\r\n        }\r\n      } else {\r\n        (0, _util.warn)(\"Embedded file specification does not have a content\");\r\n      }\r\n\r\n      return content;\r\n    },\r\n\r\n    get serializable() {\r\n      return {\r\n        filename: this.filename,\r\n        content: this.content\r\n      };\r\n    }\r\n\r\n  };\r\n  return FileSpec;\r\n}();\r\n\r\nexports.FileSpec = FileSpec;\r\n\r\nvar ObjectLoader = function () {\r\n  function mayHaveChildren(value) {\r\n    return value instanceof _primitives.Ref || value instanceof _primitives.Dict || Array.isArray(value) || (0, _primitives.isStream)(value);\r\n  }\r\n\r\n  function addChildren(node, nodesToVisit) {\r\n    if (node instanceof _primitives.Dict) {\r\n      node = node.getRawValues();\r\n    } else if ((0, _primitives.isStream)(node)) {\r\n      node = node.dict.getRawValues();\r\n    } else if (!Array.isArray(node)) {\r\n      return;\r\n    }\r\n\r\n    var _iterator7 = _createForOfIteratorHelper(node),\r\n        _step7;\r\n\r\n    try {\r\n      for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\r\n        var rawValue = _step7.value;\r\n\r\n        if (mayHaveChildren(rawValue)) {\r\n          nodesToVisit.push(rawValue);\r\n        }\r\n      }\r\n    } catch (err) {\r\n      _iterator7.e(err);\r\n    } finally {\r\n      _iterator7.f();\r\n    }\r\n  }\r\n\r\n  function ObjectLoader(dict, keys, xref) {\r\n    this.dict = dict;\r\n    this.keys = keys;\r\n    this.xref = xref;\r\n    this.refSet = null;\r\n  }\r\n\r\n  ObjectLoader.prototype = {\r\n    load: function load() {\r\n      var _this5 = this;\r\n\r\n      return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3() {\r\n        var keys, dict, nodesToVisit, i, ii, rawValue;\r\n        return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\r\n          while (1) {\r\n            switch (_context3.prev = _context3.next) {\r\n              case 0:\r\n                if (!(!_this5.xref.stream.allChunksLoaded || _this5.xref.stream.allChunksLoaded())) {\r\n                  _context3.next = 2;\r\n                  break;\r\n                }\r\n\r\n                return _context3.abrupt(\"return\", undefined);\r\n\r\n              case 2:\r\n                keys = _this5.keys, dict = _this5.dict;\r\n                _this5.refSet = new _primitives.RefSet();\r\n                nodesToVisit = [];\r\n\r\n                for (i = 0, ii = keys.length; i < ii; i++) {\r\n                  rawValue = dict.getRaw(keys[i]);\r\n\r\n                  if (rawValue !== undefined) {\r\n                    nodesToVisit.push(rawValue);\r\n                  }\r\n                }\r\n\r\n                return _context3.abrupt(\"return\", _this5._walk(nodesToVisit));\r\n\r\n              case 7:\r\n              case \"end\":\r\n                return _context3.stop();\r\n            }\r\n          }\r\n        }, _callee3);\r\n      }))();\r\n    },\r\n    _walk: function _walk(nodesToVisit) {\r\n      var _this6 = this;\r\n\r\n      return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4() {\r\n        var nodesToRevisit, pendingRequests, currentNode, manager, baseStreams, foundMissingData, i, ii, stream, _i5, _ii3, node;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\r\n          while (1) {\r\n            switch (_context4.prev = _context4.next) {\r\n              case 0:\r\n                nodesToRevisit = [];\r\n                pendingRequests = [];\r\n\r\n              case 2:\r\n                if (!nodesToVisit.length) {\r\n                  _context4.next = 25;\r\n                  break;\r\n                }\r\n\r\n                currentNode = nodesToVisit.pop();\r\n\r\n                if (!(currentNode instanceof _primitives.Ref)) {\r\n                  _context4.next = 21;\r\n                  break;\r\n                }\r\n\r\n                if (!_this6.refSet.has(currentNode)) {\r\n                  _context4.next = 7;\r\n                  break;\r\n                }\r\n\r\n                return _context4.abrupt(\"continue\", 2);\r\n\r\n              case 7:\r\n                _context4.prev = 7;\r\n\r\n                _this6.refSet.put(currentNode);\r\n\r\n                currentNode = _this6.xref.fetch(currentNode);\r\n                _context4.next = 21;\r\n                break;\r\n\r\n              case 12:\r\n                _context4.prev = 12;\r\n                _context4.t0 = _context4[\"catch\"](7);\r\n\r\n                if (_context4.t0 instanceof _core_utils.MissingDataException) {\r\n                  _context4.next = 19;\r\n                  break;\r\n                }\r\n\r\n                (0, _util.warn)(\"ObjectLoader._walk - requesting all data: \\\"\".concat(_context4.t0, \"\\\".\"));\r\n                _this6.refSet = null;\r\n                manager = _this6.xref.stream.manager;\r\n                return _context4.abrupt(\"return\", manager.requestAllChunks());\r\n\r\n              case 19:\r\n                nodesToRevisit.push(currentNode);\r\n                pendingRequests.push({\r\n                  begin: _context4.t0.begin,\r\n                  end: _context4.t0.end\r\n                });\r\n\r\n              case 21:\r\n                if (currentNode && currentNode.getBaseStreams) {\r\n                  baseStreams = currentNode.getBaseStreams();\r\n                  foundMissingData = false;\r\n\r\n                  for (i = 0, ii = baseStreams.length; i < ii; i++) {\r\n                    stream = baseStreams[i];\r\n\r\n                    if (stream.allChunksLoaded && !stream.allChunksLoaded()) {\r\n                      foundMissingData = true;\r\n                      pendingRequests.push({\r\n                        begin: stream.start,\r\n                        end: stream.end\r\n                      });\r\n                    }\r\n                  }\r\n\r\n                  if (foundMissingData) {\r\n                    nodesToRevisit.push(currentNode);\r\n                  }\r\n                }\r\n\r\n                addChildren(currentNode, nodesToVisit);\r\n                _context4.next = 2;\r\n                break;\r\n\r\n              case 25:\r\n                if (!pendingRequests.length) {\r\n                  _context4.next = 30;\r\n                  break;\r\n                }\r\n\r\n                _context4.next = 28;\r\n                return _this6.xref.stream.manager.requestRanges(pendingRequests);\r\n\r\n              case 28:\r\n                for (_i5 = 0, _ii3 = nodesToRevisit.length; _i5 < _ii3; _i5++) {\r\n                  node = nodesToRevisit[_i5];\r\n\r\n                  if (node instanceof _primitives.Ref) {\r\n                    _this6.refSet.remove(node);\r\n                  }\r\n                }\r\n\r\n                return _context4.abrupt(\"return\", _this6._walk(nodesToRevisit));\r\n\r\n              case 30:\r\n                _this6.refSet = null;\r\n                return _context4.abrupt(\"return\", undefined);\r\n\r\n              case 32:\r\n              case \"end\":\r\n                return _context4.stop();\r\n            }\r\n          }\r\n        }, _callee4, null, [[7, 12]]);\r\n      }))();\r\n    }\r\n  };\r\n  return ObjectLoader;\r\n}();\r\n\r\nexports.ObjectLoader = ObjectLoader;\r\n\r\n/***/ }),\r\n/* 141 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.Parser = exports.Linearization = exports.Lexer = void 0;\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar _ccitt_stream = __w_pdfjs_require__(143);\r\n\r\nvar _jbig2_stream = __w_pdfjs_require__(145);\r\n\r\nvar _jpeg_stream = __w_pdfjs_require__(148);\r\n\r\nvar _jpx_stream = __w_pdfjs_require__(150);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar MAX_LENGTH_TO_CACHE = 1000;\r\nvar MAX_ADLER32_LENGTH = 5552;\r\n\r\nfunction computeAdler32(bytes) {\r\n  var bytesLength = bytes.length;\r\n  var a = 1,\r\n      b = 0;\r\n\r\n  for (var i = 0; i < bytesLength; ++i) {\r\n    a += bytes[i] & 0xff;\r\n    b += a;\r\n  }\r\n\r\n  return b % 65521 << 16 | a % 65521;\r\n}\r\n\r\nvar Parser = /*#__PURE__*/function () {\r\n  function Parser(_ref) {\r\n    var lexer = _ref.lexer,\r\n        xref = _ref.xref,\r\n        _ref$allowStreams = _ref.allowStreams,\r\n        allowStreams = _ref$allowStreams === void 0 ? false : _ref$allowStreams,\r\n        _ref$recoveryMode = _ref.recoveryMode,\r\n        recoveryMode = _ref$recoveryMode === void 0 ? false : _ref$recoveryMode;\r\n\r\n    _classCallCheck(this, Parser);\r\n\r\n    this.lexer = lexer;\r\n    this.xref = xref;\r\n    this.allowStreams = allowStreams;\r\n    this.recoveryMode = recoveryMode;\r\n    this.imageCache = Object.create(null);\r\n    this.refill();\r\n  }\r\n\r\n  _createClass(Parser, [{\r\n    key: \"refill\",\r\n    value: function refill() {\r\n      this.buf1 = this.lexer.getObj();\r\n      this.buf2 = this.lexer.getObj();\r\n    }\r\n  }, {\r\n    key: \"shift\",\r\n    value: function shift() {\r\n      if (this.buf2 instanceof _primitives.Cmd && this.buf2.cmd === \"ID\") {\r\n        this.buf1 = this.buf2;\r\n        this.buf2 = null;\r\n      } else {\r\n        this.buf1 = this.buf2;\r\n        this.buf2 = this.lexer.getObj();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"tryShift\",\r\n    value: function tryShift() {\r\n      try {\r\n        this.shift();\r\n        return true;\r\n      } catch (e) {\r\n        if (e instanceof _core_utils.MissingDataException) {\r\n          throw e;\r\n        }\r\n\r\n        return false;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getObj\",\r\n    value: function getObj() {\r\n      var cipherTransform = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\r\n      var buf1 = this.buf1;\r\n      this.shift();\r\n\r\n      if (buf1 instanceof _primitives.Cmd) {\r\n        switch (buf1.cmd) {\r\n          case \"BI\":\r\n            return this.makeInlineImage(cipherTransform);\r\n\r\n          case \"[\":\r\n            var array = [];\r\n\r\n            while (!(0, _primitives.isCmd)(this.buf1, \"]\") && !(0, _primitives.isEOF)(this.buf1)) {\r\n              array.push(this.getObj(cipherTransform));\r\n            }\r\n\r\n            if ((0, _primitives.isEOF)(this.buf1)) {\r\n              if (!this.recoveryMode) {\r\n                throw new _util.FormatError(\"End of file inside array\");\r\n              }\r\n\r\n              return array;\r\n            }\r\n\r\n            this.shift();\r\n            return array;\r\n\r\n          case \"<<\":\r\n            var dict = new _primitives.Dict(this.xref);\r\n\r\n            while (!(0, _primitives.isCmd)(this.buf1, \">>\") && !(0, _primitives.isEOF)(this.buf1)) {\r\n              if (!(0, _primitives.isName)(this.buf1)) {\r\n                (0, _util.info)(\"Malformed dictionary: key must be a name object\");\r\n                this.shift();\r\n                continue;\r\n              }\r\n\r\n              var key = this.buf1.name;\r\n              this.shift();\r\n\r\n              if ((0, _primitives.isEOF)(this.buf1)) {\r\n                break;\r\n              }\r\n\r\n              dict.set(key, this.getObj(cipherTransform));\r\n            }\r\n\r\n            if ((0, _primitives.isEOF)(this.buf1)) {\r\n              if (!this.recoveryMode) {\r\n                throw new _util.FormatError(\"End of file inside dictionary\");\r\n              }\r\n\r\n              return dict;\r\n            }\r\n\r\n            if ((0, _primitives.isCmd)(this.buf2, \"stream\")) {\r\n              return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict;\r\n            }\r\n\r\n            this.shift();\r\n            return dict;\r\n\r\n          default:\r\n            return buf1;\r\n        }\r\n      }\r\n\r\n      if (Number.isInteger(buf1)) {\r\n        if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, \"R\")) {\r\n          var ref = _primitives.Ref.get(buf1, this.buf1);\r\n\r\n          this.shift();\r\n          this.shift();\r\n          return ref;\r\n        }\r\n\r\n        return buf1;\r\n      }\r\n\r\n      if (typeof buf1 === \"string\") {\r\n        if (cipherTransform) {\r\n          return cipherTransform.decryptString(buf1);\r\n        }\r\n\r\n        return buf1;\r\n      }\r\n\r\n      return buf1;\r\n    }\r\n  }, {\r\n    key: \"findDefaultInlineStreamEnd\",\r\n    value: function findDefaultInlineStreamEnd(stream) {\r\n      var E = 0x45,\r\n          I = 0x49,\r\n          SPACE = 0x20,\r\n          LF = 0xa,\r\n          CR = 0xd,\r\n          NUL = 0x0;\r\n      var lexer = this.lexer,\r\n          startPos = stream.pos,\r\n          n = 10;\r\n      var state = 0,\r\n          ch,\r\n          maybeEIPos;\r\n\r\n      while ((ch = stream.getByte()) !== -1) {\r\n        if (state === 0) {\r\n          state = ch === E ? 1 : 0;\r\n        } else if (state === 1) {\r\n          state = ch === I ? 2 : 0;\r\n        } else {\r\n          (0, _util.assert)(state === 2, \"findDefaultInlineStreamEnd - invalid state.\");\r\n\r\n          if (ch === SPACE || ch === LF || ch === CR) {\r\n            maybeEIPos = stream.pos;\r\n            var followingBytes = stream.peekBytes(n);\r\n\r\n            for (var i = 0, ii = followingBytes.length; i < ii; i++) {\r\n              ch = followingBytes[i];\r\n\r\n              if (ch === NUL && followingBytes[i + 1] !== NUL) {\r\n                continue;\r\n              }\r\n\r\n              if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) {\r\n                state = 0;\r\n                break;\r\n              }\r\n            }\r\n\r\n            if (state !== 2) {\r\n              continue;\r\n            }\r\n\r\n            if (lexer.knownCommands) {\r\n              var nextObj = lexer.peekObj();\r\n\r\n              if (nextObj instanceof _primitives.Cmd && !lexer.knownCommands[nextObj.cmd]) {\r\n                state = 0;\r\n              }\r\n            } else {\r\n              (0, _util.warn)(\"findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.\");\r\n            }\r\n\r\n            if (state === 2) {\r\n              break;\r\n            }\r\n          } else {\r\n            state = 0;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (ch === -1) {\r\n        (0, _util.warn)(\"findDefaultInlineStreamEnd: \" + \"Reached the end of the stream without finding a valid EI marker\");\r\n\r\n        if (maybeEIPos) {\r\n          (0, _util.warn)('... trying to recover by using the last \"EI\" occurrence.');\r\n          stream.skip(-(stream.pos - maybeEIPos));\r\n        }\r\n      }\r\n\r\n      var endOffset = 4;\r\n      stream.skip(-endOffset);\r\n      ch = stream.peekByte();\r\n      stream.skip(endOffset);\r\n\r\n      if (!(0, _core_utils.isWhiteSpace)(ch)) {\r\n        endOffset--;\r\n      }\r\n\r\n      return stream.pos - endOffset - startPos;\r\n    }\r\n  }, {\r\n    key: \"findDCTDecodeInlineStreamEnd\",\r\n    value: function findDCTDecodeInlineStreamEnd(stream) {\r\n      var startPos = stream.pos;\r\n      var foundEOI = false,\r\n          b,\r\n          markerLength;\r\n\r\n      while ((b = stream.getByte()) !== -1) {\r\n        if (b !== 0xff) {\r\n          continue;\r\n        }\r\n\r\n        switch (stream.getByte()) {\r\n          case 0x00:\r\n            break;\r\n\r\n          case 0xff:\r\n            stream.skip(-1);\r\n            break;\r\n\r\n          case 0xd9:\r\n            foundEOI = true;\r\n            break;\r\n\r\n          case 0xc0:\r\n          case 0xc1:\r\n          case 0xc2:\r\n          case 0xc3:\r\n          case 0xc5:\r\n          case 0xc6:\r\n          case 0xc7:\r\n          case 0xc9:\r\n          case 0xca:\r\n          case 0xcb:\r\n          case 0xcd:\r\n          case 0xce:\r\n          case 0xcf:\r\n          case 0xc4:\r\n          case 0xcc:\r\n          case 0xda:\r\n          case 0xdb:\r\n          case 0xdc:\r\n          case 0xdd:\r\n          case 0xde:\r\n          case 0xdf:\r\n          case 0xe0:\r\n          case 0xe1:\r\n          case 0xe2:\r\n          case 0xe3:\r\n          case 0xe4:\r\n          case 0xe5:\r\n          case 0xe6:\r\n          case 0xe7:\r\n          case 0xe8:\r\n          case 0xe9:\r\n          case 0xea:\r\n          case 0xeb:\r\n          case 0xec:\r\n          case 0xed:\r\n          case 0xee:\r\n          case 0xef:\r\n          case 0xfe:\r\n            markerLength = stream.getUint16();\r\n\r\n            if (markerLength > 2) {\r\n              stream.skip(markerLength - 2);\r\n            } else {\r\n              stream.skip(-2);\r\n            }\r\n\r\n            break;\r\n        }\r\n\r\n        if (foundEOI) {\r\n          break;\r\n        }\r\n      }\r\n\r\n      var length = stream.pos - startPos;\r\n\r\n      if (b === -1) {\r\n        (0, _util.warn)(\"Inline DCTDecode image stream: \" + \"EOI marker not found, searching for /EI/ instead.\");\r\n        stream.skip(-length);\r\n        return this.findDefaultInlineStreamEnd(stream);\r\n      }\r\n\r\n      this.inlineStreamSkipEI(stream);\r\n      return length;\r\n    }\r\n  }, {\r\n    key: \"findASCII85DecodeInlineStreamEnd\",\r\n    value: function findASCII85DecodeInlineStreamEnd(stream) {\r\n      var TILDE = 0x7e,\r\n          GT = 0x3e;\r\n      var startPos = stream.pos;\r\n      var ch;\r\n\r\n      while ((ch = stream.getByte()) !== -1) {\r\n        if (ch === TILDE) {\r\n          var tildePos = stream.pos;\r\n          ch = stream.peekByte();\r\n\r\n          while ((0, _core_utils.isWhiteSpace)(ch)) {\r\n            stream.skip();\r\n            ch = stream.peekByte();\r\n          }\r\n\r\n          if (ch === GT) {\r\n            stream.skip();\r\n            break;\r\n          }\r\n\r\n          if (stream.pos > tildePos) {\r\n            var maybeEI = stream.peekBytes(2);\r\n\r\n            if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) {\r\n              break;\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      var length = stream.pos - startPos;\r\n\r\n      if (ch === -1) {\r\n        (0, _util.warn)(\"Inline ASCII85Decode image stream: \" + \"EOD marker not found, searching for /EI/ instead.\");\r\n        stream.skip(-length);\r\n        return this.findDefaultInlineStreamEnd(stream);\r\n      }\r\n\r\n      this.inlineStreamSkipEI(stream);\r\n      return length;\r\n    }\r\n  }, {\r\n    key: \"findASCIIHexDecodeInlineStreamEnd\",\r\n    value: function findASCIIHexDecodeInlineStreamEnd(stream) {\r\n      var GT = 0x3e;\r\n      var startPos = stream.pos;\r\n      var ch;\r\n\r\n      while ((ch = stream.getByte()) !== -1) {\r\n        if (ch === GT) {\r\n          break;\r\n        }\r\n      }\r\n\r\n      var length = stream.pos - startPos;\r\n\r\n      if (ch === -1) {\r\n        (0, _util.warn)(\"Inline ASCIIHexDecode image stream: \" + \"EOD marker not found, searching for /EI/ instead.\");\r\n        stream.skip(-length);\r\n        return this.findDefaultInlineStreamEnd(stream);\r\n      }\r\n\r\n      this.inlineStreamSkipEI(stream);\r\n      return length;\r\n    }\r\n  }, {\r\n    key: \"inlineStreamSkipEI\",\r\n    value: function inlineStreamSkipEI(stream) {\r\n      var E = 0x45,\r\n          I = 0x49;\r\n      var state = 0,\r\n          ch;\r\n\r\n      while ((ch = stream.getByte()) !== -1) {\r\n        if (state === 0) {\r\n          state = ch === E ? 1 : 0;\r\n        } else if (state === 1) {\r\n          state = ch === I ? 2 : 0;\r\n        } else if (state === 2) {\r\n          break;\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"makeInlineImage\",\r\n    value: function makeInlineImage(cipherTransform) {\r\n      var lexer = this.lexer;\r\n      var stream = lexer.stream;\r\n      var dict = new _primitives.Dict(this.xref);\r\n      var dictLength;\r\n\r\n      while (!(0, _primitives.isCmd)(this.buf1, \"ID\") && !(0, _primitives.isEOF)(this.buf1)) {\r\n        if (!(0, _primitives.isName)(this.buf1)) {\r\n          throw new _util.FormatError(\"Dictionary key must be a name object\");\r\n        }\r\n\r\n        var key = this.buf1.name;\r\n        this.shift();\r\n\r\n        if ((0, _primitives.isEOF)(this.buf1)) {\r\n          break;\r\n        }\r\n\r\n        dict.set(key, this.getObj(cipherTransform));\r\n      }\r\n\r\n      if (lexer.beginInlineImagePos !== -1) {\r\n        dictLength = stream.pos - lexer.beginInlineImagePos;\r\n      }\r\n\r\n      var filter = dict.get(\"Filter\", \"F\");\r\n      var filterName;\r\n\r\n      if ((0, _primitives.isName)(filter)) {\r\n        filterName = filter.name;\r\n      } else if (Array.isArray(filter)) {\r\n        var filterZero = this.xref.fetchIfRef(filter[0]);\r\n\r\n        if ((0, _primitives.isName)(filterZero)) {\r\n          filterName = filterZero.name;\r\n        }\r\n      }\r\n\r\n      var startPos = stream.pos;\r\n      var length;\r\n\r\n      if (filterName === \"DCTDecode\" || filterName === \"DCT\") {\r\n        length = this.findDCTDecodeInlineStreamEnd(stream);\r\n      } else if (filterName === \"ASCII85Decode\" || filterName === \"A85\") {\r\n        length = this.findASCII85DecodeInlineStreamEnd(stream);\r\n      } else if (filterName === \"ASCIIHexDecode\" || filterName === \"AHx\") {\r\n        length = this.findASCIIHexDecodeInlineStreamEnd(stream);\r\n      } else {\r\n        length = this.findDefaultInlineStreamEnd(stream);\r\n      }\r\n\r\n      var imageStream = stream.makeSubStream(startPos, length, dict);\r\n      var cacheKey;\r\n\r\n      if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) {\r\n        var imageBytes = imageStream.getBytes();\r\n        imageStream.reset();\r\n        var initialStreamPos = stream.pos;\r\n        stream.pos = lexer.beginInlineImagePos;\r\n        var dictBytes = stream.getBytes(dictLength);\r\n        stream.pos = initialStreamPos;\r\n        cacheKey = computeAdler32(imageBytes) + \"_\" + computeAdler32(dictBytes);\r\n        var cacheEntry = this.imageCache[cacheKey];\r\n\r\n        if (cacheEntry !== undefined) {\r\n          this.buf2 = _primitives.Cmd.get(\"EI\");\r\n          this.shift();\r\n          cacheEntry.reset();\r\n          return cacheEntry;\r\n        }\r\n      }\r\n\r\n      if (cipherTransform) {\r\n        imageStream = cipherTransform.createStream(imageStream, length);\r\n      }\r\n\r\n      imageStream = this.filter(imageStream, dict, length);\r\n      imageStream.dict = dict;\r\n\r\n      if (cacheKey !== undefined) {\r\n        imageStream.cacheKey = \"inline_\".concat(length, \"_\").concat(cacheKey);\r\n        this.imageCache[cacheKey] = imageStream;\r\n      }\r\n\r\n      this.buf2 = _primitives.Cmd.get(\"EI\");\r\n      this.shift();\r\n      return imageStream;\r\n    }\r\n  }, {\r\n    key: \"_findStreamLength\",\r\n    value: function _findStreamLength(startPos, signature) {\r\n      var stream = this.lexer.stream;\r\n      stream.pos = startPos;\r\n      var SCAN_BLOCK_LENGTH = 2048;\r\n      var signatureLength = signature.length;\r\n\r\n      while (stream.pos < stream.end) {\r\n        var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);\r\n        var scanLength = scanBytes.length - signatureLength;\r\n\r\n        if (scanLength <= 0) {\r\n          break;\r\n        }\r\n\r\n        var pos = 0;\r\n\r\n        while (pos < scanLength) {\r\n          var j = 0;\r\n\r\n          while (j < signatureLength && scanBytes[pos + j] === signature[j]) {\r\n            j++;\r\n          }\r\n\r\n          if (j >= signatureLength) {\r\n            stream.pos += pos;\r\n            return stream.pos - startPos;\r\n          }\r\n\r\n          pos++;\r\n        }\r\n\r\n        stream.pos += scanLength;\r\n      }\r\n\r\n      return -1;\r\n    }\r\n  }, {\r\n    key: \"makeStream\",\r\n    value: function makeStream(dict, cipherTransform) {\r\n      var lexer = this.lexer;\r\n      var stream = lexer.stream;\r\n      lexer.skipToNextLine();\r\n      var startPos = stream.pos - 1;\r\n      var length = dict.get(\"Length\");\r\n\r\n      if (!Number.isInteger(length)) {\r\n        (0, _util.info)(\"Bad length \\\"\".concat(length, \"\\\" in stream\"));\r\n        length = 0;\r\n      }\r\n\r\n      stream.pos = startPos + length;\r\n      lexer.nextChar();\r\n\r\n      if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, \"endstream\")) {\r\n        this.shift();\r\n      } else {\r\n        var ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D]);\r\n\r\n        var actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE);\r\n\r\n        if (actualLength < 0) {\r\n          var MAX_TRUNCATION = 1;\r\n\r\n          for (var i = 1; i <= MAX_TRUNCATION; i++) {\r\n            var end = ENDSTREAM_SIGNATURE.length - i;\r\n            var TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end);\r\n\r\n            var maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE);\r\n\r\n            if (maybeLength >= 0) {\r\n              var lastByte = stream.peekBytes(end + 1)[end];\r\n\r\n              if (!(0, _core_utils.isWhiteSpace)(lastByte)) {\r\n                break;\r\n              }\r\n\r\n              (0, _util.info)(\"Found \\\"\".concat((0, _util.bytesToString)(TRUNCATED_SIGNATURE), \"\\\" when \") + \"searching for endstream command.\");\r\n              actualLength = maybeLength;\r\n              break;\r\n            }\r\n          }\r\n\r\n          if (actualLength < 0) {\r\n            throw new _util.FormatError(\"Missing endstream command.\");\r\n          }\r\n        }\r\n\r\n        length = actualLength;\r\n        lexer.nextChar();\r\n        this.shift();\r\n        this.shift();\r\n      }\r\n\r\n      this.shift();\r\n      stream = stream.makeSubStream(startPos, length, dict);\r\n\r\n      if (cipherTransform) {\r\n        stream = cipherTransform.createStream(stream, length);\r\n      }\r\n\r\n      stream = this.filter(stream, dict, length);\r\n      stream.dict = dict;\r\n      return stream;\r\n    }\r\n  }, {\r\n    key: \"filter\",\r\n    value: function filter(stream, dict, length) {\r\n      var filter = dict.get(\"Filter\", \"F\");\r\n      var params = dict.get(\"DecodeParms\", \"DP\");\r\n\r\n      if ((0, _primitives.isName)(filter)) {\r\n        if (Array.isArray(params)) {\r\n          (0, _util.warn)(\"/DecodeParms should not contain an Array, \" + \"when /Filter contains a Name.\");\r\n        }\r\n\r\n        return this.makeFilter(stream, filter.name, length, params);\r\n      }\r\n\r\n      var maybeLength = length;\r\n\r\n      if (Array.isArray(filter)) {\r\n        var filterArray = filter;\r\n        var paramsArray = params;\r\n\r\n        for (var i = 0, ii = filterArray.length; i < ii; ++i) {\r\n          filter = this.xref.fetchIfRef(filterArray[i]);\r\n\r\n          if (!(0, _primitives.isName)(filter)) {\r\n            throw new _util.FormatError(\"Bad filter name \\\"\".concat(filter, \"\\\"\"));\r\n          }\r\n\r\n          params = null;\r\n\r\n          if (Array.isArray(paramsArray) && i in paramsArray) {\r\n            params = this.xref.fetchIfRef(paramsArray[i]);\r\n          }\r\n\r\n          stream = this.makeFilter(stream, filter.name, maybeLength, params);\r\n          maybeLength = null;\r\n        }\r\n      }\r\n\r\n      return stream;\r\n    }\r\n  }, {\r\n    key: \"makeFilter\",\r\n    value: function makeFilter(stream, name, maybeLength, params) {\r\n      if (maybeLength === 0) {\r\n        (0, _util.warn)(\"Empty \\\"\".concat(name, \"\\\" stream.\"));\r\n        return new _stream.NullStream();\r\n      }\r\n\r\n      try {\r\n        var xrefStreamStats = this.xref.stats.streamTypes;\r\n\r\n        if (name === \"FlateDecode\" || name === \"Fl\") {\r\n          xrefStreamStats[_util.StreamType.FLATE] = true;\r\n\r\n          if (params) {\r\n            return new _stream.PredictorStream(new _stream.FlateStream(stream, maybeLength), maybeLength, params);\r\n          }\r\n\r\n          return new _stream.FlateStream(stream, maybeLength);\r\n        }\r\n\r\n        if (name === \"LZWDecode\" || name === \"LZW\") {\r\n          xrefStreamStats[_util.StreamType.LZW] = true;\r\n          var earlyChange = 1;\r\n\r\n          if (params) {\r\n            if (params.has(\"EarlyChange\")) {\r\n              earlyChange = params.get(\"EarlyChange\");\r\n            }\r\n\r\n            return new _stream.PredictorStream(new _stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params);\r\n          }\r\n\r\n          return new _stream.LZWStream(stream, maybeLength, earlyChange);\r\n        }\r\n\r\n        if (name === \"DCTDecode\" || name === \"DCT\") {\r\n          xrefStreamStats[_util.StreamType.DCT] = true;\r\n          return new _jpeg_stream.JpegStream(stream, maybeLength, stream.dict, params);\r\n        }\r\n\r\n        if (name === \"JPXDecode\" || name === \"JPX\") {\r\n          xrefStreamStats[_util.StreamType.JPX] = true;\r\n          return new _jpx_stream.JpxStream(stream, maybeLength, stream.dict, params);\r\n        }\r\n\r\n        if (name === \"ASCII85Decode\" || name === \"A85\") {\r\n          xrefStreamStats[_util.StreamType.A85] = true;\r\n          return new _stream.Ascii85Stream(stream, maybeLength);\r\n        }\r\n\r\n        if (name === \"ASCIIHexDecode\" || name === \"AHx\") {\r\n          xrefStreamStats[_util.StreamType.AHX] = true;\r\n          return new _stream.AsciiHexStream(stream, maybeLength);\r\n        }\r\n\r\n        if (name === \"CCITTFaxDecode\" || name === \"CCF\") {\r\n          xrefStreamStats[_util.StreamType.CCF] = true;\r\n          return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params);\r\n        }\r\n\r\n        if (name === \"RunLengthDecode\" || name === \"RL\") {\r\n          xrefStreamStats[_util.StreamType.RLX] = true;\r\n          return new _stream.RunLengthStream(stream, maybeLength);\r\n        }\r\n\r\n        if (name === \"JBIG2Decode\") {\r\n          xrefStreamStats[_util.StreamType.JBIG] = true;\r\n          return new _jbig2_stream.Jbig2Stream(stream, maybeLength, stream.dict, params);\r\n        }\r\n\r\n        (0, _util.warn)(\"Filter \\\"\".concat(name, \"\\\" is not supported.\"));\r\n        return stream;\r\n      } catch (ex) {\r\n        if (ex instanceof _core_utils.MissingDataException) {\r\n          throw ex;\r\n        }\r\n\r\n        (0, _util.warn)(\"Invalid stream: \\\"\".concat(ex, \"\\\"\"));\r\n        return new _stream.NullStream();\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return Parser;\r\n}();\r\n\r\nexports.Parser = Parser;\r\nvar specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n\r\nfunction toHexDigit(ch) {\r\n  if (ch >= 0x30 && ch <= 0x39) {\r\n    return ch & 0x0f;\r\n  }\r\n\r\n  if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {\r\n    return (ch & 0x0f) + 9;\r\n  }\r\n\r\n  return -1;\r\n}\r\n\r\nvar Lexer = /*#__PURE__*/function () {\r\n  function Lexer(stream) {\r\n    var knownCommands = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n\r\n    _classCallCheck(this, Lexer);\r\n\r\n    this.stream = stream;\r\n    this.nextChar();\r\n    this.strBuf = [];\r\n    this.knownCommands = knownCommands;\r\n    this._hexStringNumWarn = 0;\r\n    this.beginInlineImagePos = -1;\r\n  }\r\n\r\n  _createClass(Lexer, [{\r\n    key: \"nextChar\",\r\n    value: function nextChar() {\r\n      return this.currentChar = this.stream.getByte();\r\n    }\r\n  }, {\r\n    key: \"peekChar\",\r\n    value: function peekChar() {\r\n      return this.stream.peekByte();\r\n    }\r\n  }, {\r\n    key: \"getNumber\",\r\n    value: function getNumber() {\r\n      var ch = this.currentChar;\r\n      var eNotation = false;\r\n      var divideBy = 0;\r\n      var sign = 0;\r\n\r\n      if (ch === 0x2d) {\r\n        sign = -1;\r\n        ch = this.nextChar();\r\n\r\n        if (ch === 0x2d) {\r\n          ch = this.nextChar();\r\n        }\r\n      } else if (ch === 0x2b) {\r\n        sign = 1;\r\n        ch = this.nextChar();\r\n      }\r\n\r\n      if (ch === 0x0a || ch === 0x0d) {\r\n        do {\r\n          ch = this.nextChar();\r\n        } while (ch === 0x0a || ch === 0x0d);\r\n      }\r\n\r\n      if (ch === 0x2e) {\r\n        divideBy = 10;\r\n        ch = this.nextChar();\r\n      }\r\n\r\n      if (ch < 0x30 || ch > 0x39) {\r\n        if (divideBy === 10 && sign === 0 && ((0, _core_utils.isWhiteSpace)(ch) || ch === -1)) {\r\n          (0, _util.warn)(\"Lexer.getNumber - treating a single decimal point as zero.\");\r\n          return 0;\r\n        }\r\n\r\n        throw new _util.FormatError(\"Invalid number: \".concat(String.fromCharCode(ch), \" (charCode \").concat(ch, \")\"));\r\n      }\r\n\r\n      sign = sign || 1;\r\n      var baseValue = ch - 0x30;\r\n      var powerValue = 0;\r\n      var powerValueSign = 1;\r\n\r\n      while ((ch = this.nextChar()) >= 0) {\r\n        if (ch >= 0x30 && ch <= 0x39) {\r\n          var currentDigit = ch - 0x30;\r\n\r\n          if (eNotation) {\r\n            powerValue = powerValue * 10 + currentDigit;\r\n          } else {\r\n            if (divideBy !== 0) {\r\n              divideBy *= 10;\r\n            }\r\n\r\n            baseValue = baseValue * 10 + currentDigit;\r\n          }\r\n        } else if (ch === 0x2e) {\r\n          if (divideBy === 0) {\r\n            divideBy = 1;\r\n          } else {\r\n            break;\r\n          }\r\n        } else if (ch === 0x2d) {\r\n          (0, _util.warn)(\"Badly formatted number: minus sign in the middle\");\r\n        } else if (ch === 0x45 || ch === 0x65) {\r\n          ch = this.peekChar();\r\n\r\n          if (ch === 0x2b || ch === 0x2d) {\r\n            powerValueSign = ch === 0x2d ? -1 : 1;\r\n            this.nextChar();\r\n          } else if (ch < 0x30 || ch > 0x39) {\r\n            break;\r\n          }\r\n\r\n          eNotation = true;\r\n        } else {\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (divideBy !== 0) {\r\n        baseValue /= divideBy;\r\n      }\r\n\r\n      if (eNotation) {\r\n        baseValue *= Math.pow(10, powerValueSign * powerValue);\r\n      }\r\n\r\n      return sign * baseValue;\r\n    }\r\n  }, {\r\n    key: \"getString\",\r\n    value: function getString() {\r\n      var numParen = 1;\r\n      var done = false;\r\n      var strBuf = this.strBuf;\r\n      strBuf.length = 0;\r\n      var ch = this.nextChar();\r\n\r\n      while (true) {\r\n        var charBuffered = false;\r\n\r\n        switch (ch | 0) {\r\n          case -1:\r\n            (0, _util.warn)(\"Unterminated string\");\r\n            done = true;\r\n            break;\r\n\r\n          case 0x28:\r\n            ++numParen;\r\n            strBuf.push(\"(\");\r\n            break;\r\n\r\n          case 0x29:\r\n            if (--numParen === 0) {\r\n              this.nextChar();\r\n              done = true;\r\n            } else {\r\n              strBuf.push(\")\");\r\n            }\r\n\r\n            break;\r\n\r\n          case 0x5c:\r\n            ch = this.nextChar();\r\n\r\n            switch (ch) {\r\n              case -1:\r\n                (0, _util.warn)(\"Unterminated string\");\r\n                done = true;\r\n                break;\r\n\r\n              case 0x6e:\r\n                strBuf.push(\"\\n\");\r\n                break;\r\n\r\n              case 0x72:\r\n                strBuf.push(\"\\r\");\r\n                break;\r\n\r\n              case 0x74:\r\n                strBuf.push(\"\\t\");\r\n                break;\r\n\r\n              case 0x62:\r\n                strBuf.push(\"\\b\");\r\n                break;\r\n\r\n              case 0x66:\r\n                strBuf.push(\"\\f\");\r\n                break;\r\n\r\n              case 0x5c:\r\n              case 0x28:\r\n              case 0x29:\r\n                strBuf.push(String.fromCharCode(ch));\r\n                break;\r\n\r\n              case 0x30:\r\n              case 0x31:\r\n              case 0x32:\r\n              case 0x33:\r\n              case 0x34:\r\n              case 0x35:\r\n              case 0x36:\r\n              case 0x37:\r\n                var x = ch & 0x0f;\r\n                ch = this.nextChar();\r\n                charBuffered = true;\r\n\r\n                if (ch >= 0x30 && ch <= 0x37) {\r\n                  x = (x << 3) + (ch & 0x0f);\r\n                  ch = this.nextChar();\r\n\r\n                  if (ch >= 0x30 && ch <= 0x37) {\r\n                    charBuffered = false;\r\n                    x = (x << 3) + (ch & 0x0f);\r\n                  }\r\n                }\r\n\r\n                strBuf.push(String.fromCharCode(x));\r\n                break;\r\n\r\n              case 0x0d:\r\n                if (this.peekChar() === 0x0a) {\r\n                  this.nextChar();\r\n                }\r\n\r\n                break;\r\n\r\n              case 0x0a:\r\n                break;\r\n\r\n              default:\r\n                strBuf.push(String.fromCharCode(ch));\r\n                break;\r\n            }\r\n\r\n            break;\r\n\r\n          default:\r\n            strBuf.push(String.fromCharCode(ch));\r\n            break;\r\n        }\r\n\r\n        if (done) {\r\n          break;\r\n        }\r\n\r\n        if (!charBuffered) {\r\n          ch = this.nextChar();\r\n        }\r\n      }\r\n\r\n      return strBuf.join(\"\");\r\n    }\r\n  }, {\r\n    key: \"getName\",\r\n    value: function getName() {\r\n      var ch, previousCh;\r\n      var strBuf = this.strBuf;\r\n      strBuf.length = 0;\r\n\r\n      while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {\r\n        if (ch === 0x23) {\r\n          ch = this.nextChar();\r\n\r\n          if (specialChars[ch]) {\r\n            (0, _util.warn)(\"Lexer_getName: \" + \"NUMBER SIGN (#) should be followed by a hexadecimal number.\");\r\n            strBuf.push(\"#\");\r\n            break;\r\n          }\r\n\r\n          var x = toHexDigit(ch);\r\n\r\n          if (x !== -1) {\r\n            previousCh = ch;\r\n            ch = this.nextChar();\r\n            var x2 = toHexDigit(ch);\r\n\r\n            if (x2 === -1) {\r\n              (0, _util.warn)(\"Lexer_getName: Illegal digit (\".concat(String.fromCharCode(ch), \") \") + \"in hexadecimal number.\");\r\n              strBuf.push(\"#\", String.fromCharCode(previousCh));\r\n\r\n              if (specialChars[ch]) {\r\n                break;\r\n              }\r\n\r\n              strBuf.push(String.fromCharCode(ch));\r\n              continue;\r\n            }\r\n\r\n            strBuf.push(String.fromCharCode(x << 4 | x2));\r\n          } else {\r\n            strBuf.push(\"#\", String.fromCharCode(ch));\r\n          }\r\n        } else {\r\n          strBuf.push(String.fromCharCode(ch));\r\n        }\r\n      }\r\n\r\n      if (strBuf.length > 127) {\r\n        (0, _util.warn)(\"Name token is longer than allowed by the spec: \".concat(strBuf.length));\r\n      }\r\n\r\n      return _primitives.Name.get(strBuf.join(\"\"));\r\n    }\r\n  }, {\r\n    key: \"_hexStringWarn\",\r\n    value: function _hexStringWarn(ch) {\r\n      var MAX_HEX_STRING_NUM_WARN = 5;\r\n\r\n      if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) {\r\n        (0, _util.warn)(\"getHexString - ignoring additional invalid characters.\");\r\n        return;\r\n      }\r\n\r\n      if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) {\r\n        return;\r\n      }\r\n\r\n      (0, _util.warn)(\"getHexString - ignoring invalid character: \".concat(ch));\r\n    }\r\n  }, {\r\n    key: \"getHexString\",\r\n    value: function getHexString() {\r\n      var strBuf = this.strBuf;\r\n      strBuf.length = 0;\r\n      var ch = this.currentChar;\r\n      var isFirstHex = true;\r\n      var firstDigit, secondDigit;\r\n      this._hexStringNumWarn = 0;\r\n\r\n      while (true) {\r\n        if (ch < 0) {\r\n          (0, _util.warn)(\"Unterminated hex string\");\r\n          break;\r\n        } else if (ch === 0x3e) {\r\n          this.nextChar();\r\n          break;\r\n        } else if (specialChars[ch] === 1) {\r\n          ch = this.nextChar();\r\n          continue;\r\n        } else {\r\n          if (isFirstHex) {\r\n            firstDigit = toHexDigit(ch);\r\n\r\n            if (firstDigit === -1) {\r\n              this._hexStringWarn(ch);\r\n\r\n              ch = this.nextChar();\r\n              continue;\r\n            }\r\n          } else {\r\n            secondDigit = toHexDigit(ch);\r\n\r\n            if (secondDigit === -1) {\r\n              this._hexStringWarn(ch);\r\n\r\n              ch = this.nextChar();\r\n              continue;\r\n            }\r\n\r\n            strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit));\r\n          }\r\n\r\n          isFirstHex = !isFirstHex;\r\n          ch = this.nextChar();\r\n        }\r\n      }\r\n\r\n      return strBuf.join(\"\");\r\n    }\r\n  }, {\r\n    key: \"getObj\",\r\n    value: function getObj() {\r\n      var comment = false;\r\n      var ch = this.currentChar;\r\n\r\n      while (true) {\r\n        if (ch < 0) {\r\n          return _primitives.EOF;\r\n        }\r\n\r\n        if (comment) {\r\n          if (ch === 0x0a || ch === 0x0d) {\r\n            comment = false;\r\n          }\r\n        } else if (ch === 0x25) {\r\n          comment = true;\r\n        } else if (specialChars[ch] !== 1) {\r\n          break;\r\n        }\r\n\r\n        ch = this.nextChar();\r\n      }\r\n\r\n      switch (ch | 0) {\r\n        case 0x30:\r\n        case 0x31:\r\n        case 0x32:\r\n        case 0x33:\r\n        case 0x34:\r\n        case 0x35:\r\n        case 0x36:\r\n        case 0x37:\r\n        case 0x38:\r\n        case 0x39:\r\n        case 0x2b:\r\n        case 0x2d:\r\n        case 0x2e:\r\n          return this.getNumber();\r\n\r\n        case 0x28:\r\n          return this.getString();\r\n\r\n        case 0x2f:\r\n          return this.getName();\r\n\r\n        case 0x5b:\r\n          this.nextChar();\r\n          return _primitives.Cmd.get(\"[\");\r\n\r\n        case 0x5d:\r\n          this.nextChar();\r\n          return _primitives.Cmd.get(\"]\");\r\n\r\n        case 0x3c:\r\n          ch = this.nextChar();\r\n\r\n          if (ch === 0x3c) {\r\n            this.nextChar();\r\n            return _primitives.Cmd.get(\"<<\");\r\n          }\r\n\r\n          return this.getHexString();\r\n\r\n        case 0x3e:\r\n          ch = this.nextChar();\r\n\r\n          if (ch === 0x3e) {\r\n            this.nextChar();\r\n            return _primitives.Cmd.get(\">>\");\r\n          }\r\n\r\n          return _primitives.Cmd.get(\">\");\r\n\r\n        case 0x7b:\r\n          this.nextChar();\r\n          return _primitives.Cmd.get(\"{\");\r\n\r\n        case 0x7d:\r\n          this.nextChar();\r\n          return _primitives.Cmd.get(\"}\");\r\n\r\n        case 0x29:\r\n          this.nextChar();\r\n          throw new _util.FormatError(\"Illegal character: \".concat(ch));\r\n      }\r\n\r\n      var str = String.fromCharCode(ch);\r\n      var knownCommands = this.knownCommands;\r\n      var knownCommandFound = knownCommands && knownCommands[str] !== undefined;\r\n\r\n      while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {\r\n        var possibleCommand = str + String.fromCharCode(ch);\r\n\r\n        if (knownCommandFound && knownCommands[possibleCommand] === undefined) {\r\n          break;\r\n        }\r\n\r\n        if (str.length === 128) {\r\n          throw new _util.FormatError(\"Command token too long: \".concat(str.length));\r\n        }\r\n\r\n        str = possibleCommand;\r\n        knownCommandFound = knownCommands && knownCommands[str] !== undefined;\r\n      }\r\n\r\n      if (str === \"true\") {\r\n        return true;\r\n      }\r\n\r\n      if (str === \"false\") {\r\n        return false;\r\n      }\r\n\r\n      if (str === \"null\") {\r\n        return null;\r\n      }\r\n\r\n      if (str === \"BI\") {\r\n        this.beginInlineImagePos = this.stream.pos;\r\n      }\r\n\r\n      return _primitives.Cmd.get(str);\r\n    }\r\n  }, {\r\n    key: \"peekObj\",\r\n    value: function peekObj() {\r\n      var streamPos = this.stream.pos,\r\n          currentChar = this.currentChar,\r\n          beginInlineImagePos = this.beginInlineImagePos;\r\n      var nextObj;\r\n\r\n      try {\r\n        nextObj = this.getObj();\r\n      } catch (ex) {\r\n        if (ex instanceof _core_utils.MissingDataException) {\r\n          throw ex;\r\n        }\r\n\r\n        (0, _util.warn)(\"peekObj: \".concat(ex));\r\n      }\r\n\r\n      this.stream.pos = streamPos;\r\n      this.currentChar = currentChar;\r\n      this.beginInlineImagePos = beginInlineImagePos;\r\n      return nextObj;\r\n    }\r\n  }, {\r\n    key: \"skipToNextLine\",\r\n    value: function skipToNextLine() {\r\n      var ch = this.currentChar;\r\n\r\n      while (ch >= 0) {\r\n        if (ch === 0x0d) {\r\n          ch = this.nextChar();\r\n\r\n          if (ch === 0x0a) {\r\n            this.nextChar();\r\n          }\r\n\r\n          break;\r\n        } else if (ch === 0x0a) {\r\n          this.nextChar();\r\n          break;\r\n        }\r\n\r\n        ch = this.nextChar();\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return Lexer;\r\n}();\r\n\r\nexports.Lexer = Lexer;\r\n\r\nvar Linearization = /*#__PURE__*/function () {\r\n  function Linearization() {\r\n    _classCallCheck(this, Linearization);\r\n  }\r\n\r\n  _createClass(Linearization, null, [{\r\n    key: \"create\",\r\n    value: function create(stream) {\r\n      function getInt(linDict, name) {\r\n        var allowZeroValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n        var obj = linDict.get(name);\r\n\r\n        if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) {\r\n          return obj;\r\n        }\r\n\r\n        throw new Error(\"The \\\"\".concat(name, \"\\\" parameter in the linearization \") + \"dictionary is invalid.\");\r\n      }\r\n\r\n      function getHints(linDict) {\r\n        var hints = linDict.get(\"H\");\r\n        var hintsLength;\r\n\r\n        if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) {\r\n          for (var index = 0; index < hintsLength; index++) {\r\n            var hint = hints[index];\r\n\r\n            if (!(Number.isInteger(hint) && hint > 0)) {\r\n              throw new Error(\"Hint (\".concat(index, \") in the linearization dictionary is invalid.\"));\r\n            }\r\n          }\r\n\r\n          return hints;\r\n        }\r\n\r\n        throw new Error(\"Hint array in the linearization dictionary is invalid.\");\r\n      }\r\n\r\n      var parser = new Parser({\r\n        lexer: new Lexer(stream),\r\n        xref: null\r\n      });\r\n      var obj1 = parser.getObj();\r\n      var obj2 = parser.getObj();\r\n      var obj3 = parser.getObj();\r\n      var linDict = parser.getObj();\r\n      var obj, length;\r\n\r\n      if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, \"obj\") && (0, _primitives.isDict)(linDict) && (0, _util.isNum)(obj = linDict.get(\"Linearized\")) && obj > 0)) {\r\n        return null;\r\n      } else if ((length = getInt(linDict, \"L\")) !== stream.length) {\r\n        throw new Error('The \"L\" parameter in the linearization dictionary ' + \"does not equal the stream length.\");\r\n      }\r\n\r\n      return {\r\n        length: length,\r\n        hints: getHints(linDict),\r\n        objectNumberFirst: getInt(linDict, \"O\"),\r\n        endFirst: getInt(linDict, \"E\"),\r\n        numPages: getInt(linDict, \"N\"),\r\n        mainXRefEntriesOffset: getInt(linDict, \"T\"),\r\n        pageFirst: linDict.has(\"P\") ? getInt(linDict, \"P\", true) : 0\r\n      };\r\n    }\r\n  }]);\r\n\r\n  return Linearization;\r\n}();\r\n\r\nexports.Linearization = Linearization;\r\n\r\n/***/ }),\r\n/* 142 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.StringStream = exports.StreamsSequenceStream = exports.Stream = exports.RunLengthStream = exports.PredictorStream = exports.NullStream = exports.LZWStream = exports.FlateStream = exports.DecryptStream = exports.DecodeStream = exports.AsciiHexStream = exports.Ascii85Stream = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\r\n\r\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\r\n\r\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nvar Stream = function StreamClosure() {\r\n  function Stream(arrayBuffer, start, length, dict) {\r\n    this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer);\r\n    this.start = start || 0;\r\n    this.pos = this.start;\r\n    this.end = start + length || this.bytes.length;\r\n    this.dict = dict;\r\n  }\r\n\r\n  Stream.prototype = {\r\n    get length() {\r\n      return this.end - this.start;\r\n    },\r\n\r\n    get isEmpty() {\r\n      return this.length === 0;\r\n    },\r\n\r\n    getByte: function Stream_getByte() {\r\n      if (this.pos >= this.end) {\r\n        return -1;\r\n      }\r\n\r\n      return this.bytes[this.pos++];\r\n    },\r\n    getUint16: function Stream_getUint16() {\r\n      var b0 = this.getByte();\r\n      var b1 = this.getByte();\r\n\r\n      if (b0 === -1 || b1 === -1) {\r\n        return -1;\r\n      }\r\n\r\n      return (b0 << 8) + b1;\r\n    },\r\n    getInt32: function Stream_getInt32() {\r\n      var b0 = this.getByte();\r\n      var b1 = this.getByte();\r\n      var b2 = this.getByte();\r\n      var b3 = this.getByte();\r\n      return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\r\n    },\r\n    getBytes: function getBytes(length) {\r\n      var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      var bytes = this.bytes;\r\n      var pos = this.pos;\r\n      var strEnd = this.end;\r\n\r\n      if (!length) {\r\n        var _subarray = bytes.subarray(pos, strEnd);\r\n\r\n        return forceClamped ? new Uint8ClampedArray(_subarray) : _subarray;\r\n      }\r\n\r\n      var end = pos + length;\r\n\r\n      if (end > strEnd) {\r\n        end = strEnd;\r\n      }\r\n\r\n      this.pos = end;\r\n      var subarray = bytes.subarray(pos, end);\r\n      return forceClamped ? new Uint8ClampedArray(subarray) : subarray;\r\n    },\r\n    peekByte: function Stream_peekByte() {\r\n      var peekedByte = this.getByte();\r\n\r\n      if (peekedByte !== -1) {\r\n        this.pos--;\r\n      }\r\n\r\n      return peekedByte;\r\n    },\r\n    peekBytes: function peekBytes(length) {\r\n      var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      var bytes = this.getBytes(length, forceClamped);\r\n      this.pos -= bytes.length;\r\n      return bytes;\r\n    },\r\n    getByteRange: function getByteRange(begin, end) {\r\n      if (begin < 0) {\r\n        begin = 0;\r\n      }\r\n\r\n      if (end > this.end) {\r\n        end = this.end;\r\n      }\r\n\r\n      return this.bytes.subarray(begin, end);\r\n    },\r\n    skip: function Stream_skip(n) {\r\n      if (!n) {\r\n        n = 1;\r\n      }\r\n\r\n      this.pos += n;\r\n    },\r\n    reset: function Stream_reset() {\r\n      this.pos = this.start;\r\n    },\r\n    moveStart: function Stream_moveStart() {\r\n      this.start = this.pos;\r\n    },\r\n    makeSubStream: function Stream_makeSubStream(start, length, dict) {\r\n      return new Stream(this.bytes.buffer, start, length, dict);\r\n    }\r\n  };\r\n  return Stream;\r\n}();\r\n\r\nexports.Stream = Stream;\r\n\r\nvar StringStream = function StringStreamClosure() {\r\n  function StringStream(str) {\r\n    var bytes = (0, _util.stringToBytes)(str);\r\n    Stream.call(this, bytes);\r\n  }\r\n\r\n  StringStream.prototype = Stream.prototype;\r\n  return StringStream;\r\n}();\r\n\r\nexports.StringStream = StringStream;\r\n\r\nvar DecodeStream = function DecodeStreamClosure() {\r\n  var emptyBuffer = new Uint8Array(0);\r\n\r\n  function DecodeStream(maybeMinBufferLength) {\r\n    this._rawMinBufferLength = maybeMinBufferLength || 0;\r\n    this.pos = 0;\r\n    this.bufferLength = 0;\r\n    this.eof = false;\r\n    this.buffer = emptyBuffer;\r\n    this.minBufferLength = 512;\r\n\r\n    if (maybeMinBufferLength) {\r\n      while (this.minBufferLength < maybeMinBufferLength) {\r\n        this.minBufferLength *= 2;\r\n      }\r\n    }\r\n  }\r\n\r\n  DecodeStream.prototype = {\r\n    get length() {\r\n      (0, _util.unreachable)(\"Should not access DecodeStream.length\");\r\n    },\r\n\r\n    get isEmpty() {\r\n      while (!this.eof && this.bufferLength === 0) {\r\n        this.readBlock();\r\n      }\r\n\r\n      return this.bufferLength === 0;\r\n    },\r\n\r\n    ensureBuffer: function DecodeStream_ensureBuffer(requested) {\r\n      var buffer = this.buffer;\r\n\r\n      if (requested <= buffer.byteLength) {\r\n        return buffer;\r\n      }\r\n\r\n      var size = this.minBufferLength;\r\n\r\n      while (size < requested) {\r\n        size *= 2;\r\n      }\r\n\r\n      var buffer2 = new Uint8Array(size);\r\n      buffer2.set(buffer);\r\n      return this.buffer = buffer2;\r\n    },\r\n    getByte: function DecodeStream_getByte() {\r\n      var pos = this.pos;\r\n\r\n      while (this.bufferLength <= pos) {\r\n        if (this.eof) {\r\n          return -1;\r\n        }\r\n\r\n        this.readBlock();\r\n      }\r\n\r\n      return this.buffer[this.pos++];\r\n    },\r\n    getUint16: function DecodeStream_getUint16() {\r\n      var b0 = this.getByte();\r\n      var b1 = this.getByte();\r\n\r\n      if (b0 === -1 || b1 === -1) {\r\n        return -1;\r\n      }\r\n\r\n      return (b0 << 8) + b1;\r\n    },\r\n    getInt32: function DecodeStream_getInt32() {\r\n      var b0 = this.getByte();\r\n      var b1 = this.getByte();\r\n      var b2 = this.getByte();\r\n      var b3 = this.getByte();\r\n      return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\r\n    },\r\n    getBytes: function getBytes(length) {\r\n      var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      var end,\r\n          pos = this.pos;\r\n\r\n      if (length) {\r\n        this.ensureBuffer(pos + length);\r\n        end = pos + length;\r\n\r\n        while (!this.eof && this.bufferLength < end) {\r\n          this.readBlock();\r\n        }\r\n\r\n        var bufEnd = this.bufferLength;\r\n\r\n        if (end > bufEnd) {\r\n          end = bufEnd;\r\n        }\r\n      } else {\r\n        while (!this.eof) {\r\n          this.readBlock();\r\n        }\r\n\r\n        end = this.bufferLength;\r\n      }\r\n\r\n      this.pos = end;\r\n      var subarray = this.buffer.subarray(pos, end);\r\n      return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray;\r\n    },\r\n    peekByte: function DecodeStream_peekByte() {\r\n      var peekedByte = this.getByte();\r\n\r\n      if (peekedByte !== -1) {\r\n        this.pos--;\r\n      }\r\n\r\n      return peekedByte;\r\n    },\r\n    peekBytes: function peekBytes(length) {\r\n      var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      var bytes = this.getBytes(length, forceClamped);\r\n      this.pos -= bytes.length;\r\n      return bytes;\r\n    },\r\n    makeSubStream: function DecodeStream_makeSubStream(start, length, dict) {\r\n      var end = start + length;\r\n\r\n      while (this.bufferLength <= end && !this.eof) {\r\n        this.readBlock();\r\n      }\r\n\r\n      return new Stream(this.buffer, start, length, dict);\r\n    },\r\n    getByteRange: function getByteRange(begin, end) {\r\n      (0, _util.unreachable)(\"Should not call DecodeStream.getByteRange\");\r\n    },\r\n    skip: function DecodeStream_skip(n) {\r\n      if (!n) {\r\n        n = 1;\r\n      }\r\n\r\n      this.pos += n;\r\n    },\r\n    reset: function DecodeStream_reset() {\r\n      this.pos = 0;\r\n    },\r\n    getBaseStreams: function DecodeStream_getBaseStreams() {\r\n      if (this.str && this.str.getBaseStreams) {\r\n        return this.str.getBaseStreams();\r\n      }\r\n\r\n      return [];\r\n    }\r\n  };\r\n  return DecodeStream;\r\n}();\r\n\r\nexports.DecodeStream = DecodeStream;\r\n\r\nvar StreamsSequenceStream = function StreamsSequenceStreamClosure() {\r\n  function StreamsSequenceStream(streams) {\r\n    this.streams = streams;\r\n    var maybeLength = 0;\r\n\r\n    for (var i = 0, ii = streams.length; i < ii; i++) {\r\n      var stream = streams[i];\r\n\r\n      if (stream instanceof DecodeStream) {\r\n        maybeLength += stream._rawMinBufferLength;\r\n      } else {\r\n        maybeLength += stream.length;\r\n      }\r\n    }\r\n\r\n    DecodeStream.call(this, maybeLength);\r\n  }\r\n\r\n  StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype);\r\n\r\n  StreamsSequenceStream.prototype.readBlock = function streamSequenceStreamReadBlock() {\r\n    var streams = this.streams;\r\n\r\n    if (streams.length === 0) {\r\n      this.eof = true;\r\n      return;\r\n    }\r\n\r\n    var stream = streams.shift();\r\n    var chunk = stream.getBytes();\r\n    var bufferLength = this.bufferLength;\r\n    var newLength = bufferLength + chunk.length;\r\n    var buffer = this.ensureBuffer(newLength);\r\n    buffer.set(chunk, bufferLength);\r\n    this.bufferLength = newLength;\r\n  };\r\n\r\n  StreamsSequenceStream.prototype.getBaseStreams = function StreamsSequenceStream_getBaseStreams() {\r\n    var baseStreams = [];\r\n\r\n    for (var i = 0, ii = this.streams.length; i < ii; i++) {\r\n      var stream = this.streams[i];\r\n\r\n      if (stream.getBaseStreams) {\r\n        baseStreams.push.apply(baseStreams, _toConsumableArray(stream.getBaseStreams()));\r\n      }\r\n    }\r\n\r\n    return baseStreams;\r\n  };\r\n\r\n  return StreamsSequenceStream;\r\n}();\r\n\r\nexports.StreamsSequenceStream = StreamsSequenceStream;\r\n\r\nvar FlateStream = function FlateStreamClosure() {\r\n  var codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\r\n  var lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]);\r\n  var distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]);\r\n  var fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9];\r\n  var fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5];\r\n\r\n  function FlateStream(str, maybeLength) {\r\n    this.str = str;\r\n    this.dict = str.dict;\r\n    var cmf = str.getByte();\r\n    var flg = str.getByte();\r\n\r\n    if (cmf === -1 || flg === -1) {\r\n      throw new _util.FormatError(\"Invalid header in flate stream: \".concat(cmf, \", \").concat(flg));\r\n    }\r\n\r\n    if ((cmf & 0x0f) !== 0x08) {\r\n      throw new _util.FormatError(\"Unknown compression method in flate stream: \".concat(cmf, \", \").concat(flg));\r\n    }\r\n\r\n    if (((cmf << 8) + flg) % 31 !== 0) {\r\n      throw new _util.FormatError(\"Bad FCHECK in flate stream: \".concat(cmf, \", \").concat(flg));\r\n    }\r\n\r\n    if (flg & 0x20) {\r\n      throw new _util.FormatError(\"FDICT bit set in flate stream: \".concat(cmf, \", \").concat(flg));\r\n    }\r\n\r\n    this.codeSize = 0;\r\n    this.codeBuf = 0;\r\n    DecodeStream.call(this, maybeLength);\r\n  }\r\n\r\n  FlateStream.prototype = Object.create(DecodeStream.prototype);\r\n\r\n  FlateStream.prototype.getBits = function FlateStream_getBits(bits) {\r\n    var str = this.str;\r\n    var codeSize = this.codeSize;\r\n    var codeBuf = this.codeBuf;\r\n    var b;\r\n\r\n    while (codeSize < bits) {\r\n      if ((b = str.getByte()) === -1) {\r\n        throw new _util.FormatError(\"Bad encoding in flate stream\");\r\n      }\r\n\r\n      codeBuf |= b << codeSize;\r\n      codeSize += 8;\r\n    }\r\n\r\n    b = codeBuf & (1 << bits) - 1;\r\n    this.codeBuf = codeBuf >> bits;\r\n    this.codeSize = codeSize -= bits;\r\n    return b;\r\n  };\r\n\r\n  FlateStream.prototype.getCode = function FlateStream_getCode(table) {\r\n    var str = this.str;\r\n    var codes = table[0];\r\n    var maxLen = table[1];\r\n    var codeSize = this.codeSize;\r\n    var codeBuf = this.codeBuf;\r\n    var b;\r\n\r\n    while (codeSize < maxLen) {\r\n      if ((b = str.getByte()) === -1) {\r\n        break;\r\n      }\r\n\r\n      codeBuf |= b << codeSize;\r\n      codeSize += 8;\r\n    }\r\n\r\n    var code = codes[codeBuf & (1 << maxLen) - 1];\r\n    var codeLen = code >> 16;\r\n    var codeVal = code & 0xffff;\r\n\r\n    if (codeLen < 1 || codeSize < codeLen) {\r\n      throw new _util.FormatError(\"Bad encoding in flate stream\");\r\n    }\r\n\r\n    this.codeBuf = codeBuf >> codeLen;\r\n    this.codeSize = codeSize - codeLen;\r\n    return codeVal;\r\n  };\r\n\r\n  FlateStream.prototype.generateHuffmanTable = function flateStreamGenerateHuffmanTable(lengths) {\r\n    var n = lengths.length;\r\n    var maxLen = 0;\r\n    var i;\r\n\r\n    for (i = 0; i < n; ++i) {\r\n      if (lengths[i] > maxLen) {\r\n        maxLen = lengths[i];\r\n      }\r\n    }\r\n\r\n    var size = 1 << maxLen;\r\n    var codes = new Int32Array(size);\r\n\r\n    for (var len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) {\r\n      for (var val = 0; val < n; ++val) {\r\n        if (lengths[val] === len) {\r\n          var code2 = 0;\r\n          var t = code;\r\n\r\n          for (i = 0; i < len; ++i) {\r\n            code2 = code2 << 1 | t & 1;\r\n            t >>= 1;\r\n          }\r\n\r\n          for (i = code2; i < size; i += skip) {\r\n            codes[i] = len << 16 | val;\r\n          }\r\n\r\n          ++code;\r\n        }\r\n      }\r\n    }\r\n\r\n    return [codes, maxLen];\r\n  };\r\n\r\n  FlateStream.prototype.readBlock = function FlateStream_readBlock() {\r\n    var buffer, len;\r\n    var str = this.str;\r\n    var hdr = this.getBits(3);\r\n\r\n    if (hdr & 1) {\r\n      this.eof = true;\r\n    }\r\n\r\n    hdr >>= 1;\r\n\r\n    if (hdr === 0) {\r\n      var b;\r\n\r\n      if ((b = str.getByte()) === -1) {\r\n        throw new _util.FormatError(\"Bad block header in flate stream\");\r\n      }\r\n\r\n      var blockLen = b;\r\n\r\n      if ((b = str.getByte()) === -1) {\r\n        throw new _util.FormatError(\"Bad block header in flate stream\");\r\n      }\r\n\r\n      blockLen |= b << 8;\r\n\r\n      if ((b = str.getByte()) === -1) {\r\n        throw new _util.FormatError(\"Bad block header in flate stream\");\r\n      }\r\n\r\n      var check = b;\r\n\r\n      if ((b = str.getByte()) === -1) {\r\n        throw new _util.FormatError(\"Bad block header in flate stream\");\r\n      }\r\n\r\n      check |= b << 8;\r\n\r\n      if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) {\r\n        throw new _util.FormatError(\"Bad uncompressed block length in flate stream\");\r\n      }\r\n\r\n      this.codeBuf = 0;\r\n      this.codeSize = 0;\r\n      var bufferLength = this.bufferLength,\r\n          end = bufferLength + blockLen;\r\n      buffer = this.ensureBuffer(end);\r\n      this.bufferLength = end;\r\n\r\n      if (blockLen === 0) {\r\n        if (str.peekByte() === -1) {\r\n          this.eof = true;\r\n        }\r\n      } else {\r\n        var block = str.getBytes(blockLen);\r\n        buffer.set(block, bufferLength);\r\n\r\n        if (block.length < blockLen) {\r\n          this.eof = true;\r\n        }\r\n      }\r\n\r\n      return;\r\n    }\r\n\r\n    var litCodeTable;\r\n    var distCodeTable;\r\n\r\n    if (hdr === 1) {\r\n      litCodeTable = fixedLitCodeTab;\r\n      distCodeTable = fixedDistCodeTab;\r\n    } else if (hdr === 2) {\r\n      var numLitCodes = this.getBits(5) + 257;\r\n      var numDistCodes = this.getBits(5) + 1;\r\n      var numCodeLenCodes = this.getBits(4) + 4;\r\n      var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);\r\n      var i;\r\n\r\n      for (i = 0; i < numCodeLenCodes; ++i) {\r\n        codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);\r\n      }\r\n\r\n      var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);\r\n      len = 0;\r\n      i = 0;\r\n      var codes = numLitCodes + numDistCodes;\r\n      var codeLengths = new Uint8Array(codes);\r\n      var bitsLength, bitsOffset, what;\r\n\r\n      while (i < codes) {\r\n        var code = this.getCode(codeLenCodeTab);\r\n\r\n        if (code === 16) {\r\n          bitsLength = 2;\r\n          bitsOffset = 3;\r\n          what = len;\r\n        } else if (code === 17) {\r\n          bitsLength = 3;\r\n          bitsOffset = 3;\r\n          what = len = 0;\r\n        } else if (code === 18) {\r\n          bitsLength = 7;\r\n          bitsOffset = 11;\r\n          what = len = 0;\r\n        } else {\r\n          codeLengths[i++] = len = code;\r\n          continue;\r\n        }\r\n\r\n        var repeatLength = this.getBits(bitsLength) + bitsOffset;\r\n\r\n        while (repeatLength-- > 0) {\r\n          codeLengths[i++] = what;\r\n        }\r\n      }\r\n\r\n      litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes));\r\n      distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes));\r\n    } else {\r\n      throw new _util.FormatError(\"Unknown block type in flate stream\");\r\n    }\r\n\r\n    buffer = this.buffer;\r\n    var limit = buffer ? buffer.length : 0;\r\n    var pos = this.bufferLength;\r\n\r\n    while (true) {\r\n      var code1 = this.getCode(litCodeTable);\r\n\r\n      if (code1 < 256) {\r\n        if (pos + 1 >= limit) {\r\n          buffer = this.ensureBuffer(pos + 1);\r\n          limit = buffer.length;\r\n        }\r\n\r\n        buffer[pos++] = code1;\r\n        continue;\r\n      }\r\n\r\n      if (code1 === 256) {\r\n        this.bufferLength = pos;\r\n        return;\r\n      }\r\n\r\n      code1 -= 257;\r\n      code1 = lengthDecode[code1];\r\n      var code2 = code1 >> 16;\r\n\r\n      if (code2 > 0) {\r\n        code2 = this.getBits(code2);\r\n      }\r\n\r\n      len = (code1 & 0xffff) + code2;\r\n      code1 = this.getCode(distCodeTable);\r\n      code1 = distDecode[code1];\r\n      code2 = code1 >> 16;\r\n\r\n      if (code2 > 0) {\r\n        code2 = this.getBits(code2);\r\n      }\r\n\r\n      var dist = (code1 & 0xffff) + code2;\r\n\r\n      if (pos + len >= limit) {\r\n        buffer = this.ensureBuffer(pos + len);\r\n        limit = buffer.length;\r\n      }\r\n\r\n      for (var k = 0; k < len; ++k, ++pos) {\r\n        buffer[pos] = buffer[pos - dist];\r\n      }\r\n    }\r\n  };\r\n\r\n  return FlateStream;\r\n}();\r\n\r\nexports.FlateStream = FlateStream;\r\n\r\nvar PredictorStream = function PredictorStreamClosure() {\r\n  function PredictorStream(str, maybeLength, params) {\r\n    if (!(0, _primitives.isDict)(params)) {\r\n      return str;\r\n    }\r\n\r\n    var predictor = this.predictor = params.get(\"Predictor\") || 1;\r\n\r\n    if (predictor <= 1) {\r\n      return str;\r\n    }\r\n\r\n    if (predictor !== 2 && (predictor < 10 || predictor > 15)) {\r\n      throw new _util.FormatError(\"Unsupported predictor: \".concat(predictor));\r\n    }\r\n\r\n    if (predictor === 2) {\r\n      this.readBlock = this.readBlockTiff;\r\n    } else {\r\n      this.readBlock = this.readBlockPng;\r\n    }\r\n\r\n    this.str = str;\r\n    this.dict = str.dict;\r\n    var colors = this.colors = params.get(\"Colors\") || 1;\r\n    var bits = this.bits = params.get(\"BitsPerComponent\") || 8;\r\n    var columns = this.columns = params.get(\"Columns\") || 1;\r\n    this.pixBytes = colors * bits + 7 >> 3;\r\n    this.rowBytes = columns * colors * bits + 7 >> 3;\r\n    DecodeStream.call(this, maybeLength);\r\n    return this;\r\n  }\r\n\r\n  PredictorStream.prototype = Object.create(DecodeStream.prototype);\r\n\r\n  PredictorStream.prototype.readBlockTiff = function predictorStreamReadBlockTiff() {\r\n    var rowBytes = this.rowBytes;\r\n    var bufferLength = this.bufferLength;\r\n    var buffer = this.ensureBuffer(bufferLength + rowBytes);\r\n    var bits = this.bits;\r\n    var colors = this.colors;\r\n    var rawBytes = this.str.getBytes(rowBytes);\r\n    this.eof = !rawBytes.length;\r\n\r\n    if (this.eof) {\r\n      return;\r\n    }\r\n\r\n    var inbuf = 0,\r\n        outbuf = 0;\r\n    var inbits = 0,\r\n        outbits = 0;\r\n    var pos = bufferLength;\r\n    var i;\r\n\r\n    if (bits === 1 && colors === 1) {\r\n      for (i = 0; i < rowBytes; ++i) {\r\n        var c = rawBytes[i] ^ inbuf;\r\n        c ^= c >> 1;\r\n        c ^= c >> 2;\r\n        c ^= c >> 4;\r\n        inbuf = (c & 1) << 7;\r\n        buffer[pos++] = c;\r\n      }\r\n    } else if (bits === 8) {\r\n      for (i = 0; i < colors; ++i) {\r\n        buffer[pos++] = rawBytes[i];\r\n      }\r\n\r\n      for (; i < rowBytes; ++i) {\r\n        buffer[pos] = buffer[pos - colors] + rawBytes[i];\r\n        pos++;\r\n      }\r\n    } else if (bits === 16) {\r\n      var bytesPerPixel = colors * 2;\r\n\r\n      for (i = 0; i < bytesPerPixel; ++i) {\r\n        buffer[pos++] = rawBytes[i];\r\n      }\r\n\r\n      for (; i < rowBytes; i += 2) {\r\n        var sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff);\r\n        buffer[pos++] = sum >> 8 & 0xff;\r\n        buffer[pos++] = sum & 0xff;\r\n      }\r\n    } else {\r\n      var compArray = new Uint8Array(colors + 1);\r\n      var bitMask = (1 << bits) - 1;\r\n      var j = 0,\r\n          k = bufferLength;\r\n      var columns = this.columns;\r\n\r\n      for (i = 0; i < columns; ++i) {\r\n        for (var kk = 0; kk < colors; ++kk) {\r\n          if (inbits < bits) {\r\n            inbuf = inbuf << 8 | rawBytes[j++] & 0xff;\r\n            inbits += 8;\r\n          }\r\n\r\n          compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask;\r\n          inbits -= bits;\r\n          outbuf = outbuf << bits | compArray[kk];\r\n          outbits += bits;\r\n\r\n          if (outbits >= 8) {\r\n            buffer[k++] = outbuf >> outbits - 8 & 0xff;\r\n            outbits -= 8;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (outbits > 0) {\r\n        buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1);\r\n      }\r\n    }\r\n\r\n    this.bufferLength += rowBytes;\r\n  };\r\n\r\n  PredictorStream.prototype.readBlockPng = function predictorStreamReadBlockPng() {\r\n    var rowBytes = this.rowBytes;\r\n    var pixBytes = this.pixBytes;\r\n    var predictor = this.str.getByte();\r\n    var rawBytes = this.str.getBytes(rowBytes);\r\n    this.eof = !rawBytes.length;\r\n\r\n    if (this.eof) {\r\n      return;\r\n    }\r\n\r\n    var bufferLength = this.bufferLength;\r\n    var buffer = this.ensureBuffer(bufferLength + rowBytes);\r\n    var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength);\r\n\r\n    if (prevRow.length === 0) {\r\n      prevRow = new Uint8Array(rowBytes);\r\n    }\r\n\r\n    var i,\r\n        j = bufferLength,\r\n        up,\r\n        c;\r\n\r\n    switch (predictor) {\r\n      case 0:\r\n        for (i = 0; i < rowBytes; ++i) {\r\n          buffer[j++] = rawBytes[i];\r\n        }\r\n\r\n        break;\r\n\r\n      case 1:\r\n        for (i = 0; i < pixBytes; ++i) {\r\n          buffer[j++] = rawBytes[i];\r\n        }\r\n\r\n        for (; i < rowBytes; ++i) {\r\n          buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff;\r\n          j++;\r\n        }\r\n\r\n        break;\r\n\r\n      case 2:\r\n        for (i = 0; i < rowBytes; ++i) {\r\n          buffer[j++] = prevRow[i] + rawBytes[i] & 0xff;\r\n        }\r\n\r\n        break;\r\n\r\n      case 3:\r\n        for (i = 0; i < pixBytes; ++i) {\r\n          buffer[j++] = (prevRow[i] >> 1) + rawBytes[i];\r\n        }\r\n\r\n        for (; i < rowBytes; ++i) {\r\n          buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff;\r\n          j++;\r\n        }\r\n\r\n        break;\r\n\r\n      case 4:\r\n        for (i = 0; i < pixBytes; ++i) {\r\n          up = prevRow[i];\r\n          c = rawBytes[i];\r\n          buffer[j++] = up + c;\r\n        }\r\n\r\n        for (; i < rowBytes; ++i) {\r\n          up = prevRow[i];\r\n          var upLeft = prevRow[i - pixBytes];\r\n          var left = buffer[j - pixBytes];\r\n          var p = left + up - upLeft;\r\n          var pa = p - left;\r\n\r\n          if (pa < 0) {\r\n            pa = -pa;\r\n          }\r\n\r\n          var pb = p - up;\r\n\r\n          if (pb < 0) {\r\n            pb = -pb;\r\n          }\r\n\r\n          var pc = p - upLeft;\r\n\r\n          if (pc < 0) {\r\n            pc = -pc;\r\n          }\r\n\r\n          c = rawBytes[i];\r\n\r\n          if (pa <= pb && pa <= pc) {\r\n            buffer[j++] = left + c;\r\n          } else if (pb <= pc) {\r\n            buffer[j++] = up + c;\r\n          } else {\r\n            buffer[j++] = upLeft + c;\r\n          }\r\n        }\r\n\r\n        break;\r\n\r\n      default:\r\n        throw new _util.FormatError(\"Unsupported predictor: \".concat(predictor));\r\n    }\r\n\r\n    this.bufferLength += rowBytes;\r\n  };\r\n\r\n  return PredictorStream;\r\n}();\r\n\r\nexports.PredictorStream = PredictorStream;\r\n\r\nvar DecryptStream = function DecryptStreamClosure() {\r\n  function DecryptStream(str, maybeLength, decrypt) {\r\n    this.str = str;\r\n    this.dict = str.dict;\r\n    this.decrypt = decrypt;\r\n    this.nextChunk = null;\r\n    this.initialized = false;\r\n    DecodeStream.call(this, maybeLength);\r\n  }\r\n\r\n  var chunkSize = 512;\r\n  DecryptStream.prototype = Object.create(DecodeStream.prototype);\r\n\r\n  DecryptStream.prototype.readBlock = function DecryptStream_readBlock() {\r\n    var chunk;\r\n\r\n    if (this.initialized) {\r\n      chunk = this.nextChunk;\r\n    } else {\r\n      chunk = this.str.getBytes(chunkSize);\r\n      this.initialized = true;\r\n    }\r\n\r\n    if (!chunk || chunk.length === 0) {\r\n      this.eof = true;\r\n      return;\r\n    }\r\n\r\n    this.nextChunk = this.str.getBytes(chunkSize);\r\n    var hasMoreData = this.nextChunk && this.nextChunk.length > 0;\r\n    var decrypt = this.decrypt;\r\n    chunk = decrypt(chunk, !hasMoreData);\r\n    var bufferLength = this.bufferLength;\r\n    var i,\r\n        n = chunk.length;\r\n    var buffer = this.ensureBuffer(bufferLength + n);\r\n\r\n    for (i = 0; i < n; i++) {\r\n      buffer[bufferLength++] = chunk[i];\r\n    }\r\n\r\n    this.bufferLength = bufferLength;\r\n  };\r\n\r\n  return DecryptStream;\r\n}();\r\n\r\nexports.DecryptStream = DecryptStream;\r\n\r\nvar Ascii85Stream = function Ascii85StreamClosure() {\r\n  function Ascii85Stream(str, maybeLength) {\r\n    this.str = str;\r\n    this.dict = str.dict;\r\n    this.input = new Uint8Array(5);\r\n\r\n    if (maybeLength) {\r\n      maybeLength = 0.8 * maybeLength;\r\n    }\r\n\r\n    DecodeStream.call(this, maybeLength);\r\n  }\r\n\r\n  Ascii85Stream.prototype = Object.create(DecodeStream.prototype);\r\n\r\n  Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() {\r\n    var TILDA_CHAR = 0x7e;\r\n    var Z_LOWER_CHAR = 0x7a;\r\n    var EOF = -1;\r\n    var str = this.str;\r\n    var c = str.getByte();\r\n\r\n    while ((0, _core_utils.isWhiteSpace)(c)) {\r\n      c = str.getByte();\r\n    }\r\n\r\n    if (c === EOF || c === TILDA_CHAR) {\r\n      this.eof = true;\r\n      return;\r\n    }\r\n\r\n    var bufferLength = this.bufferLength,\r\n        buffer;\r\n    var i;\r\n\r\n    if (c === Z_LOWER_CHAR) {\r\n      buffer = this.ensureBuffer(bufferLength + 4);\r\n\r\n      for (i = 0; i < 4; ++i) {\r\n        buffer[bufferLength + i] = 0;\r\n      }\r\n\r\n      this.bufferLength += 4;\r\n    } else {\r\n      var input = this.input;\r\n      input[0] = c;\r\n\r\n      for (i = 1; i < 5; ++i) {\r\n        c = str.getByte();\r\n\r\n        while ((0, _core_utils.isWhiteSpace)(c)) {\r\n          c = str.getByte();\r\n        }\r\n\r\n        input[i] = c;\r\n\r\n        if (c === EOF || c === TILDA_CHAR) {\r\n          break;\r\n        }\r\n      }\r\n\r\n      buffer = this.ensureBuffer(bufferLength + i - 1);\r\n      this.bufferLength += i - 1;\r\n\r\n      if (i < 5) {\r\n        for (; i < 5; ++i) {\r\n          input[i] = 0x21 + 84;\r\n        }\r\n\r\n        this.eof = true;\r\n      }\r\n\r\n      var t = 0;\r\n\r\n      for (i = 0; i < 5; ++i) {\r\n        t = t * 85 + (input[i] - 0x21);\r\n      }\r\n\r\n      for (i = 3; i >= 0; --i) {\r\n        buffer[bufferLength + i] = t & 0xff;\r\n        t >>= 8;\r\n      }\r\n    }\r\n  };\r\n\r\n  return Ascii85Stream;\r\n}();\r\n\r\nexports.Ascii85Stream = Ascii85Stream;\r\n\r\nvar AsciiHexStream = function AsciiHexStreamClosure() {\r\n  function AsciiHexStream(str, maybeLength) {\r\n    this.str = str;\r\n    this.dict = str.dict;\r\n    this.firstDigit = -1;\r\n\r\n    if (maybeLength) {\r\n      maybeLength = 0.5 * maybeLength;\r\n    }\r\n\r\n    DecodeStream.call(this, maybeLength);\r\n  }\r\n\r\n  AsciiHexStream.prototype = Object.create(DecodeStream.prototype);\r\n\r\n  AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() {\r\n    var UPSTREAM_BLOCK_SIZE = 8000;\r\n    var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE);\r\n\r\n    if (!bytes.length) {\r\n      this.eof = true;\r\n      return;\r\n    }\r\n\r\n    var maxDecodeLength = bytes.length + 1 >> 1;\r\n    var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);\r\n    var bufferLength = this.bufferLength;\r\n    var firstDigit = this.firstDigit;\r\n\r\n    for (var i = 0, ii = bytes.length; i < ii; i++) {\r\n      var ch = bytes[i],\r\n          digit;\r\n\r\n      if (ch >= 0x30 && ch <= 0x39) {\r\n        digit = ch & 0x0f;\r\n      } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {\r\n        digit = (ch & 0x0f) + 9;\r\n      } else if (ch === 0x3e) {\r\n        this.eof = true;\r\n        break;\r\n      } else {\r\n        continue;\r\n      }\r\n\r\n      if (firstDigit < 0) {\r\n        firstDigit = digit;\r\n      } else {\r\n        buffer[bufferLength++] = firstDigit << 4 | digit;\r\n        firstDigit = -1;\r\n      }\r\n    }\r\n\r\n    if (firstDigit >= 0 && this.eof) {\r\n      buffer[bufferLength++] = firstDigit << 4;\r\n      firstDigit = -1;\r\n    }\r\n\r\n    this.firstDigit = firstDigit;\r\n    this.bufferLength = bufferLength;\r\n  };\r\n\r\n  return AsciiHexStream;\r\n}();\r\n\r\nexports.AsciiHexStream = AsciiHexStream;\r\n\r\nvar RunLengthStream = function RunLengthStreamClosure() {\r\n  function RunLengthStream(str, maybeLength) {\r\n    this.str = str;\r\n    this.dict = str.dict;\r\n    DecodeStream.call(this, maybeLength);\r\n  }\r\n\r\n  RunLengthStream.prototype = Object.create(DecodeStream.prototype);\r\n\r\n  RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() {\r\n    var repeatHeader = this.str.getBytes(2);\r\n\r\n    if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {\r\n      this.eof = true;\r\n      return;\r\n    }\r\n\r\n    var buffer;\r\n    var bufferLength = this.bufferLength;\r\n    var n = repeatHeader[0];\r\n\r\n    if (n < 128) {\r\n      buffer = this.ensureBuffer(bufferLength + n + 1);\r\n      buffer[bufferLength++] = repeatHeader[1];\r\n\r\n      if (n > 0) {\r\n        var source = this.str.getBytes(n);\r\n        buffer.set(source, bufferLength);\r\n        bufferLength += n;\r\n      }\r\n    } else {\r\n      n = 257 - n;\r\n      var b = repeatHeader[1];\r\n      buffer = this.ensureBuffer(bufferLength + n + 1);\r\n\r\n      for (var i = 0; i < n; i++) {\r\n        buffer[bufferLength++] = b;\r\n      }\r\n    }\r\n\r\n    this.bufferLength = bufferLength;\r\n  };\r\n\r\n  return RunLengthStream;\r\n}();\r\n\r\nexports.RunLengthStream = RunLengthStream;\r\n\r\nvar LZWStream = function LZWStreamClosure() {\r\n  function LZWStream(str, maybeLength, earlyChange) {\r\n    this.str = str;\r\n    this.dict = str.dict;\r\n    this.cachedData = 0;\r\n    this.bitsCached = 0;\r\n    var maxLzwDictionarySize = 4096;\r\n    var lzwState = {\r\n      earlyChange: earlyChange,\r\n      codeLength: 9,\r\n      nextCode: 258,\r\n      dictionaryValues: new Uint8Array(maxLzwDictionarySize),\r\n      dictionaryLengths: new Uint16Array(maxLzwDictionarySize),\r\n      dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),\r\n      currentSequence: new Uint8Array(maxLzwDictionarySize),\r\n      currentSequenceLength: 0\r\n    };\r\n\r\n    for (var i = 0; i < 256; ++i) {\r\n      lzwState.dictionaryValues[i] = i;\r\n      lzwState.dictionaryLengths[i] = 1;\r\n    }\r\n\r\n    this.lzwState = lzwState;\r\n    DecodeStream.call(this, maybeLength);\r\n  }\r\n\r\n  LZWStream.prototype = Object.create(DecodeStream.prototype);\r\n\r\n  LZWStream.prototype.readBits = function LZWStream_readBits(n) {\r\n    var bitsCached = this.bitsCached;\r\n    var cachedData = this.cachedData;\r\n\r\n    while (bitsCached < n) {\r\n      var c = this.str.getByte();\r\n\r\n      if (c === -1) {\r\n        this.eof = true;\r\n        return null;\r\n      }\r\n\r\n      cachedData = cachedData << 8 | c;\r\n      bitsCached += 8;\r\n    }\r\n\r\n    this.bitsCached = bitsCached -= n;\r\n    this.cachedData = cachedData;\r\n    this.lastCode = null;\r\n    return cachedData >>> bitsCached & (1 << n) - 1;\r\n  };\r\n\r\n  LZWStream.prototype.readBlock = function LZWStream_readBlock() {\r\n    var blockSize = 512;\r\n    var estimatedDecodedSize = blockSize * 2,\r\n        decodedSizeDelta = blockSize;\r\n    var i, j, q;\r\n    var lzwState = this.lzwState;\r\n\r\n    if (!lzwState) {\r\n      return;\r\n    }\r\n\r\n    var earlyChange = lzwState.earlyChange;\r\n    var nextCode = lzwState.nextCode;\r\n    var dictionaryValues = lzwState.dictionaryValues;\r\n    var dictionaryLengths = lzwState.dictionaryLengths;\r\n    var dictionaryPrevCodes = lzwState.dictionaryPrevCodes;\r\n    var codeLength = lzwState.codeLength;\r\n    var prevCode = lzwState.prevCode;\r\n    var currentSequence = lzwState.currentSequence;\r\n    var currentSequenceLength = lzwState.currentSequenceLength;\r\n    var decodedLength = 0;\r\n    var currentBufferLength = this.bufferLength;\r\n    var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\r\n\r\n    for (i = 0; i < blockSize; i++) {\r\n      var code = this.readBits(codeLength);\r\n      var hasPrev = currentSequenceLength > 0;\r\n\r\n      if (code < 256) {\r\n        currentSequence[0] = code;\r\n        currentSequenceLength = 1;\r\n      } else if (code >= 258) {\r\n        if (code < nextCode) {\r\n          currentSequenceLength = dictionaryLengths[code];\r\n\r\n          for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {\r\n            currentSequence[j] = dictionaryValues[q];\r\n            q = dictionaryPrevCodes[q];\r\n          }\r\n        } else {\r\n          currentSequence[currentSequenceLength++] = currentSequence[0];\r\n        }\r\n      } else if (code === 256) {\r\n        codeLength = 9;\r\n        nextCode = 258;\r\n        currentSequenceLength = 0;\r\n        continue;\r\n      } else {\r\n        this.eof = true;\r\n        delete this.lzwState;\r\n        break;\r\n      }\r\n\r\n      if (hasPrev) {\r\n        dictionaryPrevCodes[nextCode] = prevCode;\r\n        dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1;\r\n        dictionaryValues[nextCode] = currentSequence[0];\r\n        nextCode++;\r\n        codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0;\r\n      }\r\n\r\n      prevCode = code;\r\n      decodedLength += currentSequenceLength;\r\n\r\n      if (estimatedDecodedSize < decodedLength) {\r\n        do {\r\n          estimatedDecodedSize += decodedSizeDelta;\r\n        } while (estimatedDecodedSize < decodedLength);\r\n\r\n        buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);\r\n      }\r\n\r\n      for (j = 0; j < currentSequenceLength; j++) {\r\n        buffer[currentBufferLength++] = currentSequence[j];\r\n      }\r\n    }\r\n\r\n    lzwState.nextCode = nextCode;\r\n    lzwState.codeLength = codeLength;\r\n    lzwState.prevCode = prevCode;\r\n    lzwState.currentSequenceLength = currentSequenceLength;\r\n    this.bufferLength = currentBufferLength;\r\n  };\r\n\r\n  return LZWStream;\r\n}();\r\n\r\nexports.LZWStream = LZWStream;\r\n\r\nvar NullStream = function NullStreamClosure() {\r\n  function NullStream() {\r\n    Stream.call(this, new Uint8Array(0));\r\n  }\r\n\r\n  NullStream.prototype = Stream.prototype;\r\n  return NullStream;\r\n}();\r\n\r\nexports.NullStream = NullStream;\r\n\r\n/***/ }),\r\n/* 143 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.CCITTFaxStream = void 0;\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _ccitt = __w_pdfjs_require__(144);\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nvar CCITTFaxStream = function CCITTFaxStreamClosure() {\r\n  function CCITTFaxStream(str, maybeLength, params) {\r\n    this.str = str;\r\n    this.dict = str.dict;\r\n\r\n    if (!(0, _primitives.isDict)(params)) {\r\n      params = _primitives.Dict.empty;\r\n    }\r\n\r\n    var source = {\r\n      next: function next() {\r\n        return str.getByte();\r\n      }\r\n    };\r\n    this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, {\r\n      K: params.get(\"K\"),\r\n      EndOfLine: params.get(\"EndOfLine\"),\r\n      EncodedByteAlign: params.get(\"EncodedByteAlign\"),\r\n      Columns: params.get(\"Columns\"),\r\n      Rows: params.get(\"Rows\"),\r\n      EndOfBlock: params.get(\"EndOfBlock\"),\r\n      BlackIs1: params.get(\"BlackIs1\")\r\n    });\r\n\r\n    _stream.DecodeStream.call(this, maybeLength);\r\n  }\r\n\r\n  CCITTFaxStream.prototype = Object.create(_stream.DecodeStream.prototype);\r\n\r\n  CCITTFaxStream.prototype.readBlock = function () {\r\n    while (!this.eof) {\r\n      var c = this.ccittFaxDecoder.readNextChar();\r\n\r\n      if (c === -1) {\r\n        this.eof = true;\r\n        return;\r\n      }\r\n\r\n      this.ensureBuffer(this.bufferLength + 1);\r\n      this.buffer[this.bufferLength++] = c;\r\n    }\r\n  };\r\n\r\n  return CCITTFaxStream;\r\n}();\r\n\r\nexports.CCITTFaxStream = CCITTFaxStream;\r\n\r\n/***/ }),\r\n/* 144 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.CCITTFaxDecoder = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar CCITTFaxDecoder = function CCITTFaxDecoder() {\r\n  var ccittEOL = -2;\r\n  var ccittEOF = -1;\r\n  var twoDimPass = 0;\r\n  var twoDimHoriz = 1;\r\n  var twoDimVert0 = 2;\r\n  var twoDimVertR1 = 3;\r\n  var twoDimVertL1 = 4;\r\n  var twoDimVertR2 = 5;\r\n  var twoDimVertL2 = 6;\r\n  var twoDimVertR3 = 7;\r\n  var twoDimVertL3 = 8;\r\n  var twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]];\r\n  var whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]];\r\n  var whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]];\r\n  var blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]];\r\n  var blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]];\r\n  var blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]];\r\n\r\n  function CCITTFaxDecoder(source) {\r\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\r\n\r\n    if (!source || typeof source.next !== \"function\") {\r\n      throw new Error('CCITTFaxDecoder - invalid \"source\" parameter.');\r\n    }\r\n\r\n    this.source = source;\r\n    this.eof = false;\r\n    this.encoding = options.K || 0;\r\n    this.eoline = options.EndOfLine || false;\r\n    this.byteAlign = options.EncodedByteAlign || false;\r\n    this.columns = options.Columns || 1728;\r\n    this.rows = options.Rows || 0;\r\n    var eoblock = options.EndOfBlock;\r\n\r\n    if (eoblock === null || eoblock === undefined) {\r\n      eoblock = true;\r\n    }\r\n\r\n    this.eoblock = eoblock;\r\n    this.black = options.BlackIs1 || false;\r\n    this.codingLine = new Uint32Array(this.columns + 1);\r\n    this.refLine = new Uint32Array(this.columns + 2);\r\n    this.codingLine[0] = this.columns;\r\n    this.codingPos = 0;\r\n    this.row = 0;\r\n    this.nextLine2D = this.encoding < 0;\r\n    this.inputBits = 0;\r\n    this.inputBuf = 0;\r\n    this.outputBits = 0;\r\n    this.rowsDone = false;\r\n    var code1;\r\n\r\n    while ((code1 = this._lookBits(12)) === 0) {\r\n      this._eatBits(1);\r\n    }\r\n\r\n    if (code1 === 1) {\r\n      this._eatBits(12);\r\n    }\r\n\r\n    if (this.encoding > 0) {\r\n      this.nextLine2D = !this._lookBits(1);\r\n\r\n      this._eatBits(1);\r\n    }\r\n  }\r\n\r\n  CCITTFaxDecoder.prototype = {\r\n    readNextChar: function readNextChar() {\r\n      if (this.eof) {\r\n        return -1;\r\n      }\r\n\r\n      var refLine = this.refLine;\r\n      var codingLine = this.codingLine;\r\n      var columns = this.columns;\r\n      var refPos, blackPixels, bits, i;\r\n\r\n      if (this.outputBits === 0) {\r\n        if (this.rowsDone) {\r\n          this.eof = true;\r\n        }\r\n\r\n        if (this.eof) {\r\n          return -1;\r\n        }\r\n\r\n        this.err = false;\r\n        var code1, code2, code3;\r\n\r\n        if (this.nextLine2D) {\r\n          for (i = 0; codingLine[i] < columns; ++i) {\r\n            refLine[i] = codingLine[i];\r\n          }\r\n\r\n          refLine[i++] = columns;\r\n          refLine[i] = columns;\r\n          codingLine[0] = 0;\r\n          this.codingPos = 0;\r\n          refPos = 0;\r\n          blackPixels = 0;\r\n\r\n          while (codingLine[this.codingPos] < columns) {\r\n            code1 = this._getTwoDimCode();\r\n\r\n            switch (code1) {\r\n              case twoDimPass:\r\n                this._addPixels(refLine[refPos + 1], blackPixels);\r\n\r\n                if (refLine[refPos + 1] < columns) {\r\n                  refPos += 2;\r\n                }\r\n\r\n                break;\r\n\r\n              case twoDimHoriz:\r\n                code1 = code2 = 0;\r\n\r\n                if (blackPixels) {\r\n                  do {\r\n                    code1 += code3 = this._getBlackCode();\r\n                  } while (code3 >= 64);\r\n\r\n                  do {\r\n                    code2 += code3 = this._getWhiteCode();\r\n                  } while (code3 >= 64);\r\n                } else {\r\n                  do {\r\n                    code1 += code3 = this._getWhiteCode();\r\n                  } while (code3 >= 64);\r\n\r\n                  do {\r\n                    code2 += code3 = this._getBlackCode();\r\n                  } while (code3 >= 64);\r\n                }\r\n\r\n                this._addPixels(codingLine[this.codingPos] + code1, blackPixels);\r\n\r\n                if (codingLine[this.codingPos] < columns) {\r\n                  this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1);\r\n                }\r\n\r\n                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\r\n                  refPos += 2;\r\n                }\r\n\r\n                break;\r\n\r\n              case twoDimVertR3:\r\n                this._addPixels(refLine[refPos] + 3, blackPixels);\r\n\r\n                blackPixels ^= 1;\r\n\r\n                if (codingLine[this.codingPos] < columns) {\r\n                  ++refPos;\r\n\r\n                  while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\r\n                    refPos += 2;\r\n                  }\r\n                }\r\n\r\n                break;\r\n\r\n              case twoDimVertR2:\r\n                this._addPixels(refLine[refPos] + 2, blackPixels);\r\n\r\n                blackPixels ^= 1;\r\n\r\n                if (codingLine[this.codingPos] < columns) {\r\n                  ++refPos;\r\n\r\n                  while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\r\n                    refPos += 2;\r\n                  }\r\n                }\r\n\r\n                break;\r\n\r\n              case twoDimVertR1:\r\n                this._addPixels(refLine[refPos] + 1, blackPixels);\r\n\r\n                blackPixels ^= 1;\r\n\r\n                if (codingLine[this.codingPos] < columns) {\r\n                  ++refPos;\r\n\r\n                  while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\r\n                    refPos += 2;\r\n                  }\r\n                }\r\n\r\n                break;\r\n\r\n              case twoDimVert0:\r\n                this._addPixels(refLine[refPos], blackPixels);\r\n\r\n                blackPixels ^= 1;\r\n\r\n                if (codingLine[this.codingPos] < columns) {\r\n                  ++refPos;\r\n\r\n                  while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\r\n                    refPos += 2;\r\n                  }\r\n                }\r\n\r\n                break;\r\n\r\n              case twoDimVertL3:\r\n                this._addPixelsNeg(refLine[refPos] - 3, blackPixels);\r\n\r\n                blackPixels ^= 1;\r\n\r\n                if (codingLine[this.codingPos] < columns) {\r\n                  if (refPos > 0) {\r\n                    --refPos;\r\n                  } else {\r\n                    ++refPos;\r\n                  }\r\n\r\n                  while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\r\n                    refPos += 2;\r\n                  }\r\n                }\r\n\r\n                break;\r\n\r\n              case twoDimVertL2:\r\n                this._addPixelsNeg(refLine[refPos] - 2, blackPixels);\r\n\r\n                blackPixels ^= 1;\r\n\r\n                if (codingLine[this.codingPos] < columns) {\r\n                  if (refPos > 0) {\r\n                    --refPos;\r\n                  } else {\r\n                    ++refPos;\r\n                  }\r\n\r\n                  while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\r\n                    refPos += 2;\r\n                  }\r\n                }\r\n\r\n                break;\r\n\r\n              case twoDimVertL1:\r\n                this._addPixelsNeg(refLine[refPos] - 1, blackPixels);\r\n\r\n                blackPixels ^= 1;\r\n\r\n                if (codingLine[this.codingPos] < columns) {\r\n                  if (refPos > 0) {\r\n                    --refPos;\r\n                  } else {\r\n                    ++refPos;\r\n                  }\r\n\r\n                  while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {\r\n                    refPos += 2;\r\n                  }\r\n                }\r\n\r\n                break;\r\n\r\n              case ccittEOF:\r\n                this._addPixels(columns, 0);\r\n\r\n                this.eof = true;\r\n                break;\r\n\r\n              default:\r\n                (0, _util.info)(\"bad 2d code\");\r\n\r\n                this._addPixels(columns, 0);\r\n\r\n                this.err = true;\r\n            }\r\n          }\r\n        } else {\r\n          codingLine[0] = 0;\r\n          this.codingPos = 0;\r\n          blackPixels = 0;\r\n\r\n          while (codingLine[this.codingPos] < columns) {\r\n            code1 = 0;\r\n\r\n            if (blackPixels) {\r\n              do {\r\n                code1 += code3 = this._getBlackCode();\r\n              } while (code3 >= 64);\r\n            } else {\r\n              do {\r\n                code1 += code3 = this._getWhiteCode();\r\n              } while (code3 >= 64);\r\n            }\r\n\r\n            this._addPixels(codingLine[this.codingPos] + code1, blackPixels);\r\n\r\n            blackPixels ^= 1;\r\n          }\r\n        }\r\n\r\n        var gotEOL = false;\r\n\r\n        if (this.byteAlign) {\r\n          this.inputBits &= ~7;\r\n        }\r\n\r\n        if (!this.eoblock && this.row === this.rows - 1) {\r\n          this.rowsDone = true;\r\n        } else {\r\n          code1 = this._lookBits(12);\r\n\r\n          if (this.eoline) {\r\n            while (code1 !== ccittEOF && code1 !== 1) {\r\n              this._eatBits(1);\r\n\r\n              code1 = this._lookBits(12);\r\n            }\r\n          } else {\r\n            while (code1 === 0) {\r\n              this._eatBits(1);\r\n\r\n              code1 = this._lookBits(12);\r\n            }\r\n          }\r\n\r\n          if (code1 === 1) {\r\n            this._eatBits(12);\r\n\r\n            gotEOL = true;\r\n          } else if (code1 === ccittEOF) {\r\n            this.eof = true;\r\n          }\r\n        }\r\n\r\n        if (!this.eof && this.encoding > 0 && !this.rowsDone) {\r\n          this.nextLine2D = !this._lookBits(1);\r\n\r\n          this._eatBits(1);\r\n        }\r\n\r\n        if (this.eoblock && gotEOL && this.byteAlign) {\r\n          code1 = this._lookBits(12);\r\n\r\n          if (code1 === 1) {\r\n            this._eatBits(12);\r\n\r\n            if (this.encoding > 0) {\r\n              this._lookBits(1);\r\n\r\n              this._eatBits(1);\r\n            }\r\n\r\n            if (this.encoding >= 0) {\r\n              for (i = 0; i < 4; ++i) {\r\n                code1 = this._lookBits(12);\r\n\r\n                if (code1 !== 1) {\r\n                  (0, _util.info)(\"bad rtc code: \" + code1);\r\n                }\r\n\r\n                this._eatBits(12);\r\n\r\n                if (this.encoding > 0) {\r\n                  this._lookBits(1);\r\n\r\n                  this._eatBits(1);\r\n                }\r\n              }\r\n            }\r\n\r\n            this.eof = true;\r\n          }\r\n        } else if (this.err && this.eoline) {\r\n          while (true) {\r\n            code1 = this._lookBits(13);\r\n\r\n            if (code1 === ccittEOF) {\r\n              this.eof = true;\r\n              return -1;\r\n            }\r\n\r\n            if (code1 >> 1 === 1) {\r\n              break;\r\n            }\r\n\r\n            this._eatBits(1);\r\n          }\r\n\r\n          this._eatBits(12);\r\n\r\n          if (this.encoding > 0) {\r\n            this._eatBits(1);\r\n\r\n            this.nextLine2D = !(code1 & 1);\r\n          }\r\n        }\r\n\r\n        if (codingLine[0] > 0) {\r\n          this.outputBits = codingLine[this.codingPos = 0];\r\n        } else {\r\n          this.outputBits = codingLine[this.codingPos = 1];\r\n        }\r\n\r\n        this.row++;\r\n      }\r\n\r\n      var c;\r\n\r\n      if (this.outputBits >= 8) {\r\n        c = this.codingPos & 1 ? 0 : 0xff;\r\n        this.outputBits -= 8;\r\n\r\n        if (this.outputBits === 0 && codingLine[this.codingPos] < columns) {\r\n          this.codingPos++;\r\n          this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];\r\n        }\r\n      } else {\r\n        bits = 8;\r\n        c = 0;\r\n\r\n        do {\r\n          if (this.outputBits > bits) {\r\n            c <<= bits;\r\n\r\n            if (!(this.codingPos & 1)) {\r\n              c |= 0xff >> 8 - bits;\r\n            }\r\n\r\n            this.outputBits -= bits;\r\n            bits = 0;\r\n          } else {\r\n            c <<= this.outputBits;\r\n\r\n            if (!(this.codingPos & 1)) {\r\n              c |= 0xff >> 8 - this.outputBits;\r\n            }\r\n\r\n            bits -= this.outputBits;\r\n            this.outputBits = 0;\r\n\r\n            if (codingLine[this.codingPos] < columns) {\r\n              this.codingPos++;\r\n              this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];\r\n            } else if (bits > 0) {\r\n              c <<= bits;\r\n              bits = 0;\r\n            }\r\n          }\r\n        } while (bits);\r\n      }\r\n\r\n      if (this.black) {\r\n        c ^= 0xff;\r\n      }\r\n\r\n      return c;\r\n    },\r\n    _addPixels: function _addPixels(a1, blackPixels) {\r\n      var codingLine = this.codingLine;\r\n      var codingPos = this.codingPos;\r\n\r\n      if (a1 > codingLine[codingPos]) {\r\n        if (a1 > this.columns) {\r\n          (0, _util.info)(\"row is wrong length\");\r\n          this.err = true;\r\n          a1 = this.columns;\r\n        }\r\n\r\n        if (codingPos & 1 ^ blackPixels) {\r\n          ++codingPos;\r\n        }\r\n\r\n        codingLine[codingPos] = a1;\r\n      }\r\n\r\n      this.codingPos = codingPos;\r\n    },\r\n    _addPixelsNeg: function _addPixelsNeg(a1, blackPixels) {\r\n      var codingLine = this.codingLine;\r\n      var codingPos = this.codingPos;\r\n\r\n      if (a1 > codingLine[codingPos]) {\r\n        if (a1 > this.columns) {\r\n          (0, _util.info)(\"row is wrong length\");\r\n          this.err = true;\r\n          a1 = this.columns;\r\n        }\r\n\r\n        if (codingPos & 1 ^ blackPixels) {\r\n          ++codingPos;\r\n        }\r\n\r\n        codingLine[codingPos] = a1;\r\n      } else if (a1 < codingLine[codingPos]) {\r\n        if (a1 < 0) {\r\n          (0, _util.info)(\"invalid code\");\r\n          this.err = true;\r\n          a1 = 0;\r\n        }\r\n\r\n        while (codingPos > 0 && a1 < codingLine[codingPos - 1]) {\r\n          --codingPos;\r\n        }\r\n\r\n        codingLine[codingPos] = a1;\r\n      }\r\n\r\n      this.codingPos = codingPos;\r\n    },\r\n    _findTableCode: function _findTableCode(start, end, table, limit) {\r\n      var limitValue = limit || 0;\r\n\r\n      for (var i = start; i <= end; ++i) {\r\n        var code = this._lookBits(i);\r\n\r\n        if (code === ccittEOF) {\r\n          return [true, 1, false];\r\n        }\r\n\r\n        if (i < end) {\r\n          code <<= end - i;\r\n        }\r\n\r\n        if (!limitValue || code >= limitValue) {\r\n          var p = table[code - limitValue];\r\n\r\n          if (p[0] === i) {\r\n            this._eatBits(i);\r\n\r\n            return [true, p[1], true];\r\n          }\r\n        }\r\n      }\r\n\r\n      return [false, 0, false];\r\n    },\r\n    _getTwoDimCode: function _getTwoDimCode() {\r\n      var code = 0;\r\n      var p;\r\n\r\n      if (this.eoblock) {\r\n        code = this._lookBits(7);\r\n        p = twoDimTable[code];\r\n\r\n        if (p && p[0] > 0) {\r\n          this._eatBits(p[0]);\r\n\r\n          return p[1];\r\n        }\r\n      } else {\r\n        var result = this._findTableCode(1, 7, twoDimTable);\r\n\r\n        if (result[0] && result[2]) {\r\n          return result[1];\r\n        }\r\n      }\r\n\r\n      (0, _util.info)(\"Bad two dim code\");\r\n      return ccittEOF;\r\n    },\r\n    _getWhiteCode: function _getWhiteCode() {\r\n      var code = 0;\r\n      var p;\r\n\r\n      if (this.eoblock) {\r\n        code = this._lookBits(12);\r\n\r\n        if (code === ccittEOF) {\r\n          return 1;\r\n        }\r\n\r\n        if (code >> 5 === 0) {\r\n          p = whiteTable1[code];\r\n        } else {\r\n          p = whiteTable2[code >> 3];\r\n        }\r\n\r\n        if (p[0] > 0) {\r\n          this._eatBits(p[0]);\r\n\r\n          return p[1];\r\n        }\r\n      } else {\r\n        var result = this._findTableCode(1, 9, whiteTable2);\r\n\r\n        if (result[0]) {\r\n          return result[1];\r\n        }\r\n\r\n        result = this._findTableCode(11, 12, whiteTable1);\r\n\r\n        if (result[0]) {\r\n          return result[1];\r\n        }\r\n      }\r\n\r\n      (0, _util.info)(\"bad white code\");\r\n\r\n      this._eatBits(1);\r\n\r\n      return 1;\r\n    },\r\n    _getBlackCode: function _getBlackCode() {\r\n      var code, p;\r\n\r\n      if (this.eoblock) {\r\n        code = this._lookBits(13);\r\n\r\n        if (code === ccittEOF) {\r\n          return 1;\r\n        }\r\n\r\n        if (code >> 7 === 0) {\r\n          p = blackTable1[code];\r\n        } else if (code >> 9 === 0 && code >> 7 !== 0) {\r\n          p = blackTable2[(code >> 1) - 64];\r\n        } else {\r\n          p = blackTable3[code >> 7];\r\n        }\r\n\r\n        if (p[0] > 0) {\r\n          this._eatBits(p[0]);\r\n\r\n          return p[1];\r\n        }\r\n      } else {\r\n        var result = this._findTableCode(2, 6, blackTable3);\r\n\r\n        if (result[0]) {\r\n          return result[1];\r\n        }\r\n\r\n        result = this._findTableCode(7, 12, blackTable2, 64);\r\n\r\n        if (result[0]) {\r\n          return result[1];\r\n        }\r\n\r\n        result = this._findTableCode(10, 13, blackTable1);\r\n\r\n        if (result[0]) {\r\n          return result[1];\r\n        }\r\n      }\r\n\r\n      (0, _util.info)(\"bad black code\");\r\n\r\n      this._eatBits(1);\r\n\r\n      return 1;\r\n    },\r\n    _lookBits: function _lookBits(n) {\r\n      var c;\r\n\r\n      while (this.inputBits < n) {\r\n        if ((c = this.source.next()) === -1) {\r\n          if (this.inputBits === 0) {\r\n            return ccittEOF;\r\n          }\r\n\r\n          return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n;\r\n        }\r\n\r\n        this.inputBuf = this.inputBuf << 8 | c;\r\n        this.inputBits += 8;\r\n      }\r\n\r\n      return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n;\r\n    },\r\n    _eatBits: function _eatBits(n) {\r\n      if ((this.inputBits -= n) < 0) {\r\n        this.inputBits = 0;\r\n      }\r\n    }\r\n  };\r\n  return CCITTFaxDecoder;\r\n}();\r\n\r\nexports.CCITTFaxDecoder = CCITTFaxDecoder;\r\n\r\n/***/ }),\r\n/* 145 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.Jbig2Stream = void 0;\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nvar _jbig = __w_pdfjs_require__(146);\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar Jbig2Stream = function Jbig2StreamClosure() {\r\n  function Jbig2Stream(stream, maybeLength, dict, params) {\r\n    this.stream = stream;\r\n    this.maybeLength = maybeLength;\r\n    this.dict = dict;\r\n    this.params = params;\r\n\r\n    _stream.DecodeStream.call(this, maybeLength);\r\n  }\r\n\r\n  Jbig2Stream.prototype = Object.create(_stream.DecodeStream.prototype);\r\n  Object.defineProperty(Jbig2Stream.prototype, \"bytes\", {\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"bytes\", this.stream.getBytes(this.maybeLength));\r\n    },\r\n    configurable: true\r\n  });\r\n\r\n  Jbig2Stream.prototype.ensureBuffer = function (requested) {};\r\n\r\n  Jbig2Stream.prototype.readBlock = function () {\r\n    if (this.eof) {\r\n      return;\r\n    }\r\n\r\n    var jbig2Image = new _jbig.Jbig2Image();\r\n    var chunks = [];\r\n\r\n    if ((0, _primitives.isDict)(this.params)) {\r\n      var globalsStream = this.params.get(\"JBIG2Globals\");\r\n\r\n      if ((0, _primitives.isStream)(globalsStream)) {\r\n        var globals = globalsStream.getBytes();\r\n        chunks.push({\r\n          data: globals,\r\n          start: 0,\r\n          end: globals.length\r\n        });\r\n      }\r\n    }\r\n\r\n    chunks.push({\r\n      data: this.bytes,\r\n      start: 0,\r\n      end: this.bytes.length\r\n    });\r\n    var data = jbig2Image.parseChunks(chunks);\r\n    var dataLength = data.length;\r\n\r\n    for (var i = 0; i < dataLength; i++) {\r\n      data[i] ^= 0xff;\r\n    }\r\n\r\n    this.buffer = data;\r\n    this.bufferLength = dataLength;\r\n    this.eof = true;\r\n  };\r\n\r\n  return Jbig2Stream;\r\n}();\r\n\r\nexports.Jbig2Stream = Jbig2Stream;\r\n\r\n/***/ }),\r\n/* 146 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.Jbig2Image = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar _arithmetic_decoder = __w_pdfjs_require__(147);\r\n\r\nvar _ccitt = __w_pdfjs_require__(144);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nvar Jbig2Error = /*#__PURE__*/function (_BaseException) {\r\n  _inherits(Jbig2Error, _BaseException);\r\n\r\n  var _super = _createSuper(Jbig2Error);\r\n\r\n  function Jbig2Error(msg) {\r\n    _classCallCheck(this, Jbig2Error);\r\n\r\n    return _super.call(this, \"JBIG2 error: \".concat(msg));\r\n  }\r\n\r\n  return Jbig2Error;\r\n}(_util.BaseException);\r\n\r\nvar Jbig2Image = function Jbig2ImageClosure() {\r\n  function ContextCache() {}\r\n\r\n  ContextCache.prototype = {\r\n    getContexts: function getContexts(id) {\r\n      if (id in this) {\r\n        return this[id];\r\n      }\r\n\r\n      return this[id] = new Int8Array(1 << 16);\r\n    }\r\n  };\r\n\r\n  function DecodingContext(data, start, end) {\r\n    this.data = data;\r\n    this.start = start;\r\n    this.end = end;\r\n  }\r\n\r\n  DecodingContext.prototype = {\r\n    get decoder() {\r\n      var decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end);\r\n      return (0, _util.shadow)(this, \"decoder\", decoder);\r\n    },\r\n\r\n    get contextCache() {\r\n      var cache = new ContextCache();\r\n      return (0, _util.shadow)(this, \"contextCache\", cache);\r\n    }\r\n\r\n  };\r\n\r\n  function decodeInteger(contextCache, procedure, decoder) {\r\n    var contexts = contextCache.getContexts(procedure);\r\n    var prev = 1;\r\n\r\n    function readBits(length) {\r\n      var v = 0;\r\n\r\n      for (var i = 0; i < length; i++) {\r\n        var bit = decoder.readBit(contexts, prev);\r\n        prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256;\r\n        v = v << 1 | bit;\r\n      }\r\n\r\n      return v >>> 0;\r\n    }\r\n\r\n    var sign = readBits(1);\r\n    var value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2);\r\n\r\n    if (sign === 0) {\r\n      return value;\r\n    } else if (value > 0) {\r\n      return -value;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  function decodeIAID(contextCache, decoder, codeLength) {\r\n    var contexts = contextCache.getContexts(\"IAID\");\r\n    var prev = 1;\r\n\r\n    for (var i = 0; i < codeLength; i++) {\r\n      var bit = decoder.readBit(contexts, prev);\r\n      prev = prev << 1 | bit;\r\n    }\r\n\r\n    if (codeLength < 31) {\r\n      return prev & (1 << codeLength) - 1;\r\n    }\r\n\r\n    return prev & 0x7fffffff;\r\n  }\r\n\r\n  var SegmentTypes = [\"SymbolDictionary\", null, null, null, \"IntermediateTextRegion\", null, \"ImmediateTextRegion\", \"ImmediateLosslessTextRegion\", null, null, null, null, null, null, null, null, \"PatternDictionary\", null, null, null, \"IntermediateHalftoneRegion\", null, \"ImmediateHalftoneRegion\", \"ImmediateLosslessHalftoneRegion\", null, null, null, null, null, null, null, null, null, null, null, null, \"IntermediateGenericRegion\", null, \"ImmediateGenericRegion\", \"ImmediateLosslessGenericRegion\", \"IntermediateGenericRefinementRegion\", null, \"ImmediateGenericRefinementRegion\", \"ImmediateLosslessGenericRefinementRegion\", null, null, null, null, \"PageInformation\", \"EndOfPage\", \"EndOfStripe\", \"EndOfFile\", \"Profiles\", \"Tables\", null, null, null, null, null, null, null, null, \"Extension\"];\r\n  var CodingTemplates = [[{\r\n    x: -1,\r\n    y: -2\r\n  }, {\r\n    x: 0,\r\n    y: -2\r\n  }, {\r\n    x: 1,\r\n    y: -2\r\n  }, {\r\n    x: -2,\r\n    y: -1\r\n  }, {\r\n    x: -1,\r\n    y: -1\r\n  }, {\r\n    x: 0,\r\n    y: -1\r\n  }, {\r\n    x: 1,\r\n    y: -1\r\n  }, {\r\n    x: 2,\r\n    y: -1\r\n  }, {\r\n    x: -4,\r\n    y: 0\r\n  }, {\r\n    x: -3,\r\n    y: 0\r\n  }, {\r\n    x: -2,\r\n    y: 0\r\n  }, {\r\n    x: -1,\r\n    y: 0\r\n  }], [{\r\n    x: -1,\r\n    y: -2\r\n  }, {\r\n    x: 0,\r\n    y: -2\r\n  }, {\r\n    x: 1,\r\n    y: -2\r\n  }, {\r\n    x: 2,\r\n    y: -2\r\n  }, {\r\n    x: -2,\r\n    y: -1\r\n  }, {\r\n    x: -1,\r\n    y: -1\r\n  }, {\r\n    x: 0,\r\n    y: -1\r\n  }, {\r\n    x: 1,\r\n    y: -1\r\n  }, {\r\n    x: 2,\r\n    y: -1\r\n  }, {\r\n    x: -3,\r\n    y: 0\r\n  }, {\r\n    x: -2,\r\n    y: 0\r\n  }, {\r\n    x: -1,\r\n    y: 0\r\n  }], [{\r\n    x: -1,\r\n    y: -2\r\n  }, {\r\n    x: 0,\r\n    y: -2\r\n  }, {\r\n    x: 1,\r\n    y: -2\r\n  }, {\r\n    x: -2,\r\n    y: -1\r\n  }, {\r\n    x: -1,\r\n    y: -1\r\n  }, {\r\n    x: 0,\r\n    y: -1\r\n  }, {\r\n    x: 1,\r\n    y: -1\r\n  }, {\r\n    x: -2,\r\n    y: 0\r\n  }, {\r\n    x: -1,\r\n    y: 0\r\n  }], [{\r\n    x: -3,\r\n    y: -1\r\n  }, {\r\n    x: -2,\r\n    y: -1\r\n  }, {\r\n    x: -1,\r\n    y: -1\r\n  }, {\r\n    x: 0,\r\n    y: -1\r\n  }, {\r\n    x: 1,\r\n    y: -1\r\n  }, {\r\n    x: -4,\r\n    y: 0\r\n  }, {\r\n    x: -3,\r\n    y: 0\r\n  }, {\r\n    x: -2,\r\n    y: 0\r\n  }, {\r\n    x: -1,\r\n    y: 0\r\n  }]];\r\n  var RefinementTemplates = [{\r\n    coding: [{\r\n      x: 0,\r\n      y: -1\r\n    }, {\r\n      x: 1,\r\n      y: -1\r\n    }, {\r\n      x: -1,\r\n      y: 0\r\n    }],\r\n    reference: [{\r\n      x: 0,\r\n      y: -1\r\n    }, {\r\n      x: 1,\r\n      y: -1\r\n    }, {\r\n      x: -1,\r\n      y: 0\r\n    }, {\r\n      x: 0,\r\n      y: 0\r\n    }, {\r\n      x: 1,\r\n      y: 0\r\n    }, {\r\n      x: -1,\r\n      y: 1\r\n    }, {\r\n      x: 0,\r\n      y: 1\r\n    }, {\r\n      x: 1,\r\n      y: 1\r\n    }]\r\n  }, {\r\n    coding: [{\r\n      x: -1,\r\n      y: -1\r\n    }, {\r\n      x: 0,\r\n      y: -1\r\n    }, {\r\n      x: 1,\r\n      y: -1\r\n    }, {\r\n      x: -1,\r\n      y: 0\r\n    }],\r\n    reference: [{\r\n      x: 0,\r\n      y: -1\r\n    }, {\r\n      x: -1,\r\n      y: 0\r\n    }, {\r\n      x: 0,\r\n      y: 0\r\n    }, {\r\n      x: 1,\r\n      y: 0\r\n    }, {\r\n      x: 0,\r\n      y: 1\r\n    }, {\r\n      x: 1,\r\n      y: 1\r\n    }]\r\n  }];\r\n  var ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195];\r\n  var RefinementReusedContexts = [0x0020, 0x0008];\r\n\r\n  function decodeBitmapTemplate0(width, height, decodingContext) {\r\n    var decoder = decodingContext.decoder;\r\n    var contexts = decodingContext.contextCache.getContexts(\"GB\");\r\n    var contextLabel,\r\n        i,\r\n        j,\r\n        pixel,\r\n        row,\r\n        row1,\r\n        row2,\r\n        bitmap = [];\r\n    var OLD_PIXEL_MASK = 0x7bf7;\r\n\r\n    for (i = 0; i < height; i++) {\r\n      row = bitmap[i] = new Uint8Array(width);\r\n      row1 = i < 1 ? row : bitmap[i - 1];\r\n      row2 = i < 2 ? row : bitmap[i - 2];\r\n      contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4;\r\n\r\n      for (j = 0; j < width; j++) {\r\n        row[j] = pixel = decoder.readBit(contexts, contextLabel);\r\n        contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel;\r\n      }\r\n    }\r\n\r\n    return bitmap;\r\n  }\r\n\r\n  function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) {\r\n    if (mmr) {\r\n      var input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);\r\n      return decodeMMRBitmap(input, width, height, false);\r\n    }\r\n\r\n    if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) {\r\n      return decodeBitmapTemplate0(width, height, decodingContext);\r\n    }\r\n\r\n    var useskip = !!skip;\r\n    var template = CodingTemplates[templateIndex].concat(at);\r\n    template.sort(function (a, b) {\r\n      return a.y - b.y || a.x - b.x;\r\n    });\r\n    var templateLength = template.length;\r\n    var templateX = new Int8Array(templateLength);\r\n    var templateY = new Int8Array(templateLength);\r\n    var changingTemplateEntries = [];\r\n    var reuseMask = 0,\r\n        minX = 0,\r\n        maxX = 0,\r\n        minY = 0;\r\n    var c, k;\r\n\r\n    for (k = 0; k < templateLength; k++) {\r\n      templateX[k] = template[k].x;\r\n      templateY[k] = template[k].y;\r\n      minX = Math.min(minX, template[k].x);\r\n      maxX = Math.max(maxX, template[k].x);\r\n      minY = Math.min(minY, template[k].y);\r\n\r\n      if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) {\r\n        reuseMask |= 1 << templateLength - 1 - k;\r\n      } else {\r\n        changingTemplateEntries.push(k);\r\n      }\r\n    }\r\n\r\n    var changingEntriesLength = changingTemplateEntries.length;\r\n    var changingTemplateX = new Int8Array(changingEntriesLength);\r\n    var changingTemplateY = new Int8Array(changingEntriesLength);\r\n    var changingTemplateBit = new Uint16Array(changingEntriesLength);\r\n\r\n    for (c = 0; c < changingEntriesLength; c++) {\r\n      k = changingTemplateEntries[c];\r\n      changingTemplateX[c] = template[k].x;\r\n      changingTemplateY[c] = template[k].y;\r\n      changingTemplateBit[c] = 1 << templateLength - 1 - k;\r\n    }\r\n\r\n    var sbb_left = -minX;\r\n    var sbb_top = -minY;\r\n    var sbb_right = width - maxX;\r\n    var pseudoPixelContext = ReusedContexts[templateIndex];\r\n    var row = new Uint8Array(width);\r\n    var bitmap = [];\r\n    var decoder = decodingContext.decoder;\r\n    var contexts = decodingContext.contextCache.getContexts(\"GB\");\r\n    var ltp = 0,\r\n        j,\r\n        i0,\r\n        j0,\r\n        contextLabel = 0,\r\n        bit,\r\n        shift;\r\n\r\n    for (var i = 0; i < height; i++) {\r\n      if (prediction) {\r\n        var sltp = decoder.readBit(contexts, pseudoPixelContext);\r\n        ltp ^= sltp;\r\n\r\n        if (ltp) {\r\n          bitmap.push(row);\r\n          continue;\r\n        }\r\n      }\r\n\r\n      row = new Uint8Array(row);\r\n      bitmap.push(row);\r\n\r\n      for (j = 0; j < width; j++) {\r\n        if (useskip && skip[i][j]) {\r\n          row[j] = 0;\r\n          continue;\r\n        }\r\n\r\n        if (j >= sbb_left && j < sbb_right && i >= sbb_top) {\r\n          contextLabel = contextLabel << 1 & reuseMask;\r\n\r\n          for (k = 0; k < changingEntriesLength; k++) {\r\n            i0 = i + changingTemplateY[k];\r\n            j0 = j + changingTemplateX[k];\r\n            bit = bitmap[i0][j0];\r\n\r\n            if (bit) {\r\n              bit = changingTemplateBit[k];\r\n              contextLabel |= bit;\r\n            }\r\n          }\r\n        } else {\r\n          contextLabel = 0;\r\n          shift = templateLength - 1;\r\n\r\n          for (k = 0; k < templateLength; k++, shift--) {\r\n            j0 = j + templateX[k];\r\n\r\n            if (j0 >= 0 && j0 < width) {\r\n              i0 = i + templateY[k];\r\n\r\n              if (i0 >= 0) {\r\n                bit = bitmap[i0][j0];\r\n\r\n                if (bit) {\r\n                  contextLabel |= bit << shift;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        var pixel = decoder.readBit(contexts, contextLabel);\r\n        row[j] = pixel;\r\n      }\r\n    }\r\n\r\n    return bitmap;\r\n  }\r\n\r\n  function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) {\r\n    var codingTemplate = RefinementTemplates[templateIndex].coding;\r\n\r\n    if (templateIndex === 0) {\r\n      codingTemplate = codingTemplate.concat([at[0]]);\r\n    }\r\n\r\n    var codingTemplateLength = codingTemplate.length;\r\n    var codingTemplateX = new Int32Array(codingTemplateLength);\r\n    var codingTemplateY = new Int32Array(codingTemplateLength);\r\n    var k;\r\n\r\n    for (k = 0; k < codingTemplateLength; k++) {\r\n      codingTemplateX[k] = codingTemplate[k].x;\r\n      codingTemplateY[k] = codingTemplate[k].y;\r\n    }\r\n\r\n    var referenceTemplate = RefinementTemplates[templateIndex].reference;\r\n\r\n    if (templateIndex === 0) {\r\n      referenceTemplate = referenceTemplate.concat([at[1]]);\r\n    }\r\n\r\n    var referenceTemplateLength = referenceTemplate.length;\r\n    var referenceTemplateX = new Int32Array(referenceTemplateLength);\r\n    var referenceTemplateY = new Int32Array(referenceTemplateLength);\r\n\r\n    for (k = 0; k < referenceTemplateLength; k++) {\r\n      referenceTemplateX[k] = referenceTemplate[k].x;\r\n      referenceTemplateY[k] = referenceTemplate[k].y;\r\n    }\r\n\r\n    var referenceWidth = referenceBitmap[0].length;\r\n    var referenceHeight = referenceBitmap.length;\r\n    var pseudoPixelContext = RefinementReusedContexts[templateIndex];\r\n    var bitmap = [];\r\n    var decoder = decodingContext.decoder;\r\n    var contexts = decodingContext.contextCache.getContexts(\"GR\");\r\n    var ltp = 0;\r\n\r\n    for (var i = 0; i < height; i++) {\r\n      if (prediction) {\r\n        var sltp = decoder.readBit(contexts, pseudoPixelContext);\r\n        ltp ^= sltp;\r\n\r\n        if (ltp) {\r\n          throw new Jbig2Error(\"prediction is not supported\");\r\n        }\r\n      }\r\n\r\n      var row = new Uint8Array(width);\r\n      bitmap.push(row);\r\n\r\n      for (var j = 0; j < width; j++) {\r\n        var i0, j0;\r\n        var contextLabel = 0;\r\n\r\n        for (k = 0; k < codingTemplateLength; k++) {\r\n          i0 = i + codingTemplateY[k];\r\n          j0 = j + codingTemplateX[k];\r\n\r\n          if (i0 < 0 || j0 < 0 || j0 >= width) {\r\n            contextLabel <<= 1;\r\n          } else {\r\n            contextLabel = contextLabel << 1 | bitmap[i0][j0];\r\n          }\r\n        }\r\n\r\n        for (k = 0; k < referenceTemplateLength; k++) {\r\n          i0 = i + referenceTemplateY[k] - offsetY;\r\n          j0 = j + referenceTemplateX[k] - offsetX;\r\n\r\n          if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) {\r\n            contextLabel <<= 1;\r\n          } else {\r\n            contextLabel = contextLabel << 1 | referenceBitmap[i0][j0];\r\n          }\r\n        }\r\n\r\n        var pixel = decoder.readBit(contexts, contextLabel);\r\n        row[j] = pixel;\r\n      }\r\n    }\r\n\r\n    return bitmap;\r\n  }\r\n\r\n  function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) {\r\n    if (huffman && refinement) {\r\n      throw new Jbig2Error(\"symbol refinement with Huffman is not supported\");\r\n    }\r\n\r\n    var newSymbols = [];\r\n    var currentHeight = 0;\r\n    var symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols);\r\n    var decoder = decodingContext.decoder;\r\n    var contextCache = decodingContext.contextCache;\r\n    var tableB1, symbolWidths;\r\n\r\n    if (huffman) {\r\n      tableB1 = getStandardTable(1);\r\n      symbolWidths = [];\r\n      symbolCodeLength = Math.max(symbolCodeLength, 1);\r\n    }\r\n\r\n    while (newSymbols.length < numberOfNewSymbols) {\r\n      var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, \"IADH\", decoder);\r\n      currentHeight += deltaHeight;\r\n      var currentWidth = 0,\r\n          totalWidth = 0;\r\n      var firstSymbol = huffman ? symbolWidths.length : 0;\r\n\r\n      while (true) {\r\n        var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, \"IADW\", decoder);\r\n\r\n        if (deltaWidth === null) {\r\n          break;\r\n        }\r\n\r\n        currentWidth += deltaWidth;\r\n        totalWidth += currentWidth;\r\n        var bitmap;\r\n\r\n        if (refinement) {\r\n          var numberOfInstances = decodeInteger(contextCache, \"IAAI\", decoder);\r\n\r\n          if (numberOfInstances > 1) {\r\n            bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput);\r\n          } else {\r\n            var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);\r\n            var rdx = decodeInteger(contextCache, \"IARDX\", decoder);\r\n            var rdy = decodeInteger(contextCache, \"IARDY\", decoder);\r\n            var symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length];\r\n            bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext);\r\n          }\r\n\r\n          newSymbols.push(bitmap);\r\n        } else if (huffman) {\r\n          symbolWidths.push(currentWidth);\r\n        } else {\r\n          bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext);\r\n          newSymbols.push(bitmap);\r\n        }\r\n      }\r\n\r\n      if (huffman && !refinement) {\r\n        var bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput);\r\n        huffmanInput.byteAlign();\r\n        var collectiveBitmap = void 0;\r\n\r\n        if (bitmapSize === 0) {\r\n          collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight);\r\n        } else {\r\n          var originalEnd = huffmanInput.end;\r\n          var bitmapEnd = huffmanInput.position + bitmapSize;\r\n          huffmanInput.end = bitmapEnd;\r\n          collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false);\r\n          huffmanInput.end = originalEnd;\r\n          huffmanInput.position = bitmapEnd;\r\n        }\r\n\r\n        var numberOfSymbolsDecoded = symbolWidths.length;\r\n\r\n        if (firstSymbol === numberOfSymbolsDecoded - 1) {\r\n          newSymbols.push(collectiveBitmap);\r\n        } else {\r\n          var _i = void 0,\r\n              y = void 0,\r\n              xMin = 0,\r\n              xMax = void 0,\r\n              bitmapWidth = void 0,\r\n              symbolBitmap = void 0;\r\n\r\n          for (_i = firstSymbol; _i < numberOfSymbolsDecoded; _i++) {\r\n            bitmapWidth = symbolWidths[_i];\r\n            xMax = xMin + bitmapWidth;\r\n            symbolBitmap = [];\r\n\r\n            for (y = 0; y < currentHeight; y++) {\r\n              symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));\r\n            }\r\n\r\n            newSymbols.push(symbolBitmap);\r\n            xMin = xMax;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    var exportedSymbols = [];\r\n    var flags = [],\r\n        currentFlag = false;\r\n    var totalSymbolsLength = symbols.length + numberOfNewSymbols;\r\n\r\n    while (flags.length < totalSymbolsLength) {\r\n      var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, \"IAEX\", decoder);\r\n\r\n      while (runLength--) {\r\n        flags.push(currentFlag);\r\n      }\r\n\r\n      currentFlag = !currentFlag;\r\n    }\r\n\r\n    for (var i = 0, ii = symbols.length; i < ii; i++) {\r\n      if (flags[i]) {\r\n        exportedSymbols.push(symbols[i]);\r\n      }\r\n    }\r\n\r\n    for (var j = 0; j < numberOfNewSymbols; i++, j++) {\r\n      if (flags[i]) {\r\n        exportedSymbols.push(newSymbols[j]);\r\n      }\r\n    }\r\n\r\n    return exportedSymbols;\r\n  }\r\n\r\n  function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) {\r\n    if (huffman && refinement) {\r\n      throw new Jbig2Error(\"refinement with Huffman is not supported\");\r\n    }\r\n\r\n    var bitmap = [];\r\n    var i, row;\r\n\r\n    for (i = 0; i < height; i++) {\r\n      row = new Uint8Array(width);\r\n\r\n      if (defaultPixelValue) {\r\n        for (var j = 0; j < width; j++) {\r\n          row[j] = defaultPixelValue;\r\n        }\r\n      }\r\n\r\n      bitmap.push(row);\r\n    }\r\n\r\n    var decoder = decodingContext.decoder;\r\n    var contextCache = decodingContext.contextCache;\r\n    var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, \"IADT\", decoder);\r\n    var firstS = 0;\r\n    i = 0;\r\n\r\n    while (i < numberOfSymbolInstances) {\r\n      var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, \"IADT\", decoder);\r\n      stripT += deltaT;\r\n      var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, \"IAFS\", decoder);\r\n      firstS += deltaFirstS;\r\n      var currentS = firstS;\r\n\r\n      do {\r\n        var currentT = 0;\r\n\r\n        if (stripSize > 1) {\r\n          currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, \"IAIT\", decoder);\r\n        }\r\n\r\n        var t = stripSize * stripT + currentT;\r\n        var symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength);\r\n        var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, \"IARI\", decoder));\r\n        var symbolBitmap = inputSymbols[symbolId];\r\n        var symbolWidth = symbolBitmap[0].length;\r\n        var symbolHeight = symbolBitmap.length;\r\n\r\n        if (applyRefinement) {\r\n          var rdw = decodeInteger(contextCache, \"IARDW\", decoder);\r\n          var rdh = decodeInteger(contextCache, \"IARDH\", decoder);\r\n          var rdx = decodeInteger(contextCache, \"IARDX\", decoder);\r\n          var rdy = decodeInteger(contextCache, \"IARDY\", decoder);\r\n          symbolWidth += rdw;\r\n          symbolHeight += rdh;\r\n          symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext);\r\n        }\r\n\r\n        var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1);\r\n        var offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0);\r\n        var s2, t2, symbolRow;\r\n\r\n        if (transposed) {\r\n          for (s2 = 0; s2 < symbolHeight; s2++) {\r\n            row = bitmap[offsetS + s2];\r\n\r\n            if (!row) {\r\n              continue;\r\n            }\r\n\r\n            symbolRow = symbolBitmap[s2];\r\n            var maxWidth = Math.min(width - offsetT, symbolWidth);\r\n\r\n            switch (combinationOperator) {\r\n              case 0:\r\n                for (t2 = 0; t2 < maxWidth; t2++) {\r\n                  row[offsetT + t2] |= symbolRow[t2];\r\n                }\r\n\r\n                break;\r\n\r\n              case 2:\r\n                for (t2 = 0; t2 < maxWidth; t2++) {\r\n                  row[offsetT + t2] ^= symbolRow[t2];\r\n                }\r\n\r\n                break;\r\n\r\n              default:\r\n                throw new Jbig2Error(\"operator \".concat(combinationOperator, \" is not supported\"));\r\n            }\r\n          }\r\n\r\n          currentS += symbolHeight - 1;\r\n        } else {\r\n          for (t2 = 0; t2 < symbolHeight; t2++) {\r\n            row = bitmap[offsetT + t2];\r\n\r\n            if (!row) {\r\n              continue;\r\n            }\r\n\r\n            symbolRow = symbolBitmap[t2];\r\n\r\n            switch (combinationOperator) {\r\n              case 0:\r\n                for (s2 = 0; s2 < symbolWidth; s2++) {\r\n                  row[offsetS + s2] |= symbolRow[s2];\r\n                }\r\n\r\n                break;\r\n\r\n              case 2:\r\n                for (s2 = 0; s2 < symbolWidth; s2++) {\r\n                  row[offsetS + s2] ^= symbolRow[s2];\r\n                }\r\n\r\n                break;\r\n\r\n              default:\r\n                throw new Jbig2Error(\"operator \".concat(combinationOperator, \" is not supported\"));\r\n            }\r\n          }\r\n\r\n          currentS += symbolWidth - 1;\r\n        }\r\n\r\n        i++;\r\n        var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, \"IADS\", decoder);\r\n\r\n        if (deltaS === null) {\r\n          break;\r\n        }\r\n\r\n        currentS += deltaS + dsOffset;\r\n      } while (true);\r\n    }\r\n\r\n    return bitmap;\r\n  }\r\n\r\n  function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) {\r\n    var at = [];\r\n\r\n    if (!mmr) {\r\n      at.push({\r\n        x: -patternWidth,\r\n        y: 0\r\n      });\r\n\r\n      if (template === 0) {\r\n        at.push({\r\n          x: -3,\r\n          y: -1\r\n        });\r\n        at.push({\r\n          x: 2,\r\n          y: -2\r\n        });\r\n        at.push({\r\n          x: -2,\r\n          y: -2\r\n        });\r\n      }\r\n    }\r\n\r\n    var collectiveWidth = (maxPatternIndex + 1) * patternWidth;\r\n    var collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext);\r\n    var patterns = [];\r\n\r\n    for (var i = 0; i <= maxPatternIndex; i++) {\r\n      var patternBitmap = [];\r\n      var xMin = patternWidth * i;\r\n      var xMax = xMin + patternWidth;\r\n\r\n      for (var y = 0; y < patternHeight; y++) {\r\n        patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));\r\n      }\r\n\r\n      patterns.push(patternBitmap);\r\n    }\r\n\r\n    return patterns;\r\n  }\r\n\r\n  function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) {\r\n    var skip = null;\r\n\r\n    if (enableSkip) {\r\n      throw new Jbig2Error(\"skip is not supported\");\r\n    }\r\n\r\n    if (combinationOperator !== 0) {\r\n      throw new Jbig2Error(\"operator \" + combinationOperator + \" is not supported in halftone region\");\r\n    }\r\n\r\n    var regionBitmap = [];\r\n    var i, j, row;\r\n\r\n    for (i = 0; i < regionHeight; i++) {\r\n      row = new Uint8Array(regionWidth);\r\n\r\n      if (defaultPixelValue) {\r\n        for (j = 0; j < regionWidth; j++) {\r\n          row[j] = defaultPixelValue;\r\n        }\r\n      }\r\n\r\n      regionBitmap.push(row);\r\n    }\r\n\r\n    var numberOfPatterns = patterns.length;\r\n    var pattern0 = patterns[0];\r\n    var patternWidth = pattern0[0].length,\r\n        patternHeight = pattern0.length;\r\n    var bitsPerValue = (0, _core_utils.log2)(numberOfPatterns);\r\n    var at = [];\r\n\r\n    if (!mmr) {\r\n      at.push({\r\n        x: template <= 1 ? 3 : 2,\r\n        y: -1\r\n      });\r\n\r\n      if (template === 0) {\r\n        at.push({\r\n          x: -3,\r\n          y: -1\r\n        });\r\n        at.push({\r\n          x: 2,\r\n          y: -2\r\n        });\r\n        at.push({\r\n          x: -2,\r\n          y: -2\r\n        });\r\n      }\r\n    }\r\n\r\n    var grayScaleBitPlanes = [];\r\n    var mmrInput, bitmap;\r\n\r\n    if (mmr) {\r\n      mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);\r\n    }\r\n\r\n    for (i = bitsPerValue - 1; i >= 0; i--) {\r\n      if (mmr) {\r\n        bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true);\r\n      } else {\r\n        bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext);\r\n      }\r\n\r\n      grayScaleBitPlanes[i] = bitmap;\r\n    }\r\n\r\n    var mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow;\r\n\r\n    for (mg = 0; mg < gridHeight; mg++) {\r\n      for (ng = 0; ng < gridWidth; ng++) {\r\n        bit = 0;\r\n        patternIndex = 0;\r\n\r\n        for (j = bitsPerValue - 1; j >= 0; j--) {\r\n          bit = grayScaleBitPlanes[j][mg][ng] ^ bit;\r\n          patternIndex |= bit << j;\r\n        }\r\n\r\n        patternBitmap = patterns[patternIndex];\r\n        x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8;\r\n        y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8;\r\n\r\n        if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) {\r\n          for (i = 0; i < patternHeight; i++) {\r\n            regionRow = regionBitmap[y + i];\r\n            patternRow = patternBitmap[i];\r\n\r\n            for (j = 0; j < patternWidth; j++) {\r\n              regionRow[x + j] |= patternRow[j];\r\n            }\r\n          }\r\n        } else {\r\n          var regionX = void 0,\r\n              regionY = void 0;\r\n\r\n          for (i = 0; i < patternHeight; i++) {\r\n            regionY = y + i;\r\n\r\n            if (regionY < 0 || regionY >= regionHeight) {\r\n              continue;\r\n            }\r\n\r\n            regionRow = regionBitmap[regionY];\r\n            patternRow = patternBitmap[i];\r\n\r\n            for (j = 0; j < patternWidth; j++) {\r\n              regionX = x + j;\r\n\r\n              if (regionX >= 0 && regionX < regionWidth) {\r\n                regionRow[regionX] |= patternRow[j];\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return regionBitmap;\r\n  }\r\n\r\n  function readSegmentHeader(data, start) {\r\n    var segmentHeader = {};\r\n    segmentHeader.number = (0, _core_utils.readUint32)(data, start);\r\n    var flags = data[start + 4];\r\n    var segmentType = flags & 0x3f;\r\n\r\n    if (!SegmentTypes[segmentType]) {\r\n      throw new Jbig2Error(\"invalid segment type: \" + segmentType);\r\n    }\r\n\r\n    segmentHeader.type = segmentType;\r\n    segmentHeader.typeName = SegmentTypes[segmentType];\r\n    segmentHeader.deferredNonRetain = !!(flags & 0x80);\r\n    var pageAssociationFieldSize = !!(flags & 0x40);\r\n    var referredFlags = data[start + 5];\r\n    var referredToCount = referredFlags >> 5 & 7;\r\n    var retainBits = [referredFlags & 31];\r\n    var position = start + 6;\r\n\r\n    if (referredFlags === 7) {\r\n      referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff;\r\n      position += 3;\r\n      var bytes = referredToCount + 7 >> 3;\r\n      retainBits[0] = data[position++];\r\n\r\n      while (--bytes > 0) {\r\n        retainBits.push(data[position++]);\r\n      }\r\n    } else if (referredFlags === 5 || referredFlags === 6) {\r\n      throw new Jbig2Error(\"invalid referred-to flags\");\r\n    }\r\n\r\n    segmentHeader.retainBits = retainBits;\r\n    var referredToSegmentNumberSize = 4;\r\n\r\n    if (segmentHeader.number <= 256) {\r\n      referredToSegmentNumberSize = 1;\r\n    } else if (segmentHeader.number <= 65536) {\r\n      referredToSegmentNumberSize = 2;\r\n    }\r\n\r\n    var referredTo = [];\r\n    var i, ii;\r\n\r\n    for (i = 0; i < referredToCount; i++) {\r\n      var number = void 0;\r\n\r\n      if (referredToSegmentNumberSize === 1) {\r\n        number = data[position];\r\n      } else if (referredToSegmentNumberSize === 2) {\r\n        number = (0, _core_utils.readUint16)(data, position);\r\n      } else {\r\n        number = (0, _core_utils.readUint32)(data, position);\r\n      }\r\n\r\n      referredTo.push(number);\r\n      position += referredToSegmentNumberSize;\r\n    }\r\n\r\n    segmentHeader.referredTo = referredTo;\r\n\r\n    if (!pageAssociationFieldSize) {\r\n      segmentHeader.pageAssociation = data[position++];\r\n    } else {\r\n      segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position);\r\n      position += 4;\r\n    }\r\n\r\n    segmentHeader.length = (0, _core_utils.readUint32)(data, position);\r\n    position += 4;\r\n\r\n    if (segmentHeader.length === 0xffffffff) {\r\n      if (segmentType === 38) {\r\n        var genericRegionInfo = readRegionSegmentInformation(data, position);\r\n        var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength];\r\n        var genericRegionMmr = !!(genericRegionSegmentFlags & 1);\r\n        var searchPatternLength = 6;\r\n        var searchPattern = new Uint8Array(searchPatternLength);\r\n\r\n        if (!genericRegionMmr) {\r\n          searchPattern[0] = 0xff;\r\n          searchPattern[1] = 0xac;\r\n        }\r\n\r\n        searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff;\r\n        searchPattern[3] = genericRegionInfo.height >> 16 & 0xff;\r\n        searchPattern[4] = genericRegionInfo.height >> 8 & 0xff;\r\n        searchPattern[5] = genericRegionInfo.height & 0xff;\r\n\r\n        for (i = position, ii = data.length; i < ii; i++) {\r\n          var j = 0;\r\n\r\n          while (j < searchPatternLength && searchPattern[j] === data[i + j]) {\r\n            j++;\r\n          }\r\n\r\n          if (j === searchPatternLength) {\r\n            segmentHeader.length = i + searchPatternLength;\r\n            break;\r\n          }\r\n        }\r\n\r\n        if (segmentHeader.length === 0xffffffff) {\r\n          throw new Jbig2Error(\"segment end was not found\");\r\n        }\r\n      } else {\r\n        throw new Jbig2Error(\"invalid unknown segment length\");\r\n      }\r\n    }\r\n\r\n    segmentHeader.headerEnd = position;\r\n    return segmentHeader;\r\n  }\r\n\r\n  function readSegments(header, data, start, end) {\r\n    var segments = [];\r\n    var position = start;\r\n\r\n    while (position < end) {\r\n      var segmentHeader = readSegmentHeader(data, position);\r\n      position = segmentHeader.headerEnd;\r\n      var segment = {\r\n        header: segmentHeader,\r\n        data: data\r\n      };\r\n\r\n      if (!header.randomAccess) {\r\n        segment.start = position;\r\n        position += segmentHeader.length;\r\n        segment.end = position;\r\n      }\r\n\r\n      segments.push(segment);\r\n\r\n      if (segmentHeader.type === 51) {\r\n        break;\r\n      }\r\n    }\r\n\r\n    if (header.randomAccess) {\r\n      for (var i = 0, ii = segments.length; i < ii; i++) {\r\n        segments[i].start = position;\r\n        position += segments[i].header.length;\r\n        segments[i].end = position;\r\n      }\r\n    }\r\n\r\n    return segments;\r\n  }\r\n\r\n  function readRegionSegmentInformation(data, start) {\r\n    return {\r\n      width: (0, _core_utils.readUint32)(data, start),\r\n      height: (0, _core_utils.readUint32)(data, start + 4),\r\n      x: (0, _core_utils.readUint32)(data, start + 8),\r\n      y: (0, _core_utils.readUint32)(data, start + 12),\r\n      combinationOperator: data[start + 16] & 7\r\n    };\r\n  }\r\n\r\n  var RegionSegmentInformationFieldLength = 17;\r\n\r\n  function processSegment(segment, visitor) {\r\n    var header = segment.header;\r\n    var data = segment.data,\r\n        position = segment.start,\r\n        end = segment.end;\r\n    var args, at, i, atLength;\r\n\r\n    switch (header.type) {\r\n      case 0:\r\n        var dictionary = {};\r\n        var dictionaryFlags = (0, _core_utils.readUint16)(data, position);\r\n        dictionary.huffman = !!(dictionaryFlags & 1);\r\n        dictionary.refinement = !!(dictionaryFlags & 2);\r\n        dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3;\r\n        dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3;\r\n        dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1;\r\n        dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1;\r\n        dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256);\r\n        dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512);\r\n        dictionary.template = dictionaryFlags >> 10 & 3;\r\n        dictionary.refinementTemplate = dictionaryFlags >> 12 & 1;\r\n        position += 2;\r\n\r\n        if (!dictionary.huffman) {\r\n          atLength = dictionary.template === 0 ? 4 : 1;\r\n          at = [];\r\n\r\n          for (i = 0; i < atLength; i++) {\r\n            at.push({\r\n              x: (0, _core_utils.readInt8)(data, position),\r\n              y: (0, _core_utils.readInt8)(data, position + 1)\r\n            });\r\n            position += 2;\r\n          }\r\n\r\n          dictionary.at = at;\r\n        }\r\n\r\n        if (dictionary.refinement && !dictionary.refinementTemplate) {\r\n          at = [];\r\n\r\n          for (i = 0; i < 2; i++) {\r\n            at.push({\r\n              x: (0, _core_utils.readInt8)(data, position),\r\n              y: (0, _core_utils.readInt8)(data, position + 1)\r\n            });\r\n            position += 2;\r\n          }\r\n\r\n          dictionary.refinementAt = at;\r\n        }\r\n\r\n        dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position);\r\n        position += 4;\r\n        dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position);\r\n        position += 4;\r\n        args = [dictionary, header.number, header.referredTo, data, position, end];\r\n        break;\r\n\r\n      case 6:\r\n      case 7:\r\n        var textRegion = {};\r\n        textRegion.info = readRegionSegmentInformation(data, position);\r\n        position += RegionSegmentInformationFieldLength;\r\n        var textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position);\r\n        position += 2;\r\n        textRegion.huffman = !!(textRegionSegmentFlags & 1);\r\n        textRegion.refinement = !!(textRegionSegmentFlags & 2);\r\n        textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3;\r\n        textRegion.stripSize = 1 << textRegion.logStripSize;\r\n        textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3;\r\n        textRegion.transposed = !!(textRegionSegmentFlags & 64);\r\n        textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3;\r\n        textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1;\r\n        textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27;\r\n        textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1;\r\n\r\n        if (textRegion.huffman) {\r\n          var textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position);\r\n          position += 2;\r\n          textRegion.huffmanFS = textRegionHuffmanFlags & 3;\r\n          textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3;\r\n          textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3;\r\n          textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3;\r\n          textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3;\r\n          textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3;\r\n          textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3;\r\n          textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000);\r\n        }\r\n\r\n        if (textRegion.refinement && !textRegion.refinementTemplate) {\r\n          at = [];\r\n\r\n          for (i = 0; i < 2; i++) {\r\n            at.push({\r\n              x: (0, _core_utils.readInt8)(data, position),\r\n              y: (0, _core_utils.readInt8)(data, position + 1)\r\n            });\r\n            position += 2;\r\n          }\r\n\r\n          textRegion.refinementAt = at;\r\n        }\r\n\r\n        textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position);\r\n        position += 4;\r\n        args = [textRegion, header.referredTo, data, position, end];\r\n        break;\r\n\r\n      case 16:\r\n        var patternDictionary = {};\r\n        var patternDictionaryFlags = data[position++];\r\n        patternDictionary.mmr = !!(patternDictionaryFlags & 1);\r\n        patternDictionary.template = patternDictionaryFlags >> 1 & 3;\r\n        patternDictionary.patternWidth = data[position++];\r\n        patternDictionary.patternHeight = data[position++];\r\n        patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position);\r\n        position += 4;\r\n        args = [patternDictionary, header.number, data, position, end];\r\n        break;\r\n\r\n      case 22:\r\n      case 23:\r\n        var halftoneRegion = {};\r\n        halftoneRegion.info = readRegionSegmentInformation(data, position);\r\n        position += RegionSegmentInformationFieldLength;\r\n        var halftoneRegionFlags = data[position++];\r\n        halftoneRegion.mmr = !!(halftoneRegionFlags & 1);\r\n        halftoneRegion.template = halftoneRegionFlags >> 1 & 3;\r\n        halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8);\r\n        halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7;\r\n        halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1;\r\n        halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position);\r\n        position += 4;\r\n        halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position);\r\n        position += 4;\r\n        halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff;\r\n        position += 4;\r\n        halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff;\r\n        position += 4;\r\n        halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position);\r\n        position += 2;\r\n        halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position);\r\n        position += 2;\r\n        args = [halftoneRegion, header.referredTo, data, position, end];\r\n        break;\r\n\r\n      case 38:\r\n      case 39:\r\n        var genericRegion = {};\r\n        genericRegion.info = readRegionSegmentInformation(data, position);\r\n        position += RegionSegmentInformationFieldLength;\r\n        var genericRegionSegmentFlags = data[position++];\r\n        genericRegion.mmr = !!(genericRegionSegmentFlags & 1);\r\n        genericRegion.template = genericRegionSegmentFlags >> 1 & 3;\r\n        genericRegion.prediction = !!(genericRegionSegmentFlags & 8);\r\n\r\n        if (!genericRegion.mmr) {\r\n          atLength = genericRegion.template === 0 ? 4 : 1;\r\n          at = [];\r\n\r\n          for (i = 0; i < atLength; i++) {\r\n            at.push({\r\n              x: (0, _core_utils.readInt8)(data, position),\r\n              y: (0, _core_utils.readInt8)(data, position + 1)\r\n            });\r\n            position += 2;\r\n          }\r\n\r\n          genericRegion.at = at;\r\n        }\r\n\r\n        args = [genericRegion, data, position, end];\r\n        break;\r\n\r\n      case 48:\r\n        var pageInfo = {\r\n          width: (0, _core_utils.readUint32)(data, position),\r\n          height: (0, _core_utils.readUint32)(data, position + 4),\r\n          resolutionX: (0, _core_utils.readUint32)(data, position + 8),\r\n          resolutionY: (0, _core_utils.readUint32)(data, position + 12)\r\n        };\r\n\r\n        if (pageInfo.height === 0xffffffff) {\r\n          delete pageInfo.height;\r\n        }\r\n\r\n        var pageSegmentFlags = data[position + 16];\r\n        (0, _core_utils.readUint16)(data, position + 17);\r\n        pageInfo.lossless = !!(pageSegmentFlags & 1);\r\n        pageInfo.refinement = !!(pageSegmentFlags & 2);\r\n        pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1;\r\n        pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3;\r\n        pageInfo.requiresBuffer = !!(pageSegmentFlags & 32);\r\n        pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64);\r\n        args = [pageInfo];\r\n        break;\r\n\r\n      case 49:\r\n        break;\r\n\r\n      case 50:\r\n        break;\r\n\r\n      case 51:\r\n        break;\r\n\r\n      case 53:\r\n        args = [header.number, data, position, end];\r\n        break;\r\n\r\n      case 62:\r\n        break;\r\n\r\n      default:\r\n        throw new Jbig2Error(\"segment type \".concat(header.typeName, \"(\").concat(header.type, \")\") + \" is not implemented\");\r\n    }\r\n\r\n    var callbackName = \"on\" + header.typeName;\r\n\r\n    if (callbackName in visitor) {\r\n      visitor[callbackName].apply(visitor, args);\r\n    }\r\n  }\r\n\r\n  function processSegments(segments, visitor) {\r\n    for (var i = 0, ii = segments.length; i < ii; i++) {\r\n      processSegment(segments[i], visitor);\r\n    }\r\n  }\r\n\r\n  function parseJbig2Chunks(chunks) {\r\n    var visitor = new SimpleSegmentVisitor();\r\n\r\n    for (var i = 0, ii = chunks.length; i < ii; i++) {\r\n      var chunk = chunks[i];\r\n      var segments = readSegments({}, chunk.data, chunk.start, chunk.end);\r\n      processSegments(segments, visitor);\r\n    }\r\n\r\n    return visitor.buffer;\r\n  }\r\n\r\n  function parseJbig2(data) {\r\n    var end = data.length;\r\n    var position = 0;\r\n\r\n    if (data[position] !== 0x97 || data[position + 1] !== 0x4a || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0d || data[position + 5] !== 0x0a || data[position + 6] !== 0x1a || data[position + 7] !== 0x0a) {\r\n      throw new Jbig2Error(\"parseJbig2 - invalid header.\");\r\n    }\r\n\r\n    var header = Object.create(null);\r\n    position += 8;\r\n    var flags = data[position++];\r\n    header.randomAccess = !(flags & 1);\r\n\r\n    if (!(flags & 2)) {\r\n      header.numberOfPages = (0, _core_utils.readUint32)(data, position);\r\n      position += 4;\r\n    }\r\n\r\n    var segments = readSegments(header, data, position, end);\r\n    var visitor = new SimpleSegmentVisitor();\r\n    processSegments(segments, visitor);\r\n    var _visitor$currentPageI = visitor.currentPageInfo,\r\n        width = _visitor$currentPageI.width,\r\n        height = _visitor$currentPageI.height;\r\n    var bitPacked = visitor.buffer;\r\n    var imgData = new Uint8ClampedArray(width * height);\r\n    var q = 0,\r\n        k = 0;\r\n\r\n    for (var i = 0; i < height; i++) {\r\n      var mask = 0,\r\n          buffer = void 0;\r\n\r\n      for (var j = 0; j < width; j++) {\r\n        if (!mask) {\r\n          mask = 128;\r\n          buffer = bitPacked[k++];\r\n        }\r\n\r\n        imgData[q++] = buffer & mask ? 0 : 255;\r\n        mask >>= 1;\r\n      }\r\n    }\r\n\r\n    return {\r\n      imgData: imgData,\r\n      width: width,\r\n      height: height\r\n    };\r\n  }\r\n\r\n  function SimpleSegmentVisitor() {}\r\n\r\n  SimpleSegmentVisitor.prototype = {\r\n    onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) {\r\n      this.currentPageInfo = info;\r\n      var rowSize = info.width + 7 >> 3;\r\n      var buffer = new Uint8ClampedArray(rowSize * info.height);\r\n\r\n      if (info.defaultPixelValue) {\r\n        for (var i = 0, ii = buffer.length; i < ii; i++) {\r\n          buffer[i] = 0xff;\r\n        }\r\n      }\r\n\r\n      this.buffer = buffer;\r\n    },\r\n    drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) {\r\n      var pageInfo = this.currentPageInfo;\r\n      var width = regionInfo.width,\r\n          height = regionInfo.height;\r\n      var rowSize = pageInfo.width + 7 >> 3;\r\n      var combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator;\r\n      var buffer = this.buffer;\r\n      var mask0 = 128 >> (regionInfo.x & 7);\r\n      var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3);\r\n      var i, j, mask, offset;\r\n\r\n      switch (combinationOperator) {\r\n        case 0:\r\n          for (i = 0; i < height; i++) {\r\n            mask = mask0;\r\n            offset = offset0;\r\n\r\n            for (j = 0; j < width; j++) {\r\n              if (bitmap[i][j]) {\r\n                buffer[offset] |= mask;\r\n              }\r\n\r\n              mask >>= 1;\r\n\r\n              if (!mask) {\r\n                mask = 128;\r\n                offset++;\r\n              }\r\n            }\r\n\r\n            offset0 += rowSize;\r\n          }\r\n\r\n          break;\r\n\r\n        case 2:\r\n          for (i = 0; i < height; i++) {\r\n            mask = mask0;\r\n            offset = offset0;\r\n\r\n            for (j = 0; j < width; j++) {\r\n              if (bitmap[i][j]) {\r\n                buffer[offset] ^= mask;\r\n              }\r\n\r\n              mask >>= 1;\r\n\r\n              if (!mask) {\r\n                mask = 128;\r\n                offset++;\r\n              }\r\n            }\r\n\r\n            offset0 += rowSize;\r\n          }\r\n\r\n          break;\r\n\r\n        default:\r\n          throw new Jbig2Error(\"operator \".concat(combinationOperator, \" is not supported\"));\r\n      }\r\n    },\r\n    onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) {\r\n      var regionInfo = region.info;\r\n      var decodingContext = new DecodingContext(data, start, end);\r\n      var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext);\r\n      this.drawBitmap(regionInfo, bitmap);\r\n    },\r\n    onImmediateLosslessGenericRegion: function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() {\r\n      this.onImmediateGenericRegion.apply(this, arguments);\r\n    },\r\n    onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) {\r\n      var huffmanTables, huffmanInput;\r\n\r\n      if (dictionary.huffman) {\r\n        huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables);\r\n        huffmanInput = new Reader(data, start, end);\r\n      }\r\n\r\n      var symbols = this.symbols;\r\n\r\n      if (!symbols) {\r\n        this.symbols = symbols = {};\r\n      }\r\n\r\n      var inputSymbols = [];\r\n\r\n      for (var i = 0, ii = referredSegments.length; i < ii; i++) {\r\n        var referredSymbols = symbols[referredSegments[i]];\r\n\r\n        if (referredSymbols) {\r\n          inputSymbols = inputSymbols.concat(referredSymbols);\r\n        }\r\n      }\r\n\r\n      var decodingContext = new DecodingContext(data, start, end);\r\n      symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput);\r\n    },\r\n    onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) {\r\n      var regionInfo = region.info;\r\n      var huffmanTables, huffmanInput;\r\n      var symbols = this.symbols;\r\n      var inputSymbols = [];\r\n\r\n      for (var i = 0, ii = referredSegments.length; i < ii; i++) {\r\n        var referredSymbols = symbols[referredSegments[i]];\r\n\r\n        if (referredSymbols) {\r\n          inputSymbols = inputSymbols.concat(referredSymbols);\r\n        }\r\n      }\r\n\r\n      var symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length);\r\n\r\n      if (region.huffman) {\r\n        huffmanInput = new Reader(data, start, end);\r\n        huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput);\r\n      }\r\n\r\n      var decodingContext = new DecodingContext(data, start, end);\r\n      var bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput);\r\n      this.drawBitmap(regionInfo, bitmap);\r\n    },\r\n    onImmediateLosslessTextRegion: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() {\r\n      this.onImmediateTextRegion.apply(this, arguments);\r\n    },\r\n    onPatternDictionary: function onPatternDictionary(dictionary, currentSegment, data, start, end) {\r\n      var patterns = this.patterns;\r\n\r\n      if (!patterns) {\r\n        this.patterns = patterns = {};\r\n      }\r\n\r\n      var decodingContext = new DecodingContext(data, start, end);\r\n      patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext);\r\n    },\r\n    onImmediateHalftoneRegion: function onImmediateHalftoneRegion(region, referredSegments, data, start, end) {\r\n      var patterns = this.patterns[referredSegments[0]];\r\n      var regionInfo = region.info;\r\n      var decodingContext = new DecodingContext(data, start, end);\r\n      var bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext);\r\n      this.drawBitmap(regionInfo, bitmap);\r\n    },\r\n    onImmediateLosslessHalftoneRegion: function onImmediateLosslessHalftoneRegion() {\r\n      this.onImmediateHalftoneRegion.apply(this, arguments);\r\n    },\r\n    onTables: function onTables(currentSegment, data, start, end) {\r\n      var customTables = this.customTables;\r\n\r\n      if (!customTables) {\r\n        this.customTables = customTables = {};\r\n      }\r\n\r\n      customTables[currentSegment] = decodeTablesSegment(data, start, end);\r\n    }\r\n  };\r\n\r\n  function HuffmanLine(lineData) {\r\n    if (lineData.length === 2) {\r\n      this.isOOB = true;\r\n      this.rangeLow = 0;\r\n      this.prefixLength = lineData[0];\r\n      this.rangeLength = 0;\r\n      this.prefixCode = lineData[1];\r\n      this.isLowerRange = false;\r\n    } else {\r\n      this.isOOB = false;\r\n      this.rangeLow = lineData[0];\r\n      this.prefixLength = lineData[1];\r\n      this.rangeLength = lineData[2];\r\n      this.prefixCode = lineData[3];\r\n      this.isLowerRange = lineData[4] === \"lower\";\r\n    }\r\n  }\r\n\r\n  function HuffmanTreeNode(line) {\r\n    this.children = [];\r\n\r\n    if (line) {\r\n      this.isLeaf = true;\r\n      this.rangeLength = line.rangeLength;\r\n      this.rangeLow = line.rangeLow;\r\n      this.isLowerRange = line.isLowerRange;\r\n      this.isOOB = line.isOOB;\r\n    } else {\r\n      this.isLeaf = false;\r\n    }\r\n  }\r\n\r\n  HuffmanTreeNode.prototype = {\r\n    buildTree: function buildTree(line, shift) {\r\n      var bit = line.prefixCode >> shift & 1;\r\n\r\n      if (shift <= 0) {\r\n        this.children[bit] = new HuffmanTreeNode(line);\r\n      } else {\r\n        var node = this.children[bit];\r\n\r\n        if (!node) {\r\n          this.children[bit] = node = new HuffmanTreeNode(null);\r\n        }\r\n\r\n        node.buildTree(line, shift - 1);\r\n      }\r\n    },\r\n    decodeNode: function decodeNode(reader) {\r\n      if (this.isLeaf) {\r\n        if (this.isOOB) {\r\n          return null;\r\n        }\r\n\r\n        var htOffset = reader.readBits(this.rangeLength);\r\n        return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset);\r\n      }\r\n\r\n      var node = this.children[reader.readBit()];\r\n\r\n      if (!node) {\r\n        throw new Jbig2Error(\"invalid Huffman data\");\r\n      }\r\n\r\n      return node.decodeNode(reader);\r\n    }\r\n  };\r\n\r\n  function HuffmanTable(lines, prefixCodesDone) {\r\n    if (!prefixCodesDone) {\r\n      this.assignPrefixCodes(lines);\r\n    }\r\n\r\n    this.rootNode = new HuffmanTreeNode(null);\r\n\r\n    for (var i = 0, ii = lines.length; i < ii; i++) {\r\n      var line = lines[i];\r\n\r\n      if (line.prefixLength > 0) {\r\n        this.rootNode.buildTree(line, line.prefixLength - 1);\r\n      }\r\n    }\r\n  }\r\n\r\n  HuffmanTable.prototype = {\r\n    decode: function decode(reader) {\r\n      return this.rootNode.decodeNode(reader);\r\n    },\r\n    assignPrefixCodes: function assignPrefixCodes(lines) {\r\n      var linesLength = lines.length;\r\n      var prefixLengthMax = 0;\r\n\r\n      for (var i = 0; i < linesLength; i++) {\r\n        prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength);\r\n      }\r\n\r\n      var histogram = new Uint32Array(prefixLengthMax + 1);\r\n\r\n      for (var _i2 = 0; _i2 < linesLength; _i2++) {\r\n        histogram[lines[_i2].prefixLength]++;\r\n      }\r\n\r\n      var currentLength = 1,\r\n          firstCode = 0,\r\n          currentCode,\r\n          currentTemp,\r\n          line;\r\n      histogram[0] = 0;\r\n\r\n      while (currentLength <= prefixLengthMax) {\r\n        firstCode = firstCode + histogram[currentLength - 1] << 1;\r\n        currentCode = firstCode;\r\n        currentTemp = 0;\r\n\r\n        while (currentTemp < linesLength) {\r\n          line = lines[currentTemp];\r\n\r\n          if (line.prefixLength === currentLength) {\r\n            line.prefixCode = currentCode;\r\n            currentCode++;\r\n          }\r\n\r\n          currentTemp++;\r\n        }\r\n\r\n        currentLength++;\r\n      }\r\n    }\r\n  };\r\n\r\n  function decodeTablesSegment(data, start, end) {\r\n    var flags = data[start];\r\n    var lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff;\r\n    var highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff;\r\n    var reader = new Reader(data, start + 9, end);\r\n    var prefixSizeBits = (flags >> 1 & 7) + 1;\r\n    var rangeSizeBits = (flags >> 4 & 7) + 1;\r\n    var lines = [];\r\n    var prefixLength,\r\n        rangeLength,\r\n        currentRangeLow = lowestValue;\r\n\r\n    do {\r\n      prefixLength = reader.readBits(prefixSizeBits);\r\n      rangeLength = reader.readBits(rangeSizeBits);\r\n      lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0]));\r\n      currentRangeLow += 1 << rangeLength;\r\n    } while (currentRangeLow < highestValue);\r\n\r\n    prefixLength = reader.readBits(prefixSizeBits);\r\n    lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, \"lower\"]));\r\n    prefixLength = reader.readBits(prefixSizeBits);\r\n    lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0]));\r\n\r\n    if (flags & 1) {\r\n      prefixLength = reader.readBits(prefixSizeBits);\r\n      lines.push(new HuffmanLine([prefixLength, 0]));\r\n    }\r\n\r\n    return new HuffmanTable(lines, false);\r\n  }\r\n\r\n  var standardTablesCache = {};\r\n\r\n  function getStandardTable(number) {\r\n    var table = standardTablesCache[number];\r\n\r\n    if (table) {\r\n      return table;\r\n    }\r\n\r\n    var lines;\r\n\r\n    switch (number) {\r\n      case 1:\r\n        lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]];\r\n        break;\r\n\r\n      case 2:\r\n        lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]];\r\n        break;\r\n\r\n      case 3:\r\n        lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, \"lower\"], [75, 7, 32, 0x7e], [6, 0x3e]];\r\n        break;\r\n\r\n      case 4:\r\n        lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]];\r\n        break;\r\n\r\n      case 5:\r\n        lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, \"lower\"], [76, 6, 32, 0x3e]];\r\n        break;\r\n\r\n      case 6:\r\n        lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, \"lower\"], [2048, 6, 32, 0x3f]];\r\n        break;\r\n\r\n      case 7:\r\n        lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, \"lower\"], [2048, 5, 32, 0x1f]];\r\n        break;\r\n\r\n      case 8:\r\n        lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, \"lower\"], [1670, 9, 32, 0x1ff], [2, 0x1]];\r\n        break;\r\n\r\n      case 9:\r\n        lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, \"lower\"], [3339, 9, 32, 0x1ff], [2, 0x0]];\r\n        break;\r\n\r\n      case 10:\r\n        lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, \"lower\"], [4166, 8, 32, 0xff], [2, 0x2]];\r\n        break;\r\n\r\n      case 11:\r\n        lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];\r\n        break;\r\n\r\n      case 12:\r\n        lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]];\r\n        break;\r\n\r\n      case 13:\r\n        lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];\r\n        break;\r\n\r\n      case 14:\r\n        lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]];\r\n        break;\r\n\r\n      case 15:\r\n        lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, \"lower\"], [25, 7, 32, 0x7f]];\r\n        break;\r\n\r\n      default:\r\n        throw new Jbig2Error(\"standard table B.\".concat(number, \" does not exist\"));\r\n    }\r\n\r\n    for (var i = 0, ii = lines.length; i < ii; i++) {\r\n      lines[i] = new HuffmanLine(lines[i]);\r\n    }\r\n\r\n    table = new HuffmanTable(lines, true);\r\n    standardTablesCache[number] = table;\r\n    return table;\r\n  }\r\n\r\n  function Reader(data, start, end) {\r\n    this.data = data;\r\n    this.start = start;\r\n    this.end = end;\r\n    this.position = start;\r\n    this.shift = -1;\r\n    this.currentByte = 0;\r\n  }\r\n\r\n  Reader.prototype = {\r\n    readBit: function readBit() {\r\n      if (this.shift < 0) {\r\n        if (this.position >= this.end) {\r\n          throw new Jbig2Error(\"end of data while reading bit\");\r\n        }\r\n\r\n        this.currentByte = this.data[this.position++];\r\n        this.shift = 7;\r\n      }\r\n\r\n      var bit = this.currentByte >> this.shift & 1;\r\n      this.shift--;\r\n      return bit;\r\n    },\r\n    readBits: function readBits(numBits) {\r\n      var result = 0,\r\n          i;\r\n\r\n      for (i = numBits - 1; i >= 0; i--) {\r\n        result |= this.readBit() << i;\r\n      }\r\n\r\n      return result;\r\n    },\r\n    byteAlign: function byteAlign() {\r\n      this.shift = -1;\r\n    },\r\n    next: function next() {\r\n      if (this.position >= this.end) {\r\n        return -1;\r\n      }\r\n\r\n      return this.data[this.position++];\r\n    }\r\n  };\r\n\r\n  function getCustomHuffmanTable(index, referredTo, customTables) {\r\n    var currentIndex = 0;\r\n\r\n    for (var i = 0, ii = referredTo.length; i < ii; i++) {\r\n      var table = customTables[referredTo[i]];\r\n\r\n      if (table) {\r\n        if (index === currentIndex) {\r\n          return table;\r\n        }\r\n\r\n        currentIndex++;\r\n      }\r\n    }\r\n\r\n    throw new Jbig2Error(\"can't find custom Huffman table\");\r\n  }\r\n\r\n  function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) {\r\n    var codes = [];\r\n\r\n    for (var i = 0; i <= 34; i++) {\r\n      var codeLength = reader.readBits(4);\r\n      codes.push(new HuffmanLine([i, codeLength, 0, 0]));\r\n    }\r\n\r\n    var runCodesTable = new HuffmanTable(codes, false);\r\n    codes.length = 0;\r\n\r\n    for (var _i3 = 0; _i3 < numberOfSymbols;) {\r\n      var _codeLength = runCodesTable.decode(reader);\r\n\r\n      if (_codeLength >= 32) {\r\n        var repeatedLength = void 0,\r\n            numberOfRepeats = void 0,\r\n            j = void 0;\r\n\r\n        switch (_codeLength) {\r\n          case 32:\r\n            if (_i3 === 0) {\r\n              throw new Jbig2Error(\"no previous value in symbol ID table\");\r\n            }\r\n\r\n            numberOfRepeats = reader.readBits(2) + 3;\r\n            repeatedLength = codes[_i3 - 1].prefixLength;\r\n            break;\r\n\r\n          case 33:\r\n            numberOfRepeats = reader.readBits(3) + 3;\r\n            repeatedLength = 0;\r\n            break;\r\n\r\n          case 34:\r\n            numberOfRepeats = reader.readBits(7) + 11;\r\n            repeatedLength = 0;\r\n            break;\r\n\r\n          default:\r\n            throw new Jbig2Error(\"invalid code length in symbol ID table\");\r\n        }\r\n\r\n        for (j = 0; j < numberOfRepeats; j++) {\r\n          codes.push(new HuffmanLine([_i3, repeatedLength, 0, 0]));\r\n          _i3++;\r\n        }\r\n      } else {\r\n        codes.push(new HuffmanLine([_i3, _codeLength, 0, 0]));\r\n        _i3++;\r\n      }\r\n    }\r\n\r\n    reader.byteAlign();\r\n    var symbolIDTable = new HuffmanTable(codes, false);\r\n    var customIndex = 0,\r\n        tableFirstS,\r\n        tableDeltaS,\r\n        tableDeltaT;\r\n\r\n    switch (textRegion.huffmanFS) {\r\n      case 0:\r\n      case 1:\r\n        tableFirstS = getStandardTable(textRegion.huffmanFS + 6);\r\n        break;\r\n\r\n      case 3:\r\n        tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables);\r\n        customIndex++;\r\n        break;\r\n\r\n      default:\r\n        throw new Jbig2Error(\"invalid Huffman FS selector\");\r\n    }\r\n\r\n    switch (textRegion.huffmanDS) {\r\n      case 0:\r\n      case 1:\r\n      case 2:\r\n        tableDeltaS = getStandardTable(textRegion.huffmanDS + 8);\r\n        break;\r\n\r\n      case 3:\r\n        tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables);\r\n        customIndex++;\r\n        break;\r\n\r\n      default:\r\n        throw new Jbig2Error(\"invalid Huffman DS selector\");\r\n    }\r\n\r\n    switch (textRegion.huffmanDT) {\r\n      case 0:\r\n      case 1:\r\n      case 2:\r\n        tableDeltaT = getStandardTable(textRegion.huffmanDT + 11);\r\n        break;\r\n\r\n      case 3:\r\n        tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables);\r\n        customIndex++;\r\n        break;\r\n\r\n      default:\r\n        throw new Jbig2Error(\"invalid Huffman DT selector\");\r\n    }\r\n\r\n    if (textRegion.refinement) {\r\n      throw new Jbig2Error(\"refinement with Huffman is not supported\");\r\n    }\r\n\r\n    return {\r\n      symbolIDTable: symbolIDTable,\r\n      tableFirstS: tableFirstS,\r\n      tableDeltaS: tableDeltaS,\r\n      tableDeltaT: tableDeltaT\r\n    };\r\n  }\r\n\r\n  function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) {\r\n    var customIndex = 0,\r\n        tableDeltaHeight,\r\n        tableDeltaWidth;\r\n\r\n    switch (dictionary.huffmanDHSelector) {\r\n      case 0:\r\n      case 1:\r\n        tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4);\r\n        break;\r\n\r\n      case 3:\r\n        tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables);\r\n        customIndex++;\r\n        break;\r\n\r\n      default:\r\n        throw new Jbig2Error(\"invalid Huffman DH selector\");\r\n    }\r\n\r\n    switch (dictionary.huffmanDWSelector) {\r\n      case 0:\r\n      case 1:\r\n        tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2);\r\n        break;\r\n\r\n      case 3:\r\n        tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables);\r\n        customIndex++;\r\n        break;\r\n\r\n      default:\r\n        throw new Jbig2Error(\"invalid Huffman DW selector\");\r\n    }\r\n\r\n    var tableBitmapSize, tableAggregateInstances;\r\n\r\n    if (dictionary.bitmapSizeSelector) {\r\n      tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables);\r\n      customIndex++;\r\n    } else {\r\n      tableBitmapSize = getStandardTable(1);\r\n    }\r\n\r\n    if (dictionary.aggregationInstancesSelector) {\r\n      tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables);\r\n    } else {\r\n      tableAggregateInstances = getStandardTable(1);\r\n    }\r\n\r\n    return {\r\n      tableDeltaHeight: tableDeltaHeight,\r\n      tableDeltaWidth: tableDeltaWidth,\r\n      tableBitmapSize: tableBitmapSize,\r\n      tableAggregateInstances: tableAggregateInstances\r\n    };\r\n  }\r\n\r\n  function readUncompressedBitmap(reader, width, height) {\r\n    var bitmap = [];\r\n\r\n    for (var y = 0; y < height; y++) {\r\n      var row = new Uint8Array(width);\r\n      bitmap.push(row);\r\n\r\n      for (var x = 0; x < width; x++) {\r\n        row[x] = reader.readBit();\r\n      }\r\n\r\n      reader.byteAlign();\r\n    }\r\n\r\n    return bitmap;\r\n  }\r\n\r\n  function decodeMMRBitmap(input, width, height, endOfBlock) {\r\n    var params = {\r\n      K: -1,\r\n      Columns: width,\r\n      Rows: height,\r\n      BlackIs1: true,\r\n      EndOfBlock: endOfBlock\r\n    };\r\n    var decoder = new _ccitt.CCITTFaxDecoder(input, params);\r\n    var bitmap = [];\r\n    var currentByte,\r\n        eof = false;\r\n\r\n    for (var y = 0; y < height; y++) {\r\n      var row = new Uint8Array(width);\r\n      bitmap.push(row);\r\n      var shift = -1;\r\n\r\n      for (var x = 0; x < width; x++) {\r\n        if (shift < 0) {\r\n          currentByte = decoder.readNextChar();\r\n\r\n          if (currentByte === -1) {\r\n            currentByte = 0;\r\n            eof = true;\r\n          }\r\n\r\n          shift = 7;\r\n        }\r\n\r\n        row[x] = currentByte >> shift & 1;\r\n        shift--;\r\n      }\r\n    }\r\n\r\n    if (endOfBlock && !eof) {\r\n      var lookForEOFLimit = 5;\r\n\r\n      for (var i = 0; i < lookForEOFLimit; i++) {\r\n        if (decoder.readNextChar() === -1) {\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    return bitmap;\r\n  }\r\n\r\n  function Jbig2Image() {}\r\n\r\n  Jbig2Image.prototype = {\r\n    parseChunks: function parseChunks(chunks) {\r\n      return parseJbig2Chunks(chunks);\r\n    },\r\n    parse: function parse(data) {\r\n      var _parseJbig = parseJbig2(data),\r\n          imgData = _parseJbig.imgData,\r\n          width = _parseJbig.width,\r\n          height = _parseJbig.height;\r\n\r\n      this.width = width;\r\n      this.height = height;\r\n      return imgData;\r\n    }\r\n  };\r\n  return Jbig2Image;\r\n}();\r\n\r\nexports.Jbig2Image = Jbig2Image;\r\n\r\n/***/ }),\r\n/* 147 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.ArithmeticDecoder = void 0;\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar QeTable = [{\r\n  qe: 0x5601,\r\n  nmps: 1,\r\n  nlps: 1,\r\n  switchFlag: 1\r\n}, {\r\n  qe: 0x3401,\r\n  nmps: 2,\r\n  nlps: 6,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x1801,\r\n  nmps: 3,\r\n  nlps: 9,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0ac1,\r\n  nmps: 4,\r\n  nlps: 12,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0521,\r\n  nmps: 5,\r\n  nlps: 29,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0221,\r\n  nmps: 38,\r\n  nlps: 33,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x5601,\r\n  nmps: 7,\r\n  nlps: 6,\r\n  switchFlag: 1\r\n}, {\r\n  qe: 0x5401,\r\n  nmps: 8,\r\n  nlps: 14,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x4801,\r\n  nmps: 9,\r\n  nlps: 14,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x3801,\r\n  nmps: 10,\r\n  nlps: 14,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x3001,\r\n  nmps: 11,\r\n  nlps: 17,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x2401,\r\n  nmps: 12,\r\n  nlps: 18,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x1c01,\r\n  nmps: 13,\r\n  nlps: 20,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x1601,\r\n  nmps: 29,\r\n  nlps: 21,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x5601,\r\n  nmps: 15,\r\n  nlps: 14,\r\n  switchFlag: 1\r\n}, {\r\n  qe: 0x5401,\r\n  nmps: 16,\r\n  nlps: 14,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x5101,\r\n  nmps: 17,\r\n  nlps: 15,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x4801,\r\n  nmps: 18,\r\n  nlps: 16,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x3801,\r\n  nmps: 19,\r\n  nlps: 17,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x3401,\r\n  nmps: 20,\r\n  nlps: 18,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x3001,\r\n  nmps: 21,\r\n  nlps: 19,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x2801,\r\n  nmps: 22,\r\n  nlps: 19,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x2401,\r\n  nmps: 23,\r\n  nlps: 20,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x2201,\r\n  nmps: 24,\r\n  nlps: 21,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x1c01,\r\n  nmps: 25,\r\n  nlps: 22,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x1801,\r\n  nmps: 26,\r\n  nlps: 23,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x1601,\r\n  nmps: 27,\r\n  nlps: 24,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x1401,\r\n  nmps: 28,\r\n  nlps: 25,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x1201,\r\n  nmps: 29,\r\n  nlps: 26,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x1101,\r\n  nmps: 30,\r\n  nlps: 27,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0ac1,\r\n  nmps: 31,\r\n  nlps: 28,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x09c1,\r\n  nmps: 32,\r\n  nlps: 29,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x08a1,\r\n  nmps: 33,\r\n  nlps: 30,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0521,\r\n  nmps: 34,\r\n  nlps: 31,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0441,\r\n  nmps: 35,\r\n  nlps: 32,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x02a1,\r\n  nmps: 36,\r\n  nlps: 33,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0221,\r\n  nmps: 37,\r\n  nlps: 34,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0141,\r\n  nmps: 38,\r\n  nlps: 35,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0111,\r\n  nmps: 39,\r\n  nlps: 36,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0085,\r\n  nmps: 40,\r\n  nlps: 37,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0049,\r\n  nmps: 41,\r\n  nlps: 38,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0025,\r\n  nmps: 42,\r\n  nlps: 39,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0015,\r\n  nmps: 43,\r\n  nlps: 40,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0009,\r\n  nmps: 44,\r\n  nlps: 41,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0005,\r\n  nmps: 45,\r\n  nlps: 42,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x0001,\r\n  nmps: 45,\r\n  nlps: 43,\r\n  switchFlag: 0\r\n}, {\r\n  qe: 0x5601,\r\n  nmps: 46,\r\n  nlps: 46,\r\n  switchFlag: 0\r\n}];\r\n\r\nvar ArithmeticDecoder = /*#__PURE__*/function () {\r\n  function ArithmeticDecoder(data, start, end) {\r\n    _classCallCheck(this, ArithmeticDecoder);\r\n\r\n    this.data = data;\r\n    this.bp = start;\r\n    this.dataEnd = end;\r\n    this.chigh = data[start];\r\n    this.clow = 0;\r\n    this.byteIn();\r\n    this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f;\r\n    this.clow = this.clow << 7 & 0xffff;\r\n    this.ct -= 7;\r\n    this.a = 0x8000;\r\n  }\r\n\r\n  _createClass(ArithmeticDecoder, [{\r\n    key: \"byteIn\",\r\n    value: function byteIn() {\r\n      var data = this.data;\r\n      var bp = this.bp;\r\n\r\n      if (data[bp] === 0xff) {\r\n        if (data[bp + 1] > 0x8f) {\r\n          this.clow += 0xff00;\r\n          this.ct = 8;\r\n        } else {\r\n          bp++;\r\n          this.clow += data[bp] << 9;\r\n          this.ct = 7;\r\n          this.bp = bp;\r\n        }\r\n      } else {\r\n        bp++;\r\n        this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00;\r\n        this.ct = 8;\r\n        this.bp = bp;\r\n      }\r\n\r\n      if (this.clow > 0xffff) {\r\n        this.chigh += this.clow >> 16;\r\n        this.clow &= 0xffff;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"readBit\",\r\n    value: function readBit(contexts, pos) {\r\n      var cx_index = contexts[pos] >> 1,\r\n          cx_mps = contexts[pos] & 1;\r\n      var qeTableIcx = QeTable[cx_index];\r\n      var qeIcx = qeTableIcx.qe;\r\n      var d;\r\n      var a = this.a - qeIcx;\r\n\r\n      if (this.chigh < qeIcx) {\r\n        if (a < qeIcx) {\r\n          a = qeIcx;\r\n          d = cx_mps;\r\n          cx_index = qeTableIcx.nmps;\r\n        } else {\r\n          a = qeIcx;\r\n          d = 1 ^ cx_mps;\r\n\r\n          if (qeTableIcx.switchFlag === 1) {\r\n            cx_mps = d;\r\n          }\r\n\r\n          cx_index = qeTableIcx.nlps;\r\n        }\r\n      } else {\r\n        this.chigh -= qeIcx;\r\n\r\n        if ((a & 0x8000) !== 0) {\r\n          this.a = a;\r\n          return cx_mps;\r\n        }\r\n\r\n        if (a < qeIcx) {\r\n          d = 1 ^ cx_mps;\r\n\r\n          if (qeTableIcx.switchFlag === 1) {\r\n            cx_mps = d;\r\n          }\r\n\r\n          cx_index = qeTableIcx.nlps;\r\n        } else {\r\n          d = cx_mps;\r\n          cx_index = qeTableIcx.nmps;\r\n        }\r\n      }\r\n\r\n      do {\r\n        if (this.ct === 0) {\r\n          this.byteIn();\r\n        }\r\n\r\n        a <<= 1;\r\n        this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1;\r\n        this.clow = this.clow << 1 & 0xffff;\r\n        this.ct--;\r\n      } while ((a & 0x8000) === 0);\r\n\r\n      this.a = a;\r\n      contexts[pos] = cx_index << 1 | cx_mps;\r\n      return d;\r\n    }\r\n  }]);\r\n\r\n  return ArithmeticDecoder;\r\n}();\r\n\r\nexports.ArithmeticDecoder = ArithmeticDecoder;\r\n\r\n/***/ }),\r\n/* 148 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.JpegStream = void 0;\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _jpg = __w_pdfjs_require__(149);\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar JpegStream = function JpegStreamClosure() {\r\n  function JpegStream(stream, maybeLength, dict, params) {\r\n    var ch;\r\n\r\n    while ((ch = stream.getByte()) !== -1) {\r\n      if (ch === 0xff) {\r\n        stream.skip(-1);\r\n        break;\r\n      }\r\n    }\r\n\r\n    this.stream = stream;\r\n    this.maybeLength = maybeLength;\r\n    this.dict = dict;\r\n    this.params = params;\r\n\r\n    _stream.DecodeStream.call(this, maybeLength);\r\n  }\r\n\r\n  JpegStream.prototype = Object.create(_stream.DecodeStream.prototype);\r\n  Object.defineProperty(JpegStream.prototype, \"bytes\", {\r\n    get: function JpegStream_bytes() {\r\n      return (0, _util.shadow)(this, \"bytes\", this.stream.getBytes(this.maybeLength));\r\n    },\r\n    configurable: true\r\n  });\r\n\r\n  JpegStream.prototype.ensureBuffer = function (requested) {};\r\n\r\n  JpegStream.prototype.readBlock = function () {\r\n    if (this.eof) {\r\n      return;\r\n    }\r\n\r\n    var jpegOptions = {\r\n      decodeTransform: undefined,\r\n      colorTransform: undefined\r\n    };\r\n    var decodeArr = this.dict.getArray(\"Decode\", \"D\");\r\n\r\n    if (this.forceRGB && Array.isArray(decodeArr)) {\r\n      var bitsPerComponent = this.dict.get(\"BitsPerComponent\") || 8;\r\n      var decodeArrLength = decodeArr.length;\r\n      var transform = new Int32Array(decodeArrLength);\r\n      var transformNeeded = false;\r\n      var maxValue = (1 << bitsPerComponent) - 1;\r\n\r\n      for (var i = 0; i < decodeArrLength; i += 2) {\r\n        transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0;\r\n        transform[i + 1] = decodeArr[i] * maxValue | 0;\r\n\r\n        if (transform[i] !== 256 || transform[i + 1] !== 0) {\r\n          transformNeeded = true;\r\n        }\r\n      }\r\n\r\n      if (transformNeeded) {\r\n        jpegOptions.decodeTransform = transform;\r\n      }\r\n    }\r\n\r\n    if ((0, _primitives.isDict)(this.params)) {\r\n      var colorTransform = this.params.get(\"ColorTransform\");\r\n\r\n      if (Number.isInteger(colorTransform)) {\r\n        jpegOptions.colorTransform = colorTransform;\r\n      }\r\n    }\r\n\r\n    var jpegImage = new _jpg.JpegImage(jpegOptions);\r\n    jpegImage.parse(this.bytes);\r\n    var data = jpegImage.getData({\r\n      width: this.drawWidth,\r\n      height: this.drawHeight,\r\n      forceRGB: this.forceRGB,\r\n      isSourcePDF: true\r\n    });\r\n    this.buffer = data;\r\n    this.bufferLength = data.length;\r\n    this.eof = true;\r\n  };\r\n\r\n  return JpegStream;\r\n}();\r\n\r\nexports.JpegStream = JpegStream;\r\n\r\n/***/ }),\r\n/* 149 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.JpegImage = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nvar JpegError = /*#__PURE__*/function (_BaseException) {\r\n  _inherits(JpegError, _BaseException);\r\n\r\n  var _super = _createSuper(JpegError);\r\n\r\n  function JpegError(msg) {\r\n    _classCallCheck(this, JpegError);\r\n\r\n    return _super.call(this, \"JPEG error: \".concat(msg));\r\n  }\r\n\r\n  return JpegError;\r\n}(_util.BaseException);\r\n\r\nvar DNLMarkerError = /*#__PURE__*/function (_BaseException2) {\r\n  _inherits(DNLMarkerError, _BaseException2);\r\n\r\n  var _super2 = _createSuper(DNLMarkerError);\r\n\r\n  function DNLMarkerError(message, scanLines) {\r\n    var _this;\r\n\r\n    _classCallCheck(this, DNLMarkerError);\r\n\r\n    _this = _super2.call(this, message);\r\n    _this.scanLines = scanLines;\r\n    return _this;\r\n  }\r\n\r\n  return DNLMarkerError;\r\n}(_util.BaseException);\r\n\r\nvar EOIMarkerError = /*#__PURE__*/function (_BaseException3) {\r\n  _inherits(EOIMarkerError, _BaseException3);\r\n\r\n  var _super3 = _createSuper(EOIMarkerError);\r\n\r\n  function EOIMarkerError() {\r\n    _classCallCheck(this, EOIMarkerError);\r\n\r\n    return _super3.apply(this, arguments);\r\n  }\r\n\r\n  return EOIMarkerError;\r\n}(_util.BaseException);\r\n\r\nvar JpegImage = function JpegImageClosure() {\r\n  var dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]);\r\n  var dctCos1 = 4017;\r\n  var dctSin1 = 799;\r\n  var dctCos3 = 3406;\r\n  var dctSin3 = 2276;\r\n  var dctCos6 = 1567;\r\n  var dctSin6 = 3784;\r\n  var dctSqrt2 = 5793;\r\n  var dctSqrt1d2 = 2896;\r\n\r\n  function JpegImage() {\r\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\r\n        _ref$decodeTransform = _ref.decodeTransform,\r\n        decodeTransform = _ref$decodeTransform === void 0 ? null : _ref$decodeTransform,\r\n        _ref$colorTransform = _ref.colorTransform,\r\n        colorTransform = _ref$colorTransform === void 0 ? -1 : _ref$colorTransform;\r\n\r\n    this._decodeTransform = decodeTransform;\r\n    this._colorTransform = colorTransform;\r\n  }\r\n\r\n  function buildHuffmanTable(codeLengths, values) {\r\n    var k = 0,\r\n        code = [],\r\n        i,\r\n        j,\r\n        length = 16;\r\n\r\n    while (length > 0 && !codeLengths[length - 1]) {\r\n      length--;\r\n    }\r\n\r\n    code.push({\r\n      children: [],\r\n      index: 0\r\n    });\r\n    var p = code[0],\r\n        q;\r\n\r\n    for (i = 0; i < length; i++) {\r\n      for (j = 0; j < codeLengths[i]; j++) {\r\n        p = code.pop();\r\n        p.children[p.index] = values[k];\r\n\r\n        while (p.index > 0) {\r\n          p = code.pop();\r\n        }\r\n\r\n        p.index++;\r\n        code.push(p);\r\n\r\n        while (code.length <= i) {\r\n          code.push(q = {\r\n            children: [],\r\n            index: 0\r\n          });\r\n          p.children[p.index] = q.children;\r\n          p = q;\r\n        }\r\n\r\n        k++;\r\n      }\r\n\r\n      if (i + 1 < length) {\r\n        code.push(q = {\r\n          children: [],\r\n          index: 0\r\n        });\r\n        p.children[p.index] = q.children;\r\n        p = q;\r\n      }\r\n    }\r\n\r\n    return code[0].children;\r\n  }\r\n\r\n  function getBlockBufferOffset(component, row, col) {\r\n    return 64 * ((component.blocksPerLine + 1) * row + col);\r\n  }\r\n\r\n  function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive) {\r\n    var parseDNLMarker = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : false;\r\n    var mcusPerLine = frame.mcusPerLine;\r\n    var progressive = frame.progressive;\r\n    var startOffset = offset;\r\n    var bitsData = 0,\r\n        bitsCount = 0;\r\n\r\n    function readBit() {\r\n      if (bitsCount > 0) {\r\n        bitsCount--;\r\n        return bitsData >> bitsCount & 1;\r\n      }\r\n\r\n      bitsData = data[offset++];\r\n\r\n      if (bitsData === 0xff) {\r\n        var nextByte = data[offset++];\r\n\r\n        if (nextByte) {\r\n          if (nextByte === 0xdc && parseDNLMarker) {\r\n            offset += 2;\r\n            var scanLines = (0, _core_utils.readUint16)(data, offset);\r\n            offset += 2;\r\n\r\n            if (scanLines > 0 && scanLines !== frame.scanLines) {\r\n              throw new DNLMarkerError(\"Found DNL marker (0xFFDC) while parsing scan data\", scanLines);\r\n            }\r\n          } else if (nextByte === 0xd9) {\r\n            if (parseDNLMarker) {\r\n              var maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0);\r\n\r\n              if (maybeScanLines > 0 && Math.round(frame.scanLines / maybeScanLines) >= 10) {\r\n                throw new DNLMarkerError(\"Found EOI marker (0xFFD9) while parsing scan data, \" + \"possibly caused by incorrect `scanLines` parameter\", maybeScanLines);\r\n              }\r\n            }\r\n\r\n            throw new EOIMarkerError(\"Found EOI marker (0xFFD9) while parsing scan data\");\r\n          }\r\n\r\n          throw new JpegError(\"unexpected marker \".concat((bitsData << 8 | nextByte).toString(16)));\r\n        }\r\n      }\r\n\r\n      bitsCount = 7;\r\n      return bitsData >>> 7;\r\n    }\r\n\r\n    function decodeHuffman(tree) {\r\n      var node = tree;\r\n\r\n      while (true) {\r\n        node = node[readBit()];\r\n\r\n        switch (_typeof(node)) {\r\n          case \"number\":\r\n            return node;\r\n\r\n          case \"object\":\r\n            continue;\r\n        }\r\n\r\n        throw new JpegError(\"invalid huffman sequence\");\r\n      }\r\n    }\r\n\r\n    function receive(length) {\r\n      var n = 0;\r\n\r\n      while (length > 0) {\r\n        n = n << 1 | readBit();\r\n        length--;\r\n      }\r\n\r\n      return n;\r\n    }\r\n\r\n    function receiveAndExtend(length) {\r\n      if (length === 1) {\r\n        return readBit() === 1 ? 1 : -1;\r\n      }\r\n\r\n      var n = receive(length);\r\n\r\n      if (n >= 1 << length - 1) {\r\n        return n;\r\n      }\r\n\r\n      return n + (-1 << length) + 1;\r\n    }\r\n\r\n    function decodeBaseline(component, blockOffset) {\r\n      var t = decodeHuffman(component.huffmanTableDC);\r\n      var diff = t === 0 ? 0 : receiveAndExtend(t);\r\n      component.blockData[blockOffset] = component.pred += diff;\r\n      var k = 1;\r\n\r\n      while (k < 64) {\r\n        var rs = decodeHuffman(component.huffmanTableAC);\r\n        var s = rs & 15,\r\n            r = rs >> 4;\r\n\r\n        if (s === 0) {\r\n          if (r < 15) {\r\n            break;\r\n          }\r\n\r\n          k += 16;\r\n          continue;\r\n        }\r\n\r\n        k += r;\r\n        var z = dctZigZag[k];\r\n        component.blockData[blockOffset + z] = receiveAndExtend(s);\r\n        k++;\r\n      }\r\n    }\r\n\r\n    function decodeDCFirst(component, blockOffset) {\r\n      var t = decodeHuffman(component.huffmanTableDC);\r\n      var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;\r\n      component.blockData[blockOffset] = component.pred += diff;\r\n    }\r\n\r\n    function decodeDCSuccessive(component, blockOffset) {\r\n      component.blockData[blockOffset] |= readBit() << successive;\r\n    }\r\n\r\n    var eobrun = 0;\r\n\r\n    function decodeACFirst(component, blockOffset) {\r\n      if (eobrun > 0) {\r\n        eobrun--;\r\n        return;\r\n      }\r\n\r\n      var k = spectralStart,\r\n          e = spectralEnd;\r\n\r\n      while (k <= e) {\r\n        var rs = decodeHuffman(component.huffmanTableAC);\r\n        var s = rs & 15,\r\n            r = rs >> 4;\r\n\r\n        if (s === 0) {\r\n          if (r < 15) {\r\n            eobrun = receive(r) + (1 << r) - 1;\r\n            break;\r\n          }\r\n\r\n          k += 16;\r\n          continue;\r\n        }\r\n\r\n        k += r;\r\n        var z = dctZigZag[k];\r\n        component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive);\r\n        k++;\r\n      }\r\n    }\r\n\r\n    var successiveACState = 0,\r\n        successiveACNextValue;\r\n\r\n    function decodeACSuccessive(component, blockOffset) {\r\n      var k = spectralStart;\r\n      var e = spectralEnd;\r\n      var r = 0;\r\n      var s;\r\n      var rs;\r\n\r\n      while (k <= e) {\r\n        var offsetZ = blockOffset + dctZigZag[k];\r\n        var sign = component.blockData[offsetZ] < 0 ? -1 : 1;\r\n\r\n        switch (successiveACState) {\r\n          case 0:\r\n            rs = decodeHuffman(component.huffmanTableAC);\r\n            s = rs & 15;\r\n            r = rs >> 4;\r\n\r\n            if (s === 0) {\r\n              if (r < 15) {\r\n                eobrun = receive(r) + (1 << r);\r\n                successiveACState = 4;\r\n              } else {\r\n                r = 16;\r\n                successiveACState = 1;\r\n              }\r\n            } else {\r\n              if (s !== 1) {\r\n                throw new JpegError(\"invalid ACn encoding\");\r\n              }\r\n\r\n              successiveACNextValue = receiveAndExtend(s);\r\n              successiveACState = r ? 2 : 3;\r\n            }\r\n\r\n            continue;\r\n\r\n          case 1:\r\n          case 2:\r\n            if (component.blockData[offsetZ]) {\r\n              component.blockData[offsetZ] += sign * (readBit() << successive);\r\n            } else {\r\n              r--;\r\n\r\n              if (r === 0) {\r\n                successiveACState = successiveACState === 2 ? 3 : 0;\r\n              }\r\n            }\r\n\r\n            break;\r\n\r\n          case 3:\r\n            if (component.blockData[offsetZ]) {\r\n              component.blockData[offsetZ] += sign * (readBit() << successive);\r\n            } else {\r\n              component.blockData[offsetZ] = successiveACNextValue << successive;\r\n              successiveACState = 0;\r\n            }\r\n\r\n            break;\r\n\r\n          case 4:\r\n            if (component.blockData[offsetZ]) {\r\n              component.blockData[offsetZ] += sign * (readBit() << successive);\r\n            }\r\n\r\n            break;\r\n        }\r\n\r\n        k++;\r\n      }\r\n\r\n      if (successiveACState === 4) {\r\n        eobrun--;\r\n\r\n        if (eobrun === 0) {\r\n          successiveACState = 0;\r\n        }\r\n      }\r\n    }\r\n\r\n    var blockRow = 0;\r\n\r\n    function decodeMcu(component, decode, mcu, row, col) {\r\n      var mcuRow = mcu / mcusPerLine | 0;\r\n      var mcuCol = mcu % mcusPerLine;\r\n      blockRow = mcuRow * component.v + row;\r\n      var blockCol = mcuCol * component.h + col;\r\n      var blockOffset = getBlockBufferOffset(component, blockRow, blockCol);\r\n      decode(component, blockOffset);\r\n    }\r\n\r\n    function decodeBlock(component, decode, mcu) {\r\n      blockRow = mcu / component.blocksPerLine | 0;\r\n      var blockCol = mcu % component.blocksPerLine;\r\n      var blockOffset = getBlockBufferOffset(component, blockRow, blockCol);\r\n      decode(component, blockOffset);\r\n    }\r\n\r\n    var componentsLength = components.length;\r\n    var component, i, j, k, n;\r\n    var decodeFn;\r\n\r\n    if (progressive) {\r\n      if (spectralStart === 0) {\r\n        decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;\r\n      } else {\r\n        decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;\r\n      }\r\n    } else {\r\n      decodeFn = decodeBaseline;\r\n    }\r\n\r\n    var mcu = 0,\r\n        fileMarker;\r\n    var mcuExpected;\r\n\r\n    if (componentsLength === 1) {\r\n      mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;\r\n    } else {\r\n      mcuExpected = mcusPerLine * frame.mcusPerColumn;\r\n    }\r\n\r\n    var h, v;\r\n\r\n    while (mcu <= mcuExpected) {\r\n      var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected;\r\n\r\n      if (mcuToRead > 0) {\r\n        for (i = 0; i < componentsLength; i++) {\r\n          components[i].pred = 0;\r\n        }\r\n\r\n        eobrun = 0;\r\n\r\n        if (componentsLength === 1) {\r\n          component = components[0];\r\n\r\n          for (n = 0; n < mcuToRead; n++) {\r\n            decodeBlock(component, decodeFn, mcu);\r\n            mcu++;\r\n          }\r\n        } else {\r\n          for (n = 0; n < mcuToRead; n++) {\r\n            for (i = 0; i < componentsLength; i++) {\r\n              component = components[i];\r\n              h = component.h;\r\n              v = component.v;\r\n\r\n              for (j = 0; j < v; j++) {\r\n                for (k = 0; k < h; k++) {\r\n                  decodeMcu(component, decodeFn, mcu, j, k);\r\n                }\r\n              }\r\n            }\r\n\r\n            mcu++;\r\n          }\r\n        }\r\n      }\r\n\r\n      bitsCount = 0;\r\n      fileMarker = findNextFileMarker(data, offset);\r\n\r\n      if (!fileMarker) {\r\n        break;\r\n      }\r\n\r\n      if (fileMarker.invalid) {\r\n        var partialMsg = mcuToRead > 0 ? \"unexpected\" : \"excessive\";\r\n        (0, _util.warn)(\"decodeScan - \".concat(partialMsg, \" MCU data, current marker is: \").concat(fileMarker.invalid));\r\n        offset = fileMarker.offset;\r\n      }\r\n\r\n      if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {\r\n        offset += 2;\r\n      } else {\r\n        break;\r\n      }\r\n    }\r\n\r\n    return offset - startOffset;\r\n  }\r\n\r\n  function quantizeAndInverse(component, blockBufferOffset, p) {\r\n    var qt = component.quantizationTable,\r\n        blockData = component.blockData;\r\n    var v0, v1, v2, v3, v4, v5, v6, v7;\r\n    var p0, p1, p2, p3, p4, p5, p6, p7;\r\n    var t;\r\n\r\n    if (!qt) {\r\n      throw new JpegError(\"missing required Quantization Table.\");\r\n    }\r\n\r\n    for (var row = 0; row < 64; row += 8) {\r\n      p0 = blockData[blockBufferOffset + row];\r\n      p1 = blockData[blockBufferOffset + row + 1];\r\n      p2 = blockData[blockBufferOffset + row + 2];\r\n      p3 = blockData[blockBufferOffset + row + 3];\r\n      p4 = blockData[blockBufferOffset + row + 4];\r\n      p5 = blockData[blockBufferOffset + row + 5];\r\n      p6 = blockData[blockBufferOffset + row + 6];\r\n      p7 = blockData[blockBufferOffset + row + 7];\r\n      p0 *= qt[row];\r\n\r\n      if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {\r\n        t = dctSqrt2 * p0 + 512 >> 10;\r\n        p[row] = t;\r\n        p[row + 1] = t;\r\n        p[row + 2] = t;\r\n        p[row + 3] = t;\r\n        p[row + 4] = t;\r\n        p[row + 5] = t;\r\n        p[row + 6] = t;\r\n        p[row + 7] = t;\r\n        continue;\r\n      }\r\n\r\n      p1 *= qt[row + 1];\r\n      p2 *= qt[row + 2];\r\n      p3 *= qt[row + 3];\r\n      p4 *= qt[row + 4];\r\n      p5 *= qt[row + 5];\r\n      p6 *= qt[row + 6];\r\n      p7 *= qt[row + 7];\r\n      v0 = dctSqrt2 * p0 + 128 >> 8;\r\n      v1 = dctSqrt2 * p4 + 128 >> 8;\r\n      v2 = p2;\r\n      v3 = p6;\r\n      v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8;\r\n      v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8;\r\n      v5 = p3 << 4;\r\n      v6 = p5 << 4;\r\n      v0 = v0 + v1 + 1 >> 1;\r\n      v1 = v0 - v1;\r\n      t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8;\r\n      v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8;\r\n      v3 = t;\r\n      v4 = v4 + v6 + 1 >> 1;\r\n      v6 = v4 - v6;\r\n      v7 = v7 + v5 + 1 >> 1;\r\n      v5 = v7 - v5;\r\n      v0 = v0 + v3 + 1 >> 1;\r\n      v3 = v0 - v3;\r\n      v1 = v1 + v2 + 1 >> 1;\r\n      v2 = v1 - v2;\r\n      t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;\r\n      v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;\r\n      v7 = t;\r\n      t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;\r\n      v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;\r\n      v6 = t;\r\n      p[row] = v0 + v7;\r\n      p[row + 7] = v0 - v7;\r\n      p[row + 1] = v1 + v6;\r\n      p[row + 6] = v1 - v6;\r\n      p[row + 2] = v2 + v5;\r\n      p[row + 5] = v2 - v5;\r\n      p[row + 3] = v3 + v4;\r\n      p[row + 4] = v3 - v4;\r\n    }\r\n\r\n    for (var col = 0; col < 8; ++col) {\r\n      p0 = p[col];\r\n      p1 = p[col + 8];\r\n      p2 = p[col + 16];\r\n      p3 = p[col + 24];\r\n      p4 = p[col + 32];\r\n      p5 = p[col + 40];\r\n      p6 = p[col + 48];\r\n      p7 = p[col + 56];\r\n\r\n      if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {\r\n        t = dctSqrt2 * p0 + 8192 >> 14;\r\n\r\n        if (t < -2040) {\r\n          t = 0;\r\n        } else if (t >= 2024) {\r\n          t = 255;\r\n        } else {\r\n          t = t + 2056 >> 4;\r\n        }\r\n\r\n        blockData[blockBufferOffset + col] = t;\r\n        blockData[blockBufferOffset + col + 8] = t;\r\n        blockData[blockBufferOffset + col + 16] = t;\r\n        blockData[blockBufferOffset + col + 24] = t;\r\n        blockData[blockBufferOffset + col + 32] = t;\r\n        blockData[blockBufferOffset + col + 40] = t;\r\n        blockData[blockBufferOffset + col + 48] = t;\r\n        blockData[blockBufferOffset + col + 56] = t;\r\n        continue;\r\n      }\r\n\r\n      v0 = dctSqrt2 * p0 + 2048 >> 12;\r\n      v1 = dctSqrt2 * p4 + 2048 >> 12;\r\n      v2 = p2;\r\n      v3 = p6;\r\n      v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12;\r\n      v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12;\r\n      v5 = p3;\r\n      v6 = p5;\r\n      v0 = (v0 + v1 + 1 >> 1) + 4112;\r\n      v1 = v0 - v1;\r\n      t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12;\r\n      v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12;\r\n      v3 = t;\r\n      v4 = v4 + v6 + 1 >> 1;\r\n      v6 = v4 - v6;\r\n      v7 = v7 + v5 + 1 >> 1;\r\n      v5 = v7 - v5;\r\n      v0 = v0 + v3 + 1 >> 1;\r\n      v3 = v0 - v3;\r\n      v1 = v1 + v2 + 1 >> 1;\r\n      v2 = v1 - v2;\r\n      t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;\r\n      v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;\r\n      v7 = t;\r\n      t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;\r\n      v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;\r\n      v6 = t;\r\n      p0 = v0 + v7;\r\n      p7 = v0 - v7;\r\n      p1 = v1 + v6;\r\n      p6 = v1 - v6;\r\n      p2 = v2 + v5;\r\n      p5 = v2 - v5;\r\n      p3 = v3 + v4;\r\n      p4 = v3 - v4;\r\n\r\n      if (p0 < 16) {\r\n        p0 = 0;\r\n      } else if (p0 >= 4080) {\r\n        p0 = 255;\r\n      } else {\r\n        p0 >>= 4;\r\n      }\r\n\r\n      if (p1 < 16) {\r\n        p1 = 0;\r\n      } else if (p1 >= 4080) {\r\n        p1 = 255;\r\n      } else {\r\n        p1 >>= 4;\r\n      }\r\n\r\n      if (p2 < 16) {\r\n        p2 = 0;\r\n      } else if (p2 >= 4080) {\r\n        p2 = 255;\r\n      } else {\r\n        p2 >>= 4;\r\n      }\r\n\r\n      if (p3 < 16) {\r\n        p3 = 0;\r\n      } else if (p3 >= 4080) {\r\n        p3 = 255;\r\n      } else {\r\n        p3 >>= 4;\r\n      }\r\n\r\n      if (p4 < 16) {\r\n        p4 = 0;\r\n      } else if (p4 >= 4080) {\r\n        p4 = 255;\r\n      } else {\r\n        p4 >>= 4;\r\n      }\r\n\r\n      if (p5 < 16) {\r\n        p5 = 0;\r\n      } else if (p5 >= 4080) {\r\n        p5 = 255;\r\n      } else {\r\n        p5 >>= 4;\r\n      }\r\n\r\n      if (p6 < 16) {\r\n        p6 = 0;\r\n      } else if (p6 >= 4080) {\r\n        p6 = 255;\r\n      } else {\r\n        p6 >>= 4;\r\n      }\r\n\r\n      if (p7 < 16) {\r\n        p7 = 0;\r\n      } else if (p7 >= 4080) {\r\n        p7 = 255;\r\n      } else {\r\n        p7 >>= 4;\r\n      }\r\n\r\n      blockData[blockBufferOffset + col] = p0;\r\n      blockData[blockBufferOffset + col + 8] = p1;\r\n      blockData[blockBufferOffset + col + 16] = p2;\r\n      blockData[blockBufferOffset + col + 24] = p3;\r\n      blockData[blockBufferOffset + col + 32] = p4;\r\n      blockData[blockBufferOffset + col + 40] = p5;\r\n      blockData[blockBufferOffset + col + 48] = p6;\r\n      blockData[blockBufferOffset + col + 56] = p7;\r\n    }\r\n  }\r\n\r\n  function buildComponentData(frame, component) {\r\n    var blocksPerLine = component.blocksPerLine;\r\n    var blocksPerColumn = component.blocksPerColumn;\r\n    var computationBuffer = new Int16Array(64);\r\n\r\n    for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {\r\n      for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {\r\n        var offset = getBlockBufferOffset(component, blockRow, blockCol);\r\n        quantizeAndInverse(component, offset, computationBuffer);\r\n      }\r\n    }\r\n\r\n    return component.blockData;\r\n  }\r\n\r\n  function findNextFileMarker(data, currentPos) {\r\n    var startPos = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : currentPos;\r\n    var maxPos = data.length - 1;\r\n    var newPos = startPos < currentPos ? startPos : currentPos;\r\n\r\n    if (currentPos >= maxPos) {\r\n      return null;\r\n    }\r\n\r\n    var currentMarker = (0, _core_utils.readUint16)(data, currentPos);\r\n\r\n    if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) {\r\n      return {\r\n        invalid: null,\r\n        marker: currentMarker,\r\n        offset: currentPos\r\n      };\r\n    }\r\n\r\n    var newMarker = (0, _core_utils.readUint16)(data, newPos);\r\n\r\n    while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) {\r\n      if (++newPos >= maxPos) {\r\n        return null;\r\n      }\r\n\r\n      newMarker = (0, _core_utils.readUint16)(data, newPos);\r\n    }\r\n\r\n    return {\r\n      invalid: currentMarker.toString(16),\r\n      marker: newMarker,\r\n      offset: newPos\r\n    };\r\n  }\r\n\r\n  JpegImage.prototype = {\r\n    parse: function parse(data) {\r\n      var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\r\n          _ref2$dnlScanLines = _ref2.dnlScanLines,\r\n          dnlScanLines = _ref2$dnlScanLines === void 0 ? null : _ref2$dnlScanLines;\r\n\r\n      function readDataBlock() {\r\n        var length = (0, _core_utils.readUint16)(data, offset);\r\n        offset += 2;\r\n        var endOffset = offset + length - 2;\r\n        var fileMarker = findNextFileMarker(data, endOffset, offset);\r\n\r\n        if (fileMarker && fileMarker.invalid) {\r\n          (0, _util.warn)(\"readDataBlock - incorrect length, current marker is: \" + fileMarker.invalid);\r\n          endOffset = fileMarker.offset;\r\n        }\r\n\r\n        var array = data.subarray(offset, endOffset);\r\n        offset += array.length;\r\n        return array;\r\n      }\r\n\r\n      function prepareComponents(frame) {\r\n        var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);\r\n        var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);\r\n\r\n        for (var i = 0; i < frame.components.length; i++) {\r\n          component = frame.components[i];\r\n          var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH);\r\n          var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV);\r\n          var blocksPerLineForMcu = mcusPerLine * component.h;\r\n          var blocksPerColumnForMcu = mcusPerColumn * component.v;\r\n          var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);\r\n          component.blockData = new Int16Array(blocksBufferSize);\r\n          component.blocksPerLine = blocksPerLine;\r\n          component.blocksPerColumn = blocksPerColumn;\r\n        }\r\n\r\n        frame.mcusPerLine = mcusPerLine;\r\n        frame.mcusPerColumn = mcusPerColumn;\r\n      }\r\n\r\n      var offset = 0;\r\n      var jfif = null;\r\n      var adobe = null;\r\n      var frame, resetInterval;\r\n      var numSOSMarkers = 0;\r\n      var quantizationTables = [];\r\n      var huffmanTablesAC = [],\r\n          huffmanTablesDC = [];\r\n      var fileMarker = (0, _core_utils.readUint16)(data, offset);\r\n      offset += 2;\r\n\r\n      if (fileMarker !== 0xffd8) {\r\n        throw new JpegError(\"SOI not found\");\r\n      }\r\n\r\n      fileMarker = (0, _core_utils.readUint16)(data, offset);\r\n      offset += 2;\r\n\r\n      markerLoop: while (fileMarker !== 0xffd9) {\r\n        var i, j, l;\r\n\r\n        switch (fileMarker) {\r\n          case 0xffe0:\r\n          case 0xffe1:\r\n          case 0xffe2:\r\n          case 0xffe3:\r\n          case 0xffe4:\r\n          case 0xffe5:\r\n          case 0xffe6:\r\n          case 0xffe7:\r\n          case 0xffe8:\r\n          case 0xffe9:\r\n          case 0xffea:\r\n          case 0xffeb:\r\n          case 0xffec:\r\n          case 0xffed:\r\n          case 0xffee:\r\n          case 0xffef:\r\n          case 0xfffe:\r\n            var appData = readDataBlock();\r\n\r\n            if (fileMarker === 0xffe0) {\r\n              if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) {\r\n                jfif = {\r\n                  version: {\r\n                    major: appData[5],\r\n                    minor: appData[6]\r\n                  },\r\n                  densityUnits: appData[7],\r\n                  xDensity: appData[8] << 8 | appData[9],\r\n                  yDensity: appData[10] << 8 | appData[11],\r\n                  thumbWidth: appData[12],\r\n                  thumbHeight: appData[13],\r\n                  thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])\r\n                };\r\n              }\r\n            }\r\n\r\n            if (fileMarker === 0xffee) {\r\n              if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) {\r\n                adobe = {\r\n                  version: appData[5] << 8 | appData[6],\r\n                  flags0: appData[7] << 8 | appData[8],\r\n                  flags1: appData[9] << 8 | appData[10],\r\n                  transformCode: appData[11]\r\n                };\r\n              }\r\n            }\r\n\r\n            break;\r\n\r\n          case 0xffdb:\r\n            var quantizationTablesLength = (0, _core_utils.readUint16)(data, offset);\r\n            offset += 2;\r\n            var quantizationTablesEnd = quantizationTablesLength + offset - 2;\r\n            var z;\r\n\r\n            while (offset < quantizationTablesEnd) {\r\n              var quantizationTableSpec = data[offset++];\r\n              var tableData = new Uint16Array(64);\r\n\r\n              if (quantizationTableSpec >> 4 === 0) {\r\n                for (j = 0; j < 64; j++) {\r\n                  z = dctZigZag[j];\r\n                  tableData[z] = data[offset++];\r\n                }\r\n              } else if (quantizationTableSpec >> 4 === 1) {\r\n                for (j = 0; j < 64; j++) {\r\n                  z = dctZigZag[j];\r\n                  tableData[z] = (0, _core_utils.readUint16)(data, offset);\r\n                  offset += 2;\r\n                }\r\n              } else {\r\n                throw new JpegError(\"DQT - invalid table spec\");\r\n              }\r\n\r\n              quantizationTables[quantizationTableSpec & 15] = tableData;\r\n            }\r\n\r\n            break;\r\n\r\n          case 0xffc0:\r\n          case 0xffc1:\r\n          case 0xffc2:\r\n            if (frame) {\r\n              throw new JpegError(\"Only single frame JPEGs supported\");\r\n            }\r\n\r\n            offset += 2;\r\n            frame = {};\r\n            frame.extended = fileMarker === 0xffc1;\r\n            frame.progressive = fileMarker === 0xffc2;\r\n            frame.precision = data[offset++];\r\n            var sofScanLines = (0, _core_utils.readUint16)(data, offset);\r\n            offset += 2;\r\n            frame.scanLines = dnlScanLines || sofScanLines;\r\n            frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset);\r\n            offset += 2;\r\n            frame.components = [];\r\n            frame.componentIds = {};\r\n            var componentsCount = data[offset++],\r\n                componentId;\r\n            var maxH = 0,\r\n                maxV = 0;\r\n\r\n            for (i = 0; i < componentsCount; i++) {\r\n              componentId = data[offset];\r\n              var h = data[offset + 1] >> 4;\r\n              var v = data[offset + 1] & 15;\r\n\r\n              if (maxH < h) {\r\n                maxH = h;\r\n              }\r\n\r\n              if (maxV < v) {\r\n                maxV = v;\r\n              }\r\n\r\n              var qId = data[offset + 2];\r\n              l = frame.components.push({\r\n                h: h,\r\n                v: v,\r\n                quantizationId: qId,\r\n                quantizationTable: null\r\n              });\r\n              frame.componentIds[componentId] = l - 1;\r\n              offset += 3;\r\n            }\r\n\r\n            frame.maxH = maxH;\r\n            frame.maxV = maxV;\r\n            prepareComponents(frame);\r\n            break;\r\n\r\n          case 0xffc4:\r\n            var huffmanLength = (0, _core_utils.readUint16)(data, offset);\r\n            offset += 2;\r\n\r\n            for (i = 2; i < huffmanLength;) {\r\n              var huffmanTableSpec = data[offset++];\r\n              var codeLengths = new Uint8Array(16);\r\n              var codeLengthSum = 0;\r\n\r\n              for (j = 0; j < 16; j++, offset++) {\r\n                codeLengthSum += codeLengths[j] = data[offset];\r\n              }\r\n\r\n              var huffmanValues = new Uint8Array(codeLengthSum);\r\n\r\n              for (j = 0; j < codeLengthSum; j++, offset++) {\r\n                huffmanValues[j] = data[offset];\r\n              }\r\n\r\n              i += 17 + codeLengthSum;\r\n              (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues);\r\n            }\r\n\r\n            break;\r\n\r\n          case 0xffdd:\r\n            offset += 2;\r\n            resetInterval = (0, _core_utils.readUint16)(data, offset);\r\n            offset += 2;\r\n            break;\r\n\r\n          case 0xffda:\r\n            var parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;\r\n            offset += 2;\r\n            var selectorsCount = data[offset++];\r\n            var components = [],\r\n                component;\r\n\r\n            for (i = 0; i < selectorsCount; i++) {\r\n              var index = data[offset++];\r\n              var componentIndex = frame.componentIds[index];\r\n              component = frame.components[componentIndex];\r\n              component.index = index;\r\n              var tableSpec = data[offset++];\r\n              component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];\r\n              component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];\r\n              components.push(component);\r\n            }\r\n\r\n            var spectralStart = data[offset++];\r\n            var spectralEnd = data[offset++];\r\n            var successiveApproximation = data[offset++];\r\n\r\n            try {\r\n              var processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker);\r\n              offset += processed;\r\n            } catch (ex) {\r\n              if (ex instanceof DNLMarkerError) {\r\n                (0, _util.warn)(\"\".concat(ex.message, \" -- attempting to re-parse the JPEG image.\"));\r\n                return this.parse(data, {\r\n                  dnlScanLines: ex.scanLines\r\n                });\r\n              } else if (ex instanceof EOIMarkerError) {\r\n                (0, _util.warn)(\"\".concat(ex.message, \" -- ignoring the rest of the image data.\"));\r\n                break markerLoop;\r\n              }\r\n\r\n              throw ex;\r\n            }\r\n\r\n            break;\r\n\r\n          case 0xffdc:\r\n            offset += 4;\r\n            break;\r\n\r\n          case 0xffff:\r\n            if (data[offset] !== 0xff) {\r\n              offset--;\r\n            }\r\n\r\n            break;\r\n\r\n          default:\r\n            var nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3);\r\n\r\n            if (nextFileMarker && nextFileMarker.invalid) {\r\n              (0, _util.warn)(\"JpegImage.parse - unexpected data, current marker is: \" + nextFileMarker.invalid);\r\n              offset = nextFileMarker.offset;\r\n              break;\r\n            }\r\n\r\n            if (!nextFileMarker || offset >= data.length - 1) {\r\n              (0, _util.warn)(\"JpegImage.parse - reached the end of the image data \" + \"without finding an EOI marker (0xFFD9).\");\r\n              break markerLoop;\r\n            }\r\n\r\n            throw new JpegError(\"JpegImage.parse - unknown marker: \" + fileMarker.toString(16));\r\n        }\r\n\r\n        fileMarker = (0, _core_utils.readUint16)(data, offset);\r\n        offset += 2;\r\n      }\r\n\r\n      this.width = frame.samplesPerLine;\r\n      this.height = frame.scanLines;\r\n      this.jfif = jfif;\r\n      this.adobe = adobe;\r\n      this.components = [];\r\n\r\n      for (i = 0; i < frame.components.length; i++) {\r\n        component = frame.components[i];\r\n        var quantizationTable = quantizationTables[component.quantizationId];\r\n\r\n        if (quantizationTable) {\r\n          component.quantizationTable = quantizationTable;\r\n        }\r\n\r\n        this.components.push({\r\n          index: component.index,\r\n          output: buildComponentData(frame, component),\r\n          scaleX: component.h / frame.maxH,\r\n          scaleY: component.v / frame.maxV,\r\n          blocksPerLine: component.blocksPerLine,\r\n          blocksPerColumn: component.blocksPerColumn\r\n        });\r\n      }\r\n\r\n      this.numComponents = this.components.length;\r\n      return undefined;\r\n    },\r\n    _getLinearizedBlockData: function _getLinearizedBlockData(width, height) {\r\n      var isSourcePDF = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n      var scaleX = this.width / width,\r\n          scaleY = this.height / height;\r\n      var component, componentScaleX, componentScaleY, blocksPerScanline;\r\n      var x, y, i, j, k;\r\n      var index;\r\n      var offset = 0;\r\n      var output;\r\n      var numComponents = this.components.length;\r\n      var dataLength = width * height * numComponents;\r\n      var data = new Uint8ClampedArray(dataLength);\r\n      var xScaleBlockOffset = new Uint32Array(width);\r\n      var mask3LSB = 0xfffffff8;\r\n      var lastComponentScaleX;\r\n\r\n      for (i = 0; i < numComponents; i++) {\r\n        component = this.components[i];\r\n        componentScaleX = component.scaleX * scaleX;\r\n        componentScaleY = component.scaleY * scaleY;\r\n        offset = i;\r\n        output = component.output;\r\n        blocksPerScanline = component.blocksPerLine + 1 << 3;\r\n\r\n        if (componentScaleX !== lastComponentScaleX) {\r\n          for (x = 0; x < width; x++) {\r\n            j = 0 | x * componentScaleX;\r\n            xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7;\r\n          }\r\n\r\n          lastComponentScaleX = componentScaleX;\r\n        }\r\n\r\n        for (y = 0; y < height; y++) {\r\n          j = 0 | y * componentScaleY;\r\n          index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3;\r\n\r\n          for (x = 0; x < width; x++) {\r\n            data[offset] = output[index + xScaleBlockOffset[x]];\r\n            offset += numComponents;\r\n          }\r\n        }\r\n      }\r\n\r\n      var transform = this._decodeTransform;\r\n\r\n      if (!isSourcePDF && numComponents === 4 && !transform) {\r\n        transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]);\r\n      }\r\n\r\n      if (transform) {\r\n        for (i = 0; i < dataLength;) {\r\n          for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {\r\n            data[i] = (data[i] * transform[k] >> 8) + transform[k + 1];\r\n          }\r\n        }\r\n      }\r\n\r\n      return data;\r\n    },\r\n\r\n    get _isColorConversionNeeded() {\r\n      if (this.adobe) {\r\n        return !!this.adobe.transformCode;\r\n      }\r\n\r\n      if (this.numComponents === 3) {\r\n        if (this._colorTransform === 0) {\r\n          return false;\r\n        } else if (this.components[0].index === 0x52 && this.components[1].index === 0x47 && this.components[2].index === 0x42) {\r\n          return false;\r\n        }\r\n\r\n        return true;\r\n      }\r\n\r\n      if (this._colorTransform === 1) {\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    },\r\n\r\n    _convertYccToRgb: function convertYccToRgb(data) {\r\n      var Y, Cb, Cr;\r\n\r\n      for (var i = 0, length = data.length; i < length; i += 3) {\r\n        Y = data[i];\r\n        Cb = data[i + 1];\r\n        Cr = data[i + 2];\r\n        data[i] = Y - 179.456 + 1.402 * Cr;\r\n        data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;\r\n        data[i + 2] = Y - 226.816 + 1.772 * Cb;\r\n      }\r\n\r\n      return data;\r\n    },\r\n    _convertYcckToRgb: function convertYcckToRgb(data) {\r\n      var Y, Cb, Cr, k;\r\n      var offset = 0;\r\n\r\n      for (var i = 0, length = data.length; i < length; i += 4) {\r\n        Y = data[i];\r\n        Cb = data[i + 1];\r\n        Cr = data[i + 2];\r\n        k = data[i + 3];\r\n        data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776);\r\n        data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665);\r\n        data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407);\r\n      }\r\n\r\n      return data.subarray(0, offset);\r\n    },\r\n    _convertYcckToCmyk: function convertYcckToCmyk(data) {\r\n      var Y, Cb, Cr;\r\n\r\n      for (var i = 0, length = data.length; i < length; i += 4) {\r\n        Y = data[i];\r\n        Cb = data[i + 1];\r\n        Cr = data[i + 2];\r\n        data[i] = 434.456 - Y - 1.402 * Cr;\r\n        data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr;\r\n        data[i + 2] = 481.816 - Y - 1.772 * Cb;\r\n      }\r\n\r\n      return data;\r\n    },\r\n    _convertCmykToRgb: function convertCmykToRgb(data) {\r\n      var c, m, y, k;\r\n      var offset = 0;\r\n\r\n      for (var i = 0, length = data.length; i < length; i += 4) {\r\n        c = data[i];\r\n        m = data[i + 1];\r\n        y = data[i + 2];\r\n        k = data[i + 3];\r\n        data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254);\r\n        data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.00031891311758832814 * k + 0.7364883807733168);\r\n        data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144);\r\n      }\r\n\r\n      return data.subarray(0, offset);\r\n    },\r\n    getData: function getData(_ref3) {\r\n      var width = _ref3.width,\r\n          height = _ref3.height,\r\n          _ref3$forceRGB = _ref3.forceRGB,\r\n          forceRGB = _ref3$forceRGB === void 0 ? false : _ref3$forceRGB,\r\n          _ref3$isSourcePDF = _ref3.isSourcePDF,\r\n          isSourcePDF = _ref3$isSourcePDF === void 0 ? false : _ref3$isSourcePDF;\r\n\r\n      if (this.numComponents > 4) {\r\n        throw new JpegError(\"Unsupported color mode\");\r\n      }\r\n\r\n      var data = this._getLinearizedBlockData(width, height, isSourcePDF);\r\n\r\n      if (this.numComponents === 1 && forceRGB) {\r\n        var dataLength = data.length;\r\n        var rgbData = new Uint8ClampedArray(dataLength * 3);\r\n        var offset = 0;\r\n\r\n        for (var i = 0; i < dataLength; i++) {\r\n          var grayColor = data[i];\r\n          rgbData[offset++] = grayColor;\r\n          rgbData[offset++] = grayColor;\r\n          rgbData[offset++] = grayColor;\r\n        }\r\n\r\n        return rgbData;\r\n      } else if (this.numComponents === 3 && this._isColorConversionNeeded) {\r\n        return this._convertYccToRgb(data);\r\n      } else if (this.numComponents === 4) {\r\n        if (this._isColorConversionNeeded) {\r\n          if (forceRGB) {\r\n            return this._convertYcckToRgb(data);\r\n          }\r\n\r\n          return this._convertYcckToCmyk(data);\r\n        } else if (forceRGB) {\r\n          return this._convertCmykToRgb(data);\r\n        }\r\n      }\r\n\r\n      return data;\r\n    }\r\n  };\r\n  return JpegImage;\r\n}();\r\n\r\nexports.JpegImage = JpegImage;\r\n\r\n/***/ }),\r\n/* 150 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.JpxStream = void 0;\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nvar _jpx = __w_pdfjs_require__(151);\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar JpxStream = function JpxStreamClosure() {\r\n  function JpxStream(stream, maybeLength, dict, params) {\r\n    this.stream = stream;\r\n    this.maybeLength = maybeLength;\r\n    this.dict = dict;\r\n    this.params = params;\r\n\r\n    _stream.DecodeStream.call(this, maybeLength);\r\n  }\r\n\r\n  JpxStream.prototype = Object.create(_stream.DecodeStream.prototype);\r\n  Object.defineProperty(JpxStream.prototype, \"bytes\", {\r\n    get: function JpxStream_bytes() {\r\n      return (0, _util.shadow)(this, \"bytes\", this.stream.getBytes(this.maybeLength));\r\n    },\r\n    configurable: true\r\n  });\r\n\r\n  JpxStream.prototype.ensureBuffer = function (requested) {};\r\n\r\n  JpxStream.prototype.readBlock = function () {\r\n    if (this.eof) {\r\n      return;\r\n    }\r\n\r\n    var jpxImage = new _jpx.JpxImage();\r\n    jpxImage.parse(this.bytes);\r\n    var width = jpxImage.width;\r\n    var height = jpxImage.height;\r\n    var componentsCount = jpxImage.componentsCount;\r\n    var tileCount = jpxImage.tiles.length;\r\n\r\n    if (tileCount === 1) {\r\n      this.buffer = jpxImage.tiles[0].items;\r\n    } else {\r\n      var data = new Uint8ClampedArray(width * height * componentsCount);\r\n\r\n      for (var k = 0; k < tileCount; k++) {\r\n        var tileComponents = jpxImage.tiles[k];\r\n        var tileWidth = tileComponents.width;\r\n        var tileHeight = tileComponents.height;\r\n        var tileLeft = tileComponents.left;\r\n        var tileTop = tileComponents.top;\r\n        var src = tileComponents.items;\r\n        var srcPosition = 0;\r\n        var dataPosition = (width * tileTop + tileLeft) * componentsCount;\r\n        var imgRowSize = width * componentsCount;\r\n        var tileRowSize = tileWidth * componentsCount;\r\n\r\n        for (var j = 0; j < tileHeight; j++) {\r\n          var rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize);\r\n          data.set(rowBytes, dataPosition);\r\n          srcPosition += tileRowSize;\r\n          dataPosition += imgRowSize;\r\n        }\r\n      }\r\n\r\n      this.buffer = data;\r\n    }\r\n\r\n    this.bufferLength = this.buffer.length;\r\n    this.eof = true;\r\n  };\r\n\r\n  return JpxStream;\r\n}();\r\n\r\nexports.JpxStream = JpxStream;\r\n\r\n/***/ }),\r\n/* 151 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.JpxImage = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar _arithmetic_decoder = __w_pdfjs_require__(147);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nvar JpxError = /*#__PURE__*/function (_BaseException) {\r\n  _inherits(JpxError, _BaseException);\r\n\r\n  var _super = _createSuper(JpxError);\r\n\r\n  function JpxError(msg) {\r\n    _classCallCheck(this, JpxError);\r\n\r\n    return _super.call(this, \"JPX error: \".concat(msg));\r\n  }\r\n\r\n  return JpxError;\r\n}(_util.BaseException);\r\n\r\nvar JpxImage = function JpxImageClosure() {\r\n  var SubbandsGainLog2 = {\r\n    LL: 0,\r\n    LH: 1,\r\n    HL: 1,\r\n    HH: 2\r\n  };\r\n\r\n  function JpxImage() {\r\n    this.failOnCorruptedImage = false;\r\n  }\r\n\r\n  JpxImage.prototype = {\r\n    parse: function JpxImage_parse(data) {\r\n      var head = (0, _core_utils.readUint16)(data, 0);\r\n\r\n      if (head === 0xff4f) {\r\n        this.parseCodestream(data, 0, data.length);\r\n        return;\r\n      }\r\n\r\n      var position = 0,\r\n          length = data.length;\r\n\r\n      while (position < length) {\r\n        var headerSize = 8;\r\n        var lbox = (0, _core_utils.readUint32)(data, position);\r\n        var tbox = (0, _core_utils.readUint32)(data, position + 4);\r\n        position += headerSize;\r\n\r\n        if (lbox === 1) {\r\n          lbox = (0, _core_utils.readUint32)(data, position) * 4294967296 + (0, _core_utils.readUint32)(data, position + 4);\r\n          position += 8;\r\n          headerSize += 8;\r\n        }\r\n\r\n        if (lbox === 0) {\r\n          lbox = length - position + headerSize;\r\n        }\r\n\r\n        if (lbox < headerSize) {\r\n          throw new JpxError(\"Invalid box field size\");\r\n        }\r\n\r\n        var dataLength = lbox - headerSize;\r\n        var jumpDataLength = true;\r\n\r\n        switch (tbox) {\r\n          case 0x6a703268:\r\n            jumpDataLength = false;\r\n            break;\r\n\r\n          case 0x636f6c72:\r\n            var method = data[position];\r\n\r\n            if (method === 1) {\r\n              var colorspace = (0, _core_utils.readUint32)(data, position + 3);\r\n\r\n              switch (colorspace) {\r\n                case 16:\r\n                case 17:\r\n                case 18:\r\n                  break;\r\n\r\n                default:\r\n                  (0, _util.warn)(\"Unknown colorspace \" + colorspace);\r\n                  break;\r\n              }\r\n            } else if (method === 2) {\r\n              (0, _util.info)(\"ICC profile not supported\");\r\n            }\r\n\r\n            break;\r\n\r\n          case 0x6a703263:\r\n            this.parseCodestream(data, position, position + dataLength);\r\n            break;\r\n\r\n          case 0x6a502020:\r\n            if ((0, _core_utils.readUint32)(data, position) !== 0x0d0a870a) {\r\n              (0, _util.warn)(\"Invalid JP2 signature\");\r\n            }\r\n\r\n            break;\r\n\r\n          case 0x6a501a1a:\r\n          case 0x66747970:\r\n          case 0x72726571:\r\n          case 0x72657320:\r\n          case 0x69686472:\r\n            break;\r\n\r\n          default:\r\n            var headerType = String.fromCharCode(tbox >> 24 & 0xff, tbox >> 16 & 0xff, tbox >> 8 & 0xff, tbox & 0xff);\r\n            (0, _util.warn)(\"Unsupported header type \" + tbox + \" (\" + headerType + \")\");\r\n            break;\r\n        }\r\n\r\n        if (jumpDataLength) {\r\n          position += dataLength;\r\n        }\r\n      }\r\n    },\r\n    parseImageProperties: function JpxImage_parseImageProperties(stream) {\r\n      var newByte = stream.getByte();\r\n\r\n      while (newByte >= 0) {\r\n        var oldByte = newByte;\r\n        newByte = stream.getByte();\r\n        var code = oldByte << 8 | newByte;\r\n\r\n        if (code === 0xff51) {\r\n          stream.skip(4);\r\n          var Xsiz = stream.getInt32() >>> 0;\r\n          var Ysiz = stream.getInt32() >>> 0;\r\n          var XOsiz = stream.getInt32() >>> 0;\r\n          var YOsiz = stream.getInt32() >>> 0;\r\n          stream.skip(16);\r\n          var Csiz = stream.getUint16();\r\n          this.width = Xsiz - XOsiz;\r\n          this.height = Ysiz - YOsiz;\r\n          this.componentsCount = Csiz;\r\n          this.bitsPerComponent = 8;\r\n          return;\r\n        }\r\n      }\r\n\r\n      throw new JpxError(\"No size marker found in JPX stream\");\r\n    },\r\n    parseCodestream: function JpxImage_parseCodestream(data, start, end) {\r\n      var context = {};\r\n      var doNotRecover = false;\r\n\r\n      try {\r\n        var position = start;\r\n\r\n        while (position + 1 < end) {\r\n          var code = (0, _core_utils.readUint16)(data, position);\r\n          position += 2;\r\n          var length = 0,\r\n              j,\r\n              sqcd,\r\n              spqcds,\r\n              spqcdSize,\r\n              scalarExpounded,\r\n              tile;\r\n\r\n          switch (code) {\r\n            case 0xff4f:\r\n              context.mainHeader = true;\r\n              break;\r\n\r\n            case 0xffd9:\r\n              break;\r\n\r\n            case 0xff51:\r\n              length = (0, _core_utils.readUint16)(data, position);\r\n              var siz = {};\r\n              siz.Xsiz = (0, _core_utils.readUint32)(data, position + 4);\r\n              siz.Ysiz = (0, _core_utils.readUint32)(data, position + 8);\r\n              siz.XOsiz = (0, _core_utils.readUint32)(data, position + 12);\r\n              siz.YOsiz = (0, _core_utils.readUint32)(data, position + 16);\r\n              siz.XTsiz = (0, _core_utils.readUint32)(data, position + 20);\r\n              siz.YTsiz = (0, _core_utils.readUint32)(data, position + 24);\r\n              siz.XTOsiz = (0, _core_utils.readUint32)(data, position + 28);\r\n              siz.YTOsiz = (0, _core_utils.readUint32)(data, position + 32);\r\n              var componentsCount = (0, _core_utils.readUint16)(data, position + 36);\r\n              siz.Csiz = componentsCount;\r\n              var components = [];\r\n              j = position + 38;\r\n\r\n              for (var i = 0; i < componentsCount; i++) {\r\n                var component = {\r\n                  precision: (data[j] & 0x7f) + 1,\r\n                  isSigned: !!(data[j] & 0x80),\r\n                  XRsiz: data[j + 1],\r\n                  YRsiz: data[j + 2]\r\n                };\r\n                j += 3;\r\n                calculateComponentDimensions(component, siz);\r\n                components.push(component);\r\n              }\r\n\r\n              context.SIZ = siz;\r\n              context.components = components;\r\n              calculateTileGrids(context, components);\r\n              context.QCC = [];\r\n              context.COC = [];\r\n              break;\r\n\r\n            case 0xff5c:\r\n              length = (0, _core_utils.readUint16)(data, position);\r\n              var qcd = {};\r\n              j = position + 2;\r\n              sqcd = data[j++];\r\n\r\n              switch (sqcd & 0x1f) {\r\n                case 0:\r\n                  spqcdSize = 8;\r\n                  scalarExpounded = true;\r\n                  break;\r\n\r\n                case 1:\r\n                  spqcdSize = 16;\r\n                  scalarExpounded = false;\r\n                  break;\r\n\r\n                case 2:\r\n                  spqcdSize = 16;\r\n                  scalarExpounded = true;\r\n                  break;\r\n\r\n                default:\r\n                  throw new Error(\"Invalid SQcd value \" + sqcd);\r\n              }\r\n\r\n              qcd.noQuantization = spqcdSize === 8;\r\n              qcd.scalarExpounded = scalarExpounded;\r\n              qcd.guardBits = sqcd >> 5;\r\n              spqcds = [];\r\n\r\n              while (j < length + position) {\r\n                var spqcd = {};\r\n\r\n                if (spqcdSize === 8) {\r\n                  spqcd.epsilon = data[j++] >> 3;\r\n                  spqcd.mu = 0;\r\n                } else {\r\n                  spqcd.epsilon = data[j] >> 3;\r\n                  spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];\r\n                  j += 2;\r\n                }\r\n\r\n                spqcds.push(spqcd);\r\n              }\r\n\r\n              qcd.SPqcds = spqcds;\r\n\r\n              if (context.mainHeader) {\r\n                context.QCD = qcd;\r\n              } else {\r\n                context.currentTile.QCD = qcd;\r\n                context.currentTile.QCC = [];\r\n              }\r\n\r\n              break;\r\n\r\n            case 0xff5d:\r\n              length = (0, _core_utils.readUint16)(data, position);\r\n              var qcc = {};\r\n              j = position + 2;\r\n              var cqcc;\r\n\r\n              if (context.SIZ.Csiz < 257) {\r\n                cqcc = data[j++];\r\n              } else {\r\n                cqcc = (0, _core_utils.readUint16)(data, j);\r\n                j += 2;\r\n              }\r\n\r\n              sqcd = data[j++];\r\n\r\n              switch (sqcd & 0x1f) {\r\n                case 0:\r\n                  spqcdSize = 8;\r\n                  scalarExpounded = true;\r\n                  break;\r\n\r\n                case 1:\r\n                  spqcdSize = 16;\r\n                  scalarExpounded = false;\r\n                  break;\r\n\r\n                case 2:\r\n                  spqcdSize = 16;\r\n                  scalarExpounded = true;\r\n                  break;\r\n\r\n                default:\r\n                  throw new Error(\"Invalid SQcd value \" + sqcd);\r\n              }\r\n\r\n              qcc.noQuantization = spqcdSize === 8;\r\n              qcc.scalarExpounded = scalarExpounded;\r\n              qcc.guardBits = sqcd >> 5;\r\n              spqcds = [];\r\n\r\n              while (j < length + position) {\r\n                spqcd = {};\r\n\r\n                if (spqcdSize === 8) {\r\n                  spqcd.epsilon = data[j++] >> 3;\r\n                  spqcd.mu = 0;\r\n                } else {\r\n                  spqcd.epsilon = data[j] >> 3;\r\n                  spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];\r\n                  j += 2;\r\n                }\r\n\r\n                spqcds.push(spqcd);\r\n              }\r\n\r\n              qcc.SPqcds = spqcds;\r\n\r\n              if (context.mainHeader) {\r\n                context.QCC[cqcc] = qcc;\r\n              } else {\r\n                context.currentTile.QCC[cqcc] = qcc;\r\n              }\r\n\r\n              break;\r\n\r\n            case 0xff52:\r\n              length = (0, _core_utils.readUint16)(data, position);\r\n              var cod = {};\r\n              j = position + 2;\r\n              var scod = data[j++];\r\n              cod.entropyCoderWithCustomPrecincts = !!(scod & 1);\r\n              cod.sopMarkerUsed = !!(scod & 2);\r\n              cod.ephMarkerUsed = !!(scod & 4);\r\n              cod.progressionOrder = data[j++];\r\n              cod.layersCount = (0, _core_utils.readUint16)(data, j);\r\n              j += 2;\r\n              cod.multipleComponentTransform = data[j++];\r\n              cod.decompositionLevelsCount = data[j++];\r\n              cod.xcb = (data[j++] & 0xf) + 2;\r\n              cod.ycb = (data[j++] & 0xf) + 2;\r\n              var blockStyle = data[j++];\r\n              cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);\r\n              cod.resetContextProbabilities = !!(blockStyle & 2);\r\n              cod.terminationOnEachCodingPass = !!(blockStyle & 4);\r\n              cod.verticallyStripe = !!(blockStyle & 8);\r\n              cod.predictableTermination = !!(blockStyle & 16);\r\n              cod.segmentationSymbolUsed = !!(blockStyle & 32);\r\n              cod.reversibleTransformation = data[j++];\r\n\r\n              if (cod.entropyCoderWithCustomPrecincts) {\r\n                var precinctsSizes = [];\r\n\r\n                while (j < length + position) {\r\n                  var precinctsSize = data[j++];\r\n                  precinctsSizes.push({\r\n                    PPx: precinctsSize & 0xf,\r\n                    PPy: precinctsSize >> 4\r\n                  });\r\n                }\r\n\r\n                cod.precinctsSizes = precinctsSizes;\r\n              }\r\n\r\n              var unsupported = [];\r\n\r\n              if (cod.selectiveArithmeticCodingBypass) {\r\n                unsupported.push(\"selectiveArithmeticCodingBypass\");\r\n              }\r\n\r\n              if (cod.resetContextProbabilities) {\r\n                unsupported.push(\"resetContextProbabilities\");\r\n              }\r\n\r\n              if (cod.terminationOnEachCodingPass) {\r\n                unsupported.push(\"terminationOnEachCodingPass\");\r\n              }\r\n\r\n              if (cod.verticallyStripe) {\r\n                unsupported.push(\"verticallyStripe\");\r\n              }\r\n\r\n              if (cod.predictableTermination) {\r\n                unsupported.push(\"predictableTermination\");\r\n              }\r\n\r\n              if (unsupported.length > 0) {\r\n                doNotRecover = true;\r\n                (0, _util.warn)(\"JPX: Unsupported COD options (\".concat(unsupported.join(\", \"), \").\"));\r\n              }\r\n\r\n              if (context.mainHeader) {\r\n                context.COD = cod;\r\n              } else {\r\n                context.currentTile.COD = cod;\r\n                context.currentTile.COC = [];\r\n              }\r\n\r\n              break;\r\n\r\n            case 0xff90:\r\n              length = (0, _core_utils.readUint16)(data, position);\r\n              tile = {};\r\n              tile.index = (0, _core_utils.readUint16)(data, position + 2);\r\n              tile.length = (0, _core_utils.readUint32)(data, position + 4);\r\n              tile.dataEnd = tile.length + position - 2;\r\n              tile.partIndex = data[position + 8];\r\n              tile.partsCount = data[position + 9];\r\n              context.mainHeader = false;\r\n\r\n              if (tile.partIndex === 0) {\r\n                tile.COD = context.COD;\r\n                tile.COC = context.COC.slice(0);\r\n                tile.QCD = context.QCD;\r\n                tile.QCC = context.QCC.slice(0);\r\n              }\r\n\r\n              context.currentTile = tile;\r\n              break;\r\n\r\n            case 0xff93:\r\n              tile = context.currentTile;\r\n\r\n              if (tile.partIndex === 0) {\r\n                initializeTile(context, tile.index);\r\n                buildPackets(context);\r\n              }\r\n\r\n              length = tile.dataEnd - position;\r\n              parseTilePackets(context, data, position, length);\r\n              break;\r\n\r\n            case 0xff53:\r\n              (0, _util.warn)(\"JPX: Codestream code 0xFF53 (COC) is not implemented.\");\r\n\r\n            case 0xff55:\r\n            case 0xff57:\r\n            case 0xff58:\r\n            case 0xff64:\r\n              length = (0, _core_utils.readUint16)(data, position);\r\n              break;\r\n\r\n            default:\r\n              throw new Error(\"Unknown codestream code: \" + code.toString(16));\r\n          }\r\n\r\n          position += length;\r\n        }\r\n      } catch (e) {\r\n        if (doNotRecover || this.failOnCorruptedImage) {\r\n          throw new JpxError(e.message);\r\n        } else {\r\n          (0, _util.warn)(\"JPX: Trying to recover from: \\\"\".concat(e.message, \"\\\".\"));\r\n        }\r\n      }\r\n\r\n      this.tiles = transformComponents(context);\r\n      this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;\r\n      this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;\r\n      this.componentsCount = context.SIZ.Csiz;\r\n    }\r\n  };\r\n\r\n  function calculateComponentDimensions(component, siz) {\r\n    component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);\r\n    component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);\r\n    component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);\r\n    component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);\r\n    component.width = component.x1 - component.x0;\r\n    component.height = component.y1 - component.y0;\r\n  }\r\n\r\n  function calculateTileGrids(context, components) {\r\n    var siz = context.SIZ;\r\n    var tile,\r\n        tiles = [];\r\n    var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);\r\n    var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);\r\n\r\n    for (var q = 0; q < numYtiles; q++) {\r\n      for (var p = 0; p < numXtiles; p++) {\r\n        tile = {};\r\n        tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);\r\n        tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);\r\n        tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);\r\n        tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);\r\n        tile.width = tile.tx1 - tile.tx0;\r\n        tile.height = tile.ty1 - tile.ty0;\r\n        tile.components = [];\r\n        tiles.push(tile);\r\n      }\r\n    }\r\n\r\n    context.tiles = tiles;\r\n    var componentsCount = siz.Csiz;\r\n\r\n    for (var i = 0, ii = componentsCount; i < ii; i++) {\r\n      var component = components[i];\r\n\r\n      for (var j = 0, jj = tiles.length; j < jj; j++) {\r\n        var tileComponent = {};\r\n        tile = tiles[j];\r\n        tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);\r\n        tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);\r\n        tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);\r\n        tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);\r\n        tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;\r\n        tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;\r\n        tile.components[i] = tileComponent;\r\n      }\r\n    }\r\n  }\r\n\r\n  function getBlocksDimensions(context, component, r) {\r\n    var codOrCoc = component.codingStyleParameters;\r\n    var result = {};\r\n\r\n    if (!codOrCoc.entropyCoderWithCustomPrecincts) {\r\n      result.PPx = 15;\r\n      result.PPy = 15;\r\n    } else {\r\n      result.PPx = codOrCoc.precinctsSizes[r].PPx;\r\n      result.PPy = codOrCoc.precinctsSizes[r].PPy;\r\n    }\r\n\r\n    result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx);\r\n    result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy);\r\n    return result;\r\n  }\r\n\r\n  function buildPrecincts(context, resolution, dimensions) {\r\n    var precinctWidth = 1 << dimensions.PPx;\r\n    var precinctHeight = 1 << dimensions.PPy;\r\n    var isZeroRes = resolution.resLevel === 0;\r\n    var precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1);\r\n    var precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1);\r\n    var numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0;\r\n    var numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0;\r\n    var numprecincts = numprecinctswide * numprecinctshigh;\r\n    resolution.precinctParameters = {\r\n      precinctWidth: precinctWidth,\r\n      precinctHeight: precinctHeight,\r\n      numprecinctswide: numprecinctswide,\r\n      numprecinctshigh: numprecinctshigh,\r\n      numprecincts: numprecincts,\r\n      precinctWidthInSubband: precinctWidthInSubband,\r\n      precinctHeightInSubband: precinctHeightInSubband\r\n    };\r\n  }\r\n\r\n  function buildCodeblocks(context, subband, dimensions) {\r\n    var xcb_ = dimensions.xcb_;\r\n    var ycb_ = dimensions.ycb_;\r\n    var codeblockWidth = 1 << xcb_;\r\n    var codeblockHeight = 1 << ycb_;\r\n    var cbx0 = subband.tbx0 >> xcb_;\r\n    var cby0 = subband.tby0 >> ycb_;\r\n    var cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_;\r\n    var cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_;\r\n    var precinctParameters = subband.resolution.precinctParameters;\r\n    var codeblocks = [];\r\n    var precincts = [];\r\n    var i, j, codeblock, precinctNumber;\r\n\r\n    for (j = cby0; j < cby1; j++) {\r\n      for (i = cbx0; i < cbx1; i++) {\r\n        codeblock = {\r\n          cbx: i,\r\n          cby: j,\r\n          tbx0: codeblockWidth * i,\r\n          tby0: codeblockHeight * j,\r\n          tbx1: codeblockWidth * (i + 1),\r\n          tby1: codeblockHeight * (j + 1)\r\n        };\r\n        codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);\r\n        codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);\r\n        codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);\r\n        codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);\r\n        var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband);\r\n        var pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband);\r\n        precinctNumber = pi + pj * precinctParameters.numprecinctswide;\r\n        codeblock.precinctNumber = precinctNumber;\r\n        codeblock.subbandType = subband.type;\r\n        codeblock.Lblock = 3;\r\n\r\n        if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) {\r\n          continue;\r\n        }\r\n\r\n        codeblocks.push(codeblock);\r\n        var precinct = precincts[precinctNumber];\r\n\r\n        if (precinct !== undefined) {\r\n          if (i < precinct.cbxMin) {\r\n            precinct.cbxMin = i;\r\n          } else if (i > precinct.cbxMax) {\r\n            precinct.cbxMax = i;\r\n          }\r\n\r\n          if (j < precinct.cbyMin) {\r\n            precinct.cbxMin = j;\r\n          } else if (j > precinct.cbyMax) {\r\n            precinct.cbyMax = j;\r\n          }\r\n        } else {\r\n          precincts[precinctNumber] = precinct = {\r\n            cbxMin: i,\r\n            cbyMin: j,\r\n            cbxMax: i,\r\n            cbyMax: j\r\n          };\r\n        }\r\n\r\n        codeblock.precinct = precinct;\r\n      }\r\n    }\r\n\r\n    subband.codeblockParameters = {\r\n      codeblockWidth: xcb_,\r\n      codeblockHeight: ycb_,\r\n      numcodeblockwide: cbx1 - cbx0 + 1,\r\n      numcodeblockhigh: cby1 - cby0 + 1\r\n    };\r\n    subband.codeblocks = codeblocks;\r\n    subband.precincts = precincts;\r\n  }\r\n\r\n  function createPacket(resolution, precinctNumber, layerNumber) {\r\n    var precinctCodeblocks = [];\r\n    var subbands = resolution.subbands;\r\n\r\n    for (var i = 0, ii = subbands.length; i < ii; i++) {\r\n      var subband = subbands[i];\r\n      var codeblocks = subband.codeblocks;\r\n\r\n      for (var j = 0, jj = codeblocks.length; j < jj; j++) {\r\n        var codeblock = codeblocks[j];\r\n\r\n        if (codeblock.precinctNumber !== precinctNumber) {\r\n          continue;\r\n        }\r\n\r\n        precinctCodeblocks.push(codeblock);\r\n      }\r\n    }\r\n\r\n    return {\r\n      layerNumber: layerNumber,\r\n      codeblocks: precinctCodeblocks\r\n    };\r\n  }\r\n\r\n  function LayerResolutionComponentPositionIterator(context) {\r\n    var siz = context.SIZ;\r\n    var tileIndex = context.currentTile.index;\r\n    var tile = context.tiles[tileIndex];\r\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\r\n    var componentsCount = siz.Csiz;\r\n    var maxDecompositionLevelsCount = 0;\r\n\r\n    for (var q = 0; q < componentsCount; q++) {\r\n      maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);\r\n    }\r\n\r\n    var l = 0,\r\n        r = 0,\r\n        i = 0,\r\n        k = 0;\r\n\r\n    this.nextPacket = function JpxImage_nextPacket() {\r\n      for (; l < layersCount; l++) {\r\n        for (; r <= maxDecompositionLevelsCount; r++) {\r\n          for (; i < componentsCount; i++) {\r\n            var component = tile.components[i];\r\n\r\n            if (r > component.codingStyleParameters.decompositionLevelsCount) {\r\n              continue;\r\n            }\r\n\r\n            var resolution = component.resolutions[r];\r\n            var numprecincts = resolution.precinctParameters.numprecincts;\r\n\r\n            for (; k < numprecincts;) {\r\n              var packet = createPacket(resolution, k, l);\r\n              k++;\r\n              return packet;\r\n            }\r\n\r\n            k = 0;\r\n          }\r\n\r\n          i = 0;\r\n        }\r\n\r\n        r = 0;\r\n      }\r\n\r\n      throw new JpxError(\"Out of packets\");\r\n    };\r\n  }\r\n\r\n  function ResolutionLayerComponentPositionIterator(context) {\r\n    var siz = context.SIZ;\r\n    var tileIndex = context.currentTile.index;\r\n    var tile = context.tiles[tileIndex];\r\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\r\n    var componentsCount = siz.Csiz;\r\n    var maxDecompositionLevelsCount = 0;\r\n\r\n    for (var q = 0; q < componentsCount; q++) {\r\n      maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);\r\n    }\r\n\r\n    var r = 0,\r\n        l = 0,\r\n        i = 0,\r\n        k = 0;\r\n\r\n    this.nextPacket = function JpxImage_nextPacket() {\r\n      for (; r <= maxDecompositionLevelsCount; r++) {\r\n        for (; l < layersCount; l++) {\r\n          for (; i < componentsCount; i++) {\r\n            var component = tile.components[i];\r\n\r\n            if (r > component.codingStyleParameters.decompositionLevelsCount) {\r\n              continue;\r\n            }\r\n\r\n            var resolution = component.resolutions[r];\r\n            var numprecincts = resolution.precinctParameters.numprecincts;\r\n\r\n            for (; k < numprecincts;) {\r\n              var packet = createPacket(resolution, k, l);\r\n              k++;\r\n              return packet;\r\n            }\r\n\r\n            k = 0;\r\n          }\r\n\r\n          i = 0;\r\n        }\r\n\r\n        l = 0;\r\n      }\r\n\r\n      throw new JpxError(\"Out of packets\");\r\n    };\r\n  }\r\n\r\n  function ResolutionPositionComponentLayerIterator(context) {\r\n    var siz = context.SIZ;\r\n    var tileIndex = context.currentTile.index;\r\n    var tile = context.tiles[tileIndex];\r\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\r\n    var componentsCount = siz.Csiz;\r\n    var l, r, c, p;\r\n    var maxDecompositionLevelsCount = 0;\r\n\r\n    for (c = 0; c < componentsCount; c++) {\r\n      var component = tile.components[c];\r\n      maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount);\r\n    }\r\n\r\n    var maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1);\r\n\r\n    for (r = 0; r <= maxDecompositionLevelsCount; ++r) {\r\n      var maxNumPrecincts = 0;\r\n\r\n      for (c = 0; c < componentsCount; ++c) {\r\n        var resolutions = tile.components[c].resolutions;\r\n\r\n        if (r < resolutions.length) {\r\n          maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts);\r\n        }\r\n      }\r\n\r\n      maxNumPrecinctsInLevel[r] = maxNumPrecincts;\r\n    }\r\n\r\n    l = 0;\r\n    r = 0;\r\n    c = 0;\r\n    p = 0;\r\n\r\n    this.nextPacket = function JpxImage_nextPacket() {\r\n      for (; r <= maxDecompositionLevelsCount; r++) {\r\n        for (; p < maxNumPrecinctsInLevel[r]; p++) {\r\n          for (; c < componentsCount; c++) {\r\n            var _component = tile.components[c];\r\n\r\n            if (r > _component.codingStyleParameters.decompositionLevelsCount) {\r\n              continue;\r\n            }\r\n\r\n            var resolution = _component.resolutions[r];\r\n            var numprecincts = resolution.precinctParameters.numprecincts;\r\n\r\n            if (p >= numprecincts) {\r\n              continue;\r\n            }\r\n\r\n            for (; l < layersCount;) {\r\n              var packet = createPacket(resolution, p, l);\r\n              l++;\r\n              return packet;\r\n            }\r\n\r\n            l = 0;\r\n          }\r\n\r\n          c = 0;\r\n        }\r\n\r\n        p = 0;\r\n      }\r\n\r\n      throw new JpxError(\"Out of packets\");\r\n    };\r\n  }\r\n\r\n  function PositionComponentResolutionLayerIterator(context) {\r\n    var siz = context.SIZ;\r\n    var tileIndex = context.currentTile.index;\r\n    var tile = context.tiles[tileIndex];\r\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\r\n    var componentsCount = siz.Csiz;\r\n    var precinctsSizes = getPrecinctSizesInImageScale(tile);\r\n    var precinctsIterationSizes = precinctsSizes;\r\n    var l = 0,\r\n        r = 0,\r\n        c = 0,\r\n        px = 0,\r\n        py = 0;\r\n\r\n    this.nextPacket = function JpxImage_nextPacket() {\r\n      for (; py < precinctsIterationSizes.maxNumHigh; py++) {\r\n        for (; px < precinctsIterationSizes.maxNumWide; px++) {\r\n          for (; c < componentsCount; c++) {\r\n            var component = tile.components[c];\r\n            var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;\r\n\r\n            for (; r <= decompositionLevelsCount; r++) {\r\n              var resolution = component.resolutions[r];\r\n              var sizeInImageScale = precinctsSizes.components[c].resolutions[r];\r\n              var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);\r\n\r\n              if (k === null) {\r\n                continue;\r\n              }\r\n\r\n              for (; l < layersCount;) {\r\n                var packet = createPacket(resolution, k, l);\r\n                l++;\r\n                return packet;\r\n              }\r\n\r\n              l = 0;\r\n            }\r\n\r\n            r = 0;\r\n          }\r\n\r\n          c = 0;\r\n        }\r\n\r\n        px = 0;\r\n      }\r\n\r\n      throw new JpxError(\"Out of packets\");\r\n    };\r\n  }\r\n\r\n  function ComponentPositionResolutionLayerIterator(context) {\r\n    var siz = context.SIZ;\r\n    var tileIndex = context.currentTile.index;\r\n    var tile = context.tiles[tileIndex];\r\n    var layersCount = tile.codingStyleDefaultParameters.layersCount;\r\n    var componentsCount = siz.Csiz;\r\n    var precinctsSizes = getPrecinctSizesInImageScale(tile);\r\n    var l = 0,\r\n        r = 0,\r\n        c = 0,\r\n        px = 0,\r\n        py = 0;\r\n\r\n    this.nextPacket = function JpxImage_nextPacket() {\r\n      for (; c < componentsCount; ++c) {\r\n        var component = tile.components[c];\r\n        var precinctsIterationSizes = precinctsSizes.components[c];\r\n        var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;\r\n\r\n        for (; py < precinctsIterationSizes.maxNumHigh; py++) {\r\n          for (; px < precinctsIterationSizes.maxNumWide; px++) {\r\n            for (; r <= decompositionLevelsCount; r++) {\r\n              var resolution = component.resolutions[r];\r\n              var sizeInImageScale = precinctsIterationSizes.resolutions[r];\r\n              var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);\r\n\r\n              if (k === null) {\r\n                continue;\r\n              }\r\n\r\n              for (; l < layersCount;) {\r\n                var packet = createPacket(resolution, k, l);\r\n                l++;\r\n                return packet;\r\n              }\r\n\r\n              l = 0;\r\n            }\r\n\r\n            r = 0;\r\n          }\r\n\r\n          px = 0;\r\n        }\r\n\r\n        py = 0;\r\n      }\r\n\r\n      throw new JpxError(\"Out of packets\");\r\n    };\r\n  }\r\n\r\n  function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) {\r\n    var posX = pxIndex * precinctIterationSizes.minWidth;\r\n    var posY = pyIndex * precinctIterationSizes.minHeight;\r\n\r\n    if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) {\r\n      return null;\r\n    }\r\n\r\n    var startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide;\r\n    return posX / sizeInImageScale.height + startPrecinctRowIndex;\r\n  }\r\n\r\n  function getPrecinctSizesInImageScale(tile) {\r\n    var componentsCount = tile.components.length;\r\n    var minWidth = Number.MAX_VALUE;\r\n    var minHeight = Number.MAX_VALUE;\r\n    var maxNumWide = 0;\r\n    var maxNumHigh = 0;\r\n    var sizePerComponent = new Array(componentsCount);\r\n\r\n    for (var c = 0; c < componentsCount; c++) {\r\n      var component = tile.components[c];\r\n      var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;\r\n      var sizePerResolution = new Array(decompositionLevelsCount + 1);\r\n      var minWidthCurrentComponent = Number.MAX_VALUE;\r\n      var minHeightCurrentComponent = Number.MAX_VALUE;\r\n      var maxNumWideCurrentComponent = 0;\r\n      var maxNumHighCurrentComponent = 0;\r\n      var scale = 1;\r\n\r\n      for (var r = decompositionLevelsCount; r >= 0; --r) {\r\n        var resolution = component.resolutions[r];\r\n        var widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth;\r\n        var heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight;\r\n        minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution);\r\n        minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution);\r\n        maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide);\r\n        maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh);\r\n        sizePerResolution[r] = {\r\n          width: widthCurrentResolution,\r\n          height: heightCurrentResolution\r\n        };\r\n        scale <<= 1;\r\n      }\r\n\r\n      minWidth = Math.min(minWidth, minWidthCurrentComponent);\r\n      minHeight = Math.min(minHeight, minHeightCurrentComponent);\r\n      maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);\r\n      maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);\r\n      sizePerComponent[c] = {\r\n        resolutions: sizePerResolution,\r\n        minWidth: minWidthCurrentComponent,\r\n        minHeight: minHeightCurrentComponent,\r\n        maxNumWide: maxNumWideCurrentComponent,\r\n        maxNumHigh: maxNumHighCurrentComponent\r\n      };\r\n    }\r\n\r\n    return {\r\n      components: sizePerComponent,\r\n      minWidth: minWidth,\r\n      minHeight: minHeight,\r\n      maxNumWide: maxNumWide,\r\n      maxNumHigh: maxNumHigh\r\n    };\r\n  }\r\n\r\n  function buildPackets(context) {\r\n    var siz = context.SIZ;\r\n    var tileIndex = context.currentTile.index;\r\n    var tile = context.tiles[tileIndex];\r\n    var componentsCount = siz.Csiz;\r\n\r\n    for (var c = 0; c < componentsCount; c++) {\r\n      var component = tile.components[c];\r\n      var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;\r\n      var resolutions = [];\r\n      var subbands = [];\r\n\r\n      for (var r = 0; r <= decompositionLevelsCount; r++) {\r\n        var blocksDimensions = getBlocksDimensions(context, component, r);\r\n        var resolution = {};\r\n        var scale = 1 << decompositionLevelsCount - r;\r\n        resolution.trx0 = Math.ceil(component.tcx0 / scale);\r\n        resolution.try0 = Math.ceil(component.tcy0 / scale);\r\n        resolution.trx1 = Math.ceil(component.tcx1 / scale);\r\n        resolution.try1 = Math.ceil(component.tcy1 / scale);\r\n        resolution.resLevel = r;\r\n        buildPrecincts(context, resolution, blocksDimensions);\r\n        resolutions.push(resolution);\r\n        var subband;\r\n\r\n        if (r === 0) {\r\n          subband = {};\r\n          subband.type = \"LL\";\r\n          subband.tbx0 = Math.ceil(component.tcx0 / scale);\r\n          subband.tby0 = Math.ceil(component.tcy0 / scale);\r\n          subband.tbx1 = Math.ceil(component.tcx1 / scale);\r\n          subband.tby1 = Math.ceil(component.tcy1 / scale);\r\n          subband.resolution = resolution;\r\n          buildCodeblocks(context, subband, blocksDimensions);\r\n          subbands.push(subband);\r\n          resolution.subbands = [subband];\r\n        } else {\r\n          var bscale = 1 << decompositionLevelsCount - r + 1;\r\n          var resolutionSubbands = [];\r\n          subband = {};\r\n          subband.type = \"HL\";\r\n          subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);\r\n          subband.tby0 = Math.ceil(component.tcy0 / bscale);\r\n          subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);\r\n          subband.tby1 = Math.ceil(component.tcy1 / bscale);\r\n          subband.resolution = resolution;\r\n          buildCodeblocks(context, subband, blocksDimensions);\r\n          subbands.push(subband);\r\n          resolutionSubbands.push(subband);\r\n          subband = {};\r\n          subband.type = \"LH\";\r\n          subband.tbx0 = Math.ceil(component.tcx0 / bscale);\r\n          subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);\r\n          subband.tbx1 = Math.ceil(component.tcx1 / bscale);\r\n          subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);\r\n          subband.resolution = resolution;\r\n          buildCodeblocks(context, subband, blocksDimensions);\r\n          subbands.push(subband);\r\n          resolutionSubbands.push(subband);\r\n          subband = {};\r\n          subband.type = \"HH\";\r\n          subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);\r\n          subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);\r\n          subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);\r\n          subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);\r\n          subband.resolution = resolution;\r\n          buildCodeblocks(context, subband, blocksDimensions);\r\n          subbands.push(subband);\r\n          resolutionSubbands.push(subband);\r\n          resolution.subbands = resolutionSubbands;\r\n        }\r\n      }\r\n\r\n      component.resolutions = resolutions;\r\n      component.subbands = subbands;\r\n    }\r\n\r\n    var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;\r\n\r\n    switch (progressionOrder) {\r\n      case 0:\r\n        tile.packetsIterator = new LayerResolutionComponentPositionIterator(context);\r\n        break;\r\n\r\n      case 1:\r\n        tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context);\r\n        break;\r\n\r\n      case 2:\r\n        tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context);\r\n        break;\r\n\r\n      case 3:\r\n        tile.packetsIterator = new PositionComponentResolutionLayerIterator(context);\r\n        break;\r\n\r\n      case 4:\r\n        tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context);\r\n        break;\r\n\r\n      default:\r\n        throw new JpxError(\"Unsupported progression order \".concat(progressionOrder));\r\n    }\r\n  }\r\n\r\n  function parseTilePackets(context, data, offset, dataLength) {\r\n    var position = 0;\r\n    var buffer,\r\n        bufferSize = 0,\r\n        skipNextBit = false;\r\n\r\n    function readBits(count) {\r\n      while (bufferSize < count) {\r\n        var b = data[offset + position];\r\n        position++;\r\n\r\n        if (skipNextBit) {\r\n          buffer = buffer << 7 | b;\r\n          bufferSize += 7;\r\n          skipNextBit = false;\r\n        } else {\r\n          buffer = buffer << 8 | b;\r\n          bufferSize += 8;\r\n        }\r\n\r\n        if (b === 0xff) {\r\n          skipNextBit = true;\r\n        }\r\n      }\r\n\r\n      bufferSize -= count;\r\n      return buffer >>> bufferSize & (1 << count) - 1;\r\n    }\r\n\r\n    function skipMarkerIfEqual(value) {\r\n      if (data[offset + position - 1] === 0xff && data[offset + position] === value) {\r\n        skipBytes(1);\r\n        return true;\r\n      } else if (data[offset + position] === 0xff && data[offset + position + 1] === value) {\r\n        skipBytes(2);\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    }\r\n\r\n    function skipBytes(count) {\r\n      position += count;\r\n    }\r\n\r\n    function alignToByte() {\r\n      bufferSize = 0;\r\n\r\n      if (skipNextBit) {\r\n        position++;\r\n        skipNextBit = false;\r\n      }\r\n    }\r\n\r\n    function readCodingpasses() {\r\n      if (readBits(1) === 0) {\r\n        return 1;\r\n      }\r\n\r\n      if (readBits(1) === 0) {\r\n        return 2;\r\n      }\r\n\r\n      var value = readBits(2);\r\n\r\n      if (value < 3) {\r\n        return value + 3;\r\n      }\r\n\r\n      value = readBits(5);\r\n\r\n      if (value < 31) {\r\n        return value + 6;\r\n      }\r\n\r\n      value = readBits(7);\r\n      return value + 37;\r\n    }\r\n\r\n    var tileIndex = context.currentTile.index;\r\n    var tile = context.tiles[tileIndex];\r\n    var sopMarkerUsed = context.COD.sopMarkerUsed;\r\n    var ephMarkerUsed = context.COD.ephMarkerUsed;\r\n    var packetsIterator = tile.packetsIterator;\r\n\r\n    while (position < dataLength) {\r\n      alignToByte();\r\n\r\n      if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {\r\n        skipBytes(4);\r\n      }\r\n\r\n      var packet = packetsIterator.nextPacket();\r\n\r\n      if (!readBits(1)) {\r\n        continue;\r\n      }\r\n\r\n      var layerNumber = packet.layerNumber;\r\n      var queue = [],\r\n          codeblock;\r\n\r\n      for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) {\r\n        codeblock = packet.codeblocks[i];\r\n        var precinct = codeblock.precinct;\r\n        var codeblockColumn = codeblock.cbx - precinct.cbxMin;\r\n        var codeblockRow = codeblock.cby - precinct.cbyMin;\r\n        var codeblockIncluded = false;\r\n        var firstTimeInclusion = false;\r\n        var valueReady;\r\n\r\n        if (codeblock.included !== undefined) {\r\n          codeblockIncluded = !!readBits(1);\r\n        } else {\r\n          precinct = codeblock.precinct;\r\n          var inclusionTree, zeroBitPlanesTree;\r\n\r\n          if (precinct.inclusionTree !== undefined) {\r\n            inclusionTree = precinct.inclusionTree;\r\n          } else {\r\n            var width = precinct.cbxMax - precinct.cbxMin + 1;\r\n            var height = precinct.cbyMax - precinct.cbyMin + 1;\r\n            inclusionTree = new InclusionTree(width, height, layerNumber);\r\n            zeroBitPlanesTree = new TagTree(width, height);\r\n            precinct.inclusionTree = inclusionTree;\r\n            precinct.zeroBitPlanesTree = zeroBitPlanesTree;\r\n          }\r\n\r\n          if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) {\r\n            while (true) {\r\n              if (readBits(1)) {\r\n                valueReady = !inclusionTree.nextLevel();\r\n\r\n                if (valueReady) {\r\n                  codeblock.included = true;\r\n                  codeblockIncluded = firstTimeInclusion = true;\r\n                  break;\r\n                }\r\n              } else {\r\n                inclusionTree.incrementValue(layerNumber);\r\n                break;\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        if (!codeblockIncluded) {\r\n          continue;\r\n        }\r\n\r\n        if (firstTimeInclusion) {\r\n          zeroBitPlanesTree = precinct.zeroBitPlanesTree;\r\n          zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);\r\n\r\n          while (true) {\r\n            if (readBits(1)) {\r\n              valueReady = !zeroBitPlanesTree.nextLevel();\r\n\r\n              if (valueReady) {\r\n                break;\r\n              }\r\n            } else {\r\n              zeroBitPlanesTree.incrementValue();\r\n            }\r\n          }\r\n\r\n          codeblock.zeroBitPlanes = zeroBitPlanesTree.value;\r\n        }\r\n\r\n        var codingpasses = readCodingpasses();\r\n\r\n        while (readBits(1)) {\r\n          codeblock.Lblock++;\r\n        }\r\n\r\n        var codingpassesLog2 = (0, _core_utils.log2)(codingpasses);\r\n        var bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock;\r\n        var codedDataLength = readBits(bits);\r\n        queue.push({\r\n          codeblock: codeblock,\r\n          codingpasses: codingpasses,\r\n          dataLength: codedDataLength\r\n        });\r\n      }\r\n\r\n      alignToByte();\r\n\r\n      if (ephMarkerUsed) {\r\n        skipMarkerIfEqual(0x92);\r\n      }\r\n\r\n      while (queue.length > 0) {\r\n        var packetItem = queue.shift();\r\n        codeblock = packetItem.codeblock;\r\n\r\n        if (codeblock.data === undefined) {\r\n          codeblock.data = [];\r\n        }\r\n\r\n        codeblock.data.push({\r\n          data: data,\r\n          start: offset + position,\r\n          end: offset + position + packetItem.dataLength,\r\n          codingpasses: packetItem.codingpasses\r\n        });\r\n        position += packetItem.dataLength;\r\n      }\r\n    }\r\n\r\n    return position;\r\n  }\r\n\r\n  function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) {\r\n    var x0 = subband.tbx0;\r\n    var y0 = subband.tby0;\r\n    var width = subband.tbx1 - subband.tbx0;\r\n    var codeblocks = subband.codeblocks;\r\n    var right = subband.type.charAt(0) === \"H\" ? 1 : 0;\r\n    var bottom = subband.type.charAt(1) === \"H\" ? levelWidth : 0;\r\n\r\n    for (var i = 0, ii = codeblocks.length; i < ii; ++i) {\r\n      var codeblock = codeblocks[i];\r\n      var blockWidth = codeblock.tbx1_ - codeblock.tbx0_;\r\n      var blockHeight = codeblock.tby1_ - codeblock.tby0_;\r\n\r\n      if (blockWidth === 0 || blockHeight === 0) {\r\n        continue;\r\n      }\r\n\r\n      if (codeblock.data === undefined) {\r\n        continue;\r\n      }\r\n\r\n      var bitModel, currentCodingpassType;\r\n      bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb);\r\n      currentCodingpassType = 2;\r\n      var data = codeblock.data,\r\n          totalLength = 0,\r\n          codingpasses = 0;\r\n      var j, jj, dataItem;\r\n\r\n      for (j = 0, jj = data.length; j < jj; j++) {\r\n        dataItem = data[j];\r\n        totalLength += dataItem.end - dataItem.start;\r\n        codingpasses += dataItem.codingpasses;\r\n      }\r\n\r\n      var encodedData = new Uint8Array(totalLength);\r\n      var position = 0;\r\n\r\n      for (j = 0, jj = data.length; j < jj; j++) {\r\n        dataItem = data[j];\r\n        var chunk = dataItem.data.subarray(dataItem.start, dataItem.end);\r\n        encodedData.set(chunk, position);\r\n        position += chunk.length;\r\n      }\r\n\r\n      var decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength);\r\n      bitModel.setDecoder(decoder);\r\n\r\n      for (j = 0; j < codingpasses; j++) {\r\n        switch (currentCodingpassType) {\r\n          case 0:\r\n            bitModel.runSignificancePropagationPass();\r\n            break;\r\n\r\n          case 1:\r\n            bitModel.runMagnitudeRefinementPass();\r\n            break;\r\n\r\n          case 2:\r\n            bitModel.runCleanupPass();\r\n\r\n            if (segmentationSymbolUsed) {\r\n              bitModel.checkSegmentationSymbol();\r\n            }\r\n\r\n            break;\r\n        }\r\n\r\n        currentCodingpassType = (currentCodingpassType + 1) % 3;\r\n      }\r\n\r\n      var offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width;\r\n      var sign = bitModel.coefficentsSign;\r\n      var magnitude = bitModel.coefficentsMagnitude;\r\n      var bitsDecoded = bitModel.bitsDecoded;\r\n      var magnitudeCorrection = reversible ? 0 : 0.5;\r\n      var k, n, nb;\r\n      position = 0;\r\n      var interleave = subband.type !== \"LL\";\r\n\r\n      for (j = 0; j < blockHeight; j++) {\r\n        var row = offset / width | 0;\r\n        var levelOffset = 2 * row * (levelWidth - width) + right + bottom;\r\n\r\n        for (k = 0; k < blockWidth; k++) {\r\n          n = magnitude[position];\r\n\r\n          if (n !== 0) {\r\n            n = (n + magnitudeCorrection) * delta;\r\n\r\n            if (sign[position] !== 0) {\r\n              n = -n;\r\n            }\r\n\r\n            nb = bitsDecoded[position];\r\n            var pos = interleave ? levelOffset + (offset << 1) : offset;\r\n\r\n            if (reversible && nb >= mb) {\r\n              coefficients[pos] = n;\r\n            } else {\r\n              coefficients[pos] = n * (1 << mb - nb);\r\n            }\r\n          }\r\n\r\n          offset++;\r\n          position++;\r\n        }\r\n\r\n        offset += width - blockWidth;\r\n      }\r\n    }\r\n  }\r\n\r\n  function transformTile(context, tile, c) {\r\n    var component = tile.components[c];\r\n    var codingStyleParameters = component.codingStyleParameters;\r\n    var quantizationParameters = component.quantizationParameters;\r\n    var decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount;\r\n    var spqcds = quantizationParameters.SPqcds;\r\n    var scalarExpounded = quantizationParameters.scalarExpounded;\r\n    var guardBits = quantizationParameters.guardBits;\r\n    var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;\r\n    var precision = context.components[c].precision;\r\n    var reversible = codingStyleParameters.reversibleTransformation;\r\n    var transform = reversible ? new ReversibleTransform() : new IrreversibleTransform();\r\n    var subbandCoefficients = [];\r\n    var b = 0;\r\n\r\n    for (var i = 0; i <= decompositionLevelsCount; i++) {\r\n      var resolution = component.resolutions[i];\r\n      var width = resolution.trx1 - resolution.trx0;\r\n      var height = resolution.try1 - resolution.try0;\r\n      var coefficients = new Float32Array(width * height);\r\n\r\n      for (var j = 0, jj = resolution.subbands.length; j < jj; j++) {\r\n        var mu, epsilon;\r\n\r\n        if (!scalarExpounded) {\r\n          mu = spqcds[0].mu;\r\n          epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);\r\n        } else {\r\n          mu = spqcds[b].mu;\r\n          epsilon = spqcds[b].epsilon;\r\n          b++;\r\n        }\r\n\r\n        var subband = resolution.subbands[j];\r\n        var gainLog2 = SubbandsGainLog2[subband.type];\r\n        var delta = reversible ? 1 : Math.pow(2, precision + gainLog2 - epsilon) * (1 + mu / 2048);\r\n        var mb = guardBits + epsilon - 1;\r\n        copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed);\r\n      }\r\n\r\n      subbandCoefficients.push({\r\n        width: width,\r\n        height: height,\r\n        items: coefficients\r\n      });\r\n    }\r\n\r\n    var result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0);\r\n    return {\r\n      left: component.tcx0,\r\n      top: component.tcy0,\r\n      width: result.width,\r\n      height: result.height,\r\n      items: result.items\r\n    };\r\n  }\r\n\r\n  function transformComponents(context) {\r\n    var siz = context.SIZ;\r\n    var components = context.components;\r\n    var componentsCount = siz.Csiz;\r\n    var resultImages = [];\r\n\r\n    for (var i = 0, ii = context.tiles.length; i < ii; i++) {\r\n      var tile = context.tiles[i];\r\n      var transformedTiles = [];\r\n      var c;\r\n\r\n      for (c = 0; c < componentsCount; c++) {\r\n        transformedTiles[c] = transformTile(context, tile, c);\r\n      }\r\n\r\n      var tile0 = transformedTiles[0];\r\n      var out = new Uint8ClampedArray(tile0.items.length * componentsCount);\r\n      var result = {\r\n        left: tile0.left,\r\n        top: tile0.top,\r\n        width: tile0.width,\r\n        height: tile0.height,\r\n        items: out\r\n      };\r\n      var shift, offset;\r\n      var pos = 0,\r\n          j,\r\n          jj,\r\n          y0,\r\n          y1,\r\n          y2;\r\n\r\n      if (tile.codingStyleDefaultParameters.multipleComponentTransform) {\r\n        var fourComponents = componentsCount === 4;\r\n        var y0items = transformedTiles[0].items;\r\n        var y1items = transformedTiles[1].items;\r\n        var y2items = transformedTiles[2].items;\r\n        var y3items = fourComponents ? transformedTiles[3].items : null;\r\n        shift = components[0].precision - 8;\r\n        offset = (128 << shift) + 0.5;\r\n        var component0 = tile.components[0];\r\n        var alpha01 = componentsCount - 3;\r\n        jj = y0items.length;\r\n\r\n        if (!component0.codingStyleParameters.reversibleTransformation) {\r\n          for (j = 0; j < jj; j++, pos += alpha01) {\r\n            y0 = y0items[j] + offset;\r\n            y1 = y1items[j];\r\n            y2 = y2items[j];\r\n            out[pos++] = y0 + 1.402 * y2 >> shift;\r\n            out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift;\r\n            out[pos++] = y0 + 1.772 * y1 >> shift;\r\n          }\r\n        } else {\r\n          for (j = 0; j < jj; j++, pos += alpha01) {\r\n            y0 = y0items[j] + offset;\r\n            y1 = y1items[j];\r\n            y2 = y2items[j];\r\n            var g = y0 - (y2 + y1 >> 2);\r\n            out[pos++] = g + y2 >> shift;\r\n            out[pos++] = g >> shift;\r\n            out[pos++] = g + y1 >> shift;\r\n          }\r\n        }\r\n\r\n        if (fourComponents) {\r\n          for (j = 0, pos = 3; j < jj; j++, pos += 4) {\r\n            out[pos] = y3items[j] + offset >> shift;\r\n          }\r\n        }\r\n      } else {\r\n        for (c = 0; c < componentsCount; c++) {\r\n          var items = transformedTiles[c].items;\r\n          shift = components[c].precision - 8;\r\n          offset = (128 << shift) + 0.5;\r\n\r\n          for (pos = c, j = 0, jj = items.length; j < jj; j++) {\r\n            out[pos] = items[j] + offset >> shift;\r\n            pos += componentsCount;\r\n          }\r\n        }\r\n      }\r\n\r\n      resultImages.push(result);\r\n    }\r\n\r\n    return resultImages;\r\n  }\r\n\r\n  function initializeTile(context, tileIndex) {\r\n    var siz = context.SIZ;\r\n    var componentsCount = siz.Csiz;\r\n    var tile = context.tiles[tileIndex];\r\n\r\n    for (var c = 0; c < componentsCount; c++) {\r\n      var component = tile.components[c];\r\n      var qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD;\r\n      component.quantizationParameters = qcdOrQcc;\r\n      var codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD;\r\n      component.codingStyleParameters = codOrCoc;\r\n    }\r\n\r\n    tile.codingStyleDefaultParameters = context.currentTile.COD;\r\n  }\r\n\r\n  var TagTree = function TagTreeClosure() {\r\n    function TagTree(width, height) {\r\n      var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;\r\n      this.levels = [];\r\n\r\n      for (var i = 0; i < levelsLength; i++) {\r\n        var level = {\r\n          width: width,\r\n          height: height,\r\n          items: []\r\n        };\r\n        this.levels.push(level);\r\n        width = Math.ceil(width / 2);\r\n        height = Math.ceil(height / 2);\r\n      }\r\n    }\r\n\r\n    TagTree.prototype = {\r\n      reset: function TagTree_reset(i, j) {\r\n        var currentLevel = 0,\r\n            value = 0,\r\n            level;\r\n\r\n        while (currentLevel < this.levels.length) {\r\n          level = this.levels[currentLevel];\r\n          var index = i + j * level.width;\r\n\r\n          if (level.items[index] !== undefined) {\r\n            value = level.items[index];\r\n            break;\r\n          }\r\n\r\n          level.index = index;\r\n          i >>= 1;\r\n          j >>= 1;\r\n          currentLevel++;\r\n        }\r\n\r\n        currentLevel--;\r\n        level = this.levels[currentLevel];\r\n        level.items[level.index] = value;\r\n        this.currentLevel = currentLevel;\r\n        delete this.value;\r\n      },\r\n      incrementValue: function TagTree_incrementValue() {\r\n        var level = this.levels[this.currentLevel];\r\n        level.items[level.index]++;\r\n      },\r\n      nextLevel: function TagTree_nextLevel() {\r\n        var currentLevel = this.currentLevel;\r\n        var level = this.levels[currentLevel];\r\n        var value = level.items[level.index];\r\n        currentLevel--;\r\n\r\n        if (currentLevel < 0) {\r\n          this.value = value;\r\n          return false;\r\n        }\r\n\r\n        this.currentLevel = currentLevel;\r\n        level = this.levels[currentLevel];\r\n        level.items[level.index] = value;\r\n        return true;\r\n      }\r\n    };\r\n    return TagTree;\r\n  }();\r\n\r\n  var InclusionTree = function InclusionTreeClosure() {\r\n    function InclusionTree(width, height, defaultValue) {\r\n      var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;\r\n      this.levels = [];\r\n\r\n      for (var i = 0; i < levelsLength; i++) {\r\n        var items = new Uint8Array(width * height);\r\n\r\n        for (var j = 0, jj = items.length; j < jj; j++) {\r\n          items[j] = defaultValue;\r\n        }\r\n\r\n        var level = {\r\n          width: width,\r\n          height: height,\r\n          items: items\r\n        };\r\n        this.levels.push(level);\r\n        width = Math.ceil(width / 2);\r\n        height = Math.ceil(height / 2);\r\n      }\r\n    }\r\n\r\n    InclusionTree.prototype = {\r\n      reset: function InclusionTree_reset(i, j, stopValue) {\r\n        var currentLevel = 0;\r\n\r\n        while (currentLevel < this.levels.length) {\r\n          var level = this.levels[currentLevel];\r\n          var index = i + j * level.width;\r\n          level.index = index;\r\n          var value = level.items[index];\r\n\r\n          if (value === 0xff) {\r\n            break;\r\n          }\r\n\r\n          if (value > stopValue) {\r\n            this.currentLevel = currentLevel;\r\n            this.propagateValues();\r\n            return false;\r\n          }\r\n\r\n          i >>= 1;\r\n          j >>= 1;\r\n          currentLevel++;\r\n        }\r\n\r\n        this.currentLevel = currentLevel - 1;\r\n        return true;\r\n      },\r\n      incrementValue: function InclusionTree_incrementValue(stopValue) {\r\n        var level = this.levels[this.currentLevel];\r\n        level.items[level.index] = stopValue + 1;\r\n        this.propagateValues();\r\n      },\r\n      propagateValues: function InclusionTree_propagateValues() {\r\n        var levelIndex = this.currentLevel;\r\n        var level = this.levels[levelIndex];\r\n        var currentValue = level.items[level.index];\r\n\r\n        while (--levelIndex >= 0) {\r\n          level = this.levels[levelIndex];\r\n          level.items[level.index] = currentValue;\r\n        }\r\n      },\r\n      nextLevel: function InclusionTree_nextLevel() {\r\n        var currentLevel = this.currentLevel;\r\n        var level = this.levels[currentLevel];\r\n        var value = level.items[level.index];\r\n        level.items[level.index] = 0xff;\r\n        currentLevel--;\r\n\r\n        if (currentLevel < 0) {\r\n          return false;\r\n        }\r\n\r\n        this.currentLevel = currentLevel;\r\n        level = this.levels[currentLevel];\r\n        level.items[level.index] = value;\r\n        return true;\r\n      }\r\n    };\r\n    return InclusionTree;\r\n  }();\r\n\r\n  var BitModel = function BitModelClosure() {\r\n    var UNIFORM_CONTEXT = 17;\r\n    var RUNLENGTH_CONTEXT = 18;\r\n    var LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]);\r\n    var HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]);\r\n    var HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]);\r\n\r\n    function BitModel(width, height, subband, zeroBitPlanes, mb) {\r\n      this.width = width;\r\n      this.height = height;\r\n      var contextLabelTable;\r\n\r\n      if (subband === \"HH\") {\r\n        contextLabelTable = HHContextLabel;\r\n      } else if (subband === \"HL\") {\r\n        contextLabelTable = HLContextLabel;\r\n      } else {\r\n        contextLabelTable = LLAndLHContextsLabel;\r\n      }\r\n\r\n      this.contextLabelTable = contextLabelTable;\r\n      var coefficientCount = width * height;\r\n      this.neighborsSignificance = new Uint8Array(coefficientCount);\r\n      this.coefficentsSign = new Uint8Array(coefficientCount);\r\n      var coefficentsMagnitude;\r\n\r\n      if (mb > 14) {\r\n        coefficentsMagnitude = new Uint32Array(coefficientCount);\r\n      } else if (mb > 6) {\r\n        coefficentsMagnitude = new Uint16Array(coefficientCount);\r\n      } else {\r\n        coefficentsMagnitude = new Uint8Array(coefficientCount);\r\n      }\r\n\r\n      this.coefficentsMagnitude = coefficentsMagnitude;\r\n      this.processingFlags = new Uint8Array(coefficientCount);\r\n      var bitsDecoded = new Uint8Array(coefficientCount);\r\n\r\n      if (zeroBitPlanes !== 0) {\r\n        for (var i = 0; i < coefficientCount; i++) {\r\n          bitsDecoded[i] = zeroBitPlanes;\r\n        }\r\n      }\r\n\r\n      this.bitsDecoded = bitsDecoded;\r\n      this.reset();\r\n    }\r\n\r\n    BitModel.prototype = {\r\n      setDecoder: function BitModel_setDecoder(decoder) {\r\n        this.decoder = decoder;\r\n      },\r\n      reset: function BitModel_reset() {\r\n        this.contexts = new Int8Array(19);\r\n        this.contexts[0] = 4 << 1 | 0;\r\n        this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0;\r\n        this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0;\r\n      },\r\n      setNeighborsSignificance: function BitModel_setNeighborsSignificance(row, column, index) {\r\n        var neighborsSignificance = this.neighborsSignificance;\r\n        var width = this.width,\r\n            height = this.height;\r\n        var left = column > 0;\r\n        var right = column + 1 < width;\r\n        var i;\r\n\r\n        if (row > 0) {\r\n          i = index - width;\r\n\r\n          if (left) {\r\n            neighborsSignificance[i - 1] += 0x10;\r\n          }\r\n\r\n          if (right) {\r\n            neighborsSignificance[i + 1] += 0x10;\r\n          }\r\n\r\n          neighborsSignificance[i] += 0x04;\r\n        }\r\n\r\n        if (row + 1 < height) {\r\n          i = index + width;\r\n\r\n          if (left) {\r\n            neighborsSignificance[i - 1] += 0x10;\r\n          }\r\n\r\n          if (right) {\r\n            neighborsSignificance[i + 1] += 0x10;\r\n          }\r\n\r\n          neighborsSignificance[i] += 0x04;\r\n        }\r\n\r\n        if (left) {\r\n          neighborsSignificance[index - 1] += 0x01;\r\n        }\r\n\r\n        if (right) {\r\n          neighborsSignificance[index + 1] += 0x01;\r\n        }\r\n\r\n        neighborsSignificance[index] |= 0x80;\r\n      },\r\n      runSignificancePropagationPass: function BitModel_runSignificancePropagationPass() {\r\n        var decoder = this.decoder;\r\n        var width = this.width,\r\n            height = this.height;\r\n        var coefficentsMagnitude = this.coefficentsMagnitude;\r\n        var coefficentsSign = this.coefficentsSign;\r\n        var neighborsSignificance = this.neighborsSignificance;\r\n        var processingFlags = this.processingFlags;\r\n        var contexts = this.contexts;\r\n        var labels = this.contextLabelTable;\r\n        var bitsDecoded = this.bitsDecoded;\r\n        var processedInverseMask = ~1;\r\n        var processedMask = 1;\r\n        var firstMagnitudeBitMask = 2;\r\n\r\n        for (var i0 = 0; i0 < height; i0 += 4) {\r\n          for (var j = 0; j < width; j++) {\r\n            var index = i0 * width + j;\r\n\r\n            for (var i1 = 0; i1 < 4; i1++, index += width) {\r\n              var i = i0 + i1;\r\n\r\n              if (i >= height) {\r\n                break;\r\n              }\r\n\r\n              processingFlags[index] &= processedInverseMask;\r\n\r\n              if (coefficentsMagnitude[index] || !neighborsSignificance[index]) {\r\n                continue;\r\n              }\r\n\r\n              var contextLabel = labels[neighborsSignificance[index]];\r\n              var decision = decoder.readBit(contexts, contextLabel);\r\n\r\n              if (decision) {\r\n                var sign = this.decodeSignBit(i, j, index);\r\n                coefficentsSign[index] = sign;\r\n                coefficentsMagnitude[index] = 1;\r\n                this.setNeighborsSignificance(i, j, index);\r\n                processingFlags[index] |= firstMagnitudeBitMask;\r\n              }\r\n\r\n              bitsDecoded[index]++;\r\n              processingFlags[index] |= processedMask;\r\n            }\r\n          }\r\n        }\r\n      },\r\n      decodeSignBit: function BitModel_decodeSignBit(row, column, index) {\r\n        var width = this.width,\r\n            height = this.height;\r\n        var coefficentsMagnitude = this.coefficentsMagnitude;\r\n        var coefficentsSign = this.coefficentsSign;\r\n        var contribution, sign0, sign1, significance1;\r\n        var contextLabel, decoded;\r\n        significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0;\r\n\r\n        if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {\r\n          sign1 = coefficentsSign[index + 1];\r\n\r\n          if (significance1) {\r\n            sign0 = coefficentsSign[index - 1];\r\n            contribution = 1 - sign1 - sign0;\r\n          } else {\r\n            contribution = 1 - sign1 - sign1;\r\n          }\r\n        } else if (significance1) {\r\n          sign0 = coefficentsSign[index - 1];\r\n          contribution = 1 - sign0 - sign0;\r\n        } else {\r\n          contribution = 0;\r\n        }\r\n\r\n        var horizontalContribution = 3 * contribution;\r\n        significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0;\r\n\r\n        if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {\r\n          sign1 = coefficentsSign[index + width];\r\n\r\n          if (significance1) {\r\n            sign0 = coefficentsSign[index - width];\r\n            contribution = 1 - sign1 - sign0 + horizontalContribution;\r\n          } else {\r\n            contribution = 1 - sign1 - sign1 + horizontalContribution;\r\n          }\r\n        } else if (significance1) {\r\n          sign0 = coefficentsSign[index - width];\r\n          contribution = 1 - sign0 - sign0 + horizontalContribution;\r\n        } else {\r\n          contribution = horizontalContribution;\r\n        }\r\n\r\n        if (contribution >= 0) {\r\n          contextLabel = 9 + contribution;\r\n          decoded = this.decoder.readBit(this.contexts, contextLabel);\r\n        } else {\r\n          contextLabel = 9 - contribution;\r\n          decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;\r\n        }\r\n\r\n        return decoded;\r\n      },\r\n      runMagnitudeRefinementPass: function BitModel_runMagnitudeRefinementPass() {\r\n        var decoder = this.decoder;\r\n        var width = this.width,\r\n            height = this.height;\r\n        var coefficentsMagnitude = this.coefficentsMagnitude;\r\n        var neighborsSignificance = this.neighborsSignificance;\r\n        var contexts = this.contexts;\r\n        var bitsDecoded = this.bitsDecoded;\r\n        var processingFlags = this.processingFlags;\r\n        var processedMask = 1;\r\n        var firstMagnitudeBitMask = 2;\r\n        var length = width * height;\r\n        var width4 = width * 4;\r\n\r\n        for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) {\r\n          indexNext = Math.min(length, index0 + width4);\r\n\r\n          for (var j = 0; j < width; j++) {\r\n            for (var index = index0 + j; index < indexNext; index += width) {\r\n              if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {\r\n                continue;\r\n              }\r\n\r\n              var contextLabel = 16;\r\n\r\n              if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {\r\n                processingFlags[index] ^= firstMagnitudeBitMask;\r\n                var significance = neighborsSignificance[index] & 127;\r\n                contextLabel = significance === 0 ? 15 : 14;\r\n              }\r\n\r\n              var bit = decoder.readBit(contexts, contextLabel);\r\n              coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit;\r\n              bitsDecoded[index]++;\r\n              processingFlags[index] |= processedMask;\r\n            }\r\n          }\r\n        }\r\n      },\r\n      runCleanupPass: function BitModel_runCleanupPass() {\r\n        var decoder = this.decoder;\r\n        var width = this.width,\r\n            height = this.height;\r\n        var neighborsSignificance = this.neighborsSignificance;\r\n        var coefficentsMagnitude = this.coefficentsMagnitude;\r\n        var coefficentsSign = this.coefficentsSign;\r\n        var contexts = this.contexts;\r\n        var labels = this.contextLabelTable;\r\n        var bitsDecoded = this.bitsDecoded;\r\n        var processingFlags = this.processingFlags;\r\n        var processedMask = 1;\r\n        var firstMagnitudeBitMask = 2;\r\n        var oneRowDown = width;\r\n        var twoRowsDown = width * 2;\r\n        var threeRowsDown = width * 3;\r\n        var iNext;\r\n\r\n        for (var i0 = 0; i0 < height; i0 = iNext) {\r\n          iNext = Math.min(i0 + 4, height);\r\n          var indexBase = i0 * width;\r\n          var checkAllEmpty = i0 + 3 < height;\r\n\r\n          for (var j = 0; j < width; j++) {\r\n            var index0 = indexBase + j;\r\n            var allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0;\r\n            var i1 = 0,\r\n                index = index0;\r\n            var i = i0,\r\n                sign;\r\n\r\n            if (allEmpty) {\r\n              var hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT);\r\n\r\n              if (!hasSignificantCoefficent) {\r\n                bitsDecoded[index0]++;\r\n                bitsDecoded[index0 + oneRowDown]++;\r\n                bitsDecoded[index0 + twoRowsDown]++;\r\n                bitsDecoded[index0 + threeRowsDown]++;\r\n                continue;\r\n              }\r\n\r\n              i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);\r\n\r\n              if (i1 !== 0) {\r\n                i = i0 + i1;\r\n                index += i1 * width;\r\n              }\r\n\r\n              sign = this.decodeSignBit(i, j, index);\r\n              coefficentsSign[index] = sign;\r\n              coefficentsMagnitude[index] = 1;\r\n              this.setNeighborsSignificance(i, j, index);\r\n              processingFlags[index] |= firstMagnitudeBitMask;\r\n              index = index0;\r\n\r\n              for (var i2 = i0; i2 <= i; i2++, index += width) {\r\n                bitsDecoded[index]++;\r\n              }\r\n\r\n              i1++;\r\n            }\r\n\r\n            for (i = i0 + i1; i < iNext; i++, index += width) {\r\n              if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {\r\n                continue;\r\n              }\r\n\r\n              var contextLabel = labels[neighborsSignificance[index]];\r\n              var decision = decoder.readBit(contexts, contextLabel);\r\n\r\n              if (decision === 1) {\r\n                sign = this.decodeSignBit(i, j, index);\r\n                coefficentsSign[index] = sign;\r\n                coefficentsMagnitude[index] = 1;\r\n                this.setNeighborsSignificance(i, j, index);\r\n                processingFlags[index] |= firstMagnitudeBitMask;\r\n              }\r\n\r\n              bitsDecoded[index]++;\r\n            }\r\n          }\r\n        }\r\n      },\r\n      checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() {\r\n        var decoder = this.decoder;\r\n        var contexts = this.contexts;\r\n        var symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);\r\n\r\n        if (symbol !== 0xa) {\r\n          throw new JpxError(\"Invalid segmentation symbol\");\r\n        }\r\n      }\r\n    };\r\n    return BitModel;\r\n  }();\r\n\r\n  var Transform = function TransformClosure() {\r\n    function Transform() {}\r\n\r\n    Transform.prototype.calculate = function transformCalculate(subbands, u0, v0) {\r\n      var ll = subbands[0];\r\n\r\n      for (var i = 1, ii = subbands.length; i < ii; i++) {\r\n        ll = this.iterate(ll, subbands[i], u0, v0);\r\n      }\r\n\r\n      return ll;\r\n    };\r\n\r\n    Transform.prototype.extend = function extend(buffer, offset, size) {\r\n      var i1 = offset - 1,\r\n          j1 = offset + 1;\r\n      var i2 = offset + size - 2,\r\n          j2 = offset + size;\r\n      buffer[i1--] = buffer[j1++];\r\n      buffer[j2++] = buffer[i2--];\r\n      buffer[i1--] = buffer[j1++];\r\n      buffer[j2++] = buffer[i2--];\r\n      buffer[i1--] = buffer[j1++];\r\n      buffer[j2++] = buffer[i2--];\r\n      buffer[i1] = buffer[j1];\r\n      buffer[j2] = buffer[i2];\r\n    };\r\n\r\n    Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, u0, v0) {\r\n      var llWidth = ll.width,\r\n          llHeight = ll.height,\r\n          llItems = ll.items;\r\n      var width = hl_lh_hh.width;\r\n      var height = hl_lh_hh.height;\r\n      var items = hl_lh_hh.items;\r\n      var i, j, k, l, u, v;\r\n\r\n      for (k = 0, i = 0; i < llHeight; i++) {\r\n        l = i * 2 * width;\r\n\r\n        for (j = 0; j < llWidth; j++, k++, l += 2) {\r\n          items[l] = llItems[k];\r\n        }\r\n      }\r\n\r\n      llItems = ll.items = null;\r\n      var bufferPadding = 4;\r\n      var rowBuffer = new Float32Array(width + 2 * bufferPadding);\r\n\r\n      if (width === 1) {\r\n        if ((u0 & 1) !== 0) {\r\n          for (v = 0, k = 0; v < height; v++, k += width) {\r\n            items[k] *= 0.5;\r\n          }\r\n        }\r\n      } else {\r\n        for (v = 0, k = 0; v < height; v++, k += width) {\r\n          rowBuffer.set(items.subarray(k, k + width), bufferPadding);\r\n          this.extend(rowBuffer, bufferPadding, width);\r\n          this.filter(rowBuffer, bufferPadding, width);\r\n          items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k);\r\n        }\r\n      }\r\n\r\n      var numBuffers = 16;\r\n      var colBuffers = [];\r\n\r\n      for (i = 0; i < numBuffers; i++) {\r\n        colBuffers.push(new Float32Array(height + 2 * bufferPadding));\r\n      }\r\n\r\n      var b,\r\n          currentBuffer = 0;\r\n      ll = bufferPadding + height;\r\n\r\n      if (height === 1) {\r\n        if ((v0 & 1) !== 0) {\r\n          for (u = 0; u < width; u++) {\r\n            items[u] *= 0.5;\r\n          }\r\n        }\r\n      } else {\r\n        for (u = 0; u < width; u++) {\r\n          if (currentBuffer === 0) {\r\n            numBuffers = Math.min(width - u, numBuffers);\r\n\r\n            for (k = u, l = bufferPadding; l < ll; k += width, l++) {\r\n              for (b = 0; b < numBuffers; b++) {\r\n                colBuffers[b][l] = items[k + b];\r\n              }\r\n            }\r\n\r\n            currentBuffer = numBuffers;\r\n          }\r\n\r\n          currentBuffer--;\r\n          var buffer = colBuffers[currentBuffer];\r\n          this.extend(buffer, bufferPadding, height);\r\n          this.filter(buffer, bufferPadding, height);\r\n\r\n          if (currentBuffer === 0) {\r\n            k = u - numBuffers + 1;\r\n\r\n            for (l = bufferPadding; l < ll; k += width, l++) {\r\n              for (b = 0; b < numBuffers; b++) {\r\n                items[k + b] = colBuffers[b][l];\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      return {\r\n        width: width,\r\n        height: height,\r\n        items: items\r\n      };\r\n    };\r\n\r\n    return Transform;\r\n  }();\r\n\r\n  var IrreversibleTransform = function IrreversibleTransformClosure() {\r\n    function IrreversibleTransform() {\r\n      Transform.call(this);\r\n    }\r\n\r\n    IrreversibleTransform.prototype = Object.create(Transform.prototype);\r\n\r\n    IrreversibleTransform.prototype.filter = function irreversibleTransformFilter(x, offset, length) {\r\n      var len = length >> 1;\r\n      offset = offset | 0;\r\n      var j, n, current, next;\r\n      var alpha = -1.586134342059924;\r\n      var beta = -0.052980118572961;\r\n      var gamma = 0.882911075530934;\r\n      var delta = 0.443506852043971;\r\n      var K = 1.230174104914001;\r\n      var K_ = 1 / K;\r\n      j = offset - 3;\r\n\r\n      for (n = len + 4; n--; j += 2) {\r\n        x[j] *= K_;\r\n      }\r\n\r\n      j = offset - 2;\r\n      current = delta * x[j - 1];\r\n\r\n      for (n = len + 3; n--; j += 2) {\r\n        next = delta * x[j + 1];\r\n        x[j] = K * x[j] - current - next;\r\n\r\n        if (n--) {\r\n          j += 2;\r\n          current = delta * x[j + 1];\r\n          x[j] = K * x[j] - current - next;\r\n        } else {\r\n          break;\r\n        }\r\n      }\r\n\r\n      j = offset - 1;\r\n      current = gamma * x[j - 1];\r\n\r\n      for (n = len + 2; n--; j += 2) {\r\n        next = gamma * x[j + 1];\r\n        x[j] -= current + next;\r\n\r\n        if (n--) {\r\n          j += 2;\r\n          current = gamma * x[j + 1];\r\n          x[j] -= current + next;\r\n        } else {\r\n          break;\r\n        }\r\n      }\r\n\r\n      j = offset;\r\n      current = beta * x[j - 1];\r\n\r\n      for (n = len + 1; n--; j += 2) {\r\n        next = beta * x[j + 1];\r\n        x[j] -= current + next;\r\n\r\n        if (n--) {\r\n          j += 2;\r\n          current = beta * x[j + 1];\r\n          x[j] -= current + next;\r\n        } else {\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (len !== 0) {\r\n        j = offset + 1;\r\n        current = alpha * x[j - 1];\r\n\r\n        for (n = len; n--; j += 2) {\r\n          next = alpha * x[j + 1];\r\n          x[j] -= current + next;\r\n\r\n          if (n--) {\r\n            j += 2;\r\n            current = alpha * x[j + 1];\r\n            x[j] -= current + next;\r\n          } else {\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    };\r\n\r\n    return IrreversibleTransform;\r\n  }();\r\n\r\n  var ReversibleTransform = function ReversibleTransformClosure() {\r\n    function ReversibleTransform() {\r\n      Transform.call(this);\r\n    }\r\n\r\n    ReversibleTransform.prototype = Object.create(Transform.prototype);\r\n\r\n    ReversibleTransform.prototype.filter = function reversibleTransformFilter(x, offset, length) {\r\n      var len = length >> 1;\r\n      offset = offset | 0;\r\n      var j, n;\r\n\r\n      for (j = offset, n = len + 1; n--; j += 2) {\r\n        x[j] -= x[j - 1] + x[j + 1] + 2 >> 2;\r\n      }\r\n\r\n      for (j = offset + 1, n = len; n--; j += 2) {\r\n        x[j] += x[j - 1] + x[j + 1] >> 1;\r\n      }\r\n    };\r\n\r\n    return ReversibleTransform;\r\n  }();\r\n\r\n  return JpxImage;\r\n}();\r\n\r\nexports.JpxImage = JpxImage;\r\n\r\n/***/ }),\r\n/* 152 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.calculateSHA512 = exports.calculateSHA384 = exports.calculateSHA256 = exports.calculateMD5 = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar ARCFourCipher = function ARCFourCipherClosure() {\r\n  function ARCFourCipher(key) {\r\n    this.a = 0;\r\n    this.b = 0;\r\n    var s = new Uint8Array(256);\r\n    var i,\r\n        j = 0,\r\n        tmp,\r\n        keyLength = key.length;\r\n\r\n    for (i = 0; i < 256; ++i) {\r\n      s[i] = i;\r\n    }\r\n\r\n    for (i = 0; i < 256; ++i) {\r\n      tmp = s[i];\r\n      j = j + tmp + key[i % keyLength] & 0xff;\r\n      s[i] = s[j];\r\n      s[j] = tmp;\r\n    }\r\n\r\n    this.s = s;\r\n  }\r\n\r\n  ARCFourCipher.prototype = {\r\n    encryptBlock: function ARCFourCipher_encryptBlock(data) {\r\n      var i,\r\n          n = data.length,\r\n          tmp,\r\n          tmp2;\r\n      var a = this.a,\r\n          b = this.b,\r\n          s = this.s;\r\n      var output = new Uint8Array(n);\r\n\r\n      for (i = 0; i < n; ++i) {\r\n        a = a + 1 & 0xff;\r\n        tmp = s[a];\r\n        b = b + tmp & 0xff;\r\n        tmp2 = s[b];\r\n        s[a] = tmp2;\r\n        s[b] = tmp;\r\n        output[i] = data[i] ^ s[tmp + tmp2 & 0xff];\r\n      }\r\n\r\n      this.a = a;\r\n      this.b = b;\r\n      return output;\r\n    }\r\n  };\r\n  ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock;\r\n  ARCFourCipher.prototype.encrypt = ARCFourCipher.prototype.encryptBlock;\r\n  return ARCFourCipher;\r\n}();\r\n\r\nexports.ARCFourCipher = ARCFourCipher;\r\n\r\nvar calculateMD5 = function calculateMD5Closure() {\r\n  var r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]);\r\n  var k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]);\r\n\r\n  function hash(data, offset, length) {\r\n    var h0 = 1732584193,\r\n        h1 = -271733879,\r\n        h2 = -1732584194,\r\n        h3 = 271733878;\r\n    var paddedLength = length + 72 & ~63;\r\n    var padded = new Uint8Array(paddedLength);\r\n    var i, j, n;\r\n\r\n    for (i = 0; i < length; ++i) {\r\n      padded[i] = data[offset++];\r\n    }\r\n\r\n    padded[i++] = 0x80;\r\n    n = paddedLength - 8;\r\n\r\n    while (i < n) {\r\n      padded[i++] = 0;\r\n    }\r\n\r\n    padded[i++] = length << 3 & 0xff;\r\n    padded[i++] = length >> 5 & 0xff;\r\n    padded[i++] = length >> 13 & 0xff;\r\n    padded[i++] = length >> 21 & 0xff;\r\n    padded[i++] = length >>> 29 & 0xff;\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    var w = new Int32Array(16);\r\n\r\n    for (i = 0; i < paddedLength;) {\r\n      for (j = 0; j < 16; ++j, i += 4) {\r\n        w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24;\r\n      }\r\n\r\n      var a = h0,\r\n          b = h1,\r\n          c = h2,\r\n          d = h3,\r\n          f,\r\n          g;\r\n\r\n      for (j = 0; j < 64; ++j) {\r\n        if (j < 16) {\r\n          f = b & c | ~b & d;\r\n          g = j;\r\n        } else if (j < 32) {\r\n          f = d & b | ~d & c;\r\n          g = 5 * j + 1 & 15;\r\n        } else if (j < 48) {\r\n          f = b ^ c ^ d;\r\n          g = 3 * j + 5 & 15;\r\n        } else {\r\n          f = c ^ (b | ~d);\r\n          g = 7 * j & 15;\r\n        }\r\n\r\n        var tmp = d,\r\n            rotateArg = a + f + k[j] + w[g] | 0,\r\n            rotate = r[j];\r\n        d = c;\r\n        c = b;\r\n        b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0;\r\n        a = tmp;\r\n      }\r\n\r\n      h0 = h0 + a | 0;\r\n      h1 = h1 + b | 0;\r\n      h2 = h2 + c | 0;\r\n      h3 = h3 + d | 0;\r\n    }\r\n\r\n    return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]);\r\n  }\r\n\r\n  return hash;\r\n}();\r\n\r\nexports.calculateMD5 = calculateMD5;\r\n\r\nvar Word64 = function Word64Closure() {\r\n  function Word64(highInteger, lowInteger) {\r\n    this.high = highInteger | 0;\r\n    this.low = lowInteger | 0;\r\n  }\r\n\r\n  Word64.prototype = {\r\n    and: function Word64_and(word) {\r\n      this.high &= word.high;\r\n      this.low &= word.low;\r\n    },\r\n    xor: function Word64_xor(word) {\r\n      this.high ^= word.high;\r\n      this.low ^= word.low;\r\n    },\r\n    or: function Word64_or(word) {\r\n      this.high |= word.high;\r\n      this.low |= word.low;\r\n    },\r\n    shiftRight: function Word64_shiftRight(places) {\r\n      if (places >= 32) {\r\n        this.low = this.high >>> places - 32 | 0;\r\n        this.high = 0;\r\n      } else {\r\n        this.low = this.low >>> places | this.high << 32 - places;\r\n        this.high = this.high >>> places | 0;\r\n      }\r\n    },\r\n    shiftLeft: function Word64_shiftLeft(places) {\r\n      if (places >= 32) {\r\n        this.high = this.low << places - 32;\r\n        this.low = 0;\r\n      } else {\r\n        this.high = this.high << places | this.low >>> 32 - places;\r\n        this.low = this.low << places;\r\n      }\r\n    },\r\n    rotateRight: function Word64_rotateRight(places) {\r\n      var low, high;\r\n\r\n      if (places & 32) {\r\n        high = this.low;\r\n        low = this.high;\r\n      } else {\r\n        low = this.low;\r\n        high = this.high;\r\n      }\r\n\r\n      places &= 31;\r\n      this.low = low >>> places | high << 32 - places;\r\n      this.high = high >>> places | low << 32 - places;\r\n    },\r\n    not: function Word64_not() {\r\n      this.high = ~this.high;\r\n      this.low = ~this.low;\r\n    },\r\n    add: function Word64_add(word) {\r\n      var lowAdd = (this.low >>> 0) + (word.low >>> 0);\r\n      var highAdd = (this.high >>> 0) + (word.high >>> 0);\r\n\r\n      if (lowAdd > 0xffffffff) {\r\n        highAdd += 1;\r\n      }\r\n\r\n      this.low = lowAdd | 0;\r\n      this.high = highAdd | 0;\r\n    },\r\n    copyTo: function Word64_copyTo(bytes, offset) {\r\n      bytes[offset] = this.high >>> 24 & 0xff;\r\n      bytes[offset + 1] = this.high >> 16 & 0xff;\r\n      bytes[offset + 2] = this.high >> 8 & 0xff;\r\n      bytes[offset + 3] = this.high & 0xff;\r\n      bytes[offset + 4] = this.low >>> 24 & 0xff;\r\n      bytes[offset + 5] = this.low >> 16 & 0xff;\r\n      bytes[offset + 6] = this.low >> 8 & 0xff;\r\n      bytes[offset + 7] = this.low & 0xff;\r\n    },\r\n    assign: function Word64_assign(word) {\r\n      this.high = word.high;\r\n      this.low = word.low;\r\n    }\r\n  };\r\n  return Word64;\r\n}();\r\n\r\nvar calculateSHA256 = function calculateSHA256Closure() {\r\n  function rotr(x, n) {\r\n    return x >>> n | x << 32 - n;\r\n  }\r\n\r\n  function ch(x, y, z) {\r\n    return x & y ^ ~x & z;\r\n  }\r\n\r\n  function maj(x, y, z) {\r\n    return x & y ^ x & z ^ y & z;\r\n  }\r\n\r\n  function sigma(x) {\r\n    return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22);\r\n  }\r\n\r\n  function sigmaPrime(x) {\r\n    return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25);\r\n  }\r\n\r\n  function littleSigma(x) {\r\n    return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3;\r\n  }\r\n\r\n  function littleSigmaPrime(x) {\r\n    return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10;\r\n  }\r\n\r\n  var k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];\r\n\r\n  function hash(data, offset, length) {\r\n    var h0 = 0x6a09e667,\r\n        h1 = 0xbb67ae85,\r\n        h2 = 0x3c6ef372,\r\n        h3 = 0xa54ff53a,\r\n        h4 = 0x510e527f,\r\n        h5 = 0x9b05688c,\r\n        h6 = 0x1f83d9ab,\r\n        h7 = 0x5be0cd19;\r\n    var paddedLength = Math.ceil((length + 9) / 64) * 64;\r\n    var padded = new Uint8Array(paddedLength);\r\n    var i, j, n;\r\n\r\n    for (i = 0; i < length; ++i) {\r\n      padded[i] = data[offset++];\r\n    }\r\n\r\n    padded[i++] = 0x80;\r\n    n = paddedLength - 8;\r\n\r\n    while (i < n) {\r\n      padded[i++] = 0;\r\n    }\r\n\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    padded[i++] = length >>> 29 & 0xff;\r\n    padded[i++] = length >> 21 & 0xff;\r\n    padded[i++] = length >> 13 & 0xff;\r\n    padded[i++] = length >> 5 & 0xff;\r\n    padded[i++] = length << 3 & 0xff;\r\n    var w = new Uint32Array(64);\r\n\r\n    for (i = 0; i < paddedLength;) {\r\n      for (j = 0; j < 16; ++j) {\r\n        w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];\r\n        i += 4;\r\n      }\r\n\r\n      for (j = 16; j < 64; ++j) {\r\n        w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0;\r\n      }\r\n\r\n      var a = h0,\r\n          b = h1,\r\n          c = h2,\r\n          d = h3,\r\n          e = h4,\r\n          f = h5,\r\n          g = h6,\r\n          h = h7,\r\n          t1,\r\n          t2;\r\n\r\n      for (j = 0; j < 64; ++j) {\r\n        t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j];\r\n        t2 = sigma(a) + maj(a, b, c);\r\n        h = g;\r\n        g = f;\r\n        f = e;\r\n        e = d + t1 | 0;\r\n        d = c;\r\n        c = b;\r\n        b = a;\r\n        a = t1 + t2 | 0;\r\n      }\r\n\r\n      h0 = h0 + a | 0;\r\n      h1 = h1 + b | 0;\r\n      h2 = h2 + c | 0;\r\n      h3 = h3 + d | 0;\r\n      h4 = h4 + e | 0;\r\n      h5 = h5 + f | 0;\r\n      h6 = h6 + g | 0;\r\n      h7 = h7 + h | 0;\r\n    }\r\n\r\n    return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]);\r\n  }\r\n\r\n  return hash;\r\n}();\r\n\r\nexports.calculateSHA256 = calculateSHA256;\r\n\r\nvar calculateSHA512 = function calculateSHA512Closure() {\r\n  function ch(result, x, y, z, tmp) {\r\n    result.assign(x);\r\n    result.and(y);\r\n    tmp.assign(x);\r\n    tmp.not();\r\n    tmp.and(z);\r\n    result.xor(tmp);\r\n  }\r\n\r\n  function maj(result, x, y, z, tmp) {\r\n    result.assign(x);\r\n    result.and(y);\r\n    tmp.assign(x);\r\n    tmp.and(z);\r\n    result.xor(tmp);\r\n    tmp.assign(y);\r\n    tmp.and(z);\r\n    result.xor(tmp);\r\n  }\r\n\r\n  function sigma(result, x, tmp) {\r\n    result.assign(x);\r\n    result.rotateRight(28);\r\n    tmp.assign(x);\r\n    tmp.rotateRight(34);\r\n    result.xor(tmp);\r\n    tmp.assign(x);\r\n    tmp.rotateRight(39);\r\n    result.xor(tmp);\r\n  }\r\n\r\n  function sigmaPrime(result, x, tmp) {\r\n    result.assign(x);\r\n    result.rotateRight(14);\r\n    tmp.assign(x);\r\n    tmp.rotateRight(18);\r\n    result.xor(tmp);\r\n    tmp.assign(x);\r\n    tmp.rotateRight(41);\r\n    result.xor(tmp);\r\n  }\r\n\r\n  function littleSigma(result, x, tmp) {\r\n    result.assign(x);\r\n    result.rotateRight(1);\r\n    tmp.assign(x);\r\n    tmp.rotateRight(8);\r\n    result.xor(tmp);\r\n    tmp.assign(x);\r\n    tmp.shiftRight(7);\r\n    result.xor(tmp);\r\n  }\r\n\r\n  function littleSigmaPrime(result, x, tmp) {\r\n    result.assign(x);\r\n    result.rotateRight(19);\r\n    tmp.assign(x);\r\n    tmp.rotateRight(61);\r\n    result.xor(tmp);\r\n    tmp.assign(x);\r\n    tmp.shiftRight(6);\r\n    result.xor(tmp);\r\n  }\r\n\r\n  var k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)];\r\n\r\n  function hash(data, offset, length, mode384) {\r\n    mode384 = !!mode384;\r\n    var h0, h1, h2, h3, h4, h5, h6, h7;\r\n\r\n    if (!mode384) {\r\n      h0 = new Word64(0x6a09e667, 0xf3bcc908);\r\n      h1 = new Word64(0xbb67ae85, 0x84caa73b);\r\n      h2 = new Word64(0x3c6ef372, 0xfe94f82b);\r\n      h3 = new Word64(0xa54ff53a, 0x5f1d36f1);\r\n      h4 = new Word64(0x510e527f, 0xade682d1);\r\n      h5 = new Word64(0x9b05688c, 0x2b3e6c1f);\r\n      h6 = new Word64(0x1f83d9ab, 0xfb41bd6b);\r\n      h7 = new Word64(0x5be0cd19, 0x137e2179);\r\n    } else {\r\n      h0 = new Word64(0xcbbb9d5d, 0xc1059ed8);\r\n      h1 = new Word64(0x629a292a, 0x367cd507);\r\n      h2 = new Word64(0x9159015a, 0x3070dd17);\r\n      h3 = new Word64(0x152fecd8, 0xf70e5939);\r\n      h4 = new Word64(0x67332667, 0xffc00b31);\r\n      h5 = new Word64(0x8eb44a87, 0x68581511);\r\n      h6 = new Word64(0xdb0c2e0d, 0x64f98fa7);\r\n      h7 = new Word64(0x47b5481d, 0xbefa4fa4);\r\n    }\r\n\r\n    var paddedLength = Math.ceil((length + 17) / 128) * 128;\r\n    var padded = new Uint8Array(paddedLength);\r\n    var i, j, n;\r\n\r\n    for (i = 0; i < length; ++i) {\r\n      padded[i] = data[offset++];\r\n    }\r\n\r\n    padded[i++] = 0x80;\r\n    n = paddedLength - 16;\r\n\r\n    while (i < n) {\r\n      padded[i++] = 0;\r\n    }\r\n\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    padded[i++] = 0;\r\n    padded[i++] = length >>> 29 & 0xff;\r\n    padded[i++] = length >> 21 & 0xff;\r\n    padded[i++] = length >> 13 & 0xff;\r\n    padded[i++] = length >> 5 & 0xff;\r\n    padded[i++] = length << 3 & 0xff;\r\n    var w = new Array(80);\r\n\r\n    for (i = 0; i < 80; i++) {\r\n      w[i] = new Word64(0, 0);\r\n    }\r\n\r\n    var a = new Word64(0, 0),\r\n        b = new Word64(0, 0),\r\n        c = new Word64(0, 0);\r\n    var d = new Word64(0, 0),\r\n        e = new Word64(0, 0),\r\n        f = new Word64(0, 0);\r\n    var g = new Word64(0, 0),\r\n        h = new Word64(0, 0);\r\n    var t1 = new Word64(0, 0),\r\n        t2 = new Word64(0, 0);\r\n    var tmp1 = new Word64(0, 0),\r\n        tmp2 = new Word64(0, 0),\r\n        tmp3;\r\n\r\n    for (i = 0; i < paddedLength;) {\r\n      for (j = 0; j < 16; ++j) {\r\n        w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];\r\n        w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7];\r\n        i += 8;\r\n      }\r\n\r\n      for (j = 16; j < 80; ++j) {\r\n        tmp3 = w[j];\r\n        littleSigmaPrime(tmp3, w[j - 2], tmp2);\r\n        tmp3.add(w[j - 7]);\r\n        littleSigma(tmp1, w[j - 15], tmp2);\r\n        tmp3.add(tmp1);\r\n        tmp3.add(w[j - 16]);\r\n      }\r\n\r\n      a.assign(h0);\r\n      b.assign(h1);\r\n      c.assign(h2);\r\n      d.assign(h3);\r\n      e.assign(h4);\r\n      f.assign(h5);\r\n      g.assign(h6);\r\n      h.assign(h7);\r\n\r\n      for (j = 0; j < 80; ++j) {\r\n        t1.assign(h);\r\n        sigmaPrime(tmp1, e, tmp2);\r\n        t1.add(tmp1);\r\n        ch(tmp1, e, f, g, tmp2);\r\n        t1.add(tmp1);\r\n        t1.add(k[j]);\r\n        t1.add(w[j]);\r\n        sigma(t2, a, tmp2);\r\n        maj(tmp1, a, b, c, tmp2);\r\n        t2.add(tmp1);\r\n        tmp3 = h;\r\n        h = g;\r\n        g = f;\r\n        f = e;\r\n        d.add(t1);\r\n        e = d;\r\n        d = c;\r\n        c = b;\r\n        b = a;\r\n        tmp3.assign(t1);\r\n        tmp3.add(t2);\r\n        a = tmp3;\r\n      }\r\n\r\n      h0.add(a);\r\n      h1.add(b);\r\n      h2.add(c);\r\n      h3.add(d);\r\n      h4.add(e);\r\n      h5.add(f);\r\n      h6.add(g);\r\n      h7.add(h);\r\n    }\r\n\r\n    var result;\r\n\r\n    if (!mode384) {\r\n      result = new Uint8Array(64);\r\n      h0.copyTo(result, 0);\r\n      h1.copyTo(result, 8);\r\n      h2.copyTo(result, 16);\r\n      h3.copyTo(result, 24);\r\n      h4.copyTo(result, 32);\r\n      h5.copyTo(result, 40);\r\n      h6.copyTo(result, 48);\r\n      h7.copyTo(result, 56);\r\n    } else {\r\n      result = new Uint8Array(48);\r\n      h0.copyTo(result, 0);\r\n      h1.copyTo(result, 8);\r\n      h2.copyTo(result, 16);\r\n      h3.copyTo(result, 24);\r\n      h4.copyTo(result, 32);\r\n      h5.copyTo(result, 40);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  return hash;\r\n}();\r\n\r\nexports.calculateSHA512 = calculateSHA512;\r\n\r\nvar calculateSHA384 = function calculateSHA384Closure() {\r\n  function hash(data, offset, length) {\r\n    return calculateSHA512(data, offset, length, true);\r\n  }\r\n\r\n  return hash;\r\n}();\r\n\r\nexports.calculateSHA384 = calculateSHA384;\r\n\r\nvar NullCipher = function NullCipherClosure() {\r\n  function NullCipher() {}\r\n\r\n  NullCipher.prototype = {\r\n    decryptBlock: function NullCipher_decryptBlock(data) {\r\n      return data;\r\n    },\r\n    encrypt: function NullCipher_encrypt(data) {\r\n      return data;\r\n    }\r\n  };\r\n  return NullCipher;\r\n}();\r\n\r\nvar AESBaseCipher = /*#__PURE__*/function () {\r\n  function AESBaseCipher() {\r\n    _classCallCheck(this, AESBaseCipher);\r\n\r\n    if (this.constructor === AESBaseCipher) {\r\n      (0, _util.unreachable)(\"Cannot initialize AESBaseCipher.\");\r\n    }\r\n\r\n    this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]);\r\n    this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]);\r\n    this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]);\r\n    this._mixCol = new Uint8Array(256);\r\n\r\n    for (var i = 0; i < 256; i++) {\r\n      if (i < 128) {\r\n        this._mixCol[i] = i << 1;\r\n      } else {\r\n        this._mixCol[i] = i << 1 ^ 0x1b;\r\n      }\r\n    }\r\n\r\n    this.buffer = new Uint8Array(16);\r\n    this.bufferPosition = 0;\r\n  }\r\n\r\n  _createClass(AESBaseCipher, [{\r\n    key: \"_expandKey\",\r\n    value: function _expandKey(cipherKey) {\r\n      (0, _util.unreachable)(\"Cannot call `_expandKey` on the base class\");\r\n    }\r\n  }, {\r\n    key: \"_decrypt\",\r\n    value: function _decrypt(input, key) {\r\n      var t, u, v;\r\n      var state = new Uint8Array(16);\r\n      state.set(input);\r\n\r\n      for (var j = 0, k = this._keySize; j < 16; ++j, ++k) {\r\n        state[j] ^= key[k];\r\n      }\r\n\r\n      for (var i = this._cyclesOfRepetition - 1; i >= 1; --i) {\r\n        t = state[13];\r\n        state[13] = state[9];\r\n        state[9] = state[5];\r\n        state[5] = state[1];\r\n        state[1] = t;\r\n        t = state[14];\r\n        u = state[10];\r\n        state[14] = state[6];\r\n        state[10] = state[2];\r\n        state[6] = t;\r\n        state[2] = u;\r\n        t = state[15];\r\n        u = state[11];\r\n        v = state[7];\r\n        state[15] = state[3];\r\n        state[11] = t;\r\n        state[7] = u;\r\n        state[3] = v;\r\n\r\n        for (var _j = 0; _j < 16; ++_j) {\r\n          state[_j] = this._inv_s[state[_j]];\r\n        }\r\n\r\n        for (var _j2 = 0, _k = i * 16; _j2 < 16; ++_j2, ++_k) {\r\n          state[_j2] ^= key[_k];\r\n        }\r\n\r\n        for (var _j3 = 0; _j3 < 16; _j3 += 4) {\r\n          var s0 = this._mix[state[_j3]];\r\n          var s1 = this._mix[state[_j3 + 1]];\r\n          var s2 = this._mix[state[_j3 + 2]];\r\n          var s3 = this._mix[state[_j3 + 3]];\r\n          t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8;\r\n          state[_j3] = t >>> 24 & 0xff;\r\n          state[_j3 + 1] = t >> 16 & 0xff;\r\n          state[_j3 + 2] = t >> 8 & 0xff;\r\n          state[_j3 + 3] = t & 0xff;\r\n        }\r\n      }\r\n\r\n      t = state[13];\r\n      state[13] = state[9];\r\n      state[9] = state[5];\r\n      state[5] = state[1];\r\n      state[1] = t;\r\n      t = state[14];\r\n      u = state[10];\r\n      state[14] = state[6];\r\n      state[10] = state[2];\r\n      state[6] = t;\r\n      state[2] = u;\r\n      t = state[15];\r\n      u = state[11];\r\n      v = state[7];\r\n      state[15] = state[3];\r\n      state[11] = t;\r\n      state[7] = u;\r\n      state[3] = v;\r\n\r\n      for (var _j4 = 0; _j4 < 16; ++_j4) {\r\n        state[_j4] = this._inv_s[state[_j4]];\r\n        state[_j4] ^= key[_j4];\r\n      }\r\n\r\n      return state;\r\n    }\r\n  }, {\r\n    key: \"_encrypt\",\r\n    value: function _encrypt(input, key) {\r\n      var s = this._s;\r\n      var t, u, v;\r\n      var state = new Uint8Array(16);\r\n      state.set(input);\r\n\r\n      for (var j = 0; j < 16; ++j) {\r\n        state[j] ^= key[j];\r\n      }\r\n\r\n      for (var i = 1; i < this._cyclesOfRepetition; i++) {\r\n        for (var _j5 = 0; _j5 < 16; ++_j5) {\r\n          state[_j5] = s[state[_j5]];\r\n        }\r\n\r\n        v = state[1];\r\n        state[1] = state[5];\r\n        state[5] = state[9];\r\n        state[9] = state[13];\r\n        state[13] = v;\r\n        v = state[2];\r\n        u = state[6];\r\n        state[2] = state[10];\r\n        state[6] = state[14];\r\n        state[10] = v;\r\n        state[14] = u;\r\n        v = state[3];\r\n        u = state[7];\r\n        t = state[11];\r\n        state[3] = state[15];\r\n        state[7] = v;\r\n        state[11] = u;\r\n        state[15] = t;\r\n\r\n        for (var _j6 = 0; _j6 < 16; _j6 += 4) {\r\n          var s0 = state[_j6 + 0];\r\n          var s1 = state[_j6 + 1];\r\n          var s2 = state[_j6 + 2];\r\n          var s3 = state[_j6 + 3];\r\n          t = s0 ^ s1 ^ s2 ^ s3;\r\n          state[_j6 + 0] ^= t ^ this._mixCol[s0 ^ s1];\r\n          state[_j6 + 1] ^= t ^ this._mixCol[s1 ^ s2];\r\n          state[_j6 + 2] ^= t ^ this._mixCol[s2 ^ s3];\r\n          state[_j6 + 3] ^= t ^ this._mixCol[s3 ^ s0];\r\n        }\r\n\r\n        for (var _j7 = 0, k = i * 16; _j7 < 16; ++_j7, ++k) {\r\n          state[_j7] ^= key[k];\r\n        }\r\n      }\r\n\r\n      for (var _j8 = 0; _j8 < 16; ++_j8) {\r\n        state[_j8] = s[state[_j8]];\r\n      }\r\n\r\n      v = state[1];\r\n      state[1] = state[5];\r\n      state[5] = state[9];\r\n      state[9] = state[13];\r\n      state[13] = v;\r\n      v = state[2];\r\n      u = state[6];\r\n      state[2] = state[10];\r\n      state[6] = state[14];\r\n      state[10] = v;\r\n      state[14] = u;\r\n      v = state[3];\r\n      u = state[7];\r\n      t = state[11];\r\n      state[3] = state[15];\r\n      state[7] = v;\r\n      state[11] = u;\r\n      state[15] = t;\r\n\r\n      for (var _j9 = 0, _k2 = this._keySize; _j9 < 16; ++_j9, ++_k2) {\r\n        state[_j9] ^= key[_k2];\r\n      }\r\n\r\n      return state;\r\n    }\r\n  }, {\r\n    key: \"_decryptBlock2\",\r\n    value: function _decryptBlock2(data, finalize) {\r\n      var sourceLength = data.length;\r\n      var buffer = this.buffer,\r\n          bufferLength = this.bufferPosition;\r\n      var result = [];\r\n      var iv = this.iv;\r\n\r\n      for (var i = 0; i < sourceLength; ++i) {\r\n        buffer[bufferLength] = data[i];\r\n        ++bufferLength;\r\n\r\n        if (bufferLength < 16) {\r\n          continue;\r\n        }\r\n\r\n        var plain = this._decrypt(buffer, this._key);\r\n\r\n        for (var j = 0; j < 16; ++j) {\r\n          plain[j] ^= iv[j];\r\n        }\r\n\r\n        iv = buffer;\r\n        result.push(plain);\r\n        buffer = new Uint8Array(16);\r\n        bufferLength = 0;\r\n      }\r\n\r\n      this.buffer = buffer;\r\n      this.bufferLength = bufferLength;\r\n      this.iv = iv;\r\n\r\n      if (result.length === 0) {\r\n        return new Uint8Array(0);\r\n      }\r\n\r\n      var outputLength = 16 * result.length;\r\n\r\n      if (finalize) {\r\n        var lastBlock = result[result.length - 1];\r\n        var psLen = lastBlock[15];\r\n\r\n        if (psLen <= 16) {\r\n          for (var _i = 15, ii = 16 - psLen; _i >= ii; --_i) {\r\n            if (lastBlock[_i] !== psLen) {\r\n              psLen = 0;\r\n              break;\r\n            }\r\n          }\r\n\r\n          outputLength -= psLen;\r\n          result[result.length - 1] = lastBlock.subarray(0, 16 - psLen);\r\n        }\r\n      }\r\n\r\n      var output = new Uint8Array(outputLength);\r\n\r\n      for (var _i2 = 0, _j10 = 0, _ii = result.length; _i2 < _ii; ++_i2, _j10 += 16) {\r\n        output.set(result[_i2], _j10);\r\n      }\r\n\r\n      return output;\r\n    }\r\n  }, {\r\n    key: \"decryptBlock\",\r\n    value: function decryptBlock(data, finalize) {\r\n      var iv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\r\n      var sourceLength = data.length;\r\n      var buffer = this.buffer;\r\n      var bufferLength = this.bufferPosition;\r\n\r\n      if (iv) {\r\n        this.iv = iv;\r\n      } else {\r\n        for (var i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) {\r\n          buffer[bufferLength] = data[i];\r\n        }\r\n\r\n        if (bufferLength < 16) {\r\n          this.bufferLength = bufferLength;\r\n          return new Uint8Array(0);\r\n        }\r\n\r\n        this.iv = buffer;\r\n        data = data.subarray(16);\r\n      }\r\n\r\n      this.buffer = new Uint8Array(16);\r\n      this.bufferLength = 0;\r\n      this.decryptBlock = this._decryptBlock2;\r\n      return this.decryptBlock(data, finalize);\r\n    }\r\n  }, {\r\n    key: \"encrypt\",\r\n    value: function encrypt(data, iv) {\r\n      var sourceLength = data.length;\r\n      var buffer = this.buffer,\r\n          bufferLength = this.bufferPosition;\r\n      var result = [];\r\n\r\n      if (!iv) {\r\n        iv = new Uint8Array(16);\r\n      }\r\n\r\n      for (var i = 0; i < sourceLength; ++i) {\r\n        buffer[bufferLength] = data[i];\r\n        ++bufferLength;\r\n\r\n        if (bufferLength < 16) {\r\n          continue;\r\n        }\r\n\r\n        for (var j = 0; j < 16; ++j) {\r\n          buffer[j] ^= iv[j];\r\n        }\r\n\r\n        var cipher = this._encrypt(buffer, this._key);\r\n\r\n        iv = cipher;\r\n        result.push(cipher);\r\n        buffer = new Uint8Array(16);\r\n        bufferLength = 0;\r\n      }\r\n\r\n      this.buffer = buffer;\r\n      this.bufferLength = bufferLength;\r\n      this.iv = iv;\r\n\r\n      if (result.length === 0) {\r\n        return new Uint8Array(0);\r\n      }\r\n\r\n      var outputLength = 16 * result.length;\r\n      var output = new Uint8Array(outputLength);\r\n\r\n      for (var _i3 = 0, _j11 = 0, ii = result.length; _i3 < ii; ++_i3, _j11 += 16) {\r\n        output.set(result[_i3], _j11);\r\n      }\r\n\r\n      return output;\r\n    }\r\n  }]);\r\n\r\n  return AESBaseCipher;\r\n}();\r\n\r\nvar AES128Cipher = /*#__PURE__*/function (_AESBaseCipher) {\r\n  _inherits(AES128Cipher, _AESBaseCipher);\r\n\r\n  var _super = _createSuper(AES128Cipher);\r\n\r\n  function AES128Cipher(key) {\r\n    var _this;\r\n\r\n    _classCallCheck(this, AES128Cipher);\r\n\r\n    _this = _super.call(this);\r\n    _this._cyclesOfRepetition = 10;\r\n    _this._keySize = 160;\r\n    _this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]);\r\n    _this._key = _this._expandKey(key);\r\n    return _this;\r\n  }\r\n\r\n  _createClass(AES128Cipher, [{\r\n    key: \"_expandKey\",\r\n    value: function _expandKey(cipherKey) {\r\n      var b = 176;\r\n      var s = this._s;\r\n      var rcon = this._rcon;\r\n      var result = new Uint8Array(b);\r\n      result.set(cipherKey);\r\n\r\n      for (var j = 16, i = 1; j < b; ++i) {\r\n        var t1 = result[j - 3];\r\n        var t2 = result[j - 2];\r\n        var t3 = result[j - 1];\r\n        var t4 = result[j - 4];\r\n        t1 = s[t1];\r\n        t2 = s[t2];\r\n        t3 = s[t3];\r\n        t4 = s[t4];\r\n        t1 = t1 ^ rcon[i];\r\n\r\n        for (var n = 0; n < 4; ++n) {\r\n          result[j] = t1 ^= result[j - 16];\r\n          j++;\r\n          result[j] = t2 ^= result[j - 16];\r\n          j++;\r\n          result[j] = t3 ^= result[j - 16];\r\n          j++;\r\n          result[j] = t4 ^= result[j - 16];\r\n          j++;\r\n        }\r\n      }\r\n\r\n      return result;\r\n    }\r\n  }]);\r\n\r\n  return AES128Cipher;\r\n}(AESBaseCipher);\r\n\r\nexports.AES128Cipher = AES128Cipher;\r\n\r\nvar AES256Cipher = /*#__PURE__*/function (_AESBaseCipher2) {\r\n  _inherits(AES256Cipher, _AESBaseCipher2);\r\n\r\n  var _super2 = _createSuper(AES256Cipher);\r\n\r\n  function AES256Cipher(key) {\r\n    var _this2;\r\n\r\n    _classCallCheck(this, AES256Cipher);\r\n\r\n    _this2 = _super2.call(this);\r\n    _this2._cyclesOfRepetition = 14;\r\n    _this2._keySize = 224;\r\n    _this2._key = _this2._expandKey(key);\r\n    return _this2;\r\n  }\r\n\r\n  _createClass(AES256Cipher, [{\r\n    key: \"_expandKey\",\r\n    value: function _expandKey(cipherKey) {\r\n      var b = 240;\r\n      var s = this._s;\r\n      var result = new Uint8Array(b);\r\n      result.set(cipherKey);\r\n      var r = 1;\r\n      var t1, t2, t3, t4;\r\n\r\n      for (var j = 32, i = 1; j < b; ++i) {\r\n        if (j % 32 === 16) {\r\n          t1 = s[t1];\r\n          t2 = s[t2];\r\n          t3 = s[t3];\r\n          t4 = s[t4];\r\n        } else if (j % 32 === 0) {\r\n          t1 = result[j - 3];\r\n          t2 = result[j - 2];\r\n          t3 = result[j - 1];\r\n          t4 = result[j - 4];\r\n          t1 = s[t1];\r\n          t2 = s[t2];\r\n          t3 = s[t3];\r\n          t4 = s[t4];\r\n          t1 = t1 ^ r;\r\n\r\n          if ((r <<= 1) >= 256) {\r\n            r = (r ^ 0x1b) & 0xff;\r\n          }\r\n        }\r\n\r\n        for (var n = 0; n < 4; ++n) {\r\n          result[j] = t1 ^= result[j - 32];\r\n          j++;\r\n          result[j] = t2 ^= result[j - 32];\r\n          j++;\r\n          result[j] = t3 ^= result[j - 32];\r\n          j++;\r\n          result[j] = t4 ^= result[j - 32];\r\n          j++;\r\n        }\r\n      }\r\n\r\n      return result;\r\n    }\r\n  }]);\r\n\r\n  return AES256Cipher;\r\n}(AESBaseCipher);\r\n\r\nexports.AES256Cipher = AES256Cipher;\r\n\r\nvar PDF17 = function PDF17Closure() {\r\n  function compareByteArrays(array1, array2) {\r\n    if (array1.length !== array2.length) {\r\n      return false;\r\n    }\r\n\r\n    for (var i = 0; i < array1.length; i++) {\r\n      if (array1[i] !== array2[i]) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  function PDF17() {}\r\n\r\n  PDF17.prototype = {\r\n    checkOwnerPassword: function PDF17_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {\r\n      var hashData = new Uint8Array(password.length + 56);\r\n      hashData.set(password, 0);\r\n      hashData.set(ownerValidationSalt, password.length);\r\n      hashData.set(userBytes, password.length + ownerValidationSalt.length);\r\n      var result = calculateSHA256(hashData, 0, hashData.length);\r\n      return compareByteArrays(result, ownerPassword);\r\n    },\r\n    checkUserPassword: function PDF17_checkUserPassword(password, userValidationSalt, userPassword) {\r\n      var hashData = new Uint8Array(password.length + 8);\r\n      hashData.set(password, 0);\r\n      hashData.set(userValidationSalt, password.length);\r\n      var result = calculateSHA256(hashData, 0, hashData.length);\r\n      return compareByteArrays(result, userPassword);\r\n    },\r\n    getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {\r\n      var hashData = new Uint8Array(password.length + 56);\r\n      hashData.set(password, 0);\r\n      hashData.set(ownerKeySalt, password.length);\r\n      hashData.set(userBytes, password.length + ownerKeySalt.length);\r\n      var key = calculateSHA256(hashData, 0, hashData.length);\r\n      var cipher = new AES256Cipher(key);\r\n      return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));\r\n    },\r\n    getUserKey: function PDF17_getUserKey(password, userKeySalt, userEncryption) {\r\n      var hashData = new Uint8Array(password.length + 8);\r\n      hashData.set(password, 0);\r\n      hashData.set(userKeySalt, password.length);\r\n      var key = calculateSHA256(hashData, 0, hashData.length);\r\n      var cipher = new AES256Cipher(key);\r\n      return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));\r\n    }\r\n  };\r\n  return PDF17;\r\n}();\r\n\r\nexports.PDF17 = PDF17;\r\n\r\nvar PDF20 = function PDF20Closure() {\r\n  function concatArrays(array1, array2) {\r\n    var t = new Uint8Array(array1.length + array2.length);\r\n    t.set(array1, 0);\r\n    t.set(array2, array1.length);\r\n    return t;\r\n  }\r\n\r\n  function calculatePDF20Hash(password, input, userBytes) {\r\n    var k = calculateSHA256(input, 0, input.length).subarray(0, 32);\r\n    var e = [0];\r\n    var i = 0;\r\n\r\n    while (i < 64 || e[e.length - 1] > i - 32) {\r\n      var arrayLength = password.length + k.length + userBytes.length;\r\n      var k1 = new Uint8Array(arrayLength * 64);\r\n      var array = concatArrays(password, k);\r\n      array = concatArrays(array, userBytes);\r\n\r\n      for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) {\r\n        k1.set(array, pos);\r\n      }\r\n\r\n      var cipher = new AES128Cipher(k.subarray(0, 16));\r\n      e = cipher.encrypt(k1, k.subarray(16, 32));\r\n      var remainder = 0;\r\n\r\n      for (var z = 0; z < 16; z++) {\r\n        remainder *= 256 % 3;\r\n        remainder %= 3;\r\n        remainder += (e[z] >>> 0) % 3;\r\n        remainder %= 3;\r\n      }\r\n\r\n      if (remainder === 0) {\r\n        k = calculateSHA256(e, 0, e.length);\r\n      } else if (remainder === 1) {\r\n        k = calculateSHA384(e, 0, e.length);\r\n      } else if (remainder === 2) {\r\n        k = calculateSHA512(e, 0, e.length);\r\n      }\r\n\r\n      i++;\r\n    }\r\n\r\n    return k.subarray(0, 32);\r\n  }\r\n\r\n  function PDF20() {}\r\n\r\n  function compareByteArrays(array1, array2) {\r\n    if (array1.length !== array2.length) {\r\n      return false;\r\n    }\r\n\r\n    for (var i = 0; i < array1.length; i++) {\r\n      if (array1[i] !== array2[i]) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  PDF20.prototype = {\r\n    hash: function PDF20_hash(password, concatBytes, userBytes) {\r\n      return calculatePDF20Hash(password, concatBytes, userBytes);\r\n    },\r\n    checkOwnerPassword: function PDF20_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {\r\n      var hashData = new Uint8Array(password.length + 56);\r\n      hashData.set(password, 0);\r\n      hashData.set(ownerValidationSalt, password.length);\r\n      hashData.set(userBytes, password.length + ownerValidationSalt.length);\r\n      var result = calculatePDF20Hash(password, hashData, userBytes);\r\n      return compareByteArrays(result, ownerPassword);\r\n    },\r\n    checkUserPassword: function PDF20_checkUserPassword(password, userValidationSalt, userPassword) {\r\n      var hashData = new Uint8Array(password.length + 8);\r\n      hashData.set(password, 0);\r\n      hashData.set(userValidationSalt, password.length);\r\n      var result = calculatePDF20Hash(password, hashData, []);\r\n      return compareByteArrays(result, userPassword);\r\n    },\r\n    getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {\r\n      var hashData = new Uint8Array(password.length + 56);\r\n      hashData.set(password, 0);\r\n      hashData.set(ownerKeySalt, password.length);\r\n      hashData.set(userBytes, password.length + ownerKeySalt.length);\r\n      var key = calculatePDF20Hash(password, hashData, userBytes);\r\n      var cipher = new AES256Cipher(key);\r\n      return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));\r\n    },\r\n    getUserKey: function PDF20_getUserKey(password, userKeySalt, userEncryption) {\r\n      var hashData = new Uint8Array(password.length + 8);\r\n      hashData.set(password, 0);\r\n      hashData.set(userKeySalt, password.length);\r\n      var key = calculatePDF20Hash(password, hashData, []);\r\n      var cipher = new AES256Cipher(key);\r\n      return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));\r\n    }\r\n  };\r\n  return PDF20;\r\n}();\r\n\r\nexports.PDF20 = PDF20;\r\n\r\nvar CipherTransform = function CipherTransformClosure() {\r\n  function CipherTransform(stringCipherConstructor, streamCipherConstructor) {\r\n    this.StringCipherConstructor = stringCipherConstructor;\r\n    this.StreamCipherConstructor = streamCipherConstructor;\r\n  }\r\n\r\n  CipherTransform.prototype = {\r\n    createStream: function CipherTransform_createStream(stream, length) {\r\n      var cipher = new this.StreamCipherConstructor();\r\n      return new _stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) {\r\n        return cipher.decryptBlock(data, finalize);\r\n      });\r\n    },\r\n    decryptString: function CipherTransform_decryptString(s) {\r\n      var cipher = new this.StringCipherConstructor();\r\n      var data = (0, _util.stringToBytes)(s);\r\n      data = cipher.decryptBlock(data, true);\r\n      return (0, _util.bytesToString)(data);\r\n    },\r\n    encryptString: function CipherTransform_encryptString(s) {\r\n      var cipher = new this.StringCipherConstructor();\r\n\r\n      if (cipher instanceof AESBaseCipher) {\r\n        var strLen = s.length;\r\n        var pad = 16 - strLen % 16;\r\n\r\n        if (pad !== 16) {\r\n          s = s.padEnd(16 * Math.ceil(strLen / 16), String.fromCharCode(pad));\r\n        }\r\n\r\n        var iv = new Uint8Array(16);\r\n\r\n        if (typeof crypto !== \"undefined\") {\r\n          crypto.getRandomValues(iv);\r\n        } else {\r\n          for (var i = 0; i < 16; i++) {\r\n            iv[i] = Math.floor(256 * Math.random());\r\n          }\r\n        }\r\n\r\n        var _data = (0, _util.stringToBytes)(s);\r\n\r\n        _data = cipher.encrypt(_data, iv);\r\n        var buf = new Uint8Array(16 + _data.length);\r\n        buf.set(iv);\r\n        buf.set(_data, 16);\r\n        return (0, _util.bytesToString)(buf);\r\n      }\r\n\r\n      var data = (0, _util.stringToBytes)(s);\r\n      data = cipher.encrypt(data);\r\n      return (0, _util.bytesToString)(data);\r\n    }\r\n  };\r\n  return CipherTransform;\r\n}();\r\n\r\nvar CipherTransformFactory = function CipherTransformFactoryClosure() {\r\n  var defaultPasswordBytes = new Uint8Array([0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41, 0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08, 0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80, 0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]);\r\n\r\n  function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) {\r\n    if (password) {\r\n      var passwordLength = Math.min(127, password.length);\r\n      password = password.subarray(0, passwordLength);\r\n    } else {\r\n      password = [];\r\n    }\r\n\r\n    var pdfAlgorithm;\r\n\r\n    if (revision === 6) {\r\n      pdfAlgorithm = new PDF20();\r\n    } else {\r\n      pdfAlgorithm = new PDF17();\r\n    }\r\n\r\n    if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) {\r\n      return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption);\r\n    } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) {\r\n      return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption);\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) {\r\n    var hashDataSize = 40 + ownerPassword.length + fileId.length;\r\n    var hashData = new Uint8Array(hashDataSize),\r\n        i = 0,\r\n        j,\r\n        n;\r\n\r\n    if (password) {\r\n      n = Math.min(32, password.length);\r\n\r\n      for (; i < n; ++i) {\r\n        hashData[i] = password[i];\r\n      }\r\n    }\r\n\r\n    j = 0;\r\n\r\n    while (i < 32) {\r\n      hashData[i++] = defaultPasswordBytes[j++];\r\n    }\r\n\r\n    for (j = 0, n = ownerPassword.length; j < n; ++j) {\r\n      hashData[i++] = ownerPassword[j];\r\n    }\r\n\r\n    hashData[i++] = flags & 0xff;\r\n    hashData[i++] = flags >> 8 & 0xff;\r\n    hashData[i++] = flags >> 16 & 0xff;\r\n    hashData[i++] = flags >>> 24 & 0xff;\r\n\r\n    for (j = 0, n = fileId.length; j < n; ++j) {\r\n      hashData[i++] = fileId[j];\r\n    }\r\n\r\n    if (revision >= 4 && !encryptMetadata) {\r\n      hashData[i++] = 0xff;\r\n      hashData[i++] = 0xff;\r\n      hashData[i++] = 0xff;\r\n      hashData[i++] = 0xff;\r\n    }\r\n\r\n    var hash = calculateMD5(hashData, 0, i);\r\n    var keyLengthInBytes = keyLength >> 3;\r\n\r\n    if (revision >= 3) {\r\n      for (j = 0; j < 50; ++j) {\r\n        hash = calculateMD5(hash, 0, keyLengthInBytes);\r\n      }\r\n    }\r\n\r\n    var encryptionKey = hash.subarray(0, keyLengthInBytes);\r\n    var cipher, checkData;\r\n\r\n    if (revision >= 3) {\r\n      for (i = 0; i < 32; ++i) {\r\n        hashData[i] = defaultPasswordBytes[i];\r\n      }\r\n\r\n      for (j = 0, n = fileId.length; j < n; ++j) {\r\n        hashData[i++] = fileId[j];\r\n      }\r\n\r\n      cipher = new ARCFourCipher(encryptionKey);\r\n      checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i));\r\n      n = encryptionKey.length;\r\n      var derivedKey = new Uint8Array(n),\r\n          k;\r\n\r\n      for (j = 1; j <= 19; ++j) {\r\n        for (k = 0; k < n; ++k) {\r\n          derivedKey[k] = encryptionKey[k] ^ j;\r\n        }\r\n\r\n        cipher = new ARCFourCipher(derivedKey);\r\n        checkData = cipher.encryptBlock(checkData);\r\n      }\r\n\r\n      for (j = 0, n = checkData.length; j < n; ++j) {\r\n        if (userPassword[j] !== checkData[j]) {\r\n          return null;\r\n        }\r\n      }\r\n    } else {\r\n      cipher = new ARCFourCipher(encryptionKey);\r\n      checkData = cipher.encryptBlock(defaultPasswordBytes);\r\n\r\n      for (j = 0, n = checkData.length; j < n; ++j) {\r\n        if (userPassword[j] !== checkData[j]) {\r\n          return null;\r\n        }\r\n      }\r\n    }\r\n\r\n    return encryptionKey;\r\n  }\r\n\r\n  function decodeUserPassword(password, ownerPassword, revision, keyLength) {\r\n    var hashData = new Uint8Array(32),\r\n        i = 0,\r\n        j,\r\n        n;\r\n    n = Math.min(32, password.length);\r\n\r\n    for (; i < n; ++i) {\r\n      hashData[i] = password[i];\r\n    }\r\n\r\n    j = 0;\r\n\r\n    while (i < 32) {\r\n      hashData[i++] = defaultPasswordBytes[j++];\r\n    }\r\n\r\n    var hash = calculateMD5(hashData, 0, i);\r\n    var keyLengthInBytes = keyLength >> 3;\r\n\r\n    if (revision >= 3) {\r\n      for (j = 0; j < 50; ++j) {\r\n        hash = calculateMD5(hash, 0, hash.length);\r\n      }\r\n    }\r\n\r\n    var cipher, userPassword;\r\n\r\n    if (revision >= 3) {\r\n      userPassword = ownerPassword;\r\n      var derivedKey = new Uint8Array(keyLengthInBytes),\r\n          k;\r\n\r\n      for (j = 19; j >= 0; j--) {\r\n        for (k = 0; k < keyLengthInBytes; ++k) {\r\n          derivedKey[k] = hash[k] ^ j;\r\n        }\r\n\r\n        cipher = new ARCFourCipher(derivedKey);\r\n        userPassword = cipher.encryptBlock(userPassword);\r\n      }\r\n    } else {\r\n      cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes));\r\n      userPassword = cipher.encryptBlock(ownerPassword);\r\n    }\r\n\r\n    return userPassword;\r\n  }\r\n\r\n  var identityName = _primitives.Name.get(\"Identity\");\r\n\r\n  function CipherTransformFactory(dict, fileId, password) {\r\n    var filter = dict.get(\"Filter\");\r\n\r\n    if (!(0, _primitives.isName)(filter, \"Standard\")) {\r\n      throw new _util.FormatError(\"unknown encryption method\");\r\n    }\r\n\r\n    this.dict = dict;\r\n    var algorithm = dict.get(\"V\");\r\n\r\n    if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) {\r\n      throw new _util.FormatError(\"unsupported encryption algorithm\");\r\n    }\r\n\r\n    this.algorithm = algorithm;\r\n    var keyLength = dict.get(\"Length\");\r\n\r\n    if (!keyLength) {\r\n      if (algorithm <= 3) {\r\n        keyLength = 40;\r\n      } else {\r\n        var cfDict = dict.get(\"CF\");\r\n        var streamCryptoName = dict.get(\"StmF\");\r\n\r\n        if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) {\r\n          cfDict.suppressEncryption = true;\r\n          var handlerDict = cfDict.get(streamCryptoName.name);\r\n          keyLength = handlerDict && handlerDict.get(\"Length\") || 128;\r\n\r\n          if (keyLength < 40) {\r\n            keyLength <<= 3;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) {\r\n      throw new _util.FormatError(\"invalid key length\");\r\n    }\r\n\r\n    var ownerPassword = (0, _util.stringToBytes)(dict.get(\"O\")).subarray(0, 32);\r\n    var userPassword = (0, _util.stringToBytes)(dict.get(\"U\")).subarray(0, 32);\r\n    var flags = dict.get(\"P\");\r\n    var revision = dict.get(\"R\");\r\n    var encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get(\"EncryptMetadata\") !== false;\r\n    this.encryptMetadata = encryptMetadata;\r\n    var fileIdBytes = (0, _util.stringToBytes)(fileId);\r\n    var passwordBytes;\r\n\r\n    if (password) {\r\n      if (revision === 6) {\r\n        try {\r\n          password = (0, _util.utf8StringToString)(password);\r\n        } catch (ex) {\r\n          (0, _util.warn)(\"CipherTransformFactory: \" + \"Unable to convert UTF8 encoded password.\");\r\n        }\r\n      }\r\n\r\n      passwordBytes = (0, _util.stringToBytes)(password);\r\n    }\r\n\r\n    var encryptionKey;\r\n\r\n    if (algorithm !== 5) {\r\n      encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);\r\n    } else {\r\n      var ownerValidationSalt = (0, _util.stringToBytes)(dict.get(\"O\")).subarray(32, 40);\r\n      var ownerKeySalt = (0, _util.stringToBytes)(dict.get(\"O\")).subarray(40, 48);\r\n      var uBytes = (0, _util.stringToBytes)(dict.get(\"U\")).subarray(0, 48);\r\n      var userValidationSalt = (0, _util.stringToBytes)(dict.get(\"U\")).subarray(32, 40);\r\n      var userKeySalt = (0, _util.stringToBytes)(dict.get(\"U\")).subarray(40, 48);\r\n      var ownerEncryption = (0, _util.stringToBytes)(dict.get(\"OE\"));\r\n      var userEncryption = (0, _util.stringToBytes)(dict.get(\"UE\"));\r\n      var perms = (0, _util.stringToBytes)(dict.get(\"Perms\"));\r\n      encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms);\r\n    }\r\n\r\n    if (!encryptionKey && !password) {\r\n      throw new _util.PasswordException(\"No password given\", _util.PasswordResponses.NEED_PASSWORD);\r\n    } else if (!encryptionKey && password) {\r\n      var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength);\r\n      encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);\r\n    }\r\n\r\n    if (!encryptionKey) {\r\n      throw new _util.PasswordException(\"Incorrect Password\", _util.PasswordResponses.INCORRECT_PASSWORD);\r\n    }\r\n\r\n    this.encryptionKey = encryptionKey;\r\n\r\n    if (algorithm >= 4) {\r\n      var cf = dict.get(\"CF\");\r\n\r\n      if ((0, _primitives.isDict)(cf)) {\r\n        cf.suppressEncryption = true;\r\n      }\r\n\r\n      this.cf = cf;\r\n      this.stmf = dict.get(\"StmF\") || identityName;\r\n      this.strf = dict.get(\"StrF\") || identityName;\r\n      this.eff = dict.get(\"EFF\") || this.stmf;\r\n    }\r\n  }\r\n\r\n  function buildObjectKey(num, gen, encryptionKey, isAes) {\r\n    var key = new Uint8Array(encryptionKey.length + 9),\r\n        i,\r\n        n;\r\n\r\n    for (i = 0, n = encryptionKey.length; i < n; ++i) {\r\n      key[i] = encryptionKey[i];\r\n    }\r\n\r\n    key[i++] = num & 0xff;\r\n    key[i++] = num >> 8 & 0xff;\r\n    key[i++] = num >> 16 & 0xff;\r\n    key[i++] = gen & 0xff;\r\n    key[i++] = gen >> 8 & 0xff;\r\n\r\n    if (isAes) {\r\n      key[i++] = 0x73;\r\n      key[i++] = 0x41;\r\n      key[i++] = 0x6c;\r\n      key[i++] = 0x54;\r\n    }\r\n\r\n    var hash = calculateMD5(key, 0, i);\r\n    return hash.subarray(0, Math.min(encryptionKey.length + 5, 16));\r\n  }\r\n\r\n  function buildCipherConstructor(cf, name, num, gen, key) {\r\n    if (!(0, _primitives.isName)(name)) {\r\n      throw new _util.FormatError(\"Invalid crypt filter name.\");\r\n    }\r\n\r\n    var cryptFilter = cf.get(name.name);\r\n    var cfm;\r\n\r\n    if (cryptFilter !== null && cryptFilter !== undefined) {\r\n      cfm = cryptFilter.get(\"CFM\");\r\n    }\r\n\r\n    if (!cfm || cfm.name === \"None\") {\r\n      return function cipherTransformFactoryBuildCipherConstructorNone() {\r\n        return new NullCipher();\r\n      };\r\n    }\r\n\r\n    if (cfm.name === \"V2\") {\r\n      return function cipherTransformFactoryBuildCipherConstructorV2() {\r\n        return new ARCFourCipher(buildObjectKey(num, gen, key, false));\r\n      };\r\n    }\r\n\r\n    if (cfm.name === \"AESV2\") {\r\n      return function cipherTransformFactoryBuildCipherConstructorAESV2() {\r\n        return new AES128Cipher(buildObjectKey(num, gen, key, true));\r\n      };\r\n    }\r\n\r\n    if (cfm.name === \"AESV3\") {\r\n      return function cipherTransformFactoryBuildCipherConstructorAESV3() {\r\n        return new AES256Cipher(key);\r\n      };\r\n    }\r\n\r\n    throw new _util.FormatError(\"Unknown crypto method\");\r\n  }\r\n\r\n  CipherTransformFactory.prototype = {\r\n    createCipherTransform: function CipherTransformFactory_createCipherTransform(num, gen) {\r\n      if (this.algorithm === 4 || this.algorithm === 5) {\r\n        return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey));\r\n      }\r\n\r\n      var key = buildObjectKey(num, gen, this.encryptionKey, false);\r\n\r\n      var cipherConstructor = function buildCipherCipherConstructor() {\r\n        return new ARCFourCipher(key);\r\n      };\r\n\r\n      return new CipherTransform(cipherConstructor, cipherConstructor);\r\n    }\r\n  };\r\n  return CipherTransformFactory;\r\n}();\r\n\r\nexports.CipherTransformFactory = CipherTransformFactory;\r\n\r\n/***/ }),\r\n/* 153 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.ColorSpace = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) {\r\n  var COMPONENTS = 3;\r\n  alpha01 = alpha01 !== 1 ? 0 : alpha01;\r\n  var xRatio = w1 / w2;\r\n  var yRatio = h1 / h2;\r\n  var newIndex = 0,\r\n      oldIndex;\r\n  var xScaled = new Uint16Array(w2);\r\n  var w1Scanline = w1 * COMPONENTS;\r\n\r\n  for (var i = 0; i < w2; i++) {\r\n    xScaled[i] = Math.floor(i * xRatio) * COMPONENTS;\r\n  }\r\n\r\n  for (var _i = 0; _i < h2; _i++) {\r\n    var py = Math.floor(_i * yRatio) * w1Scanline;\r\n\r\n    for (var j = 0; j < w2; j++) {\r\n      oldIndex = py + xScaled[j];\r\n      dest[newIndex++] = src[oldIndex++];\r\n      dest[newIndex++] = src[oldIndex++];\r\n      dest[newIndex++] = src[oldIndex++];\r\n      newIndex += alpha01;\r\n    }\r\n  }\r\n}\r\n\r\nvar ColorSpace = /*#__PURE__*/function () {\r\n  function ColorSpace(name, numComps) {\r\n    _classCallCheck(this, ColorSpace);\r\n\r\n    if (this.constructor === ColorSpace) {\r\n      (0, _util.unreachable)(\"Cannot initialize ColorSpace.\");\r\n    }\r\n\r\n    this.name = name;\r\n    this.numComps = numComps;\r\n  }\r\n\r\n  _createClass(ColorSpace, [{\r\n    key: \"getRgb\",\r\n    value: function getRgb(src, srcOffset) {\r\n      var rgb = new Uint8ClampedArray(3);\r\n      this.getRgbItem(src, srcOffset, rgb, 0);\r\n      return rgb;\r\n    }\r\n  }, {\r\n    key: \"getRgbItem\",\r\n    value: function getRgbItem(src, srcOffset, dest, destOffset) {\r\n      (0, _util.unreachable)(\"Should not call ColorSpace.getRgbItem\");\r\n    }\r\n  }, {\r\n    key: \"getRgbBuffer\",\r\n    value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\r\n      (0, _util.unreachable)(\"Should not call ColorSpace.getRgbBuffer\");\r\n    }\r\n  }, {\r\n    key: \"getOutputLength\",\r\n    value: function getOutputLength(inputLength, alpha01) {\r\n      (0, _util.unreachable)(\"Should not call ColorSpace.getOutputLength\");\r\n    }\r\n  }, {\r\n    key: \"isPassthrough\",\r\n    value: function isPassthrough(bits) {\r\n      return false;\r\n    }\r\n  }, {\r\n    key: \"isDefaultDecode\",\r\n    value: function isDefaultDecode(decodeMap, bpc) {\r\n      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);\r\n    }\r\n  }, {\r\n    key: \"fillRgb\",\r\n    value: function fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) {\r\n      var count = originalWidth * originalHeight;\r\n      var rgbBuf = null;\r\n      var numComponentColors = 1 << bpc;\r\n      var needsResizing = originalHeight !== height || originalWidth !== width;\r\n\r\n      if (this.isPassthrough(bpc)) {\r\n        rgbBuf = comps;\r\n      } else if (this.numComps === 1 && count > numComponentColors && this.name !== \"DeviceGray\" && this.name !== \"DeviceRGB\") {\r\n        var allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors);\r\n\r\n        for (var i = 0; i < numComponentColors; i++) {\r\n          allColors[i] = i;\r\n        }\r\n\r\n        var colorMap = new Uint8ClampedArray(numComponentColors * 3);\r\n        this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0);\r\n\r\n        if (!needsResizing) {\r\n          var destPos = 0;\r\n\r\n          for (var _i2 = 0; _i2 < count; ++_i2) {\r\n            var key = comps[_i2] * 3;\r\n            dest[destPos++] = colorMap[key];\r\n            dest[destPos++] = colorMap[key + 1];\r\n            dest[destPos++] = colorMap[key + 2];\r\n            destPos += alpha01;\r\n          }\r\n        } else {\r\n          rgbBuf = new Uint8Array(count * 3);\r\n          var rgbPos = 0;\r\n\r\n          for (var _i3 = 0; _i3 < count; ++_i3) {\r\n            var _key = comps[_i3] * 3;\r\n\r\n            rgbBuf[rgbPos++] = colorMap[_key];\r\n            rgbBuf[rgbPos++] = colorMap[_key + 1];\r\n            rgbBuf[rgbPos++] = colorMap[_key + 2];\r\n          }\r\n        }\r\n      } else {\r\n        if (!needsResizing) {\r\n          this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01);\r\n        } else {\r\n          rgbBuf = new Uint8ClampedArray(count * 3);\r\n          this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0);\r\n        }\r\n      }\r\n\r\n      if (rgbBuf) {\r\n        if (needsResizing) {\r\n          resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01);\r\n        } else {\r\n          var _destPos = 0,\r\n              _rgbPos = 0;\r\n\r\n          for (var _i4 = 0, ii = width * actualHeight; _i4 < ii; _i4++) {\r\n            dest[_destPos++] = rgbBuf[_rgbPos++];\r\n            dest[_destPos++] = rgbBuf[_rgbPos++];\r\n            dest[_destPos++] = rgbBuf[_rgbPos++];\r\n            _destPos += alpha01;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"usesZeroToOneRange\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"usesZeroToOneRange\", true);\r\n    }\r\n  }], [{\r\n    key: \"_cache\",\r\n    value: function _cache(cacheKey, xref, localColorSpaceCache, parsedColorSpace) {\r\n      if (!localColorSpaceCache) {\r\n        throw new Error('ColorSpace._cache - expected \"localColorSpaceCache\" argument.');\r\n      }\r\n\r\n      if (!parsedColorSpace) {\r\n        throw new Error('ColorSpace._cache - expected \"parsedColorSpace\" argument.');\r\n      }\r\n\r\n      var csName, csRef;\r\n\r\n      if (cacheKey instanceof _primitives.Ref) {\r\n        csRef = cacheKey;\r\n        cacheKey = xref.fetch(cacheKey);\r\n      }\r\n\r\n      if (cacheKey instanceof _primitives.Name) {\r\n        csName = cacheKey.name;\r\n      }\r\n\r\n      if (csName || csRef) {\r\n        localColorSpaceCache.set(csName, csRef, parsedColorSpace);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getCached\",\r\n    value: function getCached(cacheKey, xref, localColorSpaceCache) {\r\n      if (!localColorSpaceCache) {\r\n        throw new Error('ColorSpace.getCached - expected \"localColorSpaceCache\" argument.');\r\n      }\r\n\r\n      if (cacheKey instanceof _primitives.Ref) {\r\n        var localColorSpace = localColorSpaceCache.getByRef(cacheKey);\r\n\r\n        if (localColorSpace) {\r\n          return localColorSpace;\r\n        }\r\n\r\n        try {\r\n          cacheKey = xref.fetch(cacheKey);\r\n        } catch (ex) {\r\n          if (ex instanceof _core_utils.MissingDataException) {\r\n            throw ex;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (cacheKey instanceof _primitives.Name) {\r\n        var _localColorSpace = localColorSpaceCache.getByName(cacheKey.name);\r\n\r\n        if (_localColorSpace) {\r\n          return _localColorSpace;\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n  }, {\r\n    key: \"parseAsync\",\r\n    value: function () {\r\n      var _parseAsync = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(_ref) {\r\n        var cs, xref, _ref$resources, resources, pdfFunctionFactory, localColorSpaceCache, parsedColorSpace;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                cs = _ref.cs, xref = _ref.xref, _ref$resources = _ref.resources, resources = _ref$resources === void 0 ? null : _ref$resources, pdfFunctionFactory = _ref.pdfFunctionFactory, localColorSpaceCache = _ref.localColorSpaceCache;\r\n                parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory);\r\n\r\n                this._cache(cs, xref, localColorSpaceCache, parsedColorSpace);\r\n\r\n                return _context.abrupt(\"return\", parsedColorSpace);\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function parseAsync(_x) {\r\n        return _parseAsync.apply(this, arguments);\r\n      }\r\n\r\n      return parseAsync;\r\n    }()\r\n  }, {\r\n    key: \"parse\",\r\n    value: function parse(_ref2) {\r\n      var cs = _ref2.cs,\r\n          xref = _ref2.xref,\r\n          _ref2$resources = _ref2.resources,\r\n          resources = _ref2$resources === void 0 ? null : _ref2$resources,\r\n          pdfFunctionFactory = _ref2.pdfFunctionFactory,\r\n          localColorSpaceCache = _ref2.localColorSpaceCache;\r\n      var cachedColorSpace = this.getCached(cs, xref, localColorSpaceCache);\r\n\r\n      if (cachedColorSpace) {\r\n        return cachedColorSpace;\r\n      }\r\n\r\n      var parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory);\r\n\r\n      this._cache(cs, xref, localColorSpaceCache, parsedColorSpace);\r\n\r\n      return parsedColorSpace;\r\n    }\r\n  }, {\r\n    key: \"_parse\",\r\n    value: function _parse(cs, xref) {\r\n      var resources = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\r\n      var pdfFunctionFactory = arguments.length > 3 ? arguments[3] : undefined;\r\n      cs = xref.fetchIfRef(cs);\r\n\r\n      if ((0, _primitives.isName)(cs)) {\r\n        switch (cs.name) {\r\n          case \"DeviceGray\":\r\n          case \"G\":\r\n            return this.singletons.gray;\r\n\r\n          case \"DeviceRGB\":\r\n          case \"RGB\":\r\n            return this.singletons.rgb;\r\n\r\n          case \"DeviceCMYK\":\r\n          case \"CMYK\":\r\n            return this.singletons.cmyk;\r\n\r\n          case \"Pattern\":\r\n            return new PatternCS(null);\r\n\r\n          default:\r\n            if ((0, _primitives.isDict)(resources)) {\r\n              var colorSpaces = resources.get(\"ColorSpace\");\r\n\r\n              if ((0, _primitives.isDict)(colorSpaces)) {\r\n                var resourcesCS = colorSpaces.get(cs.name);\r\n\r\n                if (resourcesCS) {\r\n                  if ((0, _primitives.isName)(resourcesCS)) {\r\n                    return this._parse(resourcesCS, xref, resources, pdfFunctionFactory);\r\n                  }\r\n\r\n                  cs = resourcesCS;\r\n                  break;\r\n                }\r\n              }\r\n            }\r\n\r\n            throw new _util.FormatError(\"Unrecognized ColorSpace: \".concat(cs.name));\r\n        }\r\n      }\r\n\r\n      if (Array.isArray(cs)) {\r\n        var mode = xref.fetchIfRef(cs[0]).name;\r\n        var params, numComps, baseCS, whitePoint, blackPoint, gamma;\r\n\r\n        switch (mode) {\r\n          case \"DeviceGray\":\r\n          case \"G\":\r\n            return this.singletons.gray;\r\n\r\n          case \"DeviceRGB\":\r\n          case \"RGB\":\r\n            return this.singletons.rgb;\r\n\r\n          case \"DeviceCMYK\":\r\n          case \"CMYK\":\r\n            return this.singletons.cmyk;\r\n\r\n          case \"CalGray\":\r\n            params = xref.fetchIfRef(cs[1]);\r\n            whitePoint = params.getArray(\"WhitePoint\");\r\n            blackPoint = params.getArray(\"BlackPoint\");\r\n            gamma = params.get(\"Gamma\");\r\n            return new CalGrayCS(whitePoint, blackPoint, gamma);\r\n\r\n          case \"CalRGB\":\r\n            params = xref.fetchIfRef(cs[1]);\r\n            whitePoint = params.getArray(\"WhitePoint\");\r\n            blackPoint = params.getArray(\"BlackPoint\");\r\n            gamma = params.getArray(\"Gamma\");\r\n            var matrix = params.getArray(\"Matrix\");\r\n            return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);\r\n\r\n          case \"ICCBased\":\r\n            var stream = xref.fetchIfRef(cs[1]);\r\n            var dict = stream.dict;\r\n            numComps = dict.get(\"N\");\r\n            var alt = dict.get(\"Alternate\");\r\n\r\n            if (alt) {\r\n              var altCS = this._parse(alt, xref, resources, pdfFunctionFactory);\r\n\r\n              if (altCS.numComps === numComps) {\r\n                return altCS;\r\n              }\r\n\r\n              (0, _util.warn)(\"ICCBased color space: Ignoring incorrect /Alternate entry.\");\r\n            }\r\n\r\n            if (numComps === 1) {\r\n              return this.singletons.gray;\r\n            } else if (numComps === 3) {\r\n              return this.singletons.rgb;\r\n            } else if (numComps === 4) {\r\n              return this.singletons.cmyk;\r\n            }\r\n\r\n            break;\r\n\r\n          case \"Pattern\":\r\n            baseCS = cs[1] || null;\r\n\r\n            if (baseCS) {\r\n              baseCS = this._parse(baseCS, xref, resources, pdfFunctionFactory);\r\n            }\r\n\r\n            return new PatternCS(baseCS);\r\n\r\n          case \"Indexed\":\r\n          case \"I\":\r\n            baseCS = this._parse(cs[1], xref, resources, pdfFunctionFactory);\r\n            var hiVal = xref.fetchIfRef(cs[2]) + 1;\r\n            var lookup = xref.fetchIfRef(cs[3]);\r\n            return new IndexedCS(baseCS, hiVal, lookup);\r\n\r\n          case \"Separation\":\r\n          case \"DeviceN\":\r\n            var name = xref.fetchIfRef(cs[1]);\r\n            numComps = Array.isArray(name) ? name.length : 1;\r\n            baseCS = this._parse(cs[2], xref, resources, pdfFunctionFactory);\r\n            var tintFn = pdfFunctionFactory.create(cs[3]);\r\n            return new AlternateCS(numComps, baseCS, tintFn);\r\n\r\n          case \"Lab\":\r\n            params = xref.fetchIfRef(cs[1]);\r\n            whitePoint = params.getArray(\"WhitePoint\");\r\n            blackPoint = params.getArray(\"BlackPoint\");\r\n            var range = params.getArray(\"Range\");\r\n            return new LabCS(whitePoint, blackPoint, range);\r\n\r\n          default:\r\n            throw new _util.FormatError(\"Unimplemented ColorSpace object: \".concat(mode));\r\n        }\r\n      }\r\n\r\n      throw new _util.FormatError(\"Unrecognized ColorSpace object: \".concat(cs));\r\n    }\r\n  }, {\r\n    key: \"isDefaultDecode\",\r\n    value: function isDefaultDecode(decode, numComps) {\r\n      if (!Array.isArray(decode)) {\r\n        return true;\r\n      }\r\n\r\n      if (numComps * 2 !== decode.length) {\r\n        (0, _util.warn)(\"The decode map is not the correct length\");\r\n        return true;\r\n      }\r\n\r\n      for (var i = 0, ii = decode.length; i < ii; i += 2) {\r\n        if (decode[i] !== 0 || decode[i + 1] !== 1) {\r\n          return false;\r\n        }\r\n      }\r\n\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"singletons\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"singletons\", {\r\n        get gray() {\r\n          return (0, _util.shadow)(this, \"gray\", new DeviceGrayCS());\r\n        },\r\n\r\n        get rgb() {\r\n          return (0, _util.shadow)(this, \"rgb\", new DeviceRgbCS());\r\n        },\r\n\r\n        get cmyk() {\r\n          return (0, _util.shadow)(this, \"cmyk\", new DeviceCmykCS());\r\n        }\r\n\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return ColorSpace;\r\n}();\r\n\r\nexports.ColorSpace = ColorSpace;\r\n\r\nvar AlternateCS = /*#__PURE__*/function (_ColorSpace) {\r\n  _inherits(AlternateCS, _ColorSpace);\r\n\r\n  var _super = _createSuper(AlternateCS);\r\n\r\n  function AlternateCS(numComps, base, tintFn) {\r\n    var _this;\r\n\r\n    _classCallCheck(this, AlternateCS);\r\n\r\n    _this = _super.call(this, \"Alternate\", numComps);\r\n    _this.base = base;\r\n    _this.tintFn = tintFn;\r\n    _this.tmpBuf = new Float32Array(base.numComps);\r\n    return _this;\r\n  }\r\n\r\n  _createClass(AlternateCS, [{\r\n    key: \"getRgbItem\",\r\n    value: function getRgbItem(src, srcOffset, dest, destOffset) {\r\n      var tmpBuf = this.tmpBuf;\r\n      this.tintFn(src, srcOffset, tmpBuf, 0);\r\n      this.base.getRgbItem(tmpBuf, 0, dest, destOffset);\r\n    }\r\n  }, {\r\n    key: \"getRgbBuffer\",\r\n    value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\r\n      var tintFn = this.tintFn;\r\n      var base = this.base;\r\n      var scale = 1 / ((1 << bits) - 1);\r\n      var baseNumComps = base.numComps;\r\n      var usesZeroToOneRange = base.usesZeroToOneRange;\r\n      var isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0;\r\n      var pos = isPassthrough ? destOffset : 0;\r\n      var baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count);\r\n      var numComps = this.numComps;\r\n      var scaled = new Float32Array(numComps);\r\n      var tinted = new Float32Array(baseNumComps);\r\n      var i, j;\r\n\r\n      for (i = 0; i < count; i++) {\r\n        for (j = 0; j < numComps; j++) {\r\n          scaled[j] = src[srcOffset++] * scale;\r\n        }\r\n\r\n        tintFn(scaled, 0, tinted, 0);\r\n\r\n        if (usesZeroToOneRange) {\r\n          for (j = 0; j < baseNumComps; j++) {\r\n            baseBuf[pos++] = tinted[j] * 255;\r\n          }\r\n        } else {\r\n          base.getRgbItem(tinted, 0, baseBuf, pos);\r\n          pos += baseNumComps;\r\n        }\r\n      }\r\n\r\n      if (!isPassthrough) {\r\n        base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getOutputLength\",\r\n    value: function getOutputLength(inputLength, alpha01) {\r\n      return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01);\r\n    }\r\n  }]);\r\n\r\n  return AlternateCS;\r\n}(ColorSpace);\r\n\r\nvar PatternCS = /*#__PURE__*/function (_ColorSpace2) {\r\n  _inherits(PatternCS, _ColorSpace2);\r\n\r\n  var _super2 = _createSuper(PatternCS);\r\n\r\n  function PatternCS(baseCS) {\r\n    var _this2;\r\n\r\n    _classCallCheck(this, PatternCS);\r\n\r\n    _this2 = _super2.call(this, \"Pattern\", null);\r\n    _this2.base = baseCS;\r\n    return _this2;\r\n  }\r\n\r\n  _createClass(PatternCS, [{\r\n    key: \"isDefaultDecode\",\r\n    value: function isDefaultDecode(decodeMap, bpc) {\r\n      (0, _util.unreachable)(\"Should not call PatternCS.isDefaultDecode\");\r\n    }\r\n  }]);\r\n\r\n  return PatternCS;\r\n}(ColorSpace);\r\n\r\nvar IndexedCS = /*#__PURE__*/function (_ColorSpace3) {\r\n  _inherits(IndexedCS, _ColorSpace3);\r\n\r\n  var _super3 = _createSuper(IndexedCS);\r\n\r\n  function IndexedCS(base, highVal, lookup) {\r\n    var _this3;\r\n\r\n    _classCallCheck(this, IndexedCS);\r\n\r\n    _this3 = _super3.call(this, \"Indexed\", 1);\r\n    _this3.base = base;\r\n    _this3.highVal = highVal;\r\n    var length = base.numComps * highVal;\r\n    _this3.lookup = new Uint8Array(length);\r\n\r\n    if ((0, _primitives.isStream)(lookup)) {\r\n      var bytes = lookup.getBytes(length);\r\n\r\n      _this3.lookup.set(bytes);\r\n    } else if (typeof lookup === \"string\") {\r\n      for (var i = 0; i < length; ++i) {\r\n        _this3.lookup[i] = lookup.charCodeAt(i) & 0xff;\r\n      }\r\n    } else {\r\n      throw new _util.FormatError(\"IndexedCS - unrecognized lookup table: \".concat(lookup));\r\n    }\r\n\r\n    return _this3;\r\n  }\r\n\r\n  _createClass(IndexedCS, [{\r\n    key: \"getRgbItem\",\r\n    value: function getRgbItem(src, srcOffset, dest, destOffset) {\r\n      var numComps = this.base.numComps;\r\n      var start = src[srcOffset] * numComps;\r\n      this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0);\r\n    }\r\n  }, {\r\n    key: \"getRgbBuffer\",\r\n    value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\r\n      var base = this.base;\r\n      var numComps = base.numComps;\r\n      var outputDelta = base.getOutputLength(numComps, alpha01);\r\n      var lookup = this.lookup;\r\n\r\n      for (var i = 0; i < count; ++i) {\r\n        var lookupPos = src[srcOffset++] * numComps;\r\n        base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);\r\n        destOffset += outputDelta;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getOutputLength\",\r\n    value: function getOutputLength(inputLength, alpha01) {\r\n      return this.base.getOutputLength(inputLength * this.base.numComps, alpha01);\r\n    }\r\n  }, {\r\n    key: \"isDefaultDecode\",\r\n    value: function isDefaultDecode(decodeMap, bpc) {\r\n      if (!Array.isArray(decodeMap)) {\r\n        return true;\r\n      }\r\n\r\n      if (decodeMap.length !== 2) {\r\n        (0, _util.warn)(\"Decode map length is not correct\");\r\n        return true;\r\n      }\r\n\r\n      if (!Number.isInteger(bpc) || bpc < 1) {\r\n        (0, _util.warn)(\"Bits per component is not correct\");\r\n        return true;\r\n      }\r\n\r\n      return decodeMap[0] === 0 && decodeMap[1] === (1 << bpc) - 1;\r\n    }\r\n  }]);\r\n\r\n  return IndexedCS;\r\n}(ColorSpace);\r\n\r\nvar DeviceGrayCS = /*#__PURE__*/function (_ColorSpace4) {\r\n  _inherits(DeviceGrayCS, _ColorSpace4);\r\n\r\n  var _super4 = _createSuper(DeviceGrayCS);\r\n\r\n  function DeviceGrayCS() {\r\n    _classCallCheck(this, DeviceGrayCS);\r\n\r\n    return _super4.call(this, \"DeviceGray\", 1);\r\n  }\r\n\r\n  _createClass(DeviceGrayCS, [{\r\n    key: \"getRgbItem\",\r\n    value: function getRgbItem(src, srcOffset, dest, destOffset) {\r\n      var c = src[srcOffset] * 255;\r\n      dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;\r\n    }\r\n  }, {\r\n    key: \"getRgbBuffer\",\r\n    value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\r\n      var scale = 255 / ((1 << bits) - 1);\r\n      var j = srcOffset,\r\n          q = destOffset;\r\n\r\n      for (var i = 0; i < count; ++i) {\r\n        var c = scale * src[j++];\r\n        dest[q++] = c;\r\n        dest[q++] = c;\r\n        dest[q++] = c;\r\n        q += alpha01;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getOutputLength\",\r\n    value: function getOutputLength(inputLength, alpha01) {\r\n      return inputLength * (3 + alpha01);\r\n    }\r\n  }]);\r\n\r\n  return DeviceGrayCS;\r\n}(ColorSpace);\r\n\r\nvar DeviceRgbCS = /*#__PURE__*/function (_ColorSpace5) {\r\n  _inherits(DeviceRgbCS, _ColorSpace5);\r\n\r\n  var _super5 = _createSuper(DeviceRgbCS);\r\n\r\n  function DeviceRgbCS() {\r\n    _classCallCheck(this, DeviceRgbCS);\r\n\r\n    return _super5.call(this, \"DeviceRGB\", 3);\r\n  }\r\n\r\n  _createClass(DeviceRgbCS, [{\r\n    key: \"getRgbItem\",\r\n    value: function getRgbItem(src, srcOffset, dest, destOffset) {\r\n      dest[destOffset] = src[srcOffset] * 255;\r\n      dest[destOffset + 1] = src[srcOffset + 1] * 255;\r\n      dest[destOffset + 2] = src[srcOffset + 2] * 255;\r\n    }\r\n  }, {\r\n    key: \"getRgbBuffer\",\r\n    value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\r\n      if (bits === 8 && alpha01 === 0) {\r\n        dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset);\r\n        return;\r\n      }\r\n\r\n      var scale = 255 / ((1 << bits) - 1);\r\n      var j = srcOffset,\r\n          q = destOffset;\r\n\r\n      for (var i = 0; i < count; ++i) {\r\n        dest[q++] = scale * src[j++];\r\n        dest[q++] = scale * src[j++];\r\n        dest[q++] = scale * src[j++];\r\n        q += alpha01;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getOutputLength\",\r\n    value: function getOutputLength(inputLength, alpha01) {\r\n      return inputLength * (3 + alpha01) / 3 | 0;\r\n    }\r\n  }, {\r\n    key: \"isPassthrough\",\r\n    value: function isPassthrough(bits) {\r\n      return bits === 8;\r\n    }\r\n  }]);\r\n\r\n  return DeviceRgbCS;\r\n}(ColorSpace);\r\n\r\nvar DeviceCmykCS = function DeviceCmykCSClosure() {\r\n  function convertToRgb(src, srcOffset, srcScale, dest, destOffset) {\r\n    var c = src[srcOffset] * srcScale;\r\n    var m = src[srcOffset + 1] * srcScale;\r\n    var y = src[srcOffset + 2] * srcScale;\r\n    var k = src[srcOffset + 3] * srcScale;\r\n    dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747);\r\n    dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578);\r\n    dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367);\r\n  }\r\n\r\n  var DeviceCmykCS = /*#__PURE__*/function (_ColorSpace6) {\r\n    _inherits(DeviceCmykCS, _ColorSpace6);\r\n\r\n    var _super6 = _createSuper(DeviceCmykCS);\r\n\r\n    function DeviceCmykCS() {\r\n      _classCallCheck(this, DeviceCmykCS);\r\n\r\n      return _super6.call(this, \"DeviceCMYK\", 4);\r\n    }\r\n\r\n    _createClass(DeviceCmykCS, [{\r\n      key: \"getRgbItem\",\r\n      value: function getRgbItem(src, srcOffset, dest, destOffset) {\r\n        convertToRgb(src, srcOffset, 1, dest, destOffset);\r\n      }\r\n    }, {\r\n      key: \"getRgbBuffer\",\r\n      value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\r\n        var scale = 1 / ((1 << bits) - 1);\r\n\r\n        for (var i = 0; i < count; i++) {\r\n          convertToRgb(src, srcOffset, scale, dest, destOffset);\r\n          srcOffset += 4;\r\n          destOffset += 3 + alpha01;\r\n        }\r\n      }\r\n    }, {\r\n      key: \"getOutputLength\",\r\n      value: function getOutputLength(inputLength, alpha01) {\r\n        return inputLength / 4 * (3 + alpha01) | 0;\r\n      }\r\n    }]);\r\n\r\n    return DeviceCmykCS;\r\n  }(ColorSpace);\r\n\r\n  return DeviceCmykCS;\r\n}();\r\n\r\nvar CalGrayCS = function CalGrayCSClosure() {\r\n  function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {\r\n    var A = src[srcOffset] * scale;\r\n    var AG = Math.pow(A, cs.G);\r\n    var L = cs.YW * AG;\r\n    var val = Math.max(295.8 * Math.pow(L, 0.333333333333333333) - 40.8, 0);\r\n    dest[destOffset] = val;\r\n    dest[destOffset + 1] = val;\r\n    dest[destOffset + 2] = val;\r\n  }\r\n\r\n  var CalGrayCS = /*#__PURE__*/function (_ColorSpace7) {\r\n    _inherits(CalGrayCS, _ColorSpace7);\r\n\r\n    var _super7 = _createSuper(CalGrayCS);\r\n\r\n    function CalGrayCS(whitePoint, blackPoint, gamma) {\r\n      var _this4;\r\n\r\n      _classCallCheck(this, CalGrayCS);\r\n\r\n      _this4 = _super7.call(this, \"CalGray\", 1);\r\n\r\n      if (!whitePoint) {\r\n        throw new _util.FormatError(\"WhitePoint missing - required for color space CalGray\");\r\n      }\r\n\r\n      blackPoint = blackPoint || [0, 0, 0];\r\n      gamma = gamma || 1;\r\n      _this4.XW = whitePoint[0];\r\n      _this4.YW = whitePoint[1];\r\n      _this4.ZW = whitePoint[2];\r\n      _this4.XB = blackPoint[0];\r\n      _this4.YB = blackPoint[1];\r\n      _this4.ZB = blackPoint[2];\r\n      _this4.G = gamma;\r\n\r\n      if (_this4.XW < 0 || _this4.ZW < 0 || _this4.YW !== 1) {\r\n        throw new _util.FormatError(\"Invalid WhitePoint components for \".concat(_this4.name) + \", no fallback available\");\r\n      }\r\n\r\n      if (_this4.XB < 0 || _this4.YB < 0 || _this4.ZB < 0) {\r\n        (0, _util.info)(\"Invalid BlackPoint for \".concat(_this4.name, \", falling back to default.\"));\r\n        _this4.XB = _this4.YB = _this4.ZB = 0;\r\n      }\r\n\r\n      if (_this4.XB !== 0 || _this4.YB !== 0 || _this4.ZB !== 0) {\r\n        (0, _util.warn)(\"\".concat(_this4.name, \", BlackPoint: XB: \").concat(_this4.XB, \", YB: \").concat(_this4.YB, \", \") + \"ZB: \".concat(_this4.ZB, \", only default values are supported.\"));\r\n      }\r\n\r\n      if (_this4.G < 1) {\r\n        (0, _util.info)(\"Invalid Gamma: \".concat(_this4.G, \" for \").concat(_this4.name, \", \") + \"falling back to default.\");\r\n        _this4.G = 1;\r\n      }\r\n\r\n      return _this4;\r\n    }\r\n\r\n    _createClass(CalGrayCS, [{\r\n      key: \"getRgbItem\",\r\n      value: function getRgbItem(src, srcOffset, dest, destOffset) {\r\n        convertToRgb(this, src, srcOffset, dest, destOffset, 1);\r\n      }\r\n    }, {\r\n      key: \"getRgbBuffer\",\r\n      value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\r\n        var scale = 1 / ((1 << bits) - 1);\r\n\r\n        for (var i = 0; i < count; ++i) {\r\n          convertToRgb(this, src, srcOffset, dest, destOffset, scale);\r\n          srcOffset += 1;\r\n          destOffset += 3 + alpha01;\r\n        }\r\n      }\r\n    }, {\r\n      key: \"getOutputLength\",\r\n      value: function getOutputLength(inputLength, alpha01) {\r\n        return inputLength * (3 + alpha01);\r\n      }\r\n    }]);\r\n\r\n    return CalGrayCS;\r\n  }(ColorSpace);\r\n\r\n  return CalGrayCS;\r\n}();\r\n\r\nvar CalRGBCS = function CalRGBCSClosure() {\r\n  var BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]);\r\n  var BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]);\r\n  var SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]);\r\n  var FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);\r\n  var tempNormalizeMatrix = new Float32Array(3);\r\n  var tempConvertMatrix1 = new Float32Array(3);\r\n  var tempConvertMatrix2 = new Float32Array(3);\r\n  var DECODE_L_CONSTANT = Math.pow((8 + 16) / 116, 3) / 8.0;\r\n\r\n  function matrixProduct(a, b, result) {\r\n    result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\r\n    result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2];\r\n    result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2];\r\n  }\r\n\r\n  function convertToFlat(sourceWhitePoint, LMS, result) {\r\n    result[0] = LMS[0] * 1 / sourceWhitePoint[0];\r\n    result[1] = LMS[1] * 1 / sourceWhitePoint[1];\r\n    result[2] = LMS[2] * 1 / sourceWhitePoint[2];\r\n  }\r\n\r\n  function convertToD65(sourceWhitePoint, LMS, result) {\r\n    var D65X = 0.95047;\r\n    var D65Y = 1;\r\n    var D65Z = 1.08883;\r\n    result[0] = LMS[0] * D65X / sourceWhitePoint[0];\r\n    result[1] = LMS[1] * D65Y / sourceWhitePoint[1];\r\n    result[2] = LMS[2] * D65Z / sourceWhitePoint[2];\r\n  }\r\n\r\n  function sRGBTransferFunction(color) {\r\n    if (color <= 0.0031308) {\r\n      return adjustToRange(0, 1, 12.92 * color);\r\n    }\r\n\r\n    if (color >= 0.99554525) {\r\n      return 1;\r\n    }\r\n\r\n    return adjustToRange(0, 1, (1 + 0.055) * Math.pow(color, 1 / 2.4) - 0.055);\r\n  }\r\n\r\n  function adjustToRange(min, max, value) {\r\n    return Math.max(min, Math.min(max, value));\r\n  }\r\n\r\n  function decodeL(L) {\r\n    if (L < 0) {\r\n      return -decodeL(-L);\r\n    }\r\n\r\n    if (L > 8.0) {\r\n      return Math.pow((L + 16) / 116, 3);\r\n    }\r\n\r\n    return L * DECODE_L_CONSTANT;\r\n  }\r\n\r\n  function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) {\r\n    if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) {\r\n      result[0] = XYZ_Flat[0];\r\n      result[1] = XYZ_Flat[1];\r\n      result[2] = XYZ_Flat[2];\r\n      return;\r\n    }\r\n\r\n    var zeroDecodeL = decodeL(0);\r\n    var X_DST = zeroDecodeL;\r\n    var X_SRC = decodeL(sourceBlackPoint[0]);\r\n    var Y_DST = zeroDecodeL;\r\n    var Y_SRC = decodeL(sourceBlackPoint[1]);\r\n    var Z_DST = zeroDecodeL;\r\n    var Z_SRC = decodeL(sourceBlackPoint[2]);\r\n    var X_Scale = (1 - X_DST) / (1 - X_SRC);\r\n    var X_Offset = 1 - X_Scale;\r\n    var Y_Scale = (1 - Y_DST) / (1 - Y_SRC);\r\n    var Y_Offset = 1 - Y_Scale;\r\n    var Z_Scale = (1 - Z_DST) / (1 - Z_SRC);\r\n    var Z_Offset = 1 - Z_Scale;\r\n    result[0] = XYZ_Flat[0] * X_Scale + X_Offset;\r\n    result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset;\r\n    result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset;\r\n  }\r\n\r\n  function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) {\r\n    if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) {\r\n      result[0] = XYZ_In[0];\r\n      result[1] = XYZ_In[1];\r\n      result[2] = XYZ_In[2];\r\n      return;\r\n    }\r\n\r\n    var LMS = result;\r\n    matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);\r\n    var LMS_Flat = tempNormalizeMatrix;\r\n    convertToFlat(sourceWhitePoint, LMS, LMS_Flat);\r\n    matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result);\r\n  }\r\n\r\n  function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) {\r\n    var LMS = result;\r\n    matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);\r\n    var LMS_D65 = tempNormalizeMatrix;\r\n    convertToD65(sourceWhitePoint, LMS, LMS_D65);\r\n    matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result);\r\n  }\r\n\r\n  function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {\r\n    var A = adjustToRange(0, 1, src[srcOffset] * scale);\r\n    var B = adjustToRange(0, 1, src[srcOffset + 1] * scale);\r\n    var C = adjustToRange(0, 1, src[srcOffset + 2] * scale);\r\n    var AGR = A === 1 ? 1 : Math.pow(A, cs.GR);\r\n    var BGG = B === 1 ? 1 : Math.pow(B, cs.GG);\r\n    var CGB = C === 1 ? 1 : Math.pow(C, cs.GB);\r\n    var X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB;\r\n    var Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB;\r\n    var Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB;\r\n    var XYZ = tempConvertMatrix1;\r\n    XYZ[0] = X;\r\n    XYZ[1] = Y;\r\n    XYZ[2] = Z;\r\n    var XYZ_Flat = tempConvertMatrix2;\r\n    normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat);\r\n    var XYZ_Black = tempConvertMatrix1;\r\n    compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black);\r\n    var XYZ_D65 = tempConvertMatrix2;\r\n    normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65);\r\n    var SRGB = tempConvertMatrix1;\r\n    matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB);\r\n    dest[destOffset] = sRGBTransferFunction(SRGB[0]) * 255;\r\n    dest[destOffset + 1] = sRGBTransferFunction(SRGB[1]) * 255;\r\n    dest[destOffset + 2] = sRGBTransferFunction(SRGB[2]) * 255;\r\n  }\r\n\r\n  var CalRGBCS = /*#__PURE__*/function (_ColorSpace8) {\r\n    _inherits(CalRGBCS, _ColorSpace8);\r\n\r\n    var _super8 = _createSuper(CalRGBCS);\r\n\r\n    function CalRGBCS(whitePoint, blackPoint, gamma, matrix) {\r\n      var _this5;\r\n\r\n      _classCallCheck(this, CalRGBCS);\r\n\r\n      _this5 = _super8.call(this, \"CalRGB\", 3);\r\n\r\n      if (!whitePoint) {\r\n        throw new _util.FormatError(\"WhitePoint missing - required for color space CalRGB\");\r\n      }\r\n\r\n      blackPoint = blackPoint || new Float32Array(3);\r\n      gamma = gamma || new Float32Array([1, 1, 1]);\r\n      matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);\r\n      var XW = whitePoint[0];\r\n      var YW = whitePoint[1];\r\n      var ZW = whitePoint[2];\r\n      _this5.whitePoint = whitePoint;\r\n      var XB = blackPoint[0];\r\n      var YB = blackPoint[1];\r\n      var ZB = blackPoint[2];\r\n      _this5.blackPoint = blackPoint;\r\n      _this5.GR = gamma[0];\r\n      _this5.GG = gamma[1];\r\n      _this5.GB = gamma[2];\r\n      _this5.MXA = matrix[0];\r\n      _this5.MYA = matrix[1];\r\n      _this5.MZA = matrix[2];\r\n      _this5.MXB = matrix[3];\r\n      _this5.MYB = matrix[4];\r\n      _this5.MZB = matrix[5];\r\n      _this5.MXC = matrix[6];\r\n      _this5.MYC = matrix[7];\r\n      _this5.MZC = matrix[8];\r\n\r\n      if (XW < 0 || ZW < 0 || YW !== 1) {\r\n        throw new _util.FormatError(\"Invalid WhitePoint components for \".concat(_this5.name) + \", no fallback available\");\r\n      }\r\n\r\n      if (XB < 0 || YB < 0 || ZB < 0) {\r\n        (0, _util.info)(\"Invalid BlackPoint for \".concat(_this5.name, \" [\").concat(XB, \", \").concat(YB, \", \").concat(ZB, \"], \") + \"falling back to default.\");\r\n        _this5.blackPoint = new Float32Array(3);\r\n      }\r\n\r\n      if (_this5.GR < 0 || _this5.GG < 0 || _this5.GB < 0) {\r\n        (0, _util.info)(\"Invalid Gamma [\".concat(_this5.GR, \", \").concat(_this5.GG, \", \").concat(_this5.GB, \"] for \") + \"\".concat(_this5.name, \", falling back to default.\"));\r\n        _this5.GR = _this5.GG = _this5.GB = 1;\r\n      }\r\n\r\n      return _this5;\r\n    }\r\n\r\n    _createClass(CalRGBCS, [{\r\n      key: \"getRgbItem\",\r\n      value: function getRgbItem(src, srcOffset, dest, destOffset) {\r\n        convertToRgb(this, src, srcOffset, dest, destOffset, 1);\r\n      }\r\n    }, {\r\n      key: \"getRgbBuffer\",\r\n      value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\r\n        var scale = 1 / ((1 << bits) - 1);\r\n\r\n        for (var i = 0; i < count; ++i) {\r\n          convertToRgb(this, src, srcOffset, dest, destOffset, scale);\r\n          srcOffset += 3;\r\n          destOffset += 3 + alpha01;\r\n        }\r\n      }\r\n    }, {\r\n      key: \"getOutputLength\",\r\n      value: function getOutputLength(inputLength, alpha01) {\r\n        return inputLength * (3 + alpha01) / 3 | 0;\r\n      }\r\n    }]);\r\n\r\n    return CalRGBCS;\r\n  }(ColorSpace);\r\n\r\n  return CalRGBCS;\r\n}();\r\n\r\nvar LabCS = function LabCSClosure() {\r\n  function fn_g(x) {\r\n    var result;\r\n\r\n    if (x >= 6 / 29) {\r\n      result = x * x * x;\r\n    } else {\r\n      result = 108 / 841 * (x - 4 / 29);\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  function decode(value, high1, low2, high2) {\r\n    return low2 + value * (high2 - low2) / high1;\r\n  }\r\n\r\n  function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) {\r\n    var Ls = src[srcOffset];\r\n    var as = src[srcOffset + 1];\r\n    var bs = src[srcOffset + 2];\r\n\r\n    if (maxVal !== false) {\r\n      Ls = decode(Ls, maxVal, 0, 100);\r\n      as = decode(as, maxVal, cs.amin, cs.amax);\r\n      bs = decode(bs, maxVal, cs.bmin, cs.bmax);\r\n    }\r\n\r\n    if (as > cs.amax) {\r\n      as = cs.amax;\r\n    } else if (as < cs.amin) {\r\n      as = cs.amin;\r\n    }\r\n\r\n    if (bs > cs.bmax) {\r\n      bs = cs.bmax;\r\n    } else if (bs < cs.bmin) {\r\n      bs = cs.bmin;\r\n    }\r\n\r\n    var M = (Ls + 16) / 116;\r\n    var L = M + as / 500;\r\n    var N = M - bs / 200;\r\n    var X = cs.XW * fn_g(L);\r\n    var Y = cs.YW * fn_g(M);\r\n    var Z = cs.ZW * fn_g(N);\r\n    var r, g, b;\r\n\r\n    if (cs.ZW < 1) {\r\n      r = X * 3.1339 + Y * -1.617 + Z * -0.4906;\r\n      g = X * -0.9785 + Y * 1.916 + Z * 0.0333;\r\n      b = X * 0.072 + Y * -0.229 + Z * 1.4057;\r\n    } else {\r\n      r = X * 3.2406 + Y * -1.5372 + Z * -0.4986;\r\n      g = X * -0.9689 + Y * 1.8758 + Z * 0.0415;\r\n      b = X * 0.0557 + Y * -0.204 + Z * 1.057;\r\n    }\r\n\r\n    dest[destOffset] = Math.sqrt(r) * 255;\r\n    dest[destOffset + 1] = Math.sqrt(g) * 255;\r\n    dest[destOffset + 2] = Math.sqrt(b) * 255;\r\n  }\r\n\r\n  var LabCS = /*#__PURE__*/function (_ColorSpace9) {\r\n    _inherits(LabCS, _ColorSpace9);\r\n\r\n    var _super9 = _createSuper(LabCS);\r\n\r\n    function LabCS(whitePoint, blackPoint, range) {\r\n      var _this6;\r\n\r\n      _classCallCheck(this, LabCS);\r\n\r\n      _this6 = _super9.call(this, \"Lab\", 3);\r\n\r\n      if (!whitePoint) {\r\n        throw new _util.FormatError(\"WhitePoint missing - required for color space Lab\");\r\n      }\r\n\r\n      blackPoint = blackPoint || [0, 0, 0];\r\n      range = range || [-100, 100, -100, 100];\r\n      _this6.XW = whitePoint[0];\r\n      _this6.YW = whitePoint[1];\r\n      _this6.ZW = whitePoint[2];\r\n      _this6.amin = range[0];\r\n      _this6.amax = range[1];\r\n      _this6.bmin = range[2];\r\n      _this6.bmax = range[3];\r\n      _this6.XB = blackPoint[0];\r\n      _this6.YB = blackPoint[1];\r\n      _this6.ZB = blackPoint[2];\r\n\r\n      if (_this6.XW < 0 || _this6.ZW < 0 || _this6.YW !== 1) {\r\n        throw new _util.FormatError(\"Invalid WhitePoint components, no fallback available\");\r\n      }\r\n\r\n      if (_this6.XB < 0 || _this6.YB < 0 || _this6.ZB < 0) {\r\n        (0, _util.info)(\"Invalid BlackPoint, falling back to default\");\r\n        _this6.XB = _this6.YB = _this6.ZB = 0;\r\n      }\r\n\r\n      if (_this6.amin > _this6.amax || _this6.bmin > _this6.bmax) {\r\n        (0, _util.info)(\"Invalid Range, falling back to defaults\");\r\n        _this6.amin = -100;\r\n        _this6.amax = 100;\r\n        _this6.bmin = -100;\r\n        _this6.bmax = 100;\r\n      }\r\n\r\n      return _this6;\r\n    }\r\n\r\n    _createClass(LabCS, [{\r\n      key: \"getRgbItem\",\r\n      value: function getRgbItem(src, srcOffset, dest, destOffset) {\r\n        convertToRgb(this, src, srcOffset, false, dest, destOffset);\r\n      }\r\n    }, {\r\n      key: \"getRgbBuffer\",\r\n      value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) {\r\n        var maxVal = (1 << bits) - 1;\r\n\r\n        for (var i = 0; i < count; i++) {\r\n          convertToRgb(this, src, srcOffset, maxVal, dest, destOffset);\r\n          srcOffset += 3;\r\n          destOffset += 3 + alpha01;\r\n        }\r\n      }\r\n    }, {\r\n      key: \"getOutputLength\",\r\n      value: function getOutputLength(inputLength, alpha01) {\r\n        return inputLength * (3 + alpha01) / 3 | 0;\r\n      }\r\n    }, {\r\n      key: \"isDefaultDecode\",\r\n      value: function isDefaultDecode(decodeMap, bpc) {\r\n        return true;\r\n      }\r\n    }, {\r\n      key: \"usesZeroToOneRange\",\r\n      get: function get() {\r\n        return (0, _util.shadow)(this, \"usesZeroToOneRange\", false);\r\n      }\r\n    }]);\r\n\r\n    return LabCS;\r\n  }(ColorSpace);\r\n\r\n  return LabCS;\r\n}();\r\n\r\n/***/ }),\r\n/* 154 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.LocalTilingPatternCache = exports.LocalImageCache = exports.LocalGStateCache = exports.LocalFunctionCache = exports.LocalColorSpaceCache = exports.GlobalImageCache = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar BaseLocalCache = /*#__PURE__*/function () {\r\n  function BaseLocalCache(options) {\r\n    _classCallCheck(this, BaseLocalCache);\r\n\r\n    if (this.constructor === BaseLocalCache) {\r\n      (0, _util.unreachable)(\"Cannot initialize BaseLocalCache.\");\r\n    }\r\n\r\n    if (!options || !options.onlyRefs) {\r\n      this._nameRefMap = new Map();\r\n      this._imageMap = new Map();\r\n    }\r\n\r\n    this._imageCache = new _primitives.RefSetCache();\r\n  }\r\n\r\n  _createClass(BaseLocalCache, [{\r\n    key: \"getByName\",\r\n    value: function getByName(name) {\r\n      var ref = this._nameRefMap.get(name);\r\n\r\n      if (ref) {\r\n        return this.getByRef(ref);\r\n      }\r\n\r\n      return this._imageMap.get(name) || null;\r\n    }\r\n  }, {\r\n    key: \"getByRef\",\r\n    value: function getByRef(ref) {\r\n      return this._imageCache.get(ref) || null;\r\n    }\r\n  }, {\r\n    key: \"set\",\r\n    value: function set(name, ref, data) {\r\n      (0, _util.unreachable)(\"Abstract method `set` called.\");\r\n    }\r\n  }]);\r\n\r\n  return BaseLocalCache;\r\n}();\r\n\r\nvar LocalImageCache = /*#__PURE__*/function (_BaseLocalCache) {\r\n  _inherits(LocalImageCache, _BaseLocalCache);\r\n\r\n  var _super = _createSuper(LocalImageCache);\r\n\r\n  function LocalImageCache() {\r\n    _classCallCheck(this, LocalImageCache);\r\n\r\n    return _super.apply(this, arguments);\r\n  }\r\n\r\n  _createClass(LocalImageCache, [{\r\n    key: \"set\",\r\n    value: function set(name) {\r\n      var ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n      var data = arguments.length > 2 ? arguments[2] : undefined;\r\n\r\n      if (!name) {\r\n        throw new Error('LocalImageCache.set - expected \"name\" argument.');\r\n      }\r\n\r\n      if (ref) {\r\n        if (this._imageCache.has(ref)) {\r\n          return;\r\n        }\r\n\r\n        this._nameRefMap.set(name, ref);\r\n\r\n        this._imageCache.put(ref, data);\r\n\r\n        return;\r\n      }\r\n\r\n      if (this._imageMap.has(name)) {\r\n        return;\r\n      }\r\n\r\n      this._imageMap.set(name, data);\r\n    }\r\n  }]);\r\n\r\n  return LocalImageCache;\r\n}(BaseLocalCache);\r\n\r\nexports.LocalImageCache = LocalImageCache;\r\n\r\nvar LocalColorSpaceCache = /*#__PURE__*/function (_BaseLocalCache2) {\r\n  _inherits(LocalColorSpaceCache, _BaseLocalCache2);\r\n\r\n  var _super2 = _createSuper(LocalColorSpaceCache);\r\n\r\n  function LocalColorSpaceCache() {\r\n    _classCallCheck(this, LocalColorSpaceCache);\r\n\r\n    return _super2.apply(this, arguments);\r\n  }\r\n\r\n  _createClass(LocalColorSpaceCache, [{\r\n    key: \"set\",\r\n    value: function set() {\r\n      var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\r\n      var ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n      var data = arguments.length > 2 ? arguments[2] : undefined;\r\n\r\n      if (!name && !ref) {\r\n        throw new Error('LocalColorSpaceCache.set - expected \"name\" and/or \"ref\" argument.');\r\n      }\r\n\r\n      if (ref) {\r\n        if (this._imageCache.has(ref)) {\r\n          return;\r\n        }\r\n\r\n        if (name) {\r\n          this._nameRefMap.set(name, ref);\r\n        }\r\n\r\n        this._imageCache.put(ref, data);\r\n\r\n        return;\r\n      }\r\n\r\n      if (this._imageMap.has(name)) {\r\n        return;\r\n      }\r\n\r\n      this._imageMap.set(name, data);\r\n    }\r\n  }]);\r\n\r\n  return LocalColorSpaceCache;\r\n}(BaseLocalCache);\r\n\r\nexports.LocalColorSpaceCache = LocalColorSpaceCache;\r\n\r\nvar LocalFunctionCache = /*#__PURE__*/function (_BaseLocalCache3) {\r\n  _inherits(LocalFunctionCache, _BaseLocalCache3);\r\n\r\n  var _super3 = _createSuper(LocalFunctionCache);\r\n\r\n  function LocalFunctionCache(options) {\r\n    _classCallCheck(this, LocalFunctionCache);\r\n\r\n    return _super3.call(this, {\r\n      onlyRefs: true\r\n    });\r\n  }\r\n\r\n  _createClass(LocalFunctionCache, [{\r\n    key: \"getByName\",\r\n    value: function getByName(name) {\r\n      (0, _util.unreachable)(\"Should not call `getByName` method.\");\r\n    }\r\n  }, {\r\n    key: \"set\",\r\n    value: function set() {\r\n      var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\r\n      var ref = arguments.length > 1 ? arguments[1] : undefined;\r\n      var data = arguments.length > 2 ? arguments[2] : undefined;\r\n\r\n      if (!ref) {\r\n        throw new Error('LocalFunctionCache.set - expected \"ref\" argument.');\r\n      }\r\n\r\n      if (this._imageCache.has(ref)) {\r\n        return;\r\n      }\r\n\r\n      this._imageCache.put(ref, data);\r\n    }\r\n  }]);\r\n\r\n  return LocalFunctionCache;\r\n}(BaseLocalCache);\r\n\r\nexports.LocalFunctionCache = LocalFunctionCache;\r\n\r\nvar LocalGStateCache = /*#__PURE__*/function (_BaseLocalCache4) {\r\n  _inherits(LocalGStateCache, _BaseLocalCache4);\r\n\r\n  var _super4 = _createSuper(LocalGStateCache);\r\n\r\n  function LocalGStateCache() {\r\n    _classCallCheck(this, LocalGStateCache);\r\n\r\n    return _super4.apply(this, arguments);\r\n  }\r\n\r\n  _createClass(LocalGStateCache, [{\r\n    key: \"set\",\r\n    value: function set(name) {\r\n      var ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n      var data = arguments.length > 2 ? arguments[2] : undefined;\r\n\r\n      if (!name) {\r\n        throw new Error('LocalGStateCache.set - expected \"name\" argument.');\r\n      }\r\n\r\n      if (ref) {\r\n        if (this._imageCache.has(ref)) {\r\n          return;\r\n        }\r\n\r\n        this._nameRefMap.set(name, ref);\r\n\r\n        this._imageCache.put(ref, data);\r\n\r\n        return;\r\n      }\r\n\r\n      if (this._imageMap.has(name)) {\r\n        return;\r\n      }\r\n\r\n      this._imageMap.set(name, data);\r\n    }\r\n  }]);\r\n\r\n  return LocalGStateCache;\r\n}(BaseLocalCache);\r\n\r\nexports.LocalGStateCache = LocalGStateCache;\r\n\r\nvar LocalTilingPatternCache = /*#__PURE__*/function (_BaseLocalCache5) {\r\n  _inherits(LocalTilingPatternCache, _BaseLocalCache5);\r\n\r\n  var _super5 = _createSuper(LocalTilingPatternCache);\r\n\r\n  function LocalTilingPatternCache() {\r\n    _classCallCheck(this, LocalTilingPatternCache);\r\n\r\n    return _super5.apply(this, arguments);\r\n  }\r\n\r\n  _createClass(LocalTilingPatternCache, [{\r\n    key: \"set\",\r\n    value: function set(name) {\r\n      var ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n      var data = arguments.length > 2 ? arguments[2] : undefined;\r\n\r\n      if (!name) {\r\n        throw new Error('LocalTilingPatternCache.set - expected \"name\" argument.');\r\n      }\r\n\r\n      if (ref) {\r\n        if (this._imageCache.has(ref)) {\r\n          return;\r\n        }\r\n\r\n        this._nameRefMap.set(name, ref);\r\n\r\n        this._imageCache.put(ref, data);\r\n\r\n        return;\r\n      }\r\n\r\n      if (this._imageMap.has(name)) {\r\n        return;\r\n      }\r\n\r\n      this._imageMap.set(name, data);\r\n    }\r\n  }]);\r\n\r\n  return LocalTilingPatternCache;\r\n}(BaseLocalCache);\r\n\r\nexports.LocalTilingPatternCache = LocalTilingPatternCache;\r\n\r\nvar GlobalImageCache = /*#__PURE__*/function () {\r\n  function GlobalImageCache() {\r\n    _classCallCheck(this, GlobalImageCache);\r\n\r\n    this._refCache = new _primitives.RefSetCache();\r\n    this._imageCache = new _primitives.RefSetCache();\r\n  }\r\n\r\n  _createClass(GlobalImageCache, [{\r\n    key: \"_byteSize\",\r\n    get: function get() {\r\n      var byteSize = 0;\r\n\r\n      this._imageCache.forEach(function (imageData) {\r\n        byteSize += imageData.byteSize;\r\n      });\r\n\r\n      return byteSize;\r\n    }\r\n  }, {\r\n    key: \"_cacheLimitReached\",\r\n    get: function get() {\r\n      if (this._imageCache.size < GlobalImageCache.MIN_IMAGES_TO_CACHE) {\r\n        return false;\r\n      }\r\n\r\n      if (this._byteSize < GlobalImageCache.MAX_BYTE_SIZE) {\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"shouldCache\",\r\n    value: function shouldCache(ref, pageIndex) {\r\n      var pageIndexSet = this._refCache.get(ref);\r\n\r\n      var numPages = pageIndexSet ? pageIndexSet.size + (pageIndexSet.has(pageIndex) ? 0 : 1) : 1;\r\n\r\n      if (numPages < GlobalImageCache.NUM_PAGES_THRESHOLD) {\r\n        return false;\r\n      }\r\n\r\n      if (!this._imageCache.has(ref) && this._cacheLimitReached) {\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"addPageIndex\",\r\n    value: function addPageIndex(ref, pageIndex) {\r\n      var pageIndexSet = this._refCache.get(ref);\r\n\r\n      if (!pageIndexSet) {\r\n        pageIndexSet = new Set();\r\n\r\n        this._refCache.put(ref, pageIndexSet);\r\n      }\r\n\r\n      pageIndexSet.add(pageIndex);\r\n    }\r\n  }, {\r\n    key: \"addByteSize\",\r\n    value: function addByteSize(ref, byteSize) {\r\n      var imageData = this._imageCache.get(ref);\r\n\r\n      if (!imageData) {\r\n        return;\r\n      }\r\n\r\n      if (imageData.byteSize) {\r\n        return;\r\n      }\r\n\r\n      imageData.byteSize = byteSize;\r\n    }\r\n  }, {\r\n    key: \"getData\",\r\n    value: function getData(ref, pageIndex) {\r\n      var pageIndexSet = this._refCache.get(ref);\r\n\r\n      if (!pageIndexSet) {\r\n        return null;\r\n      }\r\n\r\n      if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {\r\n        return null;\r\n      }\r\n\r\n      var imageData = this._imageCache.get(ref);\r\n\r\n      if (!imageData) {\r\n        return null;\r\n      }\r\n\r\n      pageIndexSet.add(pageIndex);\r\n      return imageData;\r\n    }\r\n  }, {\r\n    key: \"setData\",\r\n    value: function setData(ref, data) {\r\n      if (!this._refCache.has(ref)) {\r\n        throw new Error('GlobalImageCache.setData - expected \"addPageIndex\" to have been called.');\r\n      }\r\n\r\n      if (this._imageCache.has(ref)) {\r\n        return;\r\n      }\r\n\r\n      if (this._cacheLimitReached) {\r\n        (0, _util.warn)(\"GlobalImageCache.setData - cache limit reached.\");\r\n        return;\r\n      }\r\n\r\n      this._imageCache.put(ref, data);\r\n    }\r\n  }, {\r\n    key: \"clear\",\r\n    value: function clear() {\r\n      var onlyData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n\r\n      if (!onlyData) {\r\n        this._refCache.clear();\r\n      }\r\n\r\n      this._imageCache.clear();\r\n    }\r\n  }], [{\r\n    key: \"NUM_PAGES_THRESHOLD\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"NUM_PAGES_THRESHOLD\", 2);\r\n    }\r\n  }, {\r\n    key: \"MIN_IMAGES_TO_CACHE\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"MIN_IMAGES_TO_CACHE\", 10);\r\n    }\r\n  }, {\r\n    key: \"MAX_BYTE_SIZE\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"MAX_BYTE_SIZE\", 40e6);\r\n    }\r\n  }]);\r\n\r\n  return GlobalImageCache;\r\n}();\r\n\r\nexports.GlobalImageCache = GlobalImageCache;\r\n\r\n/***/ }),\r\n/* 155 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.getQuadPoints = getQuadPoints;\r\nexports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _obj = __w_pdfjs_require__(140);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar _default_appearance = __w_pdfjs_require__(156);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _colorspace = __w_pdfjs_require__(153);\r\n\r\nvar _operator_list = __w_pdfjs_require__(174);\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nvar _writer = __w_pdfjs_require__(176);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\r\n\r\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar AnnotationFactory = /*#__PURE__*/function () {\r\n  function AnnotationFactory() {\r\n    _classCallCheck(this, AnnotationFactory);\r\n  }\r\n\r\n  _createClass(AnnotationFactory, null, [{\r\n    key: \"create\",\r\n    value: function create(xref, ref, pdfManager, idFactory) {\r\n      var _this = this;\r\n\r\n      return pdfManager.ensureCatalog(\"acroForm\").then(function (acroForm) {\r\n        return pdfManager.ensure(_this, \"_create\", [xref, ref, pdfManager, idFactory, acroForm]);\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_create\",\r\n    value: function _create(xref, ref, pdfManager, idFactory, acroForm) {\r\n      var dict = xref.fetchIfRef(ref);\r\n\r\n      if (!(0, _primitives.isDict)(dict)) {\r\n        return undefined;\r\n      }\r\n\r\n      var id = (0, _primitives.isRef)(ref) ? ref.toString() : \"annot_\".concat(idFactory.createObjId());\r\n      var subtype = dict.get(\"Subtype\");\r\n      subtype = (0, _primitives.isName)(subtype) ? subtype.name : null;\r\n      var parameters = {\r\n        xref: xref,\r\n        ref: ref,\r\n        dict: dict,\r\n        subtype: subtype,\r\n        id: id,\r\n        pdfManager: pdfManager,\r\n        acroForm: acroForm instanceof _primitives.Dict ? acroForm : _primitives.Dict.empty\r\n      };\r\n\r\n      switch (subtype) {\r\n        case \"Link\":\r\n          return new LinkAnnotation(parameters);\r\n\r\n        case \"Text\":\r\n          return new TextAnnotation(parameters);\r\n\r\n        case \"Widget\":\r\n          var fieldType = (0, _core_utils.getInheritableProperty)({\r\n            dict: dict,\r\n            key: \"FT\"\r\n          });\r\n          fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;\r\n\r\n          switch (fieldType) {\r\n            case \"Tx\":\r\n              return new TextWidgetAnnotation(parameters);\r\n\r\n            case \"Btn\":\r\n              return new ButtonWidgetAnnotation(parameters);\r\n\r\n            case \"Ch\":\r\n              return new ChoiceWidgetAnnotation(parameters);\r\n          }\r\n\r\n          (0, _util.warn)('Unimplemented widget field type \"' + fieldType + '\", ' + \"falling back to base field type.\");\r\n          return new WidgetAnnotation(parameters);\r\n\r\n        case \"Popup\":\r\n          return new PopupAnnotation(parameters);\r\n\r\n        case \"FreeText\":\r\n          return new FreeTextAnnotation(parameters);\r\n\r\n        case \"Line\":\r\n          return new LineAnnotation(parameters);\r\n\r\n        case \"Square\":\r\n          return new SquareAnnotation(parameters);\r\n\r\n        case \"Circle\":\r\n          return new CircleAnnotation(parameters);\r\n\r\n        case \"PolyLine\":\r\n          return new PolylineAnnotation(parameters);\r\n\r\n        case \"Polygon\":\r\n          return new PolygonAnnotation(parameters);\r\n\r\n        case \"Caret\":\r\n          return new CaretAnnotation(parameters);\r\n\r\n        case \"Ink\":\r\n          return new InkAnnotation(parameters);\r\n\r\n        case \"Highlight\":\r\n          return new HighlightAnnotation(parameters);\r\n\r\n        case \"Underline\":\r\n          return new UnderlineAnnotation(parameters);\r\n\r\n        case \"Squiggly\":\r\n          return new SquigglyAnnotation(parameters);\r\n\r\n        case \"StrikeOut\":\r\n          return new StrikeOutAnnotation(parameters);\r\n\r\n        case \"Stamp\":\r\n          return new StampAnnotation(parameters);\r\n\r\n        case \"FileAttachment\":\r\n          return new FileAttachmentAnnotation(parameters);\r\n\r\n        default:\r\n          if (!subtype) {\r\n            (0, _util.warn)(\"Annotation is missing the required /Subtype.\");\r\n          } else {\r\n            (0, _util.warn)('Unimplemented annotation type \"' + subtype + '\", ' + \"falling back to base annotation.\");\r\n          }\r\n\r\n          return new Annotation(parameters);\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return AnnotationFactory;\r\n}();\r\n\r\nexports.AnnotationFactory = AnnotationFactory;\r\n\r\nfunction getQuadPoints(dict, rect) {\r\n  if (!dict.has(\"QuadPoints\")) {\r\n    return null;\r\n  }\r\n\r\n  var quadPoints = dict.getArray(\"QuadPoints\");\r\n\r\n  if (!Array.isArray(quadPoints) || quadPoints.length === 0 || quadPoints.length % 8 > 0) {\r\n    return null;\r\n  }\r\n\r\n  var quadPointsLists = [];\r\n\r\n  for (var i = 0, ii = quadPoints.length / 8; i < ii; i++) {\r\n    quadPointsLists.push([]);\r\n\r\n    for (var j = i * 8, jj = i * 8 + 8; j < jj; j += 2) {\r\n      var x = quadPoints[j];\r\n      var y = quadPoints[j + 1];\r\n\r\n      if (rect !== null && (x < rect[0] || x > rect[2] || y < rect[1] || y > rect[3])) {\r\n        return null;\r\n      }\r\n\r\n      quadPointsLists[i].push({\r\n        x: x,\r\n        y: y\r\n      });\r\n    }\r\n  }\r\n\r\n  return quadPointsLists.map(function (quadPointsList) {\r\n    var _quadPointsList$reduc = quadPointsList.reduce(function (_ref, quadPoint) {\r\n      var _ref2 = _slicedToArray(_ref, 4),\r\n          mX = _ref2[0],\r\n          MX = _ref2[1],\r\n          mY = _ref2[2],\r\n          MY = _ref2[3];\r\n\r\n      return [Math.min(mX, quadPoint.x), Math.max(MX, quadPoint.x), Math.min(mY, quadPoint.y), Math.max(MY, quadPoint.y)];\r\n    }, [Number.MAX_VALUE, Number.MIN_VALUE, Number.MAX_VALUE, Number.MIN_VALUE]),\r\n        _quadPointsList$reduc2 = _slicedToArray(_quadPointsList$reduc, 4),\r\n        minX = _quadPointsList$reduc2[0],\r\n        maxX = _quadPointsList$reduc2[1],\r\n        minY = _quadPointsList$reduc2[2],\r\n        maxY = _quadPointsList$reduc2[3];\r\n\r\n    return [{\r\n      x: minX,\r\n      y: maxY\r\n    }, {\r\n      x: maxX,\r\n      y: maxY\r\n    }, {\r\n      x: minX,\r\n      y: minY\r\n    }, {\r\n      x: maxX,\r\n      y: minY\r\n    }];\r\n  });\r\n}\r\n\r\nfunction getTransformMatrix(rect, bbox, matrix) {\r\n  var _Util$getAxialAligned = _util.Util.getAxialAlignedBoundingBox(bbox, matrix),\r\n      _Util$getAxialAligned2 = _slicedToArray(_Util$getAxialAligned, 4),\r\n      minX = _Util$getAxialAligned2[0],\r\n      minY = _Util$getAxialAligned2[1],\r\n      maxX = _Util$getAxialAligned2[2],\r\n      maxY = _Util$getAxialAligned2[3];\r\n\r\n  if (minX === maxX || minY === maxY) {\r\n    return [1, 0, 0, 1, rect[0], rect[1]];\r\n  }\r\n\r\n  var xRatio = (rect[2] - rect[0]) / (maxX - minX);\r\n  var yRatio = (rect[3] - rect[1]) / (maxY - minY);\r\n  return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio];\r\n}\r\n\r\nvar Annotation = /*#__PURE__*/function () {\r\n  function Annotation(params) {\r\n    _classCallCheck(this, Annotation);\r\n\r\n    var dict = params.dict;\r\n    this.setContents(dict.get(\"Contents\"));\r\n    this.setModificationDate(dict.get(\"M\"));\r\n    this.setFlags(dict.get(\"F\"));\r\n    this.setRectangle(dict.getArray(\"Rect\"));\r\n    this.setColor(dict.getArray(\"C\"));\r\n    this.setBorderStyle(dict);\r\n    this.setAppearance(dict);\r\n    this._streams = [];\r\n\r\n    if (this.appearance) {\r\n      this._streams.push(this.appearance);\r\n    }\r\n\r\n    this.data = {\r\n      annotationFlags: this.flags,\r\n      borderStyle: this.borderStyle,\r\n      color: this.color,\r\n      contents: this.contents,\r\n      hasAppearance: !!this.appearance,\r\n      id: params.id,\r\n      modificationDate: this.modificationDate,\r\n      rect: this.rectangle,\r\n      subtype: params.subtype\r\n    };\r\n    this._fallbackFontDict = null;\r\n  }\r\n\r\n  _createClass(Annotation, [{\r\n    key: \"_hasFlag\",\r\n    value: function _hasFlag(flags, flag) {\r\n      return !!(flags & flag);\r\n    }\r\n  }, {\r\n    key: \"_isViewable\",\r\n    value: function _isViewable(flags) {\r\n      return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW);\r\n    }\r\n  }, {\r\n    key: \"_isPrintable\",\r\n    value: function _isPrintable(flags) {\r\n      return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE);\r\n    }\r\n  }, {\r\n    key: \"isHidden\",\r\n    value: function isHidden(annotationStorage) {\r\n      var data = annotationStorage && annotationStorage[this.data.id];\r\n\r\n      if (data && \"hidden\" in data) {\r\n        return data.hidden;\r\n      }\r\n\r\n      return this._hasFlag(this.flags, _util.AnnotationFlag.HIDDEN);\r\n    }\r\n  }, {\r\n    key: \"viewable\",\r\n    get: function get() {\r\n      if (this.data.quadPoints === null) {\r\n        return false;\r\n      }\r\n\r\n      if (this.flags === 0) {\r\n        return true;\r\n      }\r\n\r\n      return this._isViewable(this.flags);\r\n    }\r\n  }, {\r\n    key: \"printable\",\r\n    get: function get() {\r\n      if (this.data.quadPoints === null) {\r\n        return false;\r\n      }\r\n\r\n      if (this.flags === 0) {\r\n        return false;\r\n      }\r\n\r\n      return this._isPrintable(this.flags);\r\n    }\r\n  }, {\r\n    key: \"setContents\",\r\n    value: function setContents(contents) {\r\n      this.contents = (0, _util.stringToPDFString)(contents || \"\");\r\n    }\r\n  }, {\r\n    key: \"setModificationDate\",\r\n    value: function setModificationDate(modificationDate) {\r\n      this.modificationDate = (0, _util.isString)(modificationDate) ? modificationDate : null;\r\n    }\r\n  }, {\r\n    key: \"setFlags\",\r\n    value: function setFlags(flags) {\r\n      this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0;\r\n    }\r\n  }, {\r\n    key: \"hasFlag\",\r\n    value: function hasFlag(flag) {\r\n      return this._hasFlag(this.flags, flag);\r\n    }\r\n  }, {\r\n    key: \"setRectangle\",\r\n    value: function setRectangle(rectangle) {\r\n      if (Array.isArray(rectangle) && rectangle.length === 4) {\r\n        this.rectangle = _util.Util.normalizeRect(rectangle);\r\n      } else {\r\n        this.rectangle = [0, 0, 0, 0];\r\n      }\r\n    }\r\n  }, {\r\n    key: \"setColor\",\r\n    value: function setColor(color) {\r\n      var rgbColor = new Uint8ClampedArray(3);\r\n\r\n      if (!Array.isArray(color)) {\r\n        this.color = rgbColor;\r\n        return;\r\n      }\r\n\r\n      switch (color.length) {\r\n        case 0:\r\n          this.color = null;\r\n          break;\r\n\r\n        case 1:\r\n          _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0);\r\n\r\n          this.color = rgbColor;\r\n          break;\r\n\r\n        case 3:\r\n          _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0);\r\n\r\n          this.color = rgbColor;\r\n          break;\r\n\r\n        case 4:\r\n          _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0);\r\n\r\n          this.color = rgbColor;\r\n          break;\r\n\r\n        default:\r\n          this.color = rgbColor;\r\n          break;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"setBorderStyle\",\r\n    value: function setBorderStyle(borderStyle) {\r\n      this.borderStyle = new AnnotationBorderStyle();\r\n\r\n      if (!(0, _primitives.isDict)(borderStyle)) {\r\n        return;\r\n      }\r\n\r\n      if (borderStyle.has(\"BS\")) {\r\n        var dict = borderStyle.get(\"BS\");\r\n        var dictType = dict.get(\"Type\");\r\n\r\n        if (!dictType || (0, _primitives.isName)(dictType, \"Border\")) {\r\n          this.borderStyle.setWidth(dict.get(\"W\"), this.rectangle);\r\n          this.borderStyle.setStyle(dict.get(\"S\"));\r\n          this.borderStyle.setDashArray(dict.getArray(\"D\"));\r\n        }\r\n      } else if (borderStyle.has(\"Border\")) {\r\n        var array = borderStyle.getArray(\"Border\");\r\n\r\n        if (Array.isArray(array) && array.length >= 3) {\r\n          this.borderStyle.setHorizontalCornerRadius(array[0]);\r\n          this.borderStyle.setVerticalCornerRadius(array[1]);\r\n          this.borderStyle.setWidth(array[2], this.rectangle);\r\n\r\n          if (array.length === 4) {\r\n            this.borderStyle.setDashArray(array[3]);\r\n          }\r\n        }\r\n      } else {\r\n        this.borderStyle.setWidth(0);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"setAppearance\",\r\n    value: function setAppearance(dict) {\r\n      this.appearance = null;\r\n      var appearanceStates = dict.get(\"AP\");\r\n\r\n      if (!(0, _primitives.isDict)(appearanceStates)) {\r\n        return;\r\n      }\r\n\r\n      var normalAppearanceState = appearanceStates.get(\"N\");\r\n\r\n      if ((0, _primitives.isStream)(normalAppearanceState)) {\r\n        this.appearance = normalAppearanceState;\r\n        return;\r\n      }\r\n\r\n      if (!(0, _primitives.isDict)(normalAppearanceState)) {\r\n        return;\r\n      }\r\n\r\n      var as = dict.get(\"AS\");\r\n\r\n      if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) {\r\n        return;\r\n      }\r\n\r\n      this.appearance = normalAppearanceState.get(as.name);\r\n    }\r\n  }, {\r\n    key: \"loadResources\",\r\n    value: function loadResources(keys) {\r\n      return this.appearance.dict.getAsync(\"Resources\").then(function (resources) {\r\n        if (!resources) {\r\n          return undefined;\r\n        }\r\n\r\n        var objectLoader = new _obj.ObjectLoader(resources, keys, resources.xref);\r\n        return objectLoader.load().then(function () {\r\n          return resources;\r\n        });\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getOperatorList\",\r\n    value: function getOperatorList(evaluator, task, renderForms, annotationStorage) {\r\n      var _this2 = this;\r\n\r\n      if (!this.appearance) {\r\n        return Promise.resolve(new _operator_list.OperatorList());\r\n      }\r\n\r\n      var appearance = this.appearance;\r\n      var data = this.data;\r\n      var appearanceDict = appearance.dict;\r\n      var resourcesPromise = this.loadResources([\"ExtGState\", \"ColorSpace\", \"Pattern\", \"Shading\", \"XObject\", \"Font\"]);\r\n      var bbox = appearanceDict.getArray(\"BBox\") || [0, 0, 1, 1];\r\n      var matrix = appearanceDict.getArray(\"Matrix\") || [1, 0, 0, 1, 0, 0];\r\n      var transform = getTransformMatrix(data.rect, bbox, matrix);\r\n      return resourcesPromise.then(function (resources) {\r\n        var opList = new _operator_list.OperatorList();\r\n        opList.addOp(_util.OPS.beginAnnotation, [data.rect, transform, matrix]);\r\n        return evaluator.getOperatorList({\r\n          stream: appearance,\r\n          task: task,\r\n          resources: resources,\r\n          operatorList: opList,\r\n          fallbackFontDict: _this2._fallbackFontDict\r\n        }).then(function () {\r\n          opList.addOp(_util.OPS.endAnnotation, []);\r\n\r\n          _this2.reset();\r\n\r\n          return opList;\r\n        });\r\n      });\r\n    }\r\n  }, {\r\n    key: \"save\",\r\n    value: function () {\r\n      var _save = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(evaluator, task, annotationStorage) {\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                return _context.abrupt(\"return\", null);\r\n\r\n              case 1:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee);\r\n      }));\r\n\r\n      function save(_x, _x2, _x3) {\r\n        return _save.apply(this, arguments);\r\n      }\r\n\r\n      return save;\r\n    }()\r\n  }, {\r\n    key: \"getFieldObject\",\r\n    value: function getFieldObject() {\r\n      return null;\r\n    }\r\n  }, {\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      var _iterator = _createForOfIteratorHelper(this._streams),\r\n          _step;\r\n\r\n      try {\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          var stream = _step.value;\r\n          stream.reset();\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return Annotation;\r\n}();\r\n\r\nexports.Annotation = Annotation;\r\n\r\nvar AnnotationBorderStyle = /*#__PURE__*/function () {\r\n  function AnnotationBorderStyle() {\r\n    _classCallCheck(this, AnnotationBorderStyle);\r\n\r\n    this.width = 1;\r\n    this.style = _util.AnnotationBorderStyleType.SOLID;\r\n    this.dashArray = [3];\r\n    this.horizontalCornerRadius = 0;\r\n    this.verticalCornerRadius = 0;\r\n  }\r\n\r\n  _createClass(AnnotationBorderStyle, [{\r\n    key: \"setWidth\",\r\n    value: function setWidth(width) {\r\n      var rect = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0, 0];\r\n\r\n      if ((0, _primitives.isName)(width)) {\r\n        this.width = 0;\r\n        return;\r\n      }\r\n\r\n      if (Number.isInteger(width)) {\r\n        if (width > 0) {\r\n          var maxWidth = (rect[2] - rect[0]) / 2;\r\n          var maxHeight = (rect[3] - rect[1]) / 2;\r\n\r\n          if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) {\r\n            (0, _util.warn)(\"AnnotationBorderStyle.setWidth - ignoring width: \".concat(width));\r\n            width = 1;\r\n          }\r\n        }\r\n\r\n        this.width = width;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"setStyle\",\r\n    value: function setStyle(style) {\r\n      if (!(0, _primitives.isName)(style)) {\r\n        return;\r\n      }\r\n\r\n      switch (style.name) {\r\n        case \"S\":\r\n          this.style = _util.AnnotationBorderStyleType.SOLID;\r\n          break;\r\n\r\n        case \"D\":\r\n          this.style = _util.AnnotationBorderStyleType.DASHED;\r\n          break;\r\n\r\n        case \"B\":\r\n          this.style = _util.AnnotationBorderStyleType.BEVELED;\r\n          break;\r\n\r\n        case \"I\":\r\n          this.style = _util.AnnotationBorderStyleType.INSET;\r\n          break;\r\n\r\n        case \"U\":\r\n          this.style = _util.AnnotationBorderStyleType.UNDERLINE;\r\n          break;\r\n\r\n        default:\r\n          break;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"setDashArray\",\r\n    value: function setDashArray(dashArray) {\r\n      if (Array.isArray(dashArray) && dashArray.length > 0) {\r\n        var isValid = true;\r\n        var allZeros = true;\r\n\r\n        var _iterator2 = _createForOfIteratorHelper(dashArray),\r\n            _step2;\r\n\r\n        try {\r\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n            var element = _step2.value;\r\n            var validNumber = +element >= 0;\r\n\r\n            if (!validNumber) {\r\n              isValid = false;\r\n              break;\r\n            } else if (element > 0) {\r\n              allZeros = false;\r\n            }\r\n          }\r\n        } catch (err) {\r\n          _iterator2.e(err);\r\n        } finally {\r\n          _iterator2.f();\r\n        }\r\n\r\n        if (isValid && !allZeros) {\r\n          this.dashArray = dashArray;\r\n        } else {\r\n          this.width = 0;\r\n        }\r\n      } else if (dashArray) {\r\n        this.width = 0;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"setHorizontalCornerRadius\",\r\n    value: function setHorizontalCornerRadius(radius) {\r\n      if (Number.isInteger(radius)) {\r\n        this.horizontalCornerRadius = radius;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"setVerticalCornerRadius\",\r\n    value: function setVerticalCornerRadius(radius) {\r\n      if (Number.isInteger(radius)) {\r\n        this.verticalCornerRadius = radius;\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return AnnotationBorderStyle;\r\n}();\r\n\r\nexports.AnnotationBorderStyle = AnnotationBorderStyle;\r\n\r\nvar MarkupAnnotation = /*#__PURE__*/function (_Annotation) {\r\n  _inherits(MarkupAnnotation, _Annotation);\r\n\r\n  var _super = _createSuper(MarkupAnnotation);\r\n\r\n  function MarkupAnnotation(parameters) {\r\n    var _this3;\r\n\r\n    _classCallCheck(this, MarkupAnnotation);\r\n\r\n    _this3 = _super.call(this, parameters);\r\n    var dict = parameters.dict;\r\n\r\n    if (dict.has(\"IRT\")) {\r\n      var rawIRT = dict.getRaw(\"IRT\");\r\n      _this3.data.inReplyTo = (0, _primitives.isRef)(rawIRT) ? rawIRT.toString() : null;\r\n      var rt = dict.get(\"RT\");\r\n      _this3.data.replyType = (0, _primitives.isName)(rt) ? rt.name : _util.AnnotationReplyType.REPLY;\r\n    }\r\n\r\n    if (_this3.data.replyType === _util.AnnotationReplyType.GROUP) {\r\n      var parent = dict.get(\"IRT\");\r\n      _this3.data.title = (0, _util.stringToPDFString)(parent.get(\"T\") || \"\");\r\n\r\n      _this3.setContents(parent.get(\"Contents\"));\r\n\r\n      _this3.data.contents = _this3.contents;\r\n\r\n      if (!parent.has(\"CreationDate\")) {\r\n        _this3.data.creationDate = null;\r\n      } else {\r\n        _this3.setCreationDate(parent.get(\"CreationDate\"));\r\n\r\n        _this3.data.creationDate = _this3.creationDate;\r\n      }\r\n\r\n      if (!parent.has(\"M\")) {\r\n        _this3.data.modificationDate = null;\r\n      } else {\r\n        _this3.setModificationDate(parent.get(\"M\"));\r\n\r\n        _this3.data.modificationDate = _this3.modificationDate;\r\n      }\r\n\r\n      _this3.data.hasPopup = parent.has(\"Popup\");\r\n\r\n      if (!parent.has(\"C\")) {\r\n        _this3.data.color = null;\r\n      } else {\r\n        _this3.setColor(parent.getArray(\"C\"));\r\n\r\n        _this3.data.color = _this3.color;\r\n      }\r\n    } else {\r\n      _this3.data.title = (0, _util.stringToPDFString)(dict.get(\"T\") || \"\");\r\n\r\n      _this3.setCreationDate(dict.get(\"CreationDate\"));\r\n\r\n      _this3.data.creationDate = _this3.creationDate;\r\n      _this3.data.hasPopup = dict.has(\"Popup\");\r\n\r\n      if (!dict.has(\"C\")) {\r\n        _this3.data.color = null;\r\n      }\r\n    }\r\n\r\n    return _this3;\r\n  }\r\n\r\n  _createClass(MarkupAnnotation, [{\r\n    key: \"setCreationDate\",\r\n    value: function setCreationDate(creationDate) {\r\n      this.creationDate = (0, _util.isString)(creationDate) ? creationDate : null;\r\n    }\r\n  }, {\r\n    key: \"_setDefaultAppearance\",\r\n    value: function _setDefaultAppearance(_ref3) {\r\n      var xref = _ref3.xref,\r\n          extra = _ref3.extra,\r\n          strokeColor = _ref3.strokeColor,\r\n          fillColor = _ref3.fillColor,\r\n          blendMode = _ref3.blendMode,\r\n          pointsCallback = _ref3.pointsCallback;\r\n      var minX = Number.MAX_VALUE;\r\n      var minY = Number.MAX_VALUE;\r\n      var maxX = Number.MIN_VALUE;\r\n      var maxY = Number.MIN_VALUE;\r\n      var buffer = [\"q\"];\r\n\r\n      if (extra) {\r\n        buffer.push(extra);\r\n      }\r\n\r\n      if (strokeColor) {\r\n        buffer.push(\"\".concat(strokeColor[0], \" \").concat(strokeColor[1], \" \").concat(strokeColor[2], \" RG\"));\r\n      }\r\n\r\n      if (fillColor) {\r\n        buffer.push(\"\".concat(fillColor[0], \" \").concat(fillColor[1], \" \").concat(fillColor[2], \" rg\"));\r\n      }\r\n\r\n      var _iterator3 = _createForOfIteratorHelper(this.data.quadPoints),\r\n          _step3;\r\n\r\n      try {\r\n        for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n          var points = _step3.value;\r\n\r\n          var _pointsCallback = pointsCallback(buffer, points),\r\n              _pointsCallback2 = _slicedToArray(_pointsCallback, 4),\r\n              mX = _pointsCallback2[0],\r\n              MX = _pointsCallback2[1],\r\n              mY = _pointsCallback2[2],\r\n              MY = _pointsCallback2[3];\r\n\r\n          minX = Math.min(minX, mX);\r\n          maxX = Math.max(maxX, MX);\r\n          minY = Math.min(minY, mY);\r\n          maxY = Math.max(maxY, MY);\r\n        }\r\n      } catch (err) {\r\n        _iterator3.e(err);\r\n      } finally {\r\n        _iterator3.f();\r\n      }\r\n\r\n      buffer.push(\"Q\");\r\n      var formDict = new _primitives.Dict(xref);\r\n      var appearanceStreamDict = new _primitives.Dict(xref);\r\n      appearanceStreamDict.set(\"Subtype\", _primitives.Name.get(\"Form\"));\r\n      var appearanceStream = new _stream.StringStream(buffer.join(\" \"));\r\n      appearanceStream.dict = appearanceStreamDict;\r\n      formDict.set(\"Fm0\", appearanceStream);\r\n      var gsDict = new _primitives.Dict(xref);\r\n\r\n      if (blendMode) {\r\n        gsDict.set(\"BM\", _primitives.Name.get(blendMode));\r\n      }\r\n\r\n      var stateDict = new _primitives.Dict(xref);\r\n      stateDict.set(\"GS0\", gsDict);\r\n      var resources = new _primitives.Dict(xref);\r\n      resources.set(\"ExtGState\", stateDict);\r\n      resources.set(\"XObject\", formDict);\r\n      var appearanceDict = new _primitives.Dict(xref);\r\n      appearanceDict.set(\"Resources\", resources);\r\n      var bbox = this.data.rect = [minX, minY, maxX, maxY];\r\n      appearanceDict.set(\"BBox\", bbox);\r\n      this.appearance = new _stream.StringStream(\"/GS0 gs /Fm0 Do\");\r\n      this.appearance.dict = appearanceDict;\r\n\r\n      this._streams.push(this.appearance, appearanceStream);\r\n    }\r\n  }]);\r\n\r\n  return MarkupAnnotation;\r\n}(Annotation);\r\n\r\nexports.MarkupAnnotation = MarkupAnnotation;\r\n\r\nvar WidgetAnnotation = /*#__PURE__*/function (_Annotation2) {\r\n  _inherits(WidgetAnnotation, _Annotation2);\r\n\r\n  var _super2 = _createSuper(WidgetAnnotation);\r\n\r\n  function WidgetAnnotation(params) {\r\n    var _this4;\r\n\r\n    _classCallCheck(this, WidgetAnnotation);\r\n\r\n    _this4 = _super2.call(this, params);\r\n    var dict = params.dict;\r\n    var data = _this4.data;\r\n    _this4.ref = params.ref;\r\n    data.annotationType = _util.AnnotationType.WIDGET;\r\n    data.fieldName = _this4._constructFieldName(dict);\r\n    data.actions = (0, _core_utils.collectActions)(params.xref, dict, _util.AnnotationActionEventType);\r\n    var fieldValue = (0, _core_utils.getInheritableProperty)({\r\n      dict: dict,\r\n      key: \"V\",\r\n      getArray: true\r\n    });\r\n    data.fieldValue = _this4._decodeFormValue(fieldValue);\r\n    var defaultFieldValue = (0, _core_utils.getInheritableProperty)({\r\n      dict: dict,\r\n      key: \"DV\",\r\n      getArray: true\r\n    });\r\n    data.defaultFieldValue = _this4._decodeFormValue(defaultFieldValue);\r\n    data.alternativeText = (0, _util.stringToPDFString)(dict.get(\"TU\") || \"\");\r\n    var defaultAppearance = (0, _core_utils.getInheritableProperty)({\r\n      dict: dict,\r\n      key: \"DA\"\r\n    }) || params.acroForm.get(\"DA\") || \"\";\r\n    data.defaultAppearance = (0, _util.isString)(defaultAppearance) ? defaultAppearance : \"\";\r\n    data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(data.defaultAppearance);\r\n    var fieldType = (0, _core_utils.getInheritableProperty)({\r\n      dict: dict,\r\n      key: \"FT\"\r\n    });\r\n    data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;\r\n    var localResources = (0, _core_utils.getInheritableProperty)({\r\n      dict: dict,\r\n      key: \"DR\"\r\n    });\r\n    var acroFormResources = params.acroForm.get(\"DR\");\r\n\r\n    var appearanceResources = _this4.appearance && _this4.appearance.dict.get(\"Resources\");\r\n\r\n    _this4._fieldResources = {\r\n      localResources: localResources,\r\n      acroFormResources: acroFormResources,\r\n      appearanceResources: appearanceResources,\r\n      mergedResources: _primitives.Dict.merge({\r\n        xref: params.xref,\r\n        dictArray: [localResources, appearanceResources, acroFormResources],\r\n        mergeSubDicts: true\r\n      })\r\n    };\r\n    data.fieldFlags = (0, _core_utils.getInheritableProperty)({\r\n      dict: dict,\r\n      key: \"Ff\"\r\n    });\r\n\r\n    if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) {\r\n      data.fieldFlags = 0;\r\n    }\r\n\r\n    data.readOnly = _this4.hasFieldFlag(_util.AnnotationFieldFlag.READONLY);\r\n    data.hidden = _this4._hasFlag(data.annotationFlags, _util.AnnotationFlag.HIDDEN);\r\n\r\n    if (data.fieldType === \"Sig\") {\r\n      data.fieldValue = null;\r\n\r\n      _this4.setFlags(_util.AnnotationFlag.HIDDEN);\r\n\r\n      data.hidden = true;\r\n    }\r\n\r\n    return _this4;\r\n  }\r\n\r\n  _createClass(WidgetAnnotation, [{\r\n    key: \"_constructFieldName\",\r\n    value: function _constructFieldName(dict) {\r\n      if (!dict.has(\"T\") && !dict.has(\"Parent\")) {\r\n        (0, _util.warn)(\"Unknown field name, falling back to empty field name.\");\r\n        return \"\";\r\n      }\r\n\r\n      if (!dict.has(\"Parent\")) {\r\n        return (0, _util.stringToPDFString)(dict.get(\"T\"));\r\n      }\r\n\r\n      var fieldName = [];\r\n\r\n      if (dict.has(\"T\")) {\r\n        fieldName.unshift((0, _util.stringToPDFString)(dict.get(\"T\")));\r\n      }\r\n\r\n      var loopDict = dict;\r\n\r\n      while (loopDict.has(\"Parent\")) {\r\n        loopDict = loopDict.get(\"Parent\");\r\n\r\n        if (!(0, _primitives.isDict)(loopDict)) {\r\n          break;\r\n        }\r\n\r\n        if (loopDict.has(\"T\")) {\r\n          fieldName.unshift((0, _util.stringToPDFString)(loopDict.get(\"T\")));\r\n        }\r\n      }\r\n\r\n      return fieldName.join(\".\");\r\n    }\r\n  }, {\r\n    key: \"_decodeFormValue\",\r\n    value: function _decodeFormValue(formValue) {\r\n      if (Array.isArray(formValue)) {\r\n        return formValue.filter(function (item) {\r\n          return (0, _util.isString)(item);\r\n        }).map(function (item) {\r\n          return (0, _util.stringToPDFString)(item);\r\n        });\r\n      } else if ((0, _primitives.isName)(formValue)) {\r\n        return (0, _util.stringToPDFString)(formValue.name);\r\n      } else if ((0, _util.isString)(formValue)) {\r\n        return (0, _util.stringToPDFString)(formValue);\r\n      }\r\n\r\n      return null;\r\n    }\r\n  }, {\r\n    key: \"hasFieldFlag\",\r\n    value: function hasFieldFlag(flag) {\r\n      return !!(this.data.fieldFlags & flag);\r\n    }\r\n  }, {\r\n    key: \"getOperatorList\",\r\n    value: function getOperatorList(evaluator, task, renderForms, annotationStorage) {\r\n      var _this5 = this;\r\n\r\n      if (renderForms) {\r\n        return Promise.resolve(new _operator_list.OperatorList());\r\n      }\r\n\r\n      if (!this._hasText) {\r\n        return _get(_getPrototypeOf(WidgetAnnotation.prototype), \"getOperatorList\", this).call(this, evaluator, task, renderForms, annotationStorage);\r\n      }\r\n\r\n      return this._getAppearance(evaluator, task, annotationStorage).then(function (content) {\r\n        if (_this5.appearance && content === null) {\r\n          return _get(_getPrototypeOf(WidgetAnnotation.prototype), \"getOperatorList\", _this5).call(_this5, evaluator, task, renderForms, annotationStorage);\r\n        }\r\n\r\n        var operatorList = new _operator_list.OperatorList();\r\n\r\n        if (!_this5.data.defaultAppearance || content === null) {\r\n          return operatorList;\r\n        }\r\n\r\n        var matrix = [1, 0, 0, 1, 0, 0];\r\n        var bbox = [0, 0, _this5.data.rect[2] - _this5.data.rect[0], _this5.data.rect[3] - _this5.data.rect[1]];\r\n        var transform = getTransformMatrix(_this5.data.rect, bbox, matrix);\r\n        operatorList.addOp(_util.OPS.beginAnnotation, [_this5.data.rect, transform, matrix]);\r\n        var stream = new _stream.StringStream(content);\r\n        return evaluator.getOperatorList({\r\n          stream: stream,\r\n          task: task,\r\n          resources: _this5._fieldResources.mergedResources,\r\n          operatorList: operatorList\r\n        }).then(function () {\r\n          operatorList.addOp(_util.OPS.endAnnotation, []);\r\n          return operatorList;\r\n        });\r\n      });\r\n    }\r\n  }, {\r\n    key: \"save\",\r\n    value: function () {\r\n      var _save2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(evaluator, task, annotationStorage) {\r\n        var value, appearance, xref, dict, bbox, xfa, newRef, AP, encrypt, originalTransform, newTransform, appearanceDict, bufferOriginal, bufferNew;\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                value = annotationStorage[this.data.id] && annotationStorage[this.data.id].value;\r\n\r\n                if (!(value === this.data.fieldValue || value === undefined)) {\r\n                  _context2.next = 3;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", null);\r\n\r\n              case 3:\r\n                _context2.next = 5;\r\n                return this._getAppearance(evaluator, task, annotationStorage);\r\n\r\n              case 5:\r\n                appearance = _context2.sent;\r\n\r\n                if (!(appearance === null)) {\r\n                  _context2.next = 8;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", null);\r\n\r\n              case 8:\r\n                xref = evaluator.xref;\r\n                dict = xref.fetchIfRef(this.ref);\r\n\r\n                if ((0, _primitives.isDict)(dict)) {\r\n                  _context2.next = 12;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", null);\r\n\r\n              case 12:\r\n                bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]];\r\n                xfa = {\r\n                  path: (0, _util.stringToPDFString)(dict.get(\"T\") || \"\"),\r\n                  value: value\r\n                };\r\n                newRef = xref.getNewRef();\r\n                AP = new _primitives.Dict(xref);\r\n                AP.set(\"N\", newRef);\r\n                encrypt = xref.encrypt;\r\n                originalTransform = null;\r\n                newTransform = null;\r\n\r\n                if (encrypt) {\r\n                  originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);\r\n                  newTransform = encrypt.createCipherTransform(newRef.num, newRef.gen);\r\n                  appearance = newTransform.encryptString(appearance);\r\n                }\r\n\r\n                dict.set(\"V\", (0, _util.isAscii)(value) ? value : (0, _util.stringToUTF16BEString)(value));\r\n                dict.set(\"AP\", AP);\r\n                dict.set(\"M\", \"D:\".concat((0, _util.getModificationDate)()));\r\n                appearanceDict = new _primitives.Dict(xref);\r\n                appearanceDict.set(\"Length\", appearance.length);\r\n                appearanceDict.set(\"Subtype\", _primitives.Name.get(\"Form\"));\r\n                appearanceDict.set(\"Resources\", this._getSaveFieldResources(xref));\r\n                appearanceDict.set(\"BBox\", bbox);\r\n                bufferOriginal = [\"\".concat(this.ref.num, \" \").concat(this.ref.gen, \" obj\\n\")];\r\n                (0, _writer.writeDict)(dict, bufferOriginal, originalTransform);\r\n                bufferOriginal.push(\"\\nendobj\\n\");\r\n                bufferNew = [\"\".concat(newRef.num, \" \").concat(newRef.gen, \" obj\\n\")];\r\n                (0, _writer.writeDict)(appearanceDict, bufferNew, newTransform);\r\n                bufferNew.push(\" stream\\n\");\r\n                bufferNew.push(appearance);\r\n                bufferNew.push(\"\\nendstream\\nendobj\\n\");\r\n                return _context2.abrupt(\"return\", [{\r\n                  ref: this.ref,\r\n                  data: bufferOriginal.join(\"\"),\r\n                  xfa: xfa\r\n                }, {\r\n                  ref: newRef,\r\n                  data: bufferNew.join(\"\"),\r\n                  xfa: null\r\n                }]);\r\n\r\n              case 38:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this);\r\n      }));\r\n\r\n      function save(_x4, _x5, _x6) {\r\n        return _save2.apply(this, arguments);\r\n      }\r\n\r\n      return save;\r\n    }()\r\n  }, {\r\n    key: \"_getAppearance\",\r\n    value: function () {\r\n      var _getAppearance2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3(evaluator, task, annotationStorage) {\r\n        var isPassword, value, defaultPadding, hPadding, totalHeight, totalWidth, font, fontSize, descent, vPadding, defaultAppearance, alignment, encodedString, renderedText;\r\n        return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\r\n          while (1) {\r\n            switch (_context3.prev = _context3.next) {\r\n              case 0:\r\n                isPassword = this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD);\r\n\r\n                if (!(!annotationStorage || isPassword)) {\r\n                  _context3.next = 3;\r\n                  break;\r\n                }\r\n\r\n                return _context3.abrupt(\"return\", null);\r\n\r\n              case 3:\r\n                value = annotationStorage[this.data.id] && annotationStorage[this.data.id].value;\r\n\r\n                if (!(value === undefined)) {\r\n                  _context3.next = 6;\r\n                  break;\r\n                }\r\n\r\n                return _context3.abrupt(\"return\", null);\r\n\r\n              case 6:\r\n                if (!(value === \"\")) {\r\n                  _context3.next = 8;\r\n                  break;\r\n                }\r\n\r\n                return _context3.abrupt(\"return\", \"\");\r\n\r\n              case 8:\r\n                defaultPadding = 2;\r\n                hPadding = defaultPadding;\r\n                totalHeight = this.data.rect[3] - this.data.rect[1];\r\n                totalWidth = this.data.rect[2] - this.data.rect[0];\r\n\r\n                if (!this.data.defaultAppearance) {\r\n                  this.data.defaultAppearance = \"/Helvetica 0 Tf 0 g\";\r\n                  this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this.data.defaultAppearance);\r\n                }\r\n\r\n                _context3.next = 15;\r\n                return this._getFontData(evaluator, task);\r\n\r\n              case 15:\r\n                font = _context3.sent;\r\n                fontSize = this._computeFontSize(font, totalHeight);\r\n                descent = font.descent;\r\n\r\n                if (isNaN(descent)) {\r\n                  descent = 0;\r\n                }\r\n\r\n                vPadding = defaultPadding + Math.abs(descent) * fontSize;\r\n                defaultAppearance = this.data.defaultAppearance;\r\n                alignment = this.data.textAlignment;\r\n\r\n                if (!this.data.multiLine) {\r\n                  _context3.next = 24;\r\n                  break;\r\n                }\r\n\r\n                return _context3.abrupt(\"return\", this._getMultilineAppearance(defaultAppearance, value, font, fontSize, totalWidth, totalHeight, alignment, hPadding, vPadding));\r\n\r\n              case 24:\r\n                encodedString = font.encodeString(value).join(\"\");\r\n\r\n                if (!this.data.comb) {\r\n                  _context3.next = 27;\r\n                  break;\r\n                }\r\n\r\n                return _context3.abrupt(\"return\", this._getCombAppearance(defaultAppearance, font, encodedString, totalWidth, hPadding, vPadding));\r\n\r\n              case 27:\r\n                if (!(alignment === 0 || alignment > 2)) {\r\n                  _context3.next = 29;\r\n                  break;\r\n                }\r\n\r\n                return _context3.abrupt(\"return\", \"/Tx BMC q BT \" + defaultAppearance + \" 1 0 0 1 \".concat(hPadding, \" \").concat(vPadding, \" Tm (\").concat((0, _util.escapeString)(encodedString), \") Tj\") + \" ET Q EMC\");\r\n\r\n              case 29:\r\n                renderedText = this._renderText(encodedString, font, fontSize, totalWidth, alignment, hPadding, vPadding);\r\n                return _context3.abrupt(\"return\", \"/Tx BMC q BT \" + defaultAppearance + \" 1 0 0 1 0 0 Tm \".concat(renderedText) + \" ET Q EMC\");\r\n\r\n              case 31:\r\n              case \"end\":\r\n                return _context3.stop();\r\n            }\r\n          }\r\n        }, _callee3, this);\r\n      }));\r\n\r\n      function _getAppearance(_x7, _x8, _x9) {\r\n        return _getAppearance2.apply(this, arguments);\r\n      }\r\n\r\n      return _getAppearance;\r\n    }()\r\n  }, {\r\n    key: \"_getFontData\",\r\n    value: function () {\r\n      var _getFontData2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(evaluator, task) {\r\n        var operatorList, initialState, _this$data$defaultApp, fontName, fontSize;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\r\n          while (1) {\r\n            switch (_context4.prev = _context4.next) {\r\n              case 0:\r\n                operatorList = new _operator_list.OperatorList();\r\n                initialState = {\r\n                  font: null,\r\n                  clone: function clone() {\r\n                    return this;\r\n                  }\r\n                };\r\n                _this$data$defaultApp = this.data.defaultAppearanceData, fontName = _this$data$defaultApp.fontName, fontSize = _this$data$defaultApp.fontSize;\r\n                _context4.next = 5;\r\n                return evaluator.handleSetFont(this._fieldResources.mergedResources, [fontName, fontSize], null, operatorList, task, initialState, null);\r\n\r\n              case 5:\r\n                return _context4.abrupt(\"return\", initialState.font);\r\n\r\n              case 6:\r\n              case \"end\":\r\n                return _context4.stop();\r\n            }\r\n          }\r\n        }, _callee4, this);\r\n      }));\r\n\r\n      function _getFontData(_x10, _x11) {\r\n        return _getFontData2.apply(this, arguments);\r\n      }\r\n\r\n      return _getFontData;\r\n    }()\r\n  }, {\r\n    key: \"_computeFontSize\",\r\n    value: function _computeFontSize(font, height) {\r\n      var fontSize = this.data.defaultAppearanceData.fontSize;\r\n\r\n      if (!fontSize) {\r\n        var _this$data$defaultApp2 = this.data.defaultAppearanceData,\r\n            fontColor = _this$data$defaultApp2.fontColor,\r\n            fontName = _this$data$defaultApp2.fontName;\r\n        var capHeight;\r\n\r\n        if (font.capHeight) {\r\n          capHeight = font.capHeight;\r\n        } else {\r\n          var glyphs = font.charsToGlyphs(font.encodeString(\"M\").join(\"\"));\r\n\r\n          if (glyphs.length === 1 && glyphs[0].width) {\r\n            var em = glyphs[0].width / 1000;\r\n            capHeight = 0.7 * em;\r\n          } else {\r\n            capHeight = 0.7;\r\n          }\r\n        }\r\n\r\n        fontSize = Math.max(1, Math.floor(height / (1.5 * capHeight)));\r\n        this.data.defaultAppearance = (0, _default_appearance.createDefaultAppearance)({\r\n          fontSize: fontSize,\r\n          fontName: fontName,\r\n          fontColor: fontColor\r\n        });\r\n      }\r\n\r\n      return fontSize;\r\n    }\r\n  }, {\r\n    key: \"_renderText\",\r\n    value: function _renderText(text, font, fontSize, totalWidth, alignment, hPadding, vPadding) {\r\n      var glyphs = font.charsToGlyphs(text);\r\n      var scale = fontSize / 1000;\r\n      var width = 0;\r\n\r\n      var _iterator4 = _createForOfIteratorHelper(glyphs),\r\n          _step4;\r\n\r\n      try {\r\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\r\n          var glyph = _step4.value;\r\n          width += glyph.width * scale;\r\n        }\r\n      } catch (err) {\r\n        _iterator4.e(err);\r\n      } finally {\r\n        _iterator4.f();\r\n      }\r\n\r\n      var shift;\r\n\r\n      if (alignment === 1) {\r\n        shift = (totalWidth - width) / 2;\r\n      } else if (alignment === 2) {\r\n        shift = totalWidth - width - hPadding;\r\n      } else {\r\n        shift = hPadding;\r\n      }\r\n\r\n      shift = shift.toFixed(2);\r\n      vPadding = vPadding.toFixed(2);\r\n      return \"\".concat(shift, \" \").concat(vPadding, \" Td (\").concat((0, _util.escapeString)(text), \") Tj\");\r\n    }\r\n  }, {\r\n    key: \"_getSaveFieldResources\",\r\n    value: function _getSaveFieldResources(xref) {\r\n      var _this$_fieldResources = this._fieldResources,\r\n          localResources = _this$_fieldResources.localResources,\r\n          appearanceResources = _this$_fieldResources.appearanceResources,\r\n          acroFormResources = _this$_fieldResources.acroFormResources;\r\n      var fontNameStr = this.data.defaultAppearanceData && this.data.defaultAppearanceData.fontName.name;\r\n\r\n      if (!fontNameStr) {\r\n        return localResources || _primitives.Dict.empty;\r\n      }\r\n\r\n      for (var _i2 = 0, _arr2 = [localResources, appearanceResources]; _i2 < _arr2.length; _i2++) {\r\n        var resources = _arr2[_i2];\r\n\r\n        if (resources instanceof _primitives.Dict) {\r\n          var localFont = resources.get(\"Font\");\r\n\r\n          if (localFont instanceof _primitives.Dict && localFont.has(fontNameStr)) {\r\n            return resources;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (acroFormResources instanceof _primitives.Dict) {\r\n        var acroFormFont = acroFormResources.get(\"Font\");\r\n\r\n        if (acroFormFont instanceof _primitives.Dict && acroFormFont.has(fontNameStr)) {\r\n          var subFontDict = new _primitives.Dict(xref);\r\n          subFontDict.set(fontNameStr, acroFormFont.getRaw(fontNameStr));\r\n          var subResourcesDict = new _primitives.Dict(xref);\r\n          subResourcesDict.set(\"Font\", subFontDict);\r\n          return _primitives.Dict.merge({\r\n            xref: xref,\r\n            dictArray: [subResourcesDict, localResources],\r\n            mergeSubDicts: true\r\n          });\r\n        }\r\n      }\r\n\r\n      return localResources || _primitives.Dict.empty;\r\n    }\r\n  }, {\r\n    key: \"getFieldObject\",\r\n    value: function getFieldObject() {\r\n      if (this.data.fieldType === \"Sig\") {\r\n        return {\r\n          id: this.data.id,\r\n          value: null,\r\n          type: \"signature\"\r\n        };\r\n      }\r\n\r\n      return null;\r\n    }\r\n  }]);\r\n\r\n  return WidgetAnnotation;\r\n}(Annotation);\r\n\r\nvar TextWidgetAnnotation = /*#__PURE__*/function (_WidgetAnnotation) {\r\n  _inherits(TextWidgetAnnotation, _WidgetAnnotation);\r\n\r\n  var _super3 = _createSuper(TextWidgetAnnotation);\r\n\r\n  function TextWidgetAnnotation(params) {\r\n    var _this6;\r\n\r\n    _classCallCheck(this, TextWidgetAnnotation);\r\n\r\n    _this6 = _super3.call(this, params);\r\n    _this6._hasText = true;\r\n    var dict = params.dict;\r\n\r\n    if (!(0, _util.isString)(_this6.data.fieldValue)) {\r\n      _this6.data.fieldValue = \"\";\r\n    }\r\n\r\n    var alignment = (0, _core_utils.getInheritableProperty)({\r\n      dict: dict,\r\n      key: \"Q\"\r\n    });\r\n\r\n    if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) {\r\n      alignment = null;\r\n    }\r\n\r\n    _this6.data.textAlignment = alignment;\r\n    var maximumLength = (0, _core_utils.getInheritableProperty)({\r\n      dict: dict,\r\n      key: \"MaxLen\"\r\n    });\r\n\r\n    if (!Number.isInteger(maximumLength) || maximumLength < 0) {\r\n      maximumLength = null;\r\n    }\r\n\r\n    _this6.data.maxLen = maximumLength;\r\n    _this6.data.multiLine = _this6.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE);\r\n    _this6.data.comb = _this6.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !_this6.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !_this6.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !_this6.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && _this6.data.maxLen !== null;\r\n    return _this6;\r\n  }\r\n\r\n  _createClass(TextWidgetAnnotation, [{\r\n    key: \"_getCombAppearance\",\r\n    value: function _getCombAppearance(defaultAppearance, font, text, width, hPadding, vPadding) {\r\n      var combWidth = (width / this.data.maxLen).toFixed(2);\r\n      var buf = [];\r\n      var positions = font.getCharPositions(text);\r\n\r\n      var _iterator5 = _createForOfIteratorHelper(positions),\r\n          _step5;\r\n\r\n      try {\r\n        for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\r\n          var _step5$value = _slicedToArray(_step5.value, 2),\r\n              start = _step5$value[0],\r\n              end = _step5$value[1];\r\n\r\n          buf.push(\"(\".concat((0, _util.escapeString)(text.substring(start, end)), \") Tj\"));\r\n        }\r\n      } catch (err) {\r\n        _iterator5.e(err);\r\n      } finally {\r\n        _iterator5.f();\r\n      }\r\n\r\n      var renderedComb = buf.join(\" \".concat(combWidth, \" 0 Td \"));\r\n      return \"/Tx BMC q BT \" + defaultAppearance + \" 1 0 0 1 \".concat(hPadding, \" \").concat(vPadding, \" Tm \").concat(renderedComb) + \" ET Q EMC\";\r\n    }\r\n  }, {\r\n    key: \"_getMultilineAppearance\",\r\n    value: function _getMultilineAppearance(defaultAppearance, text, font, fontSize, width, height, alignment, hPadding, vPadding) {\r\n      var lines = text.split(/\\r\\n|\\r|\\n/);\r\n      var buf = [];\r\n      var totalWidth = width - 2 * hPadding;\r\n\r\n      var _iterator6 = _createForOfIteratorHelper(lines),\r\n          _step6;\r\n\r\n      try {\r\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\r\n          var line = _step6.value;\r\n\r\n          var chunks = this._splitLine(line, font, fontSize, totalWidth);\r\n\r\n          var _iterator7 = _createForOfIteratorHelper(chunks),\r\n              _step7;\r\n\r\n          try {\r\n            for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\r\n              var chunk = _step7.value;\r\n              var padding = buf.length === 0 ? hPadding : 0;\r\n              buf.push(this._renderText(chunk, font, fontSize, width, alignment, padding, -fontSize));\r\n            }\r\n          } catch (err) {\r\n            _iterator7.e(err);\r\n          } finally {\r\n            _iterator7.f();\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator6.e(err);\r\n      } finally {\r\n        _iterator6.f();\r\n      }\r\n\r\n      var renderedText = buf.join(\"\\n\");\r\n      return \"/Tx BMC q BT \" + defaultAppearance + \" 1 0 0 1 0 \".concat(height, \" Tm \").concat(renderedText) + \" ET Q EMC\";\r\n    }\r\n  }, {\r\n    key: \"_splitLine\",\r\n    value: function _splitLine(line, font, fontSize, width) {\r\n      line = font.encodeString(line).join(\"\");\r\n      var glyphs = font.charsToGlyphs(line);\r\n\r\n      if (glyphs.length <= 1) {\r\n        return [line];\r\n      }\r\n\r\n      var positions = font.getCharPositions(line);\r\n      var scale = fontSize / 1000;\r\n      var chunks = [];\r\n      var lastSpacePosInStringStart = -1,\r\n          lastSpacePosInStringEnd = -1,\r\n          lastSpacePos = -1,\r\n          startChunk = 0,\r\n          currentWidth = 0;\r\n\r\n      for (var i = 0, ii = glyphs.length; i < ii; i++) {\r\n        var _positions$i = _slicedToArray(positions[i], 2),\r\n            start = _positions$i[0],\r\n            end = _positions$i[1];\r\n\r\n        var glyph = glyphs[i];\r\n        var glyphWidth = glyph.width * scale;\r\n\r\n        if (glyph.unicode === \" \") {\r\n          if (currentWidth + glyphWidth > width) {\r\n            chunks.push(line.substring(startChunk, start));\r\n            startChunk = start;\r\n            currentWidth = glyphWidth;\r\n            lastSpacePosInStringStart = -1;\r\n            lastSpacePos = -1;\r\n          } else {\r\n            currentWidth += glyphWidth;\r\n            lastSpacePosInStringStart = start;\r\n            lastSpacePosInStringEnd = end;\r\n            lastSpacePos = i;\r\n          }\r\n        } else {\r\n          if (currentWidth + glyphWidth > width) {\r\n            if (lastSpacePosInStringStart !== -1) {\r\n              chunks.push(line.substring(startChunk, lastSpacePosInStringEnd));\r\n              startChunk = lastSpacePosInStringEnd;\r\n              i = lastSpacePos + 1;\r\n              lastSpacePosInStringStart = -1;\r\n              currentWidth = 0;\r\n            } else {\r\n              chunks.push(line.substring(startChunk, start));\r\n              startChunk = start;\r\n              currentWidth = glyphWidth;\r\n            }\r\n          } else {\r\n            currentWidth += glyphWidth;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (startChunk < line.length) {\r\n        chunks.push(line.substring(startChunk, line.length));\r\n      }\r\n\r\n      return chunks;\r\n    }\r\n  }, {\r\n    key: \"getFieldObject\",\r\n    value: function getFieldObject() {\r\n      return {\r\n        id: this.data.id,\r\n        value: this.data.fieldValue,\r\n        defaultValue: this.data.defaultFieldValue,\r\n        multiline: this.data.multiLine,\r\n        password: this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD),\r\n        charLimit: this.data.maxLen,\r\n        comb: this.data.comb,\r\n        editable: !this.data.readOnly,\r\n        hidden: this.data.hidden,\r\n        name: this.data.fieldName,\r\n        rect: this.data.rect,\r\n        actions: this.data.actions,\r\n        type: \"text\"\r\n      };\r\n    }\r\n  }]);\r\n\r\n  return TextWidgetAnnotation;\r\n}(WidgetAnnotation);\r\n\r\nvar ButtonWidgetAnnotation = /*#__PURE__*/function (_WidgetAnnotation2) {\r\n  _inherits(ButtonWidgetAnnotation, _WidgetAnnotation2);\r\n\r\n  var _super4 = _createSuper(ButtonWidgetAnnotation);\r\n\r\n  function ButtonWidgetAnnotation(params) {\r\n    var _this7;\r\n\r\n    _classCallCheck(this, ButtonWidgetAnnotation);\r\n\r\n    _this7 = _super4.call(this, params);\r\n    _this7.checkedAppearance = null;\r\n    _this7.uncheckedAppearance = null;\r\n    _this7.data.checkBox = !_this7.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !_this7.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);\r\n    _this7.data.radioButton = _this7.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !_this7.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);\r\n    _this7.data.pushButton = _this7.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);\r\n    _this7.data.isTooltipOnly = false;\r\n\r\n    if (_this7.data.checkBox) {\r\n      _this7._processCheckBox(params);\r\n    } else if (_this7.data.radioButton) {\r\n      _this7._processRadioButton(params);\r\n    } else if (_this7.data.pushButton) {\r\n      _this7._processPushButton(params);\r\n    } else {\r\n      (0, _util.warn)(\"Invalid field flags for button widget annotation\");\r\n    }\r\n\r\n    return _this7;\r\n  }\r\n\r\n  _createClass(ButtonWidgetAnnotation, [{\r\n    key: \"getOperatorList\",\r\n    value: function getOperatorList(evaluator, task, renderForms, annotationStorage) {\r\n      if (this.data.pushButton) {\r\n        return _get(_getPrototypeOf(ButtonWidgetAnnotation.prototype), \"getOperatorList\", this).call(this, evaluator, task, false, annotationStorage);\r\n      }\r\n\r\n      if (annotationStorage) {\r\n        var value = annotationStorage[this.data.id] && annotationStorage[this.data.id].value;\r\n\r\n        if (value === undefined) {\r\n          return _get(_getPrototypeOf(ButtonWidgetAnnotation.prototype), \"getOperatorList\", this).call(this, evaluator, task, renderForms, annotationStorage);\r\n        }\r\n\r\n        var appearance;\r\n\r\n        if (value) {\r\n          appearance = this.checkedAppearance;\r\n        } else {\r\n          appearance = this.uncheckedAppearance;\r\n        }\r\n\r\n        if (appearance) {\r\n          var savedAppearance = this.appearance;\r\n          this.appearance = appearance;\r\n\r\n          var operatorList = _get(_getPrototypeOf(ButtonWidgetAnnotation.prototype), \"getOperatorList\", this).call(this, evaluator, task, renderForms, annotationStorage);\r\n\r\n          this.appearance = savedAppearance;\r\n          return operatorList;\r\n        }\r\n\r\n        return Promise.resolve(new _operator_list.OperatorList());\r\n      }\r\n\r\n      return _get(_getPrototypeOf(ButtonWidgetAnnotation.prototype), \"getOperatorList\", this).call(this, evaluator, task, renderForms, annotationStorage);\r\n    }\r\n  }, {\r\n    key: \"save\",\r\n    value: function () {\r\n      var _save3 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee5(evaluator, task, annotationStorage) {\r\n        return _regenerator[\"default\"].wrap(function _callee5$(_context5) {\r\n          while (1) {\r\n            switch (_context5.prev = _context5.next) {\r\n              case 0:\r\n                if (!this.data.checkBox) {\r\n                  _context5.next = 2;\r\n                  break;\r\n                }\r\n\r\n                return _context5.abrupt(\"return\", this._saveCheckbox(evaluator, task, annotationStorage));\r\n\r\n              case 2:\r\n                if (!this.data.radioButton) {\r\n                  _context5.next = 4;\r\n                  break;\r\n                }\r\n\r\n                return _context5.abrupt(\"return\", this._saveRadioButton(evaluator, task, annotationStorage));\r\n\r\n              case 4:\r\n                return _context5.abrupt(\"return\", null);\r\n\r\n              case 5:\r\n              case \"end\":\r\n                return _context5.stop();\r\n            }\r\n          }\r\n        }, _callee5, this);\r\n      }));\r\n\r\n      function save(_x12, _x13, _x14) {\r\n        return _save3.apply(this, arguments);\r\n      }\r\n\r\n      return save;\r\n    }()\r\n  }, {\r\n    key: \"_saveCheckbox\",\r\n    value: function () {\r\n      var _saveCheckbox2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee6(evaluator, task, annotationStorage) {\r\n        var value, defaultValue, dict, xfa, name, encrypt, originalTransform, buffer;\r\n        return _regenerator[\"default\"].wrap(function _callee6$(_context6) {\r\n          while (1) {\r\n            switch (_context6.prev = _context6.next) {\r\n              case 0:\r\n                value = annotationStorage[this.data.id] && annotationStorage[this.data.id].value;\r\n\r\n                if (!(value === undefined)) {\r\n                  _context6.next = 3;\r\n                  break;\r\n                }\r\n\r\n                return _context6.abrupt(\"return\", null);\r\n\r\n              case 3:\r\n                defaultValue = this.data.fieldValue && this.data.fieldValue !== \"Off\";\r\n\r\n                if (!(defaultValue === value)) {\r\n                  _context6.next = 6;\r\n                  break;\r\n                }\r\n\r\n                return _context6.abrupt(\"return\", null);\r\n\r\n              case 6:\r\n                dict = evaluator.xref.fetchIfRef(this.ref);\r\n\r\n                if ((0, _primitives.isDict)(dict)) {\r\n                  _context6.next = 9;\r\n                  break;\r\n                }\r\n\r\n                return _context6.abrupt(\"return\", null);\r\n\r\n              case 9:\r\n                xfa = {\r\n                  path: (0, _util.stringToPDFString)(dict.get(\"T\") || \"\"),\r\n                  value: value ? this.data.exportValue : \"\"\r\n                };\r\n                name = _primitives.Name.get(value ? this.data.exportValue : \"Off\");\r\n                dict.set(\"V\", name);\r\n                dict.set(\"AS\", name);\r\n                dict.set(\"M\", \"D:\".concat((0, _util.getModificationDate)()));\r\n                encrypt = evaluator.xref.encrypt;\r\n                originalTransform = null;\r\n\r\n                if (encrypt) {\r\n                  originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);\r\n                }\r\n\r\n                buffer = [\"\".concat(this.ref.num, \" \").concat(this.ref.gen, \" obj\\n\")];\r\n                (0, _writer.writeDict)(dict, buffer, originalTransform);\r\n                buffer.push(\"\\nendobj\\n\");\r\n                return _context6.abrupt(\"return\", [{\r\n                  ref: this.ref,\r\n                  data: buffer.join(\"\"),\r\n                  xfa: xfa\r\n                }]);\r\n\r\n              case 21:\r\n              case \"end\":\r\n                return _context6.stop();\r\n            }\r\n          }\r\n        }, _callee6, this);\r\n      }));\r\n\r\n      function _saveCheckbox(_x15, _x16, _x17) {\r\n        return _saveCheckbox2.apply(this, arguments);\r\n      }\r\n\r\n      return _saveCheckbox;\r\n    }()\r\n  }, {\r\n    key: \"_saveRadioButton\",\r\n    value: function () {\r\n      var _saveRadioButton2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee7(evaluator, task, annotationStorage) {\r\n        var value, defaultValue, dict, xfa, name, parentBuffer, encrypt, parent, parentTransform, originalTransform, buffer, newRefs;\r\n        return _regenerator[\"default\"].wrap(function _callee7$(_context7) {\r\n          while (1) {\r\n            switch (_context7.prev = _context7.next) {\r\n              case 0:\r\n                value = annotationStorage[this.data.id] && annotationStorage[this.data.id].value;\r\n\r\n                if (!(value === undefined)) {\r\n                  _context7.next = 3;\r\n                  break;\r\n                }\r\n\r\n                return _context7.abrupt(\"return\", null);\r\n\r\n              case 3:\r\n                defaultValue = this.data.fieldValue === this.data.buttonValue;\r\n\r\n                if (!(defaultValue === value)) {\r\n                  _context7.next = 6;\r\n                  break;\r\n                }\r\n\r\n                return _context7.abrupt(\"return\", null);\r\n\r\n              case 6:\r\n                dict = evaluator.xref.fetchIfRef(this.ref);\r\n\r\n                if ((0, _primitives.isDict)(dict)) {\r\n                  _context7.next = 9;\r\n                  break;\r\n                }\r\n\r\n                return _context7.abrupt(\"return\", null);\r\n\r\n              case 9:\r\n                xfa = {\r\n                  path: (0, _util.stringToPDFString)(dict.get(\"T\") || \"\"),\r\n                  value: value ? this.data.buttonValue : \"\"\r\n                };\r\n                name = _primitives.Name.get(value ? this.data.buttonValue : \"Off\");\r\n                parentBuffer = null;\r\n                encrypt = evaluator.xref.encrypt;\r\n\r\n                if (value) {\r\n                  if ((0, _primitives.isRef)(this.parent)) {\r\n                    parent = evaluator.xref.fetch(this.parent);\r\n                    parentTransform = null;\r\n\r\n                    if (encrypt) {\r\n                      parentTransform = encrypt.createCipherTransform(this.parent.num, this.parent.gen);\r\n                    }\r\n\r\n                    parent.set(\"V\", name);\r\n                    parentBuffer = [\"\".concat(this.parent.num, \" \").concat(this.parent.gen, \" obj\\n\")];\r\n                    (0, _writer.writeDict)(parent, parentBuffer, parentTransform);\r\n                    parentBuffer.push(\"\\nendobj\\n\");\r\n                  } else if ((0, _primitives.isDict)(this.parent)) {\r\n                    this.parent.set(\"V\", name);\r\n                  }\r\n                }\r\n\r\n                dict.set(\"AS\", name);\r\n                dict.set(\"M\", \"D:\".concat((0, _util.getModificationDate)()));\r\n                originalTransform = null;\r\n\r\n                if (encrypt) {\r\n                  originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);\r\n                }\r\n\r\n                buffer = [\"\".concat(this.ref.num, \" \").concat(this.ref.gen, \" obj\\n\")];\r\n                (0, _writer.writeDict)(dict, buffer, originalTransform);\r\n                buffer.push(\"\\nendobj\\n\");\r\n                newRefs = [{\r\n                  ref: this.ref,\r\n                  data: buffer.join(\"\"),\r\n                  xfa: xfa\r\n                }];\r\n\r\n                if (parentBuffer !== null) {\r\n                  newRefs.push({\r\n                    ref: this.parent,\r\n                    data: parentBuffer.join(\"\"),\r\n                    xfa: null\r\n                  });\r\n                }\r\n\r\n                return _context7.abrupt(\"return\", newRefs);\r\n\r\n              case 24:\r\n              case \"end\":\r\n                return _context7.stop();\r\n            }\r\n          }\r\n        }, _callee7, this);\r\n      }));\r\n\r\n      function _saveRadioButton(_x18, _x19, _x20) {\r\n        return _saveRadioButton2.apply(this, arguments);\r\n      }\r\n\r\n      return _saveRadioButton;\r\n    }()\r\n  }, {\r\n    key: \"_processCheckBox\",\r\n    value: function _processCheckBox(params) {\r\n      var customAppearance = params.dict.get(\"AP\");\r\n\r\n      if (!(0, _primitives.isDict)(customAppearance)) {\r\n        return;\r\n      }\r\n\r\n      var normalAppearance = customAppearance.get(\"N\");\r\n\r\n      if (!(0, _primitives.isDict)(normalAppearance)) {\r\n        return;\r\n      }\r\n\r\n      var exportValues = normalAppearance.getKeys();\r\n\r\n      if (!exportValues.includes(\"Off\")) {\r\n        exportValues.push(\"Off\");\r\n      }\r\n\r\n      if (exportValues.length !== 2) {\r\n        return;\r\n      }\r\n\r\n      this.data.exportValue = exportValues[0] === \"Off\" ? exportValues[1] : exportValues[0];\r\n      this.checkedAppearance = normalAppearance.get(this.data.exportValue);\r\n      this.uncheckedAppearance = normalAppearance.get(\"Off\") || null;\r\n\r\n      this._streams.push(this.checkedAppearance);\r\n\r\n      if (this.uncheckedAppearance) {\r\n        this._streams.push(this.uncheckedAppearance);\r\n      }\r\n\r\n      this._fallbackFontDict = this.fallbackFontDict;\r\n    }\r\n  }, {\r\n    key: \"_processRadioButton\",\r\n    value: function _processRadioButton(params) {\r\n      this.data.fieldValue = this.data.buttonValue = null;\r\n      var fieldParent = params.dict.get(\"Parent\");\r\n\r\n      if ((0, _primitives.isDict)(fieldParent)) {\r\n        this.parent = params.dict.getRaw(\"Parent\");\r\n        var fieldParentValue = fieldParent.get(\"V\");\r\n\r\n        if ((0, _primitives.isName)(fieldParentValue)) {\r\n          this.data.fieldValue = this._decodeFormValue(fieldParentValue);\r\n        }\r\n      }\r\n\r\n      var appearanceStates = params.dict.get(\"AP\");\r\n\r\n      if (!(0, _primitives.isDict)(appearanceStates)) {\r\n        return;\r\n      }\r\n\r\n      var normalAppearance = appearanceStates.get(\"N\");\r\n\r\n      if (!(0, _primitives.isDict)(normalAppearance)) {\r\n        return;\r\n      }\r\n\r\n      var _iterator8 = _createForOfIteratorHelper(normalAppearance.getKeys()),\r\n          _step8;\r\n\r\n      try {\r\n        for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\r\n          var key = _step8.value;\r\n\r\n          if (key !== \"Off\") {\r\n            this.data.buttonValue = this._decodeFormValue(key);\r\n            break;\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator8.e(err);\r\n      } finally {\r\n        _iterator8.f();\r\n      }\r\n\r\n      this.checkedAppearance = normalAppearance.get(this.data.buttonValue);\r\n      this.uncheckedAppearance = normalAppearance.get(\"Off\") || null;\r\n\r\n      this._streams.push(this.checkedAppearance);\r\n\r\n      if (this.uncheckedAppearance) {\r\n        this._streams.push(this.uncheckedAppearance);\r\n      }\r\n\r\n      this._fallbackFontDict = this.fallbackFontDict;\r\n    }\r\n  }, {\r\n    key: \"_processPushButton\",\r\n    value: function _processPushButton(params) {\r\n      if (!params.dict.has(\"A\") && !params.dict.has(\"AA\") && !this.data.alternativeText) {\r\n        (0, _util.warn)(\"Push buttons without action dictionaries are not supported\");\r\n        return;\r\n      }\r\n\r\n      this.data.isTooltipOnly = !params.dict.has(\"A\") && !params.dict.has(\"AA\");\r\n\r\n      _obj.Catalog.parseDestDictionary({\r\n        destDict: params.dict,\r\n        resultObj: this.data,\r\n        docBaseUrl: params.pdfManager.docBaseUrl\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getFieldObject\",\r\n    value: function getFieldObject() {\r\n      var type = \"button\";\r\n      var exportValues;\r\n\r\n      if (this.data.checkBox) {\r\n        type = \"checkbox\";\r\n        exportValues = this.data.exportValue;\r\n      } else if (this.data.radioButton) {\r\n        type = \"radiobutton\";\r\n        exportValues = this.data.buttonValue;\r\n      }\r\n\r\n      return {\r\n        id: this.data.id,\r\n        value: this.data.fieldValue || \"Off\",\r\n        defaultValue: this.data.defaultFieldValue,\r\n        exportValues: exportValues,\r\n        editable: !this.data.readOnly,\r\n        name: this.data.fieldName,\r\n        rect: this.data.rect,\r\n        hidden: this.data.hidden,\r\n        actions: this.data.actions,\r\n        type: type\r\n      };\r\n    }\r\n  }, {\r\n    key: \"fallbackFontDict\",\r\n    get: function get() {\r\n      var dict = new _primitives.Dict();\r\n      dict.set(\"BaseFont\", _primitives.Name.get(\"ZapfDingbats\"));\r\n      dict.set(\"Type\", _primitives.Name.get(\"FallbackType\"));\r\n      dict.set(\"Subtype\", _primitives.Name.get(\"FallbackType\"));\r\n      dict.set(\"Encoding\", _primitives.Name.get(\"ZapfDingbatsEncoding\"));\r\n      return (0, _util.shadow)(this, \"fallbackFontDict\", dict);\r\n    }\r\n  }]);\r\n\r\n  return ButtonWidgetAnnotation;\r\n}(WidgetAnnotation);\r\n\r\nvar ChoiceWidgetAnnotation = /*#__PURE__*/function (_WidgetAnnotation3) {\r\n  _inherits(ChoiceWidgetAnnotation, _WidgetAnnotation3);\r\n\r\n  var _super5 = _createSuper(ChoiceWidgetAnnotation);\r\n\r\n  function ChoiceWidgetAnnotation(params) {\r\n    var _this8;\r\n\r\n    _classCallCheck(this, ChoiceWidgetAnnotation);\r\n\r\n    _this8 = _super5.call(this, params);\r\n    _this8.data.options = [];\r\n    var options = (0, _core_utils.getInheritableProperty)({\r\n      dict: params.dict,\r\n      key: \"Opt\"\r\n    });\r\n\r\n    if (Array.isArray(options)) {\r\n      var xref = params.xref;\r\n\r\n      for (var i = 0, ii = options.length; i < ii; i++) {\r\n        var option = xref.fetchIfRef(options[i]);\r\n        var isOptionArray = Array.isArray(option);\r\n        _this8.data.options[i] = {\r\n          exportValue: _this8._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[0]) : option),\r\n          displayValue: _this8._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[1]) : option)\r\n        };\r\n      }\r\n    }\r\n\r\n    if ((0, _util.isString)(_this8.data.fieldValue)) {\r\n      _this8.data.fieldValue = [_this8.data.fieldValue];\r\n    } else if (!_this8.data.fieldValue) {\r\n      _this8.data.fieldValue = [];\r\n    }\r\n\r\n    _this8.data.combo = _this8.hasFieldFlag(_util.AnnotationFieldFlag.COMBO);\r\n    _this8.data.multiSelect = _this8.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT);\r\n    _this8._hasText = true;\r\n    return _this8;\r\n  }\r\n\r\n  _createClass(ChoiceWidgetAnnotation, [{\r\n    key: \"getFieldObject\",\r\n    value: function getFieldObject() {\r\n      var type = this.data.combo ? \"combobox\" : \"listbox\";\r\n      var value = this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null;\r\n      return {\r\n        id: this.data.id,\r\n        value: value,\r\n        defaultValue: this.data.defaultFieldValue,\r\n        editable: !this.data.readOnly,\r\n        name: this.data.fieldName,\r\n        rect: this.data.rect,\r\n        numItems: this.data.fieldValue.length,\r\n        multipleSelection: this.data.multiSelect,\r\n        hidden: this.data.hidden,\r\n        actions: this.data.actions,\r\n        items: this.data.options,\r\n        type: type\r\n      };\r\n    }\r\n  }]);\r\n\r\n  return ChoiceWidgetAnnotation;\r\n}(WidgetAnnotation);\r\n\r\nvar TextAnnotation = /*#__PURE__*/function (_MarkupAnnotation) {\r\n  _inherits(TextAnnotation, _MarkupAnnotation);\r\n\r\n  var _super6 = _createSuper(TextAnnotation);\r\n\r\n  function TextAnnotation(parameters) {\r\n    var _this9;\r\n\r\n    _classCallCheck(this, TextAnnotation);\r\n\r\n    var DEFAULT_ICON_SIZE = 22;\r\n    _this9 = _super6.call(this, parameters);\r\n    var dict = parameters.dict;\r\n    _this9.data.annotationType = _util.AnnotationType.TEXT;\r\n\r\n    if (_this9.data.hasAppearance) {\r\n      _this9.data.name = \"NoIcon\";\r\n    } else {\r\n      _this9.data.rect[1] = _this9.data.rect[3] - DEFAULT_ICON_SIZE;\r\n      _this9.data.rect[2] = _this9.data.rect[0] + DEFAULT_ICON_SIZE;\r\n      _this9.data.name = dict.has(\"Name\") ? dict.get(\"Name\").name : \"Note\";\r\n    }\r\n\r\n    if (dict.has(\"State\")) {\r\n      _this9.data.state = dict.get(\"State\") || null;\r\n      _this9.data.stateModel = dict.get(\"StateModel\") || null;\r\n    } else {\r\n      _this9.data.state = null;\r\n      _this9.data.stateModel = null;\r\n    }\r\n\r\n    return _this9;\r\n  }\r\n\r\n  return TextAnnotation;\r\n}(MarkupAnnotation);\r\n\r\nvar LinkAnnotation = /*#__PURE__*/function (_Annotation3) {\r\n  _inherits(LinkAnnotation, _Annotation3);\r\n\r\n  var _super7 = _createSuper(LinkAnnotation);\r\n\r\n  function LinkAnnotation(params) {\r\n    var _this10;\r\n\r\n    _classCallCheck(this, LinkAnnotation);\r\n\r\n    _this10 = _super7.call(this, params);\r\n    _this10.data.annotationType = _util.AnnotationType.LINK;\r\n    var quadPoints = getQuadPoints(params.dict, _this10.rectangle);\r\n\r\n    if (quadPoints) {\r\n      _this10.data.quadPoints = quadPoints;\r\n    }\r\n\r\n    _obj.Catalog.parseDestDictionary({\r\n      destDict: params.dict,\r\n      resultObj: _this10.data,\r\n      docBaseUrl: params.pdfManager.docBaseUrl\r\n    });\r\n\r\n    return _this10;\r\n  }\r\n\r\n  return LinkAnnotation;\r\n}(Annotation);\r\n\r\nvar PopupAnnotation = /*#__PURE__*/function (_Annotation4) {\r\n  _inherits(PopupAnnotation, _Annotation4);\r\n\r\n  var _super8 = _createSuper(PopupAnnotation);\r\n\r\n  function PopupAnnotation(parameters) {\r\n    var _this11;\r\n\r\n    _classCallCheck(this, PopupAnnotation);\r\n\r\n    _this11 = _super8.call(this, parameters);\r\n    _this11.data.annotationType = _util.AnnotationType.POPUP;\r\n    var parentItem = parameters.dict.get(\"Parent\");\r\n\r\n    if (!parentItem) {\r\n      (0, _util.warn)(\"Popup annotation has a missing or invalid parent annotation.\");\r\n      return _possibleConstructorReturn(_this11);\r\n    }\r\n\r\n    var parentSubtype = parentItem.get(\"Subtype\");\r\n    _this11.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null;\r\n    var rawParent = parameters.dict.getRaw(\"Parent\");\r\n    _this11.data.parentId = (0, _primitives.isRef)(rawParent) ? rawParent.toString() : null;\r\n    var parentRect = parentItem.getArray(\"Rect\");\r\n\r\n    if (Array.isArray(parentRect) && parentRect.length === 4) {\r\n      _this11.data.parentRect = _util.Util.normalizeRect(parentRect);\r\n    } else {\r\n      _this11.data.parentRect = [0, 0, 0, 0];\r\n    }\r\n\r\n    var rt = parentItem.get(\"RT\");\r\n\r\n    if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) {\r\n      parentItem = parentItem.get(\"IRT\");\r\n    }\r\n\r\n    if (!parentItem.has(\"M\")) {\r\n      _this11.data.modificationDate = null;\r\n    } else {\r\n      _this11.setModificationDate(parentItem.get(\"M\"));\r\n\r\n      _this11.data.modificationDate = _this11.modificationDate;\r\n    }\r\n\r\n    if (!parentItem.has(\"C\")) {\r\n      _this11.data.color = null;\r\n    } else {\r\n      _this11.setColor(parentItem.getArray(\"C\"));\r\n\r\n      _this11.data.color = _this11.color;\r\n    }\r\n\r\n    if (!_this11.viewable) {\r\n      var parentFlags = parentItem.get(\"F\");\r\n\r\n      if (_this11._isViewable(parentFlags)) {\r\n        _this11.setFlags(parentFlags);\r\n      }\r\n    }\r\n\r\n    _this11.data.title = (0, _util.stringToPDFString)(parentItem.get(\"T\") || \"\");\r\n    _this11.data.contents = (0, _util.stringToPDFString)(parentItem.get(\"Contents\") || \"\");\r\n    return _this11;\r\n  }\r\n\r\n  return PopupAnnotation;\r\n}(Annotation);\r\n\r\nvar FreeTextAnnotation = /*#__PURE__*/function (_MarkupAnnotation2) {\r\n  _inherits(FreeTextAnnotation, _MarkupAnnotation2);\r\n\r\n  var _super9 = _createSuper(FreeTextAnnotation);\r\n\r\n  function FreeTextAnnotation(parameters) {\r\n    var _this12;\r\n\r\n    _classCallCheck(this, FreeTextAnnotation);\r\n\r\n    _this12 = _super9.call(this, parameters);\r\n    _this12.data.annotationType = _util.AnnotationType.FREETEXT;\r\n    return _this12;\r\n  }\r\n\r\n  return FreeTextAnnotation;\r\n}(MarkupAnnotation);\r\n\r\nvar LineAnnotation = /*#__PURE__*/function (_MarkupAnnotation3) {\r\n  _inherits(LineAnnotation, _MarkupAnnotation3);\r\n\r\n  var _super10 = _createSuper(LineAnnotation);\r\n\r\n  function LineAnnotation(parameters) {\r\n    var _this13;\r\n\r\n    _classCallCheck(this, LineAnnotation);\r\n\r\n    _this13 = _super10.call(this, parameters);\r\n    _this13.data.annotationType = _util.AnnotationType.LINE;\r\n    _this13.data.lineCoordinates = _util.Util.normalizeRect(parameters.dict.getArray(\"L\"));\r\n    return _this13;\r\n  }\r\n\r\n  return LineAnnotation;\r\n}(MarkupAnnotation);\r\n\r\nvar SquareAnnotation = /*#__PURE__*/function (_MarkupAnnotation4) {\r\n  _inherits(SquareAnnotation, _MarkupAnnotation4);\r\n\r\n  var _super11 = _createSuper(SquareAnnotation);\r\n\r\n  function SquareAnnotation(parameters) {\r\n    var _this14;\r\n\r\n    _classCallCheck(this, SquareAnnotation);\r\n\r\n    _this14 = _super11.call(this, parameters);\r\n    _this14.data.annotationType = _util.AnnotationType.SQUARE;\r\n    return _this14;\r\n  }\r\n\r\n  return SquareAnnotation;\r\n}(MarkupAnnotation);\r\n\r\nvar CircleAnnotation = /*#__PURE__*/function (_MarkupAnnotation5) {\r\n  _inherits(CircleAnnotation, _MarkupAnnotation5);\r\n\r\n  var _super12 = _createSuper(CircleAnnotation);\r\n\r\n  function CircleAnnotation(parameters) {\r\n    var _this15;\r\n\r\n    _classCallCheck(this, CircleAnnotation);\r\n\r\n    _this15 = _super12.call(this, parameters);\r\n    _this15.data.annotationType = _util.AnnotationType.CIRCLE;\r\n    return _this15;\r\n  }\r\n\r\n  return CircleAnnotation;\r\n}(MarkupAnnotation);\r\n\r\nvar PolylineAnnotation = /*#__PURE__*/function (_MarkupAnnotation6) {\r\n  _inherits(PolylineAnnotation, _MarkupAnnotation6);\r\n\r\n  var _super13 = _createSuper(PolylineAnnotation);\r\n\r\n  function PolylineAnnotation(parameters) {\r\n    var _this16;\r\n\r\n    _classCallCheck(this, PolylineAnnotation);\r\n\r\n    _this16 = _super13.call(this, parameters);\r\n    _this16.data.annotationType = _util.AnnotationType.POLYLINE;\r\n    _this16.data.vertices = [];\r\n    var rawVertices = parameters.dict.getArray(\"Vertices\");\r\n\r\n    if (!Array.isArray(rawVertices)) {\r\n      return _possibleConstructorReturn(_this16);\r\n    }\r\n\r\n    for (var i = 0, ii = rawVertices.length; i < ii; i += 2) {\r\n      _this16.data.vertices.push({\r\n        x: rawVertices[i],\r\n        y: rawVertices[i + 1]\r\n      });\r\n    }\r\n\r\n    return _this16;\r\n  }\r\n\r\n  return PolylineAnnotation;\r\n}(MarkupAnnotation);\r\n\r\nvar PolygonAnnotation = /*#__PURE__*/function (_PolylineAnnotation) {\r\n  _inherits(PolygonAnnotation, _PolylineAnnotation);\r\n\r\n  var _super14 = _createSuper(PolygonAnnotation);\r\n\r\n  function PolygonAnnotation(parameters) {\r\n    var _this17;\r\n\r\n    _classCallCheck(this, PolygonAnnotation);\r\n\r\n    _this17 = _super14.call(this, parameters);\r\n    _this17.data.annotationType = _util.AnnotationType.POLYGON;\r\n    return _this17;\r\n  }\r\n\r\n  return PolygonAnnotation;\r\n}(PolylineAnnotation);\r\n\r\nvar CaretAnnotation = /*#__PURE__*/function (_MarkupAnnotation7) {\r\n  _inherits(CaretAnnotation, _MarkupAnnotation7);\r\n\r\n  var _super15 = _createSuper(CaretAnnotation);\r\n\r\n  function CaretAnnotation(parameters) {\r\n    var _this18;\r\n\r\n    _classCallCheck(this, CaretAnnotation);\r\n\r\n    _this18 = _super15.call(this, parameters);\r\n    _this18.data.annotationType = _util.AnnotationType.CARET;\r\n    return _this18;\r\n  }\r\n\r\n  return CaretAnnotation;\r\n}(MarkupAnnotation);\r\n\r\nvar InkAnnotation = /*#__PURE__*/function (_MarkupAnnotation8) {\r\n  _inherits(InkAnnotation, _MarkupAnnotation8);\r\n\r\n  var _super16 = _createSuper(InkAnnotation);\r\n\r\n  function InkAnnotation(parameters) {\r\n    var _this19;\r\n\r\n    _classCallCheck(this, InkAnnotation);\r\n\r\n    _this19 = _super16.call(this, parameters);\r\n    _this19.data.annotationType = _util.AnnotationType.INK;\r\n    _this19.data.inkLists = [];\r\n    var rawInkLists = parameters.dict.getArray(\"InkList\");\r\n\r\n    if (!Array.isArray(rawInkLists)) {\r\n      return _possibleConstructorReturn(_this19);\r\n    }\r\n\r\n    var xref = parameters.xref;\r\n\r\n    for (var i = 0, ii = rawInkLists.length; i < ii; ++i) {\r\n      _this19.data.inkLists.push([]);\r\n\r\n      for (var j = 0, jj = rawInkLists[i].length; j < jj; j += 2) {\r\n        _this19.data.inkLists[i].push({\r\n          x: xref.fetchIfRef(rawInkLists[i][j]),\r\n          y: xref.fetchIfRef(rawInkLists[i][j + 1])\r\n        });\r\n      }\r\n    }\r\n\r\n    return _this19;\r\n  }\r\n\r\n  return InkAnnotation;\r\n}(MarkupAnnotation);\r\n\r\nvar HighlightAnnotation = /*#__PURE__*/function (_MarkupAnnotation9) {\r\n  _inherits(HighlightAnnotation, _MarkupAnnotation9);\r\n\r\n  var _super17 = _createSuper(HighlightAnnotation);\r\n\r\n  function HighlightAnnotation(parameters) {\r\n    var _this20;\r\n\r\n    _classCallCheck(this, HighlightAnnotation);\r\n\r\n    _this20 = _super17.call(this, parameters);\r\n    _this20.data.annotationType = _util.AnnotationType.HIGHLIGHT;\r\n    var quadPoints = _this20.data.quadPoints = getQuadPoints(parameters.dict, null);\r\n\r\n    if (quadPoints) {\r\n      if (!_this20.appearance) {\r\n        var fillColor = _this20.color ? Array.from(_this20.color).map(function (c) {\r\n          return c / 255;\r\n        }) : [1, 1, 0];\r\n\r\n        _this20._setDefaultAppearance({\r\n          xref: parameters.xref,\r\n          fillColor: fillColor,\r\n          blendMode: \"Multiply\",\r\n          pointsCallback: function pointsCallback(buffer, points) {\r\n            buffer.push(\"\".concat(points[0].x, \" \").concat(points[0].y, \" m\"));\r\n            buffer.push(\"\".concat(points[1].x, \" \").concat(points[1].y, \" l\"));\r\n            buffer.push(\"\".concat(points[3].x, \" \").concat(points[3].y, \" l\"));\r\n            buffer.push(\"\".concat(points[2].x, \" \").concat(points[2].y, \" l\"));\r\n            buffer.push(\"f\");\r\n            return [points[0].x, points[1].x, points[3].y, points[1].y];\r\n          }\r\n        });\r\n      }\r\n    } else {\r\n      _this20.data.hasPopup = false;\r\n    }\r\n\r\n    return _this20;\r\n  }\r\n\r\n  return HighlightAnnotation;\r\n}(MarkupAnnotation);\r\n\r\nvar UnderlineAnnotation = /*#__PURE__*/function (_MarkupAnnotation10) {\r\n  _inherits(UnderlineAnnotation, _MarkupAnnotation10);\r\n\r\n  var _super18 = _createSuper(UnderlineAnnotation);\r\n\r\n  function UnderlineAnnotation(parameters) {\r\n    var _this21;\r\n\r\n    _classCallCheck(this, UnderlineAnnotation);\r\n\r\n    _this21 = _super18.call(this, parameters);\r\n    _this21.data.annotationType = _util.AnnotationType.UNDERLINE;\r\n    var quadPoints = _this21.data.quadPoints = getQuadPoints(parameters.dict, null);\r\n\r\n    if (quadPoints) {\r\n      if (!_this21.appearance) {\r\n        var strokeColor = _this21.color ? Array.from(_this21.color).map(function (c) {\r\n          return c / 255;\r\n        }) : [0, 0, 0];\r\n\r\n        _this21._setDefaultAppearance({\r\n          xref: parameters.xref,\r\n          extra: \"[] 0 d 1 w\",\r\n          strokeColor: strokeColor,\r\n          pointsCallback: function pointsCallback(buffer, points) {\r\n            buffer.push(\"\".concat(points[2].x, \" \").concat(points[2].y, \" m\"));\r\n            buffer.push(\"\".concat(points[3].x, \" \").concat(points[3].y, \" l\"));\r\n            buffer.push(\"S\");\r\n            return [points[0].x, points[1].x, points[3].y, points[1].y];\r\n          }\r\n        });\r\n      }\r\n    } else {\r\n      _this21.data.hasPopup = false;\r\n    }\r\n\r\n    return _this21;\r\n  }\r\n\r\n  return UnderlineAnnotation;\r\n}(MarkupAnnotation);\r\n\r\nvar SquigglyAnnotation = /*#__PURE__*/function (_MarkupAnnotation11) {\r\n  _inherits(SquigglyAnnotation, _MarkupAnnotation11);\r\n\r\n  var _super19 = _createSuper(SquigglyAnnotation);\r\n\r\n  function SquigglyAnnotation(parameters) {\r\n    var _this22;\r\n\r\n    _classCallCheck(this, SquigglyAnnotation);\r\n\r\n    _this22 = _super19.call(this, parameters);\r\n    _this22.data.annotationType = _util.AnnotationType.SQUIGGLY;\r\n    var quadPoints = _this22.data.quadPoints = getQuadPoints(parameters.dict, null);\r\n\r\n    if (quadPoints) {\r\n      if (!_this22.appearance) {\r\n        var strokeColor = _this22.color ? Array.from(_this22.color).map(function (c) {\r\n          return c / 255;\r\n        }) : [0, 0, 0];\r\n\r\n        _this22._setDefaultAppearance({\r\n          xref: parameters.xref,\r\n          extra: \"[] 0 d 1 w\",\r\n          strokeColor: strokeColor,\r\n          pointsCallback: function pointsCallback(buffer, points) {\r\n            var dy = (points[0].y - points[2].y) / 6;\r\n            var shift = dy;\r\n            var x = points[2].x;\r\n            var y = points[2].y;\r\n            var xEnd = points[3].x;\r\n            buffer.push(\"\".concat(x, \" \").concat(y + shift, \" m\"));\r\n\r\n            do {\r\n              x += 2;\r\n              shift = shift === 0 ? dy : 0;\r\n              buffer.push(\"\".concat(x, \" \").concat(y + shift, \" l\"));\r\n            } while (x < xEnd);\r\n\r\n            buffer.push(\"S\");\r\n            return [points[2].x, xEnd, y - 2 * dy, y + 2 * dy];\r\n          }\r\n        });\r\n      }\r\n    } else {\r\n      _this22.data.hasPopup = false;\r\n    }\r\n\r\n    return _this22;\r\n  }\r\n\r\n  return SquigglyAnnotation;\r\n}(MarkupAnnotation);\r\n\r\nvar StrikeOutAnnotation = /*#__PURE__*/function (_MarkupAnnotation12) {\r\n  _inherits(StrikeOutAnnotation, _MarkupAnnotation12);\r\n\r\n  var _super20 = _createSuper(StrikeOutAnnotation);\r\n\r\n  function StrikeOutAnnotation(parameters) {\r\n    var _this23;\r\n\r\n    _classCallCheck(this, StrikeOutAnnotation);\r\n\r\n    _this23 = _super20.call(this, parameters);\r\n    _this23.data.annotationType = _util.AnnotationType.STRIKEOUT;\r\n    var quadPoints = _this23.data.quadPoints = getQuadPoints(parameters.dict, null);\r\n\r\n    if (quadPoints) {\r\n      if (!_this23.appearance) {\r\n        var strokeColor = _this23.color ? Array.from(_this23.color).map(function (c) {\r\n          return c / 255;\r\n        }) : [0, 0, 0];\r\n\r\n        _this23._setDefaultAppearance({\r\n          xref: parameters.xref,\r\n          extra: \"[] 0 d 1 w\",\r\n          strokeColor: strokeColor,\r\n          pointsCallback: function pointsCallback(buffer, points) {\r\n            buffer.push(\"\".concat((points[0].x + points[2].x) / 2) + \" \".concat((points[0].y + points[2].y) / 2, \" m\"));\r\n            buffer.push(\"\".concat((points[1].x + points[3].x) / 2) + \" \".concat((points[1].y + points[3].y) / 2, \" l\"));\r\n            buffer.push(\"S\");\r\n            return [points[0].x, points[1].x, points[3].y, points[1].y];\r\n          }\r\n        });\r\n      }\r\n    } else {\r\n      _this23.data.hasPopup = false;\r\n    }\r\n\r\n    return _this23;\r\n  }\r\n\r\n  return StrikeOutAnnotation;\r\n}(MarkupAnnotation);\r\n\r\nvar StampAnnotation = /*#__PURE__*/function (_MarkupAnnotation13) {\r\n  _inherits(StampAnnotation, _MarkupAnnotation13);\r\n\r\n  var _super21 = _createSuper(StampAnnotation);\r\n\r\n  function StampAnnotation(parameters) {\r\n    var _this24;\r\n\r\n    _classCallCheck(this, StampAnnotation);\r\n\r\n    _this24 = _super21.call(this, parameters);\r\n    _this24.data.annotationType = _util.AnnotationType.STAMP;\r\n    return _this24;\r\n  }\r\n\r\n  return StampAnnotation;\r\n}(MarkupAnnotation);\r\n\r\nvar FileAttachmentAnnotation = /*#__PURE__*/function (_MarkupAnnotation14) {\r\n  _inherits(FileAttachmentAnnotation, _MarkupAnnotation14);\r\n\r\n  var _super22 = _createSuper(FileAttachmentAnnotation);\r\n\r\n  function FileAttachmentAnnotation(parameters) {\r\n    var _this25;\r\n\r\n    _classCallCheck(this, FileAttachmentAnnotation);\r\n\r\n    _this25 = _super22.call(this, parameters);\r\n    var file = new _obj.FileSpec(parameters.dict.get(\"FS\"), parameters.xref);\r\n    _this25.data.annotationType = _util.AnnotationType.FILEATTACHMENT;\r\n    _this25.data.file = file.serializable;\r\n    return _this25;\r\n  }\r\n\r\n  return FileAttachmentAnnotation;\r\n}(MarkupAnnotation);\r\n\r\n/***/ }),\r\n/* 156 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.createDefaultAppearance = createDefaultAppearance;\r\nexports.parseDefaultAppearance = parseDefaultAppearance;\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _colorspace = __w_pdfjs_require__(153);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar _evaluator = __w_pdfjs_require__(157);\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nvar DefaultAppearanceEvaluator = /*#__PURE__*/function (_EvaluatorPreprocesso) {\r\n  _inherits(DefaultAppearanceEvaluator, _EvaluatorPreprocesso);\r\n\r\n  var _super = _createSuper(DefaultAppearanceEvaluator);\r\n\r\n  function DefaultAppearanceEvaluator(str) {\r\n    _classCallCheck(this, DefaultAppearanceEvaluator);\r\n\r\n    return _super.call(this, new _stream.StringStream(str));\r\n  }\r\n\r\n  _createClass(DefaultAppearanceEvaluator, [{\r\n    key: \"parse\",\r\n    value: function parse() {\r\n      var operation = {\r\n        fn: 0,\r\n        args: []\r\n      };\r\n      var result = {\r\n        fontSize: 0,\r\n        fontName: _primitives.Name.get(\"\"),\r\n        fontColor: new Uint8ClampedArray([0, 0, 0])\r\n      };\r\n\r\n      try {\r\n        while (true) {\r\n          operation.args.length = 0;\r\n\r\n          if (!this.read(operation)) {\r\n            break;\r\n          }\r\n\r\n          if (this.savedStatesDepth !== 0) {\r\n            continue;\r\n          }\r\n\r\n          var fn = operation.fn,\r\n              args = operation.args;\r\n\r\n          switch (fn | 0) {\r\n            case _util.OPS.setFont:\r\n              var _args = _slicedToArray(args, 2),\r\n                  fontName = _args[0],\r\n                  fontSize = _args[1];\r\n\r\n              if ((0, _primitives.isName)(fontName)) {\r\n                result.fontName = fontName;\r\n              }\r\n\r\n              if (typeof fontSize === \"number\" && fontSize > 0) {\r\n                result.fontSize = fontSize;\r\n              }\r\n\r\n              break;\r\n\r\n            case _util.OPS.setFillRGBColor:\r\n              _colorspace.ColorSpace.singletons.rgb.getRgbItem(args, 0, result.fontColor, 0);\r\n\r\n              break;\r\n\r\n            case _util.OPS.setFillGray:\r\n              _colorspace.ColorSpace.singletons.gray.getRgbItem(args, 0, result.fontColor, 0);\r\n\r\n              break;\r\n\r\n            case _util.OPS.setFillColorSpace:\r\n              _colorspace.ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0);\r\n\r\n              break;\r\n          }\r\n        }\r\n      } catch (reason) {\r\n        (0, _util.warn)(\"parseDefaultAppearance - ignoring errors: \\\"\".concat(reason, \"\\\".\"));\r\n      }\r\n\r\n      return result;\r\n    }\r\n  }]);\r\n\r\n  return DefaultAppearanceEvaluator;\r\n}(_evaluator.EvaluatorPreprocessor);\r\n\r\nfunction parseDefaultAppearance(str) {\r\n  return new DefaultAppearanceEvaluator(str).parse();\r\n}\r\n\r\nfunction createDefaultAppearance(_ref) {\r\n  var fontSize = _ref.fontSize,\r\n      fontName = _ref.fontName,\r\n      fontColor = _ref.fontColor;\r\n  var colorCmd;\r\n\r\n  if (fontColor.every(function (c) {\r\n    return c === 0;\r\n  })) {\r\n    colorCmd = \"0 g\";\r\n  } else {\r\n    colorCmd = Array.from(fontColor).map(function (c) {\r\n      return (c / 255).toFixed(2);\r\n    }).join(\" \") + \" rg\";\r\n  }\r\n\r\n  return \"/\".concat((0, _core_utils.escapePDFName)(fontName.name), \" \").concat(fontSize, \" Tf \").concat(colorCmd);\r\n}\r\n\r\n/***/ }),\r\n/* 157 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PartialEvaluator = exports.EvaluatorPreprocessor = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _cmap = __w_pdfjs_require__(158);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nvar _fonts = __w_pdfjs_require__(159);\r\n\r\nvar _encodings = __w_pdfjs_require__(162);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar _unicode = __w_pdfjs_require__(165);\r\n\r\nvar _standard_fonts = __w_pdfjs_require__(164);\r\n\r\nvar _pattern = __w_pdfjs_require__(168);\r\n\r\nvar _function = __w_pdfjs_require__(169);\r\n\r\nvar _parser = __w_pdfjs_require__(141);\r\n\r\nvar _image_utils = __w_pdfjs_require__(154);\r\n\r\nvar _bidi = __w_pdfjs_require__(171);\r\n\r\nvar _colorspace = __w_pdfjs_require__(153);\r\n\r\nvar _glyphlist = __w_pdfjs_require__(163);\r\n\r\nvar _metrics = __w_pdfjs_require__(172);\r\n\r\nvar _murmurhash = __w_pdfjs_require__(173);\r\n\r\nvar _operator_list = __w_pdfjs_require__(174);\r\n\r\nvar _image = __w_pdfjs_require__(175);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar DefaultPartialEvaluatorOptions = Object.freeze({\r\n  maxImageSize: -1,\r\n  disableFontFace: false,\r\n  ignoreErrors: false,\r\n  isEvalSupported: true,\r\n  fontExtraProperties: false\r\n});\r\nvar PatternType = {\r\n  TILING: 1,\r\n  SHADING: 2\r\n};\r\nvar deferred = Promise.resolve();\r\n\r\nfunction normalizeBlendMode(value) {\r\n  var parsingArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n\r\n  if (Array.isArray(value)) {\r\n    for (var i = 0, ii = value.length; i < ii; i++) {\r\n      var maybeBM = normalizeBlendMode(value[i], true);\r\n\r\n      if (maybeBM) {\r\n        return maybeBM;\r\n      }\r\n    }\r\n\r\n    (0, _util.warn)(\"Unsupported blend mode Array: \".concat(value));\r\n    return \"source-over\";\r\n  }\r\n\r\n  if (!(0, _primitives.isName)(value)) {\r\n    if (parsingArray) {\r\n      return null;\r\n    }\r\n\r\n    return \"source-over\";\r\n  }\r\n\r\n  switch (value.name) {\r\n    case \"Normal\":\r\n    case \"Compatible\":\r\n      return \"source-over\";\r\n\r\n    case \"Multiply\":\r\n      return \"multiply\";\r\n\r\n    case \"Screen\":\r\n      return \"screen\";\r\n\r\n    case \"Overlay\":\r\n      return \"overlay\";\r\n\r\n    case \"Darken\":\r\n      return \"darken\";\r\n\r\n    case \"Lighten\":\r\n      return \"lighten\";\r\n\r\n    case \"ColorDodge\":\r\n      return \"color-dodge\";\r\n\r\n    case \"ColorBurn\":\r\n      return \"color-burn\";\r\n\r\n    case \"HardLight\":\r\n      return \"hard-light\";\r\n\r\n    case \"SoftLight\":\r\n      return \"soft-light\";\r\n\r\n    case \"Difference\":\r\n      return \"difference\";\r\n\r\n    case \"Exclusion\":\r\n      return \"exclusion\";\r\n\r\n    case \"Hue\":\r\n      return \"hue\";\r\n\r\n    case \"Saturation\":\r\n      return \"saturation\";\r\n\r\n    case \"Color\":\r\n      return \"color\";\r\n\r\n    case \"Luminosity\":\r\n      return \"luminosity\";\r\n  }\r\n\r\n  if (parsingArray) {\r\n    return null;\r\n  }\r\n\r\n  (0, _util.warn)(\"Unsupported blend mode: \".concat(value.name));\r\n  return \"source-over\";\r\n}\r\n\r\nvar TimeSlotManager = /*#__PURE__*/function () {\r\n  function TimeSlotManager() {\r\n    _classCallCheck(this, TimeSlotManager);\r\n\r\n    this.reset();\r\n  }\r\n\r\n  _createClass(TimeSlotManager, [{\r\n    key: \"check\",\r\n    value: function check() {\r\n      if (++this.checked < TimeSlotManager.CHECK_TIME_EVERY) {\r\n        return false;\r\n      }\r\n\r\n      this.checked = 0;\r\n      return this.endTime <= Date.now();\r\n    }\r\n  }, {\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      this.endTime = Date.now() + TimeSlotManager.TIME_SLOT_DURATION_MS;\r\n      this.checked = 0;\r\n    }\r\n  }], [{\r\n    key: \"TIME_SLOT_DURATION_MS\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"TIME_SLOT_DURATION_MS\", 20);\r\n    }\r\n  }, {\r\n    key: \"CHECK_TIME_EVERY\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"CHECK_TIME_EVERY\", 100);\r\n    }\r\n  }]);\r\n\r\n  return TimeSlotManager;\r\n}();\r\n\r\nvar PartialEvaluator = /*#__PURE__*/function () {\r\n  function PartialEvaluator(_ref) {\r\n    var xref = _ref.xref,\r\n        handler = _ref.handler,\r\n        pageIndex = _ref.pageIndex,\r\n        idFactory = _ref.idFactory,\r\n        fontCache = _ref.fontCache,\r\n        builtInCMapCache = _ref.builtInCMapCache,\r\n        globalImageCache = _ref.globalImageCache,\r\n        _ref$options = _ref.options,\r\n        options = _ref$options === void 0 ? null : _ref$options;\r\n\r\n    _classCallCheck(this, PartialEvaluator);\r\n\r\n    this.xref = xref;\r\n    this.handler = handler;\r\n    this.pageIndex = pageIndex;\r\n    this.idFactory = idFactory;\r\n    this.fontCache = fontCache;\r\n    this.builtInCMapCache = builtInCMapCache;\r\n    this.globalImageCache = globalImageCache;\r\n    this.options = options || DefaultPartialEvaluatorOptions;\r\n    this.parsingType3Font = false;\r\n    this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this);\r\n  }\r\n\r\n  _createClass(PartialEvaluator, [{\r\n    key: \"_pdfFunctionFactory\",\r\n    get: function get() {\r\n      var pdfFunctionFactory = new _function.PDFFunctionFactory({\r\n        xref: this.xref,\r\n        isEvalSupported: this.options.isEvalSupported\r\n      });\r\n      return (0, _util.shadow)(this, \"_pdfFunctionFactory\", pdfFunctionFactory);\r\n    }\r\n  }, {\r\n    key: \"clone\",\r\n    value: function clone() {\r\n      var newOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DefaultPartialEvaluatorOptions;\r\n      var newEvaluator = Object.create(this);\r\n      newEvaluator.options = newOptions;\r\n      return newEvaluator;\r\n    }\r\n  }, {\r\n    key: \"hasBlendModes\",\r\n    value: function hasBlendModes(resources, nonBlendModesSet) {\r\n      if (!(resources instanceof _primitives.Dict)) {\r\n        return false;\r\n      }\r\n\r\n      if (resources.objId && nonBlendModesSet.has(resources.objId)) {\r\n        return false;\r\n      }\r\n\r\n      var processed = new _primitives.RefSet(nonBlendModesSet);\r\n\r\n      if (resources.objId) {\r\n        processed.put(resources.objId);\r\n      }\r\n\r\n      var nodes = [resources],\r\n          xref = this.xref;\r\n\r\n      while (nodes.length) {\r\n        var node = nodes.shift();\r\n        var graphicStates = node.get(\"ExtGState\");\r\n\r\n        if (graphicStates instanceof _primitives.Dict) {\r\n          var _iterator = _createForOfIteratorHelper(graphicStates.getRawValues()),\r\n              _step;\r\n\r\n          try {\r\n            for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n              var graphicState = _step.value;\r\n\r\n              if (graphicState instanceof _primitives.Ref) {\r\n                if (processed.has(graphicState)) {\r\n                  continue;\r\n                }\r\n\r\n                try {\r\n                  graphicState = xref.fetch(graphicState);\r\n                } catch (ex) {\r\n                  if (ex instanceof _core_utils.MissingDataException) {\r\n                    throw ex;\r\n                  }\r\n\r\n                  processed.put(graphicState);\r\n                  (0, _util.info)(\"hasBlendModes - ignoring ExtGState: \\\"\".concat(ex, \"\\\".\"));\r\n                  continue;\r\n                }\r\n              }\r\n\r\n              if (!(graphicState instanceof _primitives.Dict)) {\r\n                continue;\r\n              }\r\n\r\n              if (graphicState.objId) {\r\n                processed.put(graphicState.objId);\r\n              }\r\n\r\n              var bm = graphicState.get(\"BM\");\r\n\r\n              if (bm instanceof _primitives.Name) {\r\n                if (bm.name !== \"Normal\") {\r\n                  return true;\r\n                }\r\n\r\n                continue;\r\n              }\r\n\r\n              if (bm !== undefined && Array.isArray(bm)) {\r\n                var _iterator2 = _createForOfIteratorHelper(bm),\r\n                    _step2;\r\n\r\n                try {\r\n                  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n                    var element = _step2.value;\r\n\r\n                    if (element instanceof _primitives.Name && element.name !== \"Normal\") {\r\n                      return true;\r\n                    }\r\n                  }\r\n                } catch (err) {\r\n                  _iterator2.e(err);\r\n                } finally {\r\n                  _iterator2.f();\r\n                }\r\n              }\r\n            }\r\n          } catch (err) {\r\n            _iterator.e(err);\r\n          } finally {\r\n            _iterator.f();\r\n          }\r\n        }\r\n\r\n        var xObjects = node.get(\"XObject\");\r\n\r\n        if (!(xObjects instanceof _primitives.Dict)) {\r\n          continue;\r\n        }\r\n\r\n        var _iterator3 = _createForOfIteratorHelper(xObjects.getRawValues()),\r\n            _step3;\r\n\r\n        try {\r\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n            var xObject = _step3.value;\r\n\r\n            if (xObject instanceof _primitives.Ref) {\r\n              if (processed.has(xObject)) {\r\n                continue;\r\n              }\r\n\r\n              try {\r\n                xObject = xref.fetch(xObject);\r\n              } catch (ex) {\r\n                if (ex instanceof _core_utils.MissingDataException) {\r\n                  throw ex;\r\n                }\r\n\r\n                processed.put(xObject);\r\n                (0, _util.info)(\"hasBlendModes - ignoring XObject: \\\"\".concat(ex, \"\\\".\"));\r\n                continue;\r\n              }\r\n            }\r\n\r\n            if (!(0, _primitives.isStream)(xObject)) {\r\n              continue;\r\n            }\r\n\r\n            if (xObject.dict.objId) {\r\n              processed.put(xObject.dict.objId);\r\n            }\r\n\r\n            var xResources = xObject.dict.get(\"Resources\");\r\n\r\n            if (!(xResources instanceof _primitives.Dict)) {\r\n              continue;\r\n            }\r\n\r\n            if (xResources.objId && processed.has(xResources.objId)) {\r\n              continue;\r\n            }\r\n\r\n            nodes.push(xResources);\r\n\r\n            if (xResources.objId) {\r\n              processed.put(xResources.objId);\r\n            }\r\n          }\r\n        } catch (err) {\r\n          _iterator3.e(err);\r\n        } finally {\r\n          _iterator3.f();\r\n        }\r\n      }\r\n\r\n      processed.forEach(function (ref) {\r\n        nonBlendModesSet.put(ref);\r\n      });\r\n      return false;\r\n    }\r\n  }, {\r\n    key: \"fetchBuiltInCMap\",\r\n    value: function () {\r\n      var _fetchBuiltInCMap = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(name) {\r\n        var cachedData, readableStream, reader, data;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                cachedData = this.builtInCMapCache.get(name);\r\n\r\n                if (!cachedData) {\r\n                  _context.next = 3;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\", cachedData);\r\n\r\n              case 3:\r\n                readableStream = this.handler.sendWithStream(\"FetchBuiltInCMap\", {\r\n                  name: name\r\n                });\r\n                reader = readableStream.getReader();\r\n                _context.next = 7;\r\n                return new Promise(function (resolve, reject) {\r\n                  function pump() {\r\n                    reader.read().then(function (_ref2) {\r\n                      var value = _ref2.value,\r\n                          done = _ref2.done;\r\n\r\n                      if (done) {\r\n                        return;\r\n                      }\r\n\r\n                      resolve(value);\r\n                      pump();\r\n                    }, reject);\r\n                  }\r\n\r\n                  pump();\r\n                });\r\n\r\n              case 7:\r\n                data = _context.sent;\r\n\r\n                if (data.compressionType !== _util.CMapCompressionType.NONE) {\r\n                  this.builtInCMapCache.set(name, data);\r\n                }\r\n\r\n                return _context.abrupt(\"return\", data);\r\n\r\n              case 10:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function fetchBuiltInCMap(_x) {\r\n        return _fetchBuiltInCMap.apply(this, arguments);\r\n      }\r\n\r\n      return fetchBuiltInCMap;\r\n    }()\r\n  }, {\r\n    key: \"buildFormXObject\",\r\n    value: function () {\r\n      var _buildFormXObject = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(resources, xobj, smask, operatorList, task, initialState, localColorSpaceCache) {\r\n        var dict, matrix, bbox, optionalContent, group, groupOptions, groupSubtype, colorSpace, cs, cachedColorSpace;\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                dict = xobj.dict;\r\n                matrix = dict.getArray(\"Matrix\");\r\n                bbox = dict.getArray(\"BBox\");\r\n\r\n                if (Array.isArray(bbox) && bbox.length === 4) {\r\n                  bbox = _util.Util.normalizeRect(bbox);\r\n                } else {\r\n                  bbox = null;\r\n                }\r\n\r\n                optionalContent = null;\r\n\r\n                if (!dict.has(\"OC\")) {\r\n                  _context2.next = 10;\r\n                  break;\r\n                }\r\n\r\n                _context2.next = 8;\r\n                return this.parseMarkedContentProps(dict.get(\"OC\"), resources);\r\n\r\n              case 8:\r\n                optionalContent = _context2.sent;\r\n                operatorList.addOp(_util.OPS.beginMarkedContentProps, [\"OC\", optionalContent]);\r\n\r\n              case 10:\r\n                group = dict.get(\"Group\");\r\n\r\n                if (!group) {\r\n                  _context2.next = 30;\r\n                  break;\r\n                }\r\n\r\n                groupOptions = {\r\n                  matrix: matrix,\r\n                  bbox: bbox,\r\n                  smask: smask,\r\n                  isolated: false,\r\n                  knockout: false\r\n                };\r\n                groupSubtype = group.get(\"S\");\r\n                colorSpace = null;\r\n\r\n                if (!(0, _primitives.isName)(groupSubtype, \"Transparency\")) {\r\n                  _context2.next = 28;\r\n                  break;\r\n                }\r\n\r\n                groupOptions.isolated = group.get(\"I\") || false;\r\n                groupOptions.knockout = group.get(\"K\") || false;\r\n\r\n                if (!group.has(\"CS\")) {\r\n                  _context2.next = 28;\r\n                  break;\r\n                }\r\n\r\n                cs = group.getRaw(\"CS\");\r\n                cachedColorSpace = _colorspace.ColorSpace.getCached(cs, this.xref, localColorSpaceCache);\r\n\r\n                if (!cachedColorSpace) {\r\n                  _context2.next = 25;\r\n                  break;\r\n                }\r\n\r\n                colorSpace = cachedColorSpace;\r\n                _context2.next = 28;\r\n                break;\r\n\r\n              case 25:\r\n                _context2.next = 27;\r\n                return this.parseColorSpace({\r\n                  cs: cs,\r\n                  resources: resources,\r\n                  localColorSpaceCache: localColorSpaceCache\r\n                });\r\n\r\n              case 27:\r\n                colorSpace = _context2.sent;\r\n\r\n              case 28:\r\n                if (smask && smask.backdrop) {\r\n                  colorSpace = colorSpace || _colorspace.ColorSpace.singletons.rgb;\r\n                  smask.backdrop = colorSpace.getRgb(smask.backdrop, 0);\r\n                }\r\n\r\n                operatorList.addOp(_util.OPS.beginGroup, [groupOptions]);\r\n\r\n              case 30:\r\n                operatorList.addOp(_util.OPS.paintFormXObjectBegin, [matrix, bbox]);\r\n                return _context2.abrupt(\"return\", this.getOperatorList({\r\n                  stream: xobj,\r\n                  task: task,\r\n                  resources: dict.get(\"Resources\") || resources,\r\n                  operatorList: operatorList,\r\n                  initialState: initialState\r\n                }).then(function () {\r\n                  operatorList.addOp(_util.OPS.paintFormXObjectEnd, []);\r\n\r\n                  if (group) {\r\n                    operatorList.addOp(_util.OPS.endGroup, [groupOptions]);\r\n                  }\r\n\r\n                  if (optionalContent) {\r\n                    operatorList.addOp(_util.OPS.endMarkedContent, []);\r\n                  }\r\n                }));\r\n\r\n              case 32:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this);\r\n      }));\r\n\r\n      function buildFormXObject(_x2, _x3, _x4, _x5, _x6, _x7, _x8) {\r\n        return _buildFormXObject.apply(this, arguments);\r\n      }\r\n\r\n      return buildFormXObject;\r\n    }()\r\n  }, {\r\n    key: \"_sendImgData\",\r\n    value: function _sendImgData(objId, imgData) {\r\n      var cacheGlobally = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n      var transfers = imgData ? [imgData.data.buffer] : null;\r\n\r\n      if (this.parsingType3Font || cacheGlobally) {\r\n        return this.handler.send(\"commonobj\", [objId, \"Image\", imgData], transfers);\r\n      }\r\n\r\n      return this.handler.send(\"obj\", [objId, this.pageIndex, \"Image\", imgData], transfers);\r\n    }\r\n  }, {\r\n    key: \"buildPaintImageXObject\",\r\n    value: function () {\r\n      var _buildPaintImageXObject = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3(_ref3) {\r\n        var _this = this;\r\n\r\n        var resources, image, _ref3$isInline, isInline, operatorList, cacheKey, localImageCache, localColorSpaceCache, dict, imageRef, w, h, maxImageSize, imageMask, imgData, args, width, height, bitStrideLength, imgArray, decode, softMask, mask, SMALL_IMAGE_DIMENSIONS, imageObj, objId, cacheGlobally;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\r\n          while (1) {\r\n            switch (_context3.prev = _context3.next) {\r\n              case 0:\r\n                resources = _ref3.resources, image = _ref3.image, _ref3$isInline = _ref3.isInline, isInline = _ref3$isInline === void 0 ? false : _ref3$isInline, operatorList = _ref3.operatorList, cacheKey = _ref3.cacheKey, localImageCache = _ref3.localImageCache, localColorSpaceCache = _ref3.localColorSpaceCache;\r\n                dict = image.dict;\r\n                imageRef = dict.objId;\r\n                w = dict.get(\"Width\", \"W\");\r\n                h = dict.get(\"Height\", \"H\");\r\n\r\n                if (!(!(w && (0, _util.isNum)(w)) || !(h && (0, _util.isNum)(h)))) {\r\n                  _context3.next = 8;\r\n                  break;\r\n                }\r\n\r\n                (0, _util.warn)(\"Image dimensions are missing, or not numbers.\");\r\n                return _context3.abrupt(\"return\", undefined);\r\n\r\n              case 8:\r\n                maxImageSize = this.options.maxImageSize;\r\n\r\n                if (!(maxImageSize !== -1 && w * h > maxImageSize)) {\r\n                  _context3.next = 12;\r\n                  break;\r\n                }\r\n\r\n                (0, _util.warn)(\"Image exceeded maximum allowed size and was removed.\");\r\n                return _context3.abrupt(\"return\", undefined);\r\n\r\n              case 12:\r\n                imageMask = dict.get(\"ImageMask\", \"IM\") || false;\r\n\r\n                if (!imageMask) {\r\n                  _context3.next = 25;\r\n                  break;\r\n                }\r\n\r\n                width = dict.get(\"Width\", \"W\");\r\n                height = dict.get(\"Height\", \"H\");\r\n                bitStrideLength = width + 7 >> 3;\r\n                imgArray = image.getBytes(bitStrideLength * height, true);\r\n                decode = dict.getArray(\"Decode\", \"D\");\r\n                imgData = _image.PDFImage.createMask({\r\n                  imgArray: imgArray,\r\n                  width: width,\r\n                  height: height,\r\n                  imageIsFromDecodeStream: image instanceof _stream.DecodeStream,\r\n                  inverseDecode: !!decode && decode[0] > 0\r\n                });\r\n                imgData.cached = !!cacheKey;\r\n                args = [imgData];\r\n                operatorList.addOp(_util.OPS.paintImageMaskXObject, args);\r\n\r\n                if (cacheKey) {\r\n                  localImageCache.set(cacheKey, imageRef, {\r\n                    fn: _util.OPS.paintImageMaskXObject,\r\n                    args: args\r\n                  });\r\n                }\r\n\r\n                return _context3.abrupt(\"return\", undefined);\r\n\r\n              case 25:\r\n                softMask = dict.get(\"SMask\", \"SM\") || false;\r\n                mask = dict.get(\"Mask\") || false;\r\n                SMALL_IMAGE_DIMENSIONS = 200;\r\n\r\n                if (!(isInline && !softMask && !mask && w + h < SMALL_IMAGE_DIMENSIONS)) {\r\n                  _context3.next = 33;\r\n                  break;\r\n                }\r\n\r\n                imageObj = new _image.PDFImage({\r\n                  xref: this.xref,\r\n                  res: resources,\r\n                  image: image,\r\n                  isInline: isInline,\r\n                  pdfFunctionFactory: this._pdfFunctionFactory,\r\n                  localColorSpaceCache: localColorSpaceCache\r\n                });\r\n                imgData = imageObj.createImageData(true);\r\n                operatorList.addOp(_util.OPS.paintInlineImageXObject, [imgData]);\r\n                return _context3.abrupt(\"return\", undefined);\r\n\r\n              case 33:\r\n                objId = \"img_\".concat(this.idFactory.createObjId()), cacheGlobally = false;\r\n\r\n                if (this.parsingType3Font) {\r\n                  objId = \"\".concat(this.idFactory.getDocId(), \"_type3_\").concat(objId);\r\n                } else if (imageRef) {\r\n                  cacheGlobally = this.globalImageCache.shouldCache(imageRef, this.pageIndex);\r\n\r\n                  if (cacheGlobally) {\r\n                    objId = \"\".concat(this.idFactory.getDocId(), \"_\").concat(objId);\r\n                  }\r\n                }\r\n\r\n                operatorList.addDependency(objId);\r\n                args = [objId, w, h];\r\n\r\n                _image.PDFImage.buildImage({\r\n                  xref: this.xref,\r\n                  res: resources,\r\n                  image: image,\r\n                  isInline: isInline,\r\n                  pdfFunctionFactory: this._pdfFunctionFactory,\r\n                  localColorSpaceCache: localColorSpaceCache\r\n                }).then(function (imageObj) {\r\n                  imgData = imageObj.createImageData(false);\r\n\r\n                  if (cacheKey && imageRef && cacheGlobally) {\r\n                    _this.globalImageCache.addByteSize(imageRef, imgData.data.length);\r\n                  }\r\n\r\n                  return _this._sendImgData(objId, imgData, cacheGlobally);\r\n                })[\"catch\"](function (reason) {\r\n                  (0, _util.warn)(\"Unable to decode image \\\"\".concat(objId, \"\\\": \\\"\").concat(reason, \"\\\".\"));\r\n                  return _this._sendImgData(objId, null, cacheGlobally);\r\n                });\r\n\r\n                operatorList.addOp(_util.OPS.paintImageXObject, args);\r\n\r\n                if (cacheKey) {\r\n                  localImageCache.set(cacheKey, imageRef, {\r\n                    fn: _util.OPS.paintImageXObject,\r\n                    args: args\r\n                  });\r\n\r\n                  if (imageRef) {\r\n                    (0, _util.assert)(!isInline, \"Cannot cache an inline image globally.\");\r\n                    this.globalImageCache.addPageIndex(imageRef, this.pageIndex);\r\n\r\n                    if (cacheGlobally) {\r\n                      this.globalImageCache.setData(imageRef, {\r\n                        objId: objId,\r\n                        fn: _util.OPS.paintImageXObject,\r\n                        args: args,\r\n                        byteSize: 0\r\n                      });\r\n                    }\r\n                  }\r\n                }\r\n\r\n                return _context3.abrupt(\"return\", undefined);\r\n\r\n              case 41:\r\n              case \"end\":\r\n                return _context3.stop();\r\n            }\r\n          }\r\n        }, _callee3, this);\r\n      }));\r\n\r\n      function buildPaintImageXObject(_x9) {\r\n        return _buildPaintImageXObject.apply(this, arguments);\r\n      }\r\n\r\n      return buildPaintImageXObject;\r\n    }()\r\n  }, {\r\n    key: \"handleSMask\",\r\n    value: function handleSMask(smask, resources, operatorList, task, stateManager, localColorSpaceCache) {\r\n      var smaskContent = smask.get(\"G\");\r\n      var smaskOptions = {\r\n        subtype: smask.get(\"S\").name,\r\n        backdrop: smask.get(\"BC\")\r\n      };\r\n      var transferObj = smask.get(\"TR\");\r\n\r\n      if ((0, _function.isPDFFunction)(transferObj)) {\r\n        var transferFn = this._pdfFunctionFactory.create(transferObj);\r\n\r\n        var transferMap = new Uint8Array(256);\r\n        var tmp = new Float32Array(1);\r\n\r\n        for (var i = 0; i < 256; i++) {\r\n          tmp[0] = i / 255;\r\n          transferFn(tmp, 0, tmp, 0);\r\n          transferMap[i] = tmp[0] * 255 | 0;\r\n        }\r\n\r\n        smaskOptions.transferMap = transferMap;\r\n      }\r\n\r\n      return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone(), localColorSpaceCache);\r\n    }\r\n  }, {\r\n    key: \"handleTransferFunction\",\r\n    value: function handleTransferFunction(tr) {\r\n      var transferArray;\r\n\r\n      if (Array.isArray(tr)) {\r\n        transferArray = tr;\r\n      } else if ((0, _function.isPDFFunction)(tr)) {\r\n        transferArray = [tr];\r\n      } else {\r\n        return null;\r\n      }\r\n\r\n      var transferMaps = [];\r\n      var numFns = 0,\r\n          numEffectfulFns = 0;\r\n\r\n      var _iterator4 = _createForOfIteratorHelper(transferArray),\r\n          _step4;\r\n\r\n      try {\r\n        for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\r\n          var entry = _step4.value;\r\n          var transferObj = this.xref.fetchIfRef(entry);\r\n          numFns++;\r\n\r\n          if ((0, _primitives.isName)(transferObj, \"Identity\")) {\r\n            transferMaps.push(null);\r\n            continue;\r\n          } else if (!(0, _function.isPDFFunction)(transferObj)) {\r\n            return null;\r\n          }\r\n\r\n          var transferFn = this._pdfFunctionFactory.create(transferObj);\r\n\r\n          var transferMap = new Uint8Array(256),\r\n              tmp = new Float32Array(1);\r\n\r\n          for (var j = 0; j < 256; j++) {\r\n            tmp[0] = j / 255;\r\n            transferFn(tmp, 0, tmp, 0);\r\n            transferMap[j] = tmp[0] * 255 | 0;\r\n          }\r\n\r\n          transferMaps.push(transferMap);\r\n          numEffectfulFns++;\r\n        }\r\n      } catch (err) {\r\n        _iterator4.e(err);\r\n      } finally {\r\n        _iterator4.f();\r\n      }\r\n\r\n      if (!(numFns === 1 || numFns === 4)) {\r\n        return null;\r\n      }\r\n\r\n      if (numEffectfulFns === 0) {\r\n        return null;\r\n      }\r\n\r\n      return transferMaps;\r\n    }\r\n  }, {\r\n    key: \"handleTilingType\",\r\n    value: function handleTilingType(fn, color, resources, pattern, patternDict, operatorList, task, cacheKey, localTilingPatternCache) {\r\n      var _this2 = this;\r\n\r\n      var tilingOpList = new _operator_list.OperatorList();\r\n\r\n      var patternResources = _primitives.Dict.merge({\r\n        xref: this.xref,\r\n        dictArray: [patternDict.get(\"Resources\"), resources]\r\n      });\r\n\r\n      return this.getOperatorList({\r\n        stream: pattern,\r\n        task: task,\r\n        resources: patternResources,\r\n        operatorList: tilingOpList\r\n      }).then(function () {\r\n        var operatorListIR = tilingOpList.getIR();\r\n        var tilingPatternIR = (0, _pattern.getTilingPatternIR)(operatorListIR, patternDict, color);\r\n        operatorList.addDependencies(tilingOpList.dependencies);\r\n        operatorList.addOp(fn, tilingPatternIR);\r\n\r\n        if (cacheKey) {\r\n          localTilingPatternCache.set(cacheKey, patternDict.objId, {\r\n            operatorListIR: operatorListIR,\r\n            dict: patternDict\r\n          });\r\n        }\r\n      })[\"catch\"](function (reason) {\r\n        if (reason instanceof _util.AbortException) {\r\n          return;\r\n        }\r\n\r\n        if (_this2.options.ignoreErrors) {\r\n          _this2.handler.send(\"UnsupportedFeature\", {\r\n            featureId: _util.UNSUPPORTED_FEATURES.errorTilingPattern\r\n          });\r\n\r\n          (0, _util.warn)(\"handleTilingType - ignoring pattern: \\\"\".concat(reason, \"\\\".\"));\r\n          return;\r\n        }\r\n\r\n        throw reason;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"handleSetFont\",\r\n    value: function handleSetFont(resources, fontArgs, fontRef, operatorList, task, state) {\r\n      var _this3 = this;\r\n\r\n      var fallbackFontDict = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;\r\n      var fontName;\r\n\r\n      if (fontArgs) {\r\n        fontArgs = fontArgs.slice();\r\n        fontName = fontArgs[0].name;\r\n      }\r\n\r\n      return this.loadFont(fontName, fontRef, resources, fallbackFontDict).then(function (translated) {\r\n        if (!translated.font.isType3Font) {\r\n          return translated;\r\n        }\r\n\r\n        return translated.loadType3Data(_this3, resources, task).then(function () {\r\n          operatorList.addDependencies(translated.type3Dependencies);\r\n          return translated;\r\n        })[\"catch\"](function (reason) {\r\n          _this3.handler.send(\"UnsupportedFeature\", {\r\n            featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadType3\r\n          });\r\n\r\n          return new TranslatedFont({\r\n            loadedName: \"g_font_error\",\r\n            font: new _fonts.ErrorFont(\"Type3 font load error: \".concat(reason)),\r\n            dict: translated.font,\r\n            extraProperties: _this3.options.fontExtraProperties\r\n          });\r\n        });\r\n      }).then(function (translated) {\r\n        state.font = translated.font;\r\n        translated.send(_this3.handler);\r\n        return translated.loadedName;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"handleText\",\r\n    value: function handleText(chars, state) {\r\n      var font = state.font;\r\n      var glyphs = font.charsToGlyphs(chars);\r\n\r\n      if (font.data) {\r\n        var isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);\r\n\r\n        if (isAddToPathSet || state.fillColorSpace.name === \"Pattern\" || font.disableFontFace || this.options.disableFontFace) {\r\n          PartialEvaluator.buildFontPaths(font, glyphs, this.handler);\r\n        }\r\n      }\r\n\r\n      return glyphs;\r\n    }\r\n  }, {\r\n    key: \"ensureStateFont\",\r\n    value: function ensureStateFont(state) {\r\n      if (state.font) {\r\n        return;\r\n      }\r\n\r\n      var reason = new _util.FormatError(\"Missing setFont (Tf) operator before text rendering operator.\");\r\n\r\n      if (this.options.ignoreErrors) {\r\n        this.handler.send(\"UnsupportedFeature\", {\r\n          featureId: _util.UNSUPPORTED_FEATURES.errorFontState\r\n        });\r\n        (0, _util.warn)(\"ensureStateFont: \\\"\".concat(reason, \"\\\".\"));\r\n        return;\r\n      }\r\n\r\n      throw reason;\r\n    }\r\n  }, {\r\n    key: \"setGState\",\r\n    value: function () {\r\n      var _setGState = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(_ref4) {\r\n        var _this4 = this;\r\n\r\n        var resources, gState, operatorList, cacheKey, task, stateManager, localGStateCache, localColorSpaceCache, gStateRef, isSimpleGState, gStateObj, gStateKeys, promise, _loop, i, ii;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\r\n          while (1) {\r\n            switch (_context4.prev = _context4.next) {\r\n              case 0:\r\n                resources = _ref4.resources, gState = _ref4.gState, operatorList = _ref4.operatorList, cacheKey = _ref4.cacheKey, task = _ref4.task, stateManager = _ref4.stateManager, localGStateCache = _ref4.localGStateCache, localColorSpaceCache = _ref4.localColorSpaceCache;\r\n                gStateRef = gState.objId;\r\n                isSimpleGState = true;\r\n                gStateObj = [];\r\n                gStateKeys = gState.getKeys();\r\n                promise = Promise.resolve();\r\n\r\n                _loop = function _loop() {\r\n                  var key = gStateKeys[i];\r\n                  var value = gState.get(key);\r\n\r\n                  switch (key) {\r\n                    case \"Type\":\r\n                      break;\r\n\r\n                    case \"LW\":\r\n                    case \"LC\":\r\n                    case \"LJ\":\r\n                    case \"ML\":\r\n                    case \"D\":\r\n                    case \"RI\":\r\n                    case \"FL\":\r\n                    case \"CA\":\r\n                    case \"ca\":\r\n                      gStateObj.push([key, value]);\r\n                      break;\r\n\r\n                    case \"Font\":\r\n                      isSimpleGState = false;\r\n                      promise = promise.then(function () {\r\n                        return _this4.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) {\r\n                          operatorList.addDependency(loadedName);\r\n                          gStateObj.push([key, [loadedName, value[1]]]);\r\n                        });\r\n                      });\r\n                      break;\r\n\r\n                    case \"BM\":\r\n                      gStateObj.push([key, normalizeBlendMode(value)]);\r\n                      break;\r\n\r\n                    case \"SMask\":\r\n                      if ((0, _primitives.isName)(value, \"None\")) {\r\n                        gStateObj.push([key, false]);\r\n                        break;\r\n                      }\r\n\r\n                      if ((0, _primitives.isDict)(value)) {\r\n                        isSimpleGState = false;\r\n                        promise = promise.then(function () {\r\n                          return _this4.handleSMask(value, resources, operatorList, task, stateManager, localColorSpaceCache);\r\n                        });\r\n                        gStateObj.push([key, true]);\r\n                      } else {\r\n                        (0, _util.warn)(\"Unsupported SMask type\");\r\n                      }\r\n\r\n                      break;\r\n\r\n                    case \"TR\":\r\n                      var transferMaps = _this4.handleTransferFunction(value);\r\n\r\n                      gStateObj.push([key, transferMaps]);\r\n                      break;\r\n\r\n                    case \"OP\":\r\n                    case \"op\":\r\n                    case \"OPM\":\r\n                    case \"BG\":\r\n                    case \"BG2\":\r\n                    case \"UCR\":\r\n                    case \"UCR2\":\r\n                    case \"TR2\":\r\n                    case \"HT\":\r\n                    case \"SM\":\r\n                    case \"SA\":\r\n                    case \"AIS\":\r\n                    case \"TK\":\r\n                      (0, _util.info)(\"graphic state operator \" + key);\r\n                      break;\r\n\r\n                    default:\r\n                      (0, _util.info)(\"Unknown graphic state operator \" + key);\r\n                      break;\r\n                  }\r\n                };\r\n\r\n                for (i = 0, ii = gStateKeys.length; i < ii; i++) {\r\n                  _loop();\r\n                }\r\n\r\n                return _context4.abrupt(\"return\", promise.then(function () {\r\n                  if (gStateObj.length > 0) {\r\n                    operatorList.addOp(_util.OPS.setGState, [gStateObj]);\r\n                  }\r\n\r\n                  if (isSimpleGState) {\r\n                    localGStateCache.set(cacheKey, gStateRef, gStateObj);\r\n                  }\r\n                }));\r\n\r\n              case 9:\r\n              case \"end\":\r\n                return _context4.stop();\r\n            }\r\n          }\r\n        }, _callee4);\r\n      }));\r\n\r\n      function setGState(_x10) {\r\n        return _setGState.apply(this, arguments);\r\n      }\r\n\r\n      return setGState;\r\n    }()\r\n  }, {\r\n    key: \"loadFont\",\r\n    value: function loadFont(fontName, font, resources) {\r\n      var _this5 = this;\r\n\r\n      var fallbackFontDict = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\r\n\r\n      var errorFont = /*#__PURE__*/function () {\r\n        var _ref5 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee5() {\r\n          return _regenerator[\"default\"].wrap(function _callee5$(_context5) {\r\n            while (1) {\r\n              switch (_context5.prev = _context5.next) {\r\n                case 0:\r\n                  return _context5.abrupt(\"return\", new TranslatedFont({\r\n                    loadedName: \"g_font_error\",\r\n                    font: new _fonts.ErrorFont(\"Font \\\"\".concat(fontName, \"\\\" is not available.\")),\r\n                    dict: font,\r\n                    extraProperties: _this5.options.fontExtraProperties\r\n                  }));\r\n\r\n                case 1:\r\n                case \"end\":\r\n                  return _context5.stop();\r\n              }\r\n            }\r\n          }, _callee5);\r\n        }));\r\n\r\n        return function errorFont() {\r\n          return _ref5.apply(this, arguments);\r\n        };\r\n      }();\r\n\r\n      var fontRef,\r\n          xref = this.xref;\r\n\r\n      if (font) {\r\n        if (!(0, _primitives.isRef)(font)) {\r\n          throw new _util.FormatError('The \"font\" object should be a reference.');\r\n        }\r\n\r\n        fontRef = font;\r\n      } else {\r\n        var fontRes = resources.get(\"Font\");\r\n\r\n        if (fontRes) {\r\n          fontRef = fontRes.getRaw(fontName);\r\n        }\r\n      }\r\n\r\n      if (!fontRef) {\r\n        var partialMsg = \"Font \\\"\".concat(fontName || font && font.toString(), \"\\\" is not available\");\r\n\r\n        if (!this.options.ignoreErrors && !this.parsingType3Font) {\r\n          (0, _util.warn)(\"\".concat(partialMsg, \".\"));\r\n          return errorFont();\r\n        }\r\n\r\n        this.handler.send(\"UnsupportedFeature\", {\r\n          featureId: _util.UNSUPPORTED_FEATURES.errorFontMissing\r\n        });\r\n        (0, _util.warn)(\"\".concat(partialMsg, \" -- attempting to fallback to a default font.\"));\r\n\r\n        if (fallbackFontDict) {\r\n          fontRef = fallbackFontDict;\r\n        } else {\r\n          fontRef = PartialEvaluator.fallbackFontDict;\r\n        }\r\n      }\r\n\r\n      if (this.fontCache.has(fontRef)) {\r\n        return this.fontCache.get(fontRef);\r\n      }\r\n\r\n      font = xref.fetchIfRef(fontRef);\r\n\r\n      if (!(0, _primitives.isDict)(font)) {\r\n        return errorFont();\r\n      }\r\n\r\n      if (font.cacheKey && this.fontCache.has(font.cacheKey)) {\r\n        return this.fontCache.get(font.cacheKey);\r\n      }\r\n\r\n      var fontCapability = (0, _util.createPromiseCapability)();\r\n      var preEvaluatedFont;\r\n\r\n      try {\r\n        preEvaluatedFont = this.preEvaluateFont(font);\r\n      } catch (reason) {\r\n        (0, _util.warn)(\"loadFont - preEvaluateFont failed: \\\"\".concat(reason, \"\\\".\"));\r\n        return errorFont();\r\n      }\r\n\r\n      var _preEvaluatedFont = preEvaluatedFont,\r\n          descriptor = _preEvaluatedFont.descriptor,\r\n          hash = _preEvaluatedFont.hash;\r\n      var fontRefIsRef = (0, _primitives.isRef)(fontRef),\r\n          fontID;\r\n\r\n      if (fontRefIsRef) {\r\n        fontID = \"f\".concat(fontRef.toString());\r\n      }\r\n\r\n      if (hash && (0, _primitives.isDict)(descriptor)) {\r\n        if (!descriptor.fontAliases) {\r\n          descriptor.fontAliases = Object.create(null);\r\n        }\r\n\r\n        var fontAliases = descriptor.fontAliases;\r\n\r\n        if (fontAliases[hash]) {\r\n          var aliasFontRef = fontAliases[hash].aliasRef;\r\n\r\n          if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) {\r\n            this.fontCache.putAlias(fontRef, aliasFontRef);\r\n            return this.fontCache.get(fontRef);\r\n          }\r\n        } else {\r\n          fontAliases[hash] = {\r\n            fontID: this.idFactory.createFontId()\r\n          };\r\n        }\r\n\r\n        if (fontRefIsRef) {\r\n          fontAliases[hash].aliasRef = fontRef;\r\n        }\r\n\r\n        fontID = fontAliases[hash].fontID;\r\n      }\r\n\r\n      if (fontRefIsRef) {\r\n        this.fontCache.put(fontRef, fontCapability.promise);\r\n      } else {\r\n        if (!fontID) {\r\n          fontID = this.idFactory.createFontId();\r\n        }\r\n\r\n        font.cacheKey = \"cacheKey_\".concat(fontID);\r\n        this.fontCache.put(font.cacheKey, fontCapability.promise);\r\n      }\r\n\r\n      (0, _util.assert)(fontID && fontID.startsWith(\"f\"), 'The \"fontID\" must be (correctly) defined.');\r\n      font.loadedName = \"\".concat(this.idFactory.getDocId(), \"_\").concat(fontID);\r\n      this.translateFont(preEvaluatedFont).then(function (translatedFont) {\r\n        if (translatedFont.fontType !== undefined) {\r\n          var xrefFontStats = xref.stats.fontTypes;\r\n          xrefFontStats[translatedFont.fontType] = true;\r\n        }\r\n\r\n        fontCapability.resolve(new TranslatedFont({\r\n          loadedName: font.loadedName,\r\n          font: translatedFont,\r\n          dict: font,\r\n          extraProperties: _this5.options.fontExtraProperties\r\n        }));\r\n      })[\"catch\"](function (reason) {\r\n        _this5.handler.send(\"UnsupportedFeature\", {\r\n          featureId: _util.UNSUPPORTED_FEATURES.errorFontTranslate\r\n        });\r\n\r\n        (0, _util.warn)(\"loadFont - translateFont failed: \\\"\".concat(reason, \"\\\".\"));\r\n\r\n        try {\r\n          var fontFile3 = descriptor && descriptor.get(\"FontFile3\");\r\n          var subtype = fontFile3 && fontFile3.get(\"Subtype\");\r\n          var fontType = (0, _fonts.getFontType)(preEvaluatedFont.type, subtype && subtype.name);\r\n          var xrefFontStats = xref.stats.fontTypes;\r\n          xrefFontStats[fontType] = true;\r\n        } catch (ex) {}\r\n\r\n        fontCapability.resolve(new TranslatedFont({\r\n          loadedName: font.loadedName,\r\n          font: new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason),\r\n          dict: font,\r\n          extraProperties: _this5.options.fontExtraProperties\r\n        }));\r\n      });\r\n      return fontCapability.promise;\r\n    }\r\n  }, {\r\n    key: \"buildPath\",\r\n    value: function buildPath(operatorList, fn, args) {\r\n      var parsingText = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\r\n      var lastIndex = operatorList.length - 1;\r\n\r\n      if (!args) {\r\n        args = [];\r\n      }\r\n\r\n      if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) {\r\n        if (parsingText) {\r\n          (0, _util.warn)(\"Encountered path operator \\\"\".concat(fn, \"\\\" inside of a text object.\"));\r\n          operatorList.addOp(_util.OPS.save, null);\r\n        }\r\n\r\n        operatorList.addOp(_util.OPS.constructPath, [[fn], args]);\r\n\r\n        if (parsingText) {\r\n          operatorList.addOp(_util.OPS.restore, null);\r\n        }\r\n      } else {\r\n        var opArgs = operatorList.argsArray[lastIndex];\r\n        opArgs[0].push(fn);\r\n        Array.prototype.push.apply(opArgs[1], args);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"parseColorSpace\",\r\n    value: function parseColorSpace(_ref6) {\r\n      var _this6 = this;\r\n\r\n      var cs = _ref6.cs,\r\n          resources = _ref6.resources,\r\n          localColorSpaceCache = _ref6.localColorSpaceCache;\r\n      return _colorspace.ColorSpace.parseAsync({\r\n        cs: cs,\r\n        xref: this.xref,\r\n        resources: resources,\r\n        pdfFunctionFactory: this._pdfFunctionFactory,\r\n        localColorSpaceCache: localColorSpaceCache\r\n      })[\"catch\"](function (reason) {\r\n        if (reason instanceof _util.AbortException) {\r\n          return null;\r\n        }\r\n\r\n        if (_this6.options.ignoreErrors) {\r\n          _this6.handler.send(\"UnsupportedFeature\", {\r\n            featureId: _util.UNSUPPORTED_FEATURES.errorColorSpace\r\n          });\r\n\r\n          (0, _util.warn)(\"parseColorSpace - ignoring ColorSpace: \\\"\".concat(reason, \"\\\".\"));\r\n          return null;\r\n        }\r\n\r\n        throw reason;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"handleColorN\",\r\n    value: function handleColorN(operatorList, fn, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache) {\r\n      var patternName = args.pop();\r\n\r\n      if (patternName instanceof _primitives.Name) {\r\n        var name = patternName.name;\r\n        var localTilingPattern = localTilingPatternCache.getByName(name);\r\n\r\n        if (localTilingPattern) {\r\n          try {\r\n            var color = cs.base ? cs.base.getRgb(args, 0) : null;\r\n            var tilingPatternIR = (0, _pattern.getTilingPatternIR)(localTilingPattern.operatorListIR, localTilingPattern.dict, color);\r\n            operatorList.addOp(fn, tilingPatternIR);\r\n            return undefined;\r\n          } catch (ex) {\r\n            if (ex instanceof _core_utils.MissingDataException) {\r\n              throw ex;\r\n            }\r\n          }\r\n        }\r\n\r\n        var pattern = patterns.get(name);\r\n\r\n        if (pattern) {\r\n          var dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern;\r\n          var typeNum = dict.get(\"PatternType\");\r\n\r\n          if (typeNum === PatternType.TILING) {\r\n            var _color = cs.base ? cs.base.getRgb(args, 0) : null;\r\n\r\n            return this.handleTilingType(fn, _color, resources, pattern, dict, operatorList, task, name, localTilingPatternCache);\r\n          } else if (typeNum === PatternType.SHADING) {\r\n            var shading = dict.get(\"Shading\");\r\n            var matrix = dict.getArray(\"Matrix\");\r\n            pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, this._pdfFunctionFactory, localColorSpaceCache);\r\n            operatorList.addOp(fn, pattern.getIR());\r\n            return undefined;\r\n          }\r\n\r\n          throw new _util.FormatError(\"Unknown PatternType: \".concat(typeNum));\r\n        }\r\n      }\r\n\r\n      throw new _util.FormatError(\"Unknown PatternName: \".concat(patternName));\r\n    }\r\n  }, {\r\n    key: \"parseMarkedContentProps\",\r\n    value: function () {\r\n      var _parseMarkedContentProps = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee6(contentProperties, resources) {\r\n        var optionalContent, properties, optionalContentType, optionalContentGroups, groupIds, expression;\r\n        return _regenerator[\"default\"].wrap(function _callee6$(_context6) {\r\n          while (1) {\r\n            switch (_context6.prev = _context6.next) {\r\n              case 0:\r\n                if (!(0, _primitives.isName)(contentProperties)) {\r\n                  _context6.next = 5;\r\n                  break;\r\n                }\r\n\r\n                properties = resources.get(\"Properties\");\r\n                optionalContent = properties.get(contentProperties.name);\r\n                _context6.next = 10;\r\n                break;\r\n\r\n              case 5:\r\n                if (!(0, _primitives.isDict)(contentProperties)) {\r\n                  _context6.next = 9;\r\n                  break;\r\n                }\r\n\r\n                optionalContent = contentProperties;\r\n                _context6.next = 10;\r\n                break;\r\n\r\n              case 9:\r\n                throw new _util.FormatError(\"Optional content properties malformed.\");\r\n\r\n              case 10:\r\n                optionalContentType = optionalContent.get(\"Type\").name;\r\n\r\n                if (!(optionalContentType === \"OCG\")) {\r\n                  _context6.next = 15;\r\n                  break;\r\n                }\r\n\r\n                return _context6.abrupt(\"return\", {\r\n                  type: optionalContentType,\r\n                  id: optionalContent.objId\r\n                });\r\n\r\n              case 15:\r\n                if (!(optionalContentType === \"OCMD\")) {\r\n                  _context6.next = 27;\r\n                  break;\r\n                }\r\n\r\n                optionalContentGroups = optionalContent.get(\"OCGs\");\r\n\r\n                if (!(Array.isArray(optionalContentGroups) || (0, _primitives.isDict)(optionalContentGroups))) {\r\n                  _context6.next = 25;\r\n                  break;\r\n                }\r\n\r\n                groupIds = [];\r\n\r\n                if (Array.isArray(optionalContentGroups)) {\r\n                  optionalContent.get(\"OCGs\").forEach(function (ocg) {\r\n                    groupIds.push(ocg.toString());\r\n                  });\r\n                } else {\r\n                  groupIds.push(optionalContentGroups.objId);\r\n                }\r\n\r\n                expression = null;\r\n\r\n                if (optionalContent.get(\"VE\")) {\r\n                  expression = true;\r\n                }\r\n\r\n                return _context6.abrupt(\"return\", {\r\n                  type: optionalContentType,\r\n                  ids: groupIds,\r\n                  policy: (0, _primitives.isName)(optionalContent.get(\"P\")) ? optionalContent.get(\"P\").name : null,\r\n                  expression: expression\r\n                });\r\n\r\n              case 25:\r\n                if (!(0, _primitives.isRef)(optionalContentGroups)) {\r\n                  _context6.next = 27;\r\n                  break;\r\n                }\r\n\r\n                return _context6.abrupt(\"return\", {\r\n                  type: optionalContentType,\r\n                  id: optionalContentGroups.toString()\r\n                });\r\n\r\n              case 27:\r\n                return _context6.abrupt(\"return\", null);\r\n\r\n              case 28:\r\n              case \"end\":\r\n                return _context6.stop();\r\n            }\r\n          }\r\n        }, _callee6);\r\n      }));\r\n\r\n      function parseMarkedContentProps(_x11, _x12) {\r\n        return _parseMarkedContentProps.apply(this, arguments);\r\n      }\r\n\r\n      return parseMarkedContentProps;\r\n    }()\r\n  }, {\r\n    key: \"getOperatorList\",\r\n    value: function getOperatorList(_ref7) {\r\n      var _this7 = this;\r\n\r\n      var stream = _ref7.stream,\r\n          task = _ref7.task,\r\n          resources = _ref7.resources,\r\n          operatorList = _ref7.operatorList,\r\n          _ref7$initialState = _ref7.initialState,\r\n          initialState = _ref7$initialState === void 0 ? null : _ref7$initialState,\r\n          _ref7$fallbackFontDic = _ref7.fallbackFontDict,\r\n          fallbackFontDict = _ref7$fallbackFontDic === void 0 ? null : _ref7$fallbackFontDic;\r\n      resources = resources || _primitives.Dict.empty;\r\n      initialState = initialState || new EvalState();\r\n\r\n      if (!operatorList) {\r\n        throw new Error('getOperatorList: missing \"operatorList\" parameter');\r\n      }\r\n\r\n      var self = this;\r\n      var xref = this.xref;\r\n      var parsingText = false;\r\n      var localImageCache = new _image_utils.LocalImageCache();\r\n      var localColorSpaceCache = new _image_utils.LocalColorSpaceCache();\r\n      var localGStateCache = new _image_utils.LocalGStateCache();\r\n      var localTilingPatternCache = new _image_utils.LocalTilingPatternCache();\r\n\r\n      var xobjs = resources.get(\"XObject\") || _primitives.Dict.empty;\r\n\r\n      var patterns = resources.get(\"Pattern\") || _primitives.Dict.empty;\r\n\r\n      var stateManager = new StateManager(initialState);\r\n      var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);\r\n      var timeSlotManager = new TimeSlotManager();\r\n\r\n      function closePendingRestoreOPS(argument) {\r\n        for (var i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {\r\n          operatorList.addOp(_util.OPS.restore, []);\r\n        }\r\n      }\r\n\r\n      return new Promise(function promiseBody(resolve, reject) {\r\n        var next = function next(promise) {\r\n          Promise.all([promise, operatorList.ready]).then(function () {\r\n            try {\r\n              promiseBody(resolve, reject);\r\n            } catch (ex) {\r\n              reject(ex);\r\n            }\r\n          }, reject);\r\n        };\r\n\r\n        task.ensureNotTerminated();\r\n        timeSlotManager.reset();\r\n        var stop,\r\n            operation = {},\r\n            i,\r\n            ii,\r\n            cs,\r\n            name;\r\n\r\n        while (!(stop = timeSlotManager.check())) {\r\n          operation.args = null;\r\n\r\n          if (!preprocessor.read(operation)) {\r\n            break;\r\n          }\r\n\r\n          var args = operation.args;\r\n          var fn = operation.fn;\r\n\r\n          switch (fn | 0) {\r\n            case _util.OPS.paintXObject:\r\n              name = args[0].name;\r\n\r\n              if (name) {\r\n                var localImage = localImageCache.getByName(name);\r\n\r\n                if (localImage) {\r\n                  operatorList.addOp(localImage.fn, localImage.args);\r\n                  args = null;\r\n                  continue;\r\n                }\r\n              }\r\n\r\n              next(new Promise(function (resolveXObject, rejectXObject) {\r\n                if (!name) {\r\n                  throw new _util.FormatError(\"XObject must be referred to by name.\");\r\n                }\r\n\r\n                var xobj = xobjs.getRaw(name);\r\n\r\n                if (xobj instanceof _primitives.Ref) {\r\n                  var _localImage = localImageCache.getByRef(xobj);\r\n\r\n                  if (_localImage) {\r\n                    operatorList.addOp(_localImage.fn, _localImage.args);\r\n                    resolveXObject();\r\n                    return;\r\n                  }\r\n\r\n                  var globalImage = self.globalImageCache.getData(xobj, self.pageIndex);\r\n\r\n                  if (globalImage) {\r\n                    operatorList.addDependency(globalImage.objId);\r\n                    operatorList.addOp(globalImage.fn, globalImage.args);\r\n                    resolveXObject();\r\n                    return;\r\n                  }\r\n\r\n                  xobj = xref.fetch(xobj);\r\n                }\r\n\r\n                if (!(0, _primitives.isStream)(xobj)) {\r\n                  throw new _util.FormatError(\"XObject should be a stream\");\r\n                }\r\n\r\n                var type = xobj.dict.get(\"Subtype\");\r\n\r\n                if (!(0, _primitives.isName)(type)) {\r\n                  throw new _util.FormatError(\"XObject should have a Name subtype\");\r\n                }\r\n\r\n                if (type.name === \"Form\") {\r\n                  stateManager.save();\r\n                  self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone(), localColorSpaceCache).then(function () {\r\n                    stateManager.restore();\r\n                    resolveXObject();\r\n                  }, rejectXObject);\r\n                  return;\r\n                } else if (type.name === \"Image\") {\r\n                  self.buildPaintImageXObject({\r\n                    resources: resources,\r\n                    image: xobj,\r\n                    operatorList: operatorList,\r\n                    cacheKey: name,\r\n                    localImageCache: localImageCache,\r\n                    localColorSpaceCache: localColorSpaceCache\r\n                  }).then(resolveXObject, rejectXObject);\r\n                  return;\r\n                } else if (type.name === \"PS\") {\r\n                  (0, _util.info)(\"Ignored XObject subtype PS\");\r\n                } else {\r\n                  throw new _util.FormatError(\"Unhandled XObject subtype \".concat(type.name));\r\n                }\r\n\r\n                resolveXObject();\r\n              })[\"catch\"](function (reason) {\r\n                if (reason instanceof _util.AbortException) {\r\n                  return;\r\n                }\r\n\r\n                if (self.options.ignoreErrors) {\r\n                  self.handler.send(\"UnsupportedFeature\", {\r\n                    featureId: _util.UNSUPPORTED_FEATURES.errorXObject\r\n                  });\r\n                  (0, _util.warn)(\"getOperatorList - ignoring XObject: \\\"\".concat(reason, \"\\\".\"));\r\n                  return;\r\n                }\r\n\r\n                throw reason;\r\n              }));\r\n              return;\r\n\r\n            case _util.OPS.setFont:\r\n              var fontSize = args[1];\r\n              next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state, fallbackFontDict).then(function (loadedName) {\r\n                operatorList.addDependency(loadedName);\r\n                operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]);\r\n              }));\r\n              return;\r\n\r\n            case _util.OPS.beginText:\r\n              parsingText = true;\r\n              break;\r\n\r\n            case _util.OPS.endText:\r\n              parsingText = false;\r\n              break;\r\n\r\n            case _util.OPS.endInlineImage:\r\n              var cacheKey = args[0].cacheKey;\r\n\r\n              if (cacheKey) {\r\n                var _localImage2 = localImageCache.getByName(cacheKey);\r\n\r\n                if (_localImage2) {\r\n                  operatorList.addOp(_localImage2.fn, _localImage2.args);\r\n                  args = null;\r\n                  continue;\r\n                }\r\n              }\r\n\r\n              next(self.buildPaintImageXObject({\r\n                resources: resources,\r\n                image: args[0],\r\n                isInline: true,\r\n                operatorList: operatorList,\r\n                cacheKey: cacheKey,\r\n                localImageCache: localImageCache,\r\n                localColorSpaceCache: localColorSpaceCache\r\n              }));\r\n              return;\r\n\r\n            case _util.OPS.showText:\r\n              if (!stateManager.state.font) {\r\n                self.ensureStateFont(stateManager.state);\r\n                continue;\r\n              }\r\n\r\n              args[0] = self.handleText(args[0], stateManager.state);\r\n              break;\r\n\r\n            case _util.OPS.showSpacedText:\r\n              if (!stateManager.state.font) {\r\n                self.ensureStateFont(stateManager.state);\r\n                continue;\r\n              }\r\n\r\n              var arr = args[0];\r\n              var combinedGlyphs = [];\r\n              var arrLength = arr.length;\r\n              var state = stateManager.state;\r\n\r\n              for (i = 0; i < arrLength; ++i) {\r\n                var arrItem = arr[i];\r\n\r\n                if ((0, _util.isString)(arrItem)) {\r\n                  Array.prototype.push.apply(combinedGlyphs, self.handleText(arrItem, state));\r\n                } else if ((0, _util.isNum)(arrItem)) {\r\n                  combinedGlyphs.push(arrItem);\r\n                }\r\n              }\r\n\r\n              args[0] = combinedGlyphs;\r\n              fn = _util.OPS.showText;\r\n              break;\r\n\r\n            case _util.OPS.nextLineShowText:\r\n              if (!stateManager.state.font) {\r\n                self.ensureStateFont(stateManager.state);\r\n                continue;\r\n              }\r\n\r\n              operatorList.addOp(_util.OPS.nextLine);\r\n              args[0] = self.handleText(args[0], stateManager.state);\r\n              fn = _util.OPS.showText;\r\n              break;\r\n\r\n            case _util.OPS.nextLineSetSpacingShowText:\r\n              if (!stateManager.state.font) {\r\n                self.ensureStateFont(stateManager.state);\r\n                continue;\r\n              }\r\n\r\n              operatorList.addOp(_util.OPS.nextLine);\r\n              operatorList.addOp(_util.OPS.setWordSpacing, [args.shift()]);\r\n              operatorList.addOp(_util.OPS.setCharSpacing, [args.shift()]);\r\n              args[0] = self.handleText(args[0], stateManager.state);\r\n              fn = _util.OPS.showText;\r\n              break;\r\n\r\n            case _util.OPS.setTextRenderingMode:\r\n              stateManager.state.textRenderingMode = args[0];\r\n              break;\r\n\r\n            case _util.OPS.setFillColorSpace:\r\n              {\r\n                var cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache);\r\n\r\n                if (cachedColorSpace) {\r\n                  stateManager.state.fillColorSpace = cachedColorSpace;\r\n                  continue;\r\n                }\r\n\r\n                next(self.parseColorSpace({\r\n                  cs: args[0],\r\n                  resources: resources,\r\n                  localColorSpaceCache: localColorSpaceCache\r\n                }).then(function (colorSpace) {\r\n                  if (colorSpace) {\r\n                    stateManager.state.fillColorSpace = colorSpace;\r\n                  }\r\n                }));\r\n                return;\r\n              }\r\n\r\n            case _util.OPS.setStrokeColorSpace:\r\n              {\r\n                var _cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache);\r\n\r\n                if (_cachedColorSpace) {\r\n                  stateManager.state.strokeColorSpace = _cachedColorSpace;\r\n                  continue;\r\n                }\r\n\r\n                next(self.parseColorSpace({\r\n                  cs: args[0],\r\n                  resources: resources,\r\n                  localColorSpaceCache: localColorSpaceCache\r\n                }).then(function (colorSpace) {\r\n                  if (colorSpace) {\r\n                    stateManager.state.strokeColorSpace = colorSpace;\r\n                  }\r\n                }));\r\n                return;\r\n              }\r\n\r\n            case _util.OPS.setFillColor:\r\n              cs = stateManager.state.fillColorSpace;\r\n              args = cs.getRgb(args, 0);\r\n              fn = _util.OPS.setFillRGBColor;\r\n              break;\r\n\r\n            case _util.OPS.setStrokeColor:\r\n              cs = stateManager.state.strokeColorSpace;\r\n              args = cs.getRgb(args, 0);\r\n              fn = _util.OPS.setStrokeRGBColor;\r\n              break;\r\n\r\n            case _util.OPS.setFillGray:\r\n              stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.gray;\r\n              args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0);\r\n              fn = _util.OPS.setFillRGBColor;\r\n              break;\r\n\r\n            case _util.OPS.setStrokeGray:\r\n              stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.gray;\r\n              args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0);\r\n              fn = _util.OPS.setStrokeRGBColor;\r\n              break;\r\n\r\n            case _util.OPS.setFillCMYKColor:\r\n              stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.cmyk;\r\n              args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0);\r\n              fn = _util.OPS.setFillRGBColor;\r\n              break;\r\n\r\n            case _util.OPS.setStrokeCMYKColor:\r\n              stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.cmyk;\r\n              args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0);\r\n              fn = _util.OPS.setStrokeRGBColor;\r\n              break;\r\n\r\n            case _util.OPS.setFillRGBColor:\r\n              stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.rgb;\r\n              args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0);\r\n              break;\r\n\r\n            case _util.OPS.setStrokeRGBColor:\r\n              stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.rgb;\r\n              args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0);\r\n              break;\r\n\r\n            case _util.OPS.setFillColorN:\r\n              cs = stateManager.state.fillColorSpace;\r\n\r\n              if (cs.name === \"Pattern\") {\r\n                next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache));\r\n                return;\r\n              }\r\n\r\n              args = cs.getRgb(args, 0);\r\n              fn = _util.OPS.setFillRGBColor;\r\n              break;\r\n\r\n            case _util.OPS.setStrokeColorN:\r\n              cs = stateManager.state.strokeColorSpace;\r\n\r\n              if (cs.name === \"Pattern\") {\r\n                next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache));\r\n                return;\r\n              }\r\n\r\n              args = cs.getRgb(args, 0);\r\n              fn = _util.OPS.setStrokeRGBColor;\r\n              break;\r\n\r\n            case _util.OPS.shadingFill:\r\n              var shadingRes = resources.get(\"Shading\");\r\n\r\n              if (!shadingRes) {\r\n                throw new _util.FormatError(\"No shading resource found\");\r\n              }\r\n\r\n              var shading = shadingRes.get(args[0].name);\r\n\r\n              if (!shading) {\r\n                throw new _util.FormatError(\"No shading object found\");\r\n              }\r\n\r\n              var shadingFill = _pattern.Pattern.parseShading(shading, null, xref, resources, self.handler, self._pdfFunctionFactory, localColorSpaceCache);\r\n\r\n              var patternIR = shadingFill.getIR();\r\n              args = [patternIR];\r\n              fn = _util.OPS.shadingFill;\r\n              break;\r\n\r\n            case _util.OPS.setGState:\r\n              name = args[0].name;\r\n\r\n              if (name) {\r\n                var localGStateObj = localGStateCache.getByName(name);\r\n\r\n                if (localGStateObj) {\r\n                  if (localGStateObj.length > 0) {\r\n                    operatorList.addOp(_util.OPS.setGState, [localGStateObj]);\r\n                  }\r\n\r\n                  args = null;\r\n                  continue;\r\n                }\r\n              }\r\n\r\n              next(new Promise(function (resolveGState, rejectGState) {\r\n                if (!name) {\r\n                  throw new _util.FormatError(\"GState must be referred to by name.\");\r\n                }\r\n\r\n                var extGState = resources.get(\"ExtGState\");\r\n\r\n                if (!(extGState instanceof _primitives.Dict)) {\r\n                  throw new _util.FormatError(\"ExtGState should be a dictionary.\");\r\n                }\r\n\r\n                var gState = extGState.get(name);\r\n\r\n                if (!(gState instanceof _primitives.Dict)) {\r\n                  throw new _util.FormatError(\"GState should be a dictionary.\");\r\n                }\r\n\r\n                self.setGState({\r\n                  resources: resources,\r\n                  gState: gState,\r\n                  operatorList: operatorList,\r\n                  cacheKey: name,\r\n                  task: task,\r\n                  stateManager: stateManager,\r\n                  localGStateCache: localGStateCache,\r\n                  localColorSpaceCache: localColorSpaceCache\r\n                }).then(resolveGState, rejectGState);\r\n              })[\"catch\"](function (reason) {\r\n                if (reason instanceof _util.AbortException) {\r\n                  return;\r\n                }\r\n\r\n                if (self.options.ignoreErrors) {\r\n                  self.handler.send(\"UnsupportedFeature\", {\r\n                    featureId: _util.UNSUPPORTED_FEATURES.errorExtGState\r\n                  });\r\n                  (0, _util.warn)(\"getOperatorList - ignoring ExtGState: \\\"\".concat(reason, \"\\\".\"));\r\n                  return;\r\n                }\r\n\r\n                throw reason;\r\n              }));\r\n              return;\r\n\r\n            case _util.OPS.moveTo:\r\n            case _util.OPS.lineTo:\r\n            case _util.OPS.curveTo:\r\n            case _util.OPS.curveTo2:\r\n            case _util.OPS.curveTo3:\r\n            case _util.OPS.closePath:\r\n            case _util.OPS.rectangle:\r\n              self.buildPath(operatorList, fn, args, parsingText);\r\n              continue;\r\n\r\n            case _util.OPS.markPoint:\r\n            case _util.OPS.markPointProps:\r\n            case _util.OPS.beginCompat:\r\n            case _util.OPS.endCompat:\r\n              continue;\r\n\r\n            case _util.OPS.beginMarkedContentProps:\r\n              if (!(0, _primitives.isName)(args[0])) {\r\n                (0, _util.warn)(\"Expected name for beginMarkedContentProps arg0=\".concat(args[0]));\r\n                continue;\r\n              }\r\n\r\n              if (args[0].name === \"OC\") {\r\n                next(self.parseMarkedContentProps(args[1], resources).then(function (data) {\r\n                  operatorList.addOp(_util.OPS.beginMarkedContentProps, [\"OC\", data]);\r\n                })[\"catch\"](function (reason) {\r\n                  if (reason instanceof _util.AbortException) {\r\n                    return;\r\n                  }\r\n\r\n                  if (self.options.ignoreErrors) {\r\n                    self.handler.send(\"UnsupportedFeature\", {\r\n                      featureId: _util.UNSUPPORTED_FEATURES.errorMarkedContent\r\n                    });\r\n                    (0, _util.warn)(\"getOperatorList - ignoring beginMarkedContentProps: \\\"\".concat(reason, \"\\\".\"));\r\n                    return;\r\n                  }\r\n\r\n                  throw reason;\r\n                }));\r\n                return;\r\n              }\r\n\r\n              args = [args[0].name];\r\n              break;\r\n\r\n            case _util.OPS.beginMarkedContent:\r\n            case _util.OPS.endMarkedContent:\r\n            default:\r\n              if (args !== null) {\r\n                for (i = 0, ii = args.length; i < ii; i++) {\r\n                  if (args[i] instanceof _primitives.Dict) {\r\n                    break;\r\n                  }\r\n                }\r\n\r\n                if (i < ii) {\r\n                  (0, _util.warn)(\"getOperatorList - ignoring operator: \" + fn);\r\n                  continue;\r\n                }\r\n              }\r\n\r\n          }\r\n\r\n          operatorList.addOp(fn, args);\r\n        }\r\n\r\n        if (stop) {\r\n          next(deferred);\r\n          return;\r\n        }\r\n\r\n        closePendingRestoreOPS();\r\n        resolve();\r\n      })[\"catch\"](function (reason) {\r\n        if (reason instanceof _util.AbortException) {\r\n          return;\r\n        }\r\n\r\n        if (_this7.options.ignoreErrors) {\r\n          _this7.handler.send(\"UnsupportedFeature\", {\r\n            featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList\r\n          });\r\n\r\n          (0, _util.warn)(\"getOperatorList - ignoring errors during \\\"\".concat(task.name, \"\\\" \") + \"task: \\\"\".concat(reason, \"\\\".\"));\r\n          closePendingRestoreOPS();\r\n          return;\r\n        }\r\n\r\n        throw reason;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getTextContent\",\r\n    value: function getTextContent(_ref8) {\r\n      var _this8 = this;\r\n\r\n      var stream = _ref8.stream,\r\n          task = _ref8.task,\r\n          resources = _ref8.resources,\r\n          _ref8$stateManager = _ref8.stateManager,\r\n          stateManager = _ref8$stateManager === void 0 ? null : _ref8$stateManager,\r\n          _ref8$normalizeWhites = _ref8.normalizeWhitespace,\r\n          normalizeWhitespace = _ref8$normalizeWhites === void 0 ? false : _ref8$normalizeWhites,\r\n          _ref8$combineTextItem = _ref8.combineTextItems,\r\n          combineTextItems = _ref8$combineTextItem === void 0 ? false : _ref8$combineTextItem,\r\n          sink = _ref8.sink,\r\n          _ref8$seenStyles = _ref8.seenStyles,\r\n          seenStyles = _ref8$seenStyles === void 0 ? Object.create(null) : _ref8$seenStyles;\r\n      resources = resources || _primitives.Dict.empty;\r\n      stateManager = stateManager || new StateManager(new TextState());\r\n      var WhitespaceRegexp = /\\s/g;\r\n      var textContent = {\r\n        items: [],\r\n        styles: Object.create(null)\r\n      };\r\n      var textContentItem = {\r\n        initialized: false,\r\n        str: [],\r\n        width: 0,\r\n        height: 0,\r\n        vertical: false,\r\n        lastAdvanceWidth: 0,\r\n        lastAdvanceHeight: 0,\r\n        textAdvanceScale: 0,\r\n        spaceWidth: 0,\r\n        fakeSpaceMin: Infinity,\r\n        fakeMultiSpaceMin: Infinity,\r\n        fakeMultiSpaceMax: -0,\r\n        textRunBreakAllowed: false,\r\n        transform: null,\r\n        fontName: null\r\n      };\r\n      var SPACE_FACTOR = 0.3;\r\n      var MULTI_SPACE_FACTOR = 1.5;\r\n      var MULTI_SPACE_FACTOR_MAX = 4;\r\n      var self = this;\r\n      var xref = this.xref;\r\n      var xobjs = null;\r\n      var emptyXObjectCache = new _image_utils.LocalImageCache();\r\n      var emptyGStateCache = new _image_utils.LocalGStateCache();\r\n      var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);\r\n      var textState;\r\n\r\n      function ensureTextContentItem() {\r\n        if (textContentItem.initialized) {\r\n          return textContentItem;\r\n        }\r\n\r\n        var font = textState.font;\r\n\r\n        if (!(font.loadedName in seenStyles)) {\r\n          seenStyles[font.loadedName] = true;\r\n          textContent.styles[font.loadedName] = {\r\n            fontFamily: font.fallbackName,\r\n            ascent: font.ascent,\r\n            descent: font.descent,\r\n            vertical: font.vertical\r\n          };\r\n        }\r\n\r\n        textContentItem.fontName = font.loadedName;\r\n        var tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise];\r\n\r\n        if (font.isType3Font && textState.fontSize <= 1 && !(0, _util.isArrayEqual)(textState.fontMatrix, _util.FONT_IDENTITY_MATRIX)) {\r\n          var glyphHeight = font.bbox[3] - font.bbox[1];\r\n\r\n          if (glyphHeight > 0) {\r\n            tsm[3] *= glyphHeight * textState.fontMatrix[3];\r\n          }\r\n        }\r\n\r\n        var trm = _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm));\r\n\r\n        textContentItem.transform = trm;\r\n\r\n        if (!font.vertical) {\r\n          textContentItem.width = 0;\r\n          textContentItem.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]);\r\n          textContentItem.vertical = false;\r\n        } else {\r\n          textContentItem.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]);\r\n          textContentItem.height = 0;\r\n          textContentItem.vertical = true;\r\n        }\r\n\r\n        var a = textState.textLineMatrix[0];\r\n        var b = textState.textLineMatrix[1];\r\n        var scaleLineX = Math.sqrt(a * a + b * b);\r\n        a = textState.ctm[0];\r\n        b = textState.ctm[1];\r\n        var scaleCtmX = Math.sqrt(a * a + b * b);\r\n        textContentItem.textAdvanceScale = scaleCtmX * scaleLineX;\r\n        textContentItem.lastAdvanceWidth = 0;\r\n        textContentItem.lastAdvanceHeight = 0;\r\n        var spaceWidth = font.spaceWidth / 1000 * textState.fontSize;\r\n\r\n        if (spaceWidth) {\r\n          textContentItem.spaceWidth = spaceWidth;\r\n          textContentItem.fakeSpaceMin = spaceWidth * SPACE_FACTOR;\r\n          textContentItem.fakeMultiSpaceMin = spaceWidth * MULTI_SPACE_FACTOR;\r\n          textContentItem.fakeMultiSpaceMax = spaceWidth * MULTI_SPACE_FACTOR_MAX;\r\n          textContentItem.textRunBreakAllowed = !font.isMonospace;\r\n        } else {\r\n          textContentItem.spaceWidth = 0;\r\n          textContentItem.fakeSpaceMin = Infinity;\r\n          textContentItem.fakeMultiSpaceMin = Infinity;\r\n          textContentItem.fakeMultiSpaceMax = 0;\r\n          textContentItem.textRunBreakAllowed = false;\r\n        }\r\n\r\n        textContentItem.initialized = true;\r\n        return textContentItem;\r\n      }\r\n\r\n      function replaceWhitespace(str) {\r\n        var i = 0,\r\n            ii = str.length,\r\n            code;\r\n\r\n        while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7f) {\r\n          i++;\r\n        }\r\n\r\n        return i < ii ? str.replace(WhitespaceRegexp, \" \") : str;\r\n      }\r\n\r\n      function runBidiTransform(textChunk) {\r\n        var str = textChunk.str.join(\"\");\r\n        var bidiResult = (0, _bidi.bidi)(str, -1, textChunk.vertical);\r\n        return {\r\n          str: normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str,\r\n          dir: bidiResult.dir,\r\n          width: textChunk.width,\r\n          height: textChunk.height,\r\n          transform: textChunk.transform,\r\n          fontName: textChunk.fontName\r\n        };\r\n      }\r\n\r\n      function handleSetFont(fontName, fontRef) {\r\n        return self.loadFont(fontName, fontRef, resources).then(function (translated) {\r\n          textState.font = translated.font;\r\n          textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX;\r\n        });\r\n      }\r\n\r\n      function buildTextContentItem(chars) {\r\n        var font = textState.font;\r\n        var textChunk = ensureTextContentItem();\r\n        var width = 0;\r\n        var height = 0;\r\n        var glyphs = font.charsToGlyphs(chars);\r\n\r\n        for (var i = 0; i < glyphs.length; i++) {\r\n          var glyph = glyphs[i];\r\n          var glyphWidth = null;\r\n\r\n          if (font.vertical && glyph.vmetric) {\r\n            glyphWidth = glyph.vmetric[0];\r\n          } else {\r\n            glyphWidth = glyph.width;\r\n          }\r\n\r\n          var glyphUnicode = glyph.unicode;\r\n          var NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)();\r\n\r\n          if (NormalizedUnicodes[glyphUnicode] !== undefined) {\r\n            glyphUnicode = NormalizedUnicodes[glyphUnicode];\r\n          }\r\n\r\n          glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode);\r\n          var charSpacing = textState.charSpacing;\r\n\r\n          if (glyph.isSpace) {\r\n            var wordSpacing = textState.wordSpacing;\r\n            charSpacing += wordSpacing;\r\n\r\n            if (wordSpacing > 0) {\r\n              addFakeSpaces(wordSpacing, textChunk.str);\r\n            }\r\n          }\r\n\r\n          var tx = 0;\r\n          var ty = 0;\r\n\r\n          if (!font.vertical) {\r\n            var w0 = glyphWidth * textState.fontMatrix[0];\r\n            tx = (w0 * textState.fontSize + charSpacing) * textState.textHScale;\r\n            width += tx;\r\n          } else {\r\n            var w1 = glyphWidth * textState.fontMatrix[0];\r\n            ty = w1 * textState.fontSize + charSpacing;\r\n            height += ty;\r\n          }\r\n\r\n          textState.translateTextMatrix(tx, ty);\r\n          textChunk.str.push(glyphUnicode);\r\n        }\r\n\r\n        if (!font.vertical) {\r\n          textChunk.lastAdvanceWidth = width;\r\n          textChunk.width += width;\r\n        } else {\r\n          textChunk.lastAdvanceHeight = height;\r\n          textChunk.height += Math.abs(height);\r\n        }\r\n\r\n        return textChunk;\r\n      }\r\n\r\n      function addFakeSpaces(width, strBuf) {\r\n        if (width < textContentItem.fakeSpaceMin) {\r\n          return;\r\n        }\r\n\r\n        if (width < textContentItem.fakeMultiSpaceMin) {\r\n          strBuf.push(\" \");\r\n          return;\r\n        }\r\n\r\n        var fakeSpaces = Math.round(width / textContentItem.spaceWidth);\r\n\r\n        while (fakeSpaces-- > 0) {\r\n          strBuf.push(\" \");\r\n        }\r\n      }\r\n\r\n      function flushTextContentItem() {\r\n        if (!textContentItem.initialized) {\r\n          return;\r\n        }\r\n\r\n        if (!textContentItem.vertical) {\r\n          textContentItem.width *= textContentItem.textAdvanceScale;\r\n        } else {\r\n          textContentItem.height *= textContentItem.textAdvanceScale;\r\n        }\r\n\r\n        textContent.items.push(runBidiTransform(textContentItem));\r\n        textContentItem.initialized = false;\r\n        textContentItem.str.length = 0;\r\n      }\r\n\r\n      function enqueueChunk() {\r\n        var length = textContent.items.length;\r\n\r\n        if (length > 0) {\r\n          sink.enqueue(textContent, length);\r\n          textContent.items = [];\r\n          textContent.styles = Object.create(null);\r\n        }\r\n      }\r\n\r\n      var timeSlotManager = new TimeSlotManager();\r\n      return new Promise(function promiseBody(resolve, reject) {\r\n        var next = function next(promise) {\r\n          enqueueChunk();\r\n          Promise.all([promise, sink.ready]).then(function () {\r\n            try {\r\n              promiseBody(resolve, reject);\r\n            } catch (ex) {\r\n              reject(ex);\r\n            }\r\n          }, reject);\r\n        };\r\n\r\n        task.ensureNotTerminated();\r\n        timeSlotManager.reset();\r\n        var stop,\r\n            operation = {},\r\n            args = [];\r\n\r\n        while (!(stop = timeSlotManager.check())) {\r\n          args.length = 0;\r\n          operation.args = args;\r\n\r\n          if (!preprocessor.read(operation)) {\r\n            break;\r\n          }\r\n\r\n          textState = stateManager.state;\r\n          var fn = operation.fn;\r\n          args = operation.args;\r\n          var advance, diff;\r\n\r\n          switch (fn | 0) {\r\n            case _util.OPS.setFont:\r\n              var fontNameArg = args[0].name,\r\n                  fontSizeArg = args[1];\r\n\r\n              if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) {\r\n                break;\r\n              }\r\n\r\n              flushTextContentItem();\r\n              textState.fontName = fontNameArg;\r\n              textState.fontSize = fontSizeArg;\r\n              next(handleSetFont(fontNameArg, null));\r\n              return;\r\n\r\n            case _util.OPS.setTextRise:\r\n              flushTextContentItem();\r\n              textState.textRise = args[0];\r\n              break;\r\n\r\n            case _util.OPS.setHScale:\r\n              flushTextContentItem();\r\n              textState.textHScale = args[0] / 100;\r\n              break;\r\n\r\n            case _util.OPS.setLeading:\r\n              flushTextContentItem();\r\n              textState.leading = args[0];\r\n              break;\r\n\r\n            case _util.OPS.moveText:\r\n              var isSameTextLine = !textState.font ? false : (textState.font.vertical ? args[0] : args[1]) === 0;\r\n              advance = args[0] - args[1];\r\n\r\n              if (combineTextItems && isSameTextLine && textContentItem.initialized && advance > 0 && advance <= textContentItem.fakeMultiSpaceMax) {\r\n                textState.translateTextLineMatrix(args[0], args[1]);\r\n                textContentItem.width += args[0] - textContentItem.lastAdvanceWidth;\r\n                textContentItem.height += args[1] - textContentItem.lastAdvanceHeight;\r\n                diff = args[0] - textContentItem.lastAdvanceWidth - (args[1] - textContentItem.lastAdvanceHeight);\r\n                addFakeSpaces(diff, textContentItem.str);\r\n                break;\r\n              }\r\n\r\n              flushTextContentItem();\r\n              textState.translateTextLineMatrix(args[0], args[1]);\r\n              textState.textMatrix = textState.textLineMatrix.slice();\r\n              break;\r\n\r\n            case _util.OPS.setLeadingMoveText:\r\n              flushTextContentItem();\r\n              textState.leading = -args[1];\r\n              textState.translateTextLineMatrix(args[0], args[1]);\r\n              textState.textMatrix = textState.textLineMatrix.slice();\r\n              break;\r\n\r\n            case _util.OPS.nextLine:\r\n              flushTextContentItem();\r\n              textState.carriageReturn();\r\n              break;\r\n\r\n            case _util.OPS.setTextMatrix:\r\n              advance = textState.calcTextLineMatrixAdvance(args[0], args[1], args[2], args[3], args[4], args[5]);\r\n\r\n              if (combineTextItems && advance !== null && textContentItem.initialized && advance.value > 0 && advance.value <= textContentItem.fakeMultiSpaceMax) {\r\n                textState.translateTextLineMatrix(advance.width, advance.height);\r\n                textContentItem.width += advance.width - textContentItem.lastAdvanceWidth;\r\n                textContentItem.height += advance.height - textContentItem.lastAdvanceHeight;\r\n                diff = advance.width - textContentItem.lastAdvanceWidth - (advance.height - textContentItem.lastAdvanceHeight);\r\n                addFakeSpaces(diff, textContentItem.str);\r\n                break;\r\n              }\r\n\r\n              flushTextContentItem();\r\n              textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);\r\n              textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);\r\n              break;\r\n\r\n            case _util.OPS.setCharSpacing:\r\n              textState.charSpacing = args[0];\r\n              break;\r\n\r\n            case _util.OPS.setWordSpacing:\r\n              textState.wordSpacing = args[0];\r\n              break;\r\n\r\n            case _util.OPS.beginText:\r\n              flushTextContentItem();\r\n              textState.textMatrix = _util.IDENTITY_MATRIX.slice();\r\n              textState.textLineMatrix = _util.IDENTITY_MATRIX.slice();\r\n              break;\r\n\r\n            case _util.OPS.showSpacedText:\r\n              if (!stateManager.state.font) {\r\n                self.ensureStateFont(stateManager.state);\r\n                continue;\r\n              }\r\n\r\n              var items = args[0];\r\n              var offset;\r\n\r\n              for (var j = 0, jj = items.length; j < jj; j++) {\r\n                if (typeof items[j] === \"string\") {\r\n                  buildTextContentItem(items[j]);\r\n                } else if ((0, _util.isNum)(items[j])) {\r\n                  ensureTextContentItem();\r\n                  advance = items[j] * textState.fontSize / 1000;\r\n                  var breakTextRun = false;\r\n\r\n                  if (textState.font.vertical) {\r\n                    offset = advance;\r\n                    textState.translateTextMatrix(0, offset);\r\n                    breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax;\r\n\r\n                    if (!breakTextRun) {\r\n                      textContentItem.height += offset;\r\n                    }\r\n                  } else {\r\n                    advance = -advance;\r\n                    offset = advance * textState.textHScale;\r\n                    textState.translateTextMatrix(offset, 0);\r\n                    breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax;\r\n\r\n                    if (!breakTextRun) {\r\n                      textContentItem.width += offset;\r\n                    }\r\n                  }\r\n\r\n                  if (breakTextRun) {\r\n                    flushTextContentItem();\r\n                  } else if (advance > 0) {\r\n                    addFakeSpaces(advance, textContentItem.str);\r\n                  }\r\n                }\r\n              }\r\n\r\n              break;\r\n\r\n            case _util.OPS.showText:\r\n              if (!stateManager.state.font) {\r\n                self.ensureStateFont(stateManager.state);\r\n                continue;\r\n              }\r\n\r\n              buildTextContentItem(args[0]);\r\n              break;\r\n\r\n            case _util.OPS.nextLineShowText:\r\n              if (!stateManager.state.font) {\r\n                self.ensureStateFont(stateManager.state);\r\n                continue;\r\n              }\r\n\r\n              flushTextContentItem();\r\n              textState.carriageReturn();\r\n              buildTextContentItem(args[0]);\r\n              break;\r\n\r\n            case _util.OPS.nextLineSetSpacingShowText:\r\n              if (!stateManager.state.font) {\r\n                self.ensureStateFont(stateManager.state);\r\n                continue;\r\n              }\r\n\r\n              flushTextContentItem();\r\n              textState.wordSpacing = args[0];\r\n              textState.charSpacing = args[1];\r\n              textState.carriageReturn();\r\n              buildTextContentItem(args[2]);\r\n              break;\r\n\r\n            case _util.OPS.paintXObject:\r\n              flushTextContentItem();\r\n\r\n              if (!xobjs) {\r\n                xobjs = resources.get(\"XObject\") || _primitives.Dict.empty;\r\n              }\r\n\r\n              var name = args[0].name;\r\n\r\n              if (name && emptyXObjectCache.getByName(name)) {\r\n                break;\r\n              }\r\n\r\n              next(new Promise(function (resolveXObject, rejectXObject) {\r\n                if (!name) {\r\n                  throw new _util.FormatError(\"XObject must be referred to by name.\");\r\n                }\r\n\r\n                var xobj = xobjs.getRaw(name);\r\n\r\n                if (xobj instanceof _primitives.Ref) {\r\n                  if (emptyXObjectCache.getByRef(xobj)) {\r\n                    resolveXObject();\r\n                    return;\r\n                  }\r\n\r\n                  var globalImage = self.globalImageCache.getData(xobj, self.pageIndex);\r\n\r\n                  if (globalImage) {\r\n                    resolveXObject();\r\n                    return;\r\n                  }\r\n\r\n                  xobj = xref.fetch(xobj);\r\n                }\r\n\r\n                if (!(0, _primitives.isStream)(xobj)) {\r\n                  throw new _util.FormatError(\"XObject should be a stream\");\r\n                }\r\n\r\n                var type = xobj.dict.get(\"Subtype\");\r\n\r\n                if (!(0, _primitives.isName)(type)) {\r\n                  throw new _util.FormatError(\"XObject should have a Name subtype\");\r\n                }\r\n\r\n                if (type.name !== \"Form\") {\r\n                  emptyXObjectCache.set(name, xobj.dict.objId, true);\r\n                  resolveXObject();\r\n                  return;\r\n                }\r\n\r\n                var currentState = stateManager.state.clone();\r\n                var xObjStateManager = new StateManager(currentState);\r\n                var matrix = xobj.dict.getArray(\"Matrix\");\r\n\r\n                if (Array.isArray(matrix) && matrix.length === 6) {\r\n                  xObjStateManager.transform(matrix);\r\n                }\r\n\r\n                enqueueChunk();\r\n                var sinkWrapper = {\r\n                  enqueueInvoked: false,\r\n                  enqueue: function enqueue(chunk, size) {\r\n                    this.enqueueInvoked = true;\r\n                    sink.enqueue(chunk, size);\r\n                  },\r\n\r\n                  get desiredSize() {\r\n                    return sink.desiredSize;\r\n                  },\r\n\r\n                  get ready() {\r\n                    return sink.ready;\r\n                  }\r\n\r\n                };\r\n                self.getTextContent({\r\n                  stream: xobj,\r\n                  task: task,\r\n                  resources: xobj.dict.get(\"Resources\") || resources,\r\n                  stateManager: xObjStateManager,\r\n                  normalizeWhitespace: normalizeWhitespace,\r\n                  combineTextItems: combineTextItems,\r\n                  sink: sinkWrapper,\r\n                  seenStyles: seenStyles\r\n                }).then(function () {\r\n                  if (!sinkWrapper.enqueueInvoked) {\r\n                    emptyXObjectCache.set(name, xobj.dict.objId, true);\r\n                  }\r\n\r\n                  resolveXObject();\r\n                }, rejectXObject);\r\n              })[\"catch\"](function (reason) {\r\n                if (reason instanceof _util.AbortException) {\r\n                  return;\r\n                }\r\n\r\n                if (self.options.ignoreErrors) {\r\n                  (0, _util.warn)(\"getTextContent - ignoring XObject: \\\"\".concat(reason, \"\\\".\"));\r\n                  return;\r\n                }\r\n\r\n                throw reason;\r\n              }));\r\n              return;\r\n\r\n            case _util.OPS.setGState:\r\n              name = args[0].name;\r\n\r\n              if (name && emptyGStateCache.getByName(name)) {\r\n                break;\r\n              }\r\n\r\n              next(new Promise(function (resolveGState, rejectGState) {\r\n                if (!name) {\r\n                  throw new _util.FormatError(\"GState must be referred to by name.\");\r\n                }\r\n\r\n                var extGState = resources.get(\"ExtGState\");\r\n\r\n                if (!(extGState instanceof _primitives.Dict)) {\r\n                  throw new _util.FormatError(\"ExtGState should be a dictionary.\");\r\n                }\r\n\r\n                var gState = extGState.get(name);\r\n\r\n                if (!(gState instanceof _primitives.Dict)) {\r\n                  throw new _util.FormatError(\"GState should be a dictionary.\");\r\n                }\r\n\r\n                var gStateFont = gState.get(\"Font\");\r\n\r\n                if (!gStateFont) {\r\n                  emptyGStateCache.set(name, gState.objId, true);\r\n                  resolveGState();\r\n                  return;\r\n                }\r\n\r\n                flushTextContentItem();\r\n                textState.fontName = null;\r\n                textState.fontSize = gStateFont[1];\r\n                handleSetFont(null, gStateFont[0]).then(resolveGState, rejectGState);\r\n              })[\"catch\"](function (reason) {\r\n                if (reason instanceof _util.AbortException) {\r\n                  return;\r\n                }\r\n\r\n                if (self.options.ignoreErrors) {\r\n                  (0, _util.warn)(\"getTextContent - ignoring ExtGState: \\\"\".concat(reason, \"\\\".\"));\r\n                  return;\r\n                }\r\n\r\n                throw reason;\r\n              }));\r\n              return;\r\n          }\r\n\r\n          if (textContent.items.length >= sink.desiredSize) {\r\n            stop = true;\r\n            break;\r\n          }\r\n        }\r\n\r\n        if (stop) {\r\n          next(deferred);\r\n          return;\r\n        }\r\n\r\n        flushTextContentItem();\r\n        enqueueChunk();\r\n        resolve();\r\n      })[\"catch\"](function (reason) {\r\n        if (reason instanceof _util.AbortException) {\r\n          return;\r\n        }\r\n\r\n        if (_this8.options.ignoreErrors) {\r\n          (0, _util.warn)(\"getTextContent - ignoring errors during \\\"\".concat(task.name, \"\\\" \") + \"task: \\\"\".concat(reason, \"\\\".\"));\r\n          flushTextContentItem();\r\n          enqueueChunk();\r\n          return;\r\n        }\r\n\r\n        throw reason;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"extractDataStructures\",\r\n    value: function extractDataStructures(dict, baseDict, properties) {\r\n      var _this9 = this;\r\n\r\n      var xref = this.xref;\r\n      var cidToGidBytes;\r\n      var toUnicode = dict.get(\"ToUnicode\") || baseDict.get(\"ToUnicode\");\r\n      var toUnicodePromise = toUnicode ? this.readToUnicode(toUnicode) : Promise.resolve(undefined);\r\n\r\n      if (properties.composite) {\r\n        var cidSystemInfo = dict.get(\"CIDSystemInfo\");\r\n\r\n        if ((0, _primitives.isDict)(cidSystemInfo)) {\r\n          properties.cidSystemInfo = {\r\n            registry: (0, _util.stringToPDFString)(cidSystemInfo.get(\"Registry\")),\r\n            ordering: (0, _util.stringToPDFString)(cidSystemInfo.get(\"Ordering\")),\r\n            supplement: cidSystemInfo.get(\"Supplement\")\r\n          };\r\n        }\r\n\r\n        var cidToGidMap = dict.get(\"CIDToGIDMap\");\r\n\r\n        if ((0, _primitives.isStream)(cidToGidMap)) {\r\n          cidToGidBytes = cidToGidMap.getBytes();\r\n        }\r\n      }\r\n\r\n      var differences = [];\r\n      var baseEncodingName = null;\r\n      var encoding;\r\n\r\n      if (dict.has(\"Encoding\")) {\r\n        encoding = dict.get(\"Encoding\");\r\n\r\n        if ((0, _primitives.isDict)(encoding)) {\r\n          baseEncodingName = encoding.get(\"BaseEncoding\");\r\n          baseEncodingName = (0, _primitives.isName)(baseEncodingName) ? baseEncodingName.name : null;\r\n\r\n          if (encoding.has(\"Differences\")) {\r\n            var diffEncoding = encoding.get(\"Differences\");\r\n            var index = 0;\r\n\r\n            for (var j = 0, jj = diffEncoding.length; j < jj; j++) {\r\n              var data = xref.fetchIfRef(diffEncoding[j]);\r\n\r\n              if ((0, _util.isNum)(data)) {\r\n                index = data;\r\n              } else if ((0, _primitives.isName)(data)) {\r\n                differences[index++] = data.name;\r\n              } else {\r\n                throw new _util.FormatError(\"Invalid entry in 'Differences' array: \".concat(data));\r\n              }\r\n            }\r\n          }\r\n        } else if ((0, _primitives.isName)(encoding)) {\r\n          baseEncodingName = encoding.name;\r\n        } else {\r\n          throw new _util.FormatError(\"Encoding is not a Name nor a Dict\");\r\n        }\r\n\r\n        if (baseEncodingName !== \"MacRomanEncoding\" && baseEncodingName !== \"MacExpertEncoding\" && baseEncodingName !== \"WinAnsiEncoding\") {\r\n          baseEncodingName = null;\r\n        }\r\n      }\r\n\r\n      if (baseEncodingName) {\r\n        properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName).slice();\r\n      } else {\r\n        var isSymbolicFont = !!(properties.flags & _fonts.FontFlags.Symbolic);\r\n        var isNonsymbolicFont = !!(properties.flags & _fonts.FontFlags.Nonsymbolic);\r\n        encoding = _encodings.StandardEncoding;\r\n\r\n        if (properties.type === \"TrueType\" && !isNonsymbolicFont) {\r\n          encoding = _encodings.WinAnsiEncoding;\r\n        }\r\n\r\n        if (isSymbolicFont) {\r\n          encoding = _encodings.MacRomanEncoding;\r\n\r\n          if (!properties.file) {\r\n            if (/Symbol/i.test(properties.name)) {\r\n              encoding = _encodings.SymbolSetEncoding;\r\n            } else if (/Dingbats|Wingdings/i.test(properties.name)) {\r\n              encoding = _encodings.ZapfDingbatsEncoding;\r\n            }\r\n          }\r\n        }\r\n\r\n        properties.defaultEncoding = encoding;\r\n      }\r\n\r\n      properties.differences = differences;\r\n      properties.baseEncodingName = baseEncodingName;\r\n      properties.hasEncoding = !!baseEncodingName || differences.length > 0;\r\n      properties.dict = dict;\r\n      return toUnicodePromise.then(function (readToUnicode) {\r\n        properties.toUnicode = readToUnicode;\r\n        return _this9.buildToUnicode(properties);\r\n      }).then(function (builtToUnicode) {\r\n        properties.toUnicode = builtToUnicode;\r\n\r\n        if (cidToGidBytes) {\r\n          properties.cidToGidMap = _this9.readCidToGidMap(cidToGidBytes, builtToUnicode);\r\n        }\r\n\r\n        return properties;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_buildSimpleFontToUnicode\",\r\n    value: function _buildSimpleFontToUnicode(properties) {\r\n      var forceGlyphs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      (0, _util.assert)(!properties.composite, \"Must be a simple font.\");\r\n      var toUnicode = [];\r\n      var encoding = properties.defaultEncoding.slice();\r\n      var baseEncodingName = properties.baseEncodingName;\r\n      var differences = properties.differences;\r\n\r\n      for (var charcode in differences) {\r\n        var glyphName = differences[charcode];\r\n\r\n        if (glyphName === \".notdef\") {\r\n          continue;\r\n        }\r\n\r\n        encoding[charcode] = glyphName;\r\n      }\r\n\r\n      var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\r\n\r\n      for (var _charcode in encoding) {\r\n        var _glyphName = encoding[_charcode];\r\n\r\n        if (_glyphName === \"\") {\r\n          continue;\r\n        } else if (glyphsUnicodeMap[_glyphName] === undefined) {\r\n          var code = 0;\r\n\r\n          switch (_glyphName[0]) {\r\n            case \"G\":\r\n              if (_glyphName.length === 3) {\r\n                code = parseInt(_glyphName.substring(1), 16);\r\n              }\r\n\r\n              break;\r\n\r\n            case \"g\":\r\n              if (_glyphName.length === 5) {\r\n                code = parseInt(_glyphName.substring(1), 16);\r\n              }\r\n\r\n              break;\r\n\r\n            case \"C\":\r\n            case \"c\":\r\n              if (_glyphName.length >= 3 && _glyphName.length <= 4) {\r\n                var codeStr = _glyphName.substring(1);\r\n\r\n                if (forceGlyphs) {\r\n                  code = parseInt(codeStr, 16);\r\n                  break;\r\n                }\r\n\r\n                code = +codeStr;\r\n\r\n                if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) {\r\n                  return this._buildSimpleFontToUnicode(properties, true);\r\n                }\r\n              }\r\n\r\n              break;\r\n\r\n            default:\r\n              var unicode = (0, _unicode.getUnicodeForGlyph)(_glyphName, glyphsUnicodeMap);\r\n\r\n              if (unicode !== -1) {\r\n                code = unicode;\r\n              }\r\n\r\n          }\r\n\r\n          if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) {\r\n            if (baseEncodingName && code === +_charcode) {\r\n              var baseEncoding = (0, _encodings.getEncoding)(baseEncodingName);\r\n\r\n              if (baseEncoding && (_glyphName = baseEncoding[_charcode])) {\r\n                toUnicode[_charcode] = String.fromCharCode(glyphsUnicodeMap[_glyphName]);\r\n                continue;\r\n              }\r\n            }\r\n\r\n            toUnicode[_charcode] = String.fromCodePoint(code);\r\n          }\r\n\r\n          continue;\r\n        }\r\n\r\n        toUnicode[_charcode] = String.fromCharCode(glyphsUnicodeMap[_glyphName]);\r\n      }\r\n\r\n      return new _fonts.ToUnicodeMap(toUnicode);\r\n    }\r\n  }, {\r\n    key: \"buildToUnicode\",\r\n    value: function buildToUnicode(properties) {\r\n      properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0;\r\n\r\n      if (properties.hasIncludedToUnicodeMap) {\r\n        if (!properties.composite && properties.hasEncoding) {\r\n          properties.fallbackToUnicode = this._buildSimpleFontToUnicode(properties);\r\n        }\r\n\r\n        return Promise.resolve(properties.toUnicode);\r\n      }\r\n\r\n      if (!properties.composite) {\r\n        return Promise.resolve(this._buildSimpleFontToUnicode(properties));\r\n      }\r\n\r\n      if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === \"Adobe\" && (properties.cidSystemInfo.ordering === \"GB1\" || properties.cidSystemInfo.ordering === \"CNS1\" || properties.cidSystemInfo.ordering === \"Japan1\" || properties.cidSystemInfo.ordering === \"Korea1\"))) {\r\n        var registry = properties.cidSystemInfo.registry;\r\n        var ordering = properties.cidSystemInfo.ordering;\r\n\r\n        var ucs2CMapName = _primitives.Name.get(registry + \"-\" + ordering + \"-UCS2\");\r\n\r\n        return _cmap.CMapFactory.create({\r\n          encoding: ucs2CMapName,\r\n          fetchBuiltInCMap: this._fetchBuiltInCMapBound,\r\n          useCMap: null\r\n        }).then(function (ucs2CMap) {\r\n          var cMap = properties.cMap;\r\n          var toUnicode = [];\r\n          cMap.forEach(function (charcode, cid) {\r\n            if (cid > 0xffff) {\r\n              throw new _util.FormatError(\"Max size of CID is 65,535\");\r\n            }\r\n\r\n            var ucs2 = ucs2CMap.lookup(cid);\r\n\r\n            if (ucs2) {\r\n              toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1));\r\n            }\r\n          });\r\n          return new _fonts.ToUnicodeMap(toUnicode);\r\n        });\r\n      }\r\n\r\n      return Promise.resolve(new _fonts.IdentityToUnicodeMap(properties.firstChar, properties.lastChar));\r\n    }\r\n  }, {\r\n    key: \"readToUnicode\",\r\n    value: function readToUnicode(toUnicode) {\r\n      var _this10 = this;\r\n\r\n      var cmapObj = toUnicode;\r\n\r\n      if ((0, _primitives.isName)(cmapObj)) {\r\n        return _cmap.CMapFactory.create({\r\n          encoding: cmapObj,\r\n          fetchBuiltInCMap: this._fetchBuiltInCMapBound,\r\n          useCMap: null\r\n        }).then(function (cmap) {\r\n          if (cmap instanceof _cmap.IdentityCMap) {\r\n            return new _fonts.IdentityToUnicodeMap(0, 0xffff);\r\n          }\r\n\r\n          return new _fonts.ToUnicodeMap(cmap.getMap());\r\n        });\r\n      } else if ((0, _primitives.isStream)(cmapObj)) {\r\n        return _cmap.CMapFactory.create({\r\n          encoding: cmapObj,\r\n          fetchBuiltInCMap: this._fetchBuiltInCMapBound,\r\n          useCMap: null\r\n        }).then(function (cmap) {\r\n          if (cmap instanceof _cmap.IdentityCMap) {\r\n            return new _fonts.IdentityToUnicodeMap(0, 0xffff);\r\n          }\r\n\r\n          var map = new Array(cmap.length);\r\n          cmap.forEach(function (charCode, token) {\r\n            var str = [];\r\n\r\n            for (var k = 0; k < token.length; k += 2) {\r\n              var w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);\r\n\r\n              if ((w1 & 0xf800) !== 0xd800) {\r\n                str.push(w1);\r\n                continue;\r\n              }\r\n\r\n              k += 2;\r\n              var w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);\r\n              str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);\r\n            }\r\n\r\n            map[charCode] = String.fromCodePoint.apply(String, str);\r\n          });\r\n          return new _fonts.ToUnicodeMap(map);\r\n        }, function (reason) {\r\n          if (reason instanceof _util.AbortException) {\r\n            return null;\r\n          }\r\n\r\n          if (_this10.options.ignoreErrors) {\r\n            _this10.handler.send(\"UnsupportedFeature\", {\r\n              featureId: _util.UNSUPPORTED_FEATURES.errorFontToUnicode\r\n            });\r\n\r\n            (0, _util.warn)(\"readToUnicode - ignoring ToUnicode data: \\\"\".concat(reason, \"\\\".\"));\r\n            return null;\r\n          }\r\n\r\n          throw reason;\r\n        });\r\n      }\r\n\r\n      return Promise.resolve(null);\r\n    }\r\n  }, {\r\n    key: \"readCidToGidMap\",\r\n    value: function readCidToGidMap(glyphsData, toUnicode) {\r\n      var result = [];\r\n\r\n      for (var j = 0, jj = glyphsData.length; j < jj; j++) {\r\n        var glyphID = glyphsData[j++] << 8 | glyphsData[j];\r\n        var code = j >> 1;\r\n\r\n        if (glyphID === 0 && !toUnicode.has(code)) {\r\n          continue;\r\n        }\r\n\r\n        result[code] = glyphID;\r\n      }\r\n\r\n      return result;\r\n    }\r\n  }, {\r\n    key: \"extractWidths\",\r\n    value: function extractWidths(dict, descriptor, properties) {\r\n      var xref = this.xref;\r\n      var glyphsWidths = [];\r\n      var defaultWidth = 0;\r\n      var glyphsVMetrics = [];\r\n      var defaultVMetrics;\r\n      var i, ii, j, jj, start, code, widths;\r\n\r\n      if (properties.composite) {\r\n        defaultWidth = dict.has(\"DW\") ? dict.get(\"DW\") : 1000;\r\n        widths = dict.get(\"W\");\r\n\r\n        if (widths) {\r\n          for (i = 0, ii = widths.length; i < ii; i++) {\r\n            start = xref.fetchIfRef(widths[i++]);\r\n            code = xref.fetchIfRef(widths[i]);\r\n\r\n            if (Array.isArray(code)) {\r\n              for (j = 0, jj = code.length; j < jj; j++) {\r\n                glyphsWidths[start++] = xref.fetchIfRef(code[j]);\r\n              }\r\n            } else {\r\n              var width = xref.fetchIfRef(widths[++i]);\r\n\r\n              for (j = start; j <= code; j++) {\r\n                glyphsWidths[j] = width;\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        if (properties.vertical) {\r\n          var vmetrics = dict.getArray(\"DW2\") || [880, -1000];\r\n          defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]];\r\n          vmetrics = dict.get(\"W2\");\r\n\r\n          if (vmetrics) {\r\n            for (i = 0, ii = vmetrics.length; i < ii; i++) {\r\n              start = xref.fetchIfRef(vmetrics[i++]);\r\n              code = xref.fetchIfRef(vmetrics[i]);\r\n\r\n              if (Array.isArray(code)) {\r\n                for (j = 0, jj = code.length; j < jj; j++) {\r\n                  glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])];\r\n                }\r\n              } else {\r\n                var vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])];\r\n\r\n                for (j = start; j <= code; j++) {\r\n                  glyphsVMetrics[j] = vmetric;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        }\r\n      } else {\r\n        var firstChar = properties.firstChar;\r\n        widths = dict.get(\"Widths\");\r\n\r\n        if (widths) {\r\n          j = firstChar;\r\n\r\n          for (i = 0, ii = widths.length; i < ii; i++) {\r\n            glyphsWidths[j++] = xref.fetchIfRef(widths[i]);\r\n          }\r\n\r\n          defaultWidth = parseFloat(descriptor.get(\"MissingWidth\")) || 0;\r\n        } else {\r\n          var baseFontName = dict.get(\"BaseFont\");\r\n\r\n          if ((0, _primitives.isName)(baseFontName)) {\r\n            var metrics = this.getBaseFontMetrics(baseFontName.name);\r\n            glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties);\r\n            defaultWidth = metrics.defaultWidth;\r\n          }\r\n        }\r\n      }\r\n\r\n      var isMonospace = true;\r\n      var firstWidth = defaultWidth;\r\n\r\n      for (var glyph in glyphsWidths) {\r\n        var glyphWidth = glyphsWidths[glyph];\r\n\r\n        if (!glyphWidth) {\r\n          continue;\r\n        }\r\n\r\n        if (!firstWidth) {\r\n          firstWidth = glyphWidth;\r\n          continue;\r\n        }\r\n\r\n        if (firstWidth !== glyphWidth) {\r\n          isMonospace = false;\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (isMonospace) {\r\n        properties.flags |= _fonts.FontFlags.FixedPitch;\r\n      }\r\n\r\n      properties.defaultWidth = defaultWidth;\r\n      properties.widths = glyphsWidths;\r\n      properties.defaultVMetrics = defaultVMetrics;\r\n      properties.vmetrics = glyphsVMetrics;\r\n    }\r\n  }, {\r\n    key: \"isSerifFont\",\r\n    value: function isSerifFont(baseFontName) {\r\n      var fontNameWoStyle = baseFontName.split(\"-\")[0];\r\n      return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1;\r\n    }\r\n  }, {\r\n    key: \"getBaseFontMetrics\",\r\n    value: function getBaseFontMetrics(name) {\r\n      var defaultWidth = 0;\r\n      var widths = Object.create(null);\r\n      var monospace = false;\r\n      var stdFontMap = (0, _standard_fonts.getStdFontMap)();\r\n      var lookupName = stdFontMap[name] || name;\r\n      var Metrics = (0, _metrics.getMetrics)();\r\n\r\n      if (!(lookupName in Metrics)) {\r\n        if (this.isSerifFont(name)) {\r\n          lookupName = \"Times-Roman\";\r\n        } else {\r\n          lookupName = \"Helvetica\";\r\n        }\r\n      }\r\n\r\n      var glyphWidths = Metrics[lookupName];\r\n\r\n      if ((0, _util.isNum)(glyphWidths)) {\r\n        defaultWidth = glyphWidths;\r\n        monospace = true;\r\n      } else {\r\n        widths = glyphWidths();\r\n      }\r\n\r\n      return {\r\n        defaultWidth: defaultWidth,\r\n        monospace: monospace,\r\n        widths: widths\r\n      };\r\n    }\r\n  }, {\r\n    key: \"buildCharCodeToWidth\",\r\n    value: function buildCharCodeToWidth(widthsByGlyphName, properties) {\r\n      var widths = Object.create(null);\r\n      var differences = properties.differences;\r\n      var encoding = properties.defaultEncoding;\r\n\r\n      for (var charCode = 0; charCode < 256; charCode++) {\r\n        if (charCode in differences && widthsByGlyphName[differences[charCode]]) {\r\n          widths[charCode] = widthsByGlyphName[differences[charCode]];\r\n          continue;\r\n        }\r\n\r\n        if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) {\r\n          widths[charCode] = widthsByGlyphName[encoding[charCode]];\r\n          continue;\r\n        }\r\n      }\r\n\r\n      return widths;\r\n    }\r\n  }, {\r\n    key: \"preEvaluateFont\",\r\n    value: function preEvaluateFont(dict) {\r\n      var baseDict = dict;\r\n      var type = dict.get(\"Subtype\");\r\n\r\n      if (!(0, _primitives.isName)(type)) {\r\n        throw new _util.FormatError(\"invalid font Subtype\");\r\n      }\r\n\r\n      var composite = false;\r\n      var uint8array;\r\n\r\n      if (type.name === \"Type0\") {\r\n        var df = dict.get(\"DescendantFonts\");\r\n\r\n        if (!df) {\r\n          throw new _util.FormatError(\"Descendant fonts are not specified\");\r\n        }\r\n\r\n        dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df;\r\n\r\n        if (!(dict instanceof _primitives.Dict)) {\r\n          throw new _util.FormatError(\"Descendant font is not a dictionary.\");\r\n        }\r\n\r\n        type = dict.get(\"Subtype\");\r\n\r\n        if (!(0, _primitives.isName)(type)) {\r\n          throw new _util.FormatError(\"invalid font Subtype\");\r\n        }\r\n\r\n        composite = true;\r\n      }\r\n\r\n      var descriptor = dict.get(\"FontDescriptor\");\r\n\r\n      if (descriptor) {\r\n        var hash = new _murmurhash.MurmurHash3_64();\r\n        var encoding = baseDict.getRaw(\"Encoding\");\r\n\r\n        if ((0, _primitives.isName)(encoding)) {\r\n          hash.update(encoding.name);\r\n        } else if ((0, _primitives.isRef)(encoding)) {\r\n          hash.update(encoding.toString());\r\n        } else if ((0, _primitives.isDict)(encoding)) {\r\n          var _iterator5 = _createForOfIteratorHelper(encoding.getRawValues()),\r\n              _step5;\r\n\r\n          try {\r\n            for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\r\n              var entry = _step5.value;\r\n\r\n              if ((0, _primitives.isName)(entry)) {\r\n                hash.update(entry.name);\r\n              } else if ((0, _primitives.isRef)(entry)) {\r\n                hash.update(entry.toString());\r\n              } else if (Array.isArray(entry)) {\r\n                var diffLength = entry.length,\r\n                    diffBuf = new Array(diffLength);\r\n\r\n                for (var j = 0; j < diffLength; j++) {\r\n                  var diffEntry = entry[j];\r\n\r\n                  if ((0, _primitives.isName)(diffEntry)) {\r\n                    diffBuf[j] = diffEntry.name;\r\n                  } else if ((0, _util.isNum)(diffEntry) || (0, _primitives.isRef)(diffEntry)) {\r\n                    diffBuf[j] = diffEntry.toString();\r\n                  }\r\n                }\r\n\r\n                hash.update(diffBuf.join());\r\n              }\r\n            }\r\n          } catch (err) {\r\n            _iterator5.e(err);\r\n          } finally {\r\n            _iterator5.f();\r\n          }\r\n        }\r\n\r\n        var firstChar = dict.get(\"FirstChar\") || 0;\r\n        var lastChar = dict.get(\"LastChar\") || (composite ? 0xffff : 0xff);\r\n        hash.update(\"\".concat(firstChar, \"-\").concat(lastChar));\r\n        var toUnicode = dict.get(\"ToUnicode\") || baseDict.get(\"ToUnicode\");\r\n\r\n        if ((0, _primitives.isStream)(toUnicode)) {\r\n          var stream = toUnicode.str || toUnicode;\r\n          uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start);\r\n          hash.update(uint8array);\r\n        } else if ((0, _primitives.isName)(toUnicode)) {\r\n          hash.update(toUnicode.name);\r\n        }\r\n\r\n        var widths = dict.get(\"Widths\") || baseDict.get(\"Widths\");\r\n\r\n        if (widths) {\r\n          uint8array = new Uint8Array(new Uint32Array(widths).buffer);\r\n          hash.update(uint8array);\r\n        }\r\n      }\r\n\r\n      return {\r\n        descriptor: descriptor,\r\n        dict: dict,\r\n        baseDict: baseDict,\r\n        composite: composite,\r\n        type: type.name,\r\n        hash: hash ? hash.hexdigest() : \"\"\r\n      };\r\n    }\r\n  }, {\r\n    key: \"translateFont\",\r\n    value: function () {\r\n      var _translateFont = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee7(preEvaluatedFont) {\r\n        var _this11 = this;\r\n\r\n        var baseDict, dict, composite, descriptor, type, maxCharIndex, properties, firstChar, lastChar, baseFontName, metrics, fontNameWoStyle, flags, widths, fontName, baseFont, fontNameStr, baseFontStr, fontFile, subtype, length1, length2, length3, cidEncoding, cMap;\r\n        return _regenerator[\"default\"].wrap(function _callee7$(_context7) {\r\n          while (1) {\r\n            switch (_context7.prev = _context7.next) {\r\n              case 0:\r\n                baseDict = preEvaluatedFont.baseDict;\r\n                dict = preEvaluatedFont.dict;\r\n                composite = preEvaluatedFont.composite;\r\n                descriptor = preEvaluatedFont.descriptor;\r\n                type = preEvaluatedFont.type;\r\n                maxCharIndex = composite ? 0xffff : 0xff;\r\n                firstChar = dict.get(\"FirstChar\") || 0;\r\n                lastChar = dict.get(\"LastChar\") || maxCharIndex;\r\n\r\n                if (descriptor) {\r\n                  _context7.next = 25;\r\n                  break;\r\n                }\r\n\r\n                if (!(type === \"Type3\")) {\r\n                  _context7.next = 15;\r\n                  break;\r\n                }\r\n\r\n                descriptor = new _primitives.Dict(null);\r\n                descriptor.set(\"FontName\", _primitives.Name.get(type));\r\n                descriptor.set(\"FontBBox\", dict.getArray(\"FontBBox\") || [0, 0, 0, 0]);\r\n                _context7.next = 25;\r\n                break;\r\n\r\n              case 15:\r\n                baseFontName = dict.get(\"BaseFont\");\r\n\r\n                if ((0, _primitives.isName)(baseFontName)) {\r\n                  _context7.next = 18;\r\n                  break;\r\n                }\r\n\r\n                throw new _util.FormatError(\"Base font is not specified\");\r\n\r\n              case 18:\r\n                baseFontName = baseFontName.name.replace(/[,_]/g, \"-\");\r\n                metrics = this.getBaseFontMetrics(baseFontName);\r\n                fontNameWoStyle = baseFontName.split(\"-\")[0];\r\n                flags = (this.isSerifFont(fontNameWoStyle) ? _fonts.FontFlags.Serif : 0) | (metrics.monospace ? _fonts.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts.FontFlags.Symbolic : _fonts.FontFlags.Nonsymbolic);\r\n                properties = {\r\n                  type: type,\r\n                  name: baseFontName,\r\n                  widths: metrics.widths,\r\n                  defaultWidth: metrics.defaultWidth,\r\n                  flags: flags,\r\n                  firstChar: firstChar,\r\n                  lastChar: lastChar\r\n                };\r\n                widths = dict.get(\"Widths\");\r\n                return _context7.abrupt(\"return\", this.extractDataStructures(dict, dict, properties).then(function (newProperties) {\r\n                  if (widths) {\r\n                    var glyphWidths = [];\r\n                    var j = firstChar;\r\n\r\n                    for (var _i = 0, ii = widths.length; _i < ii; _i++) {\r\n                      glyphWidths[j++] = _this11.xref.fetchIfRef(widths[_i]);\r\n                    }\r\n\r\n                    newProperties.widths = glyphWidths;\r\n                  } else {\r\n                    newProperties.widths = _this11.buildCharCodeToWidth(metrics.widths, newProperties);\r\n                  }\r\n\r\n                  return new _fonts.Font(baseFontName, null, newProperties);\r\n                }));\r\n\r\n              case 25:\r\n                fontName = descriptor.get(\"FontName\");\r\n                baseFont = dict.get(\"BaseFont\");\r\n\r\n                if ((0, _util.isString)(fontName)) {\r\n                  fontName = _primitives.Name.get(fontName);\r\n                }\r\n\r\n                if ((0, _util.isString)(baseFont)) {\r\n                  baseFont = _primitives.Name.get(baseFont);\r\n                }\r\n\r\n                if (type !== \"Type3\") {\r\n                  fontNameStr = fontName && fontName.name;\r\n                  baseFontStr = baseFont && baseFont.name;\r\n\r\n                  if (fontNameStr !== baseFontStr) {\r\n                    (0, _util.info)(\"The FontDescriptor's FontName is \\\"\".concat(fontNameStr, \"\\\" but \") + \"should be the same as the Font's BaseFont \\\"\".concat(baseFontStr, \"\\\".\"));\r\n\r\n                    if (fontNameStr && baseFontStr && baseFontStr.startsWith(fontNameStr)) {\r\n                      fontName = baseFont;\r\n                    }\r\n                  }\r\n                }\r\n\r\n                fontName = fontName || baseFont;\r\n\r\n                if ((0, _primitives.isName)(fontName)) {\r\n                  _context7.next = 33;\r\n                  break;\r\n                }\r\n\r\n                throw new _util.FormatError(\"invalid font name\");\r\n\r\n              case 33:\r\n                _context7.prev = 33;\r\n                fontFile = descriptor.get(\"FontFile\", \"FontFile2\", \"FontFile3\");\r\n                _context7.next = 43;\r\n                break;\r\n\r\n              case 37:\r\n                _context7.prev = 37;\r\n                _context7.t0 = _context7[\"catch\"](33);\r\n\r\n                if (this.options.ignoreErrors) {\r\n                  _context7.next = 41;\r\n                  break;\r\n                }\r\n\r\n                throw _context7.t0;\r\n\r\n              case 41:\r\n                (0, _util.warn)(\"translateFont - fetching \\\"\".concat(fontName.name, \"\\\" font file: \\\"\").concat(_context7.t0, \"\\\".\"));\r\n                fontFile = new _stream.NullStream();\r\n\r\n              case 43:\r\n                if (fontFile) {\r\n                  if (fontFile.dict) {\r\n                    subtype = fontFile.dict.get(\"Subtype\");\r\n\r\n                    if (subtype) {\r\n                      subtype = subtype.name;\r\n                    }\r\n\r\n                    length1 = fontFile.dict.get(\"Length1\");\r\n                    length2 = fontFile.dict.get(\"Length2\");\r\n                    length3 = fontFile.dict.get(\"Length3\");\r\n                  }\r\n                }\r\n\r\n                properties = {\r\n                  type: type,\r\n                  name: fontName.name,\r\n                  subtype: subtype,\r\n                  file: fontFile,\r\n                  length1: length1,\r\n                  length2: length2,\r\n                  length3: length3,\r\n                  loadedName: baseDict.loadedName,\r\n                  composite: composite,\r\n                  fixedPitch: false,\r\n                  fontMatrix: dict.getArray(\"FontMatrix\") || _util.FONT_IDENTITY_MATRIX,\r\n                  firstChar: firstChar || 0,\r\n                  lastChar: lastChar || maxCharIndex,\r\n                  bbox: descriptor.getArray(\"FontBBox\"),\r\n                  ascent: descriptor.get(\"Ascent\"),\r\n                  descent: descriptor.get(\"Descent\"),\r\n                  xHeight: descriptor.get(\"XHeight\"),\r\n                  capHeight: descriptor.get(\"CapHeight\"),\r\n                  flags: descriptor.get(\"Flags\"),\r\n                  italicAngle: descriptor.get(\"ItalicAngle\"),\r\n                  isType3Font: false\r\n                };\r\n\r\n                if (!composite) {\r\n                  _context7.next = 53;\r\n                  break;\r\n                }\r\n\r\n                cidEncoding = baseDict.get(\"Encoding\");\r\n\r\n                if ((0, _primitives.isName)(cidEncoding)) {\r\n                  properties.cidEncoding = cidEncoding.name;\r\n                }\r\n\r\n                _context7.next = 50;\r\n                return _cmap.CMapFactory.create({\r\n                  encoding: cidEncoding,\r\n                  fetchBuiltInCMap: this._fetchBuiltInCMapBound,\r\n                  useCMap: null\r\n                });\r\n\r\n              case 50:\r\n                cMap = _context7.sent;\r\n                properties.cMap = cMap;\r\n                properties.vertical = properties.cMap.vertical;\r\n\r\n              case 53:\r\n                return _context7.abrupt(\"return\", this.extractDataStructures(dict, baseDict, properties).then(function (newProperties) {\r\n                  _this11.extractWidths(dict, descriptor, newProperties);\r\n\r\n                  if (type === \"Type3\") {\r\n                    newProperties.isType3Font = true;\r\n                  }\r\n\r\n                  return new _fonts.Font(fontName.name, fontFile, newProperties);\r\n                }));\r\n\r\n              case 54:\r\n              case \"end\":\r\n                return _context7.stop();\r\n            }\r\n          }\r\n        }, _callee7, this, [[33, 37]]);\r\n      }));\r\n\r\n      function translateFont(_x13) {\r\n        return _translateFont.apply(this, arguments);\r\n      }\r\n\r\n      return translateFont;\r\n    }()\r\n  }], [{\r\n    key: \"buildFontPaths\",\r\n    value: function buildFontPaths(font, glyphs, handler) {\r\n      function buildPath(fontChar) {\r\n        if (font.renderer.hasBuiltPath(fontChar)) {\r\n          return;\r\n        }\r\n\r\n        handler.send(\"commonobj\", [\"\".concat(font.loadedName, \"_path_\").concat(fontChar), \"FontPath\", font.renderer.getPathJs(fontChar)]);\r\n      }\r\n\r\n      var _iterator6 = _createForOfIteratorHelper(glyphs),\r\n          _step6;\r\n\r\n      try {\r\n        for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\r\n          var glyph = _step6.value;\r\n          buildPath(glyph.fontChar);\r\n          var accent = glyph.accent;\r\n\r\n          if (accent && accent.fontChar) {\r\n            buildPath(accent.fontChar);\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator6.e(err);\r\n      } finally {\r\n        _iterator6.f();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"fallbackFontDict\",\r\n    get: function get() {\r\n      var dict = new _primitives.Dict();\r\n      dict.set(\"BaseFont\", _primitives.Name.get(\"PDFJS-FallbackFont\"));\r\n      dict.set(\"Type\", _primitives.Name.get(\"FallbackType\"));\r\n      dict.set(\"Subtype\", _primitives.Name.get(\"FallbackType\"));\r\n      dict.set(\"Encoding\", _primitives.Name.get(\"WinAnsiEncoding\"));\r\n      return (0, _util.shadow)(this, \"fallbackFontDict\", dict);\r\n    }\r\n  }]);\r\n\r\n  return PartialEvaluator;\r\n}();\r\n\r\nexports.PartialEvaluator = PartialEvaluator;\r\n\r\nvar TranslatedFont = /*#__PURE__*/function () {\r\n  function TranslatedFont(_ref9) {\r\n    var loadedName = _ref9.loadedName,\r\n        font = _ref9.font,\r\n        dict = _ref9.dict,\r\n        _ref9$extraProperties = _ref9.extraProperties,\r\n        extraProperties = _ref9$extraProperties === void 0 ? false : _ref9$extraProperties;\r\n\r\n    _classCallCheck(this, TranslatedFont);\r\n\r\n    this.loadedName = loadedName;\r\n    this.font = font;\r\n    this.dict = dict;\r\n    this._extraProperties = extraProperties;\r\n    this.type3Loaded = null;\r\n    this.type3Dependencies = font.isType3Font ? new Set() : null;\r\n    this.sent = false;\r\n  }\r\n\r\n  _createClass(TranslatedFont, [{\r\n    key: \"send\",\r\n    value: function send(handler) {\r\n      if (this.sent) {\r\n        return;\r\n      }\r\n\r\n      this.sent = true;\r\n      handler.send(\"commonobj\", [this.loadedName, \"Font\", this.font.exportData(this._extraProperties)]);\r\n    }\r\n  }, {\r\n    key: \"fallback\",\r\n    value: function fallback(handler) {\r\n      if (!this.font.data) {\r\n        return;\r\n      }\r\n\r\n      this.font.disableFontFace = true;\r\n      var glyphs = this.font.glyphCacheValues;\r\n      PartialEvaluator.buildFontPaths(this.font, glyphs, handler);\r\n    }\r\n  }, {\r\n    key: \"loadType3Data\",\r\n    value: function loadType3Data(evaluator, resources, task) {\r\n      var _this12 = this;\r\n\r\n      if (this.type3Loaded) {\r\n        return this.type3Loaded;\r\n      }\r\n\r\n      if (!this.font.isType3Font) {\r\n        throw new Error(\"Must be a Type3 font.\");\r\n      }\r\n\r\n      var type3Options = Object.create(evaluator.options);\r\n      type3Options.ignoreErrors = false;\r\n      var type3Evaluator = evaluator.clone(type3Options);\r\n      type3Evaluator.parsingType3Font = true;\r\n      var translatedFont = this.font,\r\n          type3Dependencies = this.type3Dependencies;\r\n      var loadCharProcsPromise = Promise.resolve();\r\n      var charProcs = this.dict.get(\"CharProcs\");\r\n      var fontResources = this.dict.get(\"Resources\") || resources;\r\n      var charProcOperatorList = Object.create(null);\r\n\r\n      var _iterator7 = _createForOfIteratorHelper(charProcs.getKeys()),\r\n          _step7;\r\n\r\n      try {\r\n        var _loop2 = function _loop2() {\r\n          var key = _step7.value;\r\n          loadCharProcsPromise = loadCharProcsPromise.then(function () {\r\n            var glyphStream = charProcs.get(key);\r\n            var operatorList = new _operator_list.OperatorList();\r\n            return type3Evaluator.getOperatorList({\r\n              stream: glyphStream,\r\n              task: task,\r\n              resources: fontResources,\r\n              operatorList: operatorList\r\n            }).then(function () {\r\n              if (operatorList.fnArray[0] === _util.OPS.setCharWidthAndBounds) {\r\n                _this12._removeType3ColorOperators(operatorList);\r\n              }\r\n\r\n              charProcOperatorList[key] = operatorList.getIR();\r\n\r\n              var _iterator8 = _createForOfIteratorHelper(operatorList.dependencies),\r\n                  _step8;\r\n\r\n              try {\r\n                for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\r\n                  var dependency = _step8.value;\r\n                  type3Dependencies.add(dependency);\r\n                }\r\n              } catch (err) {\r\n                _iterator8.e(err);\r\n              } finally {\r\n                _iterator8.f();\r\n              }\r\n            })[\"catch\"](function (reason) {\r\n              (0, _util.warn)(\"Type3 font resource \\\"\".concat(key, \"\\\" is not available.\"));\r\n              var dummyOperatorList = new _operator_list.OperatorList();\r\n              charProcOperatorList[key] = dummyOperatorList.getIR();\r\n            });\r\n          });\r\n        };\r\n\r\n        for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\r\n          _loop2();\r\n        }\r\n      } catch (err) {\r\n        _iterator7.e(err);\r\n      } finally {\r\n        _iterator7.f();\r\n      }\r\n\r\n      this.type3Loaded = loadCharProcsPromise.then(function () {\r\n        translatedFont.charProcOperatorList = charProcOperatorList;\r\n      });\r\n      return this.type3Loaded;\r\n    }\r\n  }, {\r\n    key: \"_removeType3ColorOperators\",\r\n    value: function _removeType3ColorOperators(operatorList) {\r\n      var i = 1,\r\n          ii = operatorList.length;\r\n\r\n      while (i < ii) {\r\n        switch (operatorList.fnArray[i]) {\r\n          case _util.OPS.setStrokeColorSpace:\r\n          case _util.OPS.setFillColorSpace:\r\n          case _util.OPS.setStrokeColor:\r\n          case _util.OPS.setStrokeColorN:\r\n          case _util.OPS.setFillColor:\r\n          case _util.OPS.setFillColorN:\r\n          case _util.OPS.setStrokeGray:\r\n          case _util.OPS.setFillGray:\r\n          case _util.OPS.setStrokeRGBColor:\r\n          case _util.OPS.setFillRGBColor:\r\n          case _util.OPS.setStrokeCMYKColor:\r\n          case _util.OPS.setFillCMYKColor:\r\n          case _util.OPS.shadingFill:\r\n          case _util.OPS.setRenderingIntent:\r\n            operatorList.fnArray.splice(i, 1);\r\n            operatorList.argsArray.splice(i, 1);\r\n            ii--;\r\n            continue;\r\n\r\n          case _util.OPS.setGState:\r\n            var _operatorList$argsArr = _slicedToArray(operatorList.argsArray[i], 1),\r\n                _gStateObj = _operatorList$argsArr[0];\r\n\r\n            var j = 0,\r\n                jj = _gStateObj.length;\r\n\r\n            while (j < jj) {\r\n              var _gStateObj$j = _slicedToArray(_gStateObj[j], 1),\r\n                  gStateKey = _gStateObj$j[0];\r\n\r\n              switch (gStateKey) {\r\n                case \"TR\":\r\n                case \"TR2\":\r\n                case \"HT\":\r\n                case \"BG\":\r\n                case \"BG2\":\r\n                case \"UCR\":\r\n                case \"UCR2\":\r\n                  _gStateObj.splice(j, 1);\r\n\r\n                  jj--;\r\n                  continue;\r\n              }\r\n\r\n              j++;\r\n            }\r\n\r\n            break;\r\n        }\r\n\r\n        i++;\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return TranslatedFont;\r\n}();\r\n\r\nvar StateManager = /*#__PURE__*/function () {\r\n  function StateManager() {\r\n    var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new EvalState();\r\n\r\n    _classCallCheck(this, StateManager);\r\n\r\n    this.state = initialState;\r\n    this.stateStack = [];\r\n  }\r\n\r\n  _createClass(StateManager, [{\r\n    key: \"save\",\r\n    value: function save() {\r\n      var old = this.state;\r\n      this.stateStack.push(this.state);\r\n      this.state = old.clone();\r\n    }\r\n  }, {\r\n    key: \"restore\",\r\n    value: function restore() {\r\n      var prev = this.stateStack.pop();\r\n\r\n      if (prev) {\r\n        this.state = prev;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"transform\",\r\n    value: function transform(args) {\r\n      this.state.ctm = _util.Util.transform(this.state.ctm, args);\r\n    }\r\n  }]);\r\n\r\n  return StateManager;\r\n}();\r\n\r\nvar TextState = /*#__PURE__*/function () {\r\n  function TextState() {\r\n    _classCallCheck(this, TextState);\r\n\r\n    this.ctm = new Float32Array(_util.IDENTITY_MATRIX);\r\n    this.fontName = null;\r\n    this.fontSize = 0;\r\n    this.font = null;\r\n    this.fontMatrix = _util.FONT_IDENTITY_MATRIX;\r\n    this.textMatrix = _util.IDENTITY_MATRIX.slice();\r\n    this.textLineMatrix = _util.IDENTITY_MATRIX.slice();\r\n    this.charSpacing = 0;\r\n    this.wordSpacing = 0;\r\n    this.leading = 0;\r\n    this.textHScale = 1;\r\n    this.textRise = 0;\r\n  }\r\n\r\n  _createClass(TextState, [{\r\n    key: \"setTextMatrix\",\r\n    value: function setTextMatrix(a, b, c, d, e, f) {\r\n      var m = this.textMatrix;\r\n      m[0] = a;\r\n      m[1] = b;\r\n      m[2] = c;\r\n      m[3] = d;\r\n      m[4] = e;\r\n      m[5] = f;\r\n    }\r\n  }, {\r\n    key: \"setTextLineMatrix\",\r\n    value: function setTextLineMatrix(a, b, c, d, e, f) {\r\n      var m = this.textLineMatrix;\r\n      m[0] = a;\r\n      m[1] = b;\r\n      m[2] = c;\r\n      m[3] = d;\r\n      m[4] = e;\r\n      m[5] = f;\r\n    }\r\n  }, {\r\n    key: \"translateTextMatrix\",\r\n    value: function translateTextMatrix(x, y) {\r\n      var m = this.textMatrix;\r\n      m[4] = m[0] * x + m[2] * y + m[4];\r\n      m[5] = m[1] * x + m[3] * y + m[5];\r\n    }\r\n  }, {\r\n    key: \"translateTextLineMatrix\",\r\n    value: function translateTextLineMatrix(x, y) {\r\n      var m = this.textLineMatrix;\r\n      m[4] = m[0] * x + m[2] * y + m[4];\r\n      m[5] = m[1] * x + m[3] * y + m[5];\r\n    }\r\n  }, {\r\n    key: \"calcTextLineMatrixAdvance\",\r\n    value: function calcTextLineMatrixAdvance(a, b, c, d, e, f) {\r\n      var font = this.font;\r\n\r\n      if (!font) {\r\n        return null;\r\n      }\r\n\r\n      var m = this.textLineMatrix;\r\n\r\n      if (!(a === m[0] && b === m[1] && c === m[2] && d === m[3])) {\r\n        return null;\r\n      }\r\n\r\n      var txDiff = e - m[4],\r\n          tyDiff = f - m[5];\r\n\r\n      if (font.vertical && txDiff !== 0 || !font.vertical && tyDiff !== 0) {\r\n        return null;\r\n      }\r\n\r\n      var tx,\r\n          ty,\r\n          denominator = a * d - b * c;\r\n\r\n      if (font.vertical) {\r\n        tx = -tyDiff * c / denominator;\r\n        ty = tyDiff * a / denominator;\r\n      } else {\r\n        tx = txDiff * d / denominator;\r\n        ty = -txDiff * b / denominator;\r\n      }\r\n\r\n      return {\r\n        width: tx,\r\n        height: ty,\r\n        value: font.vertical ? ty : tx\r\n      };\r\n    }\r\n  }, {\r\n    key: \"calcRenderMatrix\",\r\n    value: function calcRenderMatrix(ctm) {\r\n      var tsm = [this.fontSize * this.textHScale, 0, 0, this.fontSize, 0, this.textRise];\r\n      return _util.Util.transform(ctm, _util.Util.transform(this.textMatrix, tsm));\r\n    }\r\n  }, {\r\n    key: \"carriageReturn\",\r\n    value: function carriageReturn() {\r\n      this.translateTextLineMatrix(0, -this.leading);\r\n      this.textMatrix = this.textLineMatrix.slice();\r\n    }\r\n  }, {\r\n    key: \"clone\",\r\n    value: function clone() {\r\n      var clone = Object.create(this);\r\n      clone.textMatrix = this.textMatrix.slice();\r\n      clone.textLineMatrix = this.textLineMatrix.slice();\r\n      clone.fontMatrix = this.fontMatrix.slice();\r\n      return clone;\r\n    }\r\n  }]);\r\n\r\n  return TextState;\r\n}();\r\n\r\nvar EvalState = /*#__PURE__*/function () {\r\n  function EvalState() {\r\n    _classCallCheck(this, EvalState);\r\n\r\n    this.ctm = new Float32Array(_util.IDENTITY_MATRIX);\r\n    this.font = null;\r\n    this.textRenderingMode = _util.TextRenderingMode.FILL;\r\n    this.fillColorSpace = _colorspace.ColorSpace.singletons.gray;\r\n    this.strokeColorSpace = _colorspace.ColorSpace.singletons.gray;\r\n  }\r\n\r\n  _createClass(EvalState, [{\r\n    key: \"clone\",\r\n    value: function clone() {\r\n      return Object.create(this);\r\n    }\r\n  }]);\r\n\r\n  return EvalState;\r\n}();\r\n\r\nvar EvaluatorPreprocessor = /*#__PURE__*/function () {\r\n  function EvaluatorPreprocessor(stream, xref) {\r\n    var stateManager = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new StateManager();\r\n\r\n    _classCallCheck(this, EvaluatorPreprocessor);\r\n\r\n    this.parser = new _parser.Parser({\r\n      lexer: new _parser.Lexer(stream, EvaluatorPreprocessor.opMap),\r\n      xref: xref\r\n    });\r\n    this.stateManager = stateManager;\r\n    this.nonProcessedArgs = [];\r\n    this._numInvalidPathOPS = 0;\r\n  }\r\n\r\n  _createClass(EvaluatorPreprocessor, [{\r\n    key: \"savedStatesDepth\",\r\n    get: function get() {\r\n      return this.stateManager.stateStack.length;\r\n    }\r\n  }, {\r\n    key: \"read\",\r\n    value: function read(operation) {\r\n      var args = operation.args;\r\n\r\n      while (true) {\r\n        var obj = this.parser.getObj();\r\n\r\n        if (obj instanceof _primitives.Cmd) {\r\n          var cmd = obj.cmd;\r\n          var opSpec = EvaluatorPreprocessor.opMap[cmd];\r\n\r\n          if (!opSpec) {\r\n            (0, _util.warn)(\"Unknown command \\\"\".concat(cmd, \"\\\".\"));\r\n            continue;\r\n          }\r\n\r\n          var fn = opSpec.id;\r\n          var numArgs = opSpec.numArgs;\r\n          var argsLength = args !== null ? args.length : 0;\r\n\r\n          if (!opSpec.variableArgs) {\r\n            if (argsLength !== numArgs) {\r\n              var nonProcessedArgs = this.nonProcessedArgs;\r\n\r\n              while (argsLength > numArgs) {\r\n                nonProcessedArgs.push(args.shift());\r\n                argsLength--;\r\n              }\r\n\r\n              while (argsLength < numArgs && nonProcessedArgs.length !== 0) {\r\n                if (args === null) {\r\n                  args = [];\r\n                }\r\n\r\n                args.unshift(nonProcessedArgs.pop());\r\n                argsLength++;\r\n              }\r\n            }\r\n\r\n            if (argsLength < numArgs) {\r\n              var partialMsg = \"command \".concat(cmd, \": expected \").concat(numArgs, \" args, \") + \"but received \".concat(argsLength, \" args.\");\r\n\r\n              if (fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath && ++this._numInvalidPathOPS > EvaluatorPreprocessor.MAX_INVALID_PATH_OPS) {\r\n                throw new _util.FormatError(\"Invalid \".concat(partialMsg));\r\n              }\r\n\r\n              (0, _util.warn)(\"Skipping \".concat(partialMsg));\r\n\r\n              if (args !== null) {\r\n                args.length = 0;\r\n              }\r\n\r\n              continue;\r\n            }\r\n          } else if (argsLength > numArgs) {\r\n            (0, _util.info)(\"Command \".concat(cmd, \": expected [0, \").concat(numArgs, \"] args, \") + \"but received \".concat(argsLength, \" args.\"));\r\n          }\r\n\r\n          this.preprocessCommand(fn, args);\r\n          operation.fn = fn;\r\n          operation.args = args;\r\n          return true;\r\n        }\r\n\r\n        if (obj === _primitives.EOF) {\r\n          return false;\r\n        }\r\n\r\n        if (obj !== null) {\r\n          if (args === null) {\r\n            args = [];\r\n          }\r\n\r\n          args.push(obj);\r\n\r\n          if (args.length > 33) {\r\n            throw new _util.FormatError(\"Too many arguments\");\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"preprocessCommand\",\r\n    value: function preprocessCommand(fn, args) {\r\n      switch (fn | 0) {\r\n        case _util.OPS.save:\r\n          this.stateManager.save();\r\n          break;\r\n\r\n        case _util.OPS.restore:\r\n          this.stateManager.restore();\r\n          break;\r\n\r\n        case _util.OPS.transform:\r\n          this.stateManager.transform(args);\r\n          break;\r\n      }\r\n    }\r\n  }], [{\r\n    key: \"opMap\",\r\n    get: function get() {\r\n      var getOPMap = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n        t.w = {\r\n          id: _util.OPS.setLineWidth,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.J = {\r\n          id: _util.OPS.setLineCap,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.j = {\r\n          id: _util.OPS.setLineJoin,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.M = {\r\n          id: _util.OPS.setMiterLimit,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.d = {\r\n          id: _util.OPS.setDash,\r\n          numArgs: 2,\r\n          variableArgs: false\r\n        };\r\n        t.ri = {\r\n          id: _util.OPS.setRenderingIntent,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.i = {\r\n          id: _util.OPS.setFlatness,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.gs = {\r\n          id: _util.OPS.setGState,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.q = {\r\n          id: _util.OPS.save,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.Q = {\r\n          id: _util.OPS.restore,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.cm = {\r\n          id: _util.OPS.transform,\r\n          numArgs: 6,\r\n          variableArgs: false\r\n        };\r\n        t.m = {\r\n          id: _util.OPS.moveTo,\r\n          numArgs: 2,\r\n          variableArgs: false\r\n        };\r\n        t.l = {\r\n          id: _util.OPS.lineTo,\r\n          numArgs: 2,\r\n          variableArgs: false\r\n        };\r\n        t.c = {\r\n          id: _util.OPS.curveTo,\r\n          numArgs: 6,\r\n          variableArgs: false\r\n        };\r\n        t.v = {\r\n          id: _util.OPS.curveTo2,\r\n          numArgs: 4,\r\n          variableArgs: false\r\n        };\r\n        t.y = {\r\n          id: _util.OPS.curveTo3,\r\n          numArgs: 4,\r\n          variableArgs: false\r\n        };\r\n        t.h = {\r\n          id: _util.OPS.closePath,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.re = {\r\n          id: _util.OPS.rectangle,\r\n          numArgs: 4,\r\n          variableArgs: false\r\n        };\r\n        t.S = {\r\n          id: _util.OPS.stroke,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.s = {\r\n          id: _util.OPS.closeStroke,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.f = {\r\n          id: _util.OPS.fill,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.F = {\r\n          id: _util.OPS.fill,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t[\"f*\"] = {\r\n          id: _util.OPS.eoFill,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.B = {\r\n          id: _util.OPS.fillStroke,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t[\"B*\"] = {\r\n          id: _util.OPS.eoFillStroke,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.b = {\r\n          id: _util.OPS.closeFillStroke,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t[\"b*\"] = {\r\n          id: _util.OPS.closeEOFillStroke,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.n = {\r\n          id: _util.OPS.endPath,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.W = {\r\n          id: _util.OPS.clip,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t[\"W*\"] = {\r\n          id: _util.OPS.eoClip,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.BT = {\r\n          id: _util.OPS.beginText,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.ET = {\r\n          id: _util.OPS.endText,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.Tc = {\r\n          id: _util.OPS.setCharSpacing,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.Tw = {\r\n          id: _util.OPS.setWordSpacing,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.Tz = {\r\n          id: _util.OPS.setHScale,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.TL = {\r\n          id: _util.OPS.setLeading,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.Tf = {\r\n          id: _util.OPS.setFont,\r\n          numArgs: 2,\r\n          variableArgs: false\r\n        };\r\n        t.Tr = {\r\n          id: _util.OPS.setTextRenderingMode,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.Ts = {\r\n          id: _util.OPS.setTextRise,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.Td = {\r\n          id: _util.OPS.moveText,\r\n          numArgs: 2,\r\n          variableArgs: false\r\n        };\r\n        t.TD = {\r\n          id: _util.OPS.setLeadingMoveText,\r\n          numArgs: 2,\r\n          variableArgs: false\r\n        };\r\n        t.Tm = {\r\n          id: _util.OPS.setTextMatrix,\r\n          numArgs: 6,\r\n          variableArgs: false\r\n        };\r\n        t[\"T*\"] = {\r\n          id: _util.OPS.nextLine,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.Tj = {\r\n          id: _util.OPS.showText,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.TJ = {\r\n          id: _util.OPS.showSpacedText,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t[\"'\"] = {\r\n          id: _util.OPS.nextLineShowText,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t['\"'] = {\r\n          id: _util.OPS.nextLineSetSpacingShowText,\r\n          numArgs: 3,\r\n          variableArgs: false\r\n        };\r\n        t.d0 = {\r\n          id: _util.OPS.setCharWidth,\r\n          numArgs: 2,\r\n          variableArgs: false\r\n        };\r\n        t.d1 = {\r\n          id: _util.OPS.setCharWidthAndBounds,\r\n          numArgs: 6,\r\n          variableArgs: false\r\n        };\r\n        t.CS = {\r\n          id: _util.OPS.setStrokeColorSpace,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.cs = {\r\n          id: _util.OPS.setFillColorSpace,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.SC = {\r\n          id: _util.OPS.setStrokeColor,\r\n          numArgs: 4,\r\n          variableArgs: true\r\n        };\r\n        t.SCN = {\r\n          id: _util.OPS.setStrokeColorN,\r\n          numArgs: 33,\r\n          variableArgs: true\r\n        };\r\n        t.sc = {\r\n          id: _util.OPS.setFillColor,\r\n          numArgs: 4,\r\n          variableArgs: true\r\n        };\r\n        t.scn = {\r\n          id: _util.OPS.setFillColorN,\r\n          numArgs: 33,\r\n          variableArgs: true\r\n        };\r\n        t.G = {\r\n          id: _util.OPS.setStrokeGray,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.g = {\r\n          id: _util.OPS.setFillGray,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.RG = {\r\n          id: _util.OPS.setStrokeRGBColor,\r\n          numArgs: 3,\r\n          variableArgs: false\r\n        };\r\n        t.rg = {\r\n          id: _util.OPS.setFillRGBColor,\r\n          numArgs: 3,\r\n          variableArgs: false\r\n        };\r\n        t.K = {\r\n          id: _util.OPS.setStrokeCMYKColor,\r\n          numArgs: 4,\r\n          variableArgs: false\r\n        };\r\n        t.k = {\r\n          id: _util.OPS.setFillCMYKColor,\r\n          numArgs: 4,\r\n          variableArgs: false\r\n        };\r\n        t.sh = {\r\n          id: _util.OPS.shadingFill,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.BI = {\r\n          id: _util.OPS.beginInlineImage,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.ID = {\r\n          id: _util.OPS.beginImageData,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.EI = {\r\n          id: _util.OPS.endInlineImage,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.Do = {\r\n          id: _util.OPS.paintXObject,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.MP = {\r\n          id: _util.OPS.markPoint,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.DP = {\r\n          id: _util.OPS.markPointProps,\r\n          numArgs: 2,\r\n          variableArgs: false\r\n        };\r\n        t.BMC = {\r\n          id: _util.OPS.beginMarkedContent,\r\n          numArgs: 1,\r\n          variableArgs: false\r\n        };\r\n        t.BDC = {\r\n          id: _util.OPS.beginMarkedContentProps,\r\n          numArgs: 2,\r\n          variableArgs: false\r\n        };\r\n        t.EMC = {\r\n          id: _util.OPS.endMarkedContent,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.BX = {\r\n          id: _util.OPS.beginCompat,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.EX = {\r\n          id: _util.OPS.endCompat,\r\n          numArgs: 0,\r\n          variableArgs: false\r\n        };\r\n        t.BM = null;\r\n        t.BD = null;\r\n        t[\"true\"] = null;\r\n        t.fa = null;\r\n        t.fal = null;\r\n        t.fals = null;\r\n        t[\"false\"] = null;\r\n        t.nu = null;\r\n        t.nul = null;\r\n        t[\"null\"] = null;\r\n      });\r\n      return (0, _util.shadow)(this, \"opMap\", getOPMap());\r\n    }\r\n  }, {\r\n    key: \"MAX_INVALID_PATH_OPS\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"MAX_INVALID_PATH_OPS\", 20);\r\n    }\r\n  }]);\r\n\r\n  return EvaluatorPreprocessor;\r\n}();\r\n\r\nexports.EvaluatorPreprocessor = EvaluatorPreprocessor;\r\n\r\n/***/ }),\r\n/* 158 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.IdentityCMap = exports.CMapFactory = exports.CMap = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _parser = __w_pdfjs_require__(141);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar BUILT_IN_CMAPS = [\"Adobe-GB1-UCS2\", \"Adobe-CNS1-UCS2\", \"Adobe-Japan1-UCS2\", \"Adobe-Korea1-UCS2\", \"78-EUC-H\", \"78-EUC-V\", \"78-H\", \"78-RKSJ-H\", \"78-RKSJ-V\", \"78-V\", \"78ms-RKSJ-H\", \"78ms-RKSJ-V\", \"83pv-RKSJ-H\", \"90ms-RKSJ-H\", \"90ms-RKSJ-V\", \"90msp-RKSJ-H\", \"90msp-RKSJ-V\", \"90pv-RKSJ-H\", \"90pv-RKSJ-V\", \"Add-H\", \"Add-RKSJ-H\", \"Add-RKSJ-V\", \"Add-V\", \"Adobe-CNS1-0\", \"Adobe-CNS1-1\", \"Adobe-CNS1-2\", \"Adobe-CNS1-3\", \"Adobe-CNS1-4\", \"Adobe-CNS1-5\", \"Adobe-CNS1-6\", \"Adobe-GB1-0\", \"Adobe-GB1-1\", \"Adobe-GB1-2\", \"Adobe-GB1-3\", \"Adobe-GB1-4\", \"Adobe-GB1-5\", \"Adobe-Japan1-0\", \"Adobe-Japan1-1\", \"Adobe-Japan1-2\", \"Adobe-Japan1-3\", \"Adobe-Japan1-4\", \"Adobe-Japan1-5\", \"Adobe-Japan1-6\", \"Adobe-Korea1-0\", \"Adobe-Korea1-1\", \"Adobe-Korea1-2\", \"B5-H\", \"B5-V\", \"B5pc-H\", \"B5pc-V\", \"CNS-EUC-H\", \"CNS-EUC-V\", \"CNS1-H\", \"CNS1-V\", \"CNS2-H\", \"CNS2-V\", \"ETHK-B5-H\", \"ETHK-B5-V\", \"ETen-B5-H\", \"ETen-B5-V\", \"ETenms-B5-H\", \"ETenms-B5-V\", \"EUC-H\", \"EUC-V\", \"Ext-H\", \"Ext-RKSJ-H\", \"Ext-RKSJ-V\", \"Ext-V\", \"GB-EUC-H\", \"GB-EUC-V\", \"GB-H\", \"GB-V\", \"GBK-EUC-H\", \"GBK-EUC-V\", \"GBK2K-H\", \"GBK2K-V\", \"GBKp-EUC-H\", \"GBKp-EUC-V\", \"GBT-EUC-H\", \"GBT-EUC-V\", \"GBT-H\", \"GBT-V\", \"GBTpc-EUC-H\", \"GBTpc-EUC-V\", \"GBpc-EUC-H\", \"GBpc-EUC-V\", \"H\", \"HKdla-B5-H\", \"HKdla-B5-V\", \"HKdlb-B5-H\", \"HKdlb-B5-V\", \"HKgccs-B5-H\", \"HKgccs-B5-V\", \"HKm314-B5-H\", \"HKm314-B5-V\", \"HKm471-B5-H\", \"HKm471-B5-V\", \"HKscs-B5-H\", \"HKscs-B5-V\", \"Hankaku\", \"Hiragana\", \"KSC-EUC-H\", \"KSC-EUC-V\", \"KSC-H\", \"KSC-Johab-H\", \"KSC-Johab-V\", \"KSC-V\", \"KSCms-UHC-H\", \"KSCms-UHC-HW-H\", \"KSCms-UHC-HW-V\", \"KSCms-UHC-V\", \"KSCpc-EUC-H\", \"KSCpc-EUC-V\", \"Katakana\", \"NWP-H\", \"NWP-V\", \"RKSJ-H\", \"RKSJ-V\", \"Roman\", \"UniCNS-UCS2-H\", \"UniCNS-UCS2-V\", \"UniCNS-UTF16-H\", \"UniCNS-UTF16-V\", \"UniCNS-UTF32-H\", \"UniCNS-UTF32-V\", \"UniCNS-UTF8-H\", \"UniCNS-UTF8-V\", \"UniGB-UCS2-H\", \"UniGB-UCS2-V\", \"UniGB-UTF16-H\", \"UniGB-UTF16-V\", \"UniGB-UTF32-H\", \"UniGB-UTF32-V\", \"UniGB-UTF8-H\", \"UniGB-UTF8-V\", \"UniJIS-UCS2-H\", \"UniJIS-UCS2-HW-H\", \"UniJIS-UCS2-HW-V\", \"UniJIS-UCS2-V\", \"UniJIS-UTF16-H\", \"UniJIS-UTF16-V\", \"UniJIS-UTF32-H\", \"UniJIS-UTF32-V\", \"UniJIS-UTF8-H\", \"UniJIS-UTF8-V\", \"UniJIS2004-UTF16-H\", \"UniJIS2004-UTF16-V\", \"UniJIS2004-UTF32-H\", \"UniJIS2004-UTF32-V\", \"UniJIS2004-UTF8-H\", \"UniJIS2004-UTF8-V\", \"UniJISPro-UCS2-HW-V\", \"UniJISPro-UCS2-V\", \"UniJISPro-UTF8-V\", \"UniJISX0213-UTF32-H\", \"UniJISX0213-UTF32-V\", \"UniJISX02132004-UTF32-H\", \"UniJISX02132004-UTF32-V\", \"UniKS-UCS2-H\", \"UniKS-UCS2-V\", \"UniKS-UTF16-H\", \"UniKS-UTF16-V\", \"UniKS-UTF32-H\", \"UniKS-UTF32-V\", \"UniKS-UTF8-H\", \"UniKS-UTF8-V\", \"V\", \"WP-Symbol\"];\r\nvar MAX_MAP_RANGE = Math.pow(2, 24) - 1;\r\n\r\nvar CMap = /*#__PURE__*/function () {\r\n  function CMap() {\r\n    var builtInCMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n\r\n    _classCallCheck(this, CMap);\r\n\r\n    this.codespaceRanges = [[], [], [], []];\r\n    this.numCodespaceRanges = 0;\r\n    this._map = [];\r\n    this.name = \"\";\r\n    this.vertical = false;\r\n    this.useCMap = null;\r\n    this.builtInCMap = builtInCMap;\r\n  }\r\n\r\n  _createClass(CMap, [{\r\n    key: \"addCodespaceRange\",\r\n    value: function addCodespaceRange(n, low, high) {\r\n      this.codespaceRanges[n - 1].push(low, high);\r\n      this.numCodespaceRanges++;\r\n    }\r\n  }, {\r\n    key: \"mapCidRange\",\r\n    value: function mapCidRange(low, high, dstLow) {\r\n      if (high - low > MAX_MAP_RANGE) {\r\n        throw new Error(\"mapCidRange - ignoring data above MAX_MAP_RANGE.\");\r\n      }\r\n\r\n      while (low <= high) {\r\n        this._map[low++] = dstLow++;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"mapBfRange\",\r\n    value: function mapBfRange(low, high, dstLow) {\r\n      if (high - low > MAX_MAP_RANGE) {\r\n        throw new Error(\"mapBfRange - ignoring data above MAX_MAP_RANGE.\");\r\n      }\r\n\r\n      var lastByte = dstLow.length - 1;\r\n\r\n      while (low <= high) {\r\n        this._map[low++] = dstLow;\r\n        dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(dstLow.charCodeAt(lastByte) + 1);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"mapBfRangeToArray\",\r\n    value: function mapBfRangeToArray(low, high, array) {\r\n      if (high - low > MAX_MAP_RANGE) {\r\n        throw new Error(\"mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.\");\r\n      }\r\n\r\n      var ii = array.length;\r\n      var i = 0;\r\n\r\n      while (low <= high && i < ii) {\r\n        this._map[low] = array[i++];\r\n        ++low;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"mapOne\",\r\n    value: function mapOne(src, dst) {\r\n      this._map[src] = dst;\r\n    }\r\n  }, {\r\n    key: \"lookup\",\r\n    value: function lookup(code) {\r\n      return this._map[code];\r\n    }\r\n  }, {\r\n    key: \"contains\",\r\n    value: function contains(code) {\r\n      return this._map[code] !== undefined;\r\n    }\r\n  }, {\r\n    key: \"forEach\",\r\n    value: function forEach(callback) {\r\n      var map = this._map;\r\n      var length = map.length;\r\n\r\n      if (length <= 0x10000) {\r\n        for (var i = 0; i < length; i++) {\r\n          if (map[i] !== undefined) {\r\n            callback(i, map[i]);\r\n          }\r\n        }\r\n      } else {\r\n        for (var _i in map) {\r\n          callback(_i, map[_i]);\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"charCodeOf\",\r\n    value: function charCodeOf(value) {\r\n      var map = this._map;\r\n\r\n      if (map.length <= 0x10000) {\r\n        return map.indexOf(value);\r\n      }\r\n\r\n      for (var charCode in map) {\r\n        if (map[charCode] === value) {\r\n          return charCode | 0;\r\n        }\r\n      }\r\n\r\n      return -1;\r\n    }\r\n  }, {\r\n    key: \"getMap\",\r\n    value: function getMap() {\r\n      return this._map;\r\n    }\r\n  }, {\r\n    key: \"readCharCode\",\r\n    value: function readCharCode(str, offset, out) {\r\n      var c = 0;\r\n      var codespaceRanges = this.codespaceRanges;\r\n\r\n      for (var n = 0, nn = codespaceRanges.length; n < nn; n++) {\r\n        c = (c << 8 | str.charCodeAt(offset + n)) >>> 0;\r\n        var codespaceRange = codespaceRanges[n];\r\n\r\n        for (var k = 0, kk = codespaceRange.length; k < kk;) {\r\n          var low = codespaceRange[k++];\r\n          var high = codespaceRange[k++];\r\n\r\n          if (c >= low && c <= high) {\r\n            out.charcode = c;\r\n            out.length = n + 1;\r\n            return;\r\n          }\r\n        }\r\n      }\r\n\r\n      out.charcode = 0;\r\n      out.length = 1;\r\n    }\r\n  }, {\r\n    key: \"getCharCodeLength\",\r\n    value: function getCharCodeLength(charCode) {\r\n      var codespaceRanges = this.codespaceRanges;\r\n\r\n      for (var n = 0, nn = codespaceRanges.length; n < nn; n++) {\r\n        var codespaceRange = codespaceRanges[n];\r\n\r\n        for (var k = 0, kk = codespaceRange.length; k < kk;) {\r\n          var low = codespaceRange[k++];\r\n          var high = codespaceRange[k++];\r\n\r\n          if (charCode >= low && charCode <= high) {\r\n            return n + 1;\r\n          }\r\n        }\r\n      }\r\n\r\n      return 1;\r\n    }\r\n  }, {\r\n    key: \"length\",\r\n    get: function get() {\r\n      return this._map.length;\r\n    }\r\n  }, {\r\n    key: \"isIdentityCMap\",\r\n    get: function get() {\r\n      if (!(this.name === \"Identity-H\" || this.name === \"Identity-V\")) {\r\n        return false;\r\n      }\r\n\r\n      if (this._map.length !== 0x10000) {\r\n        return false;\r\n      }\r\n\r\n      for (var i = 0; i < 0x10000; i++) {\r\n        if (this._map[i] !== i) {\r\n          return false;\r\n        }\r\n      }\r\n\r\n      return true;\r\n    }\r\n  }]);\r\n\r\n  return CMap;\r\n}();\r\n\r\nexports.CMap = CMap;\r\n\r\nvar IdentityCMap = /*#__PURE__*/function (_CMap) {\r\n  _inherits(IdentityCMap, _CMap);\r\n\r\n  var _super = _createSuper(IdentityCMap);\r\n\r\n  function IdentityCMap(vertical, n) {\r\n    var _this;\r\n\r\n    _classCallCheck(this, IdentityCMap);\r\n\r\n    _this = _super.call(this);\r\n    _this.vertical = vertical;\r\n\r\n    _this.addCodespaceRange(n, 0, 0xffff);\r\n\r\n    return _this;\r\n  }\r\n\r\n  _createClass(IdentityCMap, [{\r\n    key: \"mapCidRange\",\r\n    value: function mapCidRange(low, high, dstLow) {\r\n      (0, _util.unreachable)(\"should not call mapCidRange\");\r\n    }\r\n  }, {\r\n    key: \"mapBfRange\",\r\n    value: function mapBfRange(low, high, dstLow) {\r\n      (0, _util.unreachable)(\"should not call mapBfRange\");\r\n    }\r\n  }, {\r\n    key: \"mapBfRangeToArray\",\r\n    value: function mapBfRangeToArray(low, high, array) {\r\n      (0, _util.unreachable)(\"should not call mapBfRangeToArray\");\r\n    }\r\n  }, {\r\n    key: \"mapOne\",\r\n    value: function mapOne(src, dst) {\r\n      (0, _util.unreachable)(\"should not call mapCidOne\");\r\n    }\r\n  }, {\r\n    key: \"lookup\",\r\n    value: function lookup(code) {\r\n      return Number.isInteger(code) && code <= 0xffff ? code : undefined;\r\n    }\r\n  }, {\r\n    key: \"contains\",\r\n    value: function contains(code) {\r\n      return Number.isInteger(code) && code <= 0xffff;\r\n    }\r\n  }, {\r\n    key: \"forEach\",\r\n    value: function forEach(callback) {\r\n      for (var i = 0; i <= 0xffff; i++) {\r\n        callback(i, i);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"charCodeOf\",\r\n    value: function charCodeOf(value) {\r\n      return Number.isInteger(value) && value <= 0xffff ? value : -1;\r\n    }\r\n  }, {\r\n    key: \"getMap\",\r\n    value: function getMap() {\r\n      var map = new Array(0x10000);\r\n\r\n      for (var i = 0; i <= 0xffff; i++) {\r\n        map[i] = i;\r\n      }\r\n\r\n      return map;\r\n    }\r\n  }, {\r\n    key: \"length\",\r\n    get: function get() {\r\n      return 0x10000;\r\n    }\r\n  }, {\r\n    key: \"isIdentityCMap\",\r\n    get: function get() {\r\n      (0, _util.unreachable)(\"should not access .isIdentityCMap\");\r\n    }\r\n  }]);\r\n\r\n  return IdentityCMap;\r\n}(CMap);\r\n\r\nexports.IdentityCMap = IdentityCMap;\r\n\r\nvar BinaryCMapReader = function BinaryCMapReaderClosure() {\r\n  function hexToInt(a, size) {\r\n    var n = 0;\r\n\r\n    for (var i = 0; i <= size; i++) {\r\n      n = n << 8 | a[i];\r\n    }\r\n\r\n    return n >>> 0;\r\n  }\r\n\r\n  function hexToStr(a, size) {\r\n    if (size === 1) {\r\n      return String.fromCharCode(a[0], a[1]);\r\n    }\r\n\r\n    if (size === 3) {\r\n      return String.fromCharCode(a[0], a[1], a[2], a[3]);\r\n    }\r\n\r\n    return String.fromCharCode.apply(null, a.subarray(0, size + 1));\r\n  }\r\n\r\n  function addHex(a, b, size) {\r\n    var c = 0;\r\n\r\n    for (var i = size; i >= 0; i--) {\r\n      c += a[i] + b[i];\r\n      a[i] = c & 255;\r\n      c >>= 8;\r\n    }\r\n  }\r\n\r\n  function incHex(a, size) {\r\n    var c = 1;\r\n\r\n    for (var i = size; i >= 0 && c > 0; i--) {\r\n      c += a[i];\r\n      a[i] = c & 255;\r\n      c >>= 8;\r\n    }\r\n  }\r\n\r\n  var MAX_NUM_SIZE = 16;\r\n  var MAX_ENCODED_NUM_SIZE = 19;\r\n\r\n  function BinaryCMapStream(data) {\r\n    this.buffer = data;\r\n    this.pos = 0;\r\n    this.end = data.length;\r\n    this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE);\r\n  }\r\n\r\n  BinaryCMapStream.prototype = {\r\n    readByte: function readByte() {\r\n      if (this.pos >= this.end) {\r\n        return -1;\r\n      }\r\n\r\n      return this.buffer[this.pos++];\r\n    },\r\n    readNumber: function readNumber() {\r\n      var n = 0;\r\n      var last;\r\n\r\n      do {\r\n        var b = this.readByte();\r\n\r\n        if (b < 0) {\r\n          throw new _util.FormatError(\"unexpected EOF in bcmap\");\r\n        }\r\n\r\n        last = !(b & 0x80);\r\n        n = n << 7 | b & 0x7f;\r\n      } while (!last);\r\n\r\n      return n;\r\n    },\r\n    readSigned: function readSigned() {\r\n      var n = this.readNumber();\r\n      return n & 1 ? ~(n >>> 1) : n >>> 1;\r\n    },\r\n    readHex: function readHex(num, size) {\r\n      num.set(this.buffer.subarray(this.pos, this.pos + size + 1));\r\n      this.pos += size + 1;\r\n    },\r\n    readHexNumber: function readHexNumber(num, size) {\r\n      var last;\r\n      var stack = this.tmpBuf,\r\n          sp = 0;\r\n\r\n      do {\r\n        var b = this.readByte();\r\n\r\n        if (b < 0) {\r\n          throw new _util.FormatError(\"unexpected EOF in bcmap\");\r\n        }\r\n\r\n        last = !(b & 0x80);\r\n        stack[sp++] = b & 0x7f;\r\n      } while (!last);\r\n\r\n      var i = size,\r\n          buffer = 0,\r\n          bufferSize = 0;\r\n\r\n      while (i >= 0) {\r\n        while (bufferSize < 8 && stack.length > 0) {\r\n          buffer = stack[--sp] << bufferSize | buffer;\r\n          bufferSize += 7;\r\n        }\r\n\r\n        num[i] = buffer & 255;\r\n        i--;\r\n        buffer >>= 8;\r\n        bufferSize -= 8;\r\n      }\r\n    },\r\n    readHexSigned: function readHexSigned(num, size) {\r\n      this.readHexNumber(num, size);\r\n      var sign = num[size] & 1 ? 255 : 0;\r\n      var c = 0;\r\n\r\n      for (var i = 0; i <= size; i++) {\r\n        c = (c & 1) << 8 | num[i];\r\n        num[i] = c >> 1 ^ sign;\r\n      }\r\n    },\r\n    readString: function readString() {\r\n      var len = this.readNumber();\r\n      var s = \"\";\r\n\r\n      for (var i = 0; i < len; i++) {\r\n        s += String.fromCharCode(this.readNumber());\r\n      }\r\n\r\n      return s;\r\n    }\r\n  };\r\n\r\n  function processBinaryCMap(data, cMap, extend) {\r\n    return new Promise(function (resolve, reject) {\r\n      var stream = new BinaryCMapStream(data);\r\n      var header = stream.readByte();\r\n      cMap.vertical = !!(header & 1);\r\n      var useCMap = null;\r\n      var start = new Uint8Array(MAX_NUM_SIZE);\r\n      var end = new Uint8Array(MAX_NUM_SIZE);\r\n\r\n      var _char = new Uint8Array(MAX_NUM_SIZE);\r\n\r\n      var charCode = new Uint8Array(MAX_NUM_SIZE);\r\n      var tmp = new Uint8Array(MAX_NUM_SIZE);\r\n      var code;\r\n      var b;\r\n\r\n      while ((b = stream.readByte()) >= 0) {\r\n        var type = b >> 5;\r\n\r\n        if (type === 7) {\r\n          switch (b & 0x1f) {\r\n            case 0:\r\n              stream.readString();\r\n              break;\r\n\r\n            case 1:\r\n              useCMap = stream.readString();\r\n              break;\r\n          }\r\n\r\n          continue;\r\n        }\r\n\r\n        var sequence = !!(b & 0x10);\r\n        var dataSize = b & 15;\r\n\r\n        if (dataSize + 1 > MAX_NUM_SIZE) {\r\n          throw new Error(\"processBinaryCMap: Invalid dataSize.\");\r\n        }\r\n\r\n        var ucs2DataSize = 1;\r\n        var subitemsCount = stream.readNumber();\r\n        var i;\r\n\r\n        switch (type) {\r\n          case 0:\r\n            stream.readHex(start, dataSize);\r\n            stream.readHexNumber(end, dataSize);\r\n            addHex(end, start, dataSize);\r\n            cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize));\r\n\r\n            for (i = 1; i < subitemsCount; i++) {\r\n              incHex(end, dataSize);\r\n              stream.readHexNumber(start, dataSize);\r\n              addHex(start, end, dataSize);\r\n              stream.readHexNumber(end, dataSize);\r\n              addHex(end, start, dataSize);\r\n              cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize));\r\n            }\r\n\r\n            break;\r\n\r\n          case 1:\r\n            stream.readHex(start, dataSize);\r\n            stream.readHexNumber(end, dataSize);\r\n            addHex(end, start, dataSize);\r\n            stream.readNumber();\r\n\r\n            for (i = 1; i < subitemsCount; i++) {\r\n              incHex(end, dataSize);\r\n              stream.readHexNumber(start, dataSize);\r\n              addHex(start, end, dataSize);\r\n              stream.readHexNumber(end, dataSize);\r\n              addHex(end, start, dataSize);\r\n              stream.readNumber();\r\n            }\r\n\r\n            break;\r\n\r\n          case 2:\r\n            stream.readHex(_char, dataSize);\r\n            code = stream.readNumber();\r\n            cMap.mapOne(hexToInt(_char, dataSize), code);\r\n\r\n            for (i = 1; i < subitemsCount; i++) {\r\n              incHex(_char, dataSize);\r\n\r\n              if (!sequence) {\r\n                stream.readHexNumber(tmp, dataSize);\r\n                addHex(_char, tmp, dataSize);\r\n              }\r\n\r\n              code = stream.readSigned() + (code + 1);\r\n              cMap.mapOne(hexToInt(_char, dataSize), code);\r\n            }\r\n\r\n            break;\r\n\r\n          case 3:\r\n            stream.readHex(start, dataSize);\r\n            stream.readHexNumber(end, dataSize);\r\n            addHex(end, start, dataSize);\r\n            code = stream.readNumber();\r\n            cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code);\r\n\r\n            for (i = 1; i < subitemsCount; i++) {\r\n              incHex(end, dataSize);\r\n\r\n              if (!sequence) {\r\n                stream.readHexNumber(start, dataSize);\r\n                addHex(start, end, dataSize);\r\n              } else {\r\n                start.set(end);\r\n              }\r\n\r\n              stream.readHexNumber(end, dataSize);\r\n              addHex(end, start, dataSize);\r\n              code = stream.readNumber();\r\n              cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code);\r\n            }\r\n\r\n            break;\r\n\r\n          case 4:\r\n            stream.readHex(_char, ucs2DataSize);\r\n            stream.readHex(charCode, dataSize);\r\n            cMap.mapOne(hexToInt(_char, ucs2DataSize), hexToStr(charCode, dataSize));\r\n\r\n            for (i = 1; i < subitemsCount; i++) {\r\n              incHex(_char, ucs2DataSize);\r\n\r\n              if (!sequence) {\r\n                stream.readHexNumber(tmp, ucs2DataSize);\r\n                addHex(_char, tmp, ucs2DataSize);\r\n              }\r\n\r\n              incHex(charCode, dataSize);\r\n              stream.readHexSigned(tmp, dataSize);\r\n              addHex(charCode, tmp, dataSize);\r\n              cMap.mapOne(hexToInt(_char, ucs2DataSize), hexToStr(charCode, dataSize));\r\n            }\r\n\r\n            break;\r\n\r\n          case 5:\r\n            stream.readHex(start, ucs2DataSize);\r\n            stream.readHexNumber(end, ucs2DataSize);\r\n            addHex(end, start, ucs2DataSize);\r\n            stream.readHex(charCode, dataSize);\r\n            cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize));\r\n\r\n            for (i = 1; i < subitemsCount; i++) {\r\n              incHex(end, ucs2DataSize);\r\n\r\n              if (!sequence) {\r\n                stream.readHexNumber(start, ucs2DataSize);\r\n                addHex(start, end, ucs2DataSize);\r\n              } else {\r\n                start.set(end);\r\n              }\r\n\r\n              stream.readHexNumber(end, ucs2DataSize);\r\n              addHex(end, start, ucs2DataSize);\r\n              stream.readHex(charCode, dataSize);\r\n              cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize));\r\n            }\r\n\r\n            break;\r\n\r\n          default:\r\n            reject(new Error(\"processBinaryCMap: Unknown type: \" + type));\r\n            return;\r\n        }\r\n      }\r\n\r\n      if (useCMap) {\r\n        resolve(extend(useCMap));\r\n        return;\r\n      }\r\n\r\n      resolve(cMap);\r\n    });\r\n  }\r\n\r\n  function BinaryCMapReader() {}\r\n\r\n  BinaryCMapReader.prototype = {\r\n    process: processBinaryCMap\r\n  };\r\n  return BinaryCMapReader;\r\n}();\r\n\r\nvar CMapFactory = function CMapFactoryClosure() {\r\n  function strToInt(str) {\r\n    var a = 0;\r\n\r\n    for (var i = 0; i < str.length; i++) {\r\n      a = a << 8 | str.charCodeAt(i);\r\n    }\r\n\r\n    return a >>> 0;\r\n  }\r\n\r\n  function expectString(obj) {\r\n    if (!(0, _util.isString)(obj)) {\r\n      throw new _util.FormatError(\"Malformed CMap: expected string.\");\r\n    }\r\n  }\r\n\r\n  function expectInt(obj) {\r\n    if (!Number.isInteger(obj)) {\r\n      throw new _util.FormatError(\"Malformed CMap: expected int.\");\r\n    }\r\n  }\r\n\r\n  function parseBfChar(cMap, lexer) {\r\n    while (true) {\r\n      var obj = lexer.getObj();\r\n\r\n      if ((0, _primitives.isEOF)(obj)) {\r\n        break;\r\n      }\r\n\r\n      if ((0, _primitives.isCmd)(obj, \"endbfchar\")) {\r\n        return;\r\n      }\r\n\r\n      expectString(obj);\r\n      var src = strToInt(obj);\r\n      obj = lexer.getObj();\r\n      expectString(obj);\r\n      var dst = obj;\r\n      cMap.mapOne(src, dst);\r\n    }\r\n  }\r\n\r\n  function parseBfRange(cMap, lexer) {\r\n    while (true) {\r\n      var obj = lexer.getObj();\r\n\r\n      if ((0, _primitives.isEOF)(obj)) {\r\n        break;\r\n      }\r\n\r\n      if ((0, _primitives.isCmd)(obj, \"endbfrange\")) {\r\n        return;\r\n      }\r\n\r\n      expectString(obj);\r\n      var low = strToInt(obj);\r\n      obj = lexer.getObj();\r\n      expectString(obj);\r\n      var high = strToInt(obj);\r\n      obj = lexer.getObj();\r\n\r\n      if (Number.isInteger(obj) || (0, _util.isString)(obj)) {\r\n        var dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj;\r\n        cMap.mapBfRange(low, high, dstLow);\r\n      } else if ((0, _primitives.isCmd)(obj, \"[\")) {\r\n        obj = lexer.getObj();\r\n        var array = [];\r\n\r\n        while (!(0, _primitives.isCmd)(obj, \"]\") && !(0, _primitives.isEOF)(obj)) {\r\n          array.push(obj);\r\n          obj = lexer.getObj();\r\n        }\r\n\r\n        cMap.mapBfRangeToArray(low, high, array);\r\n      } else {\r\n        break;\r\n      }\r\n    }\r\n\r\n    throw new _util.FormatError(\"Invalid bf range.\");\r\n  }\r\n\r\n  function parseCidChar(cMap, lexer) {\r\n    while (true) {\r\n      var obj = lexer.getObj();\r\n\r\n      if ((0, _primitives.isEOF)(obj)) {\r\n        break;\r\n      }\r\n\r\n      if ((0, _primitives.isCmd)(obj, \"endcidchar\")) {\r\n        return;\r\n      }\r\n\r\n      expectString(obj);\r\n      var src = strToInt(obj);\r\n      obj = lexer.getObj();\r\n      expectInt(obj);\r\n      var dst = obj;\r\n      cMap.mapOne(src, dst);\r\n    }\r\n  }\r\n\r\n  function parseCidRange(cMap, lexer) {\r\n    while (true) {\r\n      var obj = lexer.getObj();\r\n\r\n      if ((0, _primitives.isEOF)(obj)) {\r\n        break;\r\n      }\r\n\r\n      if ((0, _primitives.isCmd)(obj, \"endcidrange\")) {\r\n        return;\r\n      }\r\n\r\n      expectString(obj);\r\n      var low = strToInt(obj);\r\n      obj = lexer.getObj();\r\n      expectString(obj);\r\n      var high = strToInt(obj);\r\n      obj = lexer.getObj();\r\n      expectInt(obj);\r\n      var dstLow = obj;\r\n      cMap.mapCidRange(low, high, dstLow);\r\n    }\r\n  }\r\n\r\n  function parseCodespaceRange(cMap, lexer) {\r\n    while (true) {\r\n      var obj = lexer.getObj();\r\n\r\n      if ((0, _primitives.isEOF)(obj)) {\r\n        break;\r\n      }\r\n\r\n      if ((0, _primitives.isCmd)(obj, \"endcodespacerange\")) {\r\n        return;\r\n      }\r\n\r\n      if (!(0, _util.isString)(obj)) {\r\n        break;\r\n      }\r\n\r\n      var low = strToInt(obj);\r\n      obj = lexer.getObj();\r\n\r\n      if (!(0, _util.isString)(obj)) {\r\n        break;\r\n      }\r\n\r\n      var high = strToInt(obj);\r\n      cMap.addCodespaceRange(obj.length, low, high);\r\n    }\r\n\r\n    throw new _util.FormatError(\"Invalid codespace range.\");\r\n  }\r\n\r\n  function parseWMode(cMap, lexer) {\r\n    var obj = lexer.getObj();\r\n\r\n    if (Number.isInteger(obj)) {\r\n      cMap.vertical = !!obj;\r\n    }\r\n  }\r\n\r\n  function parseCMapName(cMap, lexer) {\r\n    var obj = lexer.getObj();\r\n\r\n    if ((0, _primitives.isName)(obj) && (0, _util.isString)(obj.name)) {\r\n      cMap.name = obj.name;\r\n    }\r\n  }\r\n\r\n  function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) {\r\n    var previous;\r\n    var embeddedUseCMap;\r\n\r\n    objLoop: while (true) {\r\n      try {\r\n        var obj = lexer.getObj();\r\n\r\n        if ((0, _primitives.isEOF)(obj)) {\r\n          break;\r\n        } else if ((0, _primitives.isName)(obj)) {\r\n          if (obj.name === \"WMode\") {\r\n            parseWMode(cMap, lexer);\r\n          } else if (obj.name === \"CMapName\") {\r\n            parseCMapName(cMap, lexer);\r\n          }\r\n\r\n          previous = obj;\r\n        } else if ((0, _primitives.isCmd)(obj)) {\r\n          switch (obj.cmd) {\r\n            case \"endcmap\":\r\n              break objLoop;\r\n\r\n            case \"usecmap\":\r\n              if ((0, _primitives.isName)(previous)) {\r\n                embeddedUseCMap = previous.name;\r\n              }\r\n\r\n              break;\r\n\r\n            case \"begincodespacerange\":\r\n              parseCodespaceRange(cMap, lexer);\r\n              break;\r\n\r\n            case \"beginbfchar\":\r\n              parseBfChar(cMap, lexer);\r\n              break;\r\n\r\n            case \"begincidchar\":\r\n              parseCidChar(cMap, lexer);\r\n              break;\r\n\r\n            case \"beginbfrange\":\r\n              parseBfRange(cMap, lexer);\r\n              break;\r\n\r\n            case \"begincidrange\":\r\n              parseCidRange(cMap, lexer);\r\n              break;\r\n          }\r\n        }\r\n      } catch (ex) {\r\n        if (ex instanceof _core_utils.MissingDataException) {\r\n          throw ex;\r\n        }\r\n\r\n        (0, _util.warn)(\"Invalid cMap data: \" + ex);\r\n        continue;\r\n      }\r\n    }\r\n\r\n    if (!useCMap && embeddedUseCMap) {\r\n      useCMap = embeddedUseCMap;\r\n    }\r\n\r\n    if (useCMap) {\r\n      return extendCMap(cMap, fetchBuiltInCMap, useCMap);\r\n    }\r\n\r\n    return Promise.resolve(cMap);\r\n  }\r\n\r\n  function extendCMap(cMap, fetchBuiltInCMap, useCMap) {\r\n    return createBuiltInCMap(useCMap, fetchBuiltInCMap).then(function (newCMap) {\r\n      cMap.useCMap = newCMap;\r\n\r\n      if (cMap.numCodespaceRanges === 0) {\r\n        var useCodespaceRanges = cMap.useCMap.codespaceRanges;\r\n\r\n        for (var i = 0; i < useCodespaceRanges.length; i++) {\r\n          cMap.codespaceRanges[i] = useCodespaceRanges[i].slice();\r\n        }\r\n\r\n        cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges;\r\n      }\r\n\r\n      cMap.useCMap.forEach(function (key, value) {\r\n        if (!cMap.contains(key)) {\r\n          cMap.mapOne(key, cMap.useCMap.lookup(key));\r\n        }\r\n      });\r\n      return cMap;\r\n    });\r\n  }\r\n\r\n  function createBuiltInCMap(name, fetchBuiltInCMap) {\r\n    if (name === \"Identity-H\") {\r\n      return Promise.resolve(new IdentityCMap(false, 2));\r\n    } else if (name === \"Identity-V\") {\r\n      return Promise.resolve(new IdentityCMap(true, 2));\r\n    }\r\n\r\n    if (!BUILT_IN_CMAPS.includes(name)) {\r\n      return Promise.reject(new Error(\"Unknown CMap name: \" + name));\r\n    }\r\n\r\n    if (!fetchBuiltInCMap) {\r\n      return Promise.reject(new Error(\"Built-in CMap parameters are not provided.\"));\r\n    }\r\n\r\n    return fetchBuiltInCMap(name).then(function (data) {\r\n      var cMapData = data.cMapData,\r\n          compressionType = data.compressionType;\r\n      var cMap = new CMap(true);\r\n\r\n      if (compressionType === _util.CMapCompressionType.BINARY) {\r\n        return new BinaryCMapReader().process(cMapData, cMap, function (useCMap) {\r\n          return extendCMap(cMap, fetchBuiltInCMap, useCMap);\r\n        });\r\n      }\r\n\r\n      if (compressionType === _util.CMapCompressionType.NONE) {\r\n        var lexer = new _parser.Lexer(new _stream.Stream(cMapData));\r\n        return parseCMap(cMap, lexer, fetchBuiltInCMap, null);\r\n      }\r\n\r\n      return Promise.reject(new Error(\"TODO: Only BINARY/NONE CMap compression is currently supported.\"));\r\n    });\r\n  }\r\n\r\n  return {\r\n    create: function create(params) {\r\n      return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var encoding, fetchBuiltInCMap, useCMap, cMap, lexer;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                encoding = params.encoding;\r\n                fetchBuiltInCMap = params.fetchBuiltInCMap;\r\n                useCMap = params.useCMap;\r\n\r\n                if (!(0, _primitives.isName)(encoding)) {\r\n                  _context.next = 7;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\", createBuiltInCMap(encoding.name, fetchBuiltInCMap));\r\n\r\n              case 7:\r\n                if (!(0, _primitives.isStream)(encoding)) {\r\n                  _context.next = 11;\r\n                  break;\r\n                }\r\n\r\n                cMap = new CMap();\r\n                lexer = new _parser.Lexer(encoding);\r\n                return _context.abrupt(\"return\", parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap).then(function (parsedCMap) {\r\n                  if (parsedCMap.isIdentityCMap) {\r\n                    return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap);\r\n                  }\r\n\r\n                  return parsedCMap;\r\n                }));\r\n\r\n              case 11:\r\n                throw new Error(\"Encoding required.\");\r\n\r\n              case 12:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee);\r\n      }))();\r\n    }\r\n  };\r\n}();\r\n\r\nexports.CMapFactory = CMapFactory;\r\n\r\n/***/ }),\r\n/* 159 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.getFontType = getFontType;\r\nexports.ToUnicodeMap = exports.SEAC_ANALYSIS_ENABLED = exports.IdentityToUnicodeMap = exports.FontFlags = exports.Font = exports.ErrorFont = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _cff_parser = __w_pdfjs_require__(160);\r\n\r\nvar _glyphlist = __w_pdfjs_require__(163);\r\n\r\nvar _encodings = __w_pdfjs_require__(162);\r\n\r\nvar _standard_fonts = __w_pdfjs_require__(164);\r\n\r\nvar _unicode = __w_pdfjs_require__(165);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar _font_renderer = __w_pdfjs_require__(166);\r\n\r\nvar _cmap = __w_pdfjs_require__(158);\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nvar _type1_parser = __w_pdfjs_require__(167);\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nvar PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]];\r\nvar PDF_GLYPH_SPACE_UNITS = 1000;\r\nvar SEAC_ANALYSIS_ENABLED = true;\r\nexports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED;\r\nvar EXPORT_DATA_PROPERTIES = [\"ascent\", \"bbox\", \"black\", \"bold\", \"charProcOperatorList\", \"composite\", \"data\", \"defaultVMetrics\", \"defaultWidth\", \"descent\", \"fallbackName\", \"fontMatrix\", \"fontType\", \"isMonospace\", \"isSerifFont\", \"isType3Font\", \"italic\", \"loadedName\", \"mimetype\", \"missingFile\", \"name\", \"remeasure\", \"subtype\", \"type\", \"vertical\"];\r\nvar EXPORT_DATA_EXTRA_PROPERTIES = [\"cMap\", \"defaultEncoding\", \"differences\", \"isSymbolicFont\", \"seacMap\", \"toFontChar\", \"toUnicode\", \"vmetrics\", \"widths\"];\r\nvar FontFlags = {\r\n  FixedPitch: 1,\r\n  Serif: 2,\r\n  Symbolic: 4,\r\n  Script: 8,\r\n  Nonsymbolic: 32,\r\n  Italic: 64,\r\n  AllCap: 65536,\r\n  SmallCap: 131072,\r\n  ForceBold: 262144\r\n};\r\nexports.FontFlags = FontFlags;\r\nvar MacStandardGlyphOrdering = [\".notdef\", \".null\", \"nonmarkingreturn\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quotesingle\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"grave\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"Adieresis\", \"Aring\", \"Ccedilla\", \"Eacute\", \"Ntilde\", \"Odieresis\", \"Udieresis\", \"aacute\", \"agrave\", \"acircumflex\", \"adieresis\", \"atilde\", \"aring\", \"ccedilla\", \"eacute\", \"egrave\", \"ecircumflex\", \"edieresis\", \"iacute\", \"igrave\", \"icircumflex\", \"idieresis\", \"ntilde\", \"oacute\", \"ograve\", \"ocircumflex\", \"odieresis\", \"otilde\", \"uacute\", \"ugrave\", \"ucircumflex\", \"udieresis\", \"dagger\", \"degree\", \"cent\", \"sterling\", \"section\", \"bullet\", \"paragraph\", \"germandbls\", \"registered\", \"copyright\", \"trademark\", \"acute\", \"dieresis\", \"notequal\", \"AE\", \"Oslash\", \"infinity\", \"plusminus\", \"lessequal\", \"greaterequal\", \"yen\", \"mu\", \"partialdiff\", \"summation\", \"product\", \"pi\", \"integral\", \"ordfeminine\", \"ordmasculine\", \"Omega\", \"ae\", \"oslash\", \"questiondown\", \"exclamdown\", \"logicalnot\", \"radical\", \"florin\", \"approxequal\", \"Delta\", \"guillemotleft\", \"guillemotright\", \"ellipsis\", \"nonbreakingspace\", \"Agrave\", \"Atilde\", \"Otilde\", \"OE\", \"oe\", \"endash\", \"emdash\", \"quotedblleft\", \"quotedblright\", \"quoteleft\", \"quoteright\", \"divide\", \"lozenge\", \"ydieresis\", \"Ydieresis\", \"fraction\", \"currency\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"daggerdbl\", \"periodcentered\", \"quotesinglbase\", \"quotedblbase\", \"perthousand\", \"Acircumflex\", \"Ecircumflex\", \"Aacute\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Oacute\", \"Ocircumflex\", \"apple\", \"Ograve\", \"Uacute\", \"Ucircumflex\", \"Ugrave\", \"dotlessi\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\", \"Lslash\", \"lslash\", \"Scaron\", \"scaron\", \"Zcaron\", \"zcaron\", \"brokenbar\", \"Eth\", \"eth\", \"Yacute\", \"yacute\", \"Thorn\", \"thorn\", \"minus\", \"multiply\", \"onesuperior\", \"twosuperior\", \"threesuperior\", \"onehalf\", \"onequarter\", \"threequarters\", \"franc\", \"Gbreve\", \"gbreve\", \"Idotaccent\", \"Scedilla\", \"scedilla\", \"Cacute\", \"cacute\", \"Ccaron\", \"ccaron\", \"dcroat\"];\r\n\r\nfunction adjustWidths(properties) {\r\n  if (!properties.fontMatrix) {\r\n    return;\r\n  }\r\n\r\n  if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) {\r\n    return;\r\n  }\r\n\r\n  var scale = 0.001 / properties.fontMatrix[0];\r\n  var glyphsWidths = properties.widths;\r\n\r\n  for (var glyph in glyphsWidths) {\r\n    glyphsWidths[glyph] *= scale;\r\n  }\r\n\r\n  properties.defaultWidth *= scale;\r\n}\r\n\r\nfunction adjustToUnicode(properties, builtInEncoding) {\r\n  if (properties.hasIncludedToUnicodeMap) {\r\n    return;\r\n  }\r\n\r\n  if (properties.hasEncoding) {\r\n    return;\r\n  }\r\n\r\n  if (builtInEncoding === properties.defaultEncoding) {\r\n    return;\r\n  }\r\n\r\n  if (properties.toUnicode instanceof IdentityToUnicodeMap) {\r\n    return;\r\n  }\r\n\r\n  var toUnicode = [],\r\n      glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\r\n\r\n  for (var charCode in builtInEncoding) {\r\n    var glyphName = builtInEncoding[charCode];\r\n    var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);\r\n\r\n    if (unicode !== -1) {\r\n      toUnicode[charCode] = String.fromCharCode(unicode);\r\n    }\r\n  }\r\n\r\n  properties.toUnicode.amend(toUnicode);\r\n}\r\n\r\nfunction getFontType(type, subtype) {\r\n  switch (type) {\r\n    case \"Type1\":\r\n      return subtype === \"Type1C\" ? _util.FontType.TYPE1C : _util.FontType.TYPE1;\r\n\r\n    case \"CIDFontType0\":\r\n      return subtype === \"CIDFontType0C\" ? _util.FontType.CIDFONTTYPE0C : _util.FontType.CIDFONTTYPE0;\r\n\r\n    case \"OpenType\":\r\n      return _util.FontType.OPENTYPE;\r\n\r\n    case \"TrueType\":\r\n      return _util.FontType.TRUETYPE;\r\n\r\n    case \"CIDFontType2\":\r\n      return _util.FontType.CIDFONTTYPE2;\r\n\r\n    case \"MMType1\":\r\n      return _util.FontType.MMTYPE1;\r\n\r\n    case \"Type0\":\r\n      return _util.FontType.TYPE0;\r\n\r\n    default:\r\n      return _util.FontType.UNKNOWN;\r\n  }\r\n}\r\n\r\nfunction recoverGlyphName(name, glyphsUnicodeMap) {\r\n  if (glyphsUnicodeMap[name] !== undefined) {\r\n    return name;\r\n  }\r\n\r\n  var unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap);\r\n\r\n  if (unicode !== -1) {\r\n    for (var key in glyphsUnicodeMap) {\r\n      if (glyphsUnicodeMap[key] === unicode) {\r\n        return key;\r\n      }\r\n    }\r\n  }\r\n\r\n  (0, _util.info)(\"Unable to recover a standard glyph name for: \" + name);\r\n  return name;\r\n}\r\n\r\nvar Glyph = function GlyphClosure() {\r\n  function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {\r\n    this.fontChar = fontChar;\r\n    this.unicode = unicode;\r\n    this.accent = accent;\r\n    this.width = width;\r\n    this.vmetric = vmetric;\r\n    this.operatorListId = operatorListId;\r\n    this.isSpace = isSpace;\r\n    this.isInFont = isInFont;\r\n  }\r\n\r\n  Glyph.prototype.matchesForCache = function (fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {\r\n    return this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont;\r\n  };\r\n\r\n  return Glyph;\r\n}();\r\n\r\nvar ToUnicodeMap = function ToUnicodeMapClosure() {\r\n  function ToUnicodeMap() {\r\n    var cmap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\r\n    this._map = cmap;\r\n  }\r\n\r\n  ToUnicodeMap.prototype = {\r\n    get length() {\r\n      return this._map.length;\r\n    },\r\n\r\n    forEach: function forEach(callback) {\r\n      for (var charCode in this._map) {\r\n        callback(charCode, this._map[charCode].charCodeAt(0));\r\n      }\r\n    },\r\n    has: function has(i) {\r\n      return this._map[i] !== undefined;\r\n    },\r\n    get: function get(i) {\r\n      return this._map[i];\r\n    },\r\n    charCodeOf: function charCodeOf(value) {\r\n      var map = this._map;\r\n\r\n      if (map.length <= 0x10000) {\r\n        return map.indexOf(value);\r\n      }\r\n\r\n      for (var charCode in map) {\r\n        if (map[charCode] === value) {\r\n          return charCode | 0;\r\n        }\r\n      }\r\n\r\n      return -1;\r\n    },\r\n    amend: function amend(map) {\r\n      for (var charCode in map) {\r\n        this._map[charCode] = map[charCode];\r\n      }\r\n    }\r\n  };\r\n  return ToUnicodeMap;\r\n}();\r\n\r\nexports.ToUnicodeMap = ToUnicodeMap;\r\n\r\nvar IdentityToUnicodeMap = function IdentityToUnicodeMapClosure() {\r\n  function IdentityToUnicodeMap(firstChar, lastChar) {\r\n    this.firstChar = firstChar;\r\n    this.lastChar = lastChar;\r\n  }\r\n\r\n  IdentityToUnicodeMap.prototype = {\r\n    get length() {\r\n      return this.lastChar + 1 - this.firstChar;\r\n    },\r\n\r\n    forEach: function forEach(callback) {\r\n      for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) {\r\n        callback(i, i);\r\n      }\r\n    },\r\n    has: function has(i) {\r\n      return this.firstChar <= i && i <= this.lastChar;\r\n    },\r\n    get: function get(i) {\r\n      if (this.firstChar <= i && i <= this.lastChar) {\r\n        return String.fromCharCode(i);\r\n      }\r\n\r\n      return undefined;\r\n    },\r\n    charCodeOf: function charCodeOf(v) {\r\n      return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1;\r\n    },\r\n    amend: function amend(map) {\r\n      (0, _util.unreachable)(\"Should not call amend()\");\r\n    }\r\n  };\r\n  return IdentityToUnicodeMap;\r\n}();\r\n\r\nexports.IdentityToUnicodeMap = IdentityToUnicodeMap;\r\n\r\nvar OpenTypeFileBuilder = function OpenTypeFileBuilderClosure() {\r\n  function writeInt16(dest, offset, num) {\r\n    dest[offset] = num >> 8 & 0xff;\r\n    dest[offset + 1] = num & 0xff;\r\n  }\r\n\r\n  function writeInt32(dest, offset, num) {\r\n    dest[offset] = num >> 24 & 0xff;\r\n    dest[offset + 1] = num >> 16 & 0xff;\r\n    dest[offset + 2] = num >> 8 & 0xff;\r\n    dest[offset + 3] = num & 0xff;\r\n  }\r\n\r\n  function writeData(dest, offset, data) {\r\n    var i, ii;\r\n\r\n    if (data instanceof Uint8Array) {\r\n      dest.set(data, offset);\r\n    } else if (typeof data === \"string\") {\r\n      for (i = 0, ii = data.length; i < ii; i++) {\r\n        dest[offset++] = data.charCodeAt(i) & 0xff;\r\n      }\r\n    } else {\r\n      for (i = 0, ii = data.length; i < ii; i++) {\r\n        dest[offset++] = data[i] & 0xff;\r\n      }\r\n    }\r\n  }\r\n\r\n  function OpenTypeFileBuilder(sfnt) {\r\n    this.sfnt = sfnt;\r\n    this.tables = Object.create(null);\r\n  }\r\n\r\n  OpenTypeFileBuilder.getSearchParams = function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) {\r\n    var maxPower2 = 1,\r\n        log2 = 0;\r\n\r\n    while ((maxPower2 ^ entriesCount) > maxPower2) {\r\n      maxPower2 <<= 1;\r\n      log2++;\r\n    }\r\n\r\n    var searchRange = maxPower2 * entrySize;\r\n    return {\r\n      range: searchRange,\r\n      entry: log2,\r\n      rangeShift: entrySize * entriesCount - searchRange\r\n    };\r\n  };\r\n\r\n  var OTF_HEADER_SIZE = 12;\r\n  var OTF_TABLE_ENTRY_SIZE = 16;\r\n  OpenTypeFileBuilder.prototype = {\r\n    toArray: function OpenTypeFileBuilder_toArray() {\r\n      var sfnt = this.sfnt;\r\n      var tables = this.tables;\r\n      var tablesNames = Object.keys(tables);\r\n      tablesNames.sort();\r\n      var numTables = tablesNames.length;\r\n      var i, j, jj, table, tableName;\r\n      var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE;\r\n      var tableOffsets = [offset];\r\n\r\n      for (i = 0; i < numTables; i++) {\r\n        table = tables[tablesNames[i]];\r\n        var paddedLength = (table.length + 3 & ~3) >>> 0;\r\n        offset += paddedLength;\r\n        tableOffsets.push(offset);\r\n      }\r\n\r\n      var file = new Uint8Array(offset);\r\n\r\n      for (i = 0; i < numTables; i++) {\r\n        table = tables[tablesNames[i]];\r\n        writeData(file, tableOffsets[i], table);\r\n      }\r\n\r\n      if (sfnt === \"true\") {\r\n        sfnt = (0, _util.string32)(0x00010000);\r\n      }\r\n\r\n      file[0] = sfnt.charCodeAt(0) & 0xff;\r\n      file[1] = sfnt.charCodeAt(1) & 0xff;\r\n      file[2] = sfnt.charCodeAt(2) & 0xff;\r\n      file[3] = sfnt.charCodeAt(3) & 0xff;\r\n      writeInt16(file, 4, numTables);\r\n      var searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16);\r\n      writeInt16(file, 6, searchParams.range);\r\n      writeInt16(file, 8, searchParams.entry);\r\n      writeInt16(file, 10, searchParams.rangeShift);\r\n      offset = OTF_HEADER_SIZE;\r\n\r\n      for (i = 0; i < numTables; i++) {\r\n        tableName = tablesNames[i];\r\n        file[offset] = tableName.charCodeAt(0) & 0xff;\r\n        file[offset + 1] = tableName.charCodeAt(1) & 0xff;\r\n        file[offset + 2] = tableName.charCodeAt(2) & 0xff;\r\n        file[offset + 3] = tableName.charCodeAt(3) & 0xff;\r\n        var checksum = 0;\r\n\r\n        for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) {\r\n          var quad = (0, _core_utils.readUint32)(file, j);\r\n          checksum = checksum + quad >>> 0;\r\n        }\r\n\r\n        writeInt32(file, offset + 4, checksum);\r\n        writeInt32(file, offset + 8, tableOffsets[i]);\r\n        writeInt32(file, offset + 12, tables[tableName].length);\r\n        offset += OTF_TABLE_ENTRY_SIZE;\r\n      }\r\n\r\n      return file;\r\n    },\r\n    addTable: function OpenTypeFileBuilder_addTable(tag, data) {\r\n      if (tag in this.tables) {\r\n        throw new Error(\"Table \" + tag + \" already exists\");\r\n      }\r\n\r\n      this.tables[tag] = data;\r\n    }\r\n  };\r\n  return OpenTypeFileBuilder;\r\n}();\r\n\r\nvar Font = function FontClosure() {\r\n  function Font(name, file, properties) {\r\n    var charCode;\r\n    this.name = name;\r\n    this.loadedName = properties.loadedName;\r\n    this.isType3Font = properties.isType3Font;\r\n    this.missingFile = false;\r\n    this.glyphCache = Object.create(null);\r\n    this.isSerifFont = !!(properties.flags & FontFlags.Serif);\r\n    this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);\r\n    this.isMonospace = !!(properties.flags & FontFlags.FixedPitch);\r\n    var type = properties.type;\r\n    var subtype = properties.subtype;\r\n    this.type = type;\r\n    this.subtype = subtype;\r\n    var fallbackName = \"sans-serif\";\r\n\r\n    if (this.isMonospace) {\r\n      fallbackName = \"monospace\";\r\n    } else if (this.isSerifFont) {\r\n      fallbackName = \"serif\";\r\n    }\r\n\r\n    this.fallbackName = fallbackName;\r\n    this.differences = properties.differences;\r\n    this.widths = properties.widths;\r\n    this.defaultWidth = properties.defaultWidth;\r\n    this.composite = properties.composite;\r\n    this.cMap = properties.cMap;\r\n    this.capHeight = properties.capHeight / PDF_GLYPH_SPACE_UNITS;\r\n    this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;\r\n    this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;\r\n    this.fontMatrix = properties.fontMatrix;\r\n    this.bbox = properties.bbox;\r\n    this.defaultEncoding = properties.defaultEncoding;\r\n    this.toUnicode = properties.toUnicode;\r\n    this.fallbackToUnicode = properties.fallbackToUnicode || new ToUnicodeMap();\r\n    this.toFontChar = [];\r\n\r\n    if (properties.type === \"Type3\") {\r\n      for (charCode = 0; charCode < 256; charCode++) {\r\n        this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode];\r\n      }\r\n\r\n      this.fontType = _util.FontType.TYPE3;\r\n      return;\r\n    }\r\n\r\n    this.cidEncoding = properties.cidEncoding;\r\n    this.vertical = !!properties.vertical;\r\n\r\n    if (this.vertical) {\r\n      this.vmetrics = properties.vmetrics;\r\n      this.defaultVMetrics = properties.defaultVMetrics;\r\n    }\r\n\r\n    if (!file || file.isEmpty) {\r\n      if (file) {\r\n        (0, _util.warn)('Font file is empty in \"' + name + '\" (' + this.loadedName + \")\");\r\n      }\r\n\r\n      this.fallbackToSystemFont(properties);\r\n      return;\r\n    }\r\n\r\n    var _getFontFileType = getFontFileType(file, properties);\r\n\r\n    var _getFontFileType2 = _slicedToArray(_getFontFileType, 2);\r\n\r\n    type = _getFontFileType2[0];\r\n    subtype = _getFontFileType2[1];\r\n\r\n    if (type !== this.type || subtype !== this.subtype) {\r\n      (0, _util.info)(\"Inconsistent font file Type/SubType, expected: \" + \"\".concat(this.type, \"/\").concat(this.subtype, \" but found: \").concat(type, \"/\").concat(subtype, \".\"));\r\n    }\r\n\r\n    try {\r\n      var data;\r\n\r\n      switch (type) {\r\n        case \"MMType1\":\r\n          (0, _util.info)(\"MMType1 font (\" + name + \"), falling back to Type1.\");\r\n\r\n        case \"Type1\":\r\n        case \"CIDFontType0\":\r\n          this.mimetype = \"font/opentype\";\r\n          var cff = subtype === \"Type1C\" || subtype === \"CIDFontType0C\" ? new CFFFont(file, properties) : new Type1Font(name, file, properties);\r\n          adjustWidths(properties);\r\n          data = this.convert(name, cff, properties);\r\n          break;\r\n\r\n        case \"OpenType\":\r\n        case \"TrueType\":\r\n        case \"CIDFontType2\":\r\n          this.mimetype = \"font/opentype\";\r\n          data = this.checkAndRepair(name, file, properties);\r\n\r\n          if (this.isOpenType) {\r\n            adjustWidths(properties);\r\n            type = \"OpenType\";\r\n          }\r\n\r\n          break;\r\n\r\n        default:\r\n          throw new _util.FormatError(\"Font \".concat(type, \" is not supported\"));\r\n      }\r\n    } catch (e) {\r\n      (0, _util.warn)(e);\r\n      this.fallbackToSystemFont(properties);\r\n      return;\r\n    }\r\n\r\n    this.data = data;\r\n    this.fontType = getFontType(type, subtype);\r\n    this.fontMatrix = properties.fontMatrix;\r\n    this.widths = properties.widths;\r\n    this.defaultWidth = properties.defaultWidth;\r\n    this.toUnicode = properties.toUnicode;\r\n    this.seacMap = properties.seacMap;\r\n  }\r\n\r\n  function int16(b0, b1) {\r\n    return (b0 << 8) + b1;\r\n  }\r\n\r\n  function writeSignedInt16(bytes, index, value) {\r\n    bytes[index + 1] = value;\r\n    bytes[index] = value >>> 8;\r\n  }\r\n\r\n  function signedInt16(b0, b1) {\r\n    var value = (b0 << 8) + b1;\r\n    return value & 1 << 15 ? value - 0x10000 : value;\r\n  }\r\n\r\n  function int32(b0, b1, b2, b3) {\r\n    return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;\r\n  }\r\n\r\n  function string16(value) {\r\n    return String.fromCharCode(value >> 8 & 0xff, value & 0xff);\r\n  }\r\n\r\n  function safeString16(value) {\r\n    if (value > 0x7fff) {\r\n      value = 0x7fff;\r\n    } else if (value < -0x8000) {\r\n      value = -0x8000;\r\n    }\r\n\r\n    return String.fromCharCode(value >> 8 & 0xff, value & 0xff);\r\n  }\r\n\r\n  function isTrueTypeFile(file) {\r\n    var header = file.peekBytes(4);\r\n    return (0, _core_utils.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === \"true\";\r\n  }\r\n\r\n  function isTrueTypeCollectionFile(file) {\r\n    var header = file.peekBytes(4);\r\n    return (0, _util.bytesToString)(header) === \"ttcf\";\r\n  }\r\n\r\n  function isOpenTypeFile(file) {\r\n    var header = file.peekBytes(4);\r\n    return (0, _util.bytesToString)(header) === \"OTTO\";\r\n  }\r\n\r\n  function isType1File(file) {\r\n    var header = file.peekBytes(2);\r\n\r\n    if (header[0] === 0x25 && header[1] === 0x21) {\r\n      return true;\r\n    }\r\n\r\n    if (header[0] === 0x80 && header[1] === 0x01) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  function isCFFFile(file) {\r\n    var header = file.peekBytes(4);\r\n\r\n    if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  function getFontFileType(file, _ref) {\r\n    var type = _ref.type,\r\n        subtype = _ref.subtype,\r\n        composite = _ref.composite;\r\n    var fileType, fileSubtype;\r\n\r\n    if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) {\r\n      if (composite) {\r\n        fileType = \"CIDFontType2\";\r\n      } else {\r\n        fileType = \"TrueType\";\r\n      }\r\n    } else if (isOpenTypeFile(file)) {\r\n      if (composite) {\r\n        fileType = \"CIDFontType2\";\r\n      } else {\r\n        fileType = \"OpenType\";\r\n      }\r\n    } else if (isType1File(file)) {\r\n      if (composite) {\r\n        fileType = \"CIDFontType0\";\r\n      } else {\r\n        fileType = type === \"MMType1\" ? \"MMType1\" : \"Type1\";\r\n      }\r\n    } else if (isCFFFile(file)) {\r\n      if (composite) {\r\n        fileType = \"CIDFontType0\";\r\n        fileSubtype = \"CIDFontType0C\";\r\n      } else {\r\n        fileType = type === \"MMType1\" ? \"MMType1\" : \"Type1\";\r\n        fileSubtype = \"Type1C\";\r\n      }\r\n    } else {\r\n      (0, _util.warn)(\"getFontFileType: Unable to detect correct font file Type/Subtype.\");\r\n      fileType = type;\r\n      fileSubtype = subtype;\r\n    }\r\n\r\n    return [fileType, fileSubtype];\r\n  }\r\n\r\n  function buildToFontChar(encoding, glyphsUnicodeMap, differences) {\r\n    var toFontChar = [],\r\n        unicode;\r\n\r\n    for (var i = 0, ii = encoding.length; i < ii; i++) {\r\n      unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap);\r\n\r\n      if (unicode !== -1) {\r\n        toFontChar[i] = unicode;\r\n      }\r\n    }\r\n\r\n    for (var charCode in differences) {\r\n      unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap);\r\n\r\n      if (unicode !== -1) {\r\n        toFontChar[+charCode] = unicode;\r\n      }\r\n    }\r\n\r\n    return toFontChar;\r\n  }\r\n\r\n  function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) {\r\n    var newMap = Object.create(null);\r\n    var toFontChar = [];\r\n    var privateUseAreaIndex = 0;\r\n    var nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];\r\n    var privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];\r\n\r\n    for (var originalCharCode in charCodeToGlyphId) {\r\n      originalCharCode |= 0;\r\n      var glyphId = charCodeToGlyphId[originalCharCode];\r\n\r\n      if (!hasGlyph(glyphId)) {\r\n        continue;\r\n      }\r\n\r\n      if (nextAvailableFontCharCode > privateUseOffetEnd) {\r\n        privateUseAreaIndex++;\r\n\r\n        if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) {\r\n          (0, _util.warn)(\"Ran out of space in font private use area.\");\r\n          break;\r\n        }\r\n\r\n        nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];\r\n        privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];\r\n      }\r\n\r\n      var fontCharCode = nextAvailableFontCharCode++;\r\n\r\n      if (glyphId === 0) {\r\n        glyphId = newGlyphZeroId;\r\n      }\r\n\r\n      newMap[fontCharCode] = glyphId;\r\n      toFontChar[originalCharCode] = fontCharCode;\r\n    }\r\n\r\n    return {\r\n      toFontChar: toFontChar,\r\n      charCodeToGlyphId: newMap,\r\n      nextAvailableFontCharCode: nextAvailableFontCharCode\r\n    };\r\n  }\r\n\r\n  function getRanges(glyphs, numGlyphs) {\r\n    var codes = [];\r\n\r\n    for (var charCode in glyphs) {\r\n      if (glyphs[charCode] >= numGlyphs) {\r\n        continue;\r\n      }\r\n\r\n      codes.push({\r\n        fontCharCode: charCode | 0,\r\n        glyphId: glyphs[charCode]\r\n      });\r\n    }\r\n\r\n    if (codes.length === 0) {\r\n      codes.push({\r\n        fontCharCode: 0,\r\n        glyphId: 0\r\n      });\r\n    }\r\n\r\n    codes.sort(function fontGetRangesSort(a, b) {\r\n      return a.fontCharCode - b.fontCharCode;\r\n    });\r\n    var ranges = [];\r\n    var length = codes.length;\r\n\r\n    for (var n = 0; n < length;) {\r\n      var start = codes[n].fontCharCode;\r\n      var codeIndices = [codes[n].glyphId];\r\n      ++n;\r\n      var end = start;\r\n\r\n      while (n < length && end + 1 === codes[n].fontCharCode) {\r\n        codeIndices.push(codes[n].glyphId);\r\n        ++end;\r\n        ++n;\r\n\r\n        if (end === 0xffff) {\r\n          break;\r\n        }\r\n      }\r\n\r\n      ranges.push([start, end, codeIndices]);\r\n    }\r\n\r\n    return ranges;\r\n  }\r\n\r\n  function createCmapTable(glyphs, numGlyphs) {\r\n    var ranges = getRanges(glyphs, numGlyphs);\r\n    var numTables = ranges[ranges.length - 1][1] > 0xffff ? 2 : 1;\r\n    var cmap = \"\\x00\\x00\" + string16(numTables) + \"\\x00\\x03\" + \"\\x00\\x01\" + (0, _util.string32)(4 + numTables * 8);\r\n    var i, ii, j, jj;\r\n\r\n    for (i = ranges.length - 1; i >= 0; --i) {\r\n      if (ranges[i][0] <= 0xffff) {\r\n        break;\r\n      }\r\n    }\r\n\r\n    var bmpLength = i + 1;\r\n\r\n    if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) {\r\n      ranges[i][1] = 0xfffe;\r\n    }\r\n\r\n    var trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0;\r\n    var segCount = bmpLength + trailingRangesCount;\r\n    var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2);\r\n    var startCount = \"\";\r\n    var endCount = \"\";\r\n    var idDeltas = \"\";\r\n    var idRangeOffsets = \"\";\r\n    var glyphsIds = \"\";\r\n    var bias = 0;\r\n    var range, start, end, codes;\r\n\r\n    for (i = 0, ii = bmpLength; i < ii; i++) {\r\n      range = ranges[i];\r\n      start = range[0];\r\n      end = range[1];\r\n      startCount += string16(start);\r\n      endCount += string16(end);\r\n      codes = range[2];\r\n      var contiguous = true;\r\n\r\n      for (j = 1, jj = codes.length; j < jj; ++j) {\r\n        if (codes[j] !== codes[j - 1] + 1) {\r\n          contiguous = false;\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (!contiguous) {\r\n        var offset = (segCount - i) * 2 + bias * 2;\r\n        bias += end - start + 1;\r\n        idDeltas += string16(0);\r\n        idRangeOffsets += string16(offset);\r\n\r\n        for (j = 0, jj = codes.length; j < jj; ++j) {\r\n          glyphsIds += string16(codes[j]);\r\n        }\r\n      } else {\r\n        var startCode = codes[0];\r\n        idDeltas += string16(startCode - start & 0xffff);\r\n        idRangeOffsets += string16(0);\r\n      }\r\n    }\r\n\r\n    if (trailingRangesCount > 0) {\r\n      endCount += \"\\xFF\\xFF\";\r\n      startCount += \"\\xFF\\xFF\";\r\n      idDeltas += \"\\x00\\x01\";\r\n      idRangeOffsets += \"\\x00\\x00\";\r\n    }\r\n\r\n    var format314 = \"\\x00\\x00\" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + \"\\x00\\x00\" + startCount + idDeltas + idRangeOffsets + glyphsIds;\r\n    var format31012 = \"\";\r\n    var header31012 = \"\";\r\n\r\n    if (numTables > 1) {\r\n      cmap += \"\\x00\\x03\" + \"\\x00\\x0A\" + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length);\r\n      format31012 = \"\";\r\n\r\n      for (i = 0, ii = ranges.length; i < ii; i++) {\r\n        range = ranges[i];\r\n        start = range[0];\r\n        codes = range[2];\r\n        var code = codes[0];\r\n\r\n        for (j = 1, jj = codes.length; j < jj; ++j) {\r\n          if (codes[j] !== codes[j - 1] + 1) {\r\n            end = range[0] + j - 1;\r\n            format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code);\r\n            start = end + 1;\r\n            code = codes[j];\r\n          }\r\n        }\r\n\r\n        format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code);\r\n      }\r\n\r\n      header31012 = \"\\x00\\x0C\" + \"\\x00\\x00\" + (0, _util.string32)(format31012.length + 16) + \"\\x00\\x00\\x00\\x00\" + (0, _util.string32)(format31012.length / 12);\r\n    }\r\n\r\n    return cmap + \"\\x00\\x04\" + string16(format314.length + 4) + format314 + header31012 + format31012;\r\n  }\r\n\r\n  function validateOS2Table(os2, file) {\r\n    file.pos = (file.start || 0) + os2.offset;\r\n    var version = file.getUint16();\r\n    file.skip(60);\r\n    var selection = file.getUint16();\r\n\r\n    if (version < 4 && selection & 0x0300) {\r\n      return false;\r\n    }\r\n\r\n    var firstChar = file.getUint16();\r\n    var lastChar = file.getUint16();\r\n\r\n    if (firstChar > lastChar) {\r\n      return false;\r\n    }\r\n\r\n    file.skip(6);\r\n    var usWinAscent = file.getUint16();\r\n\r\n    if (usWinAscent === 0) {\r\n      return false;\r\n    }\r\n\r\n    os2.data[8] = os2.data[9] = 0;\r\n    return true;\r\n  }\r\n\r\n  function createOS2Table(properties, charstrings, override) {\r\n    override = override || {\r\n      unitsPerEm: 0,\r\n      yMax: 0,\r\n      yMin: 0,\r\n      ascent: 0,\r\n      descent: 0\r\n    };\r\n    var ulUnicodeRange1 = 0;\r\n    var ulUnicodeRange2 = 0;\r\n    var ulUnicodeRange3 = 0;\r\n    var ulUnicodeRange4 = 0;\r\n    var firstCharIndex = null;\r\n    var lastCharIndex = 0;\r\n\r\n    if (charstrings) {\r\n      for (var code in charstrings) {\r\n        code |= 0;\r\n\r\n        if (firstCharIndex > code || !firstCharIndex) {\r\n          firstCharIndex = code;\r\n        }\r\n\r\n        if (lastCharIndex < code) {\r\n          lastCharIndex = code;\r\n        }\r\n\r\n        var position = (0, _unicode.getUnicodeRangeFor)(code);\r\n\r\n        if (position < 32) {\r\n          ulUnicodeRange1 |= 1 << position;\r\n        } else if (position < 64) {\r\n          ulUnicodeRange2 |= 1 << position - 32;\r\n        } else if (position < 96) {\r\n          ulUnicodeRange3 |= 1 << position - 64;\r\n        } else if (position < 123) {\r\n          ulUnicodeRange4 |= 1 << position - 96;\r\n        } else {\r\n          throw new _util.FormatError(\"Unicode ranges Bits > 123 are reserved for internal usage\");\r\n        }\r\n      }\r\n\r\n      if (lastCharIndex > 0xffff) {\r\n        lastCharIndex = 0xffff;\r\n      }\r\n    } else {\r\n      firstCharIndex = 0;\r\n      lastCharIndex = 255;\r\n    }\r\n\r\n    var bbox = properties.bbox || [0, 0, 0, 0];\r\n    var unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];\r\n    var scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS;\r\n    var typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3]));\r\n    var typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1]));\r\n\r\n    if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) {\r\n      typoDescent = -typoDescent;\r\n    }\r\n\r\n    var winAscent = override.yMax || typoAscent;\r\n    var winDescent = -override.yMin || -typoDescent;\r\n    return \"\\x00\\x03\" + \"\\x02\\x24\" + \"\\x01\\xF4\" + \"\\x00\\x05\" + \"\\x00\\x00\" + \"\\x02\\x8A\" + \"\\x02\\xBB\" + \"\\x00\\x00\" + \"\\x00\\x8C\" + \"\\x02\\x8A\" + \"\\x02\\xBB\" + \"\\x00\\x00\" + \"\\x01\\xDF\" + \"\\x00\\x31\" + \"\\x01\\x02\" + \"\\x00\\x00\" + \"\\x00\\x00\\x06\" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + \"\\x00\\x00\\x00\\x00\\x00\\x00\" + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + \"\\x2A\\x32\\x31\\x2A\" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + \"\\x00\\x64\" + string16(winAscent) + string16(winDescent) + \"\\x00\\x00\\x00\\x00\" + \"\\x00\\x00\\x00\\x00\" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + \"\\x00\\x03\";\r\n  }\r\n\r\n  function createPostTable(properties) {\r\n    var angle = Math.floor(properties.italicAngle * Math.pow(2, 16));\r\n    return \"\\x00\\x03\\x00\\x00\" + (0, _util.string32)(angle) + \"\\x00\\x00\" + \"\\x00\\x00\" + (0, _util.string32)(properties.fixedPitch) + \"\\x00\\x00\\x00\\x00\" + \"\\x00\\x00\\x00\\x00\" + \"\\x00\\x00\\x00\\x00\" + \"\\x00\\x00\\x00\\x00\";\r\n  }\r\n\r\n  function createNameTable(name, proto) {\r\n    if (!proto) {\r\n      proto = [[], []];\r\n    }\r\n\r\n    var strings = [proto[0][0] || \"Original licence\", proto[0][1] || name, proto[0][2] || \"Unknown\", proto[0][3] || \"uniqueID\", proto[0][4] || name, proto[0][5] || \"Version 0.11\", proto[0][6] || \"\", proto[0][7] || \"Unknown\", proto[0][8] || \"Unknown\", proto[0][9] || \"Unknown\"];\r\n    var stringsUnicode = [];\r\n    var i, ii, j, jj, str;\r\n\r\n    for (i = 0, ii = strings.length; i < ii; i++) {\r\n      str = proto[1][i] || strings[i];\r\n      var strBufUnicode = [];\r\n\r\n      for (j = 0, jj = str.length; j < jj; j++) {\r\n        strBufUnicode.push(string16(str.charCodeAt(j)));\r\n      }\r\n\r\n      stringsUnicode.push(strBufUnicode.join(\"\"));\r\n    }\r\n\r\n    var names = [strings, stringsUnicode];\r\n    var platforms = [\"\\x00\\x01\", \"\\x00\\x03\"];\r\n    var encodings = [\"\\x00\\x00\", \"\\x00\\x01\"];\r\n    var languages = [\"\\x00\\x00\", \"\\x04\\x09\"];\r\n    var namesRecordCount = strings.length * platforms.length;\r\n    var nameTable = \"\\x00\\x00\" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6);\r\n    var strOffset = 0;\r\n\r\n    for (i = 0, ii = platforms.length; i < ii; i++) {\r\n      var strs = names[i];\r\n\r\n      for (j = 0, jj = strs.length; j < jj; j++) {\r\n        str = strs[j];\r\n        var nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset);\r\n        nameTable += nameRecord;\r\n        strOffset += str.length;\r\n      }\r\n    }\r\n\r\n    nameTable += strings.join(\"\") + stringsUnicode.join(\"\");\r\n    return nameTable;\r\n  }\r\n\r\n  Font.prototype = {\r\n    name: null,\r\n    font: null,\r\n    mimetype: null,\r\n    disableFontFace: false,\r\n\r\n    get renderer() {\r\n      var renderer = _font_renderer.FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED);\r\n\r\n      return (0, _util.shadow)(this, \"renderer\", renderer);\r\n    },\r\n\r\n    exportData: function exportData() {\r\n      var extraProperties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n      var exportDataProperties = extraProperties ? [].concat(EXPORT_DATA_PROPERTIES, EXPORT_DATA_EXTRA_PROPERTIES) : EXPORT_DATA_PROPERTIES;\r\n      var data = Object.create(null);\r\n      var property, value;\r\n\r\n      var _iterator = _createForOfIteratorHelper(exportDataProperties),\r\n          _step;\r\n\r\n      try {\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          property = _step.value;\r\n          value = this[property];\r\n\r\n          if (value !== undefined) {\r\n            data[property] = value;\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n\r\n      return data;\r\n    },\r\n    fallbackToSystemFont: function fallbackToSystemFont(properties) {\r\n      var _this = this;\r\n\r\n      this.missingFile = true;\r\n      var name = this.name;\r\n      var type = this.type;\r\n      var subtype = this.subtype;\r\n      var fontName = name.replace(/[,_]/g, \"-\").replace(/\\s/g, \"\");\r\n      var stdFontMap = (0, _standard_fonts.getStdFontMap)(),\r\n          nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)();\r\n      var isStandardFont = !!stdFontMap[fontName];\r\n      var isMappedToStandardFont = !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]);\r\n      fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;\r\n      this.bold = fontName.search(/bold/gi) !== -1;\r\n      this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1;\r\n      this.black = name.search(/Black/g) !== -1;\r\n      var isNarrow = name.search(/Narrow/g) !== -1;\r\n      this.remeasure = (!isStandardFont || isNarrow) && Object.keys(this.widths).length > 0;\r\n\r\n      if ((isStandardFont || isMappedToStandardFont) && type === \"CIDFontType2\" && this.cidEncoding.startsWith(\"Identity-\")) {\r\n        var GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)(),\r\n            cidToGidMap = properties.cidToGidMap;\r\n        var map = [];\r\n\r\n        for (var charCode in GlyphMapForStandardFonts) {\r\n          map[+charCode] = GlyphMapForStandardFonts[charCode];\r\n        }\r\n\r\n        if (/Arial-?Black/i.test(name)) {\r\n          var SupplementalGlyphMapForArialBlack = (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)();\r\n\r\n          for (var _charCode in SupplementalGlyphMapForArialBlack) {\r\n            map[+_charCode] = SupplementalGlyphMapForArialBlack[_charCode];\r\n          }\r\n        } else if (/Calibri/i.test(name)) {\r\n          var SupplementalGlyphMapForCalibri = (0, _standard_fonts.getSupplementalGlyphMapForCalibri)();\r\n\r\n          for (var _charCode2 in SupplementalGlyphMapForCalibri) {\r\n            map[+_charCode2] = SupplementalGlyphMapForCalibri[_charCode2];\r\n          }\r\n        }\r\n\r\n        if (cidToGidMap) {\r\n          for (var _charCode3 in map) {\r\n            var cid = map[_charCode3];\r\n\r\n            if (cidToGidMap[cid] !== undefined) {\r\n              map[+_charCode3] = cidToGidMap[cid];\r\n            }\r\n          }\r\n        }\r\n\r\n        var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap;\r\n\r\n        if (!isIdentityUnicode) {\r\n          this.toUnicode.forEach(function (charCode, unicodeCharCode) {\r\n            map[+charCode] = unicodeCharCode;\r\n          });\r\n        }\r\n\r\n        this.toFontChar = map;\r\n        this.toUnicode = new ToUnicodeMap(map);\r\n      } else if (/Symbol/i.test(fontName)) {\r\n        this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);\r\n      } else if (/Dingbats/i.test(fontName)) {\r\n        if (/Wingdings/i.test(name)) {\r\n          (0, _util.warn)(\"Non-embedded Wingdings font, falling back to ZapfDingbats.\");\r\n        }\r\n\r\n        this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences);\r\n      } else if (isStandardFont) {\r\n        this.toFontChar = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);\r\n      } else {\r\n        var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\r\n        var _map = [];\r\n        this.toUnicode.forEach(function (charCode, unicodeCharCode) {\r\n          if (!_this.composite) {\r\n            var glyphName = _this.differences[charCode] || _this.defaultEncoding[charCode];\r\n            var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);\r\n\r\n            if (unicode !== -1) {\r\n              unicodeCharCode = unicode;\r\n            }\r\n          }\r\n\r\n          _map[+charCode] = unicodeCharCode;\r\n        });\r\n\r\n        if (this.composite && this.toUnicode instanceof IdentityToUnicodeMap) {\r\n          if (/Verdana/i.test(name)) {\r\n            var _GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();\r\n\r\n            for (var _charCode4 in _GlyphMapForStandardFonts) {\r\n              _map[+_charCode4] = _GlyphMapForStandardFonts[_charCode4];\r\n            }\r\n          }\r\n        }\r\n\r\n        this.toFontChar = _map;\r\n      }\r\n\r\n      this.loadedName = fontName.split(\"-\")[0];\r\n      this.fontType = getFontType(type, subtype);\r\n    },\r\n    checkAndRepair: function Font_checkAndRepair(name, font, properties) {\r\n      var VALID_TABLES = [\"OS/2\", \"cmap\", \"head\", \"hhea\", \"hmtx\", \"maxp\", \"name\", \"post\", \"loca\", \"glyf\", \"fpgm\", \"prep\", \"cvt \", \"CFF \"];\r\n\r\n      function readTables(file, numTables) {\r\n        var tables = Object.create(null);\r\n        tables[\"OS/2\"] = null;\r\n        tables.cmap = null;\r\n        tables.head = null;\r\n        tables.hhea = null;\r\n        tables.hmtx = null;\r\n        tables.maxp = null;\r\n        tables.name = null;\r\n        tables.post = null;\r\n\r\n        for (var i = 0; i < numTables; i++) {\r\n          var table = readTableEntry(file);\r\n\r\n          if (!VALID_TABLES.includes(table.tag)) {\r\n            continue;\r\n          }\r\n\r\n          if (table.length === 0) {\r\n            continue;\r\n          }\r\n\r\n          tables[table.tag] = table;\r\n        }\r\n\r\n        return tables;\r\n      }\r\n\r\n      function readTableEntry(file) {\r\n        var tag = (0, _util.bytesToString)(file.getBytes(4));\r\n        var checksum = file.getInt32() >>> 0;\r\n        var offset = file.getInt32() >>> 0;\r\n        var length = file.getInt32() >>> 0;\r\n        var previousPosition = file.pos;\r\n        file.pos = file.start ? file.start : 0;\r\n        file.skip(offset);\r\n        var data = file.getBytes(length);\r\n        file.pos = previousPosition;\r\n\r\n        if (tag === \"head\") {\r\n          data[8] = data[9] = data[10] = data[11] = 0;\r\n          data[17] |= 0x20;\r\n        }\r\n\r\n        return {\r\n          tag: tag,\r\n          checksum: checksum,\r\n          length: length,\r\n          offset: offset,\r\n          data: data\r\n        };\r\n      }\r\n\r\n      function readOpenTypeHeader(ttf) {\r\n        return {\r\n          version: (0, _util.bytesToString)(ttf.getBytes(4)),\r\n          numTables: ttf.getUint16(),\r\n          searchRange: ttf.getUint16(),\r\n          entrySelector: ttf.getUint16(),\r\n          rangeShift: ttf.getUint16()\r\n        };\r\n      }\r\n\r\n      function readTrueTypeCollectionHeader(ttc) {\r\n        var ttcTag = (0, _util.bytesToString)(ttc.getBytes(4));\r\n        (0, _util.assert)(ttcTag === \"ttcf\", \"Must be a TrueType Collection font.\");\r\n        var majorVersion = ttc.getUint16();\r\n        var minorVersion = ttc.getUint16();\r\n        var numFonts = ttc.getInt32() >>> 0;\r\n        var offsetTable = [];\r\n\r\n        for (var i = 0; i < numFonts; i++) {\r\n          offsetTable.push(ttc.getInt32() >>> 0);\r\n        }\r\n\r\n        var header = {\r\n          ttcTag: ttcTag,\r\n          majorVersion: majorVersion,\r\n          minorVersion: minorVersion,\r\n          numFonts: numFonts,\r\n          offsetTable: offsetTable\r\n        };\r\n\r\n        switch (majorVersion) {\r\n          case 1:\r\n            return header;\r\n\r\n          case 2:\r\n            header.dsigTag = ttc.getInt32() >>> 0;\r\n            header.dsigLength = ttc.getInt32() >>> 0;\r\n            header.dsigOffset = ttc.getInt32() >>> 0;\r\n            return header;\r\n        }\r\n\r\n        throw new _util.FormatError(\"Invalid TrueType Collection majorVersion: \".concat(majorVersion, \".\"));\r\n      }\r\n\r\n      function readTrueTypeCollectionData(ttc, fontName) {\r\n        var _readTrueTypeCollecti = readTrueTypeCollectionHeader(ttc),\r\n            numFonts = _readTrueTypeCollecti.numFonts,\r\n            offsetTable = _readTrueTypeCollecti.offsetTable;\r\n\r\n        for (var i = 0; i < numFonts; i++) {\r\n          ttc.pos = (ttc.start || 0) + offsetTable[i];\r\n          var potentialHeader = readOpenTypeHeader(ttc);\r\n          var potentialTables = readTables(ttc, potentialHeader.numTables);\r\n\r\n          if (!potentialTables.name) {\r\n            throw new _util.FormatError('TrueType Collection font must contain a \"name\" table.');\r\n          }\r\n\r\n          var nameTable = readNameTable(potentialTables.name);\r\n\r\n          for (var j = 0, jj = nameTable.length; j < jj; j++) {\r\n            for (var k = 0, kk = nameTable[j].length; k < kk; k++) {\r\n              var nameEntry = nameTable[j][k];\r\n\r\n              if (nameEntry && nameEntry.replace(/\\s/g, \"\") === fontName) {\r\n                return {\r\n                  header: potentialHeader,\r\n                  tables: potentialTables\r\n                };\r\n              }\r\n            }\r\n          }\r\n        }\r\n\r\n        throw new _util.FormatError(\"TrueType Collection does not contain \\\"\".concat(fontName, \"\\\" font.\"));\r\n      }\r\n\r\n      function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) {\r\n        if (!cmap) {\r\n          (0, _util.warn)(\"No cmap table available.\");\r\n          return {\r\n            platformId: -1,\r\n            encodingId: -1,\r\n            mappings: [],\r\n            hasShortCmap: false\r\n          };\r\n        }\r\n\r\n        var segment;\r\n        var start = (file.start ? file.start : 0) + cmap.offset;\r\n        file.pos = start;\r\n        file.skip(2);\r\n        var numTables = file.getUint16();\r\n        var potentialTable;\r\n        var canBreak = false;\r\n\r\n        for (var i = 0; i < numTables; i++) {\r\n          var platformId = file.getUint16();\r\n          var encodingId = file.getUint16();\r\n          var offset = file.getInt32() >>> 0;\r\n          var useTable = false;\r\n\r\n          if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) {\r\n            continue;\r\n          }\r\n\r\n          if (platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 3)) {\r\n            useTable = true;\r\n          } else if (platformId === 1 && encodingId === 0) {\r\n            useTable = true;\r\n          } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) {\r\n            useTable = true;\r\n\r\n            if (!isSymbolicFont) {\r\n              canBreak = true;\r\n            }\r\n          } else if (isSymbolicFont && platformId === 3 && encodingId === 0) {\r\n            useTable = true;\r\n            canBreak = true;\r\n          }\r\n\r\n          if (useTable) {\r\n            potentialTable = {\r\n              platformId: platformId,\r\n              encodingId: encodingId,\r\n              offset: offset\r\n            };\r\n          }\r\n\r\n          if (canBreak) {\r\n            break;\r\n          }\r\n        }\r\n\r\n        if (potentialTable) {\r\n          file.pos = start + potentialTable.offset;\r\n        }\r\n\r\n        if (!potentialTable || file.peekByte() === -1) {\r\n          (0, _util.warn)(\"Could not find a preferred cmap table.\");\r\n          return {\r\n            platformId: -1,\r\n            encodingId: -1,\r\n            mappings: [],\r\n            hasShortCmap: false\r\n          };\r\n        }\r\n\r\n        var format = file.getUint16();\r\n        file.skip(2 + 2);\r\n        var hasShortCmap = false;\r\n        var mappings = [];\r\n        var j, glyphId;\r\n\r\n        if (format === 0) {\r\n          for (j = 0; j < 256; j++) {\r\n            var index = file.getByte();\r\n\r\n            if (!index) {\r\n              continue;\r\n            }\r\n\r\n            mappings.push({\r\n              charCode: j,\r\n              glyphId: index\r\n            });\r\n          }\r\n\r\n          hasShortCmap = true;\r\n        } else if (format === 4) {\r\n          var segCount = file.getUint16() >> 1;\r\n          file.skip(6);\r\n          var segIndex,\r\n              segments = [];\r\n\r\n          for (segIndex = 0; segIndex < segCount; segIndex++) {\r\n            segments.push({\r\n              end: file.getUint16()\r\n            });\r\n          }\r\n\r\n          file.skip(2);\r\n\r\n          for (segIndex = 0; segIndex < segCount; segIndex++) {\r\n            segments[segIndex].start = file.getUint16();\r\n          }\r\n\r\n          for (segIndex = 0; segIndex < segCount; segIndex++) {\r\n            segments[segIndex].delta = file.getUint16();\r\n          }\r\n\r\n          var offsetsCount = 0;\r\n\r\n          for (segIndex = 0; segIndex < segCount; segIndex++) {\r\n            segment = segments[segIndex];\r\n            var rangeOffset = file.getUint16();\r\n\r\n            if (!rangeOffset) {\r\n              segment.offsetIndex = -1;\r\n              continue;\r\n            }\r\n\r\n            var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex);\r\n            segment.offsetIndex = offsetIndex;\r\n            offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1);\r\n          }\r\n\r\n          var offsets = [];\r\n\r\n          for (j = 0; j < offsetsCount; j++) {\r\n            offsets.push(file.getUint16());\r\n          }\r\n\r\n          for (segIndex = 0; segIndex < segCount; segIndex++) {\r\n            segment = segments[segIndex];\r\n            start = segment.start;\r\n            var end = segment.end;\r\n            var delta = segment.delta;\r\n            offsetIndex = segment.offsetIndex;\r\n\r\n            for (j = start; j <= end; j++) {\r\n              if (j === 0xffff) {\r\n                continue;\r\n              }\r\n\r\n              glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start];\r\n              glyphId = glyphId + delta & 0xffff;\r\n              mappings.push({\r\n                charCode: j,\r\n                glyphId: glyphId\r\n              });\r\n            }\r\n          }\r\n        } else if (format === 6) {\r\n          var firstCode = file.getUint16();\r\n          var entryCount = file.getUint16();\r\n\r\n          for (j = 0; j < entryCount; j++) {\r\n            glyphId = file.getUint16();\r\n            var charCode = firstCode + j;\r\n            mappings.push({\r\n              charCode: charCode,\r\n              glyphId: glyphId\r\n            });\r\n          }\r\n        } else {\r\n          (0, _util.warn)(\"cmap table has unsupported format: \" + format);\r\n          return {\r\n            platformId: -1,\r\n            encodingId: -1,\r\n            mappings: [],\r\n            hasShortCmap: false\r\n          };\r\n        }\r\n\r\n        mappings.sort(function (a, b) {\r\n          return a.charCode - b.charCode;\r\n        });\r\n\r\n        for (i = 1; i < mappings.length; i++) {\r\n          if (mappings[i - 1].charCode === mappings[i].charCode) {\r\n            mappings.splice(i, 1);\r\n            i--;\r\n          }\r\n        }\r\n\r\n        return {\r\n          platformId: potentialTable.platformId,\r\n          encodingId: potentialTable.encodingId,\r\n          mappings: mappings,\r\n          hasShortCmap: hasShortCmap\r\n        };\r\n      }\r\n\r\n      function sanitizeMetrics(file, header, metrics, numGlyphs, dupFirstEntry) {\r\n        if (!header) {\r\n          if (metrics) {\r\n            metrics.data = null;\r\n          }\r\n\r\n          return;\r\n        }\r\n\r\n        file.pos = (file.start ? file.start : 0) + header.offset;\r\n        file.pos += 4;\r\n        file.pos += 2;\r\n        file.pos += 2;\r\n        file.pos += 2;\r\n        file.pos += 2;\r\n        file.pos += 2;\r\n        file.pos += 2;\r\n        file.pos += 2;\r\n        file.pos += 2;\r\n        file.pos += 2;\r\n        file.pos += 2;\r\n        file.pos += 8;\r\n        file.pos += 2;\r\n        var numOfMetrics = file.getUint16();\r\n\r\n        if (numOfMetrics > numGlyphs) {\r\n          (0, _util.info)(\"The numOfMetrics (\" + numOfMetrics + \") should not be \" + \"greater than the numGlyphs (\" + numGlyphs + \")\");\r\n          numOfMetrics = numGlyphs;\r\n          header.data[34] = (numOfMetrics & 0xff00) >> 8;\r\n          header.data[35] = numOfMetrics & 0x00ff;\r\n        }\r\n\r\n        var numOfSidebearings = numGlyphs - numOfMetrics;\r\n        var numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1);\r\n\r\n        if (numMissing > 0) {\r\n          var entries = new Uint8Array(metrics.length + numMissing * 2);\r\n          entries.set(metrics.data);\r\n\r\n          if (dupFirstEntry) {\r\n            entries[metrics.length] = metrics.data[2];\r\n            entries[metrics.length + 1] = metrics.data[3];\r\n          }\r\n\r\n          metrics.data = entries;\r\n        }\r\n      }\r\n\r\n      function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) {\r\n        var glyphProfile = {\r\n          length: 0,\r\n          sizeOfInstructions: 0\r\n        };\r\n\r\n        if (sourceEnd - sourceStart <= 12) {\r\n          return glyphProfile;\r\n        }\r\n\r\n        var glyf = source.subarray(sourceStart, sourceEnd);\r\n        var contoursCount = signedInt16(glyf[0], glyf[1]);\r\n\r\n        if (contoursCount < 0) {\r\n          contoursCount = -1;\r\n          writeSignedInt16(glyf, 0, contoursCount);\r\n          dest.set(glyf, destStart);\r\n          glyphProfile.length = glyf.length;\r\n          return glyphProfile;\r\n        }\r\n\r\n        var i,\r\n            j = 10,\r\n            flagsCount = 0;\r\n\r\n        for (i = 0; i < contoursCount; i++) {\r\n          var endPoint = glyf[j] << 8 | glyf[j + 1];\r\n          flagsCount = endPoint + 1;\r\n          j += 2;\r\n        }\r\n\r\n        var instructionsStart = j;\r\n        var instructionsLength = glyf[j] << 8 | glyf[j + 1];\r\n        glyphProfile.sizeOfInstructions = instructionsLength;\r\n        j += 2 + instructionsLength;\r\n        var instructionsEnd = j;\r\n        var coordinatesLength = 0;\r\n\r\n        for (i = 0; i < flagsCount; i++) {\r\n          var flag = glyf[j++];\r\n\r\n          if (flag & 0xc0) {\r\n            glyf[j - 1] = flag & 0x3f;\r\n          }\r\n\r\n          var xLength = 2;\r\n\r\n          if (flag & 2) {\r\n            xLength = 1;\r\n          } else if (flag & 16) {\r\n            xLength = 0;\r\n          }\r\n\r\n          var yLength = 2;\r\n\r\n          if (flag & 4) {\r\n            yLength = 1;\r\n          } else if (flag & 32) {\r\n            yLength = 0;\r\n          }\r\n\r\n          var xyLength = xLength + yLength;\r\n          coordinatesLength += xyLength;\r\n\r\n          if (flag & 8) {\r\n            var repeat = glyf[j++];\r\n            i += repeat;\r\n            coordinatesLength += repeat * xyLength;\r\n          }\r\n        }\r\n\r\n        if (coordinatesLength === 0) {\r\n          return glyphProfile;\r\n        }\r\n\r\n        var glyphDataLength = j + coordinatesLength;\r\n\r\n        if (glyphDataLength > glyf.length) {\r\n          return glyphProfile;\r\n        }\r\n\r\n        if (!hintsValid && instructionsLength > 0) {\r\n          dest.set(glyf.subarray(0, instructionsStart), destStart);\r\n          dest.set([0, 0], destStart + instructionsStart);\r\n          dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2);\r\n          glyphDataLength -= instructionsLength;\r\n\r\n          if (glyf.length - glyphDataLength > 3) {\r\n            glyphDataLength = glyphDataLength + 3 & ~3;\r\n          }\r\n\r\n          glyphProfile.length = glyphDataLength;\r\n          return glyphProfile;\r\n        }\r\n\r\n        if (glyf.length - glyphDataLength > 3) {\r\n          glyphDataLength = glyphDataLength + 3 & ~3;\r\n          dest.set(glyf.subarray(0, glyphDataLength), destStart);\r\n          glyphProfile.length = glyphDataLength;\r\n          return glyphProfile;\r\n        }\r\n\r\n        dest.set(glyf, destStart);\r\n        glyphProfile.length = glyf.length;\r\n        return glyphProfile;\r\n      }\r\n\r\n      function sanitizeHead(head, numGlyphs, locaLength) {\r\n        var data = head.data;\r\n        var version = int32(data[0], data[1], data[2], data[3]);\r\n\r\n        if (version >> 16 !== 1) {\r\n          (0, _util.info)(\"Attempting to fix invalid version in head table: \" + version);\r\n          data[0] = 0;\r\n          data[1] = 1;\r\n          data[2] = 0;\r\n          data[3] = 0;\r\n        }\r\n\r\n        var indexToLocFormat = int16(data[50], data[51]);\r\n\r\n        if (indexToLocFormat < 0 || indexToLocFormat > 1) {\r\n          (0, _util.info)(\"Attempting to fix invalid indexToLocFormat in head table: \" + indexToLocFormat);\r\n          var numGlyphsPlusOne = numGlyphs + 1;\r\n\r\n          if (locaLength === numGlyphsPlusOne << 1) {\r\n            data[50] = 0;\r\n            data[51] = 0;\r\n          } else if (locaLength === numGlyphsPlusOne << 2) {\r\n            data[50] = 0;\r\n            data[51] = 1;\r\n          } else {\r\n            throw new _util.FormatError(\"Could not fix indexToLocFormat: \" + indexToLocFormat);\r\n          }\r\n        }\r\n      }\r\n\r\n      function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) {\r\n        var itemSize, itemDecode, itemEncode;\r\n\r\n        if (isGlyphLocationsLong) {\r\n          itemSize = 4;\r\n\r\n          itemDecode = function fontItemDecodeLong(data, offset) {\r\n            return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];\r\n          };\r\n\r\n          itemEncode = function fontItemEncodeLong(data, offset, value) {\r\n            data[offset] = value >>> 24 & 0xff;\r\n            data[offset + 1] = value >> 16 & 0xff;\r\n            data[offset + 2] = value >> 8 & 0xff;\r\n            data[offset + 3] = value & 0xff;\r\n          };\r\n        } else {\r\n          itemSize = 2;\r\n\r\n          itemDecode = function fontItemDecode(data, offset) {\r\n            return data[offset] << 9 | data[offset + 1] << 1;\r\n          };\r\n\r\n          itemEncode = function fontItemEncode(data, offset, value) {\r\n            data[offset] = value >> 9 & 0xff;\r\n            data[offset + 1] = value >> 1 & 0xff;\r\n          };\r\n        }\r\n\r\n        var numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs;\r\n        var locaDataSize = itemSize * (1 + numGlyphsOut);\r\n        var locaData = new Uint8Array(locaDataSize);\r\n        locaData.set(loca.data.subarray(0, locaDataSize));\r\n        loca.data = locaData;\r\n        var oldGlyfData = glyf.data;\r\n        var oldGlyfDataLength = oldGlyfData.length;\r\n        var newGlyfData = new Uint8Array(oldGlyfDataLength);\r\n        var i, j;\r\n        var locaEntries = [];\r\n\r\n        for (i = 0, j = 0; i < numGlyphs + 1; i++, j += itemSize) {\r\n          var offset = itemDecode(locaData, j);\r\n\r\n          if (offset > oldGlyfDataLength) {\r\n            offset = oldGlyfDataLength;\r\n          }\r\n\r\n          locaEntries.push({\r\n            index: i,\r\n            offset: offset,\r\n            endOffset: 0\r\n          });\r\n        }\r\n\r\n        locaEntries.sort(function (a, b) {\r\n          return a.offset - b.offset;\r\n        });\r\n\r\n        for (i = 0; i < numGlyphs; i++) {\r\n          locaEntries[i].endOffset = locaEntries[i + 1].offset;\r\n        }\r\n\r\n        locaEntries.sort(function (a, b) {\r\n          return a.index - b.index;\r\n        });\r\n        var missingGlyphs = Object.create(null);\r\n        var writeOffset = 0;\r\n        itemEncode(locaData, 0, writeOffset);\r\n\r\n        for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {\r\n          var glyphProfile = sanitizeGlyph(oldGlyfData, locaEntries[i].offset, locaEntries[i].endOffset, newGlyfData, writeOffset, hintsValid);\r\n          var newLength = glyphProfile.length;\r\n\r\n          if (newLength === 0) {\r\n            missingGlyphs[i] = true;\r\n          }\r\n\r\n          if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) {\r\n            maxSizeOfInstructions = glyphProfile.sizeOfInstructions;\r\n          }\r\n\r\n          writeOffset += newLength;\r\n          itemEncode(locaData, j, writeOffset);\r\n        }\r\n\r\n        if (writeOffset === 0) {\r\n          var simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]);\r\n\r\n          for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) {\r\n            itemEncode(locaData, j, simpleGlyph.length);\r\n          }\r\n\r\n          glyf.data = simpleGlyph;\r\n        } else if (dupFirstEntry) {\r\n          var firstEntryLength = itemDecode(locaData, itemSize);\r\n\r\n          if (newGlyfData.length > firstEntryLength + writeOffset) {\r\n            glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset);\r\n          } else {\r\n            glyf.data = new Uint8Array(firstEntryLength + writeOffset);\r\n            glyf.data.set(newGlyfData.subarray(0, writeOffset));\r\n          }\r\n\r\n          glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset);\r\n          itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength);\r\n        } else {\r\n          glyf.data = newGlyfData.subarray(0, writeOffset);\r\n        }\r\n\r\n        return {\r\n          missingGlyphs: missingGlyphs,\r\n          maxSizeOfInstructions: maxSizeOfInstructions\r\n        };\r\n      }\r\n\r\n      function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) {\r\n        var start = (font.start ? font.start : 0) + post.offset;\r\n        font.pos = start;\r\n        var length = post.length,\r\n            end = start + length;\r\n        var version = font.getInt32();\r\n        font.skip(28);\r\n        var glyphNames;\r\n        var valid = true;\r\n        var i;\r\n\r\n        switch (version) {\r\n          case 0x00010000:\r\n            glyphNames = MacStandardGlyphOrdering;\r\n            break;\r\n\r\n          case 0x00020000:\r\n            var numGlyphs = font.getUint16();\r\n\r\n            if (numGlyphs !== maxpNumGlyphs) {\r\n              valid = false;\r\n              break;\r\n            }\r\n\r\n            var glyphNameIndexes = [];\r\n\r\n            for (i = 0; i < numGlyphs; ++i) {\r\n              var index = font.getUint16();\r\n\r\n              if (index >= 32768) {\r\n                valid = false;\r\n                break;\r\n              }\r\n\r\n              glyphNameIndexes.push(index);\r\n            }\r\n\r\n            if (!valid) {\r\n              break;\r\n            }\r\n\r\n            var customNames = [];\r\n            var strBuf = [];\r\n\r\n            while (font.pos < end) {\r\n              var stringLength = font.getByte();\r\n              strBuf.length = stringLength;\r\n\r\n              for (i = 0; i < stringLength; ++i) {\r\n                strBuf[i] = String.fromCharCode(font.getByte());\r\n              }\r\n\r\n              customNames.push(strBuf.join(\"\"));\r\n            }\r\n\r\n            glyphNames = [];\r\n\r\n            for (i = 0; i < numGlyphs; ++i) {\r\n              var j = glyphNameIndexes[i];\r\n\r\n              if (j < 258) {\r\n                glyphNames.push(MacStandardGlyphOrdering[j]);\r\n                continue;\r\n              }\r\n\r\n              glyphNames.push(customNames[j - 258]);\r\n            }\r\n\r\n            break;\r\n\r\n          case 0x00030000:\r\n            break;\r\n\r\n          default:\r\n            (0, _util.warn)(\"Unknown/unsupported post table version \" + version);\r\n            valid = false;\r\n\r\n            if (propertiesObj.defaultEncoding) {\r\n              glyphNames = propertiesObj.defaultEncoding;\r\n            }\r\n\r\n            break;\r\n        }\r\n\r\n        propertiesObj.glyphNames = glyphNames;\r\n        return valid;\r\n      }\r\n\r\n      function readNameTable(nameTable) {\r\n        var start = (font.start ? font.start : 0) + nameTable.offset;\r\n        font.pos = start;\r\n        var names = [[], []];\r\n        var length = nameTable.length,\r\n            end = start + length;\r\n        var format = font.getUint16();\r\n        var FORMAT_0_HEADER_LENGTH = 6;\r\n\r\n        if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) {\r\n          return names;\r\n        }\r\n\r\n        var numRecords = font.getUint16();\r\n        var stringsStart = font.getUint16();\r\n        var records = [];\r\n        var NAME_RECORD_LENGTH = 12;\r\n        var i, ii;\r\n\r\n        for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) {\r\n          var r = {\r\n            platform: font.getUint16(),\r\n            encoding: font.getUint16(),\r\n            language: font.getUint16(),\r\n            name: font.getUint16(),\r\n            length: font.getUint16(),\r\n            offset: font.getUint16()\r\n          };\r\n\r\n          if (r.platform === 1 && r.encoding === 0 && r.language === 0 || r.platform === 3 && r.encoding === 1 && r.language === 0x409) {\r\n            records.push(r);\r\n          }\r\n        }\r\n\r\n        for (i = 0, ii = records.length; i < ii; i++) {\r\n          var record = records[i];\r\n\r\n          if (record.length <= 0) {\r\n            continue;\r\n          }\r\n\r\n          var pos = start + stringsStart + record.offset;\r\n\r\n          if (pos + record.length > end) {\r\n            continue;\r\n          }\r\n\r\n          font.pos = pos;\r\n          var nameIndex = record.name;\r\n\r\n          if (record.encoding) {\r\n            var str = \"\";\r\n\r\n            for (var j = 0, jj = record.length; j < jj; j += 2) {\r\n              str += String.fromCharCode(font.getUint16());\r\n            }\r\n\r\n            names[1][nameIndex] = str;\r\n          } else {\r\n            names[0][nameIndex] = (0, _util.bytesToString)(font.getBytes(record.length));\r\n          }\r\n        }\r\n\r\n        return names;\r\n      }\r\n\r\n      var TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2];\r\n\r\n      function sanitizeTTProgram(table, ttContext) {\r\n        var data = table.data;\r\n        var i = 0,\r\n            j,\r\n            n,\r\n            b,\r\n            funcId,\r\n            pc,\r\n            lastEndf = 0,\r\n            lastDeff = 0;\r\n        var stack = [];\r\n        var callstack = [];\r\n        var functionsCalled = [];\r\n        var tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions;\r\n        var inFDEF = false,\r\n            ifLevel = 0,\r\n            inELSE = 0;\r\n\r\n        for (var ii = data.length; i < ii;) {\r\n          var op = data[i++];\r\n\r\n          if (op === 0x40) {\r\n            n = data[i++];\r\n\r\n            if (inFDEF || inELSE) {\r\n              i += n;\r\n            } else {\r\n              for (j = 0; j < n; j++) {\r\n                stack.push(data[i++]);\r\n              }\r\n            }\r\n          } else if (op === 0x41) {\r\n            n = data[i++];\r\n\r\n            if (inFDEF || inELSE) {\r\n              i += n * 2;\r\n            } else {\r\n              for (j = 0; j < n; j++) {\r\n                b = data[i++];\r\n                stack.push(b << 8 | data[i++]);\r\n              }\r\n            }\r\n          } else if ((op & 0xf8) === 0xb0) {\r\n            n = op - 0xb0 + 1;\r\n\r\n            if (inFDEF || inELSE) {\r\n              i += n;\r\n            } else {\r\n              for (j = 0; j < n; j++) {\r\n                stack.push(data[i++]);\r\n              }\r\n            }\r\n          } else if ((op & 0xf8) === 0xb8) {\r\n            n = op - 0xb8 + 1;\r\n\r\n            if (inFDEF || inELSE) {\r\n              i += n * 2;\r\n            } else {\r\n              for (j = 0; j < n; j++) {\r\n                b = data[i++];\r\n                stack.push(b << 8 | data[i++]);\r\n              }\r\n            }\r\n          } else if (op === 0x2b && !tooComplexToFollowFunctions) {\r\n            if (!inFDEF && !inELSE) {\r\n              funcId = stack[stack.length - 1];\r\n\r\n              if (isNaN(funcId)) {\r\n                (0, _util.info)(\"TT: CALL empty stack (or invalid entry).\");\r\n              } else {\r\n                ttContext.functionsUsed[funcId] = true;\r\n\r\n                if (funcId in ttContext.functionsStackDeltas) {\r\n                  var newStackLength = stack.length + ttContext.functionsStackDeltas[funcId];\r\n\r\n                  if (newStackLength < 0) {\r\n                    (0, _util.warn)(\"TT: CALL invalid functions stack delta.\");\r\n                    ttContext.hintsValid = false;\r\n                    return;\r\n                  }\r\n\r\n                  stack.length = newStackLength;\r\n                } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) {\r\n                  callstack.push({\r\n                    data: data,\r\n                    i: i,\r\n                    stackTop: stack.length - 1\r\n                  });\r\n                  functionsCalled.push(funcId);\r\n                  pc = ttContext.functionsDefined[funcId];\r\n\r\n                  if (!pc) {\r\n                    (0, _util.warn)(\"TT: CALL non-existent function\");\r\n                    ttContext.hintsValid = false;\r\n                    return;\r\n                  }\r\n\r\n                  data = pc.data;\r\n                  i = pc.i;\r\n                }\r\n              }\r\n            }\r\n          } else if (op === 0x2c && !tooComplexToFollowFunctions) {\r\n            if (inFDEF || inELSE) {\r\n              (0, _util.warn)(\"TT: nested FDEFs not allowed\");\r\n              tooComplexToFollowFunctions = true;\r\n            }\r\n\r\n            inFDEF = true;\r\n            lastDeff = i;\r\n            funcId = stack.pop();\r\n            ttContext.functionsDefined[funcId] = {\r\n              data: data,\r\n              i: i\r\n            };\r\n          } else if (op === 0x2d) {\r\n            if (inFDEF) {\r\n              inFDEF = false;\r\n              lastEndf = i;\r\n            } else {\r\n              pc = callstack.pop();\r\n\r\n              if (!pc) {\r\n                (0, _util.warn)(\"TT: ENDF bad stack\");\r\n                ttContext.hintsValid = false;\r\n                return;\r\n              }\r\n\r\n              funcId = functionsCalled.pop();\r\n              data = pc.data;\r\n              i = pc.i;\r\n              ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop;\r\n            }\r\n          } else if (op === 0x89) {\r\n            if (inFDEF || inELSE) {\r\n              (0, _util.warn)(\"TT: nested IDEFs not allowed\");\r\n              tooComplexToFollowFunctions = true;\r\n            }\r\n\r\n            inFDEF = true;\r\n            lastDeff = i;\r\n          } else if (op === 0x58) {\r\n            ++ifLevel;\r\n          } else if (op === 0x1b) {\r\n            inELSE = ifLevel;\r\n          } else if (op === 0x59) {\r\n            if (inELSE === ifLevel) {\r\n              inELSE = 0;\r\n            }\r\n\r\n            --ifLevel;\r\n          } else if (op === 0x1c) {\r\n            if (!inFDEF && !inELSE) {\r\n              var offset = stack[stack.length - 1];\r\n\r\n              if (offset > 0) {\r\n                i += offset - 1;\r\n              }\r\n            }\r\n          }\r\n\r\n          if (!inFDEF && !inELSE) {\r\n            var stackDelta = 0;\r\n\r\n            if (op <= 0x8e) {\r\n              stackDelta = TTOpsStackDeltas[op];\r\n            } else if (op >= 0xc0 && op <= 0xdf) {\r\n              stackDelta = -1;\r\n            } else if (op >= 0xe0) {\r\n              stackDelta = -2;\r\n            }\r\n\r\n            if (op >= 0x71 && op <= 0x75) {\r\n              n = stack.pop();\r\n\r\n              if (!isNaN(n)) {\r\n                stackDelta = -n * 2;\r\n              }\r\n            }\r\n\r\n            while (stackDelta < 0 && stack.length > 0) {\r\n              stack.pop();\r\n              stackDelta++;\r\n            }\r\n\r\n            while (stackDelta > 0) {\r\n              stack.push(NaN);\r\n              stackDelta--;\r\n            }\r\n          }\r\n        }\r\n\r\n        ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions;\r\n        var content = [data];\r\n\r\n        if (i > data.length) {\r\n          content.push(new Uint8Array(i - data.length));\r\n        }\r\n\r\n        if (lastDeff > lastEndf) {\r\n          (0, _util.warn)(\"TT: complementing a missing function tail\");\r\n          content.push(new Uint8Array([0x22, 0x2d]));\r\n        }\r\n\r\n        foldTTTable(table, content);\r\n      }\r\n\r\n      function checkInvalidFunctions(ttContext, maxFunctionDefs) {\r\n        if (ttContext.tooComplexToFollowFunctions) {\r\n          return;\r\n        }\r\n\r\n        if (ttContext.functionsDefined.length > maxFunctionDefs) {\r\n          (0, _util.warn)(\"TT: more functions defined than expected\");\r\n          ttContext.hintsValid = false;\r\n          return;\r\n        }\r\n\r\n        for (var j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) {\r\n          if (j > maxFunctionDefs) {\r\n            (0, _util.warn)(\"TT: invalid function id: \" + j);\r\n            ttContext.hintsValid = false;\r\n            return;\r\n          }\r\n\r\n          if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) {\r\n            (0, _util.warn)(\"TT: undefined function: \" + j);\r\n            ttContext.hintsValid = false;\r\n            return;\r\n          }\r\n        }\r\n      }\r\n\r\n      function foldTTTable(table, content) {\r\n        if (content.length > 1) {\r\n          var newLength = 0;\r\n          var j, jj;\r\n\r\n          for (j = 0, jj = content.length; j < jj; j++) {\r\n            newLength += content[j].length;\r\n          }\r\n\r\n          newLength = newLength + 3 & ~3;\r\n          var result = new Uint8Array(newLength);\r\n          var pos = 0;\r\n\r\n          for (j = 0, jj = content.length; j < jj; j++) {\r\n            result.set(content[j], pos);\r\n            pos += content[j].length;\r\n          }\r\n\r\n          table.data = result;\r\n          table.length = newLength;\r\n        }\r\n      }\r\n\r\n      function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) {\r\n        var ttContext = {\r\n          functionsDefined: [],\r\n          functionsUsed: [],\r\n          functionsStackDeltas: [],\r\n          tooComplexToFollowFunctions: false,\r\n          hintsValid: true\r\n        };\r\n\r\n        if (fpgm) {\r\n          sanitizeTTProgram(fpgm, ttContext);\r\n        }\r\n\r\n        if (prep) {\r\n          sanitizeTTProgram(prep, ttContext);\r\n        }\r\n\r\n        if (fpgm) {\r\n          checkInvalidFunctions(ttContext, maxFunctionDefs);\r\n        }\r\n\r\n        if (cvt && cvt.length & 1) {\r\n          var cvtData = new Uint8Array(cvt.length + 1);\r\n          cvtData.set(cvt.data);\r\n          cvt.data = cvtData;\r\n        }\r\n\r\n        return ttContext.hintsValid;\r\n      }\r\n\r\n      font = new _stream.Stream(new Uint8Array(font.getBytes()));\r\n      var header, tables;\r\n\r\n      if (isTrueTypeCollectionFile(font)) {\r\n        var ttcData = readTrueTypeCollectionData(font, this.name);\r\n        header = ttcData.header;\r\n        tables = ttcData.tables;\r\n      } else {\r\n        header = readOpenTypeHeader(font);\r\n        tables = readTables(font, header.numTables);\r\n      }\r\n\r\n      var cff, cffFile;\r\n      var isTrueType = !tables[\"CFF \"];\r\n\r\n      if (!isTrueType) {\r\n        var isComposite = properties.composite && ((properties.cidToGidMap || []).length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap));\r\n\r\n        if (header.version === \"OTTO\" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) {\r\n          cffFile = new _stream.Stream(tables[\"CFF \"].data);\r\n          cff = new CFFFont(cffFile, properties);\r\n          adjustWidths(properties);\r\n          return this.convert(name, cff, properties);\r\n        }\r\n\r\n        delete tables.glyf;\r\n        delete tables.loca;\r\n        delete tables.fpgm;\r\n        delete tables.prep;\r\n        delete tables[\"cvt \"];\r\n        this.isOpenType = true;\r\n      } else {\r\n        if (!tables.loca) {\r\n          throw new _util.FormatError('Required \"loca\" table is not found');\r\n        }\r\n\r\n        if (!tables.glyf) {\r\n          (0, _util.warn)('Required \"glyf\" table is not found -- trying to recover.');\r\n          tables.glyf = {\r\n            tag: \"glyf\",\r\n            data: new Uint8Array(0)\r\n          };\r\n        }\r\n\r\n        this.isOpenType = false;\r\n      }\r\n\r\n      if (!tables.maxp) {\r\n        throw new _util.FormatError('Required \"maxp\" table is not found');\r\n      }\r\n\r\n      font.pos = (font.start || 0) + tables.maxp.offset;\r\n      var version = font.getInt32();\r\n      var numGlyphs = font.getUint16();\r\n      var numGlyphsOut = numGlyphs + 1;\r\n      var dupFirstEntry = true;\r\n\r\n      if (numGlyphsOut > 0xffff) {\r\n        dupFirstEntry = false;\r\n        numGlyphsOut = numGlyphs;\r\n        (0, _util.warn)(\"Not enough space in glyfs to duplicate first glyph.\");\r\n      }\r\n\r\n      var maxFunctionDefs = 0;\r\n      var maxSizeOfInstructions = 0;\r\n\r\n      if (version >= 0x00010000 && tables.maxp.length >= 22) {\r\n        font.pos += 8;\r\n        var maxZones = font.getUint16();\r\n\r\n        if (maxZones > 2) {\r\n          tables.maxp.data[14] = 0;\r\n          tables.maxp.data[15] = 2;\r\n        }\r\n\r\n        font.pos += 4;\r\n        maxFunctionDefs = font.getUint16();\r\n        font.pos += 4;\r\n        maxSizeOfInstructions = font.getUint16();\r\n      }\r\n\r\n      tables.maxp.data[4] = numGlyphsOut >> 8;\r\n      tables.maxp.data[5] = numGlyphsOut & 255;\r\n      var hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables[\"cvt \"], maxFunctionDefs);\r\n\r\n      if (!hintsValid) {\r\n        delete tables.fpgm;\r\n        delete tables.prep;\r\n        delete tables[\"cvt \"];\r\n      }\r\n\r\n      sanitizeMetrics(font, tables.hhea, tables.hmtx, numGlyphsOut, dupFirstEntry);\r\n\r\n      if (!tables.head) {\r\n        throw new _util.FormatError('Required \"head\" table is not found');\r\n      }\r\n\r\n      sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0);\r\n      var missingGlyphs = Object.create(null);\r\n\r\n      if (isTrueType) {\r\n        var isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]);\r\n        var glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions);\r\n        missingGlyphs = glyphsInfo.missingGlyphs;\r\n\r\n        if (version >= 0x00010000 && tables.maxp.length >= 22) {\r\n          tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8;\r\n          tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255;\r\n        }\r\n      }\r\n\r\n      if (!tables.hhea) {\r\n        throw new _util.FormatError('Required \"hhea\" table is not found');\r\n      }\r\n\r\n      if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) {\r\n        tables.hhea.data[10] = 0xff;\r\n        tables.hhea.data[11] = 0xff;\r\n      }\r\n\r\n      var metricsOverride = {\r\n        unitsPerEm: int16(tables.head.data[18], tables.head.data[19]),\r\n        yMax: int16(tables.head.data[42], tables.head.data[43]),\r\n        yMin: signedInt16(tables.head.data[38], tables.head.data[39]),\r\n        ascent: int16(tables.hhea.data[4], tables.hhea.data[5]),\r\n        descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7])\r\n      };\r\n      this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm;\r\n      this.descent = metricsOverride.descent / metricsOverride.unitsPerEm;\r\n\r\n      if (tables.post) {\r\n        readPostScriptTable(tables.post, properties, numGlyphs);\r\n      }\r\n\r\n      tables.post = {\r\n        tag: \"post\",\r\n        data: createPostTable(properties)\r\n      };\r\n      var charCodeToGlyphId = [];\r\n\r\n      function hasGlyph(glyphId) {\r\n        return !missingGlyphs[glyphId];\r\n      }\r\n\r\n      if (properties.composite) {\r\n        var cidToGidMap = properties.cidToGidMap || [];\r\n        var isCidToGidMapEmpty = cidToGidMap.length === 0;\r\n        properties.cMap.forEach(function (charCode, cid) {\r\n          if (cid > 0xffff) {\r\n            throw new _util.FormatError(\"Max size of CID is 65,535\");\r\n          }\r\n\r\n          var glyphId = -1;\r\n\r\n          if (isCidToGidMapEmpty) {\r\n            glyphId = cid;\r\n          } else if (cidToGidMap[cid] !== undefined) {\r\n            glyphId = cidToGidMap[cid];\r\n          }\r\n\r\n          if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) {\r\n            charCodeToGlyphId[charCode] = glyphId;\r\n          }\r\n        });\r\n      } else {\r\n        var cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding);\r\n        var cmapPlatformId = cmapTable.platformId;\r\n        var cmapEncodingId = cmapTable.encodingId;\r\n        var cmapMappings = cmapTable.mappings;\r\n        var cmapMappingsLength = cmapMappings.length;\r\n        var baseEncoding = [];\r\n\r\n        if (properties.hasEncoding && (properties.baseEncodingName === \"MacRomanEncoding\" || properties.baseEncodingName === \"WinAnsiEncoding\")) {\r\n          baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);\r\n        }\r\n\r\n        if (properties.hasEncoding && !this.isSymbolicFont && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0)) {\r\n          var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\r\n\r\n          for (var charCode = 0; charCode < 256; charCode++) {\r\n            var glyphName, standardGlyphName;\r\n\r\n            if (this.differences && charCode in this.differences) {\r\n              glyphName = this.differences[charCode];\r\n            } else if (charCode in baseEncoding && baseEncoding[charCode] !== \"\") {\r\n              glyphName = baseEncoding[charCode];\r\n            } else {\r\n              glyphName = _encodings.StandardEncoding[charCode];\r\n            }\r\n\r\n            if (!glyphName) {\r\n              continue;\r\n            }\r\n\r\n            standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);\r\n            var unicodeOrCharCode;\r\n\r\n            if (cmapPlatformId === 3 && cmapEncodingId === 1) {\r\n              unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName];\r\n            } else if (cmapPlatformId === 1 && cmapEncodingId === 0) {\r\n              unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName);\r\n            }\r\n\r\n            for (var i = 0; i < cmapMappingsLength; ++i) {\r\n              if (cmapMappings[i].charCode !== unicodeOrCharCode) {\r\n                continue;\r\n              }\r\n\r\n              charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;\r\n              break;\r\n            }\r\n          }\r\n        } else if (cmapPlatformId === 0) {\r\n          for (var _i2 = 0; _i2 < cmapMappingsLength; ++_i2) {\r\n            charCodeToGlyphId[cmapMappings[_i2].charCode] = cmapMappings[_i2].glyphId;\r\n          }\r\n        } else {\r\n          for (var _i3 = 0; _i3 < cmapMappingsLength; ++_i3) {\r\n            var _charCode5 = cmapMappings[_i3].charCode;\r\n\r\n            if (cmapPlatformId === 3 && _charCode5 >= 0xf000 && _charCode5 <= 0xf0ff) {\r\n              _charCode5 &= 0xff;\r\n            }\r\n\r\n            charCodeToGlyphId[_charCode5] = cmapMappings[_i3].glyphId;\r\n          }\r\n        }\r\n\r\n        if (properties.glyphNames && baseEncoding.length) {\r\n          for (var _i4 = 0; _i4 < 256; ++_i4) {\r\n            if (charCodeToGlyphId[_i4] === undefined && baseEncoding[_i4]) {\r\n              glyphName = baseEncoding[_i4];\r\n              var glyphId = properties.glyphNames.indexOf(glyphName);\r\n\r\n              if (glyphId > 0 && hasGlyph(glyphId)) {\r\n                charCodeToGlyphId[_i4] = glyphId;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n\r\n      if (charCodeToGlyphId.length === 0) {\r\n        charCodeToGlyphId[0] = 0;\r\n      }\r\n\r\n      var glyphZeroId = numGlyphsOut - 1;\r\n\r\n      if (!dupFirstEntry) {\r\n        glyphZeroId = 0;\r\n      }\r\n\r\n      var newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId);\r\n      this.toFontChar = newMapping.toFontChar;\r\n      tables.cmap = {\r\n        tag: \"cmap\",\r\n        data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut)\r\n      };\r\n\r\n      if (!tables[\"OS/2\"] || !validateOS2Table(tables[\"OS/2\"], font)) {\r\n        tables[\"OS/2\"] = {\r\n          tag: \"OS/2\",\r\n          data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride)\r\n        };\r\n      }\r\n\r\n      if (!isTrueType) {\r\n        try {\r\n          cffFile = new _stream.Stream(tables[\"CFF \"].data);\r\n          var parser = new _cff_parser.CFFParser(cffFile, properties, SEAC_ANALYSIS_ENABLED);\r\n          cff = parser.parse();\r\n          cff.duplicateFirstGlyph();\r\n          var compiler = new _cff_parser.CFFCompiler(cff);\r\n          tables[\"CFF \"].data = compiler.compile();\r\n        } catch (e) {\r\n          (0, _util.warn)(\"Failed to compile font \" + properties.loadedName);\r\n        }\r\n      }\r\n\r\n      if (!tables.name) {\r\n        tables.name = {\r\n          tag: \"name\",\r\n          data: createNameTable(this.name)\r\n        };\r\n      } else {\r\n        var namePrototype = readNameTable(tables.name);\r\n        tables.name.data = createNameTable(name, namePrototype);\r\n      }\r\n\r\n      var builder = new OpenTypeFileBuilder(header.version);\r\n\r\n      for (var tableTag in tables) {\r\n        builder.addTable(tableTag, tables[tableTag].data);\r\n      }\r\n\r\n      return builder.toArray();\r\n    },\r\n    convert: function Font_convert(fontName, font, properties) {\r\n      properties.fixedPitch = false;\r\n\r\n      if (properties.builtInEncoding) {\r\n        adjustToUnicode(properties, properties.builtInEncoding);\r\n      }\r\n\r\n      var glyphZeroId = 1;\r\n\r\n      if (font instanceof CFFFont) {\r\n        glyphZeroId = font.numGlyphs - 1;\r\n      }\r\n\r\n      var mapping = font.getGlyphMapping(properties);\r\n      var newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId);\r\n      this.toFontChar = newMapping.toFontChar;\r\n      var numGlyphs = font.numGlyphs;\r\n\r\n      function getCharCodes(charCodeToGlyphId, glyphId) {\r\n        var charCodes = null;\r\n\r\n        for (var charCode in charCodeToGlyphId) {\r\n          if (glyphId === charCodeToGlyphId[charCode]) {\r\n            if (!charCodes) {\r\n              charCodes = [];\r\n            }\r\n\r\n            charCodes.push(charCode | 0);\r\n          }\r\n        }\r\n\r\n        return charCodes;\r\n      }\r\n\r\n      function createCharCode(charCodeToGlyphId, glyphId) {\r\n        for (var charCode in charCodeToGlyphId) {\r\n          if (glyphId === charCodeToGlyphId[charCode]) {\r\n            return charCode | 0;\r\n          }\r\n        }\r\n\r\n        newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId;\r\n        return newMapping.nextAvailableFontCharCode++;\r\n      }\r\n\r\n      var seacs = font.seacs;\r\n\r\n      if (SEAC_ANALYSIS_ENABLED && seacs && seacs.length) {\r\n        var matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX;\r\n        var charset = font.getCharset();\r\n        var seacMap = Object.create(null);\r\n\r\n        for (var glyphId in seacs) {\r\n          glyphId |= 0;\r\n          var seac = seacs[glyphId];\r\n          var baseGlyphName = _encodings.StandardEncoding[seac[2]];\r\n          var accentGlyphName = _encodings.StandardEncoding[seac[3]];\r\n          var baseGlyphId = charset.indexOf(baseGlyphName);\r\n          var accentGlyphId = charset.indexOf(accentGlyphName);\r\n\r\n          if (baseGlyphId < 0 || accentGlyphId < 0) {\r\n            continue;\r\n          }\r\n\r\n          var accentOffset = {\r\n            x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4],\r\n            y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5]\r\n          };\r\n          var charCodes = getCharCodes(mapping, glyphId);\r\n\r\n          if (!charCodes) {\r\n            continue;\r\n          }\r\n\r\n          for (var i = 0, ii = charCodes.length; i < ii; i++) {\r\n            var charCode = charCodes[i];\r\n            var charCodeToGlyphId = newMapping.charCodeToGlyphId;\r\n            var baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId);\r\n            var accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId);\r\n            seacMap[charCode] = {\r\n              baseFontCharCode: baseFontCharCode,\r\n              accentFontCharCode: accentFontCharCode,\r\n              accentOffset: accentOffset\r\n            };\r\n          }\r\n        }\r\n\r\n        properties.seacMap = seacMap;\r\n      }\r\n\r\n      var unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];\r\n      var builder = new OpenTypeFileBuilder(\"\\x4F\\x54\\x54\\x4F\");\r\n      builder.addTable(\"CFF \", font.data);\r\n      builder.addTable(\"OS/2\", createOS2Table(properties, newMapping.charCodeToGlyphId));\r\n      builder.addTable(\"cmap\", createCmapTable(newMapping.charCodeToGlyphId, numGlyphs));\r\n      builder.addTable(\"head\", \"\\x00\\x01\\x00\\x00\" + \"\\x00\\x00\\x10\\x00\" + \"\\x00\\x00\\x00\\x00\" + \"\\x5F\\x0F\\x3C\\xF5\" + \"\\x00\\x00\" + safeString16(unitsPerEm) + \"\\x00\\x00\\x00\\x00\\x9e\\x0b\\x7e\\x27\" + \"\\x00\\x00\\x00\\x00\\x9e\\x0b\\x7e\\x27\" + \"\\x00\\x00\" + safeString16(properties.descent) + \"\\x0F\\xFF\" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + \"\\x00\\x11\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\");\r\n      builder.addTable(\"hhea\", \"\\x00\\x01\\x00\\x00\" + safeString16(properties.ascent) + safeString16(properties.descent) + \"\\x00\\x00\" + \"\\xFF\\xFF\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + \"\\x00\\x00\" + string16(numGlyphs));\r\n      builder.addTable(\"hmtx\", function fontFieldsHmtx() {\r\n        var charstrings = font.charstrings;\r\n        var cffWidths = font.cff ? font.cff.widths : null;\r\n        var hmtx = \"\\x00\\x00\\x00\\x00\";\r\n\r\n        for (var _i5 = 1, _ii = numGlyphs; _i5 < _ii; _i5++) {\r\n          var width = 0;\r\n\r\n          if (charstrings) {\r\n            var charstring = charstrings[_i5 - 1];\r\n            width = \"width\" in charstring ? charstring.width : 0;\r\n          } else if (cffWidths) {\r\n            width = Math.ceil(cffWidths[_i5] || 0);\r\n          }\r\n\r\n          hmtx += string16(width) + string16(0);\r\n        }\r\n\r\n        return hmtx;\r\n      }());\r\n      builder.addTable(\"maxp\", \"\\x00\\x00\\x50\\x00\" + string16(numGlyphs));\r\n      builder.addTable(\"name\", createNameTable(fontName));\r\n      builder.addTable(\"post\", createPostTable(properties));\r\n      return builder.toArray();\r\n    },\r\n\r\n    get spaceWidth() {\r\n      var possibleSpaceReplacements = [\"space\", \"minus\", \"one\", \"i\", \"I\"];\r\n      var width;\r\n\r\n      for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) {\r\n        var glyphName = possibleSpaceReplacements[i];\r\n\r\n        if (glyphName in this.widths) {\r\n          width = this.widths[glyphName];\r\n          break;\r\n        }\r\n\r\n        var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\r\n        var glyphUnicode = glyphsUnicodeMap[glyphName];\r\n        var charcode = 0;\r\n\r\n        if (this.composite && this.cMap.contains(glyphUnicode)) {\r\n          charcode = this.cMap.lookup(glyphUnicode);\r\n        }\r\n\r\n        if (!charcode && this.toUnicode) {\r\n          charcode = this.toUnicode.charCodeOf(glyphUnicode);\r\n        }\r\n\r\n        if (charcode <= 0) {\r\n          charcode = glyphUnicode;\r\n        }\r\n\r\n        width = this.widths[charcode];\r\n\r\n        if (width) {\r\n          break;\r\n        }\r\n      }\r\n\r\n      width = width || this.defaultWidth;\r\n      return (0, _util.shadow)(this, \"spaceWidth\", width);\r\n    },\r\n\r\n    _charToGlyph: function _charToGlyph(charcode) {\r\n      var isSpace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      var fontCharCode, width, operatorListId;\r\n      var widthCode = charcode;\r\n\r\n      if (this.cMap && this.cMap.contains(charcode)) {\r\n        widthCode = this.cMap.lookup(charcode);\r\n      }\r\n\r\n      width = this.widths[widthCode];\r\n      width = (0, _util.isNum)(width) ? width : this.defaultWidth;\r\n      var vmetric = this.vmetrics && this.vmetrics[widthCode];\r\n      var unicode = this.toUnicode.get(charcode) || this.fallbackToUnicode.get(charcode) || charcode;\r\n\r\n      if (typeof unicode === \"number\") {\r\n        unicode = String.fromCharCode(unicode);\r\n      }\r\n\r\n      var isInFont = (charcode in this.toFontChar);\r\n      fontCharCode = this.toFontChar[charcode] || charcode;\r\n\r\n      if (this.missingFile) {\r\n        var glyphName = this.differences[charcode] || this.defaultEncoding[charcode];\r\n\r\n        if ((glyphName === \".notdef\" || glyphName === \"\") && this.type === \"Type1\") {\r\n          fontCharCode = 0x20;\r\n        }\r\n\r\n        fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode);\r\n      }\r\n\r\n      if (this.isType3Font) {\r\n        operatorListId = fontCharCode;\r\n      }\r\n\r\n      var accent = null;\r\n\r\n      if (this.seacMap && this.seacMap[charcode]) {\r\n        isInFont = true;\r\n        var seac = this.seacMap[charcode];\r\n        fontCharCode = seac.baseFontCharCode;\r\n        accent = {\r\n          fontChar: String.fromCodePoint(seac.accentFontCharCode),\r\n          offset: seac.accentOffset\r\n        };\r\n      }\r\n\r\n      var fontChar = \"\";\r\n\r\n      if (typeof fontCharCode === \"number\") {\r\n        if (fontCharCode <= 0x10ffff) {\r\n          fontChar = String.fromCodePoint(fontCharCode);\r\n        } else {\r\n          (0, _util.warn)(\"charToGlyph - invalid fontCharCode: \".concat(fontCharCode));\r\n        }\r\n      }\r\n\r\n      var glyph = this.glyphCache[charcode];\r\n\r\n      if (!glyph || !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) {\r\n        glyph = new Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont);\r\n        this.glyphCache[charcode] = glyph;\r\n      }\r\n\r\n      return glyph;\r\n    },\r\n    charsToGlyphs: function Font_charsToGlyphs(chars) {\r\n      var charsCache = this.charsCache;\r\n      var glyphs, glyph, charcode;\r\n\r\n      if (charsCache) {\r\n        glyphs = charsCache[chars];\r\n\r\n        if (glyphs) {\r\n          return glyphs;\r\n        }\r\n      }\r\n\r\n      if (!charsCache) {\r\n        charsCache = this.charsCache = Object.create(null);\r\n      }\r\n\r\n      glyphs = [];\r\n      var charsCacheKey = chars;\r\n      var i = 0,\r\n          ii;\r\n\r\n      if (this.cMap) {\r\n        var c = Object.create(null);\r\n\r\n        while (i < chars.length) {\r\n          this.cMap.readCharCode(chars, i, c);\r\n          charcode = c.charcode;\r\n          var length = c.length;\r\n          i += length;\r\n          var isSpace = length === 1 && chars.charCodeAt(i - 1) === 0x20;\r\n          glyph = this._charToGlyph(charcode, isSpace);\r\n          glyphs.push(glyph);\r\n        }\r\n      } else {\r\n        for (i = 0, ii = chars.length; i < ii; ++i) {\r\n          charcode = chars.charCodeAt(i);\r\n          glyph = this._charToGlyph(charcode, charcode === 0x20);\r\n          glyphs.push(glyph);\r\n        }\r\n      }\r\n\r\n      return charsCache[charsCacheKey] = glyphs;\r\n    },\r\n    getCharPositions: function getCharPositions(chars) {\r\n      var positions = [];\r\n\r\n      if (this.cMap) {\r\n        var c = Object.create(null);\r\n        var i = 0;\r\n\r\n        while (i < chars.length) {\r\n          this.cMap.readCharCode(chars, i, c);\r\n          var length = c.length;\r\n          positions.push([i, i + length]);\r\n          i += length;\r\n        }\r\n      } else {\r\n        for (var _i6 = 0, ii = chars.length; _i6 < ii; ++_i6) {\r\n          positions.push([_i6, _i6 + 1]);\r\n        }\r\n      }\r\n\r\n      return positions;\r\n    },\r\n\r\n    get glyphCacheValues() {\r\n      return Object.values(this.glyphCache);\r\n    },\r\n\r\n    encodeString: function encodeString(str) {\r\n      var buffers = [];\r\n      var currentBuf = [];\r\n\r\n      var hasCurrentBufErrors = function hasCurrentBufErrors() {\r\n        return buffers.length % 2 === 1;\r\n      };\r\n\r\n      for (var i = 0, ii = str.length; i < ii; i++) {\r\n        var unicode = str.codePointAt(i);\r\n\r\n        if (unicode > 0xd7ff && (unicode < 0xe000 || unicode > 0xfffd)) {\r\n          i++;\r\n        }\r\n\r\n        if (this.toUnicode) {\r\n          var _char = String.fromCodePoint(unicode);\r\n\r\n          var charCode = this.toUnicode.charCodeOf(_char);\r\n\r\n          if (charCode !== -1) {\r\n            if (hasCurrentBufErrors()) {\r\n              buffers.push(currentBuf.join(\"\"));\r\n              currentBuf.length = 0;\r\n            }\r\n\r\n            var charCodeLength = this.cMap ? this.cMap.getCharCodeLength(charCode) : 1;\r\n\r\n            for (var j = charCodeLength - 1; j >= 0; j--) {\r\n              currentBuf.push(String.fromCharCode(charCode >> 8 * j & 0xff));\r\n            }\r\n\r\n            continue;\r\n          }\r\n        }\r\n\r\n        if (!hasCurrentBufErrors()) {\r\n          buffers.push(currentBuf.join(\"\"));\r\n          currentBuf.length = 0;\r\n        }\r\n\r\n        currentBuf.push(String.fromCodePoint(unicode));\r\n      }\r\n\r\n      buffers.push(currentBuf.join(\"\"));\r\n      return buffers;\r\n    }\r\n  };\r\n  return Font;\r\n}();\r\n\r\nexports.Font = Font;\r\n\r\nvar ErrorFont = function ErrorFontClosure() {\r\n  function ErrorFont(error) {\r\n    this.error = error;\r\n    this.loadedName = \"g_font_error\";\r\n    this.missingFile = true;\r\n  }\r\n\r\n  ErrorFont.prototype = {\r\n    charsToGlyphs: function ErrorFont_charsToGlyphs() {\r\n      return [];\r\n    },\r\n    encodeString: function ErrorFont_encodeString(chars) {\r\n      return [chars];\r\n    },\r\n    exportData: function exportData() {\r\n      var extraProperties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n      return {\r\n        error: this.error\r\n      };\r\n    }\r\n  };\r\n  return ErrorFont;\r\n}();\r\n\r\nexports.ErrorFont = ErrorFont;\r\n\r\nfunction type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {\r\n  var charCodeToGlyphId = Object.create(null);\r\n  var glyphId, charCode, baseEncoding;\r\n  var isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);\r\n\r\n  if (properties.baseEncodingName) {\r\n    baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);\r\n\r\n    for (charCode = 0; charCode < baseEncoding.length; charCode++) {\r\n      glyphId = glyphNames.indexOf(baseEncoding[charCode]);\r\n\r\n      if (glyphId >= 0) {\r\n        charCodeToGlyphId[charCode] = glyphId;\r\n      } else {\r\n        charCodeToGlyphId[charCode] = 0;\r\n      }\r\n    }\r\n  } else if (isSymbolicFont) {\r\n    for (charCode in builtInEncoding) {\r\n      charCodeToGlyphId[charCode] = builtInEncoding[charCode];\r\n    }\r\n  } else {\r\n    baseEncoding = _encodings.StandardEncoding;\r\n\r\n    for (charCode = 0; charCode < baseEncoding.length; charCode++) {\r\n      glyphId = glyphNames.indexOf(baseEncoding[charCode]);\r\n\r\n      if (glyphId >= 0) {\r\n        charCodeToGlyphId[charCode] = glyphId;\r\n      } else {\r\n        charCodeToGlyphId[charCode] = 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  var differences = properties.differences,\r\n      glyphsUnicodeMap;\r\n\r\n  if (differences) {\r\n    for (charCode in differences) {\r\n      var glyphName = differences[charCode];\r\n      glyphId = glyphNames.indexOf(glyphName);\r\n\r\n      if (glyphId === -1) {\r\n        if (!glyphsUnicodeMap) {\r\n          glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();\r\n        }\r\n\r\n        var standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);\r\n\r\n        if (standardGlyphName !== glyphName) {\r\n          glyphId = glyphNames.indexOf(standardGlyphName);\r\n        }\r\n      }\r\n\r\n      if (glyphId >= 0) {\r\n        charCodeToGlyphId[charCode] = glyphId;\r\n      } else {\r\n        charCodeToGlyphId[charCode] = 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  return charCodeToGlyphId;\r\n}\r\n\r\nvar Type1Font = function Type1FontClosure() {\r\n  function findBlock(streamBytes, signature, startIndex) {\r\n    var streamBytesLength = streamBytes.length;\r\n    var signatureLength = signature.length;\r\n    var scanLength = streamBytesLength - signatureLength;\r\n    var i = startIndex,\r\n        j,\r\n        found = false;\r\n\r\n    while (i < scanLength) {\r\n      j = 0;\r\n\r\n      while (j < signatureLength && streamBytes[i + j] === signature[j]) {\r\n        j++;\r\n      }\r\n\r\n      if (j >= signatureLength) {\r\n        i += j;\r\n\r\n        while (i < streamBytesLength && (0, _core_utils.isWhiteSpace)(streamBytes[i])) {\r\n          i++;\r\n        }\r\n\r\n        found = true;\r\n        break;\r\n      }\r\n\r\n      i++;\r\n    }\r\n\r\n    return {\r\n      found: found,\r\n      length: i\r\n    };\r\n  }\r\n\r\n  function getHeaderBlock(stream, suggestedLength) {\r\n    var EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63];\r\n    var streamStartPos = stream.pos;\r\n    var headerBytes, headerBytesLength, block;\r\n\r\n    try {\r\n      headerBytes = stream.getBytes(suggestedLength);\r\n      headerBytesLength = headerBytes.length;\r\n    } catch (ex) {\r\n      if (ex instanceof _core_utils.MissingDataException) {\r\n        throw ex;\r\n      }\r\n    }\r\n\r\n    if (headerBytesLength === suggestedLength) {\r\n      block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length);\r\n\r\n      if (block.found && block.length === suggestedLength) {\r\n        return {\r\n          stream: new _stream.Stream(headerBytes),\r\n          length: suggestedLength\r\n        };\r\n      }\r\n    }\r\n\r\n    (0, _util.warn)('Invalid \"Length1\" property in Type1 font -- trying to recover.');\r\n    stream.pos = streamStartPos;\r\n    var SCAN_BLOCK_LENGTH = 2048;\r\n    var actualLength;\r\n\r\n    while (true) {\r\n      var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);\r\n      block = findBlock(scanBytes, EEXEC_SIGNATURE, 0);\r\n\r\n      if (block.length === 0) {\r\n        break;\r\n      }\r\n\r\n      stream.pos += block.length;\r\n\r\n      if (block.found) {\r\n        actualLength = stream.pos - streamStartPos;\r\n        break;\r\n      }\r\n    }\r\n\r\n    stream.pos = streamStartPos;\r\n\r\n    if (actualLength) {\r\n      return {\r\n        stream: new _stream.Stream(stream.getBytes(actualLength)),\r\n        length: actualLength\r\n      };\r\n    }\r\n\r\n    (0, _util.warn)('Unable to recover \"Length1\" property in Type1 font -- using as is.');\r\n    return {\r\n      stream: new _stream.Stream(stream.getBytes(suggestedLength)),\r\n      length: suggestedLength\r\n    };\r\n  }\r\n\r\n  function getEexecBlock(stream, suggestedLength) {\r\n    var eexecBytes = stream.getBytes();\r\n    return {\r\n      stream: new _stream.Stream(eexecBytes),\r\n      length: eexecBytes.length\r\n    };\r\n  }\r\n\r\n  function Type1Font(name, file, properties) {\r\n    var PFB_HEADER_SIZE = 6;\r\n    var headerBlockLength = properties.length1;\r\n    var eexecBlockLength = properties.length2;\r\n    var pfbHeader = file.peekBytes(PFB_HEADER_SIZE);\r\n    var pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01;\r\n\r\n    if (pfbHeaderPresent) {\r\n      file.skip(PFB_HEADER_SIZE);\r\n      headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];\r\n    }\r\n\r\n    var headerBlock = getHeaderBlock(file, headerBlockLength);\r\n    var headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, SEAC_ANALYSIS_ENABLED);\r\n    headerBlockParser.extractFontHeader(properties);\r\n\r\n    if (pfbHeaderPresent) {\r\n      pfbHeader = file.getBytes(PFB_HEADER_SIZE);\r\n      eexecBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];\r\n    }\r\n\r\n    var eexecBlock = getEexecBlock(file, eexecBlockLength);\r\n    var eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, SEAC_ANALYSIS_ENABLED);\r\n    var data = eexecBlockParser.extractFontProgram(properties);\r\n\r\n    for (var key in data.properties) {\r\n      properties[key] = data.properties[key];\r\n    }\r\n\r\n    var charstrings = data.charstrings;\r\n    var type2Charstrings = this.getType2Charstrings(charstrings);\r\n    var subrs = this.getType2Subrs(data.subrs);\r\n    this.charstrings = charstrings;\r\n    this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties);\r\n    this.seacs = this.getSeacs(data.charstrings);\r\n  }\r\n\r\n  Type1Font.prototype = {\r\n    get numGlyphs() {\r\n      return this.charstrings.length + 1;\r\n    },\r\n\r\n    getCharset: function Type1Font_getCharset() {\r\n      var charset = [\".notdef\"];\r\n      var charstrings = this.charstrings;\r\n\r\n      for (var glyphId = 0; glyphId < charstrings.length; glyphId++) {\r\n        charset.push(charstrings[glyphId].glyphName);\r\n      }\r\n\r\n      return charset;\r\n    },\r\n    getGlyphMapping: function Type1Font_getGlyphMapping(properties) {\r\n      var charstrings = this.charstrings;\r\n\r\n      if (properties.composite) {\r\n        var charCodeToGlyphId = Object.create(null);\r\n\r\n        for (var _glyphId = 0, charstringsLen = charstrings.length; _glyphId < charstringsLen; _glyphId++) {\r\n          var _charCode6 = properties.cMap.charCodeOf(_glyphId);\r\n\r\n          charCodeToGlyphId[_charCode6] = _glyphId + 1;\r\n        }\r\n\r\n        return charCodeToGlyphId;\r\n      }\r\n\r\n      var glyphNames = [\".notdef\"],\r\n          glyphId;\r\n\r\n      for (glyphId = 0; glyphId < charstrings.length; glyphId++) {\r\n        glyphNames.push(charstrings[glyphId].glyphName);\r\n      }\r\n\r\n      var encoding = properties.builtInEncoding;\r\n\r\n      if (encoding) {\r\n        var builtInEncoding = Object.create(null);\r\n\r\n        for (var charCode in encoding) {\r\n          glyphId = glyphNames.indexOf(encoding[charCode]);\r\n\r\n          if (glyphId >= 0) {\r\n            builtInEncoding[charCode] = glyphId;\r\n          }\r\n        }\r\n      }\r\n\r\n      return type1FontGlyphMapping(properties, builtInEncoding, glyphNames);\r\n    },\r\n    hasGlyphId: function Type1Font_hasGlyphID(id) {\r\n      if (id < 0 || id >= this.numGlyphs) {\r\n        return false;\r\n      }\r\n\r\n      if (id === 0) {\r\n        return true;\r\n      }\r\n\r\n      var glyph = this.charstrings[id - 1];\r\n      return glyph.charstring.length > 0;\r\n    },\r\n    getSeacs: function Type1Font_getSeacs(charstrings) {\r\n      var i, ii;\r\n      var seacMap = [];\r\n\r\n      for (i = 0, ii = charstrings.length; i < ii; i++) {\r\n        var charstring = charstrings[i];\r\n\r\n        if (charstring.seac) {\r\n          seacMap[i + 1] = charstring.seac;\r\n        }\r\n      }\r\n\r\n      return seacMap;\r\n    },\r\n    getType2Charstrings: function Type1Font_getType2Charstrings(type1Charstrings) {\r\n      var type2Charstrings = [];\r\n\r\n      for (var i = 0, ii = type1Charstrings.length; i < ii; i++) {\r\n        type2Charstrings.push(type1Charstrings[i].charstring);\r\n      }\r\n\r\n      return type2Charstrings;\r\n    },\r\n    getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) {\r\n      var bias = 0;\r\n      var count = type1Subrs.length;\r\n\r\n      if (count < 1133) {\r\n        bias = 107;\r\n      } else if (count < 33769) {\r\n        bias = 1131;\r\n      } else {\r\n        bias = 32768;\r\n      }\r\n\r\n      var type2Subrs = [];\r\n      var i;\r\n\r\n      for (i = 0; i < bias; i++) {\r\n        type2Subrs.push([0x0b]);\r\n      }\r\n\r\n      for (i = 0; i < count; i++) {\r\n        type2Subrs.push(type1Subrs[i]);\r\n      }\r\n\r\n      return type2Subrs;\r\n    },\r\n    wrap: function Type1Font_wrap(name, glyphs, charstrings, subrs, properties) {\r\n      var cff = new _cff_parser.CFF();\r\n      cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4);\r\n      cff.names = [name];\r\n      var topDict = new _cff_parser.CFFTopDict();\r\n      topDict.setByName(\"version\", 391);\r\n      topDict.setByName(\"Notice\", 392);\r\n      topDict.setByName(\"FullName\", 393);\r\n      topDict.setByName(\"FamilyName\", 394);\r\n      topDict.setByName(\"Weight\", 395);\r\n      topDict.setByName(\"Encoding\", null);\r\n      topDict.setByName(\"FontMatrix\", properties.fontMatrix);\r\n      topDict.setByName(\"FontBBox\", properties.bbox);\r\n      topDict.setByName(\"charset\", null);\r\n      topDict.setByName(\"CharStrings\", null);\r\n      topDict.setByName(\"Private\", null);\r\n      cff.topDict = topDict;\r\n      var strings = new _cff_parser.CFFStrings();\r\n      strings.add(\"Version 0.11\");\r\n      strings.add(\"See original notice\");\r\n      strings.add(name);\r\n      strings.add(name);\r\n      strings.add(\"Medium\");\r\n      cff.strings = strings;\r\n      cff.globalSubrIndex = new _cff_parser.CFFIndex();\r\n      var count = glyphs.length;\r\n      var charsetArray = [\".notdef\"];\r\n      var i, ii;\r\n\r\n      for (i = 0; i < count; i++) {\r\n        var glyphName = charstrings[i].glyphName;\r\n\r\n        var index = _cff_parser.CFFStandardStrings.indexOf(glyphName);\r\n\r\n        if (index === -1) {\r\n          strings.add(glyphName);\r\n        }\r\n\r\n        charsetArray.push(glyphName);\r\n      }\r\n\r\n      cff.charset = new _cff_parser.CFFCharset(false, 0, charsetArray);\r\n      var charStringsIndex = new _cff_parser.CFFIndex();\r\n      charStringsIndex.add([0x8b, 0x0e]);\r\n\r\n      for (i = 0; i < count; i++) {\r\n        charStringsIndex.add(glyphs[i]);\r\n      }\r\n\r\n      cff.charStrings = charStringsIndex;\r\n      var privateDict = new _cff_parser.CFFPrivateDict();\r\n      privateDict.setByName(\"Subrs\", null);\r\n      var fields = [\"BlueValues\", \"OtherBlues\", \"FamilyBlues\", \"FamilyOtherBlues\", \"StemSnapH\", \"StemSnapV\", \"BlueShift\", \"BlueFuzz\", \"BlueScale\", \"LanguageGroup\", \"ExpansionFactor\", \"ForceBold\", \"StdHW\", \"StdVW\"];\r\n\r\n      for (i = 0, ii = fields.length; i < ii; i++) {\r\n        var field = fields[i];\r\n\r\n        if (!(field in properties.privateData)) {\r\n          continue;\r\n        }\r\n\r\n        var value = properties.privateData[field];\r\n\r\n        if (Array.isArray(value)) {\r\n          for (var j = value.length - 1; j > 0; j--) {\r\n            value[j] -= value[j - 1];\r\n          }\r\n        }\r\n\r\n        privateDict.setByName(field, value);\r\n      }\r\n\r\n      cff.topDict.privateDict = privateDict;\r\n      var subrIndex = new _cff_parser.CFFIndex();\r\n\r\n      for (i = 0, ii = subrs.length; i < ii; i++) {\r\n        subrIndex.add(subrs[i]);\r\n      }\r\n\r\n      privateDict.subrsIndex = subrIndex;\r\n      var compiler = new _cff_parser.CFFCompiler(cff);\r\n      return compiler.compile();\r\n    }\r\n  };\r\n  return Type1Font;\r\n}();\r\n\r\nvar CFFFont = function CFFFontClosure() {\r\n  function CFFFont(file, properties) {\r\n    this.properties = properties;\r\n    var parser = new _cff_parser.CFFParser(file, properties, SEAC_ANALYSIS_ENABLED);\r\n    this.cff = parser.parse();\r\n    this.cff.duplicateFirstGlyph();\r\n    var compiler = new _cff_parser.CFFCompiler(this.cff);\r\n    this.seacs = this.cff.seacs;\r\n\r\n    try {\r\n      this.data = compiler.compile();\r\n    } catch (e) {\r\n      (0, _util.warn)(\"Failed to compile font \" + properties.loadedName);\r\n      this.data = file;\r\n    }\r\n  }\r\n\r\n  CFFFont.prototype = {\r\n    get numGlyphs() {\r\n      return this.cff.charStrings.count;\r\n    },\r\n\r\n    getCharset: function CFFFont_getCharset() {\r\n      return this.cff.charset.charset;\r\n    },\r\n    getGlyphMapping: function CFFFont_getGlyphMapping() {\r\n      var cff = this.cff;\r\n      var properties = this.properties;\r\n      var charsets = cff.charset.charset;\r\n      var charCodeToGlyphId;\r\n      var glyphId;\r\n\r\n      if (properties.composite) {\r\n        charCodeToGlyphId = Object.create(null);\r\n        var charCode;\r\n\r\n        if (cff.isCIDFont) {\r\n          for (glyphId = 0; glyphId < charsets.length; glyphId++) {\r\n            var cid = charsets[glyphId];\r\n            charCode = properties.cMap.charCodeOf(cid);\r\n            charCodeToGlyphId[charCode] = glyphId;\r\n          }\r\n        } else {\r\n          for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) {\r\n            charCode = properties.cMap.charCodeOf(glyphId);\r\n            charCodeToGlyphId[charCode] = glyphId;\r\n          }\r\n        }\r\n\r\n        return charCodeToGlyphId;\r\n      }\r\n\r\n      var encoding = cff.encoding ? cff.encoding.encoding : null;\r\n      charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets);\r\n      return charCodeToGlyphId;\r\n    },\r\n    hasGlyphId: function CFFFont_hasGlyphID(id) {\r\n      return this.cff.hasGlyphId(id);\r\n    }\r\n  };\r\n  return CFFFont;\r\n}();\r\n\r\n/***/ }),\r\n/* 160 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.CFFTopDict = exports.CFFStrings = exports.CFFStandardStrings = exports.CFFPrivateDict = exports.CFFParser = exports.CFFIndex = exports.CFFHeader = exports.CFFFDSelect = exports.CFFCompiler = exports.CFFCharset = exports.CFF = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _charsets = __w_pdfjs_require__(161);\r\n\r\nvar _encodings = __w_pdfjs_require__(162);\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar MAX_SUBR_NESTING = 10;\r\nvar CFFStandardStrings = [\".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\", \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\", \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\", \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\", \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\", \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\", \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\", \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\", \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\", \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\", \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\", \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\", \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\", \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\", \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\", \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\", \"ydieresis\", \"zcaron\", \"exclamsmall\", \"Hungarumlautsmall\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\", \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\", \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\", \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\", \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\", \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\", \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\", \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\", \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\", \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\", \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\", \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\", \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\", \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\", \"Black\", \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"];\r\nexports.CFFStandardStrings = CFFStandardStrings;\r\nvar NUM_STANDARD_CFF_STRINGS = 391;\r\n\r\nvar CFFParser = function CFFParserClosure() {\r\n  var CharstringValidationData = [null, {\r\n    id: \"hstem\",\r\n    min: 2,\r\n    stackClearing: true,\r\n    stem: true\r\n  }, null, {\r\n    id: \"vstem\",\r\n    min: 2,\r\n    stackClearing: true,\r\n    stem: true\r\n  }, {\r\n    id: \"vmoveto\",\r\n    min: 1,\r\n    stackClearing: true\r\n  }, {\r\n    id: \"rlineto\",\r\n    min: 2,\r\n    resetStack: true\r\n  }, {\r\n    id: \"hlineto\",\r\n    min: 1,\r\n    resetStack: true\r\n  }, {\r\n    id: \"vlineto\",\r\n    min: 1,\r\n    resetStack: true\r\n  }, {\r\n    id: \"rrcurveto\",\r\n    min: 6,\r\n    resetStack: true\r\n  }, null, {\r\n    id: \"callsubr\",\r\n    min: 1,\r\n    undefStack: true\r\n  }, {\r\n    id: \"return\",\r\n    min: 0,\r\n    undefStack: true\r\n  }, null, null, {\r\n    id: \"endchar\",\r\n    min: 0,\r\n    stackClearing: true\r\n  }, null, null, null, {\r\n    id: \"hstemhm\",\r\n    min: 2,\r\n    stackClearing: true,\r\n    stem: true\r\n  }, {\r\n    id: \"hintmask\",\r\n    min: 0,\r\n    stackClearing: true\r\n  }, {\r\n    id: \"cntrmask\",\r\n    min: 0,\r\n    stackClearing: true\r\n  }, {\r\n    id: \"rmoveto\",\r\n    min: 2,\r\n    stackClearing: true\r\n  }, {\r\n    id: \"hmoveto\",\r\n    min: 1,\r\n    stackClearing: true\r\n  }, {\r\n    id: \"vstemhm\",\r\n    min: 2,\r\n    stackClearing: true,\r\n    stem: true\r\n  }, {\r\n    id: \"rcurveline\",\r\n    min: 8,\r\n    resetStack: true\r\n  }, {\r\n    id: \"rlinecurve\",\r\n    min: 8,\r\n    resetStack: true\r\n  }, {\r\n    id: \"vvcurveto\",\r\n    min: 4,\r\n    resetStack: true\r\n  }, {\r\n    id: \"hhcurveto\",\r\n    min: 4,\r\n    resetStack: true\r\n  }, null, {\r\n    id: \"callgsubr\",\r\n    min: 1,\r\n    undefStack: true\r\n  }, {\r\n    id: \"vhcurveto\",\r\n    min: 4,\r\n    resetStack: true\r\n  }, {\r\n    id: \"hvcurveto\",\r\n    min: 4,\r\n    resetStack: true\r\n  }];\r\n  var CharstringValidationData12 = [null, null, null, {\r\n    id: \"and\",\r\n    min: 2,\r\n    stackDelta: -1\r\n  }, {\r\n    id: \"or\",\r\n    min: 2,\r\n    stackDelta: -1\r\n  }, {\r\n    id: \"not\",\r\n    min: 1,\r\n    stackDelta: 0\r\n  }, null, null, null, {\r\n    id: \"abs\",\r\n    min: 1,\r\n    stackDelta: 0\r\n  }, {\r\n    id: \"add\",\r\n    min: 2,\r\n    stackDelta: -1,\r\n    stackFn: function stack_div(stack, index) {\r\n      stack[index - 2] = stack[index - 2] + stack[index - 1];\r\n    }\r\n  }, {\r\n    id: \"sub\",\r\n    min: 2,\r\n    stackDelta: -1,\r\n    stackFn: function stack_div(stack, index) {\r\n      stack[index - 2] = stack[index - 2] - stack[index - 1];\r\n    }\r\n  }, {\r\n    id: \"div\",\r\n    min: 2,\r\n    stackDelta: -1,\r\n    stackFn: function stack_div(stack, index) {\r\n      stack[index - 2] = stack[index - 2] / stack[index - 1];\r\n    }\r\n  }, null, {\r\n    id: \"neg\",\r\n    min: 1,\r\n    stackDelta: 0,\r\n    stackFn: function stack_div(stack, index) {\r\n      stack[index - 1] = -stack[index - 1];\r\n    }\r\n  }, {\r\n    id: \"eq\",\r\n    min: 2,\r\n    stackDelta: -1\r\n  }, null, null, {\r\n    id: \"drop\",\r\n    min: 1,\r\n    stackDelta: -1\r\n  }, null, {\r\n    id: \"put\",\r\n    min: 2,\r\n    stackDelta: -2\r\n  }, {\r\n    id: \"get\",\r\n    min: 1,\r\n    stackDelta: 0\r\n  }, {\r\n    id: \"ifelse\",\r\n    min: 4,\r\n    stackDelta: -3\r\n  }, {\r\n    id: \"random\",\r\n    min: 0,\r\n    stackDelta: 1\r\n  }, {\r\n    id: \"mul\",\r\n    min: 2,\r\n    stackDelta: -1,\r\n    stackFn: function stack_div(stack, index) {\r\n      stack[index - 2] = stack[index - 2] * stack[index - 1];\r\n    }\r\n  }, null, {\r\n    id: \"sqrt\",\r\n    min: 1,\r\n    stackDelta: 0\r\n  }, {\r\n    id: \"dup\",\r\n    min: 1,\r\n    stackDelta: 1\r\n  }, {\r\n    id: \"exch\",\r\n    min: 2,\r\n    stackDelta: 0\r\n  }, {\r\n    id: \"index\",\r\n    min: 2,\r\n    stackDelta: 0\r\n  }, {\r\n    id: \"roll\",\r\n    min: 3,\r\n    stackDelta: -2\r\n  }, null, null, null, {\r\n    id: \"hflex\",\r\n    min: 7,\r\n    resetStack: true\r\n  }, {\r\n    id: \"flex\",\r\n    min: 13,\r\n    resetStack: true\r\n  }, {\r\n    id: \"hflex1\",\r\n    min: 9,\r\n    resetStack: true\r\n  }, {\r\n    id: \"flex1\",\r\n    min: 11,\r\n    resetStack: true\r\n  }];\r\n\r\n  var CFFParser = /*#__PURE__*/function () {\r\n    function CFFParser(file, properties, seacAnalysisEnabled) {\r\n      _classCallCheck(this, CFFParser);\r\n\r\n      this.bytes = file.getBytes();\r\n      this.properties = properties;\r\n      this.seacAnalysisEnabled = !!seacAnalysisEnabled;\r\n    }\r\n\r\n    _createClass(CFFParser, [{\r\n      key: \"parse\",\r\n      value: function parse() {\r\n        var properties = this.properties;\r\n        var cff = new CFF();\r\n        this.cff = cff;\r\n        var header = this.parseHeader();\r\n        var nameIndex = this.parseIndex(header.endPos);\r\n        var topDictIndex = this.parseIndex(nameIndex.endPos);\r\n        var stringIndex = this.parseIndex(topDictIndex.endPos);\r\n        var globalSubrIndex = this.parseIndex(stringIndex.endPos);\r\n        var topDictParsed = this.parseDict(topDictIndex.obj.get(0));\r\n        var topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings);\r\n        cff.header = header.obj;\r\n        cff.names = this.parseNameIndex(nameIndex.obj);\r\n        cff.strings = this.parseStringIndex(stringIndex.obj);\r\n        cff.topDict = topDict;\r\n        cff.globalSubrIndex = globalSubrIndex.obj;\r\n        this.parsePrivateDict(cff.topDict);\r\n        cff.isCIDFont = topDict.hasName(\"ROS\");\r\n        var charStringOffset = topDict.getByName(\"CharStrings\");\r\n        var charStringIndex = this.parseIndex(charStringOffset).obj;\r\n        var fontMatrix = topDict.getByName(\"FontMatrix\");\r\n\r\n        if (fontMatrix) {\r\n          properties.fontMatrix = fontMatrix;\r\n        }\r\n\r\n        var fontBBox = topDict.getByName(\"FontBBox\");\r\n\r\n        if (fontBBox) {\r\n          properties.ascent = Math.max(fontBBox[3], fontBBox[1]);\r\n          properties.descent = Math.min(fontBBox[1], fontBBox[3]);\r\n          properties.ascentScaled = true;\r\n        }\r\n\r\n        var charset, encoding;\r\n\r\n        if (cff.isCIDFont) {\r\n          var fdArrayIndex = this.parseIndex(topDict.getByName(\"FDArray\")).obj;\r\n\r\n          for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) {\r\n            var dictRaw = fdArrayIndex.get(i);\r\n            var fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings);\r\n            this.parsePrivateDict(fontDict);\r\n            cff.fdArray.push(fontDict);\r\n          }\r\n\r\n          encoding = null;\r\n          charset = this.parseCharsets(topDict.getByName(\"charset\"), charStringIndex.count, cff.strings, true);\r\n          cff.fdSelect = this.parseFDSelect(topDict.getByName(\"FDSelect\"), charStringIndex.count);\r\n        } else {\r\n          charset = this.parseCharsets(topDict.getByName(\"charset\"), charStringIndex.count, cff.strings, false);\r\n          encoding = this.parseEncoding(topDict.getByName(\"Encoding\"), properties, cff.strings, charset.charset);\r\n        }\r\n\r\n        cff.charset = charset;\r\n        cff.encoding = encoding;\r\n        var charStringsAndSeacs = this.parseCharStrings({\r\n          charStrings: charStringIndex,\r\n          localSubrIndex: topDict.privateDict.subrsIndex,\r\n          globalSubrIndex: globalSubrIndex.obj,\r\n          fdSelect: cff.fdSelect,\r\n          fdArray: cff.fdArray,\r\n          privateDict: topDict.privateDict\r\n        });\r\n        cff.charStrings = charStringsAndSeacs.charStrings;\r\n        cff.seacs = charStringsAndSeacs.seacs;\r\n        cff.widths = charStringsAndSeacs.widths;\r\n        return cff;\r\n      }\r\n    }, {\r\n      key: \"parseHeader\",\r\n      value: function parseHeader() {\r\n        var bytes = this.bytes;\r\n        var bytesLength = bytes.length;\r\n        var offset = 0;\r\n\r\n        while (offset < bytesLength && bytes[offset] !== 1) {\r\n          ++offset;\r\n        }\r\n\r\n        if (offset >= bytesLength) {\r\n          throw new _util.FormatError(\"Invalid CFF header\");\r\n        }\r\n\r\n        if (offset !== 0) {\r\n          (0, _util.info)(\"cff data is shifted\");\r\n          bytes = bytes.subarray(offset);\r\n          this.bytes = bytes;\r\n        }\r\n\r\n        var major = bytes[0];\r\n        var minor = bytes[1];\r\n        var hdrSize = bytes[2];\r\n        var offSize = bytes[3];\r\n        var header = new CFFHeader(major, minor, hdrSize, offSize);\r\n        return {\r\n          obj: header,\r\n          endPos: hdrSize\r\n        };\r\n      }\r\n    }, {\r\n      key: \"parseDict\",\r\n      value: function parseDict(dict) {\r\n        var pos = 0;\r\n\r\n        function parseOperand() {\r\n          var value = dict[pos++];\r\n\r\n          if (value === 30) {\r\n            return parseFloatOperand();\r\n          } else if (value === 28) {\r\n            value = dict[pos++];\r\n            value = (value << 24 | dict[pos++] << 16) >> 16;\r\n            return value;\r\n          } else if (value === 29) {\r\n            value = dict[pos++];\r\n            value = value << 8 | dict[pos++];\r\n            value = value << 8 | dict[pos++];\r\n            value = value << 8 | dict[pos++];\r\n            return value;\r\n          } else if (value >= 32 && value <= 246) {\r\n            return value - 139;\r\n          } else if (value >= 247 && value <= 250) {\r\n            return (value - 247) * 256 + dict[pos++] + 108;\r\n          } else if (value >= 251 && value <= 254) {\r\n            return -((value - 251) * 256) - dict[pos++] - 108;\r\n          }\r\n\r\n          (0, _util.warn)('CFFParser_parseDict: \"' + value + '\" is a reserved command.');\r\n          return NaN;\r\n        }\r\n\r\n        function parseFloatOperand() {\r\n          var str = \"\";\r\n          var eof = 15;\r\n          var lookup = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \".\", \"E\", \"E-\", null, \"-\"];\r\n          var length = dict.length;\r\n\r\n          while (pos < length) {\r\n            var b = dict[pos++];\r\n            var b1 = b >> 4;\r\n            var b2 = b & 15;\r\n\r\n            if (b1 === eof) {\r\n              break;\r\n            }\r\n\r\n            str += lookup[b1];\r\n\r\n            if (b2 === eof) {\r\n              break;\r\n            }\r\n\r\n            str += lookup[b2];\r\n          }\r\n\r\n          return parseFloat(str);\r\n        }\r\n\r\n        var operands = [];\r\n        var entries = [];\r\n        pos = 0;\r\n        var end = dict.length;\r\n\r\n        while (pos < end) {\r\n          var b = dict[pos];\r\n\r\n          if (b <= 21) {\r\n            if (b === 12) {\r\n              b = b << 8 | dict[++pos];\r\n            }\r\n\r\n            entries.push([b, operands]);\r\n            operands = [];\r\n            ++pos;\r\n          } else {\r\n            operands.push(parseOperand());\r\n          }\r\n        }\r\n\r\n        return entries;\r\n      }\r\n    }, {\r\n      key: \"parseIndex\",\r\n      value: function parseIndex(pos) {\r\n        var cffIndex = new CFFIndex();\r\n        var bytes = this.bytes;\r\n        var count = bytes[pos++] << 8 | bytes[pos++];\r\n        var offsets = [];\r\n        var end = pos;\r\n        var i, ii;\r\n\r\n        if (count !== 0) {\r\n          var offsetSize = bytes[pos++];\r\n          var startPos = pos + (count + 1) * offsetSize - 1;\r\n\r\n          for (i = 0, ii = count + 1; i < ii; ++i) {\r\n            var offset = 0;\r\n\r\n            for (var j = 0; j < offsetSize; ++j) {\r\n              offset <<= 8;\r\n              offset += bytes[pos++];\r\n            }\r\n\r\n            offsets.push(startPos + offset);\r\n          }\r\n\r\n          end = offsets[count];\r\n        }\r\n\r\n        for (i = 0, ii = offsets.length - 1; i < ii; ++i) {\r\n          var offsetStart = offsets[i];\r\n          var offsetEnd = offsets[i + 1];\r\n          cffIndex.add(bytes.subarray(offsetStart, offsetEnd));\r\n        }\r\n\r\n        return {\r\n          obj: cffIndex,\r\n          endPos: end\r\n        };\r\n      }\r\n    }, {\r\n      key: \"parseNameIndex\",\r\n      value: function parseNameIndex(index) {\r\n        var names = [];\r\n\r\n        for (var i = 0, ii = index.count; i < ii; ++i) {\r\n          var name = index.get(i);\r\n          names.push((0, _util.bytesToString)(name));\r\n        }\r\n\r\n        return names;\r\n      }\r\n    }, {\r\n      key: \"parseStringIndex\",\r\n      value: function parseStringIndex(index) {\r\n        var strings = new CFFStrings();\r\n\r\n        for (var i = 0, ii = index.count; i < ii; ++i) {\r\n          var data = index.get(i);\r\n          strings.add((0, _util.bytesToString)(data));\r\n        }\r\n\r\n        return strings;\r\n      }\r\n    }, {\r\n      key: \"createDict\",\r\n      value: function createDict(Type, dict, strings) {\r\n        var cffDict = new Type(strings);\r\n\r\n        for (var i = 0, ii = dict.length; i < ii; ++i) {\r\n          var pair = dict[i];\r\n          var key = pair[0];\r\n          var value = pair[1];\r\n          cffDict.setByKey(key, value);\r\n        }\r\n\r\n        return cffDict;\r\n      }\r\n    }, {\r\n      key: \"parseCharString\",\r\n      value: function parseCharString(state, data, localSubrIndex, globalSubrIndex) {\r\n        if (!data || state.callDepth > MAX_SUBR_NESTING) {\r\n          return false;\r\n        }\r\n\r\n        var stackSize = state.stackSize;\r\n        var stack = state.stack;\r\n        var length = data.length;\r\n\r\n        for (var j = 0; j < length;) {\r\n          var value = data[j++];\r\n          var validationCommand = null;\r\n\r\n          if (value === 12) {\r\n            var q = data[j++];\r\n\r\n            if (q === 0) {\r\n              data[j - 2] = 139;\r\n              data[j - 1] = 22;\r\n              stackSize = 0;\r\n            } else {\r\n              validationCommand = CharstringValidationData12[q];\r\n            }\r\n          } else if (value === 28) {\r\n            stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16;\r\n            j += 2;\r\n            stackSize++;\r\n          } else if (value === 14) {\r\n            if (stackSize >= 4) {\r\n              stackSize -= 4;\r\n\r\n              if (this.seacAnalysisEnabled) {\r\n                state.seac = stack.slice(stackSize, stackSize + 4);\r\n                return false;\r\n              }\r\n            }\r\n\r\n            validationCommand = CharstringValidationData[value];\r\n          } else if (value >= 32 && value <= 246) {\r\n            stack[stackSize] = value - 139;\r\n            stackSize++;\r\n          } else if (value >= 247 && value <= 254) {\r\n            stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108;\r\n            j++;\r\n            stackSize++;\r\n          } else if (value === 255) {\r\n            stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536;\r\n            j += 4;\r\n            stackSize++;\r\n          } else if (value === 19 || value === 20) {\r\n            state.hints += stackSize >> 1;\r\n            j += state.hints + 7 >> 3;\r\n            stackSize %= 2;\r\n            validationCommand = CharstringValidationData[value];\r\n          } else if (value === 10 || value === 29) {\r\n            var subrsIndex;\r\n\r\n            if (value === 10) {\r\n              subrsIndex = localSubrIndex;\r\n            } else {\r\n              subrsIndex = globalSubrIndex;\r\n            }\r\n\r\n            if (!subrsIndex) {\r\n              validationCommand = CharstringValidationData[value];\r\n              (0, _util.warn)(\"Missing subrsIndex for \" + validationCommand.id);\r\n              return false;\r\n            }\r\n\r\n            var bias = 32768;\r\n\r\n            if (subrsIndex.count < 1240) {\r\n              bias = 107;\r\n            } else if (subrsIndex.count < 33900) {\r\n              bias = 1131;\r\n            }\r\n\r\n            var subrNumber = stack[--stackSize] + bias;\r\n\r\n            if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) {\r\n              validationCommand = CharstringValidationData[value];\r\n              (0, _util.warn)(\"Out of bounds subrIndex for \" + validationCommand.id);\r\n              return false;\r\n            }\r\n\r\n            state.stackSize = stackSize;\r\n            state.callDepth++;\r\n            var valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex);\r\n\r\n            if (!valid) {\r\n              return false;\r\n            }\r\n\r\n            state.callDepth--;\r\n            stackSize = state.stackSize;\r\n            continue;\r\n          } else if (value === 11) {\r\n            state.stackSize = stackSize;\r\n            return true;\r\n          } else {\r\n            validationCommand = CharstringValidationData[value];\r\n          }\r\n\r\n          if (validationCommand) {\r\n            if (validationCommand.stem) {\r\n              state.hints += stackSize >> 1;\r\n\r\n              if (value === 3 || value === 23) {\r\n                state.hasVStems = true;\r\n              } else if (state.hasVStems && (value === 1 || value === 18)) {\r\n                (0, _util.warn)(\"CFF stem hints are in wrong order\");\r\n                data[j - 1] = value === 1 ? 3 : 23;\r\n              }\r\n            }\r\n\r\n            if (\"min\" in validationCommand) {\r\n              if (!state.undefStack && stackSize < validationCommand.min) {\r\n                (0, _util.warn)(\"Not enough parameters for \" + validationCommand.id + \"; actual: \" + stackSize + \", expected: \" + validationCommand.min);\r\n                return false;\r\n              }\r\n            }\r\n\r\n            if (state.firstStackClearing && validationCommand.stackClearing) {\r\n              state.firstStackClearing = false;\r\n              stackSize -= validationCommand.min;\r\n\r\n              if (stackSize >= 2 && validationCommand.stem) {\r\n                stackSize %= 2;\r\n              } else if (stackSize > 1) {\r\n                (0, _util.warn)(\"Found too many parameters for stack-clearing command\");\r\n              }\r\n\r\n              if (stackSize > 0 && stack[stackSize - 1] >= 0) {\r\n                state.width = stack[stackSize - 1];\r\n              }\r\n            }\r\n\r\n            if (\"stackDelta\" in validationCommand) {\r\n              if (\"stackFn\" in validationCommand) {\r\n                validationCommand.stackFn(stack, stackSize);\r\n              }\r\n\r\n              stackSize += validationCommand.stackDelta;\r\n            } else if (validationCommand.stackClearing) {\r\n              stackSize = 0;\r\n            } else if (validationCommand.resetStack) {\r\n              stackSize = 0;\r\n              state.undefStack = false;\r\n            } else if (validationCommand.undefStack) {\r\n              stackSize = 0;\r\n              state.undefStack = true;\r\n              state.firstStackClearing = false;\r\n            }\r\n          }\r\n        }\r\n\r\n        state.stackSize = stackSize;\r\n        return true;\r\n      }\r\n    }, {\r\n      key: \"parseCharStrings\",\r\n      value: function parseCharStrings(_ref) {\r\n        var charStrings = _ref.charStrings,\r\n            localSubrIndex = _ref.localSubrIndex,\r\n            globalSubrIndex = _ref.globalSubrIndex,\r\n            fdSelect = _ref.fdSelect,\r\n            fdArray = _ref.fdArray,\r\n            privateDict = _ref.privateDict;\r\n        var seacs = [];\r\n        var widths = [];\r\n        var count = charStrings.count;\r\n\r\n        for (var i = 0; i < count; i++) {\r\n          var charstring = charStrings.get(i);\r\n          var state = {\r\n            callDepth: 0,\r\n            stackSize: 0,\r\n            stack: [],\r\n            undefStack: true,\r\n            hints: 0,\r\n            firstStackClearing: true,\r\n            seac: null,\r\n            width: null,\r\n            hasVStems: false\r\n          };\r\n          var valid = true;\r\n          var localSubrToUse = null;\r\n          var privateDictToUse = privateDict;\r\n\r\n          if (fdSelect && fdArray.length) {\r\n            var fdIndex = fdSelect.getFDIndex(i);\r\n\r\n            if (fdIndex === -1) {\r\n              (0, _util.warn)(\"Glyph index is not in fd select.\");\r\n              valid = false;\r\n            }\r\n\r\n            if (fdIndex >= fdArray.length) {\r\n              (0, _util.warn)(\"Invalid fd index for glyph index.\");\r\n              valid = false;\r\n            }\r\n\r\n            if (valid) {\r\n              privateDictToUse = fdArray[fdIndex].privateDict;\r\n              localSubrToUse = privateDictToUse.subrsIndex;\r\n            }\r\n          } else if (localSubrIndex) {\r\n            localSubrToUse = localSubrIndex;\r\n          }\r\n\r\n          if (valid) {\r\n            valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex);\r\n          }\r\n\r\n          if (state.width !== null) {\r\n            var nominalWidth = privateDictToUse.getByName(\"nominalWidthX\");\r\n            widths[i] = nominalWidth + state.width;\r\n          } else {\r\n            var defaultWidth = privateDictToUse.getByName(\"defaultWidthX\");\r\n            widths[i] = defaultWidth;\r\n          }\r\n\r\n          if (state.seac !== null) {\r\n            seacs[i] = state.seac;\r\n          }\r\n\r\n          if (!valid) {\r\n            charStrings.set(i, new Uint8Array([14]));\r\n          }\r\n        }\r\n\r\n        return {\r\n          charStrings: charStrings,\r\n          seacs: seacs,\r\n          widths: widths\r\n        };\r\n      }\r\n    }, {\r\n      key: \"emptyPrivateDictionary\",\r\n      value: function emptyPrivateDictionary(parentDict) {\r\n        var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);\r\n        parentDict.setByKey(18, [0, 0]);\r\n        parentDict.privateDict = privateDict;\r\n      }\r\n    }, {\r\n      key: \"parsePrivateDict\",\r\n      value: function parsePrivateDict(parentDict) {\r\n        if (!parentDict.hasName(\"Private\")) {\r\n          this.emptyPrivateDictionary(parentDict);\r\n          return;\r\n        }\r\n\r\n        var privateOffset = parentDict.getByName(\"Private\");\r\n\r\n        if (!Array.isArray(privateOffset) || privateOffset.length !== 2) {\r\n          parentDict.removeByName(\"Private\");\r\n          return;\r\n        }\r\n\r\n        var size = privateOffset[0];\r\n        var offset = privateOffset[1];\r\n\r\n        if (size === 0 || offset >= this.bytes.length) {\r\n          this.emptyPrivateDictionary(parentDict);\r\n          return;\r\n        }\r\n\r\n        var privateDictEnd = offset + size;\r\n        var dictData = this.bytes.subarray(offset, privateDictEnd);\r\n        var dict = this.parseDict(dictData);\r\n        var privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings);\r\n        parentDict.privateDict = privateDict;\r\n\r\n        if (!privateDict.getByName(\"Subrs\")) {\r\n          return;\r\n        }\r\n\r\n        var subrsOffset = privateDict.getByName(\"Subrs\");\r\n        var relativeOffset = offset + subrsOffset;\r\n\r\n        if (subrsOffset === 0 || relativeOffset >= this.bytes.length) {\r\n          this.emptyPrivateDictionary(parentDict);\r\n          return;\r\n        }\r\n\r\n        var subrsIndex = this.parseIndex(relativeOffset);\r\n        privateDict.subrsIndex = subrsIndex.obj;\r\n      }\r\n    }, {\r\n      key: \"parseCharsets\",\r\n      value: function parseCharsets(pos, length, strings, cid) {\r\n        if (pos === 0) {\r\n          return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, _charsets.ISOAdobeCharset);\r\n        } else if (pos === 1) {\r\n          return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, _charsets.ExpertCharset);\r\n        } else if (pos === 2) {\r\n          return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset);\r\n        }\r\n\r\n        var bytes = this.bytes;\r\n        var start = pos;\r\n        var format = bytes[pos++];\r\n        var charset = [cid ? 0 : \".notdef\"];\r\n        var id, count, i;\r\n        length -= 1;\r\n\r\n        switch (format) {\r\n          case 0:\r\n            for (i = 0; i < length; i++) {\r\n              id = bytes[pos++] << 8 | bytes[pos++];\r\n              charset.push(cid ? id : strings.get(id));\r\n            }\r\n\r\n            break;\r\n\r\n          case 1:\r\n            while (charset.length <= length) {\r\n              id = bytes[pos++] << 8 | bytes[pos++];\r\n              count = bytes[pos++];\r\n\r\n              for (i = 0; i <= count; i++) {\r\n                charset.push(cid ? id++ : strings.get(id++));\r\n              }\r\n            }\r\n\r\n            break;\r\n\r\n          case 2:\r\n            while (charset.length <= length) {\r\n              id = bytes[pos++] << 8 | bytes[pos++];\r\n              count = bytes[pos++] << 8 | bytes[pos++];\r\n\r\n              for (i = 0; i <= count; i++) {\r\n                charset.push(cid ? id++ : strings.get(id++));\r\n              }\r\n            }\r\n\r\n            break;\r\n\r\n          default:\r\n            throw new _util.FormatError(\"Unknown charset format\");\r\n        }\r\n\r\n        var end = pos;\r\n        var raw = bytes.subarray(start, end);\r\n        return new CFFCharset(false, format, charset, raw);\r\n      }\r\n    }, {\r\n      key: \"parseEncoding\",\r\n      value: function parseEncoding(pos, properties, strings, charset) {\r\n        var encoding = Object.create(null);\r\n        var bytes = this.bytes;\r\n        var predefined = false;\r\n        var format, i, ii;\r\n        var raw = null;\r\n\r\n        function readSupplement() {\r\n          var supplementsCount = bytes[pos++];\r\n\r\n          for (i = 0; i < supplementsCount; i++) {\r\n            var code = bytes[pos++];\r\n            var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);\r\n            encoding[code] = charset.indexOf(strings.get(sid));\r\n          }\r\n        }\r\n\r\n        if (pos === 0 || pos === 1) {\r\n          predefined = true;\r\n          format = pos;\r\n          var baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding;\r\n\r\n          for (i = 0, ii = charset.length; i < ii; i++) {\r\n            var index = baseEncoding.indexOf(charset[i]);\r\n\r\n            if (index !== -1) {\r\n              encoding[index] = i;\r\n            }\r\n          }\r\n        } else {\r\n          var dataStart = pos;\r\n          format = bytes[pos++];\r\n\r\n          switch (format & 0x7f) {\r\n            case 0:\r\n              var glyphsCount = bytes[pos++];\r\n\r\n              for (i = 1; i <= glyphsCount; i++) {\r\n                encoding[bytes[pos++]] = i;\r\n              }\r\n\r\n              break;\r\n\r\n            case 1:\r\n              var rangesCount = bytes[pos++];\r\n              var gid = 1;\r\n\r\n              for (i = 0; i < rangesCount; i++) {\r\n                var start = bytes[pos++];\r\n                var left = bytes[pos++];\r\n\r\n                for (var j = start; j <= start + left; j++) {\r\n                  encoding[j] = gid++;\r\n                }\r\n              }\r\n\r\n              break;\r\n\r\n            default:\r\n              throw new _util.FormatError(\"Unknown encoding format: \".concat(format, \" in CFF\"));\r\n          }\r\n\r\n          var dataEnd = pos;\r\n\r\n          if (format & 0x80) {\r\n            bytes[dataStart] &= 0x7f;\r\n            readSupplement();\r\n          }\r\n\r\n          raw = bytes.subarray(dataStart, dataEnd);\r\n        }\r\n\r\n        format = format & 0x7f;\r\n        return new CFFEncoding(predefined, format, encoding, raw);\r\n      }\r\n    }, {\r\n      key: \"parseFDSelect\",\r\n      value: function parseFDSelect(pos, length) {\r\n        var bytes = this.bytes;\r\n        var format = bytes[pos++];\r\n        var fdSelect = [];\r\n        var i;\r\n\r\n        switch (format) {\r\n          case 0:\r\n            for (i = 0; i < length; ++i) {\r\n              var id = bytes[pos++];\r\n              fdSelect.push(id);\r\n            }\r\n\r\n            break;\r\n\r\n          case 3:\r\n            var rangesCount = bytes[pos++] << 8 | bytes[pos++];\r\n\r\n            for (i = 0; i < rangesCount; ++i) {\r\n              var first = bytes[pos++] << 8 | bytes[pos++];\r\n\r\n              if (i === 0 && first !== 0) {\r\n                (0, _util.warn)(\"parseFDSelect: The first range must have a first GID of 0\" + \" -- trying to recover.\");\r\n                first = 0;\r\n              }\r\n\r\n              var fdIndex = bytes[pos++];\r\n              var next = bytes[pos] << 8 | bytes[pos + 1];\r\n\r\n              for (var j = first; j < next; ++j) {\r\n                fdSelect.push(fdIndex);\r\n              }\r\n            }\r\n\r\n            pos += 2;\r\n            break;\r\n\r\n          default:\r\n            throw new _util.FormatError(\"parseFDSelect: Unknown format \\\"\".concat(format, \"\\\".\"));\r\n        }\r\n\r\n        if (fdSelect.length !== length) {\r\n          throw new _util.FormatError(\"parseFDSelect: Invalid font data.\");\r\n        }\r\n\r\n        return new CFFFDSelect(format, fdSelect);\r\n      }\r\n    }]);\r\n\r\n    return CFFParser;\r\n  }();\r\n\r\n  return CFFParser;\r\n}();\r\n\r\nexports.CFFParser = CFFParser;\r\n\r\nvar CFF = /*#__PURE__*/function () {\r\n  function CFF() {\r\n    _classCallCheck(this, CFF);\r\n\r\n    this.header = null;\r\n    this.names = [];\r\n    this.topDict = null;\r\n    this.strings = new CFFStrings();\r\n    this.globalSubrIndex = null;\r\n    this.encoding = null;\r\n    this.charset = null;\r\n    this.charStrings = null;\r\n    this.fdArray = [];\r\n    this.fdSelect = null;\r\n    this.isCIDFont = false;\r\n  }\r\n\r\n  _createClass(CFF, [{\r\n    key: \"duplicateFirstGlyph\",\r\n    value: function duplicateFirstGlyph() {\r\n      if (this.charStrings.count >= 65535) {\r\n        (0, _util.warn)(\"Not enough space in charstrings to duplicate first glyph.\");\r\n        return;\r\n      }\r\n\r\n      var glyphZero = this.charStrings.get(0);\r\n      this.charStrings.add(glyphZero);\r\n\r\n      if (this.isCIDFont) {\r\n        this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"hasGlyphId\",\r\n    value: function hasGlyphId(id) {\r\n      if (id < 0 || id >= this.charStrings.count) {\r\n        return false;\r\n      }\r\n\r\n      var glyph = this.charStrings.get(id);\r\n      return glyph.length > 0;\r\n    }\r\n  }]);\r\n\r\n  return CFF;\r\n}();\r\n\r\nexports.CFF = CFF;\r\n\r\nvar CFFHeader = function CFFHeader(major, minor, hdrSize, offSize) {\r\n  _classCallCheck(this, CFFHeader);\r\n\r\n  this.major = major;\r\n  this.minor = minor;\r\n  this.hdrSize = hdrSize;\r\n  this.offSize = offSize;\r\n};\r\n\r\nexports.CFFHeader = CFFHeader;\r\n\r\nvar CFFStrings = /*#__PURE__*/function () {\r\n  function CFFStrings() {\r\n    _classCallCheck(this, CFFStrings);\r\n\r\n    this.strings = [];\r\n  }\r\n\r\n  _createClass(CFFStrings, [{\r\n    key: \"get\",\r\n    value: function get(index) {\r\n      if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) {\r\n        return CFFStandardStrings[index];\r\n      }\r\n\r\n      if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) {\r\n        return this.strings[index - NUM_STANDARD_CFF_STRINGS];\r\n      }\r\n\r\n      return CFFStandardStrings[0];\r\n    }\r\n  }, {\r\n    key: \"getSID\",\r\n    value: function getSID(str) {\r\n      var index = CFFStandardStrings.indexOf(str);\r\n\r\n      if (index !== -1) {\r\n        return index;\r\n      }\r\n\r\n      index = this.strings.indexOf(str);\r\n\r\n      if (index !== -1) {\r\n        return index + NUM_STANDARD_CFF_STRINGS;\r\n      }\r\n\r\n      return -1;\r\n    }\r\n  }, {\r\n    key: \"add\",\r\n    value: function add(value) {\r\n      this.strings.push(value);\r\n    }\r\n  }, {\r\n    key: \"count\",\r\n    get: function get() {\r\n      return this.strings.length;\r\n    }\r\n  }]);\r\n\r\n  return CFFStrings;\r\n}();\r\n\r\nexports.CFFStrings = CFFStrings;\r\n\r\nvar CFFIndex = /*#__PURE__*/function () {\r\n  function CFFIndex() {\r\n    _classCallCheck(this, CFFIndex);\r\n\r\n    this.objects = [];\r\n    this.length = 0;\r\n  }\r\n\r\n  _createClass(CFFIndex, [{\r\n    key: \"add\",\r\n    value: function add(data) {\r\n      this.length += data.length;\r\n      this.objects.push(data);\r\n    }\r\n  }, {\r\n    key: \"set\",\r\n    value: function set(index, data) {\r\n      this.length += data.length - this.objects[index].length;\r\n      this.objects[index] = data;\r\n    }\r\n  }, {\r\n    key: \"get\",\r\n    value: function get(index) {\r\n      return this.objects[index];\r\n    }\r\n  }, {\r\n    key: \"count\",\r\n    get: function get() {\r\n      return this.objects.length;\r\n    }\r\n  }]);\r\n\r\n  return CFFIndex;\r\n}();\r\n\r\nexports.CFFIndex = CFFIndex;\r\n\r\nvar CFFDict = /*#__PURE__*/function () {\r\n  function CFFDict(tables, strings) {\r\n    _classCallCheck(this, CFFDict);\r\n\r\n    this.keyToNameMap = tables.keyToNameMap;\r\n    this.nameToKeyMap = tables.nameToKeyMap;\r\n    this.defaults = tables.defaults;\r\n    this.types = tables.types;\r\n    this.opcodes = tables.opcodes;\r\n    this.order = tables.order;\r\n    this.strings = strings;\r\n    this.values = Object.create(null);\r\n  }\r\n\r\n  _createClass(CFFDict, [{\r\n    key: \"setByKey\",\r\n    value: function setByKey(key, value) {\r\n      if (!(key in this.keyToNameMap)) {\r\n        return false;\r\n      }\r\n\r\n      var valueLength = value.length;\r\n\r\n      if (valueLength === 0) {\r\n        return true;\r\n      }\r\n\r\n      for (var i = 0; i < valueLength; i++) {\r\n        if (isNaN(value[i])) {\r\n          (0, _util.warn)('Invalid CFFDict value: \"' + value + '\" for key \"' + key + '\".');\r\n          return true;\r\n        }\r\n      }\r\n\r\n      var type = this.types[key];\r\n\r\n      if (type === \"num\" || type === \"sid\" || type === \"offset\") {\r\n        value = value[0];\r\n      }\r\n\r\n      this.values[key] = value;\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"setByName\",\r\n    value: function setByName(name, value) {\r\n      if (!(name in this.nameToKeyMap)) {\r\n        throw new _util.FormatError(\"Invalid dictionary name \\\"\".concat(name, \"\\\"\"));\r\n      }\r\n\r\n      this.values[this.nameToKeyMap[name]] = value;\r\n    }\r\n  }, {\r\n    key: \"hasName\",\r\n    value: function hasName(name) {\r\n      return this.nameToKeyMap[name] in this.values;\r\n    }\r\n  }, {\r\n    key: \"getByName\",\r\n    value: function getByName(name) {\r\n      if (!(name in this.nameToKeyMap)) {\r\n        throw new _util.FormatError(\"Invalid dictionary name \".concat(name, \"\\\"\"));\r\n      }\r\n\r\n      var key = this.nameToKeyMap[name];\r\n\r\n      if (!(key in this.values)) {\r\n        return this.defaults[key];\r\n      }\r\n\r\n      return this.values[key];\r\n    }\r\n  }, {\r\n    key: \"removeByName\",\r\n    value: function removeByName(name) {\r\n      delete this.values[this.nameToKeyMap[name]];\r\n    }\r\n  }], [{\r\n    key: \"createTables\",\r\n    value: function createTables(layout) {\r\n      var tables = {\r\n        keyToNameMap: {},\r\n        nameToKeyMap: {},\r\n        defaults: {},\r\n        types: {},\r\n        opcodes: {},\r\n        order: []\r\n      };\r\n\r\n      for (var i = 0, ii = layout.length; i < ii; ++i) {\r\n        var entry = layout[i];\r\n        var key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0];\r\n        tables.keyToNameMap[key] = entry[1];\r\n        tables.nameToKeyMap[entry[1]] = key;\r\n        tables.types[key] = entry[2];\r\n        tables.defaults[key] = entry[3];\r\n        tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]];\r\n        tables.order.push(key);\r\n      }\r\n\r\n      return tables;\r\n    }\r\n  }]);\r\n\r\n  return CFFDict;\r\n}();\r\n\r\nvar CFFTopDict = function CFFTopDictClosure() {\r\n  var layout = [[[12, 30], \"ROS\", [\"sid\", \"sid\", \"num\"], null], [[12, 20], \"SyntheticBase\", \"num\", null], [0, \"version\", \"sid\", null], [1, \"Notice\", \"sid\", null], [[12, 0], \"Copyright\", \"sid\", null], [2, \"FullName\", \"sid\", null], [3, \"FamilyName\", \"sid\", null], [4, \"Weight\", \"sid\", null], [[12, 1], \"isFixedPitch\", \"num\", 0], [[12, 2], \"ItalicAngle\", \"num\", 0], [[12, 3], \"UnderlinePosition\", \"num\", -100], [[12, 4], \"UnderlineThickness\", \"num\", 50], [[12, 5], \"PaintType\", \"num\", 0], [[12, 6], \"CharstringType\", \"num\", 2], [[12, 7], \"FontMatrix\", [\"num\", \"num\", \"num\", \"num\", \"num\", \"num\"], [0.001, 0, 0, 0.001, 0, 0]], [13, \"UniqueID\", \"num\", null], [5, \"FontBBox\", [\"num\", \"num\", \"num\", \"num\"], [0, 0, 0, 0]], [[12, 8], \"StrokeWidth\", \"num\", 0], [14, \"XUID\", \"array\", null], [15, \"charset\", \"offset\", 0], [16, \"Encoding\", \"offset\", 0], [17, \"CharStrings\", \"offset\", 0], [18, \"Private\", [\"offset\", \"offset\"], null], [[12, 21], \"PostScript\", \"sid\", null], [[12, 22], \"BaseFontName\", \"sid\", null], [[12, 23], \"BaseFontBlend\", \"delta\", null], [[12, 31], \"CIDFontVersion\", \"num\", 0], [[12, 32], \"CIDFontRevision\", \"num\", 0], [[12, 33], \"CIDFontType\", \"num\", 0], [[12, 34], \"CIDCount\", \"num\", 8720], [[12, 35], \"UIDBase\", \"num\", null], [[12, 37], \"FDSelect\", \"offset\", null], [[12, 36], \"FDArray\", \"offset\", null], [[12, 38], \"FontName\", \"sid\", null]];\r\n  var tables = null;\r\n\r\n  var CFFTopDict = /*#__PURE__*/function (_CFFDict) {\r\n    _inherits(CFFTopDict, _CFFDict);\r\n\r\n    var _super = _createSuper(CFFTopDict);\r\n\r\n    function CFFTopDict(strings) {\r\n      var _this;\r\n\r\n      _classCallCheck(this, CFFTopDict);\r\n\r\n      if (tables === null) {\r\n        tables = CFFDict.createTables(layout);\r\n      }\r\n\r\n      _this = _super.call(this, tables, strings);\r\n      _this.privateDict = null;\r\n      return _this;\r\n    }\r\n\r\n    return CFFTopDict;\r\n  }(CFFDict);\r\n\r\n  return CFFTopDict;\r\n}();\r\n\r\nexports.CFFTopDict = CFFTopDict;\r\n\r\nvar CFFPrivateDict = function CFFPrivateDictClosure() {\r\n  var layout = [[6, \"BlueValues\", \"delta\", null], [7, \"OtherBlues\", \"delta\", null], [8, \"FamilyBlues\", \"delta\", null], [9, \"FamilyOtherBlues\", \"delta\", null], [[12, 9], \"BlueScale\", \"num\", 0.039625], [[12, 10], \"BlueShift\", \"num\", 7], [[12, 11], \"BlueFuzz\", \"num\", 1], [10, \"StdHW\", \"num\", null], [11, \"StdVW\", \"num\", null], [[12, 12], \"StemSnapH\", \"delta\", null], [[12, 13], \"StemSnapV\", \"delta\", null], [[12, 14], \"ForceBold\", \"num\", 0], [[12, 17], \"LanguageGroup\", \"num\", 0], [[12, 18], \"ExpansionFactor\", \"num\", 0.06], [[12, 19], \"initialRandomSeed\", \"num\", 0], [20, \"defaultWidthX\", \"num\", 0], [21, \"nominalWidthX\", \"num\", 0], [19, \"Subrs\", \"offset\", null]];\r\n  var tables = null;\r\n\r\n  var CFFPrivateDict = /*#__PURE__*/function (_CFFDict2) {\r\n    _inherits(CFFPrivateDict, _CFFDict2);\r\n\r\n    var _super2 = _createSuper(CFFPrivateDict);\r\n\r\n    function CFFPrivateDict(strings) {\r\n      var _this2;\r\n\r\n      _classCallCheck(this, CFFPrivateDict);\r\n\r\n      if (tables === null) {\r\n        tables = CFFDict.createTables(layout);\r\n      }\r\n\r\n      _this2 = _super2.call(this, tables, strings);\r\n      _this2.subrsIndex = null;\r\n      return _this2;\r\n    }\r\n\r\n    return CFFPrivateDict;\r\n  }(CFFDict);\r\n\r\n  return CFFPrivateDict;\r\n}();\r\n\r\nexports.CFFPrivateDict = CFFPrivateDict;\r\nvar CFFCharsetPredefinedTypes = {\r\n  ISO_ADOBE: 0,\r\n  EXPERT: 1,\r\n  EXPERT_SUBSET: 2\r\n};\r\n\r\nvar CFFCharset = function CFFCharset(predefined, format, charset, raw) {\r\n  _classCallCheck(this, CFFCharset);\r\n\r\n  this.predefined = predefined;\r\n  this.format = format;\r\n  this.charset = charset;\r\n  this.raw = raw;\r\n};\r\n\r\nexports.CFFCharset = CFFCharset;\r\n\r\nvar CFFEncoding = function CFFEncoding(predefined, format, encoding, raw) {\r\n  _classCallCheck(this, CFFEncoding);\r\n\r\n  this.predefined = predefined;\r\n  this.format = format;\r\n  this.encoding = encoding;\r\n  this.raw = raw;\r\n};\r\n\r\nvar CFFFDSelect = /*#__PURE__*/function () {\r\n  function CFFFDSelect(format, fdSelect) {\r\n    _classCallCheck(this, CFFFDSelect);\r\n\r\n    this.format = format;\r\n    this.fdSelect = fdSelect;\r\n  }\r\n\r\n  _createClass(CFFFDSelect, [{\r\n    key: \"getFDIndex\",\r\n    value: function getFDIndex(glyphIndex) {\r\n      if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) {\r\n        return -1;\r\n      }\r\n\r\n      return this.fdSelect[glyphIndex];\r\n    }\r\n  }]);\r\n\r\n  return CFFFDSelect;\r\n}();\r\n\r\nexports.CFFFDSelect = CFFFDSelect;\r\n\r\nvar CFFOffsetTracker = /*#__PURE__*/function () {\r\n  function CFFOffsetTracker() {\r\n    _classCallCheck(this, CFFOffsetTracker);\r\n\r\n    this.offsets = Object.create(null);\r\n  }\r\n\r\n  _createClass(CFFOffsetTracker, [{\r\n    key: \"isTracking\",\r\n    value: function isTracking(key) {\r\n      return key in this.offsets;\r\n    }\r\n  }, {\r\n    key: \"track\",\r\n    value: function track(key, location) {\r\n      if (key in this.offsets) {\r\n        throw new _util.FormatError(\"Already tracking location of \".concat(key));\r\n      }\r\n\r\n      this.offsets[key] = location;\r\n    }\r\n  }, {\r\n    key: \"offset\",\r\n    value: function offset(value) {\r\n      for (var key in this.offsets) {\r\n        this.offsets[key] += value;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"setEntryLocation\",\r\n    value: function setEntryLocation(key, values, output) {\r\n      if (!(key in this.offsets)) {\r\n        throw new _util.FormatError(\"Not tracking location of \".concat(key));\r\n      }\r\n\r\n      var data = output.data;\r\n      var dataOffset = this.offsets[key];\r\n      var size = 5;\r\n\r\n      for (var i = 0, ii = values.length; i < ii; ++i) {\r\n        var offset0 = i * size + dataOffset;\r\n        var offset1 = offset0 + 1;\r\n        var offset2 = offset0 + 2;\r\n        var offset3 = offset0 + 3;\r\n        var offset4 = offset0 + 4;\r\n\r\n        if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) {\r\n          throw new _util.FormatError(\"writing to an offset that is not empty\");\r\n        }\r\n\r\n        var value = values[i];\r\n        data[offset0] = 0x1d;\r\n        data[offset1] = value >> 24 & 0xff;\r\n        data[offset2] = value >> 16 & 0xff;\r\n        data[offset3] = value >> 8 & 0xff;\r\n        data[offset4] = value & 0xff;\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return CFFOffsetTracker;\r\n}();\r\n\r\nvar CFFCompiler = /*#__PURE__*/function () {\r\n  function CFFCompiler(cff) {\r\n    _classCallCheck(this, CFFCompiler);\r\n\r\n    this.cff = cff;\r\n  }\r\n\r\n  _createClass(CFFCompiler, [{\r\n    key: \"compile\",\r\n    value: function compile() {\r\n      var cff = this.cff;\r\n      var output = {\r\n        data: [],\r\n        length: 0,\r\n        add: function CFFCompiler_add(data) {\r\n          this.data = this.data.concat(data);\r\n          this.length = this.data.length;\r\n        }\r\n      };\r\n      var header = this.compileHeader(cff.header);\r\n      output.add(header);\r\n      var nameIndex = this.compileNameIndex(cff.names);\r\n      output.add(nameIndex);\r\n\r\n      if (cff.isCIDFont) {\r\n        if (cff.topDict.hasName(\"FontMatrix\")) {\r\n          var base = cff.topDict.getByName(\"FontMatrix\");\r\n          cff.topDict.removeByName(\"FontMatrix\");\r\n\r\n          for (var i = 0, ii = cff.fdArray.length; i < ii; i++) {\r\n            var subDict = cff.fdArray[i];\r\n            var matrix = base.slice(0);\r\n\r\n            if (subDict.hasName(\"FontMatrix\")) {\r\n              matrix = _util.Util.transform(matrix, subDict.getByName(\"FontMatrix\"));\r\n            }\r\n\r\n            subDict.setByName(\"FontMatrix\", matrix);\r\n          }\r\n        }\r\n      }\r\n\r\n      var xuid = cff.topDict.getByName(\"XUID\");\r\n\r\n      if (xuid && xuid.length > 16) {\r\n        cff.topDict.removeByName(\"XUID\");\r\n      }\r\n\r\n      cff.topDict.setByName(\"charset\", 0);\r\n      var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont);\r\n      output.add(compiled.output);\r\n      var topDictTracker = compiled.trackers[0];\r\n      var stringIndex = this.compileStringIndex(cff.strings.strings);\r\n      output.add(stringIndex);\r\n      var globalSubrIndex = this.compileIndex(cff.globalSubrIndex);\r\n      output.add(globalSubrIndex);\r\n\r\n      if (cff.encoding && cff.topDict.hasName(\"Encoding\")) {\r\n        if (cff.encoding.predefined) {\r\n          topDictTracker.setEntryLocation(\"Encoding\", [cff.encoding.format], output);\r\n        } else {\r\n          var encoding = this.compileEncoding(cff.encoding);\r\n          topDictTracker.setEntryLocation(\"Encoding\", [output.length], output);\r\n          output.add(encoding);\r\n        }\r\n      }\r\n\r\n      var charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont);\r\n      topDictTracker.setEntryLocation(\"charset\", [output.length], output);\r\n      output.add(charset);\r\n      var charStrings = this.compileCharStrings(cff.charStrings);\r\n      topDictTracker.setEntryLocation(\"CharStrings\", [output.length], output);\r\n      output.add(charStrings);\r\n\r\n      if (cff.isCIDFont) {\r\n        topDictTracker.setEntryLocation(\"FDSelect\", [output.length], output);\r\n        var fdSelect = this.compileFDSelect(cff.fdSelect);\r\n        output.add(fdSelect);\r\n        compiled = this.compileTopDicts(cff.fdArray, output.length, true);\r\n        topDictTracker.setEntryLocation(\"FDArray\", [output.length], output);\r\n        output.add(compiled.output);\r\n        var fontDictTrackers = compiled.trackers;\r\n        this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);\r\n      }\r\n\r\n      this.compilePrivateDicts([cff.topDict], [topDictTracker], output);\r\n      output.add([0]);\r\n      return output.data;\r\n    }\r\n  }, {\r\n    key: \"encodeNumber\",\r\n    value: function encodeNumber(value) {\r\n      if (Number.isInteger(value)) {\r\n        return this.encodeInteger(value);\r\n      }\r\n\r\n      return this.encodeFloat(value);\r\n    }\r\n  }, {\r\n    key: \"encodeFloat\",\r\n    value: function encodeFloat(num) {\r\n      var value = num.toString();\r\n      var m = CFFCompiler.EncodeFloatRegExp.exec(value);\r\n\r\n      if (m) {\r\n        var epsilon = parseFloat(\"1e\" + ((m[2] ? +m[2] : 0) + m[1].length));\r\n        value = (Math.round(num * epsilon) / epsilon).toString();\r\n      }\r\n\r\n      var nibbles = \"\";\r\n      var i, ii;\r\n\r\n      for (i = 0, ii = value.length; i < ii; ++i) {\r\n        var a = value[i];\r\n\r\n        if (a === \"e\") {\r\n          nibbles += value[++i] === \"-\" ? \"c\" : \"b\";\r\n        } else if (a === \".\") {\r\n          nibbles += \"a\";\r\n        } else if (a === \"-\") {\r\n          nibbles += \"e\";\r\n        } else {\r\n          nibbles += a;\r\n        }\r\n      }\r\n\r\n      nibbles += nibbles.length & 1 ? \"f\" : \"ff\";\r\n      var out = [30];\r\n\r\n      for (i = 0, ii = nibbles.length; i < ii; i += 2) {\r\n        out.push(parseInt(nibbles.substring(i, i + 2), 16));\r\n      }\r\n\r\n      return out;\r\n    }\r\n  }, {\r\n    key: \"encodeInteger\",\r\n    value: function encodeInteger(value) {\r\n      var code;\r\n\r\n      if (value >= -107 && value <= 107) {\r\n        code = [value + 139];\r\n      } else if (value >= 108 && value <= 1131) {\r\n        value = value - 108;\r\n        code = [(value >> 8) + 247, value & 0xff];\r\n      } else if (value >= -1131 && value <= -108) {\r\n        value = -value - 108;\r\n        code = [(value >> 8) + 251, value & 0xff];\r\n      } else if (value >= -32768 && value <= 32767) {\r\n        code = [0x1c, value >> 8 & 0xff, value & 0xff];\r\n      } else {\r\n        code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff];\r\n      }\r\n\r\n      return code;\r\n    }\r\n  }, {\r\n    key: \"compileHeader\",\r\n    value: function compileHeader(header) {\r\n      return [header.major, header.minor, header.hdrSize, header.offSize];\r\n    }\r\n  }, {\r\n    key: \"compileNameIndex\",\r\n    value: function compileNameIndex(names) {\r\n      var nameIndex = new CFFIndex();\r\n\r\n      for (var i = 0, ii = names.length; i < ii; ++i) {\r\n        var name = names[i];\r\n        var length = Math.min(name.length, 127);\r\n        var sanitizedName = new Array(length);\r\n\r\n        for (var j = 0; j < length; j++) {\r\n          var _char = name[j];\r\n\r\n          if (_char < \"!\" || _char > \"~\" || _char === \"[\" || _char === \"]\" || _char === \"(\" || _char === \")\" || _char === \"{\" || _char === \"}\" || _char === \"<\" || _char === \">\" || _char === \"/\" || _char === \"%\") {\r\n            _char = \"_\";\r\n          }\r\n\r\n          sanitizedName[j] = _char;\r\n        }\r\n\r\n        sanitizedName = sanitizedName.join(\"\");\r\n\r\n        if (sanitizedName === \"\") {\r\n          sanitizedName = \"Bad_Font_Name\";\r\n        }\r\n\r\n        nameIndex.add((0, _util.stringToBytes)(sanitizedName));\r\n      }\r\n\r\n      return this.compileIndex(nameIndex);\r\n    }\r\n  }, {\r\n    key: \"compileTopDicts\",\r\n    value: function compileTopDicts(dicts, length, removeCidKeys) {\r\n      var fontDictTrackers = [];\r\n      var fdArrayIndex = new CFFIndex();\r\n\r\n      for (var i = 0, ii = dicts.length; i < ii; ++i) {\r\n        var fontDict = dicts[i];\r\n\r\n        if (removeCidKeys) {\r\n          fontDict.removeByName(\"CIDFontVersion\");\r\n          fontDict.removeByName(\"CIDFontRevision\");\r\n          fontDict.removeByName(\"CIDFontType\");\r\n          fontDict.removeByName(\"CIDCount\");\r\n          fontDict.removeByName(\"UIDBase\");\r\n        }\r\n\r\n        var fontDictTracker = new CFFOffsetTracker();\r\n        var fontDictData = this.compileDict(fontDict, fontDictTracker);\r\n        fontDictTrackers.push(fontDictTracker);\r\n        fdArrayIndex.add(fontDictData);\r\n        fontDictTracker.offset(length);\r\n      }\r\n\r\n      fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);\r\n      return {\r\n        trackers: fontDictTrackers,\r\n        output: fdArrayIndex\r\n      };\r\n    }\r\n  }, {\r\n    key: \"compilePrivateDicts\",\r\n    value: function compilePrivateDicts(dicts, trackers, output) {\r\n      for (var i = 0, ii = dicts.length; i < ii; ++i) {\r\n        var fontDict = dicts[i];\r\n        var privateDict = fontDict.privateDict;\r\n\r\n        if (!privateDict || !fontDict.hasName(\"Private\")) {\r\n          throw new _util.FormatError(\"There must be a private dictionary.\");\r\n        }\r\n\r\n        var privateDictTracker = new CFFOffsetTracker();\r\n        var privateDictData = this.compileDict(privateDict, privateDictTracker);\r\n        var outputLength = output.length;\r\n        privateDictTracker.offset(outputLength);\r\n\r\n        if (!privateDictData.length) {\r\n          outputLength = 0;\r\n        }\r\n\r\n        trackers[i].setEntryLocation(\"Private\", [privateDictData.length, outputLength], output);\r\n        output.add(privateDictData);\r\n\r\n        if (privateDict.subrsIndex && privateDict.hasName(\"Subrs\")) {\r\n          var subrs = this.compileIndex(privateDict.subrsIndex);\r\n          privateDictTracker.setEntryLocation(\"Subrs\", [privateDictData.length], output);\r\n          output.add(subrs);\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"compileDict\",\r\n    value: function compileDict(dict, offsetTracker) {\r\n      var out = [];\r\n      var order = dict.order;\r\n\r\n      for (var i = 0; i < order.length; ++i) {\r\n        var key = order[i];\r\n\r\n        if (!(key in dict.values)) {\r\n          continue;\r\n        }\r\n\r\n        var values = dict.values[key];\r\n        var types = dict.types[key];\r\n\r\n        if (!Array.isArray(types)) {\r\n          types = [types];\r\n        }\r\n\r\n        if (!Array.isArray(values)) {\r\n          values = [values];\r\n        }\r\n\r\n        if (values.length === 0) {\r\n          continue;\r\n        }\r\n\r\n        for (var j = 0, jj = types.length; j < jj; ++j) {\r\n          var type = types[j];\r\n          var value = values[j];\r\n\r\n          switch (type) {\r\n            case \"num\":\r\n            case \"sid\":\r\n              out = out.concat(this.encodeNumber(value));\r\n              break;\r\n\r\n            case \"offset\":\r\n              var name = dict.keyToNameMap[key];\r\n\r\n              if (!offsetTracker.isTracking(name)) {\r\n                offsetTracker.track(name, out.length);\r\n              }\r\n\r\n              out = out.concat([0x1d, 0, 0, 0, 0]);\r\n              break;\r\n\r\n            case \"array\":\r\n            case \"delta\":\r\n              out = out.concat(this.encodeNumber(value));\r\n\r\n              for (var k = 1, kk = values.length; k < kk; ++k) {\r\n                out = out.concat(this.encodeNumber(values[k]));\r\n              }\r\n\r\n              break;\r\n\r\n            default:\r\n              throw new _util.FormatError(\"Unknown data type of \".concat(type));\r\n          }\r\n        }\r\n\r\n        out = out.concat(dict.opcodes[key]);\r\n      }\r\n\r\n      return out;\r\n    }\r\n  }, {\r\n    key: \"compileStringIndex\",\r\n    value: function compileStringIndex(strings) {\r\n      var stringIndex = new CFFIndex();\r\n\r\n      for (var i = 0, ii = strings.length; i < ii; ++i) {\r\n        stringIndex.add((0, _util.stringToBytes)(strings[i]));\r\n      }\r\n\r\n      return this.compileIndex(stringIndex);\r\n    }\r\n  }, {\r\n    key: \"compileGlobalSubrIndex\",\r\n    value: function compileGlobalSubrIndex() {\r\n      var globalSubrIndex = this.cff.globalSubrIndex;\r\n      this.out.writeByteArray(this.compileIndex(globalSubrIndex));\r\n    }\r\n  }, {\r\n    key: \"compileCharStrings\",\r\n    value: function compileCharStrings(charStrings) {\r\n      var charStringsIndex = new CFFIndex();\r\n\r\n      for (var i = 0; i < charStrings.count; i++) {\r\n        var glyph = charStrings.get(i);\r\n\r\n        if (glyph.length === 0) {\r\n          charStringsIndex.add(new Uint8Array([0x8b, 0x0e]));\r\n          continue;\r\n        }\r\n\r\n        charStringsIndex.add(glyph);\r\n      }\r\n\r\n      return this.compileIndex(charStringsIndex);\r\n    }\r\n  }, {\r\n    key: \"compileCharset\",\r\n    value: function compileCharset(charset, numGlyphs, strings, isCIDFont) {\r\n      var out;\r\n      var numGlyphsLessNotDef = numGlyphs - 1;\r\n\r\n      if (isCIDFont) {\r\n        out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]);\r\n      } else {\r\n        var length = 1 + numGlyphsLessNotDef * 2;\r\n        out = new Uint8Array(length);\r\n        out[0] = 0;\r\n        var charsetIndex = 0;\r\n        var numCharsets = charset.charset.length;\r\n        var warned = false;\r\n\r\n        for (var i = 1; i < out.length; i += 2) {\r\n          var sid = 0;\r\n\r\n          if (charsetIndex < numCharsets) {\r\n            var name = charset.charset[charsetIndex++];\r\n            sid = strings.getSID(name);\r\n\r\n            if (sid === -1) {\r\n              sid = 0;\r\n\r\n              if (!warned) {\r\n                warned = true;\r\n                (0, _util.warn)(\"Couldn't find \".concat(name, \" in CFF strings\"));\r\n              }\r\n            }\r\n          }\r\n\r\n          out[i] = sid >> 8 & 0xff;\r\n          out[i + 1] = sid & 0xff;\r\n        }\r\n      }\r\n\r\n      return this.compileTypedArray(out);\r\n    }\r\n  }, {\r\n    key: \"compileEncoding\",\r\n    value: function compileEncoding(encoding) {\r\n      return this.compileTypedArray(encoding.raw);\r\n    }\r\n  }, {\r\n    key: \"compileFDSelect\",\r\n    value: function compileFDSelect(fdSelect) {\r\n      var format = fdSelect.format;\r\n      var out, i;\r\n\r\n      switch (format) {\r\n        case 0:\r\n          out = new Uint8Array(1 + fdSelect.fdSelect.length);\r\n          out[0] = format;\r\n\r\n          for (i = 0; i < fdSelect.fdSelect.length; i++) {\r\n            out[i + 1] = fdSelect.fdSelect[i];\r\n          }\r\n\r\n          break;\r\n\r\n        case 3:\r\n          var start = 0;\r\n          var lastFD = fdSelect.fdSelect[0];\r\n          var ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD];\r\n\r\n          for (i = 1; i < fdSelect.fdSelect.length; i++) {\r\n            var currentFD = fdSelect.fdSelect[i];\r\n\r\n            if (currentFD !== lastFD) {\r\n              ranges.push(i >> 8 & 0xff, i & 0xff, currentFD);\r\n              lastFD = currentFD;\r\n            }\r\n          }\r\n\r\n          var numRanges = (ranges.length - 3) / 3;\r\n          ranges[1] = numRanges >> 8 & 0xff;\r\n          ranges[2] = numRanges & 0xff;\r\n          ranges.push(i >> 8 & 0xff, i & 0xff);\r\n          out = new Uint8Array(ranges);\r\n          break;\r\n      }\r\n\r\n      return this.compileTypedArray(out);\r\n    }\r\n  }, {\r\n    key: \"compileTypedArray\",\r\n    value: function compileTypedArray(data) {\r\n      var out = [];\r\n\r\n      for (var i = 0, ii = data.length; i < ii; ++i) {\r\n        out[i] = data[i];\r\n      }\r\n\r\n      return out;\r\n    }\r\n  }, {\r\n    key: \"compileIndex\",\r\n    value: function compileIndex(index) {\r\n      var trackers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\r\n      var objects = index.objects;\r\n      var count = objects.length;\r\n\r\n      if (count === 0) {\r\n        return [0, 0, 0];\r\n      }\r\n\r\n      var data = [count >> 8 & 0xff, count & 0xff];\r\n      var lastOffset = 1,\r\n          i;\r\n\r\n      for (i = 0; i < count; ++i) {\r\n        lastOffset += objects[i].length;\r\n      }\r\n\r\n      var offsetSize;\r\n\r\n      if (lastOffset < 0x100) {\r\n        offsetSize = 1;\r\n      } else if (lastOffset < 0x10000) {\r\n        offsetSize = 2;\r\n      } else if (lastOffset < 0x1000000) {\r\n        offsetSize = 3;\r\n      } else {\r\n        offsetSize = 4;\r\n      }\r\n\r\n      data.push(offsetSize);\r\n      var relativeOffset = 1;\r\n\r\n      for (i = 0; i < count + 1; i++) {\r\n        if (offsetSize === 1) {\r\n          data.push(relativeOffset & 0xff);\r\n        } else if (offsetSize === 2) {\r\n          data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff);\r\n        } else if (offsetSize === 3) {\r\n          data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);\r\n        } else {\r\n          data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff);\r\n        }\r\n\r\n        if (objects[i]) {\r\n          relativeOffset += objects[i].length;\r\n        }\r\n      }\r\n\r\n      for (i = 0; i < count; i++) {\r\n        if (trackers[i]) {\r\n          trackers[i].offset(data.length);\r\n        }\r\n\r\n        for (var j = 0, jj = objects[i].length; j < jj; j++) {\r\n          data.push(objects[i][j]);\r\n        }\r\n      }\r\n\r\n      return data;\r\n    }\r\n  }], [{\r\n    key: \"EncodeFloatRegExp\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"EncodeFloatRegExp\", /\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/);\r\n    }\r\n  }]);\r\n\r\n  return CFFCompiler;\r\n}();\r\n\r\nexports.CFFCompiler = CFFCompiler;\r\n\r\n/***/ }),\r\n/* 161 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.ISOAdobeCharset = exports.ExpertSubsetCharset = exports.ExpertCharset = void 0;\r\nvar ISOAdobeCharset = [\".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\", \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\", \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\", \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\", \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\", \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\", \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\", \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\", \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\", \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\", \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\", \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\", \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\", \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\", \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\", \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\", \"ydieresis\", \"zcaron\"];\r\nexports.ISOAdobeCharset = ISOAdobeCharset;\r\nvar ExpertCharset = [\".notdef\", \"space\", \"exclamsmall\", \"Hungarumlautsmall\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"comma\", \"hyphen\", \"period\", \"fraction\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"colon\", \"semicolon\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\", \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\", \"tsuperior\", \"ff\", \"fi\", \"fl\", \"ffi\", \"ffl\", \"parenleftinferior\", \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\", \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\", \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\", \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\", \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\", \"onequarter\", \"onehalf\", \"threequarters\", \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"onesuperior\", \"twosuperior\", \"threesuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\", \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\", \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\", \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\", \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\", \"Ydieresissmall\"];\r\nexports.ExpertCharset = ExpertCharset;\r\nvar ExpertSubsetCharset = [\".notdef\", \"space\", \"dollaroldstyle\", \"dollarsuperior\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"comma\", \"hyphen\", \"period\", \"fraction\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"colon\", \"semicolon\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\", \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\", \"tsuperior\", \"ff\", \"fi\", \"fl\", \"ffi\", \"ffl\", \"parenleftinferior\", \"parenrightinferior\", \"hyphensuperior\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"centoldstyle\", \"figuredash\", \"hypheninferior\", \"onequarter\", \"onehalf\", \"threequarters\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"onesuperior\", \"twosuperior\", \"threesuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\", \"commainferior\"];\r\nexports.ExpertSubsetCharset = ExpertSubsetCharset;\r\n\r\n/***/ }),\r\n/* 162 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.getEncoding = getEncoding;\r\nexports.ZapfDingbatsEncoding = exports.WinAnsiEncoding = exports.SymbolSetEncoding = exports.StandardEncoding = exports.MacRomanEncoding = exports.ExpertEncoding = void 0;\r\nvar ExpertEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclamsmall\", \"Hungarumlautsmall\", \"\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"comma\", \"hyphen\", \"period\", \"fraction\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"colon\", \"semicolon\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"\", \"\", \"\", \"isuperior\", \"\", \"\", \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"\", \"\", \"rsuperior\", \"ssuperior\", \"tsuperior\", \"\", \"ff\", \"fi\", \"fl\", \"ffi\", \"ffl\", \"parenleftinferior\", \"\", \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\", \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"Tildesmall\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"exclamdownsmall\", \"centoldstyle\", \"Lslashsmall\", \"\", \"\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\", \"Caronsmall\", \"\", \"Dotaccentsmall\", \"\", \"\", \"Macronsmall\", \"\", \"\", \"figuredash\", \"hypheninferior\", \"\", \"\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\", \"\", \"\", \"\", \"onequarter\", \"onehalf\", \"threequarters\", \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"\", \"\", \"zerosuperior\", \"onesuperior\", \"twosuperior\", \"threesuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\", \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\", \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\", \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\", \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\", \"Ydieresissmall\"];\r\nexports.ExpertEncoding = ExpertEncoding;\r\nvar MacExpertEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclamsmall\", \"Hungarumlautsmall\", \"centoldstyle\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"comma\", \"hyphen\", \"period\", \"fraction\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"colon\", \"semicolon\", \"\", \"threequartersemdash\", \"\", \"questionsmall\", \"\", \"\", \"\", \"\", \"Ethsmall\", \"\", \"\", \"onequarter\", \"onehalf\", \"threequarters\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"\", \"\", \"\", \"\", \"\", \"\", \"ff\", \"fi\", \"fl\", \"ffi\", \"ffl\", \"parenleftinferior\", \"\", \"parenrightinferior\", \"Circumflexsmall\", \"hypheninferior\", \"Gravesmall\", \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"Tildesmall\", \"\", \"\", \"asuperior\", \"centsuperior\", \"\", \"\", \"\", \"\", \"Aacutesmall\", \"Agravesmall\", \"Acircumflexsmall\", \"Adieresissmall\", \"Atildesmall\", \"Aringsmall\", \"Ccedillasmall\", \"Eacutesmall\", \"Egravesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Iacutesmall\", \"Igravesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ntildesmall\", \"Oacutesmall\", \"Ogravesmall\", \"Ocircumflexsmall\", \"Odieresissmall\", \"Otildesmall\", \"Uacutesmall\", \"Ugravesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"\", \"eightsuperior\", \"fourinferior\", \"threeinferior\", \"sixinferior\", \"eightinferior\", \"seveninferior\", \"Scaronsmall\", \"\", \"centinferior\", \"twoinferior\", \"\", \"Dieresissmall\", \"\", \"Caronsmall\", \"osuperior\", \"fiveinferior\", \"\", \"commainferior\", \"periodinferior\", \"Yacutesmall\", \"\", \"dollarinferior\", \"\", \"\", \"Thornsmall\", \"\", \"nineinferior\", \"zeroinferior\", \"Zcaronsmall\", \"AEsmall\", \"Oslashsmall\", \"questiondownsmall\", \"oneinferior\", \"Lslashsmall\", \"\", \"\", \"\", \"\", \"\", \"\", \"Cedillasmall\", \"\", \"\", \"\", \"\", \"\", \"OEsmall\", \"figuredash\", \"hyphensuperior\", \"\", \"\", \"\", \"\", \"exclamdownsmall\", \"\", \"Ydieresissmall\", \"\", \"onesuperior\", \"twosuperior\", \"threesuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"ninesuperior\", \"zerosuperior\", \"\", \"esuperior\", \"rsuperior\", \"tsuperior\", \"\", \"\", \"isuperior\", \"ssuperior\", \"dsuperior\", \"\", \"\", \"\", \"\", \"\", \"lsuperior\", \"Ogoneksmall\", \"Brevesmall\", \"Macronsmall\", \"bsuperior\", \"nsuperior\", \"msuperior\", \"commasuperior\", \"periodsuperior\", \"Dotaccentsmall\", \"Ringsmall\", \"\", \"\", \"\", \"\"];\r\nvar MacRomanEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quotesingle\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"grave\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"\", \"Adieresis\", \"Aring\", \"Ccedilla\", \"Eacute\", \"Ntilde\", \"Odieresis\", \"Udieresis\", \"aacute\", \"agrave\", \"acircumflex\", \"adieresis\", \"atilde\", \"aring\", \"ccedilla\", \"eacute\", \"egrave\", \"ecircumflex\", \"edieresis\", \"iacute\", \"igrave\", \"icircumflex\", \"idieresis\", \"ntilde\", \"oacute\", \"ograve\", \"ocircumflex\", \"odieresis\", \"otilde\", \"uacute\", \"ugrave\", \"ucircumflex\", \"udieresis\", \"dagger\", \"degree\", \"cent\", \"sterling\", \"section\", \"bullet\", \"paragraph\", \"germandbls\", \"registered\", \"copyright\", \"trademark\", \"acute\", \"dieresis\", \"notequal\", \"AE\", \"Oslash\", \"infinity\", \"plusminus\", \"lessequal\", \"greaterequal\", \"yen\", \"mu\", \"partialdiff\", \"summation\", \"product\", \"pi\", \"integral\", \"ordfeminine\", \"ordmasculine\", \"Omega\", \"ae\", \"oslash\", \"questiondown\", \"exclamdown\", \"logicalnot\", \"radical\", \"florin\", \"approxequal\", \"Delta\", \"guillemotleft\", \"guillemotright\", \"ellipsis\", \"space\", \"Agrave\", \"Atilde\", \"Otilde\", \"OE\", \"oe\", \"endash\", \"emdash\", \"quotedblleft\", \"quotedblright\", \"quoteleft\", \"quoteright\", \"divide\", \"lozenge\", \"ydieresis\", \"Ydieresis\", \"fraction\", \"currency\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"daggerdbl\", \"periodcentered\", \"quotesinglbase\", \"quotedblbase\", \"perthousand\", \"Acircumflex\", \"Ecircumflex\", \"Aacute\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Oacute\", \"Ocircumflex\", \"apple\", \"Ograve\", \"Uacute\", \"Ucircumflex\", \"Ugrave\", \"dotlessi\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\"];\r\nexports.MacRomanEncoding = MacRomanEncoding;\r\nvar StandardEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"\", \"endash\", \"dagger\", \"daggerdbl\", \"periodcentered\", \"\", \"paragraph\", \"bullet\", \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\", \"ellipsis\", \"perthousand\", \"\", \"questiondown\", \"\", \"grave\", \"acute\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"\", \"ring\", \"cedilla\", \"\", \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"AE\", \"\", \"ordfeminine\", \"\", \"\", \"\", \"\", \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"\", \"\", \"\", \"\", \"\", \"ae\", \"\", \"\", \"\", \"dotlessi\", \"\", \"\", \"lslash\", \"oslash\", \"oe\", \"germandbls\", \"\", \"\", \"\", \"\"];\r\nexports.StandardEncoding = StandardEncoding;\r\nvar WinAnsiEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quotesingle\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"grave\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"bullet\", \"Euro\", \"bullet\", \"quotesinglbase\", \"florin\", \"quotedblbase\", \"ellipsis\", \"dagger\", \"daggerdbl\", \"circumflex\", \"perthousand\", \"Scaron\", \"guilsinglleft\", \"OE\", \"bullet\", \"Zcaron\", \"bullet\", \"bullet\", \"quoteleft\", \"quoteright\", \"quotedblleft\", \"quotedblright\", \"bullet\", \"endash\", \"emdash\", \"tilde\", \"trademark\", \"scaron\", \"guilsinglright\", \"oe\", \"bullet\", \"zcaron\", \"Ydieresis\", \"space\", \"exclamdown\", \"cent\", \"sterling\", \"currency\", \"yen\", \"brokenbar\", \"section\", \"dieresis\", \"copyright\", \"ordfeminine\", \"guillemotleft\", \"logicalnot\", \"hyphen\", \"registered\", \"macron\", \"degree\", \"plusminus\", \"twosuperior\", \"threesuperior\", \"acute\", \"mu\", \"paragraph\", \"periodcentered\", \"cedilla\", \"onesuperior\", \"ordmasculine\", \"guillemotright\", \"onequarter\", \"onehalf\", \"threequarters\", \"questiondown\", \"Agrave\", \"Aacute\", \"Acircumflex\", \"Atilde\", \"Adieresis\", \"Aring\", \"AE\", \"Ccedilla\", \"Egrave\", \"Eacute\", \"Ecircumflex\", \"Edieresis\", \"Igrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Eth\", \"Ntilde\", \"Ograve\", \"Oacute\", \"Ocircumflex\", \"Otilde\", \"Odieresis\", \"multiply\", \"Oslash\", \"Ugrave\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Yacute\", \"Thorn\", \"germandbls\", \"agrave\", \"aacute\", \"acircumflex\", \"atilde\", \"adieresis\", \"aring\", \"ae\", \"ccedilla\", \"egrave\", \"eacute\", \"ecircumflex\", \"edieresis\", \"igrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"eth\", \"ntilde\", \"ograve\", \"oacute\", \"ocircumflex\", \"otilde\", \"odieresis\", \"divide\", \"oslash\", \"ugrave\", \"uacute\", \"ucircumflex\", \"udieresis\", \"yacute\", \"thorn\", \"ydieresis\"];\r\nexports.WinAnsiEncoding = WinAnsiEncoding;\r\nvar SymbolSetEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"exclam\", \"universal\", \"numbersign\", \"existential\", \"percent\", \"ampersand\", \"suchthat\", \"parenleft\", \"parenright\", \"asteriskmath\", \"plus\", \"comma\", \"minus\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"congruent\", \"Alpha\", \"Beta\", \"Chi\", \"Delta\", \"Epsilon\", \"Phi\", \"Gamma\", \"Eta\", \"Iota\", \"theta1\", \"Kappa\", \"Lambda\", \"Mu\", \"Nu\", \"Omicron\", \"Pi\", \"Theta\", \"Rho\", \"Sigma\", \"Tau\", \"Upsilon\", \"sigma1\", \"Omega\", \"Xi\", \"Psi\", \"Zeta\", \"bracketleft\", \"therefore\", \"bracketright\", \"perpendicular\", \"underscore\", \"radicalex\", \"alpha\", \"beta\", \"chi\", \"delta\", \"epsilon\", \"phi\", \"gamma\", \"eta\", \"iota\", \"phi1\", \"kappa\", \"lambda\", \"mu\", \"nu\", \"omicron\", \"pi\", \"theta\", \"rho\", \"sigma\", \"tau\", \"upsilon\", \"omega1\", \"omega\", \"xi\", \"psi\", \"zeta\", \"braceleft\", \"bar\", \"braceright\", \"similar\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"Euro\", \"Upsilon1\", \"minute\", \"lessequal\", \"fraction\", \"infinity\", \"florin\", \"club\", \"diamond\", \"heart\", \"spade\", \"arrowboth\", \"arrowleft\", \"arrowup\", \"arrowright\", \"arrowdown\", \"degree\", \"plusminus\", \"second\", \"greaterequal\", \"multiply\", \"proportional\", \"partialdiff\", \"bullet\", \"divide\", \"notequal\", \"equivalence\", \"approxequal\", \"ellipsis\", \"arrowvertex\", \"arrowhorizex\", \"carriagereturn\", \"aleph\", \"Ifraktur\", \"Rfraktur\", \"weierstrass\", \"circlemultiply\", \"circleplus\", \"emptyset\", \"intersection\", \"union\", \"propersuperset\", \"reflexsuperset\", \"notsubset\", \"propersubset\", \"reflexsubset\", \"element\", \"notelement\", \"angle\", \"gradient\", \"registerserif\", \"copyrightserif\", \"trademarkserif\", \"product\", \"radical\", \"dotmath\", \"logicalnot\", \"logicaland\", \"logicalor\", \"arrowdblboth\", \"arrowdblleft\", \"arrowdblup\", \"arrowdblright\", \"arrowdbldown\", \"lozenge\", \"angleleft\", \"registersans\", \"copyrightsans\", \"trademarksans\", \"summation\", \"parenlefttp\", \"parenleftex\", \"parenleftbt\", \"bracketlefttp\", \"bracketleftex\", \"bracketleftbt\", \"bracelefttp\", \"braceleftmid\", \"braceleftbt\", \"braceex\", \"\", \"angleright\", \"integral\", \"integraltp\", \"integralex\", \"integralbt\", \"parenrighttp\", \"parenrightex\", \"parenrightbt\", \"bracketrighttp\", \"bracketrightex\", \"bracketrightbt\", \"bracerighttp\", \"bracerightmid\", \"bracerightbt\", \"\"];\r\nexports.SymbolSetEncoding = SymbolSetEncoding;\r\nvar ZapfDingbatsEncoding = [\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"space\", \"a1\", \"a2\", \"a202\", \"a3\", \"a4\", \"a5\", \"a119\", \"a118\", \"a117\", \"a11\", \"a12\", \"a13\", \"a14\", \"a15\", \"a16\", \"a105\", \"a17\", \"a18\", \"a19\", \"a20\", \"a21\", \"a22\", \"a23\", \"a24\", \"a25\", \"a26\", \"a27\", \"a28\", \"a6\", \"a7\", \"a8\", \"a9\", \"a10\", \"a29\", \"a30\", \"a31\", \"a32\", \"a33\", \"a34\", \"a35\", \"a36\", \"a37\", \"a38\", \"a39\", \"a40\", \"a41\", \"a42\", \"a43\", \"a44\", \"a45\", \"a46\", \"a47\", \"a48\", \"a49\", \"a50\", \"a51\", \"a52\", \"a53\", \"a54\", \"a55\", \"a56\", \"a57\", \"a58\", \"a59\", \"a60\", \"a61\", \"a62\", \"a63\", \"a64\", \"a65\", \"a66\", \"a67\", \"a68\", \"a69\", \"a70\", \"a71\", \"a72\", \"a73\", \"a74\", \"a203\", \"a75\", \"a204\", \"a76\", \"a77\", \"a78\", \"a79\", \"a81\", \"a82\", \"a83\", \"a84\", \"a97\", \"a98\", \"a99\", \"a100\", \"\", \"a89\", \"a90\", \"a93\", \"a94\", \"a91\", \"a92\", \"a205\", \"a85\", \"a206\", \"a86\", \"a87\", \"a88\", \"a95\", \"a96\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"a101\", \"a102\", \"a103\", \"a104\", \"a106\", \"a107\", \"a108\", \"a112\", \"a111\", \"a110\", \"a109\", \"a120\", \"a121\", \"a122\", \"a123\", \"a124\", \"a125\", \"a126\", \"a127\", \"a128\", \"a129\", \"a130\", \"a131\", \"a132\", \"a133\", \"a134\", \"a135\", \"a136\", \"a137\", \"a138\", \"a139\", \"a140\", \"a141\", \"a142\", \"a143\", \"a144\", \"a145\", \"a146\", \"a147\", \"a148\", \"a149\", \"a150\", \"a151\", \"a152\", \"a153\", \"a154\", \"a155\", \"a156\", \"a157\", \"a158\", \"a159\", \"a160\", \"a161\", \"a163\", \"a164\", \"a196\", \"a165\", \"a192\", \"a166\", \"a167\", \"a168\", \"a169\", \"a170\", \"a171\", \"a172\", \"a173\", \"a162\", \"a174\", \"a175\", \"a176\", \"a177\", \"a178\", \"a179\", \"a193\", \"a180\", \"a199\", \"a181\", \"a200\", \"a182\", \"\", \"a201\", \"a183\", \"a184\", \"a197\", \"a185\", \"a194\", \"a198\", \"a186\", \"a195\", \"a187\", \"a188\", \"a189\", \"a190\", \"a191\", \"\"];\r\nexports.ZapfDingbatsEncoding = ZapfDingbatsEncoding;\r\n\r\nfunction getEncoding(encodingName) {\r\n  switch (encodingName) {\r\n    case \"WinAnsiEncoding\":\r\n      return WinAnsiEncoding;\r\n\r\n    case \"StandardEncoding\":\r\n      return StandardEncoding;\r\n\r\n    case \"MacRomanEncoding\":\r\n      return MacRomanEncoding;\r\n\r\n    case \"SymbolSetEncoding\":\r\n      return SymbolSetEncoding;\r\n\r\n    case \"ZapfDingbatsEncoding\":\r\n      return ZapfDingbatsEncoding;\r\n\r\n    case \"ExpertEncoding\":\r\n      return ExpertEncoding;\r\n\r\n    case \"MacExpertEncoding\":\r\n      return MacExpertEncoding;\r\n\r\n    default:\r\n      return null;\r\n  }\r\n}\r\n\r\n/***/ }),\r\n/* 163 */\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n__w_pdfjs_require__.r(__webpack_exports__);\r\n/* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, {\r\n/* harmony export */   \"getDingbatsGlyphsUnicode\": () => (/* binding */ getDingbatsGlyphsUnicode),\r\n/* harmony export */   \"getGlyphsUnicode\": () => (/* binding */ getGlyphsUnicode)\r\n/* harmony export */ });\r\n/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(138);\r\n\r\nvar getGlyphsUnicode = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () {\r\n return [\r\n  \"A\",\r\n  0x0041,\r\n  \"AE\",\r\n  0x00c6,\r\n  \"AEacute\",\r\n  0x01fc,\r\n  \"AEmacron\",\r\n  0x01e2,\r\n  \"AEsmall\",\r\n  0xf7e6,\r\n  \"Aacute\",\r\n  0x00c1,\r\n  \"Aacutesmall\",\r\n  0xf7e1,\r\n  \"Abreve\",\r\n  0x0102,\r\n  \"Abreveacute\",\r\n  0x1eae,\r\n  \"Abrevecyrillic\",\r\n  0x04d0,\r\n  \"Abrevedotbelow\",\r\n  0x1eb6,\r\n  \"Abrevegrave\",\r\n  0x1eb0,\r\n  \"Abrevehookabove\",\r\n  0x1eb2,\r\n  \"Abrevetilde\",\r\n  0x1eb4,\r\n  \"Acaron\",\r\n  0x01cd,\r\n  \"Acircle\",\r\n  0x24b6,\r\n  \"Acircumflex\",\r\n  0x00c2,\r\n  \"Acircumflexacute\",\r\n  0x1ea4,\r\n  \"Acircumflexdotbelow\",\r\n  0x1eac,\r\n  \"Acircumflexgrave\",\r\n  0x1ea6,\r\n  \"Acircumflexhookabove\",\r\n  0x1ea8,\r\n  \"Acircumflexsmall\",\r\n  0xf7e2,\r\n  \"Acircumflextilde\",\r\n  0x1eaa,\r\n  \"Acute\",\r\n  0xf6c9,\r\n  \"Acutesmall\",\r\n  0xf7b4,\r\n  \"Acyrillic\",\r\n  0x0410,\r\n  \"Adblgrave\",\r\n  0x0200,\r\n  \"Adieresis\",\r\n  0x00c4,\r\n  \"Adieresiscyrillic\",\r\n  0x04d2,\r\n  \"Adieresismacron\",\r\n  0x01de,\r\n  \"Adieresissmall\",\r\n  0xf7e4,\r\n  \"Adotbelow\",\r\n  0x1ea0,\r\n  \"Adotmacron\",\r\n  0x01e0,\r\n  \"Agrave\",\r\n  0x00c0,\r\n  \"Agravesmall\",\r\n  0xf7e0,\r\n  \"Ahookabove\",\r\n  0x1ea2,\r\n  \"Aiecyrillic\",\r\n  0x04d4,\r\n  \"Ainvertedbreve\",\r\n  0x0202,\r\n  \"Alpha\",\r\n  0x0391,\r\n  \"Alphatonos\",\r\n  0x0386,\r\n  \"Amacron\",\r\n  0x0100,\r\n  \"Amonospace\",\r\n  0xff21,\r\n  \"Aogonek\",\r\n  0x0104,\r\n  \"Aring\",\r\n  0x00c5,\r\n  \"Aringacute\",\r\n  0x01fa,\r\n  \"Aringbelow\",\r\n  0x1e00,\r\n  \"Aringsmall\",\r\n  0xf7e5,\r\n  \"Asmall\",\r\n  0xf761,\r\n  \"Atilde\",\r\n  0x00c3,\r\n  \"Atildesmall\",\r\n  0xf7e3,\r\n  \"Aybarmenian\",\r\n  0x0531,\r\n  \"B\",\r\n  0x0042,\r\n  \"Bcircle\",\r\n  0x24b7,\r\n  \"Bdotaccent\",\r\n  0x1e02,\r\n  \"Bdotbelow\",\r\n  0x1e04,\r\n  \"Becyrillic\",\r\n  0x0411,\r\n  \"Benarmenian\",\r\n  0x0532,\r\n  \"Beta\",\r\n  0x0392,\r\n  \"Bhook\",\r\n  0x0181,\r\n  \"Blinebelow\",\r\n  0x1e06,\r\n  \"Bmonospace\",\r\n  0xff22,\r\n  \"Brevesmall\",\r\n  0xf6f4,\r\n  \"Bsmall\",\r\n  0xf762,\r\n  \"Btopbar\",\r\n  0x0182,\r\n  \"C\",\r\n  0x0043,\r\n  \"Caarmenian\",\r\n  0x053e,\r\n  \"Cacute\",\r\n  0x0106,\r\n  \"Caron\",\r\n  0xf6ca,\r\n  \"Caronsmall\",\r\n  0xf6f5,\r\n  \"Ccaron\",\r\n  0x010c,\r\n  \"Ccedilla\",\r\n  0x00c7,\r\n  \"Ccedillaacute\",\r\n  0x1e08,\r\n  \"Ccedillasmall\",\r\n  0xf7e7,\r\n  \"Ccircle\",\r\n  0x24b8,\r\n  \"Ccircumflex\",\r\n  0x0108,\r\n  \"Cdot\",\r\n  0x010a,\r\n  \"Cdotaccent\",\r\n  0x010a,\r\n  \"Cedillasmall\",\r\n  0xf7b8,\r\n  \"Chaarmenian\",\r\n  0x0549,\r\n  \"Cheabkhasiancyrillic\",\r\n  0x04bc,\r\n  \"Checyrillic\",\r\n  0x0427,\r\n  \"Chedescenderabkhasiancyrillic\",\r\n  0x04be,\r\n  \"Chedescendercyrillic\",\r\n  0x04b6,\r\n  \"Chedieresiscyrillic\",\r\n  0x04f4,\r\n  \"Cheharmenian\",\r\n  0x0543,\r\n  \"Chekhakassiancyrillic\",\r\n  0x04cb,\r\n  \"Cheverticalstrokecyrillic\",\r\n  0x04b8,\r\n  \"Chi\",\r\n  0x03a7,\r\n  \"Chook\",\r\n  0x0187,\r\n  \"Circumflexsmall\",\r\n  0xf6f6,\r\n  \"Cmonospace\",\r\n  0xff23,\r\n  \"Coarmenian\",\r\n  0x0551,\r\n  \"Csmall\",\r\n  0xf763,\r\n  \"D\",\r\n  0x0044,\r\n  \"DZ\",\r\n  0x01f1,\r\n  \"DZcaron\",\r\n  0x01c4,\r\n  \"Daarmenian\",\r\n  0x0534,\r\n  \"Dafrican\",\r\n  0x0189,\r\n  \"Dcaron\",\r\n  0x010e,\r\n  \"Dcedilla\",\r\n  0x1e10,\r\n  \"Dcircle\",\r\n  0x24b9,\r\n  \"Dcircumflexbelow\",\r\n  0x1e12,\r\n  \"Dcroat\",\r\n  0x0110,\r\n  \"Ddotaccent\",\r\n  0x1e0a,\r\n  \"Ddotbelow\",\r\n  0x1e0c,\r\n  \"Decyrillic\",\r\n  0x0414,\r\n  \"Deicoptic\",\r\n  0x03ee,\r\n  \"Delta\",\r\n  0x2206,\r\n  \"Deltagreek\",\r\n  0x0394,\r\n  \"Dhook\",\r\n  0x018a,\r\n  \"Dieresis\",\r\n  0xf6cb,\r\n  \"DieresisAcute\",\r\n  0xf6cc,\r\n  \"DieresisGrave\",\r\n  0xf6cd,\r\n  \"Dieresissmall\",\r\n  0xf7a8,\r\n  \"Digammagreek\",\r\n  0x03dc,\r\n  \"Djecyrillic\",\r\n  0x0402,\r\n  \"Dlinebelow\",\r\n  0x1e0e,\r\n  \"Dmonospace\",\r\n  0xff24,\r\n  \"Dotaccentsmall\",\r\n  0xf6f7,\r\n  \"Dslash\",\r\n  0x0110,\r\n  \"Dsmall\",\r\n  0xf764,\r\n  \"Dtopbar\",\r\n  0x018b,\r\n  \"Dz\",\r\n  0x01f2,\r\n  \"Dzcaron\",\r\n  0x01c5,\r\n  \"Dzeabkhasiancyrillic\",\r\n  0x04e0,\r\n  \"Dzecyrillic\",\r\n  0x0405,\r\n  \"Dzhecyrillic\",\r\n  0x040f,\r\n  \"E\",\r\n  0x0045,\r\n  \"Eacute\",\r\n  0x00c9,\r\n  \"Eacutesmall\",\r\n  0xf7e9,\r\n  \"Ebreve\",\r\n  0x0114,\r\n  \"Ecaron\",\r\n  0x011a,\r\n  \"Ecedillabreve\",\r\n  0x1e1c,\r\n  \"Echarmenian\",\r\n  0x0535,\r\n  \"Ecircle\",\r\n  0x24ba,\r\n  \"Ecircumflex\",\r\n  0x00ca,\r\n  \"Ecircumflexacute\",\r\n  0x1ebe,\r\n  \"Ecircumflexbelow\",\r\n  0x1e18,\r\n  \"Ecircumflexdotbelow\",\r\n  0x1ec6,\r\n  \"Ecircumflexgrave\",\r\n  0x1ec0,\r\n  \"Ecircumflexhookabove\",\r\n  0x1ec2,\r\n  \"Ecircumflexsmall\",\r\n  0xf7ea,\r\n  \"Ecircumflextilde\",\r\n  0x1ec4,\r\n  \"Ecyrillic\",\r\n  0x0404,\r\n  \"Edblgrave\",\r\n  0x0204,\r\n  \"Edieresis\",\r\n  0x00cb,\r\n  \"Edieresissmall\",\r\n  0xf7eb,\r\n  \"Edot\",\r\n  0x0116,\r\n  \"Edotaccent\",\r\n  0x0116,\r\n  \"Edotbelow\",\r\n  0x1eb8,\r\n  \"Efcyrillic\",\r\n  0x0424,\r\n  \"Egrave\",\r\n  0x00c8,\r\n  \"Egravesmall\",\r\n  0xf7e8,\r\n  \"Eharmenian\",\r\n  0x0537,\r\n  \"Ehookabove\",\r\n  0x1eba,\r\n  \"Eightroman\",\r\n  0x2167,\r\n  \"Einvertedbreve\",\r\n  0x0206,\r\n  \"Eiotifiedcyrillic\",\r\n  0x0464,\r\n  \"Elcyrillic\",\r\n  0x041b,\r\n  \"Elevenroman\",\r\n  0x216a,\r\n  \"Emacron\",\r\n  0x0112,\r\n  \"Emacronacute\",\r\n  0x1e16,\r\n  \"Emacrongrave\",\r\n  0x1e14,\r\n  \"Emcyrillic\",\r\n  0x041c,\r\n  \"Emonospace\",\r\n  0xff25,\r\n  \"Encyrillic\",\r\n  0x041d,\r\n  \"Endescendercyrillic\",\r\n  0x04a2,\r\n  \"Eng\",\r\n  0x014a,\r\n  \"Enghecyrillic\",\r\n  0x04a4,\r\n  \"Enhookcyrillic\",\r\n  0x04c7,\r\n  \"Eogonek\",\r\n  0x0118,\r\n  \"Eopen\",\r\n  0x0190,\r\n  \"Epsilon\",\r\n  0x0395,\r\n  \"Epsilontonos\",\r\n  0x0388,\r\n  \"Ercyrillic\",\r\n  0x0420,\r\n  \"Ereversed\",\r\n  0x018e,\r\n  \"Ereversedcyrillic\",\r\n  0x042d,\r\n  \"Escyrillic\",\r\n  0x0421,\r\n  \"Esdescendercyrillic\",\r\n  0x04aa,\r\n  \"Esh\",\r\n  0x01a9,\r\n  \"Esmall\",\r\n  0xf765,\r\n  \"Eta\",\r\n  0x0397,\r\n  \"Etarmenian\",\r\n  0x0538,\r\n  \"Etatonos\",\r\n  0x0389,\r\n  \"Eth\",\r\n  0x00d0,\r\n  \"Ethsmall\",\r\n  0xf7f0,\r\n  \"Etilde\",\r\n  0x1ebc,\r\n  \"Etildebelow\",\r\n  0x1e1a,\r\n  \"Euro\",\r\n  0x20ac,\r\n  \"Ezh\",\r\n  0x01b7,\r\n  \"Ezhcaron\",\r\n  0x01ee,\r\n  \"Ezhreversed\",\r\n  0x01b8,\r\n  \"F\",\r\n  0x0046,\r\n  \"Fcircle\",\r\n  0x24bb,\r\n  \"Fdotaccent\",\r\n  0x1e1e,\r\n  \"Feharmenian\",\r\n  0x0556,\r\n  \"Feicoptic\",\r\n  0x03e4,\r\n  \"Fhook\",\r\n  0x0191,\r\n  \"Fitacyrillic\",\r\n  0x0472,\r\n  \"Fiveroman\",\r\n  0x2164,\r\n  \"Fmonospace\",\r\n  0xff26,\r\n  \"Fourroman\",\r\n  0x2163,\r\n  \"Fsmall\",\r\n  0xf766,\r\n  \"G\",\r\n  0x0047,\r\n  \"GBsquare\",\r\n  0x3387,\r\n  \"Gacute\",\r\n  0x01f4,\r\n  \"Gamma\",\r\n  0x0393,\r\n  \"Gammaafrican\",\r\n  0x0194,\r\n  \"Gangiacoptic\",\r\n  0x03ea,\r\n  \"Gbreve\",\r\n  0x011e,\r\n  \"Gcaron\",\r\n  0x01e6,\r\n  \"Gcedilla\",\r\n  0x0122,\r\n  \"Gcircle\",\r\n  0x24bc,\r\n  \"Gcircumflex\",\r\n  0x011c,\r\n  \"Gcommaaccent\",\r\n  0x0122,\r\n  \"Gdot\",\r\n  0x0120,\r\n  \"Gdotaccent\",\r\n  0x0120,\r\n  \"Gecyrillic\",\r\n  0x0413,\r\n  \"Ghadarmenian\",\r\n  0x0542,\r\n  \"Ghemiddlehookcyrillic\",\r\n  0x0494,\r\n  \"Ghestrokecyrillic\",\r\n  0x0492,\r\n  \"Gheupturncyrillic\",\r\n  0x0490,\r\n  \"Ghook\",\r\n  0x0193,\r\n  \"Gimarmenian\",\r\n  0x0533,\r\n  \"Gjecyrillic\",\r\n  0x0403,\r\n  \"Gmacron\",\r\n  0x1e20,\r\n  \"Gmonospace\",\r\n  0xff27,\r\n  \"Grave\",\r\n  0xf6ce,\r\n  \"Gravesmall\",\r\n  0xf760,\r\n  \"Gsmall\",\r\n  0xf767,\r\n  \"Gsmallhook\",\r\n  0x029b,\r\n  \"Gstroke\",\r\n  0x01e4,\r\n  \"H\",\r\n  0x0048,\r\n  \"H18533\",\r\n  0x25cf,\r\n  \"H18543\",\r\n  0x25aa,\r\n  \"H18551\",\r\n  0x25ab,\r\n  \"H22073\",\r\n  0x25a1,\r\n  \"HPsquare\",\r\n  0x33cb,\r\n  \"Haabkhasiancyrillic\",\r\n  0x04a8,\r\n  \"Hadescendercyrillic\",\r\n  0x04b2,\r\n  \"Hardsigncyrillic\",\r\n  0x042a,\r\n  \"Hbar\",\r\n  0x0126,\r\n  \"Hbrevebelow\",\r\n  0x1e2a,\r\n  \"Hcedilla\",\r\n  0x1e28,\r\n  \"Hcircle\",\r\n  0x24bd,\r\n  \"Hcircumflex\",\r\n  0x0124,\r\n  \"Hdieresis\",\r\n  0x1e26,\r\n  \"Hdotaccent\",\r\n  0x1e22,\r\n  \"Hdotbelow\",\r\n  0x1e24,\r\n  \"Hmonospace\",\r\n  0xff28,\r\n  \"Hoarmenian\",\r\n  0x0540,\r\n  \"Horicoptic\",\r\n  0x03e8,\r\n  \"Hsmall\",\r\n  0xf768,\r\n  \"Hungarumlaut\",\r\n  0xf6cf,\r\n  \"Hungarumlautsmall\",\r\n  0xf6f8,\r\n  \"Hzsquare\",\r\n  0x3390,\r\n  \"I\",\r\n  0x0049,\r\n  \"IAcyrillic\",\r\n  0x042f,\r\n  \"IJ\",\r\n  0x0132,\r\n  \"IUcyrillic\",\r\n  0x042e,\r\n  \"Iacute\",\r\n  0x00cd,\r\n  \"Iacutesmall\",\r\n  0xf7ed,\r\n  \"Ibreve\",\r\n  0x012c,\r\n  \"Icaron\",\r\n  0x01cf,\r\n  \"Icircle\",\r\n  0x24be,\r\n  \"Icircumflex\",\r\n  0x00ce,\r\n  \"Icircumflexsmall\",\r\n  0xf7ee,\r\n  \"Icyrillic\",\r\n  0x0406,\r\n  \"Idblgrave\",\r\n  0x0208,\r\n  \"Idieresis\",\r\n  0x00cf,\r\n  \"Idieresisacute\",\r\n  0x1e2e,\r\n  \"Idieresiscyrillic\",\r\n  0x04e4,\r\n  \"Idieresissmall\",\r\n  0xf7ef,\r\n  \"Idot\",\r\n  0x0130,\r\n  \"Idotaccent\",\r\n  0x0130,\r\n  \"Idotbelow\",\r\n  0x1eca,\r\n  \"Iebrevecyrillic\",\r\n  0x04d6,\r\n  \"Iecyrillic\",\r\n  0x0415,\r\n  \"Ifraktur\",\r\n  0x2111,\r\n  \"Igrave\",\r\n  0x00cc,\r\n  \"Igravesmall\",\r\n  0xf7ec,\r\n  \"Ihookabove\",\r\n  0x1ec8,\r\n  \"Iicyrillic\",\r\n  0x0418,\r\n  \"Iinvertedbreve\",\r\n  0x020a,\r\n  \"Iishortcyrillic\",\r\n  0x0419,\r\n  \"Imacron\",\r\n  0x012a,\r\n  \"Imacroncyrillic\",\r\n  0x04e2,\r\n  \"Imonospace\",\r\n  0xff29,\r\n  \"Iniarmenian\",\r\n  0x053b,\r\n  \"Iocyrillic\",\r\n  0x0401,\r\n  \"Iogonek\",\r\n  0x012e,\r\n  \"Iota\",\r\n  0x0399,\r\n  \"Iotaafrican\",\r\n  0x0196,\r\n  \"Iotadieresis\",\r\n  0x03aa,\r\n  \"Iotatonos\",\r\n  0x038a,\r\n  \"Ismall\",\r\n  0xf769,\r\n  \"Istroke\",\r\n  0x0197,\r\n  \"Itilde\",\r\n  0x0128,\r\n  \"Itildebelow\",\r\n  0x1e2c,\r\n  \"Izhitsacyrillic\",\r\n  0x0474,\r\n  \"Izhitsadblgravecyrillic\",\r\n  0x0476,\r\n  \"J\",\r\n  0x004a,\r\n  \"Jaarmenian\",\r\n  0x0541,\r\n  \"Jcircle\",\r\n  0x24bf,\r\n  \"Jcircumflex\",\r\n  0x0134,\r\n  \"Jecyrillic\",\r\n  0x0408,\r\n  \"Jheharmenian\",\r\n  0x054b,\r\n  \"Jmonospace\",\r\n  0xff2a,\r\n  \"Jsmall\",\r\n  0xf76a,\r\n  \"K\",\r\n  0x004b,\r\n  \"KBsquare\",\r\n  0x3385,\r\n  \"KKsquare\",\r\n  0x33cd,\r\n  \"Kabashkircyrillic\",\r\n  0x04a0,\r\n  \"Kacute\",\r\n  0x1e30,\r\n  \"Kacyrillic\",\r\n  0x041a,\r\n  \"Kadescendercyrillic\",\r\n  0x049a,\r\n  \"Kahookcyrillic\",\r\n  0x04c3,\r\n  \"Kappa\",\r\n  0x039a,\r\n  \"Kastrokecyrillic\",\r\n  0x049e,\r\n  \"Kaverticalstrokecyrillic\",\r\n  0x049c,\r\n  \"Kcaron\",\r\n  0x01e8,\r\n  \"Kcedilla\",\r\n  0x0136,\r\n  \"Kcircle\",\r\n  0x24c0,\r\n  \"Kcommaaccent\",\r\n  0x0136,\r\n  \"Kdotbelow\",\r\n  0x1e32,\r\n  \"Keharmenian\",\r\n  0x0554,\r\n  \"Kenarmenian\",\r\n  0x053f,\r\n  \"Khacyrillic\",\r\n  0x0425,\r\n  \"Kheicoptic\",\r\n  0x03e6,\r\n  \"Khook\",\r\n  0x0198,\r\n  \"Kjecyrillic\",\r\n  0x040c,\r\n  \"Klinebelow\",\r\n  0x1e34,\r\n  \"Kmonospace\",\r\n  0xff2b,\r\n  \"Koppacyrillic\",\r\n  0x0480,\r\n  \"Koppagreek\",\r\n  0x03de,\r\n  \"Ksicyrillic\",\r\n  0x046e,\r\n  \"Ksmall\",\r\n  0xf76b,\r\n  \"L\",\r\n  0x004c,\r\n  \"LJ\",\r\n  0x01c7,\r\n  \"LL\",\r\n  0xf6bf,\r\n  \"Lacute\",\r\n  0x0139,\r\n  \"Lambda\",\r\n  0x039b,\r\n  \"Lcaron\",\r\n  0x013d,\r\n  \"Lcedilla\",\r\n  0x013b,\r\n  \"Lcircle\",\r\n  0x24c1,\r\n  \"Lcircumflexbelow\",\r\n  0x1e3c,\r\n  \"Lcommaaccent\",\r\n  0x013b,\r\n  \"Ldot\",\r\n  0x013f,\r\n  \"Ldotaccent\",\r\n  0x013f,\r\n  \"Ldotbelow\",\r\n  0x1e36,\r\n  \"Ldotbelowmacron\",\r\n  0x1e38,\r\n  \"Liwnarmenian\",\r\n  0x053c,\r\n  \"Lj\",\r\n  0x01c8,\r\n  \"Ljecyrillic\",\r\n  0x0409,\r\n  \"Llinebelow\",\r\n  0x1e3a,\r\n  \"Lmonospace\",\r\n  0xff2c,\r\n  \"Lslash\",\r\n  0x0141,\r\n  \"Lslashsmall\",\r\n  0xf6f9,\r\n  \"Lsmall\",\r\n  0xf76c,\r\n  \"M\",\r\n  0x004d,\r\n  \"MBsquare\",\r\n  0x3386,\r\n  \"Macron\",\r\n  0xf6d0,\r\n  \"Macronsmall\",\r\n  0xf7af,\r\n  \"Macute\",\r\n  0x1e3e,\r\n  \"Mcircle\",\r\n  0x24c2,\r\n  \"Mdotaccent\",\r\n  0x1e40,\r\n  \"Mdotbelow\",\r\n  0x1e42,\r\n  \"Menarmenian\",\r\n  0x0544,\r\n  \"Mmonospace\",\r\n  0xff2d,\r\n  \"Msmall\",\r\n  0xf76d,\r\n  \"Mturned\",\r\n  0x019c,\r\n  \"Mu\",\r\n  0x039c,\r\n  \"N\",\r\n  0x004e,\r\n  \"NJ\",\r\n  0x01ca,\r\n  \"Nacute\",\r\n  0x0143,\r\n  \"Ncaron\",\r\n  0x0147,\r\n  \"Ncedilla\",\r\n  0x0145,\r\n  \"Ncircle\",\r\n  0x24c3,\r\n  \"Ncircumflexbelow\",\r\n  0x1e4a,\r\n  \"Ncommaaccent\",\r\n  0x0145,\r\n  \"Ndotaccent\",\r\n  0x1e44,\r\n  \"Ndotbelow\",\r\n  0x1e46,\r\n  \"Nhookleft\",\r\n  0x019d,\r\n  \"Nineroman\",\r\n  0x2168,\r\n  \"Nj\",\r\n  0x01cb,\r\n  \"Njecyrillic\",\r\n  0x040a,\r\n  \"Nlinebelow\",\r\n  0x1e48,\r\n  \"Nmonospace\",\r\n  0xff2e,\r\n  \"Nowarmenian\",\r\n  0x0546,\r\n  \"Nsmall\",\r\n  0xf76e,\r\n  \"Ntilde\",\r\n  0x00d1,\r\n  \"Ntildesmall\",\r\n  0xf7f1,\r\n  \"Nu\",\r\n  0x039d,\r\n  \"O\",\r\n  0x004f,\r\n  \"OE\",\r\n  0x0152,\r\n  \"OEsmall\",\r\n  0xf6fa,\r\n  \"Oacute\",\r\n  0x00d3,\r\n  \"Oacutesmall\",\r\n  0xf7f3,\r\n  \"Obarredcyrillic\",\r\n  0x04e8,\r\n  \"Obarreddieresiscyrillic\",\r\n  0x04ea,\r\n  \"Obreve\",\r\n  0x014e,\r\n  \"Ocaron\",\r\n  0x01d1,\r\n  \"Ocenteredtilde\",\r\n  0x019f,\r\n  \"Ocircle\",\r\n  0x24c4,\r\n  \"Ocircumflex\",\r\n  0x00d4,\r\n  \"Ocircumflexacute\",\r\n  0x1ed0,\r\n  \"Ocircumflexdotbelow\",\r\n  0x1ed8,\r\n  \"Ocircumflexgrave\",\r\n  0x1ed2,\r\n  \"Ocircumflexhookabove\",\r\n  0x1ed4,\r\n  \"Ocircumflexsmall\",\r\n  0xf7f4,\r\n  \"Ocircumflextilde\",\r\n  0x1ed6,\r\n  \"Ocyrillic\",\r\n  0x041e,\r\n  \"Odblacute\",\r\n  0x0150,\r\n  \"Odblgrave\",\r\n  0x020c,\r\n  \"Odieresis\",\r\n  0x00d6,\r\n  \"Odieresiscyrillic\",\r\n  0x04e6,\r\n  \"Odieresissmall\",\r\n  0xf7f6,\r\n  \"Odotbelow\",\r\n  0x1ecc,\r\n  \"Ogoneksmall\",\r\n  0xf6fb,\r\n  \"Ograve\",\r\n  0x00d2,\r\n  \"Ogravesmall\",\r\n  0xf7f2,\r\n  \"Oharmenian\",\r\n  0x0555,\r\n  \"Ohm\",\r\n  0x2126,\r\n  \"Ohookabove\",\r\n  0x1ece,\r\n  \"Ohorn\",\r\n  0x01a0,\r\n  \"Ohornacute\",\r\n  0x1eda,\r\n  \"Ohorndotbelow\",\r\n  0x1ee2,\r\n  \"Ohorngrave\",\r\n  0x1edc,\r\n  \"Ohornhookabove\",\r\n  0x1ede,\r\n  \"Ohorntilde\",\r\n  0x1ee0,\r\n  \"Ohungarumlaut\",\r\n  0x0150,\r\n  \"Oi\",\r\n  0x01a2,\r\n  \"Oinvertedbreve\",\r\n  0x020e,\r\n  \"Omacron\",\r\n  0x014c,\r\n  \"Omacronacute\",\r\n  0x1e52,\r\n  \"Omacrongrave\",\r\n  0x1e50,\r\n  \"Omega\",\r\n  0x2126,\r\n  \"Omegacyrillic\",\r\n  0x0460,\r\n  \"Omegagreek\",\r\n  0x03a9,\r\n  \"Omegaroundcyrillic\",\r\n  0x047a,\r\n  \"Omegatitlocyrillic\",\r\n  0x047c,\r\n  \"Omegatonos\",\r\n  0x038f,\r\n  \"Omicron\",\r\n  0x039f,\r\n  \"Omicrontonos\",\r\n  0x038c,\r\n  \"Omonospace\",\r\n  0xff2f,\r\n  \"Oneroman\",\r\n  0x2160,\r\n  \"Oogonek\",\r\n  0x01ea,\r\n  \"Oogonekmacron\",\r\n  0x01ec,\r\n  \"Oopen\",\r\n  0x0186,\r\n  \"Oslash\",\r\n  0x00d8,\r\n  \"Oslashacute\",\r\n  0x01fe,\r\n  \"Oslashsmall\",\r\n  0xf7f8,\r\n  \"Osmall\",\r\n  0xf76f,\r\n  \"Ostrokeacute\",\r\n  0x01fe,\r\n  \"Otcyrillic\",\r\n  0x047e,\r\n  \"Otilde\",\r\n  0x00d5,\r\n  \"Otildeacute\",\r\n  0x1e4c,\r\n  \"Otildedieresis\",\r\n  0x1e4e,\r\n  \"Otildesmall\",\r\n  0xf7f5,\r\n  \"P\",\r\n  0x0050,\r\n  \"Pacute\",\r\n  0x1e54,\r\n  \"Pcircle\",\r\n  0x24c5,\r\n  \"Pdotaccent\",\r\n  0x1e56,\r\n  \"Pecyrillic\",\r\n  0x041f,\r\n  \"Peharmenian\",\r\n  0x054a,\r\n  \"Pemiddlehookcyrillic\",\r\n  0x04a6,\r\n  \"Phi\",\r\n  0x03a6,\r\n  \"Phook\",\r\n  0x01a4,\r\n  \"Pi\",\r\n  0x03a0,\r\n  \"Piwrarmenian\",\r\n  0x0553,\r\n  \"Pmonospace\",\r\n  0xff30,\r\n  \"Psi\",\r\n  0x03a8,\r\n  \"Psicyrillic\",\r\n  0x0470,\r\n  \"Psmall\",\r\n  0xf770,\r\n  \"Q\",\r\n  0x0051,\r\n  \"Qcircle\",\r\n  0x24c6,\r\n  \"Qmonospace\",\r\n  0xff31,\r\n  \"Qsmall\",\r\n  0xf771,\r\n  \"R\",\r\n  0x0052,\r\n  \"Raarmenian\",\r\n  0x054c,\r\n  \"Racute\",\r\n  0x0154,\r\n  \"Rcaron\",\r\n  0x0158,\r\n  \"Rcedilla\",\r\n  0x0156,\r\n  \"Rcircle\",\r\n  0x24c7,\r\n  \"Rcommaaccent\",\r\n  0x0156,\r\n  \"Rdblgrave\",\r\n  0x0210,\r\n  \"Rdotaccent\",\r\n  0x1e58,\r\n  \"Rdotbelow\",\r\n  0x1e5a,\r\n  \"Rdotbelowmacron\",\r\n  0x1e5c,\r\n  \"Reharmenian\",\r\n  0x0550,\r\n  \"Rfraktur\",\r\n  0x211c,\r\n  \"Rho\",\r\n  0x03a1,\r\n  \"Ringsmall\",\r\n  0xf6fc,\r\n  \"Rinvertedbreve\",\r\n  0x0212,\r\n  \"Rlinebelow\",\r\n  0x1e5e,\r\n  \"Rmonospace\",\r\n  0xff32,\r\n  \"Rsmall\",\r\n  0xf772,\r\n  \"Rsmallinverted\",\r\n  0x0281,\r\n  \"Rsmallinvertedsuperior\",\r\n  0x02b6,\r\n  \"S\",\r\n  0x0053,\r\n  \"SF010000\",\r\n  0x250c,\r\n  \"SF020000\",\r\n  0x2514,\r\n  \"SF030000\",\r\n  0x2510,\r\n  \"SF040000\",\r\n  0x2518,\r\n  \"SF050000\",\r\n  0x253c,\r\n  \"SF060000\",\r\n  0x252c,\r\n  \"SF070000\",\r\n  0x2534,\r\n  \"SF080000\",\r\n  0x251c,\r\n  \"SF090000\",\r\n  0x2524,\r\n  \"SF100000\",\r\n  0x2500,\r\n  \"SF110000\",\r\n  0x2502,\r\n  \"SF190000\",\r\n  0x2561,\r\n  \"SF200000\",\r\n  0x2562,\r\n  \"SF210000\",\r\n  0x2556,\r\n  \"SF220000\",\r\n  0x2555,\r\n  \"SF230000\",\r\n  0x2563,\r\n  \"SF240000\",\r\n  0x2551,\r\n  \"SF250000\",\r\n  0x2557,\r\n  \"SF260000\",\r\n  0x255d,\r\n  \"SF270000\",\r\n  0x255c,\r\n  \"SF280000\",\r\n  0x255b,\r\n  \"SF360000\",\r\n  0x255e,\r\n  \"SF370000\",\r\n  0x255f,\r\n  \"SF380000\",\r\n  0x255a,\r\n  \"SF390000\",\r\n  0x2554,\r\n  \"SF400000\",\r\n  0x2569,\r\n  \"SF410000\",\r\n  0x2566,\r\n  \"SF420000\",\r\n  0x2560,\r\n  \"SF430000\",\r\n  0x2550,\r\n  \"SF440000\",\r\n  0x256c,\r\n  \"SF450000\",\r\n  0x2567,\r\n  \"SF460000\",\r\n  0x2568,\r\n  \"SF470000\",\r\n  0x2564,\r\n  \"SF480000\",\r\n  0x2565,\r\n  \"SF490000\",\r\n  0x2559,\r\n  \"SF500000\",\r\n  0x2558,\r\n  \"SF510000\",\r\n  0x2552,\r\n  \"SF520000\",\r\n  0x2553,\r\n  \"SF530000\",\r\n  0x256b,\r\n  \"SF540000\",\r\n  0x256a,\r\n  \"Sacute\",\r\n  0x015a,\r\n  \"Sacutedotaccent\",\r\n  0x1e64,\r\n  \"Sampigreek\",\r\n  0x03e0,\r\n  \"Scaron\",\r\n  0x0160,\r\n  \"Scarondotaccent\",\r\n  0x1e66,\r\n  \"Scaronsmall\",\r\n  0xf6fd,\r\n  \"Scedilla\",\r\n  0x015e,\r\n  \"Schwa\",\r\n  0x018f,\r\n  \"Schwacyrillic\",\r\n  0x04d8,\r\n  \"Schwadieresiscyrillic\",\r\n  0x04da,\r\n  \"Scircle\",\r\n  0x24c8,\r\n  \"Scircumflex\",\r\n  0x015c,\r\n  \"Scommaaccent\",\r\n  0x0218,\r\n  \"Sdotaccent\",\r\n  0x1e60,\r\n  \"Sdotbelow\",\r\n  0x1e62,\r\n  \"Sdotbelowdotaccent\",\r\n  0x1e68,\r\n  \"Seharmenian\",\r\n  0x054d,\r\n  \"Sevenroman\",\r\n  0x2166,\r\n  \"Shaarmenian\",\r\n  0x0547,\r\n  \"Shacyrillic\",\r\n  0x0428,\r\n  \"Shchacyrillic\",\r\n  0x0429,\r\n  \"Sheicoptic\",\r\n  0x03e2,\r\n  \"Shhacyrillic\",\r\n  0x04ba,\r\n  \"Shimacoptic\",\r\n  0x03ec,\r\n  \"Sigma\",\r\n  0x03a3,\r\n  \"Sixroman\",\r\n  0x2165,\r\n  \"Smonospace\",\r\n  0xff33,\r\n  \"Softsigncyrillic\",\r\n  0x042c,\r\n  \"Ssmall\",\r\n  0xf773,\r\n  \"Stigmagreek\",\r\n  0x03da,\r\n  \"T\",\r\n  0x0054,\r\n  \"Tau\",\r\n  0x03a4,\r\n  \"Tbar\",\r\n  0x0166,\r\n  \"Tcaron\",\r\n  0x0164,\r\n  \"Tcedilla\",\r\n  0x0162,\r\n  \"Tcircle\",\r\n  0x24c9,\r\n  \"Tcircumflexbelow\",\r\n  0x1e70,\r\n  \"Tcommaaccent\",\r\n  0x0162,\r\n  \"Tdotaccent\",\r\n  0x1e6a,\r\n  \"Tdotbelow\",\r\n  0x1e6c,\r\n  \"Tecyrillic\",\r\n  0x0422,\r\n  \"Tedescendercyrillic\",\r\n  0x04ac,\r\n  \"Tenroman\",\r\n  0x2169,\r\n  \"Tetsecyrillic\",\r\n  0x04b4,\r\n  \"Theta\",\r\n  0x0398,\r\n  \"Thook\",\r\n  0x01ac,\r\n  \"Thorn\",\r\n  0x00de,\r\n  \"Thornsmall\",\r\n  0xf7fe,\r\n  \"Threeroman\",\r\n  0x2162,\r\n  \"Tildesmall\",\r\n  0xf6fe,\r\n  \"Tiwnarmenian\",\r\n  0x054f,\r\n  \"Tlinebelow\",\r\n  0x1e6e,\r\n  \"Tmonospace\",\r\n  0xff34,\r\n  \"Toarmenian\",\r\n  0x0539,\r\n  \"Tonefive\",\r\n  0x01bc,\r\n  \"Tonesix\",\r\n  0x0184,\r\n  \"Tonetwo\",\r\n  0x01a7,\r\n  \"Tretroflexhook\",\r\n  0x01ae,\r\n  \"Tsecyrillic\",\r\n  0x0426,\r\n  \"Tshecyrillic\",\r\n  0x040b,\r\n  \"Tsmall\",\r\n  0xf774,\r\n  \"Twelveroman\",\r\n  0x216b,\r\n  \"Tworoman\",\r\n  0x2161,\r\n  \"U\",\r\n  0x0055,\r\n  \"Uacute\",\r\n  0x00da,\r\n  \"Uacutesmall\",\r\n  0xf7fa,\r\n  \"Ubreve\",\r\n  0x016c,\r\n  \"Ucaron\",\r\n  0x01d3,\r\n  \"Ucircle\",\r\n  0x24ca,\r\n  \"Ucircumflex\",\r\n  0x00db,\r\n  \"Ucircumflexbelow\",\r\n  0x1e76,\r\n  \"Ucircumflexsmall\",\r\n  0xf7fb,\r\n  \"Ucyrillic\",\r\n  0x0423,\r\n  \"Udblacute\",\r\n  0x0170,\r\n  \"Udblgrave\",\r\n  0x0214,\r\n  \"Udieresis\",\r\n  0x00dc,\r\n  \"Udieresisacute\",\r\n  0x01d7,\r\n  \"Udieresisbelow\",\r\n  0x1e72,\r\n  \"Udieresiscaron\",\r\n  0x01d9,\r\n  \"Udieresiscyrillic\",\r\n  0x04f0,\r\n  \"Udieresisgrave\",\r\n  0x01db,\r\n  \"Udieresismacron\",\r\n  0x01d5,\r\n  \"Udieresissmall\",\r\n  0xf7fc,\r\n  \"Udotbelow\",\r\n  0x1ee4,\r\n  \"Ugrave\",\r\n  0x00d9,\r\n  \"Ugravesmall\",\r\n  0xf7f9,\r\n  \"Uhookabove\",\r\n  0x1ee6,\r\n  \"Uhorn\",\r\n  0x01af,\r\n  \"Uhornacute\",\r\n  0x1ee8,\r\n  \"Uhorndotbelow\",\r\n  0x1ef0,\r\n  \"Uhorngrave\",\r\n  0x1eea,\r\n  \"Uhornhookabove\",\r\n  0x1eec,\r\n  \"Uhorntilde\",\r\n  0x1eee,\r\n  \"Uhungarumlaut\",\r\n  0x0170,\r\n  \"Uhungarumlautcyrillic\",\r\n  0x04f2,\r\n  \"Uinvertedbreve\",\r\n  0x0216,\r\n  \"Ukcyrillic\",\r\n  0x0478,\r\n  \"Umacron\",\r\n  0x016a,\r\n  \"Umacroncyrillic\",\r\n  0x04ee,\r\n  \"Umacrondieresis\",\r\n  0x1e7a,\r\n  \"Umonospace\",\r\n  0xff35,\r\n  \"Uogonek\",\r\n  0x0172,\r\n  \"Upsilon\",\r\n  0x03a5,\r\n  \"Upsilon1\",\r\n  0x03d2,\r\n  \"Upsilonacutehooksymbolgreek\",\r\n  0x03d3,\r\n  \"Upsilonafrican\",\r\n  0x01b1,\r\n  \"Upsilondieresis\",\r\n  0x03ab,\r\n  \"Upsilondieresishooksymbolgreek\",\r\n  0x03d4,\r\n  \"Upsilonhooksymbol\",\r\n  0x03d2,\r\n  \"Upsilontonos\",\r\n  0x038e,\r\n  \"Uring\",\r\n  0x016e,\r\n  \"Ushortcyrillic\",\r\n  0x040e,\r\n  \"Usmall\",\r\n  0xf775,\r\n  \"Ustraightcyrillic\",\r\n  0x04ae,\r\n  \"Ustraightstrokecyrillic\",\r\n  0x04b0,\r\n  \"Utilde\",\r\n  0x0168,\r\n  \"Utildeacute\",\r\n  0x1e78,\r\n  \"Utildebelow\",\r\n  0x1e74,\r\n  \"V\",\r\n  0x0056,\r\n  \"Vcircle\",\r\n  0x24cb,\r\n  \"Vdotbelow\",\r\n  0x1e7e,\r\n  \"Vecyrillic\",\r\n  0x0412,\r\n  \"Vewarmenian\",\r\n  0x054e,\r\n  \"Vhook\",\r\n  0x01b2,\r\n  \"Vmonospace\",\r\n  0xff36,\r\n  \"Voarmenian\",\r\n  0x0548,\r\n  \"Vsmall\",\r\n  0xf776,\r\n  \"Vtilde\",\r\n  0x1e7c,\r\n  \"W\",\r\n  0x0057,\r\n  \"Wacute\",\r\n  0x1e82,\r\n  \"Wcircle\",\r\n  0x24cc,\r\n  \"Wcircumflex\",\r\n  0x0174,\r\n  \"Wdieresis\",\r\n  0x1e84,\r\n  \"Wdotaccent\",\r\n  0x1e86,\r\n  \"Wdotbelow\",\r\n  0x1e88,\r\n  \"Wgrave\",\r\n  0x1e80,\r\n  \"Wmonospace\",\r\n  0xff37,\r\n  \"Wsmall\",\r\n  0xf777,\r\n  \"X\",\r\n  0x0058,\r\n  \"Xcircle\",\r\n  0x24cd,\r\n  \"Xdieresis\",\r\n  0x1e8c,\r\n  \"Xdotaccent\",\r\n  0x1e8a,\r\n  \"Xeharmenian\",\r\n  0x053d,\r\n  \"Xi\",\r\n  0x039e,\r\n  \"Xmonospace\",\r\n  0xff38,\r\n  \"Xsmall\",\r\n  0xf778,\r\n  \"Y\",\r\n  0x0059,\r\n  \"Yacute\",\r\n  0x00dd,\r\n  \"Yacutesmall\",\r\n  0xf7fd,\r\n  \"Yatcyrillic\",\r\n  0x0462,\r\n  \"Ycircle\",\r\n  0x24ce,\r\n  \"Ycircumflex\",\r\n  0x0176,\r\n  \"Ydieresis\",\r\n  0x0178,\r\n  \"Ydieresissmall\",\r\n  0xf7ff,\r\n  \"Ydotaccent\",\r\n  0x1e8e,\r\n  \"Ydotbelow\",\r\n  0x1ef4,\r\n  \"Yericyrillic\",\r\n  0x042b,\r\n  \"Yerudieresiscyrillic\",\r\n  0x04f8,\r\n  \"Ygrave\",\r\n  0x1ef2,\r\n  \"Yhook\",\r\n  0x01b3,\r\n  \"Yhookabove\",\r\n  0x1ef6,\r\n  \"Yiarmenian\",\r\n  0x0545,\r\n  \"Yicyrillic\",\r\n  0x0407,\r\n  \"Yiwnarmenian\",\r\n  0x0552,\r\n  \"Ymonospace\",\r\n  0xff39,\r\n  \"Ysmall\",\r\n  0xf779,\r\n  \"Ytilde\",\r\n  0x1ef8,\r\n  \"Yusbigcyrillic\",\r\n  0x046a,\r\n  \"Yusbigiotifiedcyrillic\",\r\n  0x046c,\r\n  \"Yuslittlecyrillic\",\r\n  0x0466,\r\n  \"Yuslittleiotifiedcyrillic\",\r\n  0x0468,\r\n  \"Z\",\r\n  0x005a,\r\n  \"Zaarmenian\",\r\n  0x0536,\r\n  \"Zacute\",\r\n  0x0179,\r\n  \"Zcaron\",\r\n  0x017d,\r\n  \"Zcaronsmall\",\r\n  0xf6ff,\r\n  \"Zcircle\",\r\n  0x24cf,\r\n  \"Zcircumflex\",\r\n  0x1e90,\r\n  \"Zdot\",\r\n  0x017b,\r\n  \"Zdotaccent\",\r\n  0x017b,\r\n  \"Zdotbelow\",\r\n  0x1e92,\r\n  \"Zecyrillic\",\r\n  0x0417,\r\n  \"Zedescendercyrillic\",\r\n  0x0498,\r\n  \"Zedieresiscyrillic\",\r\n  0x04de,\r\n  \"Zeta\",\r\n  0x0396,\r\n  \"Zhearmenian\",\r\n  0x053a,\r\n  \"Zhebrevecyrillic\",\r\n  0x04c1,\r\n  \"Zhecyrillic\",\r\n  0x0416,\r\n  \"Zhedescendercyrillic\",\r\n  0x0496,\r\n  \"Zhedieresiscyrillic\",\r\n  0x04dc,\r\n  \"Zlinebelow\",\r\n  0x1e94,\r\n  \"Zmonospace\",\r\n  0xff3a,\r\n  \"Zsmall\",\r\n  0xf77a,\r\n  \"Zstroke\",\r\n  0x01b5,\r\n  \"a\",\r\n  0x0061,\r\n  \"aabengali\",\r\n  0x0986,\r\n  \"aacute\",\r\n  0x00e1,\r\n  \"aadeva\",\r\n  0x0906,\r\n  \"aagujarati\",\r\n  0x0a86,\r\n  \"aagurmukhi\",\r\n  0x0a06,\r\n  \"aamatragurmukhi\",\r\n  0x0a3e,\r\n  \"aarusquare\",\r\n  0x3303,\r\n  \"aavowelsignbengali\",\r\n  0x09be,\r\n  \"aavowelsigndeva\",\r\n  0x093e,\r\n  \"aavowelsigngujarati\",\r\n  0x0abe,\r\n  \"abbreviationmarkarmenian\",\r\n  0x055f,\r\n  \"abbreviationsigndeva\",\r\n  0x0970,\r\n  \"abengali\",\r\n  0x0985,\r\n  \"abopomofo\",\r\n  0x311a,\r\n  \"abreve\",\r\n  0x0103,\r\n  \"abreveacute\",\r\n  0x1eaf,\r\n  \"abrevecyrillic\",\r\n  0x04d1,\r\n  \"abrevedotbelow\",\r\n  0x1eb7,\r\n  \"abrevegrave\",\r\n  0x1eb1,\r\n  \"abrevehookabove\",\r\n  0x1eb3,\r\n  \"abrevetilde\",\r\n  0x1eb5,\r\n  \"acaron\",\r\n  0x01ce,\r\n  \"acircle\",\r\n  0x24d0,\r\n  \"acircumflex\",\r\n  0x00e2,\r\n  \"acircumflexacute\",\r\n  0x1ea5,\r\n  \"acircumflexdotbelow\",\r\n  0x1ead,\r\n  \"acircumflexgrave\",\r\n  0x1ea7,\r\n  \"acircumflexhookabove\",\r\n  0x1ea9,\r\n  \"acircumflextilde\",\r\n  0x1eab,\r\n  \"acute\",\r\n  0x00b4,\r\n  \"acutebelowcmb\",\r\n  0x0317,\r\n  \"acutecmb\",\r\n  0x0301,\r\n  \"acutecomb\",\r\n  0x0301,\r\n  \"acutedeva\",\r\n  0x0954,\r\n  \"acutelowmod\",\r\n  0x02cf,\r\n  \"acutetonecmb\",\r\n  0x0341,\r\n  \"acyrillic\",\r\n  0x0430,\r\n  \"adblgrave\",\r\n  0x0201,\r\n  \"addakgurmukhi\",\r\n  0x0a71,\r\n  \"adeva\",\r\n  0x0905,\r\n  \"adieresis\",\r\n  0x00e4,\r\n  \"adieresiscyrillic\",\r\n  0x04d3,\r\n  \"adieresismacron\",\r\n  0x01df,\r\n  \"adotbelow\",\r\n  0x1ea1,\r\n  \"adotmacron\",\r\n  0x01e1,\r\n  \"ae\",\r\n  0x00e6,\r\n  \"aeacute\",\r\n  0x01fd,\r\n  \"aekorean\",\r\n  0x3150,\r\n  \"aemacron\",\r\n  0x01e3,\r\n  \"afii00208\",\r\n  0x2015,\r\n  \"afii08941\",\r\n  0x20a4,\r\n  \"afii10017\",\r\n  0x0410,\r\n  \"afii10018\",\r\n  0x0411,\r\n  \"afii10019\",\r\n  0x0412,\r\n  \"afii10020\",\r\n  0x0413,\r\n  \"afii10021\",\r\n  0x0414,\r\n  \"afii10022\",\r\n  0x0415,\r\n  \"afii10023\",\r\n  0x0401,\r\n  \"afii10024\",\r\n  0x0416,\r\n  \"afii10025\",\r\n  0x0417,\r\n  \"afii10026\",\r\n  0x0418,\r\n  \"afii10027\",\r\n  0x0419,\r\n  \"afii10028\",\r\n  0x041a,\r\n  \"afii10029\",\r\n  0x041b,\r\n  \"afii10030\",\r\n  0x041c,\r\n  \"afii10031\",\r\n  0x041d,\r\n  \"afii10032\",\r\n  0x041e,\r\n  \"afii10033\",\r\n  0x041f,\r\n  \"afii10034\",\r\n  0x0420,\r\n  \"afii10035\",\r\n  0x0421,\r\n  \"afii10036\",\r\n  0x0422,\r\n  \"afii10037\",\r\n  0x0423,\r\n  \"afii10038\",\r\n  0x0424,\r\n  \"afii10039\",\r\n  0x0425,\r\n  \"afii10040\",\r\n  0x0426,\r\n  \"afii10041\",\r\n  0x0427,\r\n  \"afii10042\",\r\n  0x0428,\r\n  \"afii10043\",\r\n  0x0429,\r\n  \"afii10044\",\r\n  0x042a,\r\n  \"afii10045\",\r\n  0x042b,\r\n  \"afii10046\",\r\n  0x042c,\r\n  \"afii10047\",\r\n  0x042d,\r\n  \"afii10048\",\r\n  0x042e,\r\n  \"afii10049\",\r\n  0x042f,\r\n  \"afii10050\",\r\n  0x0490,\r\n  \"afii10051\",\r\n  0x0402,\r\n  \"afii10052\",\r\n  0x0403,\r\n  \"afii10053\",\r\n  0x0404,\r\n  \"afii10054\",\r\n  0x0405,\r\n  \"afii10055\",\r\n  0x0406,\r\n  \"afii10056\",\r\n  0x0407,\r\n  \"afii10057\",\r\n  0x0408,\r\n  \"afii10058\",\r\n  0x0409,\r\n  \"afii10059\",\r\n  0x040a,\r\n  \"afii10060\",\r\n  0x040b,\r\n  \"afii10061\",\r\n  0x040c,\r\n  \"afii10062\",\r\n  0x040e,\r\n  \"afii10063\",\r\n  0xf6c4,\r\n  \"afii10064\",\r\n  0xf6c5,\r\n  \"afii10065\",\r\n  0x0430,\r\n  \"afii10066\",\r\n  0x0431,\r\n  \"afii10067\",\r\n  0x0432,\r\n  \"afii10068\",\r\n  0x0433,\r\n  \"afii10069\",\r\n  0x0434,\r\n  \"afii10070\",\r\n  0x0435,\r\n  \"afii10071\",\r\n  0x0451,\r\n  \"afii10072\",\r\n  0x0436,\r\n  \"afii10073\",\r\n  0x0437,\r\n  \"afii10074\",\r\n  0x0438,\r\n  \"afii10075\",\r\n  0x0439,\r\n  \"afii10076\",\r\n  0x043a,\r\n  \"afii10077\",\r\n  0x043b,\r\n  \"afii10078\",\r\n  0x043c,\r\n  \"afii10079\",\r\n  0x043d,\r\n  \"afii10080\",\r\n  0x043e,\r\n  \"afii10081\",\r\n  0x043f,\r\n  \"afii10082\",\r\n  0x0440,\r\n  \"afii10083\",\r\n  0x0441,\r\n  \"afii10084\",\r\n  0x0442,\r\n  \"afii10085\",\r\n  0x0443,\r\n  \"afii10086\",\r\n  0x0444,\r\n  \"afii10087\",\r\n  0x0445,\r\n  \"afii10088\",\r\n  0x0446,\r\n  \"afii10089\",\r\n  0x0447,\r\n  \"afii10090\",\r\n  0x0448,\r\n  \"afii10091\",\r\n  0x0449,\r\n  \"afii10092\",\r\n  0x044a,\r\n  \"afii10093\",\r\n  0x044b,\r\n  \"afii10094\",\r\n  0x044c,\r\n  \"afii10095\",\r\n  0x044d,\r\n  \"afii10096\",\r\n  0x044e,\r\n  \"afii10097\",\r\n  0x044f,\r\n  \"afii10098\",\r\n  0x0491,\r\n  \"afii10099\",\r\n  0x0452,\r\n  \"afii10100\",\r\n  0x0453,\r\n  \"afii10101\",\r\n  0x0454,\r\n  \"afii10102\",\r\n  0x0455,\r\n  \"afii10103\",\r\n  0x0456,\r\n  \"afii10104\",\r\n  0x0457,\r\n  \"afii10105\",\r\n  0x0458,\r\n  \"afii10106\",\r\n  0x0459,\r\n  \"afii10107\",\r\n  0x045a,\r\n  \"afii10108\",\r\n  0x045b,\r\n  \"afii10109\",\r\n  0x045c,\r\n  \"afii10110\",\r\n  0x045e,\r\n  \"afii10145\",\r\n  0x040f,\r\n  \"afii10146\",\r\n  0x0462,\r\n  \"afii10147\",\r\n  0x0472,\r\n  \"afii10148\",\r\n  0x0474,\r\n  \"afii10192\",\r\n  0xf6c6,\r\n  \"afii10193\",\r\n  0x045f,\r\n  \"afii10194\",\r\n  0x0463,\r\n  \"afii10195\",\r\n  0x0473,\r\n  \"afii10196\",\r\n  0x0475,\r\n  \"afii10831\",\r\n  0xf6c7,\r\n  \"afii10832\",\r\n  0xf6c8,\r\n  \"afii10846\",\r\n  0x04d9,\r\n  \"afii299\",\r\n  0x200e,\r\n  \"afii300\",\r\n  0x200f,\r\n  \"afii301\",\r\n  0x200d,\r\n  \"afii57381\",\r\n  0x066a,\r\n  \"afii57388\",\r\n  0x060c,\r\n  \"afii57392\",\r\n  0x0660,\r\n  \"afii57393\",\r\n  0x0661,\r\n  \"afii57394\",\r\n  0x0662,\r\n  \"afii57395\",\r\n  0x0663,\r\n  \"afii57396\",\r\n  0x0664,\r\n  \"afii57397\",\r\n  0x0665,\r\n  \"afii57398\",\r\n  0x0666,\r\n  \"afii57399\",\r\n  0x0667,\r\n  \"afii57400\",\r\n  0x0668,\r\n  \"afii57401\",\r\n  0x0669,\r\n  \"afii57403\",\r\n  0x061b,\r\n  \"afii57407\",\r\n  0x061f,\r\n  \"afii57409\",\r\n  0x0621,\r\n  \"afii57410\",\r\n  0x0622,\r\n  \"afii57411\",\r\n  0x0623,\r\n  \"afii57412\",\r\n  0x0624,\r\n  \"afii57413\",\r\n  0x0625,\r\n  \"afii57414\",\r\n  0x0626,\r\n  \"afii57415\",\r\n  0x0627,\r\n  \"afii57416\",\r\n  0x0628,\r\n  \"afii57417\",\r\n  0x0629,\r\n  \"afii57418\",\r\n  0x062a,\r\n  \"afii57419\",\r\n  0x062b,\r\n  \"afii57420\",\r\n  0x062c,\r\n  \"afii57421\",\r\n  0x062d,\r\n  \"afii57422\",\r\n  0x062e,\r\n  \"afii57423\",\r\n  0x062f,\r\n  \"afii57424\",\r\n  0x0630,\r\n  \"afii57425\",\r\n  0x0631,\r\n  \"afii57426\",\r\n  0x0632,\r\n  \"afii57427\",\r\n  0x0633,\r\n  \"afii57428\",\r\n  0x0634,\r\n  \"afii57429\",\r\n  0x0635,\r\n  \"afii57430\",\r\n  0x0636,\r\n  \"afii57431\",\r\n  0x0637,\r\n  \"afii57432\",\r\n  0x0638,\r\n  \"afii57433\",\r\n  0x0639,\r\n  \"afii57434\",\r\n  0x063a,\r\n  \"afii57440\",\r\n  0x0640,\r\n  \"afii57441\",\r\n  0x0641,\r\n  \"afii57442\",\r\n  0x0642,\r\n  \"afii57443\",\r\n  0x0643,\r\n  \"afii57444\",\r\n  0x0644,\r\n  \"afii57445\",\r\n  0x0645,\r\n  \"afii57446\",\r\n  0x0646,\r\n  \"afii57448\",\r\n  0x0648,\r\n  \"afii57449\",\r\n  0x0649,\r\n  \"afii57450\",\r\n  0x064a,\r\n  \"afii57451\",\r\n  0x064b,\r\n  \"afii57452\",\r\n  0x064c,\r\n  \"afii57453\",\r\n  0x064d,\r\n  \"afii57454\",\r\n  0x064e,\r\n  \"afii57455\",\r\n  0x064f,\r\n  \"afii57456\",\r\n  0x0650,\r\n  \"afii57457\",\r\n  0x0651,\r\n  \"afii57458\",\r\n  0x0652,\r\n  \"afii57470\",\r\n  0x0647,\r\n  \"afii57505\",\r\n  0x06a4,\r\n  \"afii57506\",\r\n  0x067e,\r\n  \"afii57507\",\r\n  0x0686,\r\n  \"afii57508\",\r\n  0x0698,\r\n  \"afii57509\",\r\n  0x06af,\r\n  \"afii57511\",\r\n  0x0679,\r\n  \"afii57512\",\r\n  0x0688,\r\n  \"afii57513\",\r\n  0x0691,\r\n  \"afii57514\",\r\n  0x06ba,\r\n  \"afii57519\",\r\n  0x06d2,\r\n  \"afii57534\",\r\n  0x06d5,\r\n  \"afii57636\",\r\n  0x20aa,\r\n  \"afii57645\",\r\n  0x05be,\r\n  \"afii57658\",\r\n  0x05c3,\r\n  \"afii57664\",\r\n  0x05d0,\r\n  \"afii57665\",\r\n  0x05d1,\r\n  \"afii57666\",\r\n  0x05d2,\r\n  \"afii57667\",\r\n  0x05d3,\r\n  \"afii57668\",\r\n  0x05d4,\r\n  \"afii57669\",\r\n  0x05d5,\r\n  \"afii57670\",\r\n  0x05d6,\r\n  \"afii57671\",\r\n  0x05d7,\r\n  \"afii57672\",\r\n  0x05d8,\r\n  \"afii57673\",\r\n  0x05d9,\r\n  \"afii57674\",\r\n  0x05da,\r\n  \"afii57675\",\r\n  0x05db,\r\n  \"afii57676\",\r\n  0x05dc,\r\n  \"afii57677\",\r\n  0x05dd,\r\n  \"afii57678\",\r\n  0x05de,\r\n  \"afii57679\",\r\n  0x05df,\r\n  \"afii57680\",\r\n  0x05e0,\r\n  \"afii57681\",\r\n  0x05e1,\r\n  \"afii57682\",\r\n  0x05e2,\r\n  \"afii57683\",\r\n  0x05e3,\r\n  \"afii57684\",\r\n  0x05e4,\r\n  \"afii57685\",\r\n  0x05e5,\r\n  \"afii57686\",\r\n  0x05e6,\r\n  \"afii57687\",\r\n  0x05e7,\r\n  \"afii57688\",\r\n  0x05e8,\r\n  \"afii57689\",\r\n  0x05e9,\r\n  \"afii57690\",\r\n  0x05ea,\r\n  \"afii57694\",\r\n  0xfb2a,\r\n  \"afii57695\",\r\n  0xfb2b,\r\n  \"afii57700\",\r\n  0xfb4b,\r\n  \"afii57705\",\r\n  0xfb1f,\r\n  \"afii57716\",\r\n  0x05f0,\r\n  \"afii57717\",\r\n  0x05f1,\r\n  \"afii57718\",\r\n  0x05f2,\r\n  \"afii57723\",\r\n  0xfb35,\r\n  \"afii57793\",\r\n  0x05b4,\r\n  \"afii57794\",\r\n  0x05b5,\r\n  \"afii57795\",\r\n  0x05b6,\r\n  \"afii57796\",\r\n  0x05bb,\r\n  \"afii57797\",\r\n  0x05b8,\r\n  \"afii57798\",\r\n  0x05b7,\r\n  \"afii57799\",\r\n  0x05b0,\r\n  \"afii57800\",\r\n  0x05b2,\r\n  \"afii57801\",\r\n  0x05b1,\r\n  \"afii57802\",\r\n  0x05b3,\r\n  \"afii57803\",\r\n  0x05c2,\r\n  \"afii57804\",\r\n  0x05c1,\r\n  \"afii57806\",\r\n  0x05b9,\r\n  \"afii57807\",\r\n  0x05bc,\r\n  \"afii57839\",\r\n  0x05bd,\r\n  \"afii57841\",\r\n  0x05bf,\r\n  \"afii57842\",\r\n  0x05c0,\r\n  \"afii57929\",\r\n  0x02bc,\r\n  \"afii61248\",\r\n  0x2105,\r\n  \"afii61289\",\r\n  0x2113,\r\n  \"afii61352\",\r\n  0x2116,\r\n  \"afii61573\",\r\n  0x202c,\r\n  \"afii61574\",\r\n  0x202d,\r\n  \"afii61575\",\r\n  0x202e,\r\n  \"afii61664\",\r\n  0x200c,\r\n  \"afii63167\",\r\n  0x066d,\r\n  \"afii64937\",\r\n  0x02bd,\r\n  \"agrave\",\r\n  0x00e0,\r\n  \"agujarati\",\r\n  0x0a85,\r\n  \"agurmukhi\",\r\n  0x0a05,\r\n  \"ahiragana\",\r\n  0x3042,\r\n  \"ahookabove\",\r\n  0x1ea3,\r\n  \"aibengali\",\r\n  0x0990,\r\n  \"aibopomofo\",\r\n  0x311e,\r\n  \"aideva\",\r\n  0x0910,\r\n  \"aiecyrillic\",\r\n  0x04d5,\r\n  \"aigujarati\",\r\n  0x0a90,\r\n  \"aigurmukhi\",\r\n  0x0a10,\r\n  \"aimatragurmukhi\",\r\n  0x0a48,\r\n  \"ainarabic\",\r\n  0x0639,\r\n  \"ainfinalarabic\",\r\n  0xfeca,\r\n  \"aininitialarabic\",\r\n  0xfecb,\r\n  \"ainmedialarabic\",\r\n  0xfecc,\r\n  \"ainvertedbreve\",\r\n  0x0203,\r\n  \"aivowelsignbengali\",\r\n  0x09c8,\r\n  \"aivowelsigndeva\",\r\n  0x0948,\r\n  \"aivowelsigngujarati\",\r\n  0x0ac8,\r\n  \"akatakana\",\r\n  0x30a2,\r\n  \"akatakanahalfwidth\",\r\n  0xff71,\r\n  \"akorean\",\r\n  0x314f,\r\n  \"alef\",\r\n  0x05d0,\r\n  \"alefarabic\",\r\n  0x0627,\r\n  \"alefdageshhebrew\",\r\n  0xfb30,\r\n  \"aleffinalarabic\",\r\n  0xfe8e,\r\n  \"alefhamzaabovearabic\",\r\n  0x0623,\r\n  \"alefhamzaabovefinalarabic\",\r\n  0xfe84,\r\n  \"alefhamzabelowarabic\",\r\n  0x0625,\r\n  \"alefhamzabelowfinalarabic\",\r\n  0xfe88,\r\n  \"alefhebrew\",\r\n  0x05d0,\r\n  \"aleflamedhebrew\",\r\n  0xfb4f,\r\n  \"alefmaddaabovearabic\",\r\n  0x0622,\r\n  \"alefmaddaabovefinalarabic\",\r\n  0xfe82,\r\n  \"alefmaksuraarabic\",\r\n  0x0649,\r\n  \"alefmaksurafinalarabic\",\r\n  0xfef0,\r\n  \"alefmaksurainitialarabic\",\r\n  0xfef3,\r\n  \"alefmaksuramedialarabic\",\r\n  0xfef4,\r\n  \"alefpatahhebrew\",\r\n  0xfb2e,\r\n  \"alefqamatshebrew\",\r\n  0xfb2f,\r\n  \"aleph\",\r\n  0x2135,\r\n  \"allequal\",\r\n  0x224c,\r\n  \"alpha\",\r\n  0x03b1,\r\n  \"alphatonos\",\r\n  0x03ac,\r\n  \"amacron\",\r\n  0x0101,\r\n  \"amonospace\",\r\n  0xff41,\r\n  \"ampersand\",\r\n  0x0026,\r\n  \"ampersandmonospace\",\r\n  0xff06,\r\n  \"ampersandsmall\",\r\n  0xf726,\r\n  \"amsquare\",\r\n  0x33c2,\r\n  \"anbopomofo\",\r\n  0x3122,\r\n  \"angbopomofo\",\r\n  0x3124,\r\n  \"angbracketleft\",\r\n  0x3008,\r\n  \"angbracketright\",\r\n  0x3009,\r\n  \"angkhankhuthai\",\r\n  0x0e5a,\r\n  \"angle\",\r\n  0x2220,\r\n  \"anglebracketleft\",\r\n  0x3008,\r\n  \"anglebracketleftvertical\",\r\n  0xfe3f,\r\n  \"anglebracketright\",\r\n  0x3009,\r\n  \"anglebracketrightvertical\",\r\n  0xfe40,\r\n  \"angleleft\",\r\n  0x2329,\r\n  \"angleright\",\r\n  0x232a,\r\n  \"angstrom\",\r\n  0x212b,\r\n  \"anoteleia\",\r\n  0x0387,\r\n  \"anudattadeva\",\r\n  0x0952,\r\n  \"anusvarabengali\",\r\n  0x0982,\r\n  \"anusvaradeva\",\r\n  0x0902,\r\n  \"anusvaragujarati\",\r\n  0x0a82,\r\n  \"aogonek\",\r\n  0x0105,\r\n  \"apaatosquare\",\r\n  0x3300,\r\n  \"aparen\",\r\n  0x249c,\r\n  \"apostrophearmenian\",\r\n  0x055a,\r\n  \"apostrophemod\",\r\n  0x02bc,\r\n  \"apple\",\r\n  0xf8ff,\r\n  \"approaches\",\r\n  0x2250,\r\n  \"approxequal\",\r\n  0x2248,\r\n  \"approxequalorimage\",\r\n  0x2252,\r\n  \"approximatelyequal\",\r\n  0x2245,\r\n  \"araeaekorean\",\r\n  0x318e,\r\n  \"araeakorean\",\r\n  0x318d,\r\n  \"arc\",\r\n  0x2312,\r\n  \"arighthalfring\",\r\n  0x1e9a,\r\n  \"aring\",\r\n  0x00e5,\r\n  \"aringacute\",\r\n  0x01fb,\r\n  \"aringbelow\",\r\n  0x1e01,\r\n  \"arrowboth\",\r\n  0x2194,\r\n  \"arrowdashdown\",\r\n  0x21e3,\r\n  \"arrowdashleft\",\r\n  0x21e0,\r\n  \"arrowdashright\",\r\n  0x21e2,\r\n  \"arrowdashup\",\r\n  0x21e1,\r\n  \"arrowdblboth\",\r\n  0x21d4,\r\n  \"arrowdbldown\",\r\n  0x21d3,\r\n  \"arrowdblleft\",\r\n  0x21d0,\r\n  \"arrowdblright\",\r\n  0x21d2,\r\n  \"arrowdblup\",\r\n  0x21d1,\r\n  \"arrowdown\",\r\n  0x2193,\r\n  \"arrowdownleft\",\r\n  0x2199,\r\n  \"arrowdownright\",\r\n  0x2198,\r\n  \"arrowdownwhite\",\r\n  0x21e9,\r\n  \"arrowheaddownmod\",\r\n  0x02c5,\r\n  \"arrowheadleftmod\",\r\n  0x02c2,\r\n  \"arrowheadrightmod\",\r\n  0x02c3,\r\n  \"arrowheadupmod\",\r\n  0x02c4,\r\n  \"arrowhorizex\",\r\n  0xf8e7,\r\n  \"arrowleft\",\r\n  0x2190,\r\n  \"arrowleftdbl\",\r\n  0x21d0,\r\n  \"arrowleftdblstroke\",\r\n  0x21cd,\r\n  \"arrowleftoverright\",\r\n  0x21c6,\r\n  \"arrowleftwhite\",\r\n  0x21e6,\r\n  \"arrowright\",\r\n  0x2192,\r\n  \"arrowrightdblstroke\",\r\n  0x21cf,\r\n  \"arrowrightheavy\",\r\n  0x279e,\r\n  \"arrowrightoverleft\",\r\n  0x21c4,\r\n  \"arrowrightwhite\",\r\n  0x21e8,\r\n  \"arrowtableft\",\r\n  0x21e4,\r\n  \"arrowtabright\",\r\n  0x21e5,\r\n  \"arrowup\",\r\n  0x2191,\r\n  \"arrowupdn\",\r\n  0x2195,\r\n  \"arrowupdnbse\",\r\n  0x21a8,\r\n  \"arrowupdownbase\",\r\n  0x21a8,\r\n  \"arrowupleft\",\r\n  0x2196,\r\n  \"arrowupleftofdown\",\r\n  0x21c5,\r\n  \"arrowupright\",\r\n  0x2197,\r\n  \"arrowupwhite\",\r\n  0x21e7,\r\n  \"arrowvertex\",\r\n  0xf8e6,\r\n  \"asciicircum\",\r\n  0x005e,\r\n  \"asciicircummonospace\",\r\n  0xff3e,\r\n  \"asciitilde\",\r\n  0x007e,\r\n  \"asciitildemonospace\",\r\n  0xff5e,\r\n  \"ascript\",\r\n  0x0251,\r\n  \"ascriptturned\",\r\n  0x0252,\r\n  \"asmallhiragana\",\r\n  0x3041,\r\n  \"asmallkatakana\",\r\n  0x30a1,\r\n  \"asmallkatakanahalfwidth\",\r\n  0xff67,\r\n  \"asterisk\",\r\n  0x002a,\r\n  \"asteriskaltonearabic\",\r\n  0x066d,\r\n  \"asteriskarabic\",\r\n  0x066d,\r\n  \"asteriskmath\",\r\n  0x2217,\r\n  \"asteriskmonospace\",\r\n  0xff0a,\r\n  \"asterisksmall\",\r\n  0xfe61,\r\n  \"asterism\",\r\n  0x2042,\r\n  \"asuperior\",\r\n  0xf6e9,\r\n  \"asymptoticallyequal\",\r\n  0x2243,\r\n  \"at\",\r\n  0x0040,\r\n  \"atilde\",\r\n  0x00e3,\r\n  \"atmonospace\",\r\n  0xff20,\r\n  \"atsmall\",\r\n  0xfe6b,\r\n  \"aturned\",\r\n  0x0250,\r\n  \"aubengali\",\r\n  0x0994,\r\n  \"aubopomofo\",\r\n  0x3120,\r\n  \"audeva\",\r\n  0x0914,\r\n  \"augujarati\",\r\n  0x0a94,\r\n  \"augurmukhi\",\r\n  0x0a14,\r\n  \"aulengthmarkbengali\",\r\n  0x09d7,\r\n  \"aumatragurmukhi\",\r\n  0x0a4c,\r\n  \"auvowelsignbengali\",\r\n  0x09cc,\r\n  \"auvowelsigndeva\",\r\n  0x094c,\r\n  \"auvowelsigngujarati\",\r\n  0x0acc,\r\n  \"avagrahadeva\",\r\n  0x093d,\r\n  \"aybarmenian\",\r\n  0x0561,\r\n  \"ayin\",\r\n  0x05e2,\r\n  \"ayinaltonehebrew\",\r\n  0xfb20,\r\n  \"ayinhebrew\",\r\n  0x05e2,\r\n  \"b\",\r\n  0x0062,\r\n  \"babengali\",\r\n  0x09ac,\r\n  \"backslash\",\r\n  0x005c,\r\n  \"backslashmonospace\",\r\n  0xff3c,\r\n  \"badeva\",\r\n  0x092c,\r\n  \"bagujarati\",\r\n  0x0aac,\r\n  \"bagurmukhi\",\r\n  0x0a2c,\r\n  \"bahiragana\",\r\n  0x3070,\r\n  \"bahtthai\",\r\n  0x0e3f,\r\n  \"bakatakana\",\r\n  0x30d0,\r\n  \"bar\",\r\n  0x007c,\r\n  \"barmonospace\",\r\n  0xff5c,\r\n  \"bbopomofo\",\r\n  0x3105,\r\n  \"bcircle\",\r\n  0x24d1,\r\n  \"bdotaccent\",\r\n  0x1e03,\r\n  \"bdotbelow\",\r\n  0x1e05,\r\n  \"beamedsixteenthnotes\",\r\n  0x266c,\r\n  \"because\",\r\n  0x2235,\r\n  \"becyrillic\",\r\n  0x0431,\r\n  \"beharabic\",\r\n  0x0628,\r\n  \"behfinalarabic\",\r\n  0xfe90,\r\n  \"behinitialarabic\",\r\n  0xfe91,\r\n  \"behiragana\",\r\n  0x3079,\r\n  \"behmedialarabic\",\r\n  0xfe92,\r\n  \"behmeeminitialarabic\",\r\n  0xfc9f,\r\n  \"behmeemisolatedarabic\",\r\n  0xfc08,\r\n  \"behnoonfinalarabic\",\r\n  0xfc6d,\r\n  \"bekatakana\",\r\n  0x30d9,\r\n  \"benarmenian\",\r\n  0x0562,\r\n  \"bet\",\r\n  0x05d1,\r\n  \"beta\",\r\n  0x03b2,\r\n  \"betasymbolgreek\",\r\n  0x03d0,\r\n  \"betdagesh\",\r\n  0xfb31,\r\n  \"betdageshhebrew\",\r\n  0xfb31,\r\n  \"bethebrew\",\r\n  0x05d1,\r\n  \"betrafehebrew\",\r\n  0xfb4c,\r\n  \"bhabengali\",\r\n  0x09ad,\r\n  \"bhadeva\",\r\n  0x092d,\r\n  \"bhagujarati\",\r\n  0x0aad,\r\n  \"bhagurmukhi\",\r\n  0x0a2d,\r\n  \"bhook\",\r\n  0x0253,\r\n  \"bihiragana\",\r\n  0x3073,\r\n  \"bikatakana\",\r\n  0x30d3,\r\n  \"bilabialclick\",\r\n  0x0298,\r\n  \"bindigurmukhi\",\r\n  0x0a02,\r\n  \"birusquare\",\r\n  0x3331,\r\n  \"blackcircle\",\r\n  0x25cf,\r\n  \"blackdiamond\",\r\n  0x25c6,\r\n  \"blackdownpointingtriangle\",\r\n  0x25bc,\r\n  \"blackleftpointingpointer\",\r\n  0x25c4,\r\n  \"blackleftpointingtriangle\",\r\n  0x25c0,\r\n  \"blacklenticularbracketleft\",\r\n  0x3010,\r\n  \"blacklenticularbracketleftvertical\",\r\n  0xfe3b,\r\n  \"blacklenticularbracketright\",\r\n  0x3011,\r\n  \"blacklenticularbracketrightvertical\",\r\n  0xfe3c,\r\n  \"blacklowerlefttriangle\",\r\n  0x25e3,\r\n  \"blacklowerrighttriangle\",\r\n  0x25e2,\r\n  \"blackrectangle\",\r\n  0x25ac,\r\n  \"blackrightpointingpointer\",\r\n  0x25ba,\r\n  \"blackrightpointingtriangle\",\r\n  0x25b6,\r\n  \"blacksmallsquare\",\r\n  0x25aa,\r\n  \"blacksmilingface\",\r\n  0x263b,\r\n  \"blacksquare\",\r\n  0x25a0,\r\n  \"blackstar\",\r\n  0x2605,\r\n  \"blackupperlefttriangle\",\r\n  0x25e4,\r\n  \"blackupperrighttriangle\",\r\n  0x25e5,\r\n  \"blackuppointingsmalltriangle\",\r\n  0x25b4,\r\n  \"blackuppointingtriangle\",\r\n  0x25b2,\r\n  \"blank\",\r\n  0x2423,\r\n  \"blinebelow\",\r\n  0x1e07,\r\n  \"block\",\r\n  0x2588,\r\n  \"bmonospace\",\r\n  0xff42,\r\n  \"bobaimaithai\",\r\n  0x0e1a,\r\n  \"bohiragana\",\r\n  0x307c,\r\n  \"bokatakana\",\r\n  0x30dc,\r\n  \"bparen\",\r\n  0x249d,\r\n  \"bqsquare\",\r\n  0x33c3,\r\n  \"braceex\",\r\n  0xf8f4,\r\n  \"braceleft\",\r\n  0x007b,\r\n  \"braceleftbt\",\r\n  0xf8f3,\r\n  \"braceleftmid\",\r\n  0xf8f2,\r\n  \"braceleftmonospace\",\r\n  0xff5b,\r\n  \"braceleftsmall\",\r\n  0xfe5b,\r\n  \"bracelefttp\",\r\n  0xf8f1,\r\n  \"braceleftvertical\",\r\n  0xfe37,\r\n  \"braceright\",\r\n  0x007d,\r\n  \"bracerightbt\",\r\n  0xf8fe,\r\n  \"bracerightmid\",\r\n  0xf8fd,\r\n  \"bracerightmonospace\",\r\n  0xff5d,\r\n  \"bracerightsmall\",\r\n  0xfe5c,\r\n  \"bracerighttp\",\r\n  0xf8fc,\r\n  \"bracerightvertical\",\r\n  0xfe38,\r\n  \"bracketleft\",\r\n  0x005b,\r\n  \"bracketleftbt\",\r\n  0xf8f0,\r\n  \"bracketleftex\",\r\n  0xf8ef,\r\n  \"bracketleftmonospace\",\r\n  0xff3b,\r\n  \"bracketlefttp\",\r\n  0xf8ee,\r\n  \"bracketright\",\r\n  0x005d,\r\n  \"bracketrightbt\",\r\n  0xf8fb,\r\n  \"bracketrightex\",\r\n  0xf8fa,\r\n  \"bracketrightmonospace\",\r\n  0xff3d,\r\n  \"bracketrighttp\",\r\n  0xf8f9,\r\n  \"breve\",\r\n  0x02d8,\r\n  \"brevebelowcmb\",\r\n  0x032e,\r\n  \"brevecmb\",\r\n  0x0306,\r\n  \"breveinvertedbelowcmb\",\r\n  0x032f,\r\n  \"breveinvertedcmb\",\r\n  0x0311,\r\n  \"breveinverteddoublecmb\",\r\n  0x0361,\r\n  \"bridgebelowcmb\",\r\n  0x032a,\r\n  \"bridgeinvertedbelowcmb\",\r\n  0x033a,\r\n  \"brokenbar\",\r\n  0x00a6,\r\n  \"bstroke\",\r\n  0x0180,\r\n  \"bsuperior\",\r\n  0xf6ea,\r\n  \"btopbar\",\r\n  0x0183,\r\n  \"buhiragana\",\r\n  0x3076,\r\n  \"bukatakana\",\r\n  0x30d6,\r\n  \"bullet\",\r\n  0x2022,\r\n  \"bulletinverse\",\r\n  0x25d8,\r\n  \"bulletoperator\",\r\n  0x2219,\r\n  \"bullseye\",\r\n  0x25ce,\r\n  \"c\",\r\n  0x0063,\r\n  \"caarmenian\",\r\n  0x056e,\r\n  \"cabengali\",\r\n  0x099a,\r\n  \"cacute\",\r\n  0x0107,\r\n  \"cadeva\",\r\n  0x091a,\r\n  \"cagujarati\",\r\n  0x0a9a,\r\n  \"cagurmukhi\",\r\n  0x0a1a,\r\n  \"calsquare\",\r\n  0x3388,\r\n  \"candrabindubengali\",\r\n  0x0981,\r\n  \"candrabinducmb\",\r\n  0x0310,\r\n  \"candrabindudeva\",\r\n  0x0901,\r\n  \"candrabindugujarati\",\r\n  0x0a81,\r\n  \"capslock\",\r\n  0x21ea,\r\n  \"careof\",\r\n  0x2105,\r\n  \"caron\",\r\n  0x02c7,\r\n  \"caronbelowcmb\",\r\n  0x032c,\r\n  \"caroncmb\",\r\n  0x030c,\r\n  \"carriagereturn\",\r\n  0x21b5,\r\n  \"cbopomofo\",\r\n  0x3118,\r\n  \"ccaron\",\r\n  0x010d,\r\n  \"ccedilla\",\r\n  0x00e7,\r\n  \"ccedillaacute\",\r\n  0x1e09,\r\n  \"ccircle\",\r\n  0x24d2,\r\n  \"ccircumflex\",\r\n  0x0109,\r\n  \"ccurl\",\r\n  0x0255,\r\n  \"cdot\",\r\n  0x010b,\r\n  \"cdotaccent\",\r\n  0x010b,\r\n  \"cdsquare\",\r\n  0x33c5,\r\n  \"cedilla\",\r\n  0x00b8,\r\n  \"cedillacmb\",\r\n  0x0327,\r\n  \"cent\",\r\n  0x00a2,\r\n  \"centigrade\",\r\n  0x2103,\r\n  \"centinferior\",\r\n  0xf6df,\r\n  \"centmonospace\",\r\n  0xffe0,\r\n  \"centoldstyle\",\r\n  0xf7a2,\r\n  \"centsuperior\",\r\n  0xf6e0,\r\n  \"chaarmenian\",\r\n  0x0579,\r\n  \"chabengali\",\r\n  0x099b,\r\n  \"chadeva\",\r\n  0x091b,\r\n  \"chagujarati\",\r\n  0x0a9b,\r\n  \"chagurmukhi\",\r\n  0x0a1b,\r\n  \"chbopomofo\",\r\n  0x3114,\r\n  \"cheabkhasiancyrillic\",\r\n  0x04bd,\r\n  \"checkmark\",\r\n  0x2713,\r\n  \"checyrillic\",\r\n  0x0447,\r\n  \"chedescenderabkhasiancyrillic\",\r\n  0x04bf,\r\n  \"chedescendercyrillic\",\r\n  0x04b7,\r\n  \"chedieresiscyrillic\",\r\n  0x04f5,\r\n  \"cheharmenian\",\r\n  0x0573,\r\n  \"chekhakassiancyrillic\",\r\n  0x04cc,\r\n  \"cheverticalstrokecyrillic\",\r\n  0x04b9,\r\n  \"chi\",\r\n  0x03c7,\r\n  \"chieuchacirclekorean\",\r\n  0x3277,\r\n  \"chieuchaparenkorean\",\r\n  0x3217,\r\n  \"chieuchcirclekorean\",\r\n  0x3269,\r\n  \"chieuchkorean\",\r\n  0x314a,\r\n  \"chieuchparenkorean\",\r\n  0x3209,\r\n  \"chochangthai\",\r\n  0x0e0a,\r\n  \"chochanthai\",\r\n  0x0e08,\r\n  \"chochingthai\",\r\n  0x0e09,\r\n  \"chochoethai\",\r\n  0x0e0c,\r\n  \"chook\",\r\n  0x0188,\r\n  \"cieucacirclekorean\",\r\n  0x3276,\r\n  \"cieucaparenkorean\",\r\n  0x3216,\r\n  \"cieuccirclekorean\",\r\n  0x3268,\r\n  \"cieuckorean\",\r\n  0x3148,\r\n  \"cieucparenkorean\",\r\n  0x3208,\r\n  \"cieucuparenkorean\",\r\n  0x321c,\r\n  \"circle\",\r\n  0x25cb,\r\n  \"circlecopyrt\",\r\n  0x00a9,\r\n  \"circlemultiply\",\r\n  0x2297,\r\n  \"circleot\",\r\n  0x2299,\r\n  \"circleplus\",\r\n  0x2295,\r\n  \"circlepostalmark\",\r\n  0x3036,\r\n  \"circlewithlefthalfblack\",\r\n  0x25d0,\r\n  \"circlewithrighthalfblack\",\r\n  0x25d1,\r\n  \"circumflex\",\r\n  0x02c6,\r\n  \"circumflexbelowcmb\",\r\n  0x032d,\r\n  \"circumflexcmb\",\r\n  0x0302,\r\n  \"clear\",\r\n  0x2327,\r\n  \"clickalveolar\",\r\n  0x01c2,\r\n  \"clickdental\",\r\n  0x01c0,\r\n  \"clicklateral\",\r\n  0x01c1,\r\n  \"clickretroflex\",\r\n  0x01c3,\r\n  \"club\",\r\n  0x2663,\r\n  \"clubsuitblack\",\r\n  0x2663,\r\n  \"clubsuitwhite\",\r\n  0x2667,\r\n  \"cmcubedsquare\",\r\n  0x33a4,\r\n  \"cmonospace\",\r\n  0xff43,\r\n  \"cmsquaredsquare\",\r\n  0x33a0,\r\n  \"coarmenian\",\r\n  0x0581,\r\n  \"colon\",\r\n  0x003a,\r\n  \"colonmonetary\",\r\n  0x20a1,\r\n  \"colonmonospace\",\r\n  0xff1a,\r\n  \"colonsign\",\r\n  0x20a1,\r\n  \"colonsmall\",\r\n  0xfe55,\r\n  \"colontriangularhalfmod\",\r\n  0x02d1,\r\n  \"colontriangularmod\",\r\n  0x02d0,\r\n  \"comma\",\r\n  0x002c,\r\n  \"commaabovecmb\",\r\n  0x0313,\r\n  \"commaaboverightcmb\",\r\n  0x0315,\r\n  \"commaaccent\",\r\n  0xf6c3,\r\n  \"commaarabic\",\r\n  0x060c,\r\n  \"commaarmenian\",\r\n  0x055d,\r\n  \"commainferior\",\r\n  0xf6e1,\r\n  \"commamonospace\",\r\n  0xff0c,\r\n  \"commareversedabovecmb\",\r\n  0x0314,\r\n  \"commareversedmod\",\r\n  0x02bd,\r\n  \"commasmall\",\r\n  0xfe50,\r\n  \"commasuperior\",\r\n  0xf6e2,\r\n  \"commaturnedabovecmb\",\r\n  0x0312,\r\n  \"commaturnedmod\",\r\n  0x02bb,\r\n  \"compass\",\r\n  0x263c,\r\n  \"congruent\",\r\n  0x2245,\r\n  \"contourintegral\",\r\n  0x222e,\r\n  \"control\",\r\n  0x2303,\r\n  \"controlACK\",\r\n  0x0006,\r\n  \"controlBEL\",\r\n  0x0007,\r\n  \"controlBS\",\r\n  0x0008,\r\n  \"controlCAN\",\r\n  0x0018,\r\n  \"controlCR\",\r\n  0x000d,\r\n  \"controlDC1\",\r\n  0x0011,\r\n  \"controlDC2\",\r\n  0x0012,\r\n  \"controlDC3\",\r\n  0x0013,\r\n  \"controlDC4\",\r\n  0x0014,\r\n  \"controlDEL\",\r\n  0x007f,\r\n  \"controlDLE\",\r\n  0x0010,\r\n  \"controlEM\",\r\n  0x0019,\r\n  \"controlENQ\",\r\n  0x0005,\r\n  \"controlEOT\",\r\n  0x0004,\r\n  \"controlESC\",\r\n  0x001b,\r\n  \"controlETB\",\r\n  0x0017,\r\n  \"controlETX\",\r\n  0x0003,\r\n  \"controlFF\",\r\n  0x000c,\r\n  \"controlFS\",\r\n  0x001c,\r\n  \"controlGS\",\r\n  0x001d,\r\n  \"controlHT\",\r\n  0x0009,\r\n  \"controlLF\",\r\n  0x000a,\r\n  \"controlNAK\",\r\n  0x0015,\r\n  \"controlNULL\",\r\n  0x0000,\r\n  \"controlRS\",\r\n  0x001e,\r\n  \"controlSI\",\r\n  0x000f,\r\n  \"controlSO\",\r\n  0x000e,\r\n  \"controlSOT\",\r\n  0x0002,\r\n  \"controlSTX\",\r\n  0x0001,\r\n  \"controlSUB\",\r\n  0x001a,\r\n  \"controlSYN\",\r\n  0x0016,\r\n  \"controlUS\",\r\n  0x001f,\r\n  \"controlVT\",\r\n  0x000b,\r\n  \"copyright\",\r\n  0x00a9,\r\n  \"copyrightsans\",\r\n  0xf8e9,\r\n  \"copyrightserif\",\r\n  0xf6d9,\r\n  \"cornerbracketleft\",\r\n  0x300c,\r\n  \"cornerbracketlefthalfwidth\",\r\n  0xff62,\r\n  \"cornerbracketleftvertical\",\r\n  0xfe41,\r\n  \"cornerbracketright\",\r\n  0x300d,\r\n  \"cornerbracketrighthalfwidth\",\r\n  0xff63,\r\n  \"cornerbracketrightvertical\",\r\n  0xfe42,\r\n  \"corporationsquare\",\r\n  0x337f,\r\n  \"cosquare\",\r\n  0x33c7,\r\n  \"coverkgsquare\",\r\n  0x33c6,\r\n  \"cparen\",\r\n  0x249e,\r\n  \"cruzeiro\",\r\n  0x20a2,\r\n  \"cstretched\",\r\n  0x0297,\r\n  \"curlyand\",\r\n  0x22cf,\r\n  \"curlyor\",\r\n  0x22ce,\r\n  \"currency\",\r\n  0x00a4,\r\n  \"cyrBreve\",\r\n  0xf6d1,\r\n  \"cyrFlex\",\r\n  0xf6d2,\r\n  \"cyrbreve\",\r\n  0xf6d4,\r\n  \"cyrflex\",\r\n  0xf6d5,\r\n  \"d\",\r\n  0x0064,\r\n  \"daarmenian\",\r\n  0x0564,\r\n  \"dabengali\",\r\n  0x09a6,\r\n  \"dadarabic\",\r\n  0x0636,\r\n  \"dadeva\",\r\n  0x0926,\r\n  \"dadfinalarabic\",\r\n  0xfebe,\r\n  \"dadinitialarabic\",\r\n  0xfebf,\r\n  \"dadmedialarabic\",\r\n  0xfec0,\r\n  \"dagesh\",\r\n  0x05bc,\r\n  \"dageshhebrew\",\r\n  0x05bc,\r\n  \"dagger\",\r\n  0x2020,\r\n  \"daggerdbl\",\r\n  0x2021,\r\n  \"dagujarati\",\r\n  0x0aa6,\r\n  \"dagurmukhi\",\r\n  0x0a26,\r\n  \"dahiragana\",\r\n  0x3060,\r\n  \"dakatakana\",\r\n  0x30c0,\r\n  \"dalarabic\",\r\n  0x062f,\r\n  \"dalet\",\r\n  0x05d3,\r\n  \"daletdagesh\",\r\n  0xfb33,\r\n  \"daletdageshhebrew\",\r\n  0xfb33,\r\n  \"dalethebrew\",\r\n  0x05d3,\r\n  \"dalfinalarabic\",\r\n  0xfeaa,\r\n  \"dammaarabic\",\r\n  0x064f,\r\n  \"dammalowarabic\",\r\n  0x064f,\r\n  \"dammatanaltonearabic\",\r\n  0x064c,\r\n  \"dammatanarabic\",\r\n  0x064c,\r\n  \"danda\",\r\n  0x0964,\r\n  \"dargahebrew\",\r\n  0x05a7,\r\n  \"dargalefthebrew\",\r\n  0x05a7,\r\n  \"dasiapneumatacyrilliccmb\",\r\n  0x0485,\r\n  \"dblGrave\",\r\n  0xf6d3,\r\n  \"dblanglebracketleft\",\r\n  0x300a,\r\n  \"dblanglebracketleftvertical\",\r\n  0xfe3d,\r\n  \"dblanglebracketright\",\r\n  0x300b,\r\n  \"dblanglebracketrightvertical\",\r\n  0xfe3e,\r\n  \"dblarchinvertedbelowcmb\",\r\n  0x032b,\r\n  \"dblarrowleft\",\r\n  0x21d4,\r\n  \"dblarrowright\",\r\n  0x21d2,\r\n  \"dbldanda\",\r\n  0x0965,\r\n  \"dblgrave\",\r\n  0xf6d6,\r\n  \"dblgravecmb\",\r\n  0x030f,\r\n  \"dblintegral\",\r\n  0x222c,\r\n  \"dbllowline\",\r\n  0x2017,\r\n  \"dbllowlinecmb\",\r\n  0x0333,\r\n  \"dbloverlinecmb\",\r\n  0x033f,\r\n  \"dblprimemod\",\r\n  0x02ba,\r\n  \"dblverticalbar\",\r\n  0x2016,\r\n  \"dblverticallineabovecmb\",\r\n  0x030e,\r\n  \"dbopomofo\",\r\n  0x3109,\r\n  \"dbsquare\",\r\n  0x33c8,\r\n  \"dcaron\",\r\n  0x010f,\r\n  \"dcedilla\",\r\n  0x1e11,\r\n  \"dcircle\",\r\n  0x24d3,\r\n  \"dcircumflexbelow\",\r\n  0x1e13,\r\n  \"dcroat\",\r\n  0x0111,\r\n  \"ddabengali\",\r\n  0x09a1,\r\n  \"ddadeva\",\r\n  0x0921,\r\n  \"ddagujarati\",\r\n  0x0aa1,\r\n  \"ddagurmukhi\",\r\n  0x0a21,\r\n  \"ddalarabic\",\r\n  0x0688,\r\n  \"ddalfinalarabic\",\r\n  0xfb89,\r\n  \"dddhadeva\",\r\n  0x095c,\r\n  \"ddhabengali\",\r\n  0x09a2,\r\n  \"ddhadeva\",\r\n  0x0922,\r\n  \"ddhagujarati\",\r\n  0x0aa2,\r\n  \"ddhagurmukhi\",\r\n  0x0a22,\r\n  \"ddotaccent\",\r\n  0x1e0b,\r\n  \"ddotbelow\",\r\n  0x1e0d,\r\n  \"decimalseparatorarabic\",\r\n  0x066b,\r\n  \"decimalseparatorpersian\",\r\n  0x066b,\r\n  \"decyrillic\",\r\n  0x0434,\r\n  \"degree\",\r\n  0x00b0,\r\n  \"dehihebrew\",\r\n  0x05ad,\r\n  \"dehiragana\",\r\n  0x3067,\r\n  \"deicoptic\",\r\n  0x03ef,\r\n  \"dekatakana\",\r\n  0x30c7,\r\n  \"deleteleft\",\r\n  0x232b,\r\n  \"deleteright\",\r\n  0x2326,\r\n  \"delta\",\r\n  0x03b4,\r\n  \"deltaturned\",\r\n  0x018d,\r\n  \"denominatorminusonenumeratorbengali\",\r\n  0x09f8,\r\n  \"dezh\",\r\n  0x02a4,\r\n  \"dhabengali\",\r\n  0x09a7,\r\n  \"dhadeva\",\r\n  0x0927,\r\n  \"dhagujarati\",\r\n  0x0aa7,\r\n  \"dhagurmukhi\",\r\n  0x0a27,\r\n  \"dhook\",\r\n  0x0257,\r\n  \"dialytikatonos\",\r\n  0x0385,\r\n  \"dialytikatonoscmb\",\r\n  0x0344,\r\n  \"diamond\",\r\n  0x2666,\r\n  \"diamondsuitwhite\",\r\n  0x2662,\r\n  \"dieresis\",\r\n  0x00a8,\r\n  \"dieresisacute\",\r\n  0xf6d7,\r\n  \"dieresisbelowcmb\",\r\n  0x0324,\r\n  \"dieresiscmb\",\r\n  0x0308,\r\n  \"dieresisgrave\",\r\n  0xf6d8,\r\n  \"dieresistonos\",\r\n  0x0385,\r\n  \"dihiragana\",\r\n  0x3062,\r\n  \"dikatakana\",\r\n  0x30c2,\r\n  \"dittomark\",\r\n  0x3003,\r\n  \"divide\",\r\n  0x00f7,\r\n  \"divides\",\r\n  0x2223,\r\n  \"divisionslash\",\r\n  0x2215,\r\n  \"djecyrillic\",\r\n  0x0452,\r\n  \"dkshade\",\r\n  0x2593,\r\n  \"dlinebelow\",\r\n  0x1e0f,\r\n  \"dlsquare\",\r\n  0x3397,\r\n  \"dmacron\",\r\n  0x0111,\r\n  \"dmonospace\",\r\n  0xff44,\r\n  \"dnblock\",\r\n  0x2584,\r\n  \"dochadathai\",\r\n  0x0e0e,\r\n  \"dodekthai\",\r\n  0x0e14,\r\n  \"dohiragana\",\r\n  0x3069,\r\n  \"dokatakana\",\r\n  0x30c9,\r\n  \"dollar\",\r\n  0x0024,\r\n  \"dollarinferior\",\r\n  0xf6e3,\r\n  \"dollarmonospace\",\r\n  0xff04,\r\n  \"dollaroldstyle\",\r\n  0xf724,\r\n  \"dollarsmall\",\r\n  0xfe69,\r\n  \"dollarsuperior\",\r\n  0xf6e4,\r\n  \"dong\",\r\n  0x20ab,\r\n  \"dorusquare\",\r\n  0x3326,\r\n  \"dotaccent\",\r\n  0x02d9,\r\n  \"dotaccentcmb\",\r\n  0x0307,\r\n  \"dotbelowcmb\",\r\n  0x0323,\r\n  \"dotbelowcomb\",\r\n  0x0323,\r\n  \"dotkatakana\",\r\n  0x30fb,\r\n  \"dotlessi\",\r\n  0x0131,\r\n  \"dotlessj\",\r\n  0xf6be,\r\n  \"dotlessjstrokehook\",\r\n  0x0284,\r\n  \"dotmath\",\r\n  0x22c5,\r\n  \"dottedcircle\",\r\n  0x25cc,\r\n  \"doubleyodpatah\",\r\n  0xfb1f,\r\n  \"doubleyodpatahhebrew\",\r\n  0xfb1f,\r\n  \"downtackbelowcmb\",\r\n  0x031e,\r\n  \"downtackmod\",\r\n  0x02d5,\r\n  \"dparen\",\r\n  0x249f,\r\n  \"dsuperior\",\r\n  0xf6eb,\r\n  \"dtail\",\r\n  0x0256,\r\n  \"dtopbar\",\r\n  0x018c,\r\n  \"duhiragana\",\r\n  0x3065,\r\n  \"dukatakana\",\r\n  0x30c5,\r\n  \"dz\",\r\n  0x01f3,\r\n  \"dzaltone\",\r\n  0x02a3,\r\n  \"dzcaron\",\r\n  0x01c6,\r\n  \"dzcurl\",\r\n  0x02a5,\r\n  \"dzeabkhasiancyrillic\",\r\n  0x04e1,\r\n  \"dzecyrillic\",\r\n  0x0455,\r\n  \"dzhecyrillic\",\r\n  0x045f,\r\n  \"e\",\r\n  0x0065,\r\n  \"eacute\",\r\n  0x00e9,\r\n  \"earth\",\r\n  0x2641,\r\n  \"ebengali\",\r\n  0x098f,\r\n  \"ebopomofo\",\r\n  0x311c,\r\n  \"ebreve\",\r\n  0x0115,\r\n  \"ecandradeva\",\r\n  0x090d,\r\n  \"ecandragujarati\",\r\n  0x0a8d,\r\n  \"ecandravowelsigndeva\",\r\n  0x0945,\r\n  \"ecandravowelsigngujarati\",\r\n  0x0ac5,\r\n  \"ecaron\",\r\n  0x011b,\r\n  \"ecedillabreve\",\r\n  0x1e1d,\r\n  \"echarmenian\",\r\n  0x0565,\r\n  \"echyiwnarmenian\",\r\n  0x0587,\r\n  \"ecircle\",\r\n  0x24d4,\r\n  \"ecircumflex\",\r\n  0x00ea,\r\n  \"ecircumflexacute\",\r\n  0x1ebf,\r\n  \"ecircumflexbelow\",\r\n  0x1e19,\r\n  \"ecircumflexdotbelow\",\r\n  0x1ec7,\r\n  \"ecircumflexgrave\",\r\n  0x1ec1,\r\n  \"ecircumflexhookabove\",\r\n  0x1ec3,\r\n  \"ecircumflextilde\",\r\n  0x1ec5,\r\n  \"ecyrillic\",\r\n  0x0454,\r\n  \"edblgrave\",\r\n  0x0205,\r\n  \"edeva\",\r\n  0x090f,\r\n  \"edieresis\",\r\n  0x00eb,\r\n  \"edot\",\r\n  0x0117,\r\n  \"edotaccent\",\r\n  0x0117,\r\n  \"edotbelow\",\r\n  0x1eb9,\r\n  \"eegurmukhi\",\r\n  0x0a0f,\r\n  \"eematragurmukhi\",\r\n  0x0a47,\r\n  \"efcyrillic\",\r\n  0x0444,\r\n  \"egrave\",\r\n  0x00e8,\r\n  \"egujarati\",\r\n  0x0a8f,\r\n  \"eharmenian\",\r\n  0x0567,\r\n  \"ehbopomofo\",\r\n  0x311d,\r\n  \"ehiragana\",\r\n  0x3048,\r\n  \"ehookabove\",\r\n  0x1ebb,\r\n  \"eibopomofo\",\r\n  0x311f,\r\n  \"eight\",\r\n  0x0038,\r\n  \"eightarabic\",\r\n  0x0668,\r\n  \"eightbengali\",\r\n  0x09ee,\r\n  \"eightcircle\",\r\n  0x2467,\r\n  \"eightcircleinversesansserif\",\r\n  0x2791,\r\n  \"eightdeva\",\r\n  0x096e,\r\n  \"eighteencircle\",\r\n  0x2471,\r\n  \"eighteenparen\",\r\n  0x2485,\r\n  \"eighteenperiod\",\r\n  0x2499,\r\n  \"eightgujarati\",\r\n  0x0aee,\r\n  \"eightgurmukhi\",\r\n  0x0a6e,\r\n  \"eighthackarabic\",\r\n  0x0668,\r\n  \"eighthangzhou\",\r\n  0x3028,\r\n  \"eighthnotebeamed\",\r\n  0x266b,\r\n  \"eightideographicparen\",\r\n  0x3227,\r\n  \"eightinferior\",\r\n  0x2088,\r\n  \"eightmonospace\",\r\n  0xff18,\r\n  \"eightoldstyle\",\r\n  0xf738,\r\n  \"eightparen\",\r\n  0x247b,\r\n  \"eightperiod\",\r\n  0x248f,\r\n  \"eightpersian\",\r\n  0x06f8,\r\n  \"eightroman\",\r\n  0x2177,\r\n  \"eightsuperior\",\r\n  0x2078,\r\n  \"eightthai\",\r\n  0x0e58,\r\n  \"einvertedbreve\",\r\n  0x0207,\r\n  \"eiotifiedcyrillic\",\r\n  0x0465,\r\n  \"ekatakana\",\r\n  0x30a8,\r\n  \"ekatakanahalfwidth\",\r\n  0xff74,\r\n  \"ekonkargurmukhi\",\r\n  0x0a74,\r\n  \"ekorean\",\r\n  0x3154,\r\n  \"elcyrillic\",\r\n  0x043b,\r\n  \"element\",\r\n  0x2208,\r\n  \"elevencircle\",\r\n  0x246a,\r\n  \"elevenparen\",\r\n  0x247e,\r\n  \"elevenperiod\",\r\n  0x2492,\r\n  \"elevenroman\",\r\n  0x217a,\r\n  \"ellipsis\",\r\n  0x2026,\r\n  \"ellipsisvertical\",\r\n  0x22ee,\r\n  \"emacron\",\r\n  0x0113,\r\n  \"emacronacute\",\r\n  0x1e17,\r\n  \"emacrongrave\",\r\n  0x1e15,\r\n  \"emcyrillic\",\r\n  0x043c,\r\n  \"emdash\",\r\n  0x2014,\r\n  \"emdashvertical\",\r\n  0xfe31,\r\n  \"emonospace\",\r\n  0xff45,\r\n  \"emphasismarkarmenian\",\r\n  0x055b,\r\n  \"emptyset\",\r\n  0x2205,\r\n  \"enbopomofo\",\r\n  0x3123,\r\n  \"encyrillic\",\r\n  0x043d,\r\n  \"endash\",\r\n  0x2013,\r\n  \"endashvertical\",\r\n  0xfe32,\r\n  \"endescendercyrillic\",\r\n  0x04a3,\r\n  \"eng\",\r\n  0x014b,\r\n  \"engbopomofo\",\r\n  0x3125,\r\n  \"enghecyrillic\",\r\n  0x04a5,\r\n  \"enhookcyrillic\",\r\n  0x04c8,\r\n  \"enspace\",\r\n  0x2002,\r\n  \"eogonek\",\r\n  0x0119,\r\n  \"eokorean\",\r\n  0x3153,\r\n  \"eopen\",\r\n  0x025b,\r\n  \"eopenclosed\",\r\n  0x029a,\r\n  \"eopenreversed\",\r\n  0x025c,\r\n  \"eopenreversedclosed\",\r\n  0x025e,\r\n  \"eopenreversedhook\",\r\n  0x025d,\r\n  \"eparen\",\r\n  0x24a0,\r\n  \"epsilon\",\r\n  0x03b5,\r\n  \"epsilontonos\",\r\n  0x03ad,\r\n  \"equal\",\r\n  0x003d,\r\n  \"equalmonospace\",\r\n  0xff1d,\r\n  \"equalsmall\",\r\n  0xfe66,\r\n  \"equalsuperior\",\r\n  0x207c,\r\n  \"equivalence\",\r\n  0x2261,\r\n  \"erbopomofo\",\r\n  0x3126,\r\n  \"ercyrillic\",\r\n  0x0440,\r\n  \"ereversed\",\r\n  0x0258,\r\n  \"ereversedcyrillic\",\r\n  0x044d,\r\n  \"escyrillic\",\r\n  0x0441,\r\n  \"esdescendercyrillic\",\r\n  0x04ab,\r\n  \"esh\",\r\n  0x0283,\r\n  \"eshcurl\",\r\n  0x0286,\r\n  \"eshortdeva\",\r\n  0x090e,\r\n  \"eshortvowelsigndeva\",\r\n  0x0946,\r\n  \"eshreversedloop\",\r\n  0x01aa,\r\n  \"eshsquatreversed\",\r\n  0x0285,\r\n  \"esmallhiragana\",\r\n  0x3047,\r\n  \"esmallkatakana\",\r\n  0x30a7,\r\n  \"esmallkatakanahalfwidth\",\r\n  0xff6a,\r\n  \"estimated\",\r\n  0x212e,\r\n  \"esuperior\",\r\n  0xf6ec,\r\n  \"eta\",\r\n  0x03b7,\r\n  \"etarmenian\",\r\n  0x0568,\r\n  \"etatonos\",\r\n  0x03ae,\r\n  \"eth\",\r\n  0x00f0,\r\n  \"etilde\",\r\n  0x1ebd,\r\n  \"etildebelow\",\r\n  0x1e1b,\r\n  \"etnahtafoukhhebrew\",\r\n  0x0591,\r\n  \"etnahtafoukhlefthebrew\",\r\n  0x0591,\r\n  \"etnahtahebrew\",\r\n  0x0591,\r\n  \"etnahtalefthebrew\",\r\n  0x0591,\r\n  \"eturned\",\r\n  0x01dd,\r\n  \"eukorean\",\r\n  0x3161,\r\n  \"euro\",\r\n  0x20ac,\r\n  \"evowelsignbengali\",\r\n  0x09c7,\r\n  \"evowelsigndeva\",\r\n  0x0947,\r\n  \"evowelsigngujarati\",\r\n  0x0ac7,\r\n  \"exclam\",\r\n  0x0021,\r\n  \"exclamarmenian\",\r\n  0x055c,\r\n  \"exclamdbl\",\r\n  0x203c,\r\n  \"exclamdown\",\r\n  0x00a1,\r\n  \"exclamdownsmall\",\r\n  0xf7a1,\r\n  \"exclammonospace\",\r\n  0xff01,\r\n  \"exclamsmall\",\r\n  0xf721,\r\n  \"existential\",\r\n  0x2203,\r\n  \"ezh\",\r\n  0x0292,\r\n  \"ezhcaron\",\r\n  0x01ef,\r\n  \"ezhcurl\",\r\n  0x0293,\r\n  \"ezhreversed\",\r\n  0x01b9,\r\n  \"ezhtail\",\r\n  0x01ba,\r\n  \"f\",\r\n  0x0066,\r\n  \"fadeva\",\r\n  0x095e,\r\n  \"fagurmukhi\",\r\n  0x0a5e,\r\n  \"fahrenheit\",\r\n  0x2109,\r\n  \"fathaarabic\",\r\n  0x064e,\r\n  \"fathalowarabic\",\r\n  0x064e,\r\n  \"fathatanarabic\",\r\n  0x064b,\r\n  \"fbopomofo\",\r\n  0x3108,\r\n  \"fcircle\",\r\n  0x24d5,\r\n  \"fdotaccent\",\r\n  0x1e1f,\r\n  \"feharabic\",\r\n  0x0641,\r\n  \"feharmenian\",\r\n  0x0586,\r\n  \"fehfinalarabic\",\r\n  0xfed2,\r\n  \"fehinitialarabic\",\r\n  0xfed3,\r\n  \"fehmedialarabic\",\r\n  0xfed4,\r\n  \"feicoptic\",\r\n  0x03e5,\r\n  \"female\",\r\n  0x2640,\r\n  \"ff\",\r\n  0xfb00,\r\n  \"f_f\",\r\n  0xfb00,\r\n  \"ffi\",\r\n  0xfb03,\r\n  \"ffl\",\r\n  0xfb04,\r\n  \"fi\",\r\n  0xfb01,\r\n  \"fifteencircle\",\r\n  0x246e,\r\n  \"fifteenparen\",\r\n  0x2482,\r\n  \"fifteenperiod\",\r\n  0x2496,\r\n  \"figuredash\",\r\n  0x2012,\r\n  \"filledbox\",\r\n  0x25a0,\r\n  \"filledrect\",\r\n  0x25ac,\r\n  \"finalkaf\",\r\n  0x05da,\r\n  \"finalkafdagesh\",\r\n  0xfb3a,\r\n  \"finalkafdageshhebrew\",\r\n  0xfb3a,\r\n  \"finalkafhebrew\",\r\n  0x05da,\r\n  \"finalmem\",\r\n  0x05dd,\r\n  \"finalmemhebrew\",\r\n  0x05dd,\r\n  \"finalnun\",\r\n  0x05df,\r\n  \"finalnunhebrew\",\r\n  0x05df,\r\n  \"finalpe\",\r\n  0x05e3,\r\n  \"finalpehebrew\",\r\n  0x05e3,\r\n  \"finaltsadi\",\r\n  0x05e5,\r\n  \"finaltsadihebrew\",\r\n  0x05e5,\r\n  \"firsttonechinese\",\r\n  0x02c9,\r\n  \"fisheye\",\r\n  0x25c9,\r\n  \"fitacyrillic\",\r\n  0x0473,\r\n  \"five\",\r\n  0x0035,\r\n  \"fivearabic\",\r\n  0x0665,\r\n  \"fivebengali\",\r\n  0x09eb,\r\n  \"fivecircle\",\r\n  0x2464,\r\n  \"fivecircleinversesansserif\",\r\n  0x278e,\r\n  \"fivedeva\",\r\n  0x096b,\r\n  \"fiveeighths\",\r\n  0x215d,\r\n  \"fivegujarati\",\r\n  0x0aeb,\r\n  \"fivegurmukhi\",\r\n  0x0a6b,\r\n  \"fivehackarabic\",\r\n  0x0665,\r\n  \"fivehangzhou\",\r\n  0x3025,\r\n  \"fiveideographicparen\",\r\n  0x3224,\r\n  \"fiveinferior\",\r\n  0x2085,\r\n  \"fivemonospace\",\r\n  0xff15,\r\n  \"fiveoldstyle\",\r\n  0xf735,\r\n  \"fiveparen\",\r\n  0x2478,\r\n  \"fiveperiod\",\r\n  0x248c,\r\n  \"fivepersian\",\r\n  0x06f5,\r\n  \"fiveroman\",\r\n  0x2174,\r\n  \"fivesuperior\",\r\n  0x2075,\r\n  \"fivethai\",\r\n  0x0e55,\r\n  \"fl\",\r\n  0xfb02,\r\n  \"florin\",\r\n  0x0192,\r\n  \"fmonospace\",\r\n  0xff46,\r\n  \"fmsquare\",\r\n  0x3399,\r\n  \"fofanthai\",\r\n  0x0e1f,\r\n  \"fofathai\",\r\n  0x0e1d,\r\n  \"fongmanthai\",\r\n  0x0e4f,\r\n  \"forall\",\r\n  0x2200,\r\n  \"four\",\r\n  0x0034,\r\n  \"fourarabic\",\r\n  0x0664,\r\n  \"fourbengali\",\r\n  0x09ea,\r\n  \"fourcircle\",\r\n  0x2463,\r\n  \"fourcircleinversesansserif\",\r\n  0x278d,\r\n  \"fourdeva\",\r\n  0x096a,\r\n  \"fourgujarati\",\r\n  0x0aea,\r\n  \"fourgurmukhi\",\r\n  0x0a6a,\r\n  \"fourhackarabic\",\r\n  0x0664,\r\n  \"fourhangzhou\",\r\n  0x3024,\r\n  \"fourideographicparen\",\r\n  0x3223,\r\n  \"fourinferior\",\r\n  0x2084,\r\n  \"fourmonospace\",\r\n  0xff14,\r\n  \"fournumeratorbengali\",\r\n  0x09f7,\r\n  \"fouroldstyle\",\r\n  0xf734,\r\n  \"fourparen\",\r\n  0x2477,\r\n  \"fourperiod\",\r\n  0x248b,\r\n  \"fourpersian\",\r\n  0x06f4,\r\n  \"fourroman\",\r\n  0x2173,\r\n  \"foursuperior\",\r\n  0x2074,\r\n  \"fourteencircle\",\r\n  0x246d,\r\n  \"fourteenparen\",\r\n  0x2481,\r\n  \"fourteenperiod\",\r\n  0x2495,\r\n  \"fourthai\",\r\n  0x0e54,\r\n  \"fourthtonechinese\",\r\n  0x02cb,\r\n  \"fparen\",\r\n  0x24a1,\r\n  \"fraction\",\r\n  0x2044,\r\n  \"franc\",\r\n  0x20a3,\r\n  \"g\",\r\n  0x0067,\r\n  \"gabengali\",\r\n  0x0997,\r\n  \"gacute\",\r\n  0x01f5,\r\n  \"gadeva\",\r\n  0x0917,\r\n  \"gafarabic\",\r\n  0x06af,\r\n  \"gaffinalarabic\",\r\n  0xfb93,\r\n  \"gafinitialarabic\",\r\n  0xfb94,\r\n  \"gafmedialarabic\",\r\n  0xfb95,\r\n  \"gagujarati\",\r\n  0x0a97,\r\n  \"gagurmukhi\",\r\n  0x0a17,\r\n  \"gahiragana\",\r\n  0x304c,\r\n  \"gakatakana\",\r\n  0x30ac,\r\n  \"gamma\",\r\n  0x03b3,\r\n  \"gammalatinsmall\",\r\n  0x0263,\r\n  \"gammasuperior\",\r\n  0x02e0,\r\n  \"gangiacoptic\",\r\n  0x03eb,\r\n  \"gbopomofo\",\r\n  0x310d,\r\n  \"gbreve\",\r\n  0x011f,\r\n  \"gcaron\",\r\n  0x01e7,\r\n  \"gcedilla\",\r\n  0x0123,\r\n  \"gcircle\",\r\n  0x24d6,\r\n  \"gcircumflex\",\r\n  0x011d,\r\n  \"gcommaaccent\",\r\n  0x0123,\r\n  \"gdot\",\r\n  0x0121,\r\n  \"gdotaccent\",\r\n  0x0121,\r\n  \"gecyrillic\",\r\n  0x0433,\r\n  \"gehiragana\",\r\n  0x3052,\r\n  \"gekatakana\",\r\n  0x30b2,\r\n  \"geometricallyequal\",\r\n  0x2251,\r\n  \"gereshaccenthebrew\",\r\n  0x059c,\r\n  \"gereshhebrew\",\r\n  0x05f3,\r\n  \"gereshmuqdamhebrew\",\r\n  0x059d,\r\n  \"germandbls\",\r\n  0x00df,\r\n  \"gershayimaccenthebrew\",\r\n  0x059e,\r\n  \"gershayimhebrew\",\r\n  0x05f4,\r\n  \"getamark\",\r\n  0x3013,\r\n  \"ghabengali\",\r\n  0x0998,\r\n  \"ghadarmenian\",\r\n  0x0572,\r\n  \"ghadeva\",\r\n  0x0918,\r\n  \"ghagujarati\",\r\n  0x0a98,\r\n  \"ghagurmukhi\",\r\n  0x0a18,\r\n  \"ghainarabic\",\r\n  0x063a,\r\n  \"ghainfinalarabic\",\r\n  0xfece,\r\n  \"ghaininitialarabic\",\r\n  0xfecf,\r\n  \"ghainmedialarabic\",\r\n  0xfed0,\r\n  \"ghemiddlehookcyrillic\",\r\n  0x0495,\r\n  \"ghestrokecyrillic\",\r\n  0x0493,\r\n  \"gheupturncyrillic\",\r\n  0x0491,\r\n  \"ghhadeva\",\r\n  0x095a,\r\n  \"ghhagurmukhi\",\r\n  0x0a5a,\r\n  \"ghook\",\r\n  0x0260,\r\n  \"ghzsquare\",\r\n  0x3393,\r\n  \"gihiragana\",\r\n  0x304e,\r\n  \"gikatakana\",\r\n  0x30ae,\r\n  \"gimarmenian\",\r\n  0x0563,\r\n  \"gimel\",\r\n  0x05d2,\r\n  \"gimeldagesh\",\r\n  0xfb32,\r\n  \"gimeldageshhebrew\",\r\n  0xfb32,\r\n  \"gimelhebrew\",\r\n  0x05d2,\r\n  \"gjecyrillic\",\r\n  0x0453,\r\n  \"glottalinvertedstroke\",\r\n  0x01be,\r\n  \"glottalstop\",\r\n  0x0294,\r\n  \"glottalstopinverted\",\r\n  0x0296,\r\n  \"glottalstopmod\",\r\n  0x02c0,\r\n  \"glottalstopreversed\",\r\n  0x0295,\r\n  \"glottalstopreversedmod\",\r\n  0x02c1,\r\n  \"glottalstopreversedsuperior\",\r\n  0x02e4,\r\n  \"glottalstopstroke\",\r\n  0x02a1,\r\n  \"glottalstopstrokereversed\",\r\n  0x02a2,\r\n  \"gmacron\",\r\n  0x1e21,\r\n  \"gmonospace\",\r\n  0xff47,\r\n  \"gohiragana\",\r\n  0x3054,\r\n  \"gokatakana\",\r\n  0x30b4,\r\n  \"gparen\",\r\n  0x24a2,\r\n  \"gpasquare\",\r\n  0x33ac,\r\n  \"gradient\",\r\n  0x2207,\r\n  \"grave\",\r\n  0x0060,\r\n  \"gravebelowcmb\",\r\n  0x0316,\r\n  \"gravecmb\",\r\n  0x0300,\r\n  \"gravecomb\",\r\n  0x0300,\r\n  \"gravedeva\",\r\n  0x0953,\r\n  \"gravelowmod\",\r\n  0x02ce,\r\n  \"gravemonospace\",\r\n  0xff40,\r\n  \"gravetonecmb\",\r\n  0x0340,\r\n  \"greater\",\r\n  0x003e,\r\n  \"greaterequal\",\r\n  0x2265,\r\n  \"greaterequalorless\",\r\n  0x22db,\r\n  \"greatermonospace\",\r\n  0xff1e,\r\n  \"greaterorequivalent\",\r\n  0x2273,\r\n  \"greaterorless\",\r\n  0x2277,\r\n  \"greateroverequal\",\r\n  0x2267,\r\n  \"greatersmall\",\r\n  0xfe65,\r\n  \"gscript\",\r\n  0x0261,\r\n  \"gstroke\",\r\n  0x01e5,\r\n  \"guhiragana\",\r\n  0x3050,\r\n  \"guillemotleft\",\r\n  0x00ab,\r\n  \"guillemotright\",\r\n  0x00bb,\r\n  \"guilsinglleft\",\r\n  0x2039,\r\n  \"guilsinglright\",\r\n  0x203a,\r\n  \"gukatakana\",\r\n  0x30b0,\r\n  \"guramusquare\",\r\n  0x3318,\r\n  \"gysquare\",\r\n  0x33c9,\r\n  \"h\",\r\n  0x0068,\r\n  \"haabkhasiancyrillic\",\r\n  0x04a9,\r\n  \"haaltonearabic\",\r\n  0x06c1,\r\n  \"habengali\",\r\n  0x09b9,\r\n  \"hadescendercyrillic\",\r\n  0x04b3,\r\n  \"hadeva\",\r\n  0x0939,\r\n  \"hagujarati\",\r\n  0x0ab9,\r\n  \"hagurmukhi\",\r\n  0x0a39,\r\n  \"haharabic\",\r\n  0x062d,\r\n  \"hahfinalarabic\",\r\n  0xfea2,\r\n  \"hahinitialarabic\",\r\n  0xfea3,\r\n  \"hahiragana\",\r\n  0x306f,\r\n  \"hahmedialarabic\",\r\n  0xfea4,\r\n  \"haitusquare\",\r\n  0x332a,\r\n  \"hakatakana\",\r\n  0x30cf,\r\n  \"hakatakanahalfwidth\",\r\n  0xff8a,\r\n  \"halantgurmukhi\",\r\n  0x0a4d,\r\n  \"hamzaarabic\",\r\n  0x0621,\r\n  \"hamzalowarabic\",\r\n  0x0621,\r\n  \"hangulfiller\",\r\n  0x3164,\r\n  \"hardsigncyrillic\",\r\n  0x044a,\r\n  \"harpoonleftbarbup\",\r\n  0x21bc,\r\n  \"harpoonrightbarbup\",\r\n  0x21c0,\r\n  \"hasquare\",\r\n  0x33ca,\r\n  \"hatafpatah\",\r\n  0x05b2,\r\n  \"hatafpatah16\",\r\n  0x05b2,\r\n  \"hatafpatah23\",\r\n  0x05b2,\r\n  \"hatafpatah2f\",\r\n  0x05b2,\r\n  \"hatafpatahhebrew\",\r\n  0x05b2,\r\n  \"hatafpatahnarrowhebrew\",\r\n  0x05b2,\r\n  \"hatafpatahquarterhebrew\",\r\n  0x05b2,\r\n  \"hatafpatahwidehebrew\",\r\n  0x05b2,\r\n  \"hatafqamats\",\r\n  0x05b3,\r\n  \"hatafqamats1b\",\r\n  0x05b3,\r\n  \"hatafqamats28\",\r\n  0x05b3,\r\n  \"hatafqamats34\",\r\n  0x05b3,\r\n  \"hatafqamatshebrew\",\r\n  0x05b3,\r\n  \"hatafqamatsnarrowhebrew\",\r\n  0x05b3,\r\n  \"hatafqamatsquarterhebrew\",\r\n  0x05b3,\r\n  \"hatafqamatswidehebrew\",\r\n  0x05b3,\r\n  \"hatafsegol\",\r\n  0x05b1,\r\n  \"hatafsegol17\",\r\n  0x05b1,\r\n  \"hatafsegol24\",\r\n  0x05b1,\r\n  \"hatafsegol30\",\r\n  0x05b1,\r\n  \"hatafsegolhebrew\",\r\n  0x05b1,\r\n  \"hatafsegolnarrowhebrew\",\r\n  0x05b1,\r\n  \"hatafsegolquarterhebrew\",\r\n  0x05b1,\r\n  \"hatafsegolwidehebrew\",\r\n  0x05b1,\r\n  \"hbar\",\r\n  0x0127,\r\n  \"hbopomofo\",\r\n  0x310f,\r\n  \"hbrevebelow\",\r\n  0x1e2b,\r\n  \"hcedilla\",\r\n  0x1e29,\r\n  \"hcircle\",\r\n  0x24d7,\r\n  \"hcircumflex\",\r\n  0x0125,\r\n  \"hdieresis\",\r\n  0x1e27,\r\n  \"hdotaccent\",\r\n  0x1e23,\r\n  \"hdotbelow\",\r\n  0x1e25,\r\n  \"he\",\r\n  0x05d4,\r\n  \"heart\",\r\n  0x2665,\r\n  \"heartsuitblack\",\r\n  0x2665,\r\n  \"heartsuitwhite\",\r\n  0x2661,\r\n  \"hedagesh\",\r\n  0xfb34,\r\n  \"hedageshhebrew\",\r\n  0xfb34,\r\n  \"hehaltonearabic\",\r\n  0x06c1,\r\n  \"heharabic\",\r\n  0x0647,\r\n  \"hehebrew\",\r\n  0x05d4,\r\n  \"hehfinalaltonearabic\",\r\n  0xfba7,\r\n  \"hehfinalalttwoarabic\",\r\n  0xfeea,\r\n  \"hehfinalarabic\",\r\n  0xfeea,\r\n  \"hehhamzaabovefinalarabic\",\r\n  0xfba5,\r\n  \"hehhamzaaboveisolatedarabic\",\r\n  0xfba4,\r\n  \"hehinitialaltonearabic\",\r\n  0xfba8,\r\n  \"hehinitialarabic\",\r\n  0xfeeb,\r\n  \"hehiragana\",\r\n  0x3078,\r\n  \"hehmedialaltonearabic\",\r\n  0xfba9,\r\n  \"hehmedialarabic\",\r\n  0xfeec,\r\n  \"heiseierasquare\",\r\n  0x337b,\r\n  \"hekatakana\",\r\n  0x30d8,\r\n  \"hekatakanahalfwidth\",\r\n  0xff8d,\r\n  \"hekutaarusquare\",\r\n  0x3336,\r\n  \"henghook\",\r\n  0x0267,\r\n  \"herutusquare\",\r\n  0x3339,\r\n  \"het\",\r\n  0x05d7,\r\n  \"hethebrew\",\r\n  0x05d7,\r\n  \"hhook\",\r\n  0x0266,\r\n  \"hhooksuperior\",\r\n  0x02b1,\r\n  \"hieuhacirclekorean\",\r\n  0x327b,\r\n  \"hieuhaparenkorean\",\r\n  0x321b,\r\n  \"hieuhcirclekorean\",\r\n  0x326d,\r\n  \"hieuhkorean\",\r\n  0x314e,\r\n  \"hieuhparenkorean\",\r\n  0x320d,\r\n  \"hihiragana\",\r\n  0x3072,\r\n  \"hikatakana\",\r\n  0x30d2,\r\n  \"hikatakanahalfwidth\",\r\n  0xff8b,\r\n  \"hiriq\",\r\n  0x05b4,\r\n  \"hiriq14\",\r\n  0x05b4,\r\n  \"hiriq21\",\r\n  0x05b4,\r\n  \"hiriq2d\",\r\n  0x05b4,\r\n  \"hiriqhebrew\",\r\n  0x05b4,\r\n  \"hiriqnarrowhebrew\",\r\n  0x05b4,\r\n  \"hiriqquarterhebrew\",\r\n  0x05b4,\r\n  \"hiriqwidehebrew\",\r\n  0x05b4,\r\n  \"hlinebelow\",\r\n  0x1e96,\r\n  \"hmonospace\",\r\n  0xff48,\r\n  \"hoarmenian\",\r\n  0x0570,\r\n  \"hohipthai\",\r\n  0x0e2b,\r\n  \"hohiragana\",\r\n  0x307b,\r\n  \"hokatakana\",\r\n  0x30db,\r\n  \"hokatakanahalfwidth\",\r\n  0xff8e,\r\n  \"holam\",\r\n  0x05b9,\r\n  \"holam19\",\r\n  0x05b9,\r\n  \"holam26\",\r\n  0x05b9,\r\n  \"holam32\",\r\n  0x05b9,\r\n  \"holamhebrew\",\r\n  0x05b9,\r\n  \"holamnarrowhebrew\",\r\n  0x05b9,\r\n  \"holamquarterhebrew\",\r\n  0x05b9,\r\n  \"holamwidehebrew\",\r\n  0x05b9,\r\n  \"honokhukthai\",\r\n  0x0e2e,\r\n  \"hookabovecomb\",\r\n  0x0309,\r\n  \"hookcmb\",\r\n  0x0309,\r\n  \"hookpalatalizedbelowcmb\",\r\n  0x0321,\r\n  \"hookretroflexbelowcmb\",\r\n  0x0322,\r\n  \"hoonsquare\",\r\n  0x3342,\r\n  \"horicoptic\",\r\n  0x03e9,\r\n  \"horizontalbar\",\r\n  0x2015,\r\n  \"horncmb\",\r\n  0x031b,\r\n  \"hotsprings\",\r\n  0x2668,\r\n  \"house\",\r\n  0x2302,\r\n  \"hparen\",\r\n  0x24a3,\r\n  \"hsuperior\",\r\n  0x02b0,\r\n  \"hturned\",\r\n  0x0265,\r\n  \"huhiragana\",\r\n  0x3075,\r\n  \"huiitosquare\",\r\n  0x3333,\r\n  \"hukatakana\",\r\n  0x30d5,\r\n  \"hukatakanahalfwidth\",\r\n  0xff8c,\r\n  \"hungarumlaut\",\r\n  0x02dd,\r\n  \"hungarumlautcmb\",\r\n  0x030b,\r\n  \"hv\",\r\n  0x0195,\r\n  \"hyphen\",\r\n  0x002d,\r\n  \"hypheninferior\",\r\n  0xf6e5,\r\n  \"hyphenmonospace\",\r\n  0xff0d,\r\n  \"hyphensmall\",\r\n  0xfe63,\r\n  \"hyphensuperior\",\r\n  0xf6e6,\r\n  \"hyphentwo\",\r\n  0x2010,\r\n  \"i\",\r\n  0x0069,\r\n  \"iacute\",\r\n  0x00ed,\r\n  \"iacyrillic\",\r\n  0x044f,\r\n  \"ibengali\",\r\n  0x0987,\r\n  \"ibopomofo\",\r\n  0x3127,\r\n  \"ibreve\",\r\n  0x012d,\r\n  \"icaron\",\r\n  0x01d0,\r\n  \"icircle\",\r\n  0x24d8,\r\n  \"icircumflex\",\r\n  0x00ee,\r\n  \"icyrillic\",\r\n  0x0456,\r\n  \"idblgrave\",\r\n  0x0209,\r\n  \"ideographearthcircle\",\r\n  0x328f,\r\n  \"ideographfirecircle\",\r\n  0x328b,\r\n  \"ideographicallianceparen\",\r\n  0x323f,\r\n  \"ideographiccallparen\",\r\n  0x323a,\r\n  \"ideographiccentrecircle\",\r\n  0x32a5,\r\n  \"ideographicclose\",\r\n  0x3006,\r\n  \"ideographiccomma\",\r\n  0x3001,\r\n  \"ideographiccommaleft\",\r\n  0xff64,\r\n  \"ideographiccongratulationparen\",\r\n  0x3237,\r\n  \"ideographiccorrectcircle\",\r\n  0x32a3,\r\n  \"ideographicearthparen\",\r\n  0x322f,\r\n  \"ideographicenterpriseparen\",\r\n  0x323d,\r\n  \"ideographicexcellentcircle\",\r\n  0x329d,\r\n  \"ideographicfestivalparen\",\r\n  0x3240,\r\n  \"ideographicfinancialcircle\",\r\n  0x3296,\r\n  \"ideographicfinancialparen\",\r\n  0x3236,\r\n  \"ideographicfireparen\",\r\n  0x322b,\r\n  \"ideographichaveparen\",\r\n  0x3232,\r\n  \"ideographichighcircle\",\r\n  0x32a4,\r\n  \"ideographiciterationmark\",\r\n  0x3005,\r\n  \"ideographiclaborcircle\",\r\n  0x3298,\r\n  \"ideographiclaborparen\",\r\n  0x3238,\r\n  \"ideographicleftcircle\",\r\n  0x32a7,\r\n  \"ideographiclowcircle\",\r\n  0x32a6,\r\n  \"ideographicmedicinecircle\",\r\n  0x32a9,\r\n  \"ideographicmetalparen\",\r\n  0x322e,\r\n  \"ideographicmoonparen\",\r\n  0x322a,\r\n  \"ideographicnameparen\",\r\n  0x3234,\r\n  \"ideographicperiod\",\r\n  0x3002,\r\n  \"ideographicprintcircle\",\r\n  0x329e,\r\n  \"ideographicreachparen\",\r\n  0x3243,\r\n  \"ideographicrepresentparen\",\r\n  0x3239,\r\n  \"ideographicresourceparen\",\r\n  0x323e,\r\n  \"ideographicrightcircle\",\r\n  0x32a8,\r\n  \"ideographicsecretcircle\",\r\n  0x3299,\r\n  \"ideographicselfparen\",\r\n  0x3242,\r\n  \"ideographicsocietyparen\",\r\n  0x3233,\r\n  \"ideographicspace\",\r\n  0x3000,\r\n  \"ideographicspecialparen\",\r\n  0x3235,\r\n  \"ideographicstockparen\",\r\n  0x3231,\r\n  \"ideographicstudyparen\",\r\n  0x323b,\r\n  \"ideographicsunparen\",\r\n  0x3230,\r\n  \"ideographicsuperviseparen\",\r\n  0x323c,\r\n  \"ideographicwaterparen\",\r\n  0x322c,\r\n  \"ideographicwoodparen\",\r\n  0x322d,\r\n  \"ideographiczero\",\r\n  0x3007,\r\n  \"ideographmetalcircle\",\r\n  0x328e,\r\n  \"ideographmooncircle\",\r\n  0x328a,\r\n  \"ideographnamecircle\",\r\n  0x3294,\r\n  \"ideographsuncircle\",\r\n  0x3290,\r\n  \"ideographwatercircle\",\r\n  0x328c,\r\n  \"ideographwoodcircle\",\r\n  0x328d,\r\n  \"ideva\",\r\n  0x0907,\r\n  \"idieresis\",\r\n  0x00ef,\r\n  \"idieresisacute\",\r\n  0x1e2f,\r\n  \"idieresiscyrillic\",\r\n  0x04e5,\r\n  \"idotbelow\",\r\n  0x1ecb,\r\n  \"iebrevecyrillic\",\r\n  0x04d7,\r\n  \"iecyrillic\",\r\n  0x0435,\r\n  \"ieungacirclekorean\",\r\n  0x3275,\r\n  \"ieungaparenkorean\",\r\n  0x3215,\r\n  \"ieungcirclekorean\",\r\n  0x3267,\r\n  \"ieungkorean\",\r\n  0x3147,\r\n  \"ieungparenkorean\",\r\n  0x3207,\r\n  \"igrave\",\r\n  0x00ec,\r\n  \"igujarati\",\r\n  0x0a87,\r\n  \"igurmukhi\",\r\n  0x0a07,\r\n  \"ihiragana\",\r\n  0x3044,\r\n  \"ihookabove\",\r\n  0x1ec9,\r\n  \"iibengali\",\r\n  0x0988,\r\n  \"iicyrillic\",\r\n  0x0438,\r\n  \"iideva\",\r\n  0x0908,\r\n  \"iigujarati\",\r\n  0x0a88,\r\n  \"iigurmukhi\",\r\n  0x0a08,\r\n  \"iimatragurmukhi\",\r\n  0x0a40,\r\n  \"iinvertedbreve\",\r\n  0x020b,\r\n  \"iishortcyrillic\",\r\n  0x0439,\r\n  \"iivowelsignbengali\",\r\n  0x09c0,\r\n  \"iivowelsigndeva\",\r\n  0x0940,\r\n  \"iivowelsigngujarati\",\r\n  0x0ac0,\r\n  \"ij\",\r\n  0x0133,\r\n  \"ikatakana\",\r\n  0x30a4,\r\n  \"ikatakanahalfwidth\",\r\n  0xff72,\r\n  \"ikorean\",\r\n  0x3163,\r\n  \"ilde\",\r\n  0x02dc,\r\n  \"iluyhebrew\",\r\n  0x05ac,\r\n  \"imacron\",\r\n  0x012b,\r\n  \"imacroncyrillic\",\r\n  0x04e3,\r\n  \"imageorapproximatelyequal\",\r\n  0x2253,\r\n  \"imatragurmukhi\",\r\n  0x0a3f,\r\n  \"imonospace\",\r\n  0xff49,\r\n  \"increment\",\r\n  0x2206,\r\n  \"infinity\",\r\n  0x221e,\r\n  \"iniarmenian\",\r\n  0x056b,\r\n  \"integral\",\r\n  0x222b,\r\n  \"integralbottom\",\r\n  0x2321,\r\n  \"integralbt\",\r\n  0x2321,\r\n  \"integralex\",\r\n  0xf8f5,\r\n  \"integraltop\",\r\n  0x2320,\r\n  \"integraltp\",\r\n  0x2320,\r\n  \"intersection\",\r\n  0x2229,\r\n  \"intisquare\",\r\n  0x3305,\r\n  \"invbullet\",\r\n  0x25d8,\r\n  \"invcircle\",\r\n  0x25d9,\r\n  \"invsmileface\",\r\n  0x263b,\r\n  \"iocyrillic\",\r\n  0x0451,\r\n  \"iogonek\",\r\n  0x012f,\r\n  \"iota\",\r\n  0x03b9,\r\n  \"iotadieresis\",\r\n  0x03ca,\r\n  \"iotadieresistonos\",\r\n  0x0390,\r\n  \"iotalatin\",\r\n  0x0269,\r\n  \"iotatonos\",\r\n  0x03af,\r\n  \"iparen\",\r\n  0x24a4,\r\n  \"irigurmukhi\",\r\n  0x0a72,\r\n  \"ismallhiragana\",\r\n  0x3043,\r\n  \"ismallkatakana\",\r\n  0x30a3,\r\n  \"ismallkatakanahalfwidth\",\r\n  0xff68,\r\n  \"issharbengali\",\r\n  0x09fa,\r\n  \"istroke\",\r\n  0x0268,\r\n  \"isuperior\",\r\n  0xf6ed,\r\n  \"iterationhiragana\",\r\n  0x309d,\r\n  \"iterationkatakana\",\r\n  0x30fd,\r\n  \"itilde\",\r\n  0x0129,\r\n  \"itildebelow\",\r\n  0x1e2d,\r\n  \"iubopomofo\",\r\n  0x3129,\r\n  \"iucyrillic\",\r\n  0x044e,\r\n  \"ivowelsignbengali\",\r\n  0x09bf,\r\n  \"ivowelsigndeva\",\r\n  0x093f,\r\n  \"ivowelsigngujarati\",\r\n  0x0abf,\r\n  \"izhitsacyrillic\",\r\n  0x0475,\r\n  \"izhitsadblgravecyrillic\",\r\n  0x0477,\r\n  \"j\",\r\n  0x006a,\r\n  \"jaarmenian\",\r\n  0x0571,\r\n  \"jabengali\",\r\n  0x099c,\r\n  \"jadeva\",\r\n  0x091c,\r\n  \"jagujarati\",\r\n  0x0a9c,\r\n  \"jagurmukhi\",\r\n  0x0a1c,\r\n  \"jbopomofo\",\r\n  0x3110,\r\n  \"jcaron\",\r\n  0x01f0,\r\n  \"jcircle\",\r\n  0x24d9,\r\n  \"jcircumflex\",\r\n  0x0135,\r\n  \"jcrossedtail\",\r\n  0x029d,\r\n  \"jdotlessstroke\",\r\n  0x025f,\r\n  \"jecyrillic\",\r\n  0x0458,\r\n  \"jeemarabic\",\r\n  0x062c,\r\n  \"jeemfinalarabic\",\r\n  0xfe9e,\r\n  \"jeeminitialarabic\",\r\n  0xfe9f,\r\n  \"jeemmedialarabic\",\r\n  0xfea0,\r\n  \"jeharabic\",\r\n  0x0698,\r\n  \"jehfinalarabic\",\r\n  0xfb8b,\r\n  \"jhabengali\",\r\n  0x099d,\r\n  \"jhadeva\",\r\n  0x091d,\r\n  \"jhagujarati\",\r\n  0x0a9d,\r\n  \"jhagurmukhi\",\r\n  0x0a1d,\r\n  \"jheharmenian\",\r\n  0x057b,\r\n  \"jis\",\r\n  0x3004,\r\n  \"jmonospace\",\r\n  0xff4a,\r\n  \"jparen\",\r\n  0x24a5,\r\n  \"jsuperior\",\r\n  0x02b2,\r\n  \"k\",\r\n  0x006b,\r\n  \"kabashkircyrillic\",\r\n  0x04a1,\r\n  \"kabengali\",\r\n  0x0995,\r\n  \"kacute\",\r\n  0x1e31,\r\n  \"kacyrillic\",\r\n  0x043a,\r\n  \"kadescendercyrillic\",\r\n  0x049b,\r\n  \"kadeva\",\r\n  0x0915,\r\n  \"kaf\",\r\n  0x05db,\r\n  \"kafarabic\",\r\n  0x0643,\r\n  \"kafdagesh\",\r\n  0xfb3b,\r\n  \"kafdageshhebrew\",\r\n  0xfb3b,\r\n  \"kaffinalarabic\",\r\n  0xfeda,\r\n  \"kafhebrew\",\r\n  0x05db,\r\n  \"kafinitialarabic\",\r\n  0xfedb,\r\n  \"kafmedialarabic\",\r\n  0xfedc,\r\n  \"kafrafehebrew\",\r\n  0xfb4d,\r\n  \"kagujarati\",\r\n  0x0a95,\r\n  \"kagurmukhi\",\r\n  0x0a15,\r\n  \"kahiragana\",\r\n  0x304b,\r\n  \"kahookcyrillic\",\r\n  0x04c4,\r\n  \"kakatakana\",\r\n  0x30ab,\r\n  \"kakatakanahalfwidth\",\r\n  0xff76,\r\n  \"kappa\",\r\n  0x03ba,\r\n  \"kappasymbolgreek\",\r\n  0x03f0,\r\n  \"kapyeounmieumkorean\",\r\n  0x3171,\r\n  \"kapyeounphieuphkorean\",\r\n  0x3184,\r\n  \"kapyeounpieupkorean\",\r\n  0x3178,\r\n  \"kapyeounssangpieupkorean\",\r\n  0x3179,\r\n  \"karoriisquare\",\r\n  0x330d,\r\n  \"kashidaautoarabic\",\r\n  0x0640,\r\n  \"kashidaautonosidebearingarabic\",\r\n  0x0640,\r\n  \"kasmallkatakana\",\r\n  0x30f5,\r\n  \"kasquare\",\r\n  0x3384,\r\n  \"kasraarabic\",\r\n  0x0650,\r\n  \"kasratanarabic\",\r\n  0x064d,\r\n  \"kastrokecyrillic\",\r\n  0x049f,\r\n  \"katahiraprolongmarkhalfwidth\",\r\n  0xff70,\r\n  \"kaverticalstrokecyrillic\",\r\n  0x049d,\r\n  \"kbopomofo\",\r\n  0x310e,\r\n  \"kcalsquare\",\r\n  0x3389,\r\n  \"kcaron\",\r\n  0x01e9,\r\n  \"kcedilla\",\r\n  0x0137,\r\n  \"kcircle\",\r\n  0x24da,\r\n  \"kcommaaccent\",\r\n  0x0137,\r\n  \"kdotbelow\",\r\n  0x1e33,\r\n  \"keharmenian\",\r\n  0x0584,\r\n  \"kehiragana\",\r\n  0x3051,\r\n  \"kekatakana\",\r\n  0x30b1,\r\n  \"kekatakanahalfwidth\",\r\n  0xff79,\r\n  \"kenarmenian\",\r\n  0x056f,\r\n  \"kesmallkatakana\",\r\n  0x30f6,\r\n  \"kgreenlandic\",\r\n  0x0138,\r\n  \"khabengali\",\r\n  0x0996,\r\n  \"khacyrillic\",\r\n  0x0445,\r\n  \"khadeva\",\r\n  0x0916,\r\n  \"khagujarati\",\r\n  0x0a96,\r\n  \"khagurmukhi\",\r\n  0x0a16,\r\n  \"khaharabic\",\r\n  0x062e,\r\n  \"khahfinalarabic\",\r\n  0xfea6,\r\n  \"khahinitialarabic\",\r\n  0xfea7,\r\n  \"khahmedialarabic\",\r\n  0xfea8,\r\n  \"kheicoptic\",\r\n  0x03e7,\r\n  \"khhadeva\",\r\n  0x0959,\r\n  \"khhagurmukhi\",\r\n  0x0a59,\r\n  \"khieukhacirclekorean\",\r\n  0x3278,\r\n  \"khieukhaparenkorean\",\r\n  0x3218,\r\n  \"khieukhcirclekorean\",\r\n  0x326a,\r\n  \"khieukhkorean\",\r\n  0x314b,\r\n  \"khieukhparenkorean\",\r\n  0x320a,\r\n  \"khokhaithai\",\r\n  0x0e02,\r\n  \"khokhonthai\",\r\n  0x0e05,\r\n  \"khokhuatthai\",\r\n  0x0e03,\r\n  \"khokhwaithai\",\r\n  0x0e04,\r\n  \"khomutthai\",\r\n  0x0e5b,\r\n  \"khook\",\r\n  0x0199,\r\n  \"khorakhangthai\",\r\n  0x0e06,\r\n  \"khzsquare\",\r\n  0x3391,\r\n  \"kihiragana\",\r\n  0x304d,\r\n  \"kikatakana\",\r\n  0x30ad,\r\n  \"kikatakanahalfwidth\",\r\n  0xff77,\r\n  \"kiroguramusquare\",\r\n  0x3315,\r\n  \"kiromeetorusquare\",\r\n  0x3316,\r\n  \"kirosquare\",\r\n  0x3314,\r\n  \"kiyeokacirclekorean\",\r\n  0x326e,\r\n  \"kiyeokaparenkorean\",\r\n  0x320e,\r\n  \"kiyeokcirclekorean\",\r\n  0x3260,\r\n  \"kiyeokkorean\",\r\n  0x3131,\r\n  \"kiyeokparenkorean\",\r\n  0x3200,\r\n  \"kiyeoksioskorean\",\r\n  0x3133,\r\n  \"kjecyrillic\",\r\n  0x045c,\r\n  \"klinebelow\",\r\n  0x1e35,\r\n  \"klsquare\",\r\n  0x3398,\r\n  \"kmcubedsquare\",\r\n  0x33a6,\r\n  \"kmonospace\",\r\n  0xff4b,\r\n  \"kmsquaredsquare\",\r\n  0x33a2,\r\n  \"kohiragana\",\r\n  0x3053,\r\n  \"kohmsquare\",\r\n  0x33c0,\r\n  \"kokaithai\",\r\n  0x0e01,\r\n  \"kokatakana\",\r\n  0x30b3,\r\n  \"kokatakanahalfwidth\",\r\n  0xff7a,\r\n  \"kooposquare\",\r\n  0x331e,\r\n  \"koppacyrillic\",\r\n  0x0481,\r\n  \"koreanstandardsymbol\",\r\n  0x327f,\r\n  \"koroniscmb\",\r\n  0x0343,\r\n  \"kparen\",\r\n  0x24a6,\r\n  \"kpasquare\",\r\n  0x33aa,\r\n  \"ksicyrillic\",\r\n  0x046f,\r\n  \"ktsquare\",\r\n  0x33cf,\r\n  \"kturned\",\r\n  0x029e,\r\n  \"kuhiragana\",\r\n  0x304f,\r\n  \"kukatakana\",\r\n  0x30af,\r\n  \"kukatakanahalfwidth\",\r\n  0xff78,\r\n  \"kvsquare\",\r\n  0x33b8,\r\n  \"kwsquare\",\r\n  0x33be,\r\n  \"l\",\r\n  0x006c,\r\n  \"labengali\",\r\n  0x09b2,\r\n  \"lacute\",\r\n  0x013a,\r\n  \"ladeva\",\r\n  0x0932,\r\n  \"lagujarati\",\r\n  0x0ab2,\r\n  \"lagurmukhi\",\r\n  0x0a32,\r\n  \"lakkhangyaothai\",\r\n  0x0e45,\r\n  \"lamaleffinalarabic\",\r\n  0xfefc,\r\n  \"lamalefhamzaabovefinalarabic\",\r\n  0xfef8,\r\n  \"lamalefhamzaaboveisolatedarabic\",\r\n  0xfef7,\r\n  \"lamalefhamzabelowfinalarabic\",\r\n  0xfefa,\r\n  \"lamalefhamzabelowisolatedarabic\",\r\n  0xfef9,\r\n  \"lamalefisolatedarabic\",\r\n  0xfefb,\r\n  \"lamalefmaddaabovefinalarabic\",\r\n  0xfef6,\r\n  \"lamalefmaddaaboveisolatedarabic\",\r\n  0xfef5,\r\n  \"lamarabic\",\r\n  0x0644,\r\n  \"lambda\",\r\n  0x03bb,\r\n  \"lambdastroke\",\r\n  0x019b,\r\n  \"lamed\",\r\n  0x05dc,\r\n  \"lameddagesh\",\r\n  0xfb3c,\r\n  \"lameddageshhebrew\",\r\n  0xfb3c,\r\n  \"lamedhebrew\",\r\n  0x05dc,\r\n  \"lamfinalarabic\",\r\n  0xfede,\r\n  \"lamhahinitialarabic\",\r\n  0xfcca,\r\n  \"laminitialarabic\",\r\n  0xfedf,\r\n  \"lamjeeminitialarabic\",\r\n  0xfcc9,\r\n  \"lamkhahinitialarabic\",\r\n  0xfccb,\r\n  \"lamlamhehisolatedarabic\",\r\n  0xfdf2,\r\n  \"lammedialarabic\",\r\n  0xfee0,\r\n  \"lammeemhahinitialarabic\",\r\n  0xfd88,\r\n  \"lammeeminitialarabic\",\r\n  0xfccc,\r\n  \"largecircle\",\r\n  0x25ef,\r\n  \"lbar\",\r\n  0x019a,\r\n  \"lbelt\",\r\n  0x026c,\r\n  \"lbopomofo\",\r\n  0x310c,\r\n  \"lcaron\",\r\n  0x013e,\r\n  \"lcedilla\",\r\n  0x013c,\r\n  \"lcircle\",\r\n  0x24db,\r\n  \"lcircumflexbelow\",\r\n  0x1e3d,\r\n  \"lcommaaccent\",\r\n  0x013c,\r\n  \"ldot\",\r\n  0x0140,\r\n  \"ldotaccent\",\r\n  0x0140,\r\n  \"ldotbelow\",\r\n  0x1e37,\r\n  \"ldotbelowmacron\",\r\n  0x1e39,\r\n  \"leftangleabovecmb\",\r\n  0x031a,\r\n  \"lefttackbelowcmb\",\r\n  0x0318,\r\n  \"less\",\r\n  0x003c,\r\n  \"lessequal\",\r\n  0x2264,\r\n  \"lessequalorgreater\",\r\n  0x22da,\r\n  \"lessmonospace\",\r\n  0xff1c,\r\n  \"lessorequivalent\",\r\n  0x2272,\r\n  \"lessorgreater\",\r\n  0x2276,\r\n  \"lessoverequal\",\r\n  0x2266,\r\n  \"lesssmall\",\r\n  0xfe64,\r\n  \"lezh\",\r\n  0x026e,\r\n  \"lfblock\",\r\n  0x258c,\r\n  \"lhookretroflex\",\r\n  0x026d,\r\n  \"lira\",\r\n  0x20a4,\r\n  \"liwnarmenian\",\r\n  0x056c,\r\n  \"lj\",\r\n  0x01c9,\r\n  \"ljecyrillic\",\r\n  0x0459,\r\n  \"ll\",\r\n  0xf6c0,\r\n  \"lladeva\",\r\n  0x0933,\r\n  \"llagujarati\",\r\n  0x0ab3,\r\n  \"llinebelow\",\r\n  0x1e3b,\r\n  \"llladeva\",\r\n  0x0934,\r\n  \"llvocalicbengali\",\r\n  0x09e1,\r\n  \"llvocalicdeva\",\r\n  0x0961,\r\n  \"llvocalicvowelsignbengali\",\r\n  0x09e3,\r\n  \"llvocalicvowelsigndeva\",\r\n  0x0963,\r\n  \"lmiddletilde\",\r\n  0x026b,\r\n  \"lmonospace\",\r\n  0xff4c,\r\n  \"lmsquare\",\r\n  0x33d0,\r\n  \"lochulathai\",\r\n  0x0e2c,\r\n  \"logicaland\",\r\n  0x2227,\r\n  \"logicalnot\",\r\n  0x00ac,\r\n  \"logicalnotreversed\",\r\n  0x2310,\r\n  \"logicalor\",\r\n  0x2228,\r\n  \"lolingthai\",\r\n  0x0e25,\r\n  \"longs\",\r\n  0x017f,\r\n  \"lowlinecenterline\",\r\n  0xfe4e,\r\n  \"lowlinecmb\",\r\n  0x0332,\r\n  \"lowlinedashed\",\r\n  0xfe4d,\r\n  \"lozenge\",\r\n  0x25ca,\r\n  \"lparen\",\r\n  0x24a7,\r\n  \"lslash\",\r\n  0x0142,\r\n  \"lsquare\",\r\n  0x2113,\r\n  \"lsuperior\",\r\n  0xf6ee,\r\n  \"ltshade\",\r\n  0x2591,\r\n  \"luthai\",\r\n  0x0e26,\r\n  \"lvocalicbengali\",\r\n  0x098c,\r\n  \"lvocalicdeva\",\r\n  0x090c,\r\n  \"lvocalicvowelsignbengali\",\r\n  0x09e2,\r\n  \"lvocalicvowelsigndeva\",\r\n  0x0962,\r\n  \"lxsquare\",\r\n  0x33d3,\r\n  \"m\",\r\n  0x006d,\r\n  \"mabengali\",\r\n  0x09ae,\r\n  \"macron\",\r\n  0x00af,\r\n  \"macronbelowcmb\",\r\n  0x0331,\r\n  \"macroncmb\",\r\n  0x0304,\r\n  \"macronlowmod\",\r\n  0x02cd,\r\n  \"macronmonospace\",\r\n  0xffe3,\r\n  \"macute\",\r\n  0x1e3f,\r\n  \"madeva\",\r\n  0x092e,\r\n  \"magujarati\",\r\n  0x0aae,\r\n  \"magurmukhi\",\r\n  0x0a2e,\r\n  \"mahapakhhebrew\",\r\n  0x05a4,\r\n  \"mahapakhlefthebrew\",\r\n  0x05a4,\r\n  \"mahiragana\",\r\n  0x307e,\r\n  \"maichattawalowleftthai\",\r\n  0xf895,\r\n  \"maichattawalowrightthai\",\r\n  0xf894,\r\n  \"maichattawathai\",\r\n  0x0e4b,\r\n  \"maichattawaupperleftthai\",\r\n  0xf893,\r\n  \"maieklowleftthai\",\r\n  0xf88c,\r\n  \"maieklowrightthai\",\r\n  0xf88b,\r\n  \"maiekthai\",\r\n  0x0e48,\r\n  \"maiekupperleftthai\",\r\n  0xf88a,\r\n  \"maihanakatleftthai\",\r\n  0xf884,\r\n  \"maihanakatthai\",\r\n  0x0e31,\r\n  \"maitaikhuleftthai\",\r\n  0xf889,\r\n  \"maitaikhuthai\",\r\n  0x0e47,\r\n  \"maitholowleftthai\",\r\n  0xf88f,\r\n  \"maitholowrightthai\",\r\n  0xf88e,\r\n  \"maithothai\",\r\n  0x0e49,\r\n  \"maithoupperleftthai\",\r\n  0xf88d,\r\n  \"maitrilowleftthai\",\r\n  0xf892,\r\n  \"maitrilowrightthai\",\r\n  0xf891,\r\n  \"maitrithai\",\r\n  0x0e4a,\r\n  \"maitriupperleftthai\",\r\n  0xf890,\r\n  \"maiyamokthai\",\r\n  0x0e46,\r\n  \"makatakana\",\r\n  0x30de,\r\n  \"makatakanahalfwidth\",\r\n  0xff8f,\r\n  \"male\",\r\n  0x2642,\r\n  \"mansyonsquare\",\r\n  0x3347,\r\n  \"maqafhebrew\",\r\n  0x05be,\r\n  \"mars\",\r\n  0x2642,\r\n  \"masoracirclehebrew\",\r\n  0x05af,\r\n  \"masquare\",\r\n  0x3383,\r\n  \"mbopomofo\",\r\n  0x3107,\r\n  \"mbsquare\",\r\n  0x33d4,\r\n  \"mcircle\",\r\n  0x24dc,\r\n  \"mcubedsquare\",\r\n  0x33a5,\r\n  \"mdotaccent\",\r\n  0x1e41,\r\n  \"mdotbelow\",\r\n  0x1e43,\r\n  \"meemarabic\",\r\n  0x0645,\r\n  \"meemfinalarabic\",\r\n  0xfee2,\r\n  \"meeminitialarabic\",\r\n  0xfee3,\r\n  \"meemmedialarabic\",\r\n  0xfee4,\r\n  \"meemmeeminitialarabic\",\r\n  0xfcd1,\r\n  \"meemmeemisolatedarabic\",\r\n  0xfc48,\r\n  \"meetorusquare\",\r\n  0x334d,\r\n  \"mehiragana\",\r\n  0x3081,\r\n  \"meizierasquare\",\r\n  0x337e,\r\n  \"mekatakana\",\r\n  0x30e1,\r\n  \"mekatakanahalfwidth\",\r\n  0xff92,\r\n  \"mem\",\r\n  0x05de,\r\n  \"memdagesh\",\r\n  0xfb3e,\r\n  \"memdageshhebrew\",\r\n  0xfb3e,\r\n  \"memhebrew\",\r\n  0x05de,\r\n  \"menarmenian\",\r\n  0x0574,\r\n  \"merkhahebrew\",\r\n  0x05a5,\r\n  \"merkhakefulahebrew\",\r\n  0x05a6,\r\n  \"merkhakefulalefthebrew\",\r\n  0x05a6,\r\n  \"merkhalefthebrew\",\r\n  0x05a5,\r\n  \"mhook\",\r\n  0x0271,\r\n  \"mhzsquare\",\r\n  0x3392,\r\n  \"middledotkatakanahalfwidth\",\r\n  0xff65,\r\n  \"middot\",\r\n  0x00b7,\r\n  \"mieumacirclekorean\",\r\n  0x3272,\r\n  \"mieumaparenkorean\",\r\n  0x3212,\r\n  \"mieumcirclekorean\",\r\n  0x3264,\r\n  \"mieumkorean\",\r\n  0x3141,\r\n  \"mieumpansioskorean\",\r\n  0x3170,\r\n  \"mieumparenkorean\",\r\n  0x3204,\r\n  \"mieumpieupkorean\",\r\n  0x316e,\r\n  \"mieumsioskorean\",\r\n  0x316f,\r\n  \"mihiragana\",\r\n  0x307f,\r\n  \"mikatakana\",\r\n  0x30df,\r\n  \"mikatakanahalfwidth\",\r\n  0xff90,\r\n  \"minus\",\r\n  0x2212,\r\n  \"minusbelowcmb\",\r\n  0x0320,\r\n  \"minuscircle\",\r\n  0x2296,\r\n  \"minusmod\",\r\n  0x02d7,\r\n  \"minusplus\",\r\n  0x2213,\r\n  \"minute\",\r\n  0x2032,\r\n  \"miribaarusquare\",\r\n  0x334a,\r\n  \"mirisquare\",\r\n  0x3349,\r\n  \"mlonglegturned\",\r\n  0x0270,\r\n  \"mlsquare\",\r\n  0x3396,\r\n  \"mmcubedsquare\",\r\n  0x33a3,\r\n  \"mmonospace\",\r\n  0xff4d,\r\n  \"mmsquaredsquare\",\r\n  0x339f,\r\n  \"mohiragana\",\r\n  0x3082,\r\n  \"mohmsquare\",\r\n  0x33c1,\r\n  \"mokatakana\",\r\n  0x30e2,\r\n  \"mokatakanahalfwidth\",\r\n  0xff93,\r\n  \"molsquare\",\r\n  0x33d6,\r\n  \"momathai\",\r\n  0x0e21,\r\n  \"moverssquare\",\r\n  0x33a7,\r\n  \"moverssquaredsquare\",\r\n  0x33a8,\r\n  \"mparen\",\r\n  0x24a8,\r\n  \"mpasquare\",\r\n  0x33ab,\r\n  \"mssquare\",\r\n  0x33b3,\r\n  \"msuperior\",\r\n  0xf6ef,\r\n  \"mturned\",\r\n  0x026f,\r\n  \"mu\",\r\n  0x00b5,\r\n  \"mu1\",\r\n  0x00b5,\r\n  \"muasquare\",\r\n  0x3382,\r\n  \"muchgreater\",\r\n  0x226b,\r\n  \"muchless\",\r\n  0x226a,\r\n  \"mufsquare\",\r\n  0x338c,\r\n  \"mugreek\",\r\n  0x03bc,\r\n  \"mugsquare\",\r\n  0x338d,\r\n  \"muhiragana\",\r\n  0x3080,\r\n  \"mukatakana\",\r\n  0x30e0,\r\n  \"mukatakanahalfwidth\",\r\n  0xff91,\r\n  \"mulsquare\",\r\n  0x3395,\r\n  \"multiply\",\r\n  0x00d7,\r\n  \"mumsquare\",\r\n  0x339b,\r\n  \"munahhebrew\",\r\n  0x05a3,\r\n  \"munahlefthebrew\",\r\n  0x05a3,\r\n  \"musicalnote\",\r\n  0x266a,\r\n  \"musicalnotedbl\",\r\n  0x266b,\r\n  \"musicflatsign\",\r\n  0x266d,\r\n  \"musicsharpsign\",\r\n  0x266f,\r\n  \"mussquare\",\r\n  0x33b2,\r\n  \"muvsquare\",\r\n  0x33b6,\r\n  \"muwsquare\",\r\n  0x33bc,\r\n  \"mvmegasquare\",\r\n  0x33b9,\r\n  \"mvsquare\",\r\n  0x33b7,\r\n  \"mwmegasquare\",\r\n  0x33bf,\r\n  \"mwsquare\",\r\n  0x33bd,\r\n  \"n\",\r\n  0x006e,\r\n  \"nabengali\",\r\n  0x09a8,\r\n  \"nabla\",\r\n  0x2207,\r\n  \"nacute\",\r\n  0x0144,\r\n  \"nadeva\",\r\n  0x0928,\r\n  \"nagujarati\",\r\n  0x0aa8,\r\n  \"nagurmukhi\",\r\n  0x0a28,\r\n  \"nahiragana\",\r\n  0x306a,\r\n  \"nakatakana\",\r\n  0x30ca,\r\n  \"nakatakanahalfwidth\",\r\n  0xff85,\r\n  \"napostrophe\",\r\n  0x0149,\r\n  \"nasquare\",\r\n  0x3381,\r\n  \"nbopomofo\",\r\n  0x310b,\r\n  \"nbspace\",\r\n  0x00a0,\r\n  \"ncaron\",\r\n  0x0148,\r\n  \"ncedilla\",\r\n  0x0146,\r\n  \"ncircle\",\r\n  0x24dd,\r\n  \"ncircumflexbelow\",\r\n  0x1e4b,\r\n  \"ncommaaccent\",\r\n  0x0146,\r\n  \"ndotaccent\",\r\n  0x1e45,\r\n  \"ndotbelow\",\r\n  0x1e47,\r\n  \"nehiragana\",\r\n  0x306d,\r\n  \"nekatakana\",\r\n  0x30cd,\r\n  \"nekatakanahalfwidth\",\r\n  0xff88,\r\n  \"newsheqelsign\",\r\n  0x20aa,\r\n  \"nfsquare\",\r\n  0x338b,\r\n  \"ngabengali\",\r\n  0x0999,\r\n  \"ngadeva\",\r\n  0x0919,\r\n  \"ngagujarati\",\r\n  0x0a99,\r\n  \"ngagurmukhi\",\r\n  0x0a19,\r\n  \"ngonguthai\",\r\n  0x0e07,\r\n  \"nhiragana\",\r\n  0x3093,\r\n  \"nhookleft\",\r\n  0x0272,\r\n  \"nhookretroflex\",\r\n  0x0273,\r\n  \"nieunacirclekorean\",\r\n  0x326f,\r\n  \"nieunaparenkorean\",\r\n  0x320f,\r\n  \"nieuncieuckorean\",\r\n  0x3135,\r\n  \"nieuncirclekorean\",\r\n  0x3261,\r\n  \"nieunhieuhkorean\",\r\n  0x3136,\r\n  \"nieunkorean\",\r\n  0x3134,\r\n  \"nieunpansioskorean\",\r\n  0x3168,\r\n  \"nieunparenkorean\",\r\n  0x3201,\r\n  \"nieunsioskorean\",\r\n  0x3167,\r\n  \"nieuntikeutkorean\",\r\n  0x3166,\r\n  \"nihiragana\",\r\n  0x306b,\r\n  \"nikatakana\",\r\n  0x30cb,\r\n  \"nikatakanahalfwidth\",\r\n  0xff86,\r\n  \"nikhahitleftthai\",\r\n  0xf899,\r\n  \"nikhahitthai\",\r\n  0x0e4d,\r\n  \"nine\",\r\n  0x0039,\r\n  \"ninearabic\",\r\n  0x0669,\r\n  \"ninebengali\",\r\n  0x09ef,\r\n  \"ninecircle\",\r\n  0x2468,\r\n  \"ninecircleinversesansserif\",\r\n  0x2792,\r\n  \"ninedeva\",\r\n  0x096f,\r\n  \"ninegujarati\",\r\n  0x0aef,\r\n  \"ninegurmukhi\",\r\n  0x0a6f,\r\n  \"ninehackarabic\",\r\n  0x0669,\r\n  \"ninehangzhou\",\r\n  0x3029,\r\n  \"nineideographicparen\",\r\n  0x3228,\r\n  \"nineinferior\",\r\n  0x2089,\r\n  \"ninemonospace\",\r\n  0xff19,\r\n  \"nineoldstyle\",\r\n  0xf739,\r\n  \"nineparen\",\r\n  0x247c,\r\n  \"nineperiod\",\r\n  0x2490,\r\n  \"ninepersian\",\r\n  0x06f9,\r\n  \"nineroman\",\r\n  0x2178,\r\n  \"ninesuperior\",\r\n  0x2079,\r\n  \"nineteencircle\",\r\n  0x2472,\r\n  \"nineteenparen\",\r\n  0x2486,\r\n  \"nineteenperiod\",\r\n  0x249a,\r\n  \"ninethai\",\r\n  0x0e59,\r\n  \"nj\",\r\n  0x01cc,\r\n  \"njecyrillic\",\r\n  0x045a,\r\n  \"nkatakana\",\r\n  0x30f3,\r\n  \"nkatakanahalfwidth\",\r\n  0xff9d,\r\n  \"nlegrightlong\",\r\n  0x019e,\r\n  \"nlinebelow\",\r\n  0x1e49,\r\n  \"nmonospace\",\r\n  0xff4e,\r\n  \"nmsquare\",\r\n  0x339a,\r\n  \"nnabengali\",\r\n  0x09a3,\r\n  \"nnadeva\",\r\n  0x0923,\r\n  \"nnagujarati\",\r\n  0x0aa3,\r\n  \"nnagurmukhi\",\r\n  0x0a23,\r\n  \"nnnadeva\",\r\n  0x0929,\r\n  \"nohiragana\",\r\n  0x306e,\r\n  \"nokatakana\",\r\n  0x30ce,\r\n  \"nokatakanahalfwidth\",\r\n  0xff89,\r\n  \"nonbreakingspace\",\r\n  0x00a0,\r\n  \"nonenthai\",\r\n  0x0e13,\r\n  \"nonuthai\",\r\n  0x0e19,\r\n  \"noonarabic\",\r\n  0x0646,\r\n  \"noonfinalarabic\",\r\n  0xfee6,\r\n  \"noonghunnaarabic\",\r\n  0x06ba,\r\n  \"noonghunnafinalarabic\",\r\n  0xfb9f,\r\n  \"nooninitialarabic\",\r\n  0xfee7,\r\n  \"noonjeeminitialarabic\",\r\n  0xfcd2,\r\n  \"noonjeemisolatedarabic\",\r\n  0xfc4b,\r\n  \"noonmedialarabic\",\r\n  0xfee8,\r\n  \"noonmeeminitialarabic\",\r\n  0xfcd5,\r\n  \"noonmeemisolatedarabic\",\r\n  0xfc4e,\r\n  \"noonnoonfinalarabic\",\r\n  0xfc8d,\r\n  \"notcontains\",\r\n  0x220c,\r\n  \"notelement\",\r\n  0x2209,\r\n  \"notelementof\",\r\n  0x2209,\r\n  \"notequal\",\r\n  0x2260,\r\n  \"notgreater\",\r\n  0x226f,\r\n  \"notgreaternorequal\",\r\n  0x2271,\r\n  \"notgreaternorless\",\r\n  0x2279,\r\n  \"notidentical\",\r\n  0x2262,\r\n  \"notless\",\r\n  0x226e,\r\n  \"notlessnorequal\",\r\n  0x2270,\r\n  \"notparallel\",\r\n  0x2226,\r\n  \"notprecedes\",\r\n  0x2280,\r\n  \"notsubset\",\r\n  0x2284,\r\n  \"notsucceeds\",\r\n  0x2281,\r\n  \"notsuperset\",\r\n  0x2285,\r\n  \"nowarmenian\",\r\n  0x0576,\r\n  \"nparen\",\r\n  0x24a9,\r\n  \"nssquare\",\r\n  0x33b1,\r\n  \"nsuperior\",\r\n  0x207f,\r\n  \"ntilde\",\r\n  0x00f1,\r\n  \"nu\",\r\n  0x03bd,\r\n  \"nuhiragana\",\r\n  0x306c,\r\n  \"nukatakana\",\r\n  0x30cc,\r\n  \"nukatakanahalfwidth\",\r\n  0xff87,\r\n  \"nuktabengali\",\r\n  0x09bc,\r\n  \"nuktadeva\",\r\n  0x093c,\r\n  \"nuktagujarati\",\r\n  0x0abc,\r\n  \"nuktagurmukhi\",\r\n  0x0a3c,\r\n  \"numbersign\",\r\n  0x0023,\r\n  \"numbersignmonospace\",\r\n  0xff03,\r\n  \"numbersignsmall\",\r\n  0xfe5f,\r\n  \"numeralsigngreek\",\r\n  0x0374,\r\n  \"numeralsignlowergreek\",\r\n  0x0375,\r\n  \"numero\",\r\n  0x2116,\r\n  \"nun\",\r\n  0x05e0,\r\n  \"nundagesh\",\r\n  0xfb40,\r\n  \"nundageshhebrew\",\r\n  0xfb40,\r\n  \"nunhebrew\",\r\n  0x05e0,\r\n  \"nvsquare\",\r\n  0x33b5,\r\n  \"nwsquare\",\r\n  0x33bb,\r\n  \"nyabengali\",\r\n  0x099e,\r\n  \"nyadeva\",\r\n  0x091e,\r\n  \"nyagujarati\",\r\n  0x0a9e,\r\n  \"nyagurmukhi\",\r\n  0x0a1e,\r\n  \"o\",\r\n  0x006f,\r\n  \"oacute\",\r\n  0x00f3,\r\n  \"oangthai\",\r\n  0x0e2d,\r\n  \"obarred\",\r\n  0x0275,\r\n  \"obarredcyrillic\",\r\n  0x04e9,\r\n  \"obarreddieresiscyrillic\",\r\n  0x04eb,\r\n  \"obengali\",\r\n  0x0993,\r\n  \"obopomofo\",\r\n  0x311b,\r\n  \"obreve\",\r\n  0x014f,\r\n  \"ocandradeva\",\r\n  0x0911,\r\n  \"ocandragujarati\",\r\n  0x0a91,\r\n  \"ocandravowelsigndeva\",\r\n  0x0949,\r\n  \"ocandravowelsigngujarati\",\r\n  0x0ac9,\r\n  \"ocaron\",\r\n  0x01d2,\r\n  \"ocircle\",\r\n  0x24de,\r\n  \"ocircumflex\",\r\n  0x00f4,\r\n  \"ocircumflexacute\",\r\n  0x1ed1,\r\n  \"ocircumflexdotbelow\",\r\n  0x1ed9,\r\n  \"ocircumflexgrave\",\r\n  0x1ed3,\r\n  \"ocircumflexhookabove\",\r\n  0x1ed5,\r\n  \"ocircumflextilde\",\r\n  0x1ed7,\r\n  \"ocyrillic\",\r\n  0x043e,\r\n  \"odblacute\",\r\n  0x0151,\r\n  \"odblgrave\",\r\n  0x020d,\r\n  \"odeva\",\r\n  0x0913,\r\n  \"odieresis\",\r\n  0x00f6,\r\n  \"odieresiscyrillic\",\r\n  0x04e7,\r\n  \"odotbelow\",\r\n  0x1ecd,\r\n  \"oe\",\r\n  0x0153,\r\n  \"oekorean\",\r\n  0x315a,\r\n  \"ogonek\",\r\n  0x02db,\r\n  \"ogonekcmb\",\r\n  0x0328,\r\n  \"ograve\",\r\n  0x00f2,\r\n  \"ogujarati\",\r\n  0x0a93,\r\n  \"oharmenian\",\r\n  0x0585,\r\n  \"ohiragana\",\r\n  0x304a,\r\n  \"ohookabove\",\r\n  0x1ecf,\r\n  \"ohorn\",\r\n  0x01a1,\r\n  \"ohornacute\",\r\n  0x1edb,\r\n  \"ohorndotbelow\",\r\n  0x1ee3,\r\n  \"ohorngrave\",\r\n  0x1edd,\r\n  \"ohornhookabove\",\r\n  0x1edf,\r\n  \"ohorntilde\",\r\n  0x1ee1,\r\n  \"ohungarumlaut\",\r\n  0x0151,\r\n  \"oi\",\r\n  0x01a3,\r\n  \"oinvertedbreve\",\r\n  0x020f,\r\n  \"okatakana\",\r\n  0x30aa,\r\n  \"okatakanahalfwidth\",\r\n  0xff75,\r\n  \"okorean\",\r\n  0x3157,\r\n  \"olehebrew\",\r\n  0x05ab,\r\n  \"omacron\",\r\n  0x014d,\r\n  \"omacronacute\",\r\n  0x1e53,\r\n  \"omacrongrave\",\r\n  0x1e51,\r\n  \"omdeva\",\r\n  0x0950,\r\n  \"omega\",\r\n  0x03c9,\r\n  \"omega1\",\r\n  0x03d6,\r\n  \"omegacyrillic\",\r\n  0x0461,\r\n  \"omegalatinclosed\",\r\n  0x0277,\r\n  \"omegaroundcyrillic\",\r\n  0x047b,\r\n  \"omegatitlocyrillic\",\r\n  0x047d,\r\n  \"omegatonos\",\r\n  0x03ce,\r\n  \"omgujarati\",\r\n  0x0ad0,\r\n  \"omicron\",\r\n  0x03bf,\r\n  \"omicrontonos\",\r\n  0x03cc,\r\n  \"omonospace\",\r\n  0xff4f,\r\n  \"one\",\r\n  0x0031,\r\n  \"onearabic\",\r\n  0x0661,\r\n  \"onebengali\",\r\n  0x09e7,\r\n  \"onecircle\",\r\n  0x2460,\r\n  \"onecircleinversesansserif\",\r\n  0x278a,\r\n  \"onedeva\",\r\n  0x0967,\r\n  \"onedotenleader\",\r\n  0x2024,\r\n  \"oneeighth\",\r\n  0x215b,\r\n  \"onefitted\",\r\n  0xf6dc,\r\n  \"onegujarati\",\r\n  0x0ae7,\r\n  \"onegurmukhi\",\r\n  0x0a67,\r\n  \"onehackarabic\",\r\n  0x0661,\r\n  \"onehalf\",\r\n  0x00bd,\r\n  \"onehangzhou\",\r\n  0x3021,\r\n  \"oneideographicparen\",\r\n  0x3220,\r\n  \"oneinferior\",\r\n  0x2081,\r\n  \"onemonospace\",\r\n  0xff11,\r\n  \"onenumeratorbengali\",\r\n  0x09f4,\r\n  \"oneoldstyle\",\r\n  0xf731,\r\n  \"oneparen\",\r\n  0x2474,\r\n  \"oneperiod\",\r\n  0x2488,\r\n  \"onepersian\",\r\n  0x06f1,\r\n  \"onequarter\",\r\n  0x00bc,\r\n  \"oneroman\",\r\n  0x2170,\r\n  \"onesuperior\",\r\n  0x00b9,\r\n  \"onethai\",\r\n  0x0e51,\r\n  \"onethird\",\r\n  0x2153,\r\n  \"oogonek\",\r\n  0x01eb,\r\n  \"oogonekmacron\",\r\n  0x01ed,\r\n  \"oogurmukhi\",\r\n  0x0a13,\r\n  \"oomatragurmukhi\",\r\n  0x0a4b,\r\n  \"oopen\",\r\n  0x0254,\r\n  \"oparen\",\r\n  0x24aa,\r\n  \"openbullet\",\r\n  0x25e6,\r\n  \"option\",\r\n  0x2325,\r\n  \"ordfeminine\",\r\n  0x00aa,\r\n  \"ordmasculine\",\r\n  0x00ba,\r\n  \"orthogonal\",\r\n  0x221f,\r\n  \"oshortdeva\",\r\n  0x0912,\r\n  \"oshortvowelsigndeva\",\r\n  0x094a,\r\n  \"oslash\",\r\n  0x00f8,\r\n  \"oslashacute\",\r\n  0x01ff,\r\n  \"osmallhiragana\",\r\n  0x3049,\r\n  \"osmallkatakana\",\r\n  0x30a9,\r\n  \"osmallkatakanahalfwidth\",\r\n  0xff6b,\r\n  \"ostrokeacute\",\r\n  0x01ff,\r\n  \"osuperior\",\r\n  0xf6f0,\r\n  \"otcyrillic\",\r\n  0x047f,\r\n  \"otilde\",\r\n  0x00f5,\r\n  \"otildeacute\",\r\n  0x1e4d,\r\n  \"otildedieresis\",\r\n  0x1e4f,\r\n  \"oubopomofo\",\r\n  0x3121,\r\n  \"overline\",\r\n  0x203e,\r\n  \"overlinecenterline\",\r\n  0xfe4a,\r\n  \"overlinecmb\",\r\n  0x0305,\r\n  \"overlinedashed\",\r\n  0xfe49,\r\n  \"overlinedblwavy\",\r\n  0xfe4c,\r\n  \"overlinewavy\",\r\n  0xfe4b,\r\n  \"overscore\",\r\n  0x00af,\r\n  \"ovowelsignbengali\",\r\n  0x09cb,\r\n  \"ovowelsigndeva\",\r\n  0x094b,\r\n  \"ovowelsigngujarati\",\r\n  0x0acb,\r\n  \"p\",\r\n  0x0070,\r\n  \"paampssquare\",\r\n  0x3380,\r\n  \"paasentosquare\",\r\n  0x332b,\r\n  \"pabengali\",\r\n  0x09aa,\r\n  \"pacute\",\r\n  0x1e55,\r\n  \"padeva\",\r\n  0x092a,\r\n  \"pagedown\",\r\n  0x21df,\r\n  \"pageup\",\r\n  0x21de,\r\n  \"pagujarati\",\r\n  0x0aaa,\r\n  \"pagurmukhi\",\r\n  0x0a2a,\r\n  \"pahiragana\",\r\n  0x3071,\r\n  \"paiyannoithai\",\r\n  0x0e2f,\r\n  \"pakatakana\",\r\n  0x30d1,\r\n  \"palatalizationcyrilliccmb\",\r\n  0x0484,\r\n  \"palochkacyrillic\",\r\n  0x04c0,\r\n  \"pansioskorean\",\r\n  0x317f,\r\n  \"paragraph\",\r\n  0x00b6,\r\n  \"parallel\",\r\n  0x2225,\r\n  \"parenleft\",\r\n  0x0028,\r\n  \"parenleftaltonearabic\",\r\n  0xfd3e,\r\n  \"parenleftbt\",\r\n  0xf8ed,\r\n  \"parenleftex\",\r\n  0xf8ec,\r\n  \"parenleftinferior\",\r\n  0x208d,\r\n  \"parenleftmonospace\",\r\n  0xff08,\r\n  \"parenleftsmall\",\r\n  0xfe59,\r\n  \"parenleftsuperior\",\r\n  0x207d,\r\n  \"parenlefttp\",\r\n  0xf8eb,\r\n  \"parenleftvertical\",\r\n  0xfe35,\r\n  \"parenright\",\r\n  0x0029,\r\n  \"parenrightaltonearabic\",\r\n  0xfd3f,\r\n  \"parenrightbt\",\r\n  0xf8f8,\r\n  \"parenrightex\",\r\n  0xf8f7,\r\n  \"parenrightinferior\",\r\n  0x208e,\r\n  \"parenrightmonospace\",\r\n  0xff09,\r\n  \"parenrightsmall\",\r\n  0xfe5a,\r\n  \"parenrightsuperior\",\r\n  0x207e,\r\n  \"parenrighttp\",\r\n  0xf8f6,\r\n  \"parenrightvertical\",\r\n  0xfe36,\r\n  \"partialdiff\",\r\n  0x2202,\r\n  \"paseqhebrew\",\r\n  0x05c0,\r\n  \"pashtahebrew\",\r\n  0x0599,\r\n  \"pasquare\",\r\n  0x33a9,\r\n  \"patah\",\r\n  0x05b7,\r\n  \"patah11\",\r\n  0x05b7,\r\n  \"patah1d\",\r\n  0x05b7,\r\n  \"patah2a\",\r\n  0x05b7,\r\n  \"patahhebrew\",\r\n  0x05b7,\r\n  \"patahnarrowhebrew\",\r\n  0x05b7,\r\n  \"patahquarterhebrew\",\r\n  0x05b7,\r\n  \"patahwidehebrew\",\r\n  0x05b7,\r\n  \"pazerhebrew\",\r\n  0x05a1,\r\n  \"pbopomofo\",\r\n  0x3106,\r\n  \"pcircle\",\r\n  0x24df,\r\n  \"pdotaccent\",\r\n  0x1e57,\r\n  \"pe\",\r\n  0x05e4,\r\n  \"pecyrillic\",\r\n  0x043f,\r\n  \"pedagesh\",\r\n  0xfb44,\r\n  \"pedageshhebrew\",\r\n  0xfb44,\r\n  \"peezisquare\",\r\n  0x333b,\r\n  \"pefinaldageshhebrew\",\r\n  0xfb43,\r\n  \"peharabic\",\r\n  0x067e,\r\n  \"peharmenian\",\r\n  0x057a,\r\n  \"pehebrew\",\r\n  0x05e4,\r\n  \"pehfinalarabic\",\r\n  0xfb57,\r\n  \"pehinitialarabic\",\r\n  0xfb58,\r\n  \"pehiragana\",\r\n  0x307a,\r\n  \"pehmedialarabic\",\r\n  0xfb59,\r\n  \"pekatakana\",\r\n  0x30da,\r\n  \"pemiddlehookcyrillic\",\r\n  0x04a7,\r\n  \"perafehebrew\",\r\n  0xfb4e,\r\n  \"percent\",\r\n  0x0025,\r\n  \"percentarabic\",\r\n  0x066a,\r\n  \"percentmonospace\",\r\n  0xff05,\r\n  \"percentsmall\",\r\n  0xfe6a,\r\n  \"period\",\r\n  0x002e,\r\n  \"periodarmenian\",\r\n  0x0589,\r\n  \"periodcentered\",\r\n  0x00b7,\r\n  \"periodhalfwidth\",\r\n  0xff61,\r\n  \"periodinferior\",\r\n  0xf6e7,\r\n  \"periodmonospace\",\r\n  0xff0e,\r\n  \"periodsmall\",\r\n  0xfe52,\r\n  \"periodsuperior\",\r\n  0xf6e8,\r\n  \"perispomenigreekcmb\",\r\n  0x0342,\r\n  \"perpendicular\",\r\n  0x22a5,\r\n  \"perthousand\",\r\n  0x2030,\r\n  \"peseta\",\r\n  0x20a7,\r\n  \"pfsquare\",\r\n  0x338a,\r\n  \"phabengali\",\r\n  0x09ab,\r\n  \"phadeva\",\r\n  0x092b,\r\n  \"phagujarati\",\r\n  0x0aab,\r\n  \"phagurmukhi\",\r\n  0x0a2b,\r\n  \"phi\",\r\n  0x03c6,\r\n  \"phi1\",\r\n  0x03d5,\r\n  \"phieuphacirclekorean\",\r\n  0x327a,\r\n  \"phieuphaparenkorean\",\r\n  0x321a,\r\n  \"phieuphcirclekorean\",\r\n  0x326c,\r\n  \"phieuphkorean\",\r\n  0x314d,\r\n  \"phieuphparenkorean\",\r\n  0x320c,\r\n  \"philatin\",\r\n  0x0278,\r\n  \"phinthuthai\",\r\n  0x0e3a,\r\n  \"phisymbolgreek\",\r\n  0x03d5,\r\n  \"phook\",\r\n  0x01a5,\r\n  \"phophanthai\",\r\n  0x0e1e,\r\n  \"phophungthai\",\r\n  0x0e1c,\r\n  \"phosamphaothai\",\r\n  0x0e20,\r\n  \"pi\",\r\n  0x03c0,\r\n  \"pieupacirclekorean\",\r\n  0x3273,\r\n  \"pieupaparenkorean\",\r\n  0x3213,\r\n  \"pieupcieuckorean\",\r\n  0x3176,\r\n  \"pieupcirclekorean\",\r\n  0x3265,\r\n  \"pieupkiyeokkorean\",\r\n  0x3172,\r\n  \"pieupkorean\",\r\n  0x3142,\r\n  \"pieupparenkorean\",\r\n  0x3205,\r\n  \"pieupsioskiyeokkorean\",\r\n  0x3174,\r\n  \"pieupsioskorean\",\r\n  0x3144,\r\n  \"pieupsiostikeutkorean\",\r\n  0x3175,\r\n  \"pieupthieuthkorean\",\r\n  0x3177,\r\n  \"pieuptikeutkorean\",\r\n  0x3173,\r\n  \"pihiragana\",\r\n  0x3074,\r\n  \"pikatakana\",\r\n  0x30d4,\r\n  \"pisymbolgreek\",\r\n  0x03d6,\r\n  \"piwrarmenian\",\r\n  0x0583,\r\n  \"plus\",\r\n  0x002b,\r\n  \"plusbelowcmb\",\r\n  0x031f,\r\n  \"pluscircle\",\r\n  0x2295,\r\n  \"plusminus\",\r\n  0x00b1,\r\n  \"plusmod\",\r\n  0x02d6,\r\n  \"plusmonospace\",\r\n  0xff0b,\r\n  \"plussmall\",\r\n  0xfe62,\r\n  \"plussuperior\",\r\n  0x207a,\r\n  \"pmonospace\",\r\n  0xff50,\r\n  \"pmsquare\",\r\n  0x33d8,\r\n  \"pohiragana\",\r\n  0x307d,\r\n  \"pointingindexdownwhite\",\r\n  0x261f,\r\n  \"pointingindexleftwhite\",\r\n  0x261c,\r\n  \"pointingindexrightwhite\",\r\n  0x261e,\r\n  \"pointingindexupwhite\",\r\n  0x261d,\r\n  \"pokatakana\",\r\n  0x30dd,\r\n  \"poplathai\",\r\n  0x0e1b,\r\n  \"postalmark\",\r\n  0x3012,\r\n  \"postalmarkface\",\r\n  0x3020,\r\n  \"pparen\",\r\n  0x24ab,\r\n  \"precedes\",\r\n  0x227a,\r\n  \"prescription\",\r\n  0x211e,\r\n  \"primemod\",\r\n  0x02b9,\r\n  \"primereversed\",\r\n  0x2035,\r\n  \"product\",\r\n  0x220f,\r\n  \"projective\",\r\n  0x2305,\r\n  \"prolongedkana\",\r\n  0x30fc,\r\n  \"propellor\",\r\n  0x2318,\r\n  \"propersubset\",\r\n  0x2282,\r\n  \"propersuperset\",\r\n  0x2283,\r\n  \"proportion\",\r\n  0x2237,\r\n  \"proportional\",\r\n  0x221d,\r\n  \"psi\",\r\n  0x03c8,\r\n  \"psicyrillic\",\r\n  0x0471,\r\n  \"psilipneumatacyrilliccmb\",\r\n  0x0486,\r\n  \"pssquare\",\r\n  0x33b0,\r\n  \"puhiragana\",\r\n  0x3077,\r\n  \"pukatakana\",\r\n  0x30d7,\r\n  \"pvsquare\",\r\n  0x33b4,\r\n  \"pwsquare\",\r\n  0x33ba,\r\n  \"q\",\r\n  0x0071,\r\n  \"qadeva\",\r\n  0x0958,\r\n  \"qadmahebrew\",\r\n  0x05a8,\r\n  \"qafarabic\",\r\n  0x0642,\r\n  \"qaffinalarabic\",\r\n  0xfed6,\r\n  \"qafinitialarabic\",\r\n  0xfed7,\r\n  \"qafmedialarabic\",\r\n  0xfed8,\r\n  \"qamats\",\r\n  0x05b8,\r\n  \"qamats10\",\r\n  0x05b8,\r\n  \"qamats1a\",\r\n  0x05b8,\r\n  \"qamats1c\",\r\n  0x05b8,\r\n  \"qamats27\",\r\n  0x05b8,\r\n  \"qamats29\",\r\n  0x05b8,\r\n  \"qamats33\",\r\n  0x05b8,\r\n  \"qamatsde\",\r\n  0x05b8,\r\n  \"qamatshebrew\",\r\n  0x05b8,\r\n  \"qamatsnarrowhebrew\",\r\n  0x05b8,\r\n  \"qamatsqatanhebrew\",\r\n  0x05b8,\r\n  \"qamatsqatannarrowhebrew\",\r\n  0x05b8,\r\n  \"qamatsqatanquarterhebrew\",\r\n  0x05b8,\r\n  \"qamatsqatanwidehebrew\",\r\n  0x05b8,\r\n  \"qamatsquarterhebrew\",\r\n  0x05b8,\r\n  \"qamatswidehebrew\",\r\n  0x05b8,\r\n  \"qarneyparahebrew\",\r\n  0x059f,\r\n  \"qbopomofo\",\r\n  0x3111,\r\n  \"qcircle\",\r\n  0x24e0,\r\n  \"qhook\",\r\n  0x02a0,\r\n  \"qmonospace\",\r\n  0xff51,\r\n  \"qof\",\r\n  0x05e7,\r\n  \"qofdagesh\",\r\n  0xfb47,\r\n  \"qofdageshhebrew\",\r\n  0xfb47,\r\n  \"qofhebrew\",\r\n  0x05e7,\r\n  \"qparen\",\r\n  0x24ac,\r\n  \"quarternote\",\r\n  0x2669,\r\n  \"qubuts\",\r\n  0x05bb,\r\n  \"qubuts18\",\r\n  0x05bb,\r\n  \"qubuts25\",\r\n  0x05bb,\r\n  \"qubuts31\",\r\n  0x05bb,\r\n  \"qubutshebrew\",\r\n  0x05bb,\r\n  \"qubutsnarrowhebrew\",\r\n  0x05bb,\r\n  \"qubutsquarterhebrew\",\r\n  0x05bb,\r\n  \"qubutswidehebrew\",\r\n  0x05bb,\r\n  \"question\",\r\n  0x003f,\r\n  \"questionarabic\",\r\n  0x061f,\r\n  \"questionarmenian\",\r\n  0x055e,\r\n  \"questiondown\",\r\n  0x00bf,\r\n  \"questiondownsmall\",\r\n  0xf7bf,\r\n  \"questiongreek\",\r\n  0x037e,\r\n  \"questionmonospace\",\r\n  0xff1f,\r\n  \"questionsmall\",\r\n  0xf73f,\r\n  \"quotedbl\",\r\n  0x0022,\r\n  \"quotedblbase\",\r\n  0x201e,\r\n  \"quotedblleft\",\r\n  0x201c,\r\n  \"quotedblmonospace\",\r\n  0xff02,\r\n  \"quotedblprime\",\r\n  0x301e,\r\n  \"quotedblprimereversed\",\r\n  0x301d,\r\n  \"quotedblright\",\r\n  0x201d,\r\n  \"quoteleft\",\r\n  0x2018,\r\n  \"quoteleftreversed\",\r\n  0x201b,\r\n  \"quotereversed\",\r\n  0x201b,\r\n  \"quoteright\",\r\n  0x2019,\r\n  \"quoterightn\",\r\n  0x0149,\r\n  \"quotesinglbase\",\r\n  0x201a,\r\n  \"quotesingle\",\r\n  0x0027,\r\n  \"quotesinglemonospace\",\r\n  0xff07,\r\n  \"r\",\r\n  0x0072,\r\n  \"raarmenian\",\r\n  0x057c,\r\n  \"rabengali\",\r\n  0x09b0,\r\n  \"racute\",\r\n  0x0155,\r\n  \"radeva\",\r\n  0x0930,\r\n  \"radical\",\r\n  0x221a,\r\n  \"radicalex\",\r\n  0xf8e5,\r\n  \"radoverssquare\",\r\n  0x33ae,\r\n  \"radoverssquaredsquare\",\r\n  0x33af,\r\n  \"radsquare\",\r\n  0x33ad,\r\n  \"rafe\",\r\n  0x05bf,\r\n  \"rafehebrew\",\r\n  0x05bf,\r\n  \"ragujarati\",\r\n  0x0ab0,\r\n  \"ragurmukhi\",\r\n  0x0a30,\r\n  \"rahiragana\",\r\n  0x3089,\r\n  \"rakatakana\",\r\n  0x30e9,\r\n  \"rakatakanahalfwidth\",\r\n  0xff97,\r\n  \"ralowerdiagonalbengali\",\r\n  0x09f1,\r\n  \"ramiddlediagonalbengali\",\r\n  0x09f0,\r\n  \"ramshorn\",\r\n  0x0264,\r\n  \"ratio\",\r\n  0x2236,\r\n  \"rbopomofo\",\r\n  0x3116,\r\n  \"rcaron\",\r\n  0x0159,\r\n  \"rcedilla\",\r\n  0x0157,\r\n  \"rcircle\",\r\n  0x24e1,\r\n  \"rcommaaccent\",\r\n  0x0157,\r\n  \"rdblgrave\",\r\n  0x0211,\r\n  \"rdotaccent\",\r\n  0x1e59,\r\n  \"rdotbelow\",\r\n  0x1e5b,\r\n  \"rdotbelowmacron\",\r\n  0x1e5d,\r\n  \"referencemark\",\r\n  0x203b,\r\n  \"reflexsubset\",\r\n  0x2286,\r\n  \"reflexsuperset\",\r\n  0x2287,\r\n  \"registered\",\r\n  0x00ae,\r\n  \"registersans\",\r\n  0xf8e8,\r\n  \"registerserif\",\r\n  0xf6da,\r\n  \"reharabic\",\r\n  0x0631,\r\n  \"reharmenian\",\r\n  0x0580,\r\n  \"rehfinalarabic\",\r\n  0xfeae,\r\n  \"rehiragana\",\r\n  0x308c,\r\n  \"rekatakana\",\r\n  0x30ec,\r\n  \"rekatakanahalfwidth\",\r\n  0xff9a,\r\n  \"resh\",\r\n  0x05e8,\r\n  \"reshdageshhebrew\",\r\n  0xfb48,\r\n  \"reshhebrew\",\r\n  0x05e8,\r\n  \"reversedtilde\",\r\n  0x223d,\r\n  \"reviahebrew\",\r\n  0x0597,\r\n  \"reviamugrashhebrew\",\r\n  0x0597,\r\n  \"revlogicalnot\",\r\n  0x2310,\r\n  \"rfishhook\",\r\n  0x027e,\r\n  \"rfishhookreversed\",\r\n  0x027f,\r\n  \"rhabengali\",\r\n  0x09dd,\r\n  \"rhadeva\",\r\n  0x095d,\r\n  \"rho\",\r\n  0x03c1,\r\n  \"rhook\",\r\n  0x027d,\r\n  \"rhookturned\",\r\n  0x027b,\r\n  \"rhookturnedsuperior\",\r\n  0x02b5,\r\n  \"rhosymbolgreek\",\r\n  0x03f1,\r\n  \"rhotichookmod\",\r\n  0x02de,\r\n  \"rieulacirclekorean\",\r\n  0x3271,\r\n  \"rieulaparenkorean\",\r\n  0x3211,\r\n  \"rieulcirclekorean\",\r\n  0x3263,\r\n  \"rieulhieuhkorean\",\r\n  0x3140,\r\n  \"rieulkiyeokkorean\",\r\n  0x313a,\r\n  \"rieulkiyeoksioskorean\",\r\n  0x3169,\r\n  \"rieulkorean\",\r\n  0x3139,\r\n  \"rieulmieumkorean\",\r\n  0x313b,\r\n  \"rieulpansioskorean\",\r\n  0x316c,\r\n  \"rieulparenkorean\",\r\n  0x3203,\r\n  \"rieulphieuphkorean\",\r\n  0x313f,\r\n  \"rieulpieupkorean\",\r\n  0x313c,\r\n  \"rieulpieupsioskorean\",\r\n  0x316b,\r\n  \"rieulsioskorean\",\r\n  0x313d,\r\n  \"rieulthieuthkorean\",\r\n  0x313e,\r\n  \"rieultikeutkorean\",\r\n  0x316a,\r\n  \"rieulyeorinhieuhkorean\",\r\n  0x316d,\r\n  \"rightangle\",\r\n  0x221f,\r\n  \"righttackbelowcmb\",\r\n  0x0319,\r\n  \"righttriangle\",\r\n  0x22bf,\r\n  \"rihiragana\",\r\n  0x308a,\r\n  \"rikatakana\",\r\n  0x30ea,\r\n  \"rikatakanahalfwidth\",\r\n  0xff98,\r\n  \"ring\",\r\n  0x02da,\r\n  \"ringbelowcmb\",\r\n  0x0325,\r\n  \"ringcmb\",\r\n  0x030a,\r\n  \"ringhalfleft\",\r\n  0x02bf,\r\n  \"ringhalfleftarmenian\",\r\n  0x0559,\r\n  \"ringhalfleftbelowcmb\",\r\n  0x031c,\r\n  \"ringhalfleftcentered\",\r\n  0x02d3,\r\n  \"ringhalfright\",\r\n  0x02be,\r\n  \"ringhalfrightbelowcmb\",\r\n  0x0339,\r\n  \"ringhalfrightcentered\",\r\n  0x02d2,\r\n  \"rinvertedbreve\",\r\n  0x0213,\r\n  \"rittorusquare\",\r\n  0x3351,\r\n  \"rlinebelow\",\r\n  0x1e5f,\r\n  \"rlongleg\",\r\n  0x027c,\r\n  \"rlonglegturned\",\r\n  0x027a,\r\n  \"rmonospace\",\r\n  0xff52,\r\n  \"rohiragana\",\r\n  0x308d,\r\n  \"rokatakana\",\r\n  0x30ed,\r\n  \"rokatakanahalfwidth\",\r\n  0xff9b,\r\n  \"roruathai\",\r\n  0x0e23,\r\n  \"rparen\",\r\n  0x24ad,\r\n  \"rrabengali\",\r\n  0x09dc,\r\n  \"rradeva\",\r\n  0x0931,\r\n  \"rragurmukhi\",\r\n  0x0a5c,\r\n  \"rreharabic\",\r\n  0x0691,\r\n  \"rrehfinalarabic\",\r\n  0xfb8d,\r\n  \"rrvocalicbengali\",\r\n  0x09e0,\r\n  \"rrvocalicdeva\",\r\n  0x0960,\r\n  \"rrvocalicgujarati\",\r\n  0x0ae0,\r\n  \"rrvocalicvowelsignbengali\",\r\n  0x09c4,\r\n  \"rrvocalicvowelsigndeva\",\r\n  0x0944,\r\n  \"rrvocalicvowelsigngujarati\",\r\n  0x0ac4,\r\n  \"rsuperior\",\r\n  0xf6f1,\r\n  \"rtblock\",\r\n  0x2590,\r\n  \"rturned\",\r\n  0x0279,\r\n  \"rturnedsuperior\",\r\n  0x02b4,\r\n  \"ruhiragana\",\r\n  0x308b,\r\n  \"rukatakana\",\r\n  0x30eb,\r\n  \"rukatakanahalfwidth\",\r\n  0xff99,\r\n  \"rupeemarkbengali\",\r\n  0x09f2,\r\n  \"rupeesignbengali\",\r\n  0x09f3,\r\n  \"rupiah\",\r\n  0xf6dd,\r\n  \"ruthai\",\r\n  0x0e24,\r\n  \"rvocalicbengali\",\r\n  0x098b,\r\n  \"rvocalicdeva\",\r\n  0x090b,\r\n  \"rvocalicgujarati\",\r\n  0x0a8b,\r\n  \"rvocalicvowelsignbengali\",\r\n  0x09c3,\r\n  \"rvocalicvowelsigndeva\",\r\n  0x0943,\r\n  \"rvocalicvowelsigngujarati\",\r\n  0x0ac3,\r\n  \"s\",\r\n  0x0073,\r\n  \"sabengali\",\r\n  0x09b8,\r\n  \"sacute\",\r\n  0x015b,\r\n  \"sacutedotaccent\",\r\n  0x1e65,\r\n  \"sadarabic\",\r\n  0x0635,\r\n  \"sadeva\",\r\n  0x0938,\r\n  \"sadfinalarabic\",\r\n  0xfeba,\r\n  \"sadinitialarabic\",\r\n  0xfebb,\r\n  \"sadmedialarabic\",\r\n  0xfebc,\r\n  \"sagujarati\",\r\n  0x0ab8,\r\n  \"sagurmukhi\",\r\n  0x0a38,\r\n  \"sahiragana\",\r\n  0x3055,\r\n  \"sakatakana\",\r\n  0x30b5,\r\n  \"sakatakanahalfwidth\",\r\n  0xff7b,\r\n  \"sallallahoualayhewasallamarabic\",\r\n  0xfdfa,\r\n  \"samekh\",\r\n  0x05e1,\r\n  \"samekhdagesh\",\r\n  0xfb41,\r\n  \"samekhdageshhebrew\",\r\n  0xfb41,\r\n  \"samekhhebrew\",\r\n  0x05e1,\r\n  \"saraaathai\",\r\n  0x0e32,\r\n  \"saraaethai\",\r\n  0x0e41,\r\n  \"saraaimaimalaithai\",\r\n  0x0e44,\r\n  \"saraaimaimuanthai\",\r\n  0x0e43,\r\n  \"saraamthai\",\r\n  0x0e33,\r\n  \"saraathai\",\r\n  0x0e30,\r\n  \"saraethai\",\r\n  0x0e40,\r\n  \"saraiileftthai\",\r\n  0xf886,\r\n  \"saraiithai\",\r\n  0x0e35,\r\n  \"saraileftthai\",\r\n  0xf885,\r\n  \"saraithai\",\r\n  0x0e34,\r\n  \"saraothai\",\r\n  0x0e42,\r\n  \"saraueeleftthai\",\r\n  0xf888,\r\n  \"saraueethai\",\r\n  0x0e37,\r\n  \"saraueleftthai\",\r\n  0xf887,\r\n  \"sarauethai\",\r\n  0x0e36,\r\n  \"sarauthai\",\r\n  0x0e38,\r\n  \"sarauuthai\",\r\n  0x0e39,\r\n  \"sbopomofo\",\r\n  0x3119,\r\n  \"scaron\",\r\n  0x0161,\r\n  \"scarondotaccent\",\r\n  0x1e67,\r\n  \"scedilla\",\r\n  0x015f,\r\n  \"schwa\",\r\n  0x0259,\r\n  \"schwacyrillic\",\r\n  0x04d9,\r\n  \"schwadieresiscyrillic\",\r\n  0x04db,\r\n  \"schwahook\",\r\n  0x025a,\r\n  \"scircle\",\r\n  0x24e2,\r\n  \"scircumflex\",\r\n  0x015d,\r\n  \"scommaaccent\",\r\n  0x0219,\r\n  \"sdotaccent\",\r\n  0x1e61,\r\n  \"sdotbelow\",\r\n  0x1e63,\r\n  \"sdotbelowdotaccent\",\r\n  0x1e69,\r\n  \"seagullbelowcmb\",\r\n  0x033c,\r\n  \"second\",\r\n  0x2033,\r\n  \"secondtonechinese\",\r\n  0x02ca,\r\n  \"section\",\r\n  0x00a7,\r\n  \"seenarabic\",\r\n  0x0633,\r\n  \"seenfinalarabic\",\r\n  0xfeb2,\r\n  \"seeninitialarabic\",\r\n  0xfeb3,\r\n  \"seenmedialarabic\",\r\n  0xfeb4,\r\n  \"segol\",\r\n  0x05b6,\r\n  \"segol13\",\r\n  0x05b6,\r\n  \"segol1f\",\r\n  0x05b6,\r\n  \"segol2c\",\r\n  0x05b6,\r\n  \"segolhebrew\",\r\n  0x05b6,\r\n  \"segolnarrowhebrew\",\r\n  0x05b6,\r\n  \"segolquarterhebrew\",\r\n  0x05b6,\r\n  \"segoltahebrew\",\r\n  0x0592,\r\n  \"segolwidehebrew\",\r\n  0x05b6,\r\n  \"seharmenian\",\r\n  0x057d,\r\n  \"sehiragana\",\r\n  0x305b,\r\n  \"sekatakana\",\r\n  0x30bb,\r\n  \"sekatakanahalfwidth\",\r\n  0xff7e,\r\n  \"semicolon\",\r\n  0x003b,\r\n  \"semicolonarabic\",\r\n  0x061b,\r\n  \"semicolonmonospace\",\r\n  0xff1b,\r\n  \"semicolonsmall\",\r\n  0xfe54,\r\n  \"semivoicedmarkkana\",\r\n  0x309c,\r\n  \"semivoicedmarkkanahalfwidth\",\r\n  0xff9f,\r\n  \"sentisquare\",\r\n  0x3322,\r\n  \"sentosquare\",\r\n  0x3323,\r\n  \"seven\",\r\n  0x0037,\r\n  \"sevenarabic\",\r\n  0x0667,\r\n  \"sevenbengali\",\r\n  0x09ed,\r\n  \"sevencircle\",\r\n  0x2466,\r\n  \"sevencircleinversesansserif\",\r\n  0x2790,\r\n  \"sevendeva\",\r\n  0x096d,\r\n  \"seveneighths\",\r\n  0x215e,\r\n  \"sevengujarati\",\r\n  0x0aed,\r\n  \"sevengurmukhi\",\r\n  0x0a6d,\r\n  \"sevenhackarabic\",\r\n  0x0667,\r\n  \"sevenhangzhou\",\r\n  0x3027,\r\n  \"sevenideographicparen\",\r\n  0x3226,\r\n  \"seveninferior\",\r\n  0x2087,\r\n  \"sevenmonospace\",\r\n  0xff17,\r\n  \"sevenoldstyle\",\r\n  0xf737,\r\n  \"sevenparen\",\r\n  0x247a,\r\n  \"sevenperiod\",\r\n  0x248e,\r\n  \"sevenpersian\",\r\n  0x06f7,\r\n  \"sevenroman\",\r\n  0x2176,\r\n  \"sevensuperior\",\r\n  0x2077,\r\n  \"seventeencircle\",\r\n  0x2470,\r\n  \"seventeenparen\",\r\n  0x2484,\r\n  \"seventeenperiod\",\r\n  0x2498,\r\n  \"seventhai\",\r\n  0x0e57,\r\n  \"sfthyphen\",\r\n  0x00ad,\r\n  \"shaarmenian\",\r\n  0x0577,\r\n  \"shabengali\",\r\n  0x09b6,\r\n  \"shacyrillic\",\r\n  0x0448,\r\n  \"shaddaarabic\",\r\n  0x0651,\r\n  \"shaddadammaarabic\",\r\n  0xfc61,\r\n  \"shaddadammatanarabic\",\r\n  0xfc5e,\r\n  \"shaddafathaarabic\",\r\n  0xfc60,\r\n  \"shaddakasraarabic\",\r\n  0xfc62,\r\n  \"shaddakasratanarabic\",\r\n  0xfc5f,\r\n  \"shade\",\r\n  0x2592,\r\n  \"shadedark\",\r\n  0x2593,\r\n  \"shadelight\",\r\n  0x2591,\r\n  \"shademedium\",\r\n  0x2592,\r\n  \"shadeva\",\r\n  0x0936,\r\n  \"shagujarati\",\r\n  0x0ab6,\r\n  \"shagurmukhi\",\r\n  0x0a36,\r\n  \"shalshelethebrew\",\r\n  0x0593,\r\n  \"shbopomofo\",\r\n  0x3115,\r\n  \"shchacyrillic\",\r\n  0x0449,\r\n  \"sheenarabic\",\r\n  0x0634,\r\n  \"sheenfinalarabic\",\r\n  0xfeb6,\r\n  \"sheeninitialarabic\",\r\n  0xfeb7,\r\n  \"sheenmedialarabic\",\r\n  0xfeb8,\r\n  \"sheicoptic\",\r\n  0x03e3,\r\n  \"sheqel\",\r\n  0x20aa,\r\n  \"sheqelhebrew\",\r\n  0x20aa,\r\n  \"sheva\",\r\n  0x05b0,\r\n  \"sheva115\",\r\n  0x05b0,\r\n  \"sheva15\",\r\n  0x05b0,\r\n  \"sheva22\",\r\n  0x05b0,\r\n  \"sheva2e\",\r\n  0x05b0,\r\n  \"shevahebrew\",\r\n  0x05b0,\r\n  \"shevanarrowhebrew\",\r\n  0x05b0,\r\n  \"shevaquarterhebrew\",\r\n  0x05b0,\r\n  \"shevawidehebrew\",\r\n  0x05b0,\r\n  \"shhacyrillic\",\r\n  0x04bb,\r\n  \"shimacoptic\",\r\n  0x03ed,\r\n  \"shin\",\r\n  0x05e9,\r\n  \"shindagesh\",\r\n  0xfb49,\r\n  \"shindageshhebrew\",\r\n  0xfb49,\r\n  \"shindageshshindot\",\r\n  0xfb2c,\r\n  \"shindageshshindothebrew\",\r\n  0xfb2c,\r\n  \"shindageshsindot\",\r\n  0xfb2d,\r\n  \"shindageshsindothebrew\",\r\n  0xfb2d,\r\n  \"shindothebrew\",\r\n  0x05c1,\r\n  \"shinhebrew\",\r\n  0x05e9,\r\n  \"shinshindot\",\r\n  0xfb2a,\r\n  \"shinshindothebrew\",\r\n  0xfb2a,\r\n  \"shinsindot\",\r\n  0xfb2b,\r\n  \"shinsindothebrew\",\r\n  0xfb2b,\r\n  \"shook\",\r\n  0x0282,\r\n  \"sigma\",\r\n  0x03c3,\r\n  \"sigma1\",\r\n  0x03c2,\r\n  \"sigmafinal\",\r\n  0x03c2,\r\n  \"sigmalunatesymbolgreek\",\r\n  0x03f2,\r\n  \"sihiragana\",\r\n  0x3057,\r\n  \"sikatakana\",\r\n  0x30b7,\r\n  \"sikatakanahalfwidth\",\r\n  0xff7c,\r\n  \"siluqhebrew\",\r\n  0x05bd,\r\n  \"siluqlefthebrew\",\r\n  0x05bd,\r\n  \"similar\",\r\n  0x223c,\r\n  \"sindothebrew\",\r\n  0x05c2,\r\n  \"siosacirclekorean\",\r\n  0x3274,\r\n  \"siosaparenkorean\",\r\n  0x3214,\r\n  \"sioscieuckorean\",\r\n  0x317e,\r\n  \"sioscirclekorean\",\r\n  0x3266,\r\n  \"sioskiyeokkorean\",\r\n  0x317a,\r\n  \"sioskorean\",\r\n  0x3145,\r\n  \"siosnieunkorean\",\r\n  0x317b,\r\n  \"siosparenkorean\",\r\n  0x3206,\r\n  \"siospieupkorean\",\r\n  0x317d,\r\n  \"siostikeutkorean\",\r\n  0x317c,\r\n  \"six\",\r\n  0x0036,\r\n  \"sixarabic\",\r\n  0x0666,\r\n  \"sixbengali\",\r\n  0x09ec,\r\n  \"sixcircle\",\r\n  0x2465,\r\n  \"sixcircleinversesansserif\",\r\n  0x278f,\r\n  \"sixdeva\",\r\n  0x096c,\r\n  \"sixgujarati\",\r\n  0x0aec,\r\n  \"sixgurmukhi\",\r\n  0x0a6c,\r\n  \"sixhackarabic\",\r\n  0x0666,\r\n  \"sixhangzhou\",\r\n  0x3026,\r\n  \"sixideographicparen\",\r\n  0x3225,\r\n  \"sixinferior\",\r\n  0x2086,\r\n  \"sixmonospace\",\r\n  0xff16,\r\n  \"sixoldstyle\",\r\n  0xf736,\r\n  \"sixparen\",\r\n  0x2479,\r\n  \"sixperiod\",\r\n  0x248d,\r\n  \"sixpersian\",\r\n  0x06f6,\r\n  \"sixroman\",\r\n  0x2175,\r\n  \"sixsuperior\",\r\n  0x2076,\r\n  \"sixteencircle\",\r\n  0x246f,\r\n  \"sixteencurrencydenominatorbengali\",\r\n  0x09f9,\r\n  \"sixteenparen\",\r\n  0x2483,\r\n  \"sixteenperiod\",\r\n  0x2497,\r\n  \"sixthai\",\r\n  0x0e56,\r\n  \"slash\",\r\n  0x002f,\r\n  \"slashmonospace\",\r\n  0xff0f,\r\n  \"slong\",\r\n  0x017f,\r\n  \"slongdotaccent\",\r\n  0x1e9b,\r\n  \"smileface\",\r\n  0x263a,\r\n  \"smonospace\",\r\n  0xff53,\r\n  \"sofpasuqhebrew\",\r\n  0x05c3,\r\n  \"softhyphen\",\r\n  0x00ad,\r\n  \"softsigncyrillic\",\r\n  0x044c,\r\n  \"sohiragana\",\r\n  0x305d,\r\n  \"sokatakana\",\r\n  0x30bd,\r\n  \"sokatakanahalfwidth\",\r\n  0xff7f,\r\n  \"soliduslongoverlaycmb\",\r\n  0x0338,\r\n  \"solidusshortoverlaycmb\",\r\n  0x0337,\r\n  \"sorusithai\",\r\n  0x0e29,\r\n  \"sosalathai\",\r\n  0x0e28,\r\n  \"sosothai\",\r\n  0x0e0b,\r\n  \"sosuathai\",\r\n  0x0e2a,\r\n  \"space\",\r\n  0x0020,\r\n  \"spacehackarabic\",\r\n  0x0020,\r\n  \"spade\",\r\n  0x2660,\r\n  \"spadesuitblack\",\r\n  0x2660,\r\n  \"spadesuitwhite\",\r\n  0x2664,\r\n  \"sparen\",\r\n  0x24ae,\r\n  \"squarebelowcmb\",\r\n  0x033b,\r\n  \"squarecc\",\r\n  0x33c4,\r\n  \"squarecm\",\r\n  0x339d,\r\n  \"squarediagonalcrosshatchfill\",\r\n  0x25a9,\r\n  \"squarehorizontalfill\",\r\n  0x25a4,\r\n  \"squarekg\",\r\n  0x338f,\r\n  \"squarekm\",\r\n  0x339e,\r\n  \"squarekmcapital\",\r\n  0x33ce,\r\n  \"squareln\",\r\n  0x33d1,\r\n  \"squarelog\",\r\n  0x33d2,\r\n  \"squaremg\",\r\n  0x338e,\r\n  \"squaremil\",\r\n  0x33d5,\r\n  \"squaremm\",\r\n  0x339c,\r\n  \"squaremsquared\",\r\n  0x33a1,\r\n  \"squareorthogonalcrosshatchfill\",\r\n  0x25a6,\r\n  \"squareupperlefttolowerrightfill\",\r\n  0x25a7,\r\n  \"squareupperrighttolowerleftfill\",\r\n  0x25a8,\r\n  \"squareverticalfill\",\r\n  0x25a5,\r\n  \"squarewhitewithsmallblack\",\r\n  0x25a3,\r\n  \"srsquare\",\r\n  0x33db,\r\n  \"ssabengali\",\r\n  0x09b7,\r\n  \"ssadeva\",\r\n  0x0937,\r\n  \"ssagujarati\",\r\n  0x0ab7,\r\n  \"ssangcieuckorean\",\r\n  0x3149,\r\n  \"ssanghieuhkorean\",\r\n  0x3185,\r\n  \"ssangieungkorean\",\r\n  0x3180,\r\n  \"ssangkiyeokkorean\",\r\n  0x3132,\r\n  \"ssangnieunkorean\",\r\n  0x3165,\r\n  \"ssangpieupkorean\",\r\n  0x3143,\r\n  \"ssangsioskorean\",\r\n  0x3146,\r\n  \"ssangtikeutkorean\",\r\n  0x3138,\r\n  \"ssuperior\",\r\n  0xf6f2,\r\n  \"sterling\",\r\n  0x00a3,\r\n  \"sterlingmonospace\",\r\n  0xffe1,\r\n  \"strokelongoverlaycmb\",\r\n  0x0336,\r\n  \"strokeshortoverlaycmb\",\r\n  0x0335,\r\n  \"subset\",\r\n  0x2282,\r\n  \"subsetnotequal\",\r\n  0x228a,\r\n  \"subsetorequal\",\r\n  0x2286,\r\n  \"succeeds\",\r\n  0x227b,\r\n  \"suchthat\",\r\n  0x220b,\r\n  \"suhiragana\",\r\n  0x3059,\r\n  \"sukatakana\",\r\n  0x30b9,\r\n  \"sukatakanahalfwidth\",\r\n  0xff7d,\r\n  \"sukunarabic\",\r\n  0x0652,\r\n  \"summation\",\r\n  0x2211,\r\n  \"sun\",\r\n  0x263c,\r\n  \"superset\",\r\n  0x2283,\r\n  \"supersetnotequal\",\r\n  0x228b,\r\n  \"supersetorequal\",\r\n  0x2287,\r\n  \"svsquare\",\r\n  0x33dc,\r\n  \"syouwaerasquare\",\r\n  0x337c,\r\n  \"t\",\r\n  0x0074,\r\n  \"tabengali\",\r\n  0x09a4,\r\n  \"tackdown\",\r\n  0x22a4,\r\n  \"tackleft\",\r\n  0x22a3,\r\n  \"tadeva\",\r\n  0x0924,\r\n  \"tagujarati\",\r\n  0x0aa4,\r\n  \"tagurmukhi\",\r\n  0x0a24,\r\n  \"taharabic\",\r\n  0x0637,\r\n  \"tahfinalarabic\",\r\n  0xfec2,\r\n  \"tahinitialarabic\",\r\n  0xfec3,\r\n  \"tahiragana\",\r\n  0x305f,\r\n  \"tahmedialarabic\",\r\n  0xfec4,\r\n  \"taisyouerasquare\",\r\n  0x337d,\r\n  \"takatakana\",\r\n  0x30bf,\r\n  \"takatakanahalfwidth\",\r\n  0xff80,\r\n  \"tatweelarabic\",\r\n  0x0640,\r\n  \"tau\",\r\n  0x03c4,\r\n  \"tav\",\r\n  0x05ea,\r\n  \"tavdages\",\r\n  0xfb4a,\r\n  \"tavdagesh\",\r\n  0xfb4a,\r\n  \"tavdageshhebrew\",\r\n  0xfb4a,\r\n  \"tavhebrew\",\r\n  0x05ea,\r\n  \"tbar\",\r\n  0x0167,\r\n  \"tbopomofo\",\r\n  0x310a,\r\n  \"tcaron\",\r\n  0x0165,\r\n  \"tccurl\",\r\n  0x02a8,\r\n  \"tcedilla\",\r\n  0x0163,\r\n  \"tcheharabic\",\r\n  0x0686,\r\n  \"tchehfinalarabic\",\r\n  0xfb7b,\r\n  \"tchehinitialarabic\",\r\n  0xfb7c,\r\n  \"tchehmedialarabic\",\r\n  0xfb7d,\r\n  \"tcircle\",\r\n  0x24e3,\r\n  \"tcircumflexbelow\",\r\n  0x1e71,\r\n  \"tcommaaccent\",\r\n  0x0163,\r\n  \"tdieresis\",\r\n  0x1e97,\r\n  \"tdotaccent\",\r\n  0x1e6b,\r\n  \"tdotbelow\",\r\n  0x1e6d,\r\n  \"tecyrillic\",\r\n  0x0442,\r\n  \"tedescendercyrillic\",\r\n  0x04ad,\r\n  \"teharabic\",\r\n  0x062a,\r\n  \"tehfinalarabic\",\r\n  0xfe96,\r\n  \"tehhahinitialarabic\",\r\n  0xfca2,\r\n  \"tehhahisolatedarabic\",\r\n  0xfc0c,\r\n  \"tehinitialarabic\",\r\n  0xfe97,\r\n  \"tehiragana\",\r\n  0x3066,\r\n  \"tehjeeminitialarabic\",\r\n  0xfca1,\r\n  \"tehjeemisolatedarabic\",\r\n  0xfc0b,\r\n  \"tehmarbutaarabic\",\r\n  0x0629,\r\n  \"tehmarbutafinalarabic\",\r\n  0xfe94,\r\n  \"tehmedialarabic\",\r\n  0xfe98,\r\n  \"tehmeeminitialarabic\",\r\n  0xfca4,\r\n  \"tehmeemisolatedarabic\",\r\n  0xfc0e,\r\n  \"tehnoonfinalarabic\",\r\n  0xfc73,\r\n  \"tekatakana\",\r\n  0x30c6,\r\n  \"tekatakanahalfwidth\",\r\n  0xff83,\r\n  \"telephone\",\r\n  0x2121,\r\n  \"telephoneblack\",\r\n  0x260e,\r\n  \"telishagedolahebrew\",\r\n  0x05a0,\r\n  \"telishaqetanahebrew\",\r\n  0x05a9,\r\n  \"tencircle\",\r\n  0x2469,\r\n  \"tenideographicparen\",\r\n  0x3229,\r\n  \"tenparen\",\r\n  0x247d,\r\n  \"tenperiod\",\r\n  0x2491,\r\n  \"tenroman\",\r\n  0x2179,\r\n  \"tesh\",\r\n  0x02a7,\r\n  \"tet\",\r\n  0x05d8,\r\n  \"tetdagesh\",\r\n  0xfb38,\r\n  \"tetdageshhebrew\",\r\n  0xfb38,\r\n  \"tethebrew\",\r\n  0x05d8,\r\n  \"tetsecyrillic\",\r\n  0x04b5,\r\n  \"tevirhebrew\",\r\n  0x059b,\r\n  \"tevirlefthebrew\",\r\n  0x059b,\r\n  \"thabengali\",\r\n  0x09a5,\r\n  \"thadeva\",\r\n  0x0925,\r\n  \"thagujarati\",\r\n  0x0aa5,\r\n  \"thagurmukhi\",\r\n  0x0a25,\r\n  \"thalarabic\",\r\n  0x0630,\r\n  \"thalfinalarabic\",\r\n  0xfeac,\r\n  \"thanthakhatlowleftthai\",\r\n  0xf898,\r\n  \"thanthakhatlowrightthai\",\r\n  0xf897,\r\n  \"thanthakhatthai\",\r\n  0x0e4c,\r\n  \"thanthakhatupperleftthai\",\r\n  0xf896,\r\n  \"theharabic\",\r\n  0x062b,\r\n  \"thehfinalarabic\",\r\n  0xfe9a,\r\n  \"thehinitialarabic\",\r\n  0xfe9b,\r\n  \"thehmedialarabic\",\r\n  0xfe9c,\r\n  \"thereexists\",\r\n  0x2203,\r\n  \"therefore\",\r\n  0x2234,\r\n  \"theta\",\r\n  0x03b8,\r\n  \"theta1\",\r\n  0x03d1,\r\n  \"thetasymbolgreek\",\r\n  0x03d1,\r\n  \"thieuthacirclekorean\",\r\n  0x3279,\r\n  \"thieuthaparenkorean\",\r\n  0x3219,\r\n  \"thieuthcirclekorean\",\r\n  0x326b,\r\n  \"thieuthkorean\",\r\n  0x314c,\r\n  \"thieuthparenkorean\",\r\n  0x320b,\r\n  \"thirteencircle\",\r\n  0x246c,\r\n  \"thirteenparen\",\r\n  0x2480,\r\n  \"thirteenperiod\",\r\n  0x2494,\r\n  \"thonangmonthothai\",\r\n  0x0e11,\r\n  \"thook\",\r\n  0x01ad,\r\n  \"thophuthaothai\",\r\n  0x0e12,\r\n  \"thorn\",\r\n  0x00fe,\r\n  \"thothahanthai\",\r\n  0x0e17,\r\n  \"thothanthai\",\r\n  0x0e10,\r\n  \"thothongthai\",\r\n  0x0e18,\r\n  \"thothungthai\",\r\n  0x0e16,\r\n  \"thousandcyrillic\",\r\n  0x0482,\r\n  \"thousandsseparatorarabic\",\r\n  0x066c,\r\n  \"thousandsseparatorpersian\",\r\n  0x066c,\r\n  \"three\",\r\n  0x0033,\r\n  \"threearabic\",\r\n  0x0663,\r\n  \"threebengali\",\r\n  0x09e9,\r\n  \"threecircle\",\r\n  0x2462,\r\n  \"threecircleinversesansserif\",\r\n  0x278c,\r\n  \"threedeva\",\r\n  0x0969,\r\n  \"threeeighths\",\r\n  0x215c,\r\n  \"threegujarati\",\r\n  0x0ae9,\r\n  \"threegurmukhi\",\r\n  0x0a69,\r\n  \"threehackarabic\",\r\n  0x0663,\r\n  \"threehangzhou\",\r\n  0x3023,\r\n  \"threeideographicparen\",\r\n  0x3222,\r\n  \"threeinferior\",\r\n  0x2083,\r\n  \"threemonospace\",\r\n  0xff13,\r\n  \"threenumeratorbengali\",\r\n  0x09f6,\r\n  \"threeoldstyle\",\r\n  0xf733,\r\n  \"threeparen\",\r\n  0x2476,\r\n  \"threeperiod\",\r\n  0x248a,\r\n  \"threepersian\",\r\n  0x06f3,\r\n  \"threequarters\",\r\n  0x00be,\r\n  \"threequartersemdash\",\r\n  0xf6de,\r\n  \"threeroman\",\r\n  0x2172,\r\n  \"threesuperior\",\r\n  0x00b3,\r\n  \"threethai\",\r\n  0x0e53,\r\n  \"thzsquare\",\r\n  0x3394,\r\n  \"tihiragana\",\r\n  0x3061,\r\n  \"tikatakana\",\r\n  0x30c1,\r\n  \"tikatakanahalfwidth\",\r\n  0xff81,\r\n  \"tikeutacirclekorean\",\r\n  0x3270,\r\n  \"tikeutaparenkorean\",\r\n  0x3210,\r\n  \"tikeutcirclekorean\",\r\n  0x3262,\r\n  \"tikeutkorean\",\r\n  0x3137,\r\n  \"tikeutparenkorean\",\r\n  0x3202,\r\n  \"tilde\",\r\n  0x02dc,\r\n  \"tildebelowcmb\",\r\n  0x0330,\r\n  \"tildecmb\",\r\n  0x0303,\r\n  \"tildecomb\",\r\n  0x0303,\r\n  \"tildedoublecmb\",\r\n  0x0360,\r\n  \"tildeoperator\",\r\n  0x223c,\r\n  \"tildeoverlaycmb\",\r\n  0x0334,\r\n  \"tildeverticalcmb\",\r\n  0x033e,\r\n  \"timescircle\",\r\n  0x2297,\r\n  \"tipehahebrew\",\r\n  0x0596,\r\n  \"tipehalefthebrew\",\r\n  0x0596,\r\n  \"tippigurmukhi\",\r\n  0x0a70,\r\n  \"titlocyrilliccmb\",\r\n  0x0483,\r\n  \"tiwnarmenian\",\r\n  0x057f,\r\n  \"tlinebelow\",\r\n  0x1e6f,\r\n  \"tmonospace\",\r\n  0xff54,\r\n  \"toarmenian\",\r\n  0x0569,\r\n  \"tohiragana\",\r\n  0x3068,\r\n  \"tokatakana\",\r\n  0x30c8,\r\n  \"tokatakanahalfwidth\",\r\n  0xff84,\r\n  \"tonebarextrahighmod\",\r\n  0x02e5,\r\n  \"tonebarextralowmod\",\r\n  0x02e9,\r\n  \"tonebarhighmod\",\r\n  0x02e6,\r\n  \"tonebarlowmod\",\r\n  0x02e8,\r\n  \"tonebarmidmod\",\r\n  0x02e7,\r\n  \"tonefive\",\r\n  0x01bd,\r\n  \"tonesix\",\r\n  0x0185,\r\n  \"tonetwo\",\r\n  0x01a8,\r\n  \"tonos\",\r\n  0x0384,\r\n  \"tonsquare\",\r\n  0x3327,\r\n  \"topatakthai\",\r\n  0x0e0f,\r\n  \"tortoiseshellbracketleft\",\r\n  0x3014,\r\n  \"tortoiseshellbracketleftsmall\",\r\n  0xfe5d,\r\n  \"tortoiseshellbracketleftvertical\",\r\n  0xfe39,\r\n  \"tortoiseshellbracketright\",\r\n  0x3015,\r\n  \"tortoiseshellbracketrightsmall\",\r\n  0xfe5e,\r\n  \"tortoiseshellbracketrightvertical\",\r\n  0xfe3a,\r\n  \"totaothai\",\r\n  0x0e15,\r\n  \"tpalatalhook\",\r\n  0x01ab,\r\n  \"tparen\",\r\n  0x24af,\r\n  \"trademark\",\r\n  0x2122,\r\n  \"trademarksans\",\r\n  0xf8ea,\r\n  \"trademarkserif\",\r\n  0xf6db,\r\n  \"tretroflexhook\",\r\n  0x0288,\r\n  \"triagdn\",\r\n  0x25bc,\r\n  \"triaglf\",\r\n  0x25c4,\r\n  \"triagrt\",\r\n  0x25ba,\r\n  \"triagup\",\r\n  0x25b2,\r\n  \"ts\",\r\n  0x02a6,\r\n  \"tsadi\",\r\n  0x05e6,\r\n  \"tsadidagesh\",\r\n  0xfb46,\r\n  \"tsadidageshhebrew\",\r\n  0xfb46,\r\n  \"tsadihebrew\",\r\n  0x05e6,\r\n  \"tsecyrillic\",\r\n  0x0446,\r\n  \"tsere\",\r\n  0x05b5,\r\n  \"tsere12\",\r\n  0x05b5,\r\n  \"tsere1e\",\r\n  0x05b5,\r\n  \"tsere2b\",\r\n  0x05b5,\r\n  \"tserehebrew\",\r\n  0x05b5,\r\n  \"tserenarrowhebrew\",\r\n  0x05b5,\r\n  \"tserequarterhebrew\",\r\n  0x05b5,\r\n  \"tserewidehebrew\",\r\n  0x05b5,\r\n  \"tshecyrillic\",\r\n  0x045b,\r\n  \"tsuperior\",\r\n  0xf6f3,\r\n  \"ttabengali\",\r\n  0x099f,\r\n  \"ttadeva\",\r\n  0x091f,\r\n  \"ttagujarati\",\r\n  0x0a9f,\r\n  \"ttagurmukhi\",\r\n  0x0a1f,\r\n  \"tteharabic\",\r\n  0x0679,\r\n  \"ttehfinalarabic\",\r\n  0xfb67,\r\n  \"ttehinitialarabic\",\r\n  0xfb68,\r\n  \"ttehmedialarabic\",\r\n  0xfb69,\r\n  \"tthabengali\",\r\n  0x09a0,\r\n  \"tthadeva\",\r\n  0x0920,\r\n  \"tthagujarati\",\r\n  0x0aa0,\r\n  \"tthagurmukhi\",\r\n  0x0a20,\r\n  \"tturned\",\r\n  0x0287,\r\n  \"tuhiragana\",\r\n  0x3064,\r\n  \"tukatakana\",\r\n  0x30c4,\r\n  \"tukatakanahalfwidth\",\r\n  0xff82,\r\n  \"tusmallhiragana\",\r\n  0x3063,\r\n  \"tusmallkatakana\",\r\n  0x30c3,\r\n  \"tusmallkatakanahalfwidth\",\r\n  0xff6f,\r\n  \"twelvecircle\",\r\n  0x246b,\r\n  \"twelveparen\",\r\n  0x247f,\r\n  \"twelveperiod\",\r\n  0x2493,\r\n  \"twelveroman\",\r\n  0x217b,\r\n  \"twentycircle\",\r\n  0x2473,\r\n  \"twentyhangzhou\",\r\n  0x5344,\r\n  \"twentyparen\",\r\n  0x2487,\r\n  \"twentyperiod\",\r\n  0x249b,\r\n  \"two\",\r\n  0x0032,\r\n  \"twoarabic\",\r\n  0x0662,\r\n  \"twobengali\",\r\n  0x09e8,\r\n  \"twocircle\",\r\n  0x2461,\r\n  \"twocircleinversesansserif\",\r\n  0x278b,\r\n  \"twodeva\",\r\n  0x0968,\r\n  \"twodotenleader\",\r\n  0x2025,\r\n  \"twodotleader\",\r\n  0x2025,\r\n  \"twodotleadervertical\",\r\n  0xfe30,\r\n  \"twogujarati\",\r\n  0x0ae8,\r\n  \"twogurmukhi\",\r\n  0x0a68,\r\n  \"twohackarabic\",\r\n  0x0662,\r\n  \"twohangzhou\",\r\n  0x3022,\r\n  \"twoideographicparen\",\r\n  0x3221,\r\n  \"twoinferior\",\r\n  0x2082,\r\n  \"twomonospace\",\r\n  0xff12,\r\n  \"twonumeratorbengali\",\r\n  0x09f5,\r\n  \"twooldstyle\",\r\n  0xf732,\r\n  \"twoparen\",\r\n  0x2475,\r\n  \"twoperiod\",\r\n  0x2489,\r\n  \"twopersian\",\r\n  0x06f2,\r\n  \"tworoman\",\r\n  0x2171,\r\n  \"twostroke\",\r\n  0x01bb,\r\n  \"twosuperior\",\r\n  0x00b2,\r\n  \"twothai\",\r\n  0x0e52,\r\n  \"twothirds\",\r\n  0x2154,\r\n  \"u\",\r\n  0x0075,\r\n  \"uacute\",\r\n  0x00fa,\r\n  \"ubar\",\r\n  0x0289,\r\n  \"ubengali\",\r\n  0x0989,\r\n  \"ubopomofo\",\r\n  0x3128,\r\n  \"ubreve\",\r\n  0x016d,\r\n  \"ucaron\",\r\n  0x01d4,\r\n  \"ucircle\",\r\n  0x24e4,\r\n  \"ucircumflex\",\r\n  0x00fb,\r\n  \"ucircumflexbelow\",\r\n  0x1e77,\r\n  \"ucyrillic\",\r\n  0x0443,\r\n  \"udattadeva\",\r\n  0x0951,\r\n  \"udblacute\",\r\n  0x0171,\r\n  \"udblgrave\",\r\n  0x0215,\r\n  \"udeva\",\r\n  0x0909,\r\n  \"udieresis\",\r\n  0x00fc,\r\n  \"udieresisacute\",\r\n  0x01d8,\r\n  \"udieresisbelow\",\r\n  0x1e73,\r\n  \"udieresiscaron\",\r\n  0x01da,\r\n  \"udieresiscyrillic\",\r\n  0x04f1,\r\n  \"udieresisgrave\",\r\n  0x01dc,\r\n  \"udieresismacron\",\r\n  0x01d6,\r\n  \"udotbelow\",\r\n  0x1ee5,\r\n  \"ugrave\",\r\n  0x00f9,\r\n  \"ugujarati\",\r\n  0x0a89,\r\n  \"ugurmukhi\",\r\n  0x0a09,\r\n  \"uhiragana\",\r\n  0x3046,\r\n  \"uhookabove\",\r\n  0x1ee7,\r\n  \"uhorn\",\r\n  0x01b0,\r\n  \"uhornacute\",\r\n  0x1ee9,\r\n  \"uhorndotbelow\",\r\n  0x1ef1,\r\n  \"uhorngrave\",\r\n  0x1eeb,\r\n  \"uhornhookabove\",\r\n  0x1eed,\r\n  \"uhorntilde\",\r\n  0x1eef,\r\n  \"uhungarumlaut\",\r\n  0x0171,\r\n  \"uhungarumlautcyrillic\",\r\n  0x04f3,\r\n  \"uinvertedbreve\",\r\n  0x0217,\r\n  \"ukatakana\",\r\n  0x30a6,\r\n  \"ukatakanahalfwidth\",\r\n  0xff73,\r\n  \"ukcyrillic\",\r\n  0x0479,\r\n  \"ukorean\",\r\n  0x315c,\r\n  \"umacron\",\r\n  0x016b,\r\n  \"umacroncyrillic\",\r\n  0x04ef,\r\n  \"umacrondieresis\",\r\n  0x1e7b,\r\n  \"umatragurmukhi\",\r\n  0x0a41,\r\n  \"umonospace\",\r\n  0xff55,\r\n  \"underscore\",\r\n  0x005f,\r\n  \"underscoredbl\",\r\n  0x2017,\r\n  \"underscoremonospace\",\r\n  0xff3f,\r\n  \"underscorevertical\",\r\n  0xfe33,\r\n  \"underscorewavy\",\r\n  0xfe4f,\r\n  \"union\",\r\n  0x222a,\r\n  \"universal\",\r\n  0x2200,\r\n  \"uogonek\",\r\n  0x0173,\r\n  \"uparen\",\r\n  0x24b0,\r\n  \"upblock\",\r\n  0x2580,\r\n  \"upperdothebrew\",\r\n  0x05c4,\r\n  \"upsilon\",\r\n  0x03c5,\r\n  \"upsilondieresis\",\r\n  0x03cb,\r\n  \"upsilondieresistonos\",\r\n  0x03b0,\r\n  \"upsilonlatin\",\r\n  0x028a,\r\n  \"upsilontonos\",\r\n  0x03cd,\r\n  \"uptackbelowcmb\",\r\n  0x031d,\r\n  \"uptackmod\",\r\n  0x02d4,\r\n  \"uragurmukhi\",\r\n  0x0a73,\r\n  \"uring\",\r\n  0x016f,\r\n  \"ushortcyrillic\",\r\n  0x045e,\r\n  \"usmallhiragana\",\r\n  0x3045,\r\n  \"usmallkatakana\",\r\n  0x30a5,\r\n  \"usmallkatakanahalfwidth\",\r\n  0xff69,\r\n  \"ustraightcyrillic\",\r\n  0x04af,\r\n  \"ustraightstrokecyrillic\",\r\n  0x04b1,\r\n  \"utilde\",\r\n  0x0169,\r\n  \"utildeacute\",\r\n  0x1e79,\r\n  \"utildebelow\",\r\n  0x1e75,\r\n  \"uubengali\",\r\n  0x098a,\r\n  \"uudeva\",\r\n  0x090a,\r\n  \"uugujarati\",\r\n  0x0a8a,\r\n  \"uugurmukhi\",\r\n  0x0a0a,\r\n  \"uumatragurmukhi\",\r\n  0x0a42,\r\n  \"uuvowelsignbengali\",\r\n  0x09c2,\r\n  \"uuvowelsigndeva\",\r\n  0x0942,\r\n  \"uuvowelsigngujarati\",\r\n  0x0ac2,\r\n  \"uvowelsignbengali\",\r\n  0x09c1,\r\n  \"uvowelsigndeva\",\r\n  0x0941,\r\n  \"uvowelsigngujarati\",\r\n  0x0ac1,\r\n  \"v\",\r\n  0x0076,\r\n  \"vadeva\",\r\n  0x0935,\r\n  \"vagujarati\",\r\n  0x0ab5,\r\n  \"vagurmukhi\",\r\n  0x0a35,\r\n  \"vakatakana\",\r\n  0x30f7,\r\n  \"vav\",\r\n  0x05d5,\r\n  \"vavdagesh\",\r\n  0xfb35,\r\n  \"vavdagesh65\",\r\n  0xfb35,\r\n  \"vavdageshhebrew\",\r\n  0xfb35,\r\n  \"vavhebrew\",\r\n  0x05d5,\r\n  \"vavholam\",\r\n  0xfb4b,\r\n  \"vavholamhebrew\",\r\n  0xfb4b,\r\n  \"vavvavhebrew\",\r\n  0x05f0,\r\n  \"vavyodhebrew\",\r\n  0x05f1,\r\n  \"vcircle\",\r\n  0x24e5,\r\n  \"vdotbelow\",\r\n  0x1e7f,\r\n  \"vecyrillic\",\r\n  0x0432,\r\n  \"veharabic\",\r\n  0x06a4,\r\n  \"vehfinalarabic\",\r\n  0xfb6b,\r\n  \"vehinitialarabic\",\r\n  0xfb6c,\r\n  \"vehmedialarabic\",\r\n  0xfb6d,\r\n  \"vekatakana\",\r\n  0x30f9,\r\n  \"venus\",\r\n  0x2640,\r\n  \"verticalbar\",\r\n  0x007c,\r\n  \"verticallineabovecmb\",\r\n  0x030d,\r\n  \"verticallinebelowcmb\",\r\n  0x0329,\r\n  \"verticallinelowmod\",\r\n  0x02cc,\r\n  \"verticallinemod\",\r\n  0x02c8,\r\n  \"vewarmenian\",\r\n  0x057e,\r\n  \"vhook\",\r\n  0x028b,\r\n  \"vikatakana\",\r\n  0x30f8,\r\n  \"viramabengali\",\r\n  0x09cd,\r\n  \"viramadeva\",\r\n  0x094d,\r\n  \"viramagujarati\",\r\n  0x0acd,\r\n  \"visargabengali\",\r\n  0x0983,\r\n  \"visargadeva\",\r\n  0x0903,\r\n  \"visargagujarati\",\r\n  0x0a83,\r\n  \"vmonospace\",\r\n  0xff56,\r\n  \"voarmenian\",\r\n  0x0578,\r\n  \"voicediterationhiragana\",\r\n  0x309e,\r\n  \"voicediterationkatakana\",\r\n  0x30fe,\r\n  \"voicedmarkkana\",\r\n  0x309b,\r\n  \"voicedmarkkanahalfwidth\",\r\n  0xff9e,\r\n  \"vokatakana\",\r\n  0x30fa,\r\n  \"vparen\",\r\n  0x24b1,\r\n  \"vtilde\",\r\n  0x1e7d,\r\n  \"vturned\",\r\n  0x028c,\r\n  \"vuhiragana\",\r\n  0x3094,\r\n  \"vukatakana\",\r\n  0x30f4,\r\n  \"w\",\r\n  0x0077,\r\n  \"wacute\",\r\n  0x1e83,\r\n  \"waekorean\",\r\n  0x3159,\r\n  \"wahiragana\",\r\n  0x308f,\r\n  \"wakatakana\",\r\n  0x30ef,\r\n  \"wakatakanahalfwidth\",\r\n  0xff9c,\r\n  \"wakorean\",\r\n  0x3158,\r\n  \"wasmallhiragana\",\r\n  0x308e,\r\n  \"wasmallkatakana\",\r\n  0x30ee,\r\n  \"wattosquare\",\r\n  0x3357,\r\n  \"wavedash\",\r\n  0x301c,\r\n  \"wavyunderscorevertical\",\r\n  0xfe34,\r\n  \"wawarabic\",\r\n  0x0648,\r\n  \"wawfinalarabic\",\r\n  0xfeee,\r\n  \"wawhamzaabovearabic\",\r\n  0x0624,\r\n  \"wawhamzaabovefinalarabic\",\r\n  0xfe86,\r\n  \"wbsquare\",\r\n  0x33dd,\r\n  \"wcircle\",\r\n  0x24e6,\r\n  \"wcircumflex\",\r\n  0x0175,\r\n  \"wdieresis\",\r\n  0x1e85,\r\n  \"wdotaccent\",\r\n  0x1e87,\r\n  \"wdotbelow\",\r\n  0x1e89,\r\n  \"wehiragana\",\r\n  0x3091,\r\n  \"weierstrass\",\r\n  0x2118,\r\n  \"wekatakana\",\r\n  0x30f1,\r\n  \"wekorean\",\r\n  0x315e,\r\n  \"weokorean\",\r\n  0x315d,\r\n  \"wgrave\",\r\n  0x1e81,\r\n  \"whitebullet\",\r\n  0x25e6,\r\n  \"whitecircle\",\r\n  0x25cb,\r\n  \"whitecircleinverse\",\r\n  0x25d9,\r\n  \"whitecornerbracketleft\",\r\n  0x300e,\r\n  \"whitecornerbracketleftvertical\",\r\n  0xfe43,\r\n  \"whitecornerbracketright\",\r\n  0x300f,\r\n  \"whitecornerbracketrightvertical\",\r\n  0xfe44,\r\n  \"whitediamond\",\r\n  0x25c7,\r\n  \"whitediamondcontainingblacksmalldiamond\",\r\n  0x25c8,\r\n  \"whitedownpointingsmalltriangle\",\r\n  0x25bf,\r\n  \"whitedownpointingtriangle\",\r\n  0x25bd,\r\n  \"whiteleftpointingsmalltriangle\",\r\n  0x25c3,\r\n  \"whiteleftpointingtriangle\",\r\n  0x25c1,\r\n  \"whitelenticularbracketleft\",\r\n  0x3016,\r\n  \"whitelenticularbracketright\",\r\n  0x3017,\r\n  \"whiterightpointingsmalltriangle\",\r\n  0x25b9,\r\n  \"whiterightpointingtriangle\",\r\n  0x25b7,\r\n  \"whitesmallsquare\",\r\n  0x25ab,\r\n  \"whitesmilingface\",\r\n  0x263a,\r\n  \"whitesquare\",\r\n  0x25a1,\r\n  \"whitestar\",\r\n  0x2606,\r\n  \"whitetelephone\",\r\n  0x260f,\r\n  \"whitetortoiseshellbracketleft\",\r\n  0x3018,\r\n  \"whitetortoiseshellbracketright\",\r\n  0x3019,\r\n  \"whiteuppointingsmalltriangle\",\r\n  0x25b5,\r\n  \"whiteuppointingtriangle\",\r\n  0x25b3,\r\n  \"wihiragana\",\r\n  0x3090,\r\n  \"wikatakana\",\r\n  0x30f0,\r\n  \"wikorean\",\r\n  0x315f,\r\n  \"wmonospace\",\r\n  0xff57,\r\n  \"wohiragana\",\r\n  0x3092,\r\n  \"wokatakana\",\r\n  0x30f2,\r\n  \"wokatakanahalfwidth\",\r\n  0xff66,\r\n  \"won\",\r\n  0x20a9,\r\n  \"wonmonospace\",\r\n  0xffe6,\r\n  \"wowaenthai\",\r\n  0x0e27,\r\n  \"wparen\",\r\n  0x24b2,\r\n  \"wring\",\r\n  0x1e98,\r\n  \"wsuperior\",\r\n  0x02b7,\r\n  \"wturned\",\r\n  0x028d,\r\n  \"wynn\",\r\n  0x01bf,\r\n  \"x\",\r\n  0x0078,\r\n  \"xabovecmb\",\r\n  0x033d,\r\n  \"xbopomofo\",\r\n  0x3112,\r\n  \"xcircle\",\r\n  0x24e7,\r\n  \"xdieresis\",\r\n  0x1e8d,\r\n  \"xdotaccent\",\r\n  0x1e8b,\r\n  \"xeharmenian\",\r\n  0x056d,\r\n  \"xi\",\r\n  0x03be,\r\n  \"xmonospace\",\r\n  0xff58,\r\n  \"xparen\",\r\n  0x24b3,\r\n  \"xsuperior\",\r\n  0x02e3,\r\n  \"y\",\r\n  0x0079,\r\n  \"yaadosquare\",\r\n  0x334e,\r\n  \"yabengali\",\r\n  0x09af,\r\n  \"yacute\",\r\n  0x00fd,\r\n  \"yadeva\",\r\n  0x092f,\r\n  \"yaekorean\",\r\n  0x3152,\r\n  \"yagujarati\",\r\n  0x0aaf,\r\n  \"yagurmukhi\",\r\n  0x0a2f,\r\n  \"yahiragana\",\r\n  0x3084,\r\n  \"yakatakana\",\r\n  0x30e4,\r\n  \"yakatakanahalfwidth\",\r\n  0xff94,\r\n  \"yakorean\",\r\n  0x3151,\r\n  \"yamakkanthai\",\r\n  0x0e4e,\r\n  \"yasmallhiragana\",\r\n  0x3083,\r\n  \"yasmallkatakana\",\r\n  0x30e3,\r\n  \"yasmallkatakanahalfwidth\",\r\n  0xff6c,\r\n  \"yatcyrillic\",\r\n  0x0463,\r\n  \"ycircle\",\r\n  0x24e8,\r\n  \"ycircumflex\",\r\n  0x0177,\r\n  \"ydieresis\",\r\n  0x00ff,\r\n  \"ydotaccent\",\r\n  0x1e8f,\r\n  \"ydotbelow\",\r\n  0x1ef5,\r\n  \"yeharabic\",\r\n  0x064a,\r\n  \"yehbarreearabic\",\r\n  0x06d2,\r\n  \"yehbarreefinalarabic\",\r\n  0xfbaf,\r\n  \"yehfinalarabic\",\r\n  0xfef2,\r\n  \"yehhamzaabovearabic\",\r\n  0x0626,\r\n  \"yehhamzaabovefinalarabic\",\r\n  0xfe8a,\r\n  \"yehhamzaaboveinitialarabic\",\r\n  0xfe8b,\r\n  \"yehhamzaabovemedialarabic\",\r\n  0xfe8c,\r\n  \"yehinitialarabic\",\r\n  0xfef3,\r\n  \"yehmedialarabic\",\r\n  0xfef4,\r\n  \"yehmeeminitialarabic\",\r\n  0xfcdd,\r\n  \"yehmeemisolatedarabic\",\r\n  0xfc58,\r\n  \"yehnoonfinalarabic\",\r\n  0xfc94,\r\n  \"yehthreedotsbelowarabic\",\r\n  0x06d1,\r\n  \"yekorean\",\r\n  0x3156,\r\n  \"yen\",\r\n  0x00a5,\r\n  \"yenmonospace\",\r\n  0xffe5,\r\n  \"yeokorean\",\r\n  0x3155,\r\n  \"yeorinhieuhkorean\",\r\n  0x3186,\r\n  \"yerahbenyomohebrew\",\r\n  0x05aa,\r\n  \"yerahbenyomolefthebrew\",\r\n  0x05aa,\r\n  \"yericyrillic\",\r\n  0x044b,\r\n  \"yerudieresiscyrillic\",\r\n  0x04f9,\r\n  \"yesieungkorean\",\r\n  0x3181,\r\n  \"yesieungpansioskorean\",\r\n  0x3183,\r\n  \"yesieungsioskorean\",\r\n  0x3182,\r\n  \"yetivhebrew\",\r\n  0x059a,\r\n  \"ygrave\",\r\n  0x1ef3,\r\n  \"yhook\",\r\n  0x01b4,\r\n  \"yhookabove\",\r\n  0x1ef7,\r\n  \"yiarmenian\",\r\n  0x0575,\r\n  \"yicyrillic\",\r\n  0x0457,\r\n  \"yikorean\",\r\n  0x3162,\r\n  \"yinyang\",\r\n  0x262f,\r\n  \"yiwnarmenian\",\r\n  0x0582,\r\n  \"ymonospace\",\r\n  0xff59,\r\n  \"yod\",\r\n  0x05d9,\r\n  \"yoddagesh\",\r\n  0xfb39,\r\n  \"yoddageshhebrew\",\r\n  0xfb39,\r\n  \"yodhebrew\",\r\n  0x05d9,\r\n  \"yodyodhebrew\",\r\n  0x05f2,\r\n  \"yodyodpatahhebrew\",\r\n  0xfb1f,\r\n  \"yohiragana\",\r\n  0x3088,\r\n  \"yoikorean\",\r\n  0x3189,\r\n  \"yokatakana\",\r\n  0x30e8,\r\n  \"yokatakanahalfwidth\",\r\n  0xff96,\r\n  \"yokorean\",\r\n  0x315b,\r\n  \"yosmallhiragana\",\r\n  0x3087,\r\n  \"yosmallkatakana\",\r\n  0x30e7,\r\n  \"yosmallkatakanahalfwidth\",\r\n  0xff6e,\r\n  \"yotgreek\",\r\n  0x03f3,\r\n  \"yoyaekorean\",\r\n  0x3188,\r\n  \"yoyakorean\",\r\n  0x3187,\r\n  \"yoyakthai\",\r\n  0x0e22,\r\n  \"yoyingthai\",\r\n  0x0e0d,\r\n  \"yparen\",\r\n  0x24b4,\r\n  \"ypogegrammeni\",\r\n  0x037a,\r\n  \"ypogegrammenigreekcmb\",\r\n  0x0345,\r\n  \"yr\",\r\n  0x01a6,\r\n  \"yring\",\r\n  0x1e99,\r\n  \"ysuperior\",\r\n  0x02b8,\r\n  \"ytilde\",\r\n  0x1ef9,\r\n  \"yturned\",\r\n  0x028e,\r\n  \"yuhiragana\",\r\n  0x3086,\r\n  \"yuikorean\",\r\n  0x318c,\r\n  \"yukatakana\",\r\n  0x30e6,\r\n  \"yukatakanahalfwidth\",\r\n  0xff95,\r\n  \"yukorean\",\r\n  0x3160,\r\n  \"yusbigcyrillic\",\r\n  0x046b,\r\n  \"yusbigiotifiedcyrillic\",\r\n  0x046d,\r\n  \"yuslittlecyrillic\",\r\n  0x0467,\r\n  \"yuslittleiotifiedcyrillic\",\r\n  0x0469,\r\n  \"yusmallhiragana\",\r\n  0x3085,\r\n  \"yusmallkatakana\",\r\n  0x30e5,\r\n  \"yusmallkatakanahalfwidth\",\r\n  0xff6d,\r\n  \"yuyekorean\",\r\n  0x318b,\r\n  \"yuyeokorean\",\r\n  0x318a,\r\n  \"yyabengali\",\r\n  0x09df,\r\n  \"yyadeva\",\r\n  0x095f,\r\n  \"z\",\r\n  0x007a,\r\n  \"zaarmenian\",\r\n  0x0566,\r\n  \"zacute\",\r\n  0x017a,\r\n  \"zadeva\",\r\n  0x095b,\r\n  \"zagurmukhi\",\r\n  0x0a5b,\r\n  \"zaharabic\",\r\n  0x0638,\r\n  \"zahfinalarabic\",\r\n  0xfec6,\r\n  \"zahinitialarabic\",\r\n  0xfec7,\r\n  \"zahiragana\",\r\n  0x3056,\r\n  \"zahmedialarabic\",\r\n  0xfec8,\r\n  \"zainarabic\",\r\n  0x0632,\r\n  \"zainfinalarabic\",\r\n  0xfeb0,\r\n  \"zakatakana\",\r\n  0x30b6,\r\n  \"zaqefgadolhebrew\",\r\n  0x0595,\r\n  \"zaqefqatanhebrew\",\r\n  0x0594,\r\n  \"zarqahebrew\",\r\n  0x0598,\r\n  \"zayin\",\r\n  0x05d6,\r\n  \"zayindagesh\",\r\n  0xfb36,\r\n  \"zayindageshhebrew\",\r\n  0xfb36,\r\n  \"zayinhebrew\",\r\n  0x05d6,\r\n  \"zbopomofo\",\r\n  0x3117,\r\n  \"zcaron\",\r\n  0x017e,\r\n  \"zcircle\",\r\n  0x24e9,\r\n  \"zcircumflex\",\r\n  0x1e91,\r\n  \"zcurl\",\r\n  0x0291,\r\n  \"zdot\",\r\n  0x017c,\r\n  \"zdotaccent\",\r\n  0x017c,\r\n  \"zdotbelow\",\r\n  0x1e93,\r\n  \"zecyrillic\",\r\n  0x0437,\r\n  \"zedescendercyrillic\",\r\n  0x0499,\r\n  \"zedieresiscyrillic\",\r\n  0x04df,\r\n  \"zehiragana\",\r\n  0x305c,\r\n  \"zekatakana\",\r\n  0x30bc,\r\n  \"zero\",\r\n  0x0030,\r\n  \"zeroarabic\",\r\n  0x0660,\r\n  \"zerobengali\",\r\n  0x09e6,\r\n  \"zerodeva\",\r\n  0x0966,\r\n  \"zerogujarati\",\r\n  0x0ae6,\r\n  \"zerogurmukhi\",\r\n  0x0a66,\r\n  \"zerohackarabic\",\r\n  0x0660,\r\n  \"zeroinferior\",\r\n  0x2080,\r\n  \"zeromonospace\",\r\n  0xff10,\r\n  \"zerooldstyle\",\r\n  0xf730,\r\n  \"zeropersian\",\r\n  0x06f0,\r\n  \"zerosuperior\",\r\n  0x2070,\r\n  \"zerothai\",\r\n  0x0e50,\r\n  \"zerowidthjoiner\",\r\n  0xfeff,\r\n  \"zerowidthnonjoiner\",\r\n  0x200c,\r\n  \"zerowidthspace\",\r\n  0x200b,\r\n  \"zeta\",\r\n  0x03b6,\r\n  \"zhbopomofo\",\r\n  0x3113,\r\n  \"zhearmenian\",\r\n  0x056a,\r\n  \"zhebrevecyrillic\",\r\n  0x04c2,\r\n  \"zhecyrillic\",\r\n  0x0436,\r\n  \"zhedescendercyrillic\",\r\n  0x0497,\r\n  \"zhedieresiscyrillic\",\r\n  0x04dd,\r\n  \"zihiragana\",\r\n  0x3058,\r\n  \"zikatakana\",\r\n  0x30b8,\r\n  \"zinorhebrew\",\r\n  0x05ae,\r\n  \"zlinebelow\",\r\n  0x1e95,\r\n  \"zmonospace\",\r\n  0xff5a,\r\n  \"zohiragana\",\r\n  0x305e,\r\n  \"zokatakana\",\r\n  0x30be,\r\n  \"zparen\",\r\n  0x24b5,\r\n  \"zretroflexhook\",\r\n  0x0290,\r\n  \"zstroke\",\r\n  0x01b6,\r\n  \"zuhiragana\",\r\n  0x305a,\r\n  \"zukatakana\",\r\n  0x30ba,\r\n  \".notdef\",\r\n  0x0000,\r\n  \"angbracketleftbig\",\r\n  0x2329,\r\n  \"angbracketleftBig\",\r\n  0x2329,\r\n  \"angbracketleftbigg\",\r\n  0x2329,\r\n  \"angbracketleftBigg\",\r\n  0x2329,\r\n  \"angbracketrightBig\",\r\n  0x232a,\r\n  \"angbracketrightbig\",\r\n  0x232a,\r\n  \"angbracketrightBigg\",\r\n  0x232a,\r\n  \"angbracketrightbigg\",\r\n  0x232a,\r\n  \"arrowhookleft\",\r\n  0x21aa,\r\n  \"arrowhookright\",\r\n  0x21a9,\r\n  \"arrowlefttophalf\",\r\n  0x21bc,\r\n  \"arrowleftbothalf\",\r\n  0x21bd,\r\n  \"arrownortheast\",\r\n  0x2197,\r\n  \"arrownorthwest\",\r\n  0x2196,\r\n  \"arrowrighttophalf\",\r\n  0x21c0,\r\n  \"arrowrightbothalf\",\r\n  0x21c1,\r\n  \"arrowsoutheast\",\r\n  0x2198,\r\n  \"arrowsouthwest\",\r\n  0x2199,\r\n  \"backslashbig\",\r\n  0x2216,\r\n  \"backslashBig\",\r\n  0x2216,\r\n  \"backslashBigg\",\r\n  0x2216,\r\n  \"backslashbigg\",\r\n  0x2216,\r\n  \"bardbl\",\r\n  0x2016,\r\n  \"bracehtipdownleft\",\r\n  0xfe37,\r\n  \"bracehtipdownright\",\r\n  0xfe37,\r\n  \"bracehtipupleft\",\r\n  0xfe38,\r\n  \"bracehtipupright\",\r\n  0xfe38,\r\n  \"braceleftBig\",\r\n  0x007b,\r\n  \"braceleftbig\",\r\n  0x007b,\r\n  \"braceleftbigg\",\r\n  0x007b,\r\n  \"braceleftBigg\",\r\n  0x007b,\r\n  \"bracerightBig\",\r\n  0x007d,\r\n  \"bracerightbig\",\r\n  0x007d,\r\n  \"bracerightbigg\",\r\n  0x007d,\r\n  \"bracerightBigg\",\r\n  0x007d,\r\n  \"bracketleftbig\",\r\n  0x005b,\r\n  \"bracketleftBig\",\r\n  0x005b,\r\n  \"bracketleftbigg\",\r\n  0x005b,\r\n  \"bracketleftBigg\",\r\n  0x005b,\r\n  \"bracketrightBig\",\r\n  0x005d,\r\n  \"bracketrightbig\",\r\n  0x005d,\r\n  \"bracketrightbigg\",\r\n  0x005d,\r\n  \"bracketrightBigg\",\r\n  0x005d,\r\n  \"ceilingleftbig\",\r\n  0x2308,\r\n  \"ceilingleftBig\",\r\n  0x2308,\r\n  \"ceilingleftBigg\",\r\n  0x2308,\r\n  \"ceilingleftbigg\",\r\n  0x2308,\r\n  \"ceilingrightbig\",\r\n  0x2309,\r\n  \"ceilingrightBig\",\r\n  0x2309,\r\n  \"ceilingrightbigg\",\r\n  0x2309,\r\n  \"ceilingrightBigg\",\r\n  0x2309,\r\n  \"circledotdisplay\",\r\n  0x2299,\r\n  \"circledottext\",\r\n  0x2299,\r\n  \"circlemultiplydisplay\",\r\n  0x2297,\r\n  \"circlemultiplytext\",\r\n  0x2297,\r\n  \"circleplusdisplay\",\r\n  0x2295,\r\n  \"circleplustext\",\r\n  0x2295,\r\n  \"contintegraldisplay\",\r\n  0x222e,\r\n  \"contintegraltext\",\r\n  0x222e,\r\n  \"coproductdisplay\",\r\n  0x2210,\r\n  \"coproducttext\",\r\n  0x2210,\r\n  \"floorleftBig\",\r\n  0x230a,\r\n  \"floorleftbig\",\r\n  0x230a,\r\n  \"floorleftbigg\",\r\n  0x230a,\r\n  \"floorleftBigg\",\r\n  0x230a,\r\n  \"floorrightbig\",\r\n  0x230b,\r\n  \"floorrightBig\",\r\n  0x230b,\r\n  \"floorrightBigg\",\r\n  0x230b,\r\n  \"floorrightbigg\",\r\n  0x230b,\r\n  \"hatwide\",\r\n  0x0302,\r\n  \"hatwider\",\r\n  0x0302,\r\n  \"hatwidest\",\r\n  0x0302,\r\n  \"intercal\",\r\n  0x1d40,\r\n  \"integraldisplay\",\r\n  0x222b,\r\n  \"integraltext\",\r\n  0x222b,\r\n  \"intersectiondisplay\",\r\n  0x22c2,\r\n  \"intersectiontext\",\r\n  0x22c2,\r\n  \"logicalanddisplay\",\r\n  0x2227,\r\n  \"logicalandtext\",\r\n  0x2227,\r\n  \"logicalordisplay\",\r\n  0x2228,\r\n  \"logicalortext\",\r\n  0x2228,\r\n  \"parenleftBig\",\r\n  0x0028,\r\n  \"parenleftbig\",\r\n  0x0028,\r\n  \"parenleftBigg\",\r\n  0x0028,\r\n  \"parenleftbigg\",\r\n  0x0028,\r\n  \"parenrightBig\",\r\n  0x0029,\r\n  \"parenrightbig\",\r\n  0x0029,\r\n  \"parenrightBigg\",\r\n  0x0029,\r\n  \"parenrightbigg\",\r\n  0x0029,\r\n  \"prime\",\r\n  0x2032,\r\n  \"productdisplay\",\r\n  0x220f,\r\n  \"producttext\",\r\n  0x220f,\r\n  \"radicalbig\",\r\n  0x221a,\r\n  \"radicalBig\",\r\n  0x221a,\r\n  \"radicalBigg\",\r\n  0x221a,\r\n  \"radicalbigg\",\r\n  0x221a,\r\n  \"radicalbt\",\r\n  0x221a,\r\n  \"radicaltp\",\r\n  0x221a,\r\n  \"radicalvertex\",\r\n  0x221a,\r\n  \"slashbig\",\r\n  0x002f,\r\n  \"slashBig\",\r\n  0x002f,\r\n  \"slashBigg\",\r\n  0x002f,\r\n  \"slashbigg\",\r\n  0x002f,\r\n  \"summationdisplay\",\r\n  0x2211,\r\n  \"summationtext\",\r\n  0x2211,\r\n  \"tildewide\",\r\n  0x02dc,\r\n  \"tildewider\",\r\n  0x02dc,\r\n  \"tildewidest\",\r\n  0x02dc,\r\n  \"uniondisplay\",\r\n  0x22c3,\r\n  \"unionmultidisplay\",\r\n  0x228e,\r\n  \"unionmultitext\",\r\n  0x228e,\r\n  \"unionsqdisplay\",\r\n  0x2294,\r\n  \"unionsqtext\",\r\n  0x2294,\r\n  \"uniontext\",\r\n  0x22c3,\r\n  \"vextenddouble\",\r\n  0x2225,\r\n  \"vextendsingle\",\r\n  0x2223\r\n ];\r\n});\r\nvar getDingbatsGlyphsUnicode = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () {\r\n return [\r\n  \"space\",\r\n  0x0020,\r\n  \"a1\",\r\n  0x2701,\r\n  \"a2\",\r\n  0x2702,\r\n  \"a202\",\r\n  0x2703,\r\n  \"a3\",\r\n  0x2704,\r\n  \"a4\",\r\n  0x260e,\r\n  \"a5\",\r\n  0x2706,\r\n  \"a119\",\r\n  0x2707,\r\n  \"a118\",\r\n  0x2708,\r\n  \"a117\",\r\n  0x2709,\r\n  \"a11\",\r\n  0x261b,\r\n  \"a12\",\r\n  0x261e,\r\n  \"a13\",\r\n  0x270c,\r\n  \"a14\",\r\n  0x270d,\r\n  \"a15\",\r\n  0x270e,\r\n  \"a16\",\r\n  0x270f,\r\n  \"a105\",\r\n  0x2710,\r\n  \"a17\",\r\n  0x2711,\r\n  \"a18\",\r\n  0x2712,\r\n  \"a19\",\r\n  0x2713,\r\n  \"a20\",\r\n  0x2714,\r\n  \"a21\",\r\n  0x2715,\r\n  \"a22\",\r\n  0x2716,\r\n  \"a23\",\r\n  0x2717,\r\n  \"a24\",\r\n  0x2718,\r\n  \"a25\",\r\n  0x2719,\r\n  \"a26\",\r\n  0x271a,\r\n  \"a27\",\r\n  0x271b,\r\n  \"a28\",\r\n  0x271c,\r\n  \"a6\",\r\n  0x271d,\r\n  \"a7\",\r\n  0x271e,\r\n  \"a8\",\r\n  0x271f,\r\n  \"a9\",\r\n  0x2720,\r\n  \"a10\",\r\n  0x2721,\r\n  \"a29\",\r\n  0x2722,\r\n  \"a30\",\r\n  0x2723,\r\n  \"a31\",\r\n  0x2724,\r\n  \"a32\",\r\n  0x2725,\r\n  \"a33\",\r\n  0x2726,\r\n  \"a34\",\r\n  0x2727,\r\n  \"a35\",\r\n  0x2605,\r\n  \"a36\",\r\n  0x2729,\r\n  \"a37\",\r\n  0x272a,\r\n  \"a38\",\r\n  0x272b,\r\n  \"a39\",\r\n  0x272c,\r\n  \"a40\",\r\n  0x272d,\r\n  \"a41\",\r\n  0x272e,\r\n  \"a42\",\r\n  0x272f,\r\n  \"a43\",\r\n  0x2730,\r\n  \"a44\",\r\n  0x2731,\r\n  \"a45\",\r\n  0x2732,\r\n  \"a46\",\r\n  0x2733,\r\n  \"a47\",\r\n  0x2734,\r\n  \"a48\",\r\n  0x2735,\r\n  \"a49\",\r\n  0x2736,\r\n  \"a50\",\r\n  0x2737,\r\n  \"a51\",\r\n  0x2738,\r\n  \"a52\",\r\n  0x2739,\r\n  \"a53\",\r\n  0x273a,\r\n  \"a54\",\r\n  0x273b,\r\n  \"a55\",\r\n  0x273c,\r\n  \"a56\",\r\n  0x273d,\r\n  \"a57\",\r\n  0x273e,\r\n  \"a58\",\r\n  0x273f,\r\n  \"a59\",\r\n  0x2740,\r\n  \"a60\",\r\n  0x2741,\r\n  \"a61\",\r\n  0x2742,\r\n  \"a62\",\r\n  0x2743,\r\n  \"a63\",\r\n  0x2744,\r\n  \"a64\",\r\n  0x2745,\r\n  \"a65\",\r\n  0x2746,\r\n  \"a66\",\r\n  0x2747,\r\n  \"a67\",\r\n  0x2748,\r\n  \"a68\",\r\n  0x2749,\r\n  \"a69\",\r\n  0x274a,\r\n  \"a70\",\r\n  0x274b,\r\n  \"a71\",\r\n  0x25cf,\r\n  \"a72\",\r\n  0x274d,\r\n  \"a73\",\r\n  0x25a0,\r\n  \"a74\",\r\n  0x274f,\r\n  \"a203\",\r\n  0x2750,\r\n  \"a75\",\r\n  0x2751,\r\n  \"a204\",\r\n  0x2752,\r\n  \"a76\",\r\n  0x25b2,\r\n  \"a77\",\r\n  0x25bc,\r\n  \"a78\",\r\n  0x25c6,\r\n  \"a79\",\r\n  0x2756,\r\n  \"a81\",\r\n  0x25d7,\r\n  \"a82\",\r\n  0x2758,\r\n  \"a83\",\r\n  0x2759,\r\n  \"a84\",\r\n  0x275a,\r\n  \"a97\",\r\n  0x275b,\r\n  \"a98\",\r\n  0x275c,\r\n  \"a99\",\r\n  0x275d,\r\n  \"a100\",\r\n  0x275e,\r\n  \"a101\",\r\n  0x2761,\r\n  \"a102\",\r\n  0x2762,\r\n  \"a103\",\r\n  0x2763,\r\n  \"a104\",\r\n  0x2764,\r\n  \"a106\",\r\n  0x2765,\r\n  \"a107\",\r\n  0x2766,\r\n  \"a108\",\r\n  0x2767,\r\n  \"a112\",\r\n  0x2663,\r\n  \"a111\",\r\n  0x2666,\r\n  \"a110\",\r\n  0x2665,\r\n  \"a109\",\r\n  0x2660,\r\n  \"a120\",\r\n  0x2460,\r\n  \"a121\",\r\n  0x2461,\r\n  \"a122\",\r\n  0x2462,\r\n  \"a123\",\r\n  0x2463,\r\n  \"a124\",\r\n  0x2464,\r\n  \"a125\",\r\n  0x2465,\r\n  \"a126\",\r\n  0x2466,\r\n  \"a127\",\r\n  0x2467,\r\n  \"a128\",\r\n  0x2468,\r\n  \"a129\",\r\n  0x2469,\r\n  \"a130\",\r\n  0x2776,\r\n  \"a131\",\r\n  0x2777,\r\n  \"a132\",\r\n  0x2778,\r\n  \"a133\",\r\n  0x2779,\r\n  \"a134\",\r\n  0x277a,\r\n  \"a135\",\r\n  0x277b,\r\n  \"a136\",\r\n  0x277c,\r\n  \"a137\",\r\n  0x277d,\r\n  \"a138\",\r\n  0x277e,\r\n  \"a139\",\r\n  0x277f,\r\n  \"a140\",\r\n  0x2780,\r\n  \"a141\",\r\n  0x2781,\r\n  \"a142\",\r\n  0x2782,\r\n  \"a143\",\r\n  0x2783,\r\n  \"a144\",\r\n  0x2784,\r\n  \"a145\",\r\n  0x2785,\r\n  \"a146\",\r\n  0x2786,\r\n  \"a147\",\r\n  0x2787,\r\n  \"a148\",\r\n  0x2788,\r\n  \"a149\",\r\n  0x2789,\r\n  \"a150\",\r\n  0x278a,\r\n  \"a151\",\r\n  0x278b,\r\n  \"a152\",\r\n  0x278c,\r\n  \"a153\",\r\n  0x278d,\r\n  \"a154\",\r\n  0x278e,\r\n  \"a155\",\r\n  0x278f,\r\n  \"a156\",\r\n  0x2790,\r\n  \"a157\",\r\n  0x2791,\r\n  \"a158\",\r\n  0x2792,\r\n  \"a159\",\r\n  0x2793,\r\n  \"a160\",\r\n  0x2794,\r\n  \"a161\",\r\n  0x2192,\r\n  \"a163\",\r\n  0x2194,\r\n  \"a164\",\r\n  0x2195,\r\n  \"a196\",\r\n  0x2798,\r\n  \"a165\",\r\n  0x2799,\r\n  \"a192\",\r\n  0x279a,\r\n  \"a166\",\r\n  0x279b,\r\n  \"a167\",\r\n  0x279c,\r\n  \"a168\",\r\n  0x279d,\r\n  \"a169\",\r\n  0x279e,\r\n  \"a170\",\r\n  0x279f,\r\n  \"a171\",\r\n  0x27a0,\r\n  \"a172\",\r\n  0x27a1,\r\n  \"a173\",\r\n  0x27a2,\r\n  \"a162\",\r\n  0x27a3,\r\n  \"a174\",\r\n  0x27a4,\r\n  \"a175\",\r\n  0x27a5,\r\n  \"a176\",\r\n  0x27a6,\r\n  \"a177\",\r\n  0x27a7,\r\n  \"a178\",\r\n  0x27a8,\r\n  \"a179\",\r\n  0x27a9,\r\n  \"a193\",\r\n  0x27aa,\r\n  \"a180\",\r\n  0x27ab,\r\n  \"a199\",\r\n  0x27ac,\r\n  \"a181\",\r\n  0x27ad,\r\n  \"a200\",\r\n  0x27ae,\r\n  \"a182\",\r\n  0x27af,\r\n  \"a201\",\r\n  0x27b1,\r\n  \"a183\",\r\n  0x27b2,\r\n  \"a184\",\r\n  0x27b3,\r\n  \"a197\",\r\n  0x27b4,\r\n  \"a185\",\r\n  0x27b5,\r\n  \"a194\",\r\n  0x27b6,\r\n  \"a198\",\r\n  0x27b7,\r\n  \"a186\",\r\n  0x27b8,\r\n  \"a195\",\r\n  0x27b9,\r\n  \"a187\",\r\n  0x27ba,\r\n  \"a188\",\r\n  0x27bb,\r\n  \"a189\",\r\n  0x27bc,\r\n  \"a190\",\r\n  0x27bd,\r\n  \"a191\",\r\n  0x27be,\r\n  \"a89\",\r\n  0x2768,\r\n  \"a90\",\r\n  0x2769,\r\n  \"a93\",\r\n  0x276a,\r\n  \"a94\",\r\n  0x276b,\r\n  \"a91\",\r\n  0x276c,\r\n  \"a92\",\r\n  0x276d,\r\n  \"a205\",\r\n  0x276e,\r\n  \"a85\",\r\n  0x276f,\r\n  \"a206\",\r\n  0x2770,\r\n  \"a86\",\r\n  0x2771,\r\n  \"a87\",\r\n  0x2772,\r\n  \"a88\",\r\n  0x2773,\r\n  \"a95\",\r\n  0x2774,\r\n  \"a96\",\r\n  0x2775,\r\n  \".notdef\",\r\n  0x0000\r\n ];\r\n});\r\n\r\n\r\n/***/ }),\r\n/* 164 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.getSymbolsFonts = exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getStdFontMap = exports.getSerifFonts = exports.getNonStdFontMap = exports.getGlyphMapForStandardFonts = void 0;\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n  t.ArialNarrow = \"Helvetica\";\r\n  t[\"ArialNarrow-Bold\"] = \"Helvetica-Bold\";\r\n  t[\"ArialNarrow-BoldItalic\"] = \"Helvetica-BoldOblique\";\r\n  t[\"ArialNarrow-Italic\"] = \"Helvetica-Oblique\";\r\n  t.ArialBlack = \"Helvetica\";\r\n  t[\"ArialBlack-Bold\"] = \"Helvetica-Bold\";\r\n  t[\"ArialBlack-BoldItalic\"] = \"Helvetica-BoldOblique\";\r\n  t[\"ArialBlack-Italic\"] = \"Helvetica-Oblique\";\r\n  t[\"Arial-Black\"] = \"Helvetica\";\r\n  t[\"Arial-Black-Bold\"] = \"Helvetica-Bold\";\r\n  t[\"Arial-Black-BoldItalic\"] = \"Helvetica-BoldOblique\";\r\n  t[\"Arial-Black-Italic\"] = \"Helvetica-Oblique\";\r\n  t.Arial = \"Helvetica\";\r\n  t[\"Arial-Bold\"] = \"Helvetica-Bold\";\r\n  t[\"Arial-BoldItalic\"] = \"Helvetica-BoldOblique\";\r\n  t[\"Arial-Italic\"] = \"Helvetica-Oblique\";\r\n  t[\"Arial-BoldItalicMT\"] = \"Helvetica-BoldOblique\";\r\n  t[\"Arial-BoldMT\"] = \"Helvetica-Bold\";\r\n  t[\"Arial-ItalicMT\"] = \"Helvetica-Oblique\";\r\n  t.ArialMT = \"Helvetica\";\r\n  t[\"Courier-Bold\"] = \"Courier-Bold\";\r\n  t[\"Courier-BoldItalic\"] = \"Courier-BoldOblique\";\r\n  t[\"Courier-Italic\"] = \"Courier-Oblique\";\r\n  t.CourierNew = \"Courier\";\r\n  t[\"CourierNew-Bold\"] = \"Courier-Bold\";\r\n  t[\"CourierNew-BoldItalic\"] = \"Courier-BoldOblique\";\r\n  t[\"CourierNew-Italic\"] = \"Courier-Oblique\";\r\n  t[\"CourierNewPS-BoldItalicMT\"] = \"Courier-BoldOblique\";\r\n  t[\"CourierNewPS-BoldMT\"] = \"Courier-Bold\";\r\n  t[\"CourierNewPS-ItalicMT\"] = \"Courier-Oblique\";\r\n  t.CourierNewPSMT = \"Courier\";\r\n  t.Helvetica = \"Helvetica\";\r\n  t[\"Helvetica-Bold\"] = \"Helvetica-Bold\";\r\n  t[\"Helvetica-BoldItalic\"] = \"Helvetica-BoldOblique\";\r\n  t[\"Helvetica-BoldOblique\"] = \"Helvetica-BoldOblique\";\r\n  t[\"Helvetica-Italic\"] = \"Helvetica-Oblique\";\r\n  t[\"Helvetica-Oblique\"] = \"Helvetica-Oblique\";\r\n  t[\"Symbol-Bold\"] = \"Symbol\";\r\n  t[\"Symbol-BoldItalic\"] = \"Symbol\";\r\n  t[\"Symbol-Italic\"] = \"Symbol\";\r\n  t.TimesNewRoman = \"Times-Roman\";\r\n  t[\"TimesNewRoman-Bold\"] = \"Times-Bold\";\r\n  t[\"TimesNewRoman-BoldItalic\"] = \"Times-BoldItalic\";\r\n  t[\"TimesNewRoman-Italic\"] = \"Times-Italic\";\r\n  t.TimesNewRomanPS = \"Times-Roman\";\r\n  t[\"TimesNewRomanPS-Bold\"] = \"Times-Bold\";\r\n  t[\"TimesNewRomanPS-BoldItalic\"] = \"Times-BoldItalic\";\r\n  t[\"TimesNewRomanPS-BoldItalicMT\"] = \"Times-BoldItalic\";\r\n  t[\"TimesNewRomanPS-BoldMT\"] = \"Times-Bold\";\r\n  t[\"TimesNewRomanPS-Italic\"] = \"Times-Italic\";\r\n  t[\"TimesNewRomanPS-ItalicMT\"] = \"Times-Italic\";\r\n  t.TimesNewRomanPSMT = \"Times-Roman\";\r\n  t[\"TimesNewRomanPSMT-Bold\"] = \"Times-Bold\";\r\n  t[\"TimesNewRomanPSMT-BoldItalic\"] = \"Times-BoldItalic\";\r\n  t[\"TimesNewRomanPSMT-Italic\"] = \"Times-Italic\";\r\n});\r\nexports.getStdFontMap = getStdFontMap;\r\nvar getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n  t.Calibri = \"Helvetica\";\r\n  t[\"Calibri-Bold\"] = \"Helvetica-Bold\";\r\n  t[\"Calibri-BoldItalic\"] = \"Helvetica-BoldOblique\";\r\n  t[\"Calibri-Italic\"] = \"Helvetica-Oblique\";\r\n  t.CenturyGothic = \"Helvetica\";\r\n  t[\"CenturyGothic-Bold\"] = \"Helvetica-Bold\";\r\n  t[\"CenturyGothic-BoldItalic\"] = \"Helvetica-BoldOblique\";\r\n  t[\"CenturyGothic-Italic\"] = \"Helvetica-Oblique\";\r\n  t.ComicSansMS = \"Comic Sans MS\";\r\n  t[\"ComicSansMS-Bold\"] = \"Comic Sans MS-Bold\";\r\n  t[\"ComicSansMS-BoldItalic\"] = \"Comic Sans MS-BoldItalic\";\r\n  t[\"ComicSansMS-Italic\"] = \"Comic Sans MS-Italic\";\r\n  t.LucidaConsole = \"Courier\";\r\n  t[\"LucidaConsole-Bold\"] = \"Courier-Bold\";\r\n  t[\"LucidaConsole-BoldItalic\"] = \"Courier-BoldOblique\";\r\n  t[\"LucidaConsole-Italic\"] = \"Courier-Oblique\";\r\n  t[\"LucidaSans-Demi\"] = \"Helvetica-Bold\";\r\n  t[\"MS-Gothic\"] = \"MS Gothic\";\r\n  t[\"MS-Gothic-Bold\"] = \"MS Gothic-Bold\";\r\n  t[\"MS-Gothic-BoldItalic\"] = \"MS Gothic-BoldItalic\";\r\n  t[\"MS-Gothic-Italic\"] = \"MS Gothic-Italic\";\r\n  t[\"MS-Mincho\"] = \"MS Mincho\";\r\n  t[\"MS-Mincho-Bold\"] = \"MS Mincho-Bold\";\r\n  t[\"MS-Mincho-BoldItalic\"] = \"MS Mincho-BoldItalic\";\r\n  t[\"MS-Mincho-Italic\"] = \"MS Mincho-Italic\";\r\n  t[\"MS-PGothic\"] = \"MS PGothic\";\r\n  t[\"MS-PGothic-Bold\"] = \"MS PGothic-Bold\";\r\n  t[\"MS-PGothic-BoldItalic\"] = \"MS PGothic-BoldItalic\";\r\n  t[\"MS-PGothic-Italic\"] = \"MS PGothic-Italic\";\r\n  t[\"MS-PMincho\"] = \"MS PMincho\";\r\n  t[\"MS-PMincho-Bold\"] = \"MS PMincho-Bold\";\r\n  t[\"MS-PMincho-BoldItalic\"] = \"MS PMincho-BoldItalic\";\r\n  t[\"MS-PMincho-Italic\"] = \"MS PMincho-Italic\";\r\n  t.NuptialScript = \"Times-Italic\";\r\n  t.SegoeUISymbol = \"Helvetica\";\r\n  t.Wingdings = \"ZapfDingbats\";\r\n  t[\"Wingdings-Regular\"] = \"ZapfDingbats\";\r\n});\r\nexports.getNonStdFontMap = getNonStdFontMap;\r\nvar getSerifFonts = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n  t[\"Adobe Jenson\"] = true;\r\n  t[\"Adobe Text\"] = true;\r\n  t.Albertus = true;\r\n  t.Aldus = true;\r\n  t.Alexandria = true;\r\n  t.Algerian = true;\r\n  t[\"American Typewriter\"] = true;\r\n  t.Antiqua = true;\r\n  t.Apex = true;\r\n  t.Arno = true;\r\n  t.Aster = true;\r\n  t.Aurora = true;\r\n  t.Baskerville = true;\r\n  t.Bell = true;\r\n  t.Bembo = true;\r\n  t[\"Bembo Schoolbook\"] = true;\r\n  t.Benguiat = true;\r\n  t[\"Berkeley Old Style\"] = true;\r\n  t[\"Bernhard Modern\"] = true;\r\n  t[\"Berthold City\"] = true;\r\n  t.Bodoni = true;\r\n  t[\"Bauer Bodoni\"] = true;\r\n  t[\"Book Antiqua\"] = true;\r\n  t.Bookman = true;\r\n  t[\"Bordeaux Roman\"] = true;\r\n  t[\"Californian FB\"] = true;\r\n  t.Calisto = true;\r\n  t.Calvert = true;\r\n  t.Capitals = true;\r\n  t.Cambria = true;\r\n  t.Cartier = true;\r\n  t.Caslon = true;\r\n  t.Catull = true;\r\n  t.Centaur = true;\r\n  t[\"Century Old Style\"] = true;\r\n  t[\"Century Schoolbook\"] = true;\r\n  t.Chaparral = true;\r\n  t[\"Charis SIL\"] = true;\r\n  t.Cheltenham = true;\r\n  t[\"Cholla Slab\"] = true;\r\n  t.Clarendon = true;\r\n  t.Clearface = true;\r\n  t.Cochin = true;\r\n  t.Colonna = true;\r\n  t[\"Computer Modern\"] = true;\r\n  t[\"Concrete Roman\"] = true;\r\n  t.Constantia = true;\r\n  t[\"Cooper Black\"] = true;\r\n  t.Corona = true;\r\n  t.Ecotype = true;\r\n  t.Egyptienne = true;\r\n  t.Elephant = true;\r\n  t.Excelsior = true;\r\n  t.Fairfield = true;\r\n  t[\"FF Scala\"] = true;\r\n  t.Folkard = true;\r\n  t.Footlight = true;\r\n  t.FreeSerif = true;\r\n  t[\"Friz Quadrata\"] = true;\r\n  t.Garamond = true;\r\n  t.Gentium = true;\r\n  t.Georgia = true;\r\n  t.Gloucester = true;\r\n  t[\"Goudy Old Style\"] = true;\r\n  t[\"Goudy Schoolbook\"] = true;\r\n  t[\"Goudy Pro Font\"] = true;\r\n  t.Granjon = true;\r\n  t[\"Guardian Egyptian\"] = true;\r\n  t.Heather = true;\r\n  t.Hercules = true;\r\n  t[\"High Tower Text\"] = true;\r\n  t.Hiroshige = true;\r\n  t[\"Hoefler Text\"] = true;\r\n  t[\"Humana Serif\"] = true;\r\n  t.Imprint = true;\r\n  t[\"Ionic No. 5\"] = true;\r\n  t.Janson = true;\r\n  t.Joanna = true;\r\n  t.Korinna = true;\r\n  t.Lexicon = true;\r\n  t[\"Liberation Serif\"] = true;\r\n  t[\"Linux Libertine\"] = true;\r\n  t.Literaturnaya = true;\r\n  t.Lucida = true;\r\n  t[\"Lucida Bright\"] = true;\r\n  t.Melior = true;\r\n  t.Memphis = true;\r\n  t.Miller = true;\r\n  t.Minion = true;\r\n  t.Modern = true;\r\n  t[\"Mona Lisa\"] = true;\r\n  t[\"Mrs Eaves\"] = true;\r\n  t[\"MS Serif\"] = true;\r\n  t[\"Museo Slab\"] = true;\r\n  t[\"New York\"] = true;\r\n  t[\"Nimbus Roman\"] = true;\r\n  t[\"NPS Rawlinson Roadway\"] = true;\r\n  t.NuptialScript = true;\r\n  t.Palatino = true;\r\n  t.Perpetua = true;\r\n  t.Plantin = true;\r\n  t[\"Plantin Schoolbook\"] = true;\r\n  t.Playbill = true;\r\n  t[\"Poor Richard\"] = true;\r\n  t[\"Rawlinson Roadway\"] = true;\r\n  t.Renault = true;\r\n  t.Requiem = true;\r\n  t.Rockwell = true;\r\n  t.Roman = true;\r\n  t[\"Rotis Serif\"] = true;\r\n  t.Sabon = true;\r\n  t.Scala = true;\r\n  t.Seagull = true;\r\n  t.Sistina = true;\r\n  t.Souvenir = true;\r\n  t.STIX = true;\r\n  t[\"Stone Informal\"] = true;\r\n  t[\"Stone Serif\"] = true;\r\n  t.Sylfaen = true;\r\n  t.Times = true;\r\n  t.Trajan = true;\r\n  t[\"Trinité\"] = true;\r\n  t[\"Trump Mediaeval\"] = true;\r\n  t.Utopia = true;\r\n  t[\"Vale Type\"] = true;\r\n  t[\"Bitstream Vera\"] = true;\r\n  t[\"Vera Serif\"] = true;\r\n  t.Versailles = true;\r\n  t.Wanted = true;\r\n  t.Weiss = true;\r\n  t[\"Wide Latin\"] = true;\r\n  t.Windsor = true;\r\n  t.XITS = true;\r\n});\r\nexports.getSerifFonts = getSerifFonts;\r\nvar getSymbolsFonts = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n  t.Dingbats = true;\r\n  t.Symbol = true;\r\n  t.ZapfDingbats = true;\r\n});\r\nexports.getSymbolsFonts = getSymbolsFonts;\r\nvar getGlyphMapForStandardFonts = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n  t[2] = 10;\r\n  t[3] = 32;\r\n  t[4] = 33;\r\n  t[5] = 34;\r\n  t[6] = 35;\r\n  t[7] = 36;\r\n  t[8] = 37;\r\n  t[9] = 38;\r\n  t[10] = 39;\r\n  t[11] = 40;\r\n  t[12] = 41;\r\n  t[13] = 42;\r\n  t[14] = 43;\r\n  t[15] = 44;\r\n  t[16] = 45;\r\n  t[17] = 46;\r\n  t[18] = 47;\r\n  t[19] = 48;\r\n  t[20] = 49;\r\n  t[21] = 50;\r\n  t[22] = 51;\r\n  t[23] = 52;\r\n  t[24] = 53;\r\n  t[25] = 54;\r\n  t[26] = 55;\r\n  t[27] = 56;\r\n  t[28] = 57;\r\n  t[29] = 58;\r\n  t[30] = 894;\r\n  t[31] = 60;\r\n  t[32] = 61;\r\n  t[33] = 62;\r\n  t[34] = 63;\r\n  t[35] = 64;\r\n  t[36] = 65;\r\n  t[37] = 66;\r\n  t[38] = 67;\r\n  t[39] = 68;\r\n  t[40] = 69;\r\n  t[41] = 70;\r\n  t[42] = 71;\r\n  t[43] = 72;\r\n  t[44] = 73;\r\n  t[45] = 74;\r\n  t[46] = 75;\r\n  t[47] = 76;\r\n  t[48] = 77;\r\n  t[49] = 78;\r\n  t[50] = 79;\r\n  t[51] = 80;\r\n  t[52] = 81;\r\n  t[53] = 82;\r\n  t[54] = 83;\r\n  t[55] = 84;\r\n  t[56] = 85;\r\n  t[57] = 86;\r\n  t[58] = 87;\r\n  t[59] = 88;\r\n  t[60] = 89;\r\n  t[61] = 90;\r\n  t[62] = 91;\r\n  t[63] = 92;\r\n  t[64] = 93;\r\n  t[65] = 94;\r\n  t[66] = 95;\r\n  t[67] = 96;\r\n  t[68] = 97;\r\n  t[69] = 98;\r\n  t[70] = 99;\r\n  t[71] = 100;\r\n  t[72] = 101;\r\n  t[73] = 102;\r\n  t[74] = 103;\r\n  t[75] = 104;\r\n  t[76] = 105;\r\n  t[77] = 106;\r\n  t[78] = 107;\r\n  t[79] = 108;\r\n  t[80] = 109;\r\n  t[81] = 110;\r\n  t[82] = 111;\r\n  t[83] = 112;\r\n  t[84] = 113;\r\n  t[85] = 114;\r\n  t[86] = 115;\r\n  t[87] = 116;\r\n  t[88] = 117;\r\n  t[89] = 118;\r\n  t[90] = 119;\r\n  t[91] = 120;\r\n  t[92] = 121;\r\n  t[93] = 122;\r\n  t[94] = 123;\r\n  t[95] = 124;\r\n  t[96] = 125;\r\n  t[97] = 126;\r\n  t[98] = 196;\r\n  t[99] = 197;\r\n  t[100] = 199;\r\n  t[101] = 201;\r\n  t[102] = 209;\r\n  t[103] = 214;\r\n  t[104] = 220;\r\n  t[105] = 225;\r\n  t[106] = 224;\r\n  t[107] = 226;\r\n  t[108] = 228;\r\n  t[109] = 227;\r\n  t[110] = 229;\r\n  t[111] = 231;\r\n  t[112] = 233;\r\n  t[113] = 232;\r\n  t[114] = 234;\r\n  t[115] = 235;\r\n  t[116] = 237;\r\n  t[117] = 236;\r\n  t[118] = 238;\r\n  t[119] = 239;\r\n  t[120] = 241;\r\n  t[121] = 243;\r\n  t[122] = 242;\r\n  t[123] = 244;\r\n  t[124] = 246;\r\n  t[125] = 245;\r\n  t[126] = 250;\r\n  t[127] = 249;\r\n  t[128] = 251;\r\n  t[129] = 252;\r\n  t[130] = 8224;\r\n  t[131] = 176;\r\n  t[132] = 162;\r\n  t[133] = 163;\r\n  t[134] = 167;\r\n  t[135] = 8226;\r\n  t[136] = 182;\r\n  t[137] = 223;\r\n  t[138] = 174;\r\n  t[139] = 169;\r\n  t[140] = 8482;\r\n  t[141] = 180;\r\n  t[142] = 168;\r\n  t[143] = 8800;\r\n  t[144] = 198;\r\n  t[145] = 216;\r\n  t[146] = 8734;\r\n  t[147] = 177;\r\n  t[148] = 8804;\r\n  t[149] = 8805;\r\n  t[150] = 165;\r\n  t[151] = 181;\r\n  t[152] = 8706;\r\n  t[153] = 8721;\r\n  t[154] = 8719;\r\n  t[156] = 8747;\r\n  t[157] = 170;\r\n  t[158] = 186;\r\n  t[159] = 8486;\r\n  t[160] = 230;\r\n  t[161] = 248;\r\n  t[162] = 191;\r\n  t[163] = 161;\r\n  t[164] = 172;\r\n  t[165] = 8730;\r\n  t[166] = 402;\r\n  t[167] = 8776;\r\n  t[168] = 8710;\r\n  t[169] = 171;\r\n  t[170] = 187;\r\n  t[171] = 8230;\r\n  t[210] = 218;\r\n  t[223] = 711;\r\n  t[224] = 321;\r\n  t[225] = 322;\r\n  t[227] = 353;\r\n  t[229] = 382;\r\n  t[234] = 253;\r\n  t[252] = 263;\r\n  t[253] = 268;\r\n  t[254] = 269;\r\n  t[258] = 258;\r\n  t[260] = 260;\r\n  t[261] = 261;\r\n  t[265] = 280;\r\n  t[266] = 281;\r\n  t[268] = 283;\r\n  t[269] = 313;\r\n  t[275] = 323;\r\n  t[276] = 324;\r\n  t[278] = 328;\r\n  t[284] = 345;\r\n  t[285] = 346;\r\n  t[286] = 347;\r\n  t[292] = 367;\r\n  t[295] = 377;\r\n  t[296] = 378;\r\n  t[298] = 380;\r\n  t[305] = 963;\r\n  t[306] = 964;\r\n  t[307] = 966;\r\n  t[308] = 8215;\r\n  t[309] = 8252;\r\n  t[310] = 8319;\r\n  t[311] = 8359;\r\n  t[312] = 8592;\r\n  t[313] = 8593;\r\n  t[337] = 9552;\r\n  t[493] = 1039;\r\n  t[494] = 1040;\r\n  t[705] = 1524;\r\n  t[706] = 8362;\r\n  t[710] = 64288;\r\n  t[711] = 64298;\r\n  t[759] = 1617;\r\n  t[761] = 1776;\r\n  t[763] = 1778;\r\n  t[775] = 1652;\r\n  t[777] = 1764;\r\n  t[778] = 1780;\r\n  t[779] = 1781;\r\n  t[780] = 1782;\r\n  t[782] = 771;\r\n  t[783] = 64726;\r\n  t[786] = 8363;\r\n  t[788] = 8532;\r\n  t[790] = 768;\r\n  t[791] = 769;\r\n  t[792] = 768;\r\n  t[795] = 803;\r\n  t[797] = 64336;\r\n  t[798] = 64337;\r\n  t[799] = 64342;\r\n  t[800] = 64343;\r\n  t[801] = 64344;\r\n  t[802] = 64345;\r\n  t[803] = 64362;\r\n  t[804] = 64363;\r\n  t[805] = 64364;\r\n  t[2424] = 7821;\r\n  t[2425] = 7822;\r\n  t[2426] = 7823;\r\n  t[2427] = 7824;\r\n  t[2428] = 7825;\r\n  t[2429] = 7826;\r\n  t[2430] = 7827;\r\n  t[2433] = 7682;\r\n  t[2678] = 8045;\r\n  t[2679] = 8046;\r\n  t[2830] = 1552;\r\n  t[2838] = 686;\r\n  t[2840] = 751;\r\n  t[2842] = 753;\r\n  t[2843] = 754;\r\n  t[2844] = 755;\r\n  t[2846] = 757;\r\n  t[2856] = 767;\r\n  t[2857] = 848;\r\n  t[2858] = 849;\r\n  t[2862] = 853;\r\n  t[2863] = 854;\r\n  t[2864] = 855;\r\n  t[2865] = 861;\r\n  t[2866] = 862;\r\n  t[2906] = 7460;\r\n  t[2908] = 7462;\r\n  t[2909] = 7463;\r\n  t[2910] = 7464;\r\n  t[2912] = 7466;\r\n  t[2913] = 7467;\r\n  t[2914] = 7468;\r\n  t[2916] = 7470;\r\n  t[2917] = 7471;\r\n  t[2918] = 7472;\r\n  t[2920] = 7474;\r\n  t[2921] = 7475;\r\n  t[2922] = 7476;\r\n  t[2924] = 7478;\r\n  t[2925] = 7479;\r\n  t[2926] = 7480;\r\n  t[2928] = 7482;\r\n  t[2929] = 7483;\r\n  t[2930] = 7484;\r\n  t[2932] = 7486;\r\n  t[2933] = 7487;\r\n  t[2934] = 7488;\r\n  t[2936] = 7490;\r\n  t[2937] = 7491;\r\n  t[2938] = 7492;\r\n  t[2940] = 7494;\r\n  t[2941] = 7495;\r\n  t[2942] = 7496;\r\n  t[2944] = 7498;\r\n  t[2946] = 7500;\r\n  t[2948] = 7502;\r\n  t[2950] = 7504;\r\n  t[2951] = 7505;\r\n  t[2952] = 7506;\r\n  t[2954] = 7508;\r\n  t[2955] = 7509;\r\n  t[2956] = 7510;\r\n  t[2958] = 7512;\r\n  t[2959] = 7513;\r\n  t[2960] = 7514;\r\n  t[2962] = 7516;\r\n  t[2963] = 7517;\r\n  t[2964] = 7518;\r\n  t[2966] = 7520;\r\n  t[2967] = 7521;\r\n  t[2968] = 7522;\r\n  t[2970] = 7524;\r\n  t[2971] = 7525;\r\n  t[2972] = 7526;\r\n  t[2974] = 7528;\r\n  t[2975] = 7529;\r\n  t[2976] = 7530;\r\n  t[2978] = 1537;\r\n  t[2979] = 1538;\r\n  t[2980] = 1539;\r\n  t[2982] = 1549;\r\n  t[2983] = 1551;\r\n  t[2984] = 1552;\r\n  t[2986] = 1554;\r\n  t[2987] = 1555;\r\n  t[2988] = 1556;\r\n  t[2990] = 1623;\r\n  t[2991] = 1624;\r\n  t[2995] = 1775;\r\n  t[2999] = 1791;\r\n  t[3002] = 64290;\r\n  t[3003] = 64291;\r\n  t[3004] = 64292;\r\n  t[3006] = 64294;\r\n  t[3007] = 64295;\r\n  t[3008] = 64296;\r\n  t[3011] = 1900;\r\n  t[3014] = 8223;\r\n  t[3015] = 8244;\r\n  t[3017] = 7532;\r\n  t[3018] = 7533;\r\n  t[3019] = 7534;\r\n  t[3075] = 7590;\r\n  t[3076] = 7591;\r\n  t[3079] = 7594;\r\n  t[3080] = 7595;\r\n  t[3083] = 7598;\r\n  t[3084] = 7599;\r\n  t[3087] = 7602;\r\n  t[3088] = 7603;\r\n  t[3091] = 7606;\r\n  t[3092] = 7607;\r\n  t[3095] = 7610;\r\n  t[3096] = 7611;\r\n  t[3099] = 7614;\r\n  t[3100] = 7615;\r\n  t[3103] = 7618;\r\n  t[3104] = 7619;\r\n  t[3107] = 8337;\r\n  t[3108] = 8338;\r\n  t[3116] = 1884;\r\n  t[3119] = 1885;\r\n  t[3120] = 1885;\r\n  t[3123] = 1886;\r\n  t[3124] = 1886;\r\n  t[3127] = 1887;\r\n  t[3128] = 1887;\r\n  t[3131] = 1888;\r\n  t[3132] = 1888;\r\n  t[3135] = 1889;\r\n  t[3136] = 1889;\r\n  t[3139] = 1890;\r\n  t[3140] = 1890;\r\n  t[3143] = 1891;\r\n  t[3144] = 1891;\r\n  t[3147] = 1892;\r\n  t[3148] = 1892;\r\n  t[3153] = 580;\r\n  t[3154] = 581;\r\n  t[3157] = 584;\r\n  t[3158] = 585;\r\n  t[3161] = 588;\r\n  t[3162] = 589;\r\n  t[3165] = 891;\r\n  t[3166] = 892;\r\n  t[3169] = 1274;\r\n  t[3170] = 1275;\r\n  t[3173] = 1278;\r\n  t[3174] = 1279;\r\n  t[3181] = 7622;\r\n  t[3182] = 7623;\r\n  t[3282] = 11799;\r\n  t[3316] = 578;\r\n  t[3379] = 42785;\r\n  t[3393] = 1159;\r\n  t[3416] = 8377;\r\n});\r\nexports.getGlyphMapForStandardFonts = getGlyphMapForStandardFonts;\r\nvar getSupplementalGlyphMapForArialBlack = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n  t[227] = 322;\r\n  t[264] = 261;\r\n  t[291] = 346;\r\n});\r\nexports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack;\r\nvar getSupplementalGlyphMapForCalibri = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n  t[1] = 32;\r\n  t[4] = 65;\r\n  t[17] = 66;\r\n  t[18] = 67;\r\n  t[24] = 68;\r\n  t[28] = 69;\r\n  t[38] = 70;\r\n  t[39] = 71;\r\n  t[44] = 72;\r\n  t[47] = 73;\r\n  t[58] = 74;\r\n  t[60] = 75;\r\n  t[62] = 76;\r\n  t[68] = 77;\r\n  t[69] = 78;\r\n  t[75] = 79;\r\n  t[87] = 80;\r\n  t[89] = 81;\r\n  t[90] = 82;\r\n  t[94] = 83;\r\n  t[100] = 84;\r\n  t[104] = 85;\r\n  t[115] = 86;\r\n  t[116] = 87;\r\n  t[121] = 88;\r\n  t[122] = 89;\r\n  t[127] = 90;\r\n  t[258] = 97;\r\n  t[268] = 261;\r\n  t[271] = 98;\r\n  t[272] = 99;\r\n  t[273] = 263;\r\n  t[282] = 100;\r\n  t[286] = 101;\r\n  t[295] = 281;\r\n  t[296] = 102;\r\n  t[336] = 103;\r\n  t[346] = 104;\r\n  t[349] = 105;\r\n  t[361] = 106;\r\n  t[364] = 107;\r\n  t[367] = 108;\r\n  t[371] = 322;\r\n  t[373] = 109;\r\n  t[374] = 110;\r\n  t[381] = 111;\r\n  t[383] = 243;\r\n  t[393] = 112;\r\n  t[395] = 113;\r\n  t[396] = 114;\r\n  t[400] = 115;\r\n  t[401] = 347;\r\n  t[410] = 116;\r\n  t[437] = 117;\r\n  t[448] = 118;\r\n  t[449] = 119;\r\n  t[454] = 120;\r\n  t[455] = 121;\r\n  t[460] = 122;\r\n  t[463] = 380;\r\n  t[853] = 44;\r\n  t[855] = 58;\r\n  t[856] = 46;\r\n  t[876] = 47;\r\n  t[878] = 45;\r\n  t[882] = 45;\r\n  t[894] = 40;\r\n  t[895] = 41;\r\n  t[896] = 91;\r\n  t[897] = 93;\r\n  t[923] = 64;\r\n  t[1004] = 48;\r\n  t[1005] = 49;\r\n  t[1006] = 50;\r\n  t[1007] = 51;\r\n  t[1008] = 52;\r\n  t[1009] = 53;\r\n  t[1010] = 54;\r\n  t[1011] = 55;\r\n  t[1012] = 56;\r\n  t[1013] = 57;\r\n  t[1081] = 37;\r\n  t[1085] = 43;\r\n  t[1086] = 45;\r\n});\r\nexports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri;\r\n\r\n/***/ }),\r\n/* 165 */\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n__w_pdfjs_require__.r(__webpack_exports__);\r\n/* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, {\r\n/* harmony export */   \"getNormalizedUnicodes\": () => (/* binding */ getNormalizedUnicodes),\r\n/* harmony export */   \"getUnicodeForGlyph\": () => (/* binding */ getUnicodeForGlyph),\r\n/* harmony export */   \"getUnicodeRangeFor\": () => (/* binding */ getUnicodeRangeFor),\r\n/* harmony export */   \"mapSpecialUnicodeValues\": () => (/* binding */ mapSpecialUnicodeValues),\r\n/* harmony export */   \"reverseIfRtl\": () => (/* binding */ reverseIfRtl)\r\n/* harmony export */ });\r\n/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(138);\r\n\r\nvar getSpecialPUASymbols = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getLookupTableFactory)(function (t) {\r\n t[63721] = 0x00a9;\r\n t[63193] = 0x00a9;\r\n t[63720] = 0x00ae;\r\n t[63194] = 0x00ae;\r\n t[63722] = 0x2122;\r\n t[63195] = 0x2122;\r\n t[63729] = 0x23a7;\r\n t[63730] = 0x23a8;\r\n t[63731] = 0x23a9;\r\n t[63740] = 0x23ab;\r\n t[63741] = 0x23ac;\r\n t[63742] = 0x23ad;\r\n t[63726] = 0x23a1;\r\n t[63727] = 0x23a2;\r\n t[63728] = 0x23a3;\r\n t[63737] = 0x23a4;\r\n t[63738] = 0x23a5;\r\n t[63739] = 0x23a6;\r\n t[63723] = 0x239b;\r\n t[63724] = 0x239c;\r\n t[63725] = 0x239d;\r\n t[63734] = 0x239e;\r\n t[63735] = 0x239f;\r\n t[63736] = 0x23a0;\r\n});\r\nfunction mapSpecialUnicodeValues(code) {\r\n if (code >= 0xfff0 && code <= 0xffff) {\r\n  return 0;\r\n } else if (code >= 0xf600 && code <= 0xf8ff) {\r\n  return getSpecialPUASymbols()[code] || code;\r\n } else if (code === 0x00ad) {\r\n  return 0x002d;\r\n }\r\n return code;\r\n}\r\nfunction getUnicodeForGlyph(name, glyphsUnicodeMap) {\r\n var unicode = glyphsUnicodeMap[name];\r\n if (unicode !== undefined) {\r\n  return unicode;\r\n }\r\n if (!name) {\r\n  return -1;\r\n }\r\n if (name[0] === \"u\") {\r\n  var nameLen = name.length, hexStr;\r\n  if (nameLen === 7 && name[1] === \"n\" && name[2] === \"i\") {\r\n   hexStr = name.substring(3);\r\n  } else if (nameLen >= 5 && nameLen <= 7) {\r\n   hexStr = name.substring(1);\r\n  } else {\r\n   return -1;\r\n  }\r\n  if (hexStr === hexStr.toUpperCase()) {\r\n   unicode = parseInt(hexStr, 16);\r\n   if (unicode >= 0) {\r\n    return unicode;\r\n   }\r\n  }\r\n }\r\n return -1;\r\n}\r\nvar UnicodeRanges = [\r\n {\r\n  begin: 0x0000,\r\n  end: 0x007f\r\n },\r\n {\r\n  begin: 0x0080,\r\n  end: 0x00ff\r\n },\r\n {\r\n  begin: 0x0100,\r\n  end: 0x017f\r\n },\r\n {\r\n  begin: 0x0180,\r\n  end: 0x024f\r\n },\r\n {\r\n  begin: 0x0250,\r\n  end: 0x02af\r\n },\r\n {\r\n  begin: 0x02b0,\r\n  end: 0x02ff\r\n },\r\n {\r\n  begin: 0x0300,\r\n  end: 0x036f\r\n },\r\n {\r\n  begin: 0x0370,\r\n  end: 0x03ff\r\n },\r\n {\r\n  begin: 0x2c80,\r\n  end: 0x2cff\r\n },\r\n {\r\n  begin: 0x0400,\r\n  end: 0x04ff\r\n },\r\n {\r\n  begin: 0x0530,\r\n  end: 0x058f\r\n },\r\n {\r\n  begin: 0x0590,\r\n  end: 0x05ff\r\n },\r\n {\r\n  begin: 0xa500,\r\n  end: 0xa63f\r\n },\r\n {\r\n  begin: 0x0600,\r\n  end: 0x06ff\r\n },\r\n {\r\n  begin: 0x07c0,\r\n  end: 0x07ff\r\n },\r\n {\r\n  begin: 0x0900,\r\n  end: 0x097f\r\n },\r\n {\r\n  begin: 0x0980,\r\n  end: 0x09ff\r\n },\r\n {\r\n  begin: 0x0a00,\r\n  end: 0x0a7f\r\n },\r\n {\r\n  begin: 0x0a80,\r\n  end: 0x0aff\r\n },\r\n {\r\n  begin: 0x0b00,\r\n  end: 0x0b7f\r\n },\r\n {\r\n  begin: 0x0b80,\r\n  end: 0x0bff\r\n },\r\n {\r\n  begin: 0x0c00,\r\n  end: 0x0c7f\r\n },\r\n {\r\n  begin: 0x0c80,\r\n  end: 0x0cff\r\n },\r\n {\r\n  begin: 0x0d00,\r\n  end: 0x0d7f\r\n },\r\n {\r\n  begin: 0x0e00,\r\n  end: 0x0e7f\r\n },\r\n {\r\n  begin: 0x0e80,\r\n  end: 0x0eff\r\n },\r\n {\r\n  begin: 0x10a0,\r\n  end: 0x10ff\r\n },\r\n {\r\n  begin: 0x1b00,\r\n  end: 0x1b7f\r\n },\r\n {\r\n  begin: 0x1100,\r\n  end: 0x11ff\r\n },\r\n {\r\n  begin: 0x1e00,\r\n  end: 0x1eff\r\n },\r\n {\r\n  begin: 0x1f00,\r\n  end: 0x1fff\r\n },\r\n {\r\n  begin: 0x2000,\r\n  end: 0x206f\r\n },\r\n {\r\n  begin: 0x2070,\r\n  end: 0x209f\r\n },\r\n {\r\n  begin: 0x20a0,\r\n  end: 0x20cf\r\n },\r\n {\r\n  begin: 0x20d0,\r\n  end: 0x20ff\r\n },\r\n {\r\n  begin: 0x2100,\r\n  end: 0x214f\r\n },\r\n {\r\n  begin: 0x2150,\r\n  end: 0x218f\r\n },\r\n {\r\n  begin: 0x2190,\r\n  end: 0x21ff\r\n },\r\n {\r\n  begin: 0x2200,\r\n  end: 0x22ff\r\n },\r\n {\r\n  begin: 0x2300,\r\n  end: 0x23ff\r\n },\r\n {\r\n  begin: 0x2400,\r\n  end: 0x243f\r\n },\r\n {\r\n  begin: 0x2440,\r\n  end: 0x245f\r\n },\r\n {\r\n  begin: 0x2460,\r\n  end: 0x24ff\r\n },\r\n {\r\n  begin: 0x2500,\r\n  end: 0x257f\r\n },\r\n {\r\n  begin: 0x2580,\r\n  end: 0x259f\r\n },\r\n {\r\n  begin: 0x25a0,\r\n  end: 0x25ff\r\n },\r\n {\r\n  begin: 0x2600,\r\n  end: 0x26ff\r\n },\r\n {\r\n  begin: 0x2700,\r\n  end: 0x27bf\r\n },\r\n {\r\n  begin: 0x3000,\r\n  end: 0x303f\r\n },\r\n {\r\n  begin: 0x3040,\r\n  end: 0x309f\r\n },\r\n {\r\n  begin: 0x30a0,\r\n  end: 0x30ff\r\n },\r\n {\r\n  begin: 0x3100,\r\n  end: 0x312f\r\n },\r\n {\r\n  begin: 0x3130,\r\n  end: 0x318f\r\n },\r\n {\r\n  begin: 0xa840,\r\n  end: 0xa87f\r\n },\r\n {\r\n  begin: 0x3200,\r\n  end: 0x32ff\r\n },\r\n {\r\n  begin: 0x3300,\r\n  end: 0x33ff\r\n },\r\n {\r\n  begin: 0xac00,\r\n  end: 0xd7af\r\n },\r\n {\r\n  begin: 0xd800,\r\n  end: 0xdfff\r\n },\r\n {\r\n  begin: 0x10900,\r\n  end: 0x1091f\r\n },\r\n {\r\n  begin: 0x4e00,\r\n  end: 0x9fff\r\n },\r\n {\r\n  begin: 0xe000,\r\n  end: 0xf8ff\r\n },\r\n {\r\n  begin: 0x31c0,\r\n  end: 0x31ef\r\n },\r\n {\r\n  begin: 0xfb00,\r\n  end: 0xfb4f\r\n },\r\n {\r\n  begin: 0xfb50,\r\n  end: 0xfdff\r\n },\r\n {\r\n  begin: 0xfe20,\r\n  end: 0xfe2f\r\n },\r\n {\r\n  begin: 0xfe10,\r\n  end: 0xfe1f\r\n },\r\n {\r\n  begin: 0xfe50,\r\n  end: 0xfe6f\r\n },\r\n {\r\n  begin: 0xfe70,\r\n  end: 0xfeff\r\n },\r\n {\r\n  begin: 0xff00,\r\n  end: 0xffef\r\n },\r\n {\r\n  begin: 0xfff0,\r\n  end: 0xffff\r\n },\r\n {\r\n  begin: 0x0f00,\r\n  end: 0x0fff\r\n },\r\n {\r\n  begin: 0x0700,\r\n  end: 0x074f\r\n },\r\n {\r\n  begin: 0x0780,\r\n  end: 0x07bf\r\n },\r\n {\r\n  begin: 0x0d80,\r\n  end: 0x0dff\r\n },\r\n {\r\n  begin: 0x1000,\r\n  end: 0x109f\r\n },\r\n {\r\n  begin: 0x1200,\r\n  end: 0x137f\r\n },\r\n {\r\n  begin: 0x13a0,\r\n  end: 0x13ff\r\n },\r\n {\r\n  begin: 0x1400,\r\n  end: 0x167f\r\n },\r\n {\r\n  begin: 0x1680,\r\n  end: 0x169f\r\n },\r\n {\r\n  begin: 0x16a0,\r\n  end: 0x16ff\r\n },\r\n {\r\n  begin: 0x1780,\r\n  end: 0x17ff\r\n },\r\n {\r\n  begin: 0x1800,\r\n  end: 0x18af\r\n },\r\n {\r\n  begin: 0x2800,\r\n  end: 0x28ff\r\n },\r\n {\r\n  begin: 0xa000,\r\n  end: 0xa48f\r\n },\r\n {\r\n  begin: 0x1700,\r\n  end: 0x171f\r\n },\r\n {\r\n  begin: 0x10300,\r\n  end: 0x1032f\r\n },\r\n {\r\n  begin: 0x10330,\r\n  end: 0x1034f\r\n },\r\n {\r\n  begin: 0x10400,\r\n  end: 0x1044f\r\n },\r\n {\r\n  begin: 0x1d000,\r\n  end: 0x1d0ff\r\n },\r\n {\r\n  begin: 0x1d400,\r\n  end: 0x1d7ff\r\n },\r\n {\r\n  begin: 0xff000,\r\n  end: 0xffffd\r\n },\r\n {\r\n  begin: 0xfe00,\r\n  end: 0xfe0f\r\n },\r\n {\r\n  begin: 0xe0000,\r\n  end: 0xe007f\r\n },\r\n {\r\n  begin: 0x1900,\r\n  end: 0x194f\r\n },\r\n {\r\n  begin: 0x1950,\r\n  end: 0x197f\r\n },\r\n {\r\n  begin: 0x1980,\r\n  end: 0x19df\r\n },\r\n {\r\n  begin: 0x1a00,\r\n  end: 0x1a1f\r\n },\r\n {\r\n  begin: 0x2c00,\r\n  end: 0x2c5f\r\n },\r\n {\r\n  begin: 0x2d30,\r\n  end: 0x2d7f\r\n },\r\n {\r\n  begin: 0x4dc0,\r\n  end: 0x4dff\r\n },\r\n {\r\n  begin: 0xa800,\r\n  end: 0xa82f\r\n },\r\n {\r\n  begin: 0x10000,\r\n  end: 0x1007f\r\n },\r\n {\r\n  begin: 0x10140,\r\n  end: 0x1018f\r\n },\r\n {\r\n  begin: 0x10380,\r\n  end: 0x1039f\r\n },\r\n {\r\n  begin: 0x103a0,\r\n  end: 0x103df\r\n },\r\n {\r\n  begin: 0x10450,\r\n  end: 0x1047f\r\n },\r\n {\r\n  begin: 0x10480,\r\n  end: 0x104af\r\n },\r\n {\r\n  begin: 0x10800,\r\n  end: 0x1083f\r\n },\r\n {\r\n  begin: 0x10a00,\r\n  end: 0x10a5f\r\n },\r\n {\r\n  begin: 0x1d300,\r\n  end: 0x1d35f\r\n },\r\n {\r\n  begin: 0x12000,\r\n  end: 0x123ff\r\n },\r\n {\r\n  begin: 0x1d360,\r\n  end: 0x1d37f\r\n },\r\n {\r\n  begin: 0x1b80,\r\n  end: 0x1bbf\r\n },\r\n {\r\n  begin: 0x1c00,\r\n  end: 0x1c4f\r\n },\r\n {\r\n  begin: 0x1c50,\r\n  end: 0x1c7f\r\n },\r\n {\r\n  begin: 0xa880,\r\n  end: 0xa8df\r\n },\r\n {\r\n  begin: 0xa900,\r\n  end: 0xa92f\r\n },\r\n {\r\n  begin: 0xa930,\r\n  end: 0xa95f\r\n },\r\n {\r\n  begin: 0xaa00,\r\n  end: 0xaa5f\r\n },\r\n {\r\n  begin: 0x10190,\r\n  end: 0x101cf\r\n },\r\n {\r\n  begin: 0x101d0,\r\n  end: 0x101ff\r\n },\r\n {\r\n  begin: 0x102a0,\r\n  end: 0x102df\r\n },\r\n {\r\n  begin: 0x1f030,\r\n  end: 0x1f09f\r\n }\r\n];\r\nfunction getUnicodeRangeFor(value) {\r\n for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) {\r\n  var range = UnicodeRanges[i];\r\n  if (value >= range.begin && value < range.end) {\r\n   return i;\r\n  }\r\n }\r\n return -1;\r\n}\r\nfunction isRTLRangeFor(value) {\r\n var range = UnicodeRanges[13];\r\n if (value >= range.begin && value < range.end) {\r\n  return true;\r\n }\r\n range = UnicodeRanges[11];\r\n if (value >= range.begin && value < range.end) {\r\n  return true;\r\n }\r\n return false;\r\n}\r\nvar getNormalizedUnicodes = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () {\r\n return [\r\n  \"\\u00A8\",\r\n  \"\\u0020\\u0308\",\r\n  \"\\u00AF\",\r\n  \"\\u0020\\u0304\",\r\n  \"\\u00B4\",\r\n  \"\\u0020\\u0301\",\r\n  \"\\u00B5\",\r\n  \"\\u03BC\",\r\n  \"\\u00B8\",\r\n  \"\\u0020\\u0327\",\r\n  \"\\u0132\",\r\n  \"\\u0049\\u004A\",\r\n  \"\\u0133\",\r\n  \"\\u0069\\u006A\",\r\n  \"\\u013F\",\r\n  \"\\u004C\\u00B7\",\r\n  \"\\u0140\",\r\n  \"\\u006C\\u00B7\",\r\n  \"\\u0149\",\r\n  \"\\u02BC\\u006E\",\r\n  \"\\u017F\",\r\n  \"\\u0073\",\r\n  \"\\u01C4\",\r\n  \"\\u0044\\u017D\",\r\n  \"\\u01C5\",\r\n  \"\\u0044\\u017E\",\r\n  \"\\u01C6\",\r\n  \"\\u0064\\u017E\",\r\n  \"\\u01C7\",\r\n  \"\\u004C\\u004A\",\r\n  \"\\u01C8\",\r\n  \"\\u004C\\u006A\",\r\n  \"\\u01C9\",\r\n  \"\\u006C\\u006A\",\r\n  \"\\u01CA\",\r\n  \"\\u004E\\u004A\",\r\n  \"\\u01CB\",\r\n  \"\\u004E\\u006A\",\r\n  \"\\u01CC\",\r\n  \"\\u006E\\u006A\",\r\n  \"\\u01F1\",\r\n  \"\\u0044\\u005A\",\r\n  \"\\u01F2\",\r\n  \"\\u0044\\u007A\",\r\n  \"\\u01F3\",\r\n  \"\\u0064\\u007A\",\r\n  \"\\u02D8\",\r\n  \"\\u0020\\u0306\",\r\n  \"\\u02D9\",\r\n  \"\\u0020\\u0307\",\r\n  \"\\u02DA\",\r\n  \"\\u0020\\u030A\",\r\n  \"\\u02DB\",\r\n  \"\\u0020\\u0328\",\r\n  \"\\u02DC\",\r\n  \"\\u0020\\u0303\",\r\n  \"\\u02DD\",\r\n  \"\\u0020\\u030B\",\r\n  \"\\u037A\",\r\n  \"\\u0020\\u0345\",\r\n  \"\\u0384\",\r\n  \"\\u0020\\u0301\",\r\n  \"\\u03D0\",\r\n  \"\\u03B2\",\r\n  \"\\u03D1\",\r\n  \"\\u03B8\",\r\n  \"\\u03D2\",\r\n  \"\\u03A5\",\r\n  \"\\u03D5\",\r\n  \"\\u03C6\",\r\n  \"\\u03D6\",\r\n  \"\\u03C0\",\r\n  \"\\u03F0\",\r\n  \"\\u03BA\",\r\n  \"\\u03F1\",\r\n  \"\\u03C1\",\r\n  \"\\u03F2\",\r\n  \"\\u03C2\",\r\n  \"\\u03F4\",\r\n  \"\\u0398\",\r\n  \"\\u03F5\",\r\n  \"\\u03B5\",\r\n  \"\\u03F9\",\r\n  \"\\u03A3\",\r\n  \"\\u0587\",\r\n  \"\\u0565\\u0582\",\r\n  \"\\u0675\",\r\n  \"\\u0627\\u0674\",\r\n  \"\\u0676\",\r\n  \"\\u0648\\u0674\",\r\n  \"\\u0677\",\r\n  \"\\u06C7\\u0674\",\r\n  \"\\u0678\",\r\n  \"\\u064A\\u0674\",\r\n  \"\\u0E33\",\r\n  \"\\u0E4D\\u0E32\",\r\n  \"\\u0EB3\",\r\n  \"\\u0ECD\\u0EB2\",\r\n  \"\\u0EDC\",\r\n  \"\\u0EAB\\u0E99\",\r\n  \"\\u0EDD\",\r\n  \"\\u0EAB\\u0EA1\",\r\n  \"\\u0F77\",\r\n  \"\\u0FB2\\u0F81\",\r\n  \"\\u0F79\",\r\n  \"\\u0FB3\\u0F81\",\r\n  \"\\u1E9A\",\r\n  \"\\u0061\\u02BE\",\r\n  \"\\u1FBD\",\r\n  \"\\u0020\\u0313\",\r\n  \"\\u1FBF\",\r\n  \"\\u0020\\u0313\",\r\n  \"\\u1FC0\",\r\n  \"\\u0020\\u0342\",\r\n  \"\\u1FFE\",\r\n  \"\\u0020\\u0314\",\r\n  \"\\u2002\",\r\n  \"\\u0020\",\r\n  \"\\u2003\",\r\n  \"\\u0020\",\r\n  \"\\u2004\",\r\n  \"\\u0020\",\r\n  \"\\u2005\",\r\n  \"\\u0020\",\r\n  \"\\u2006\",\r\n  \"\\u0020\",\r\n  \"\\u2008\",\r\n  \"\\u0020\",\r\n  \"\\u2009\",\r\n  \"\\u0020\",\r\n  \"\\u200A\",\r\n  \"\\u0020\",\r\n  \"\\u2017\",\r\n  \"\\u0020\\u0333\",\r\n  \"\\u2024\",\r\n  \"\\u002E\",\r\n  \"\\u2025\",\r\n  \"\\u002E\\u002E\",\r\n  \"\\u2026\",\r\n  \"\\u002E\\u002E\\u002E\",\r\n  \"\\u2033\",\r\n  \"\\u2032\\u2032\",\r\n  \"\\u2034\",\r\n  \"\\u2032\\u2032\\u2032\",\r\n  \"\\u2036\",\r\n  \"\\u2035\\u2035\",\r\n  \"\\u2037\",\r\n  \"\\u2035\\u2035\\u2035\",\r\n  \"\\u203C\",\r\n  \"\\u0021\\u0021\",\r\n  \"\\u203E\",\r\n  \"\\u0020\\u0305\",\r\n  \"\\u2047\",\r\n  \"\\u003F\\u003F\",\r\n  \"\\u2048\",\r\n  \"\\u003F\\u0021\",\r\n  \"\\u2049\",\r\n  \"\\u0021\\u003F\",\r\n  \"\\u2057\",\r\n  \"\\u2032\\u2032\\u2032\\u2032\",\r\n  \"\\u205F\",\r\n  \"\\u0020\",\r\n  \"\\u20A8\",\r\n  \"\\u0052\\u0073\",\r\n  \"\\u2100\",\r\n  \"\\u0061\\u002F\\u0063\",\r\n  \"\\u2101\",\r\n  \"\\u0061\\u002F\\u0073\",\r\n  \"\\u2103\",\r\n  \"\\u00B0\\u0043\",\r\n  \"\\u2105\",\r\n  \"\\u0063\\u002F\\u006F\",\r\n  \"\\u2106\",\r\n  \"\\u0063\\u002F\\u0075\",\r\n  \"\\u2107\",\r\n  \"\\u0190\",\r\n  \"\\u2109\",\r\n  \"\\u00B0\\u0046\",\r\n  \"\\u2116\",\r\n  \"\\u004E\\u006F\",\r\n  \"\\u2121\",\r\n  \"\\u0054\\u0045\\u004C\",\r\n  \"\\u2135\",\r\n  \"\\u05D0\",\r\n  \"\\u2136\",\r\n  \"\\u05D1\",\r\n  \"\\u2137\",\r\n  \"\\u05D2\",\r\n  \"\\u2138\",\r\n  \"\\u05D3\",\r\n  \"\\u213B\",\r\n  \"\\u0046\\u0041\\u0058\",\r\n  \"\\u2160\",\r\n  \"\\u0049\",\r\n  \"\\u2161\",\r\n  \"\\u0049\\u0049\",\r\n  \"\\u2162\",\r\n  \"\\u0049\\u0049\\u0049\",\r\n  \"\\u2163\",\r\n  \"\\u0049\\u0056\",\r\n  \"\\u2164\",\r\n  \"\\u0056\",\r\n  \"\\u2165\",\r\n  \"\\u0056\\u0049\",\r\n  \"\\u2166\",\r\n  \"\\u0056\\u0049\\u0049\",\r\n  \"\\u2167\",\r\n  \"\\u0056\\u0049\\u0049\\u0049\",\r\n  \"\\u2168\",\r\n  \"\\u0049\\u0058\",\r\n  \"\\u2169\",\r\n  \"\\u0058\",\r\n  \"\\u216A\",\r\n  \"\\u0058\\u0049\",\r\n  \"\\u216B\",\r\n  \"\\u0058\\u0049\\u0049\",\r\n  \"\\u216C\",\r\n  \"\\u004C\",\r\n  \"\\u216D\",\r\n  \"\\u0043\",\r\n  \"\\u216E\",\r\n  \"\\u0044\",\r\n  \"\\u216F\",\r\n  \"\\u004D\",\r\n  \"\\u2170\",\r\n  \"\\u0069\",\r\n  \"\\u2171\",\r\n  \"\\u0069\\u0069\",\r\n  \"\\u2172\",\r\n  \"\\u0069\\u0069\\u0069\",\r\n  \"\\u2173\",\r\n  \"\\u0069\\u0076\",\r\n  \"\\u2174\",\r\n  \"\\u0076\",\r\n  \"\\u2175\",\r\n  \"\\u0076\\u0069\",\r\n  \"\\u2176\",\r\n  \"\\u0076\\u0069\\u0069\",\r\n  \"\\u2177\",\r\n  \"\\u0076\\u0069\\u0069\\u0069\",\r\n  \"\\u2178\",\r\n  \"\\u0069\\u0078\",\r\n  \"\\u2179\",\r\n  \"\\u0078\",\r\n  \"\\u217A\",\r\n  \"\\u0078\\u0069\",\r\n  \"\\u217B\",\r\n  \"\\u0078\\u0069\\u0069\",\r\n  \"\\u217C\",\r\n  \"\\u006C\",\r\n  \"\\u217D\",\r\n  \"\\u0063\",\r\n  \"\\u217E\",\r\n  \"\\u0064\",\r\n  \"\\u217F\",\r\n  \"\\u006D\",\r\n  \"\\u222C\",\r\n  \"\\u222B\\u222B\",\r\n  \"\\u222D\",\r\n  \"\\u222B\\u222B\\u222B\",\r\n  \"\\u222F\",\r\n  \"\\u222E\\u222E\",\r\n  \"\\u2230\",\r\n  \"\\u222E\\u222E\\u222E\",\r\n  \"\\u2474\",\r\n  \"\\u0028\\u0031\\u0029\",\r\n  \"\\u2475\",\r\n  \"\\u0028\\u0032\\u0029\",\r\n  \"\\u2476\",\r\n  \"\\u0028\\u0033\\u0029\",\r\n  \"\\u2477\",\r\n  \"\\u0028\\u0034\\u0029\",\r\n  \"\\u2478\",\r\n  \"\\u0028\\u0035\\u0029\",\r\n  \"\\u2479\",\r\n  \"\\u0028\\u0036\\u0029\",\r\n  \"\\u247A\",\r\n  \"\\u0028\\u0037\\u0029\",\r\n  \"\\u247B\",\r\n  \"\\u0028\\u0038\\u0029\",\r\n  \"\\u247C\",\r\n  \"\\u0028\\u0039\\u0029\",\r\n  \"\\u247D\",\r\n  \"\\u0028\\u0031\\u0030\\u0029\",\r\n  \"\\u247E\",\r\n  \"\\u0028\\u0031\\u0031\\u0029\",\r\n  \"\\u247F\",\r\n  \"\\u0028\\u0031\\u0032\\u0029\",\r\n  \"\\u2480\",\r\n  \"\\u0028\\u0031\\u0033\\u0029\",\r\n  \"\\u2481\",\r\n  \"\\u0028\\u0031\\u0034\\u0029\",\r\n  \"\\u2482\",\r\n  \"\\u0028\\u0031\\u0035\\u0029\",\r\n  \"\\u2483\",\r\n  \"\\u0028\\u0031\\u0036\\u0029\",\r\n  \"\\u2484\",\r\n  \"\\u0028\\u0031\\u0037\\u0029\",\r\n  \"\\u2485\",\r\n  \"\\u0028\\u0031\\u0038\\u0029\",\r\n  \"\\u2486\",\r\n  \"\\u0028\\u0031\\u0039\\u0029\",\r\n  \"\\u2487\",\r\n  \"\\u0028\\u0032\\u0030\\u0029\",\r\n  \"\\u2488\",\r\n  \"\\u0031\\u002E\",\r\n  \"\\u2489\",\r\n  \"\\u0032\\u002E\",\r\n  \"\\u248A\",\r\n  \"\\u0033\\u002E\",\r\n  \"\\u248B\",\r\n  \"\\u0034\\u002E\",\r\n  \"\\u248C\",\r\n  \"\\u0035\\u002E\",\r\n  \"\\u248D\",\r\n  \"\\u0036\\u002E\",\r\n  \"\\u248E\",\r\n  \"\\u0037\\u002E\",\r\n  \"\\u248F\",\r\n  \"\\u0038\\u002E\",\r\n  \"\\u2490\",\r\n  \"\\u0039\\u002E\",\r\n  \"\\u2491\",\r\n  \"\\u0031\\u0030\\u002E\",\r\n  \"\\u2492\",\r\n  \"\\u0031\\u0031\\u002E\",\r\n  \"\\u2493\",\r\n  \"\\u0031\\u0032\\u002E\",\r\n  \"\\u2494\",\r\n  \"\\u0031\\u0033\\u002E\",\r\n  \"\\u2495\",\r\n  \"\\u0031\\u0034\\u002E\",\r\n  \"\\u2496\",\r\n  \"\\u0031\\u0035\\u002E\",\r\n  \"\\u2497\",\r\n  \"\\u0031\\u0036\\u002E\",\r\n  \"\\u2498\",\r\n  \"\\u0031\\u0037\\u002E\",\r\n  \"\\u2499\",\r\n  \"\\u0031\\u0038\\u002E\",\r\n  \"\\u249A\",\r\n  \"\\u0031\\u0039\\u002E\",\r\n  \"\\u249B\",\r\n  \"\\u0032\\u0030\\u002E\",\r\n  \"\\u249C\",\r\n  \"\\u0028\\u0061\\u0029\",\r\n  \"\\u249D\",\r\n  \"\\u0028\\u0062\\u0029\",\r\n  \"\\u249E\",\r\n  \"\\u0028\\u0063\\u0029\",\r\n  \"\\u249F\",\r\n  \"\\u0028\\u0064\\u0029\",\r\n  \"\\u24A0\",\r\n  \"\\u0028\\u0065\\u0029\",\r\n  \"\\u24A1\",\r\n  \"\\u0028\\u0066\\u0029\",\r\n  \"\\u24A2\",\r\n  \"\\u0028\\u0067\\u0029\",\r\n  \"\\u24A3\",\r\n  \"\\u0028\\u0068\\u0029\",\r\n  \"\\u24A4\",\r\n  \"\\u0028\\u0069\\u0029\",\r\n  \"\\u24A5\",\r\n  \"\\u0028\\u006A\\u0029\",\r\n  \"\\u24A6\",\r\n  \"\\u0028\\u006B\\u0029\",\r\n  \"\\u24A7\",\r\n  \"\\u0028\\u006C\\u0029\",\r\n  \"\\u24A8\",\r\n  \"\\u0028\\u006D\\u0029\",\r\n  \"\\u24A9\",\r\n  \"\\u0028\\u006E\\u0029\",\r\n  \"\\u24AA\",\r\n  \"\\u0028\\u006F\\u0029\",\r\n  \"\\u24AB\",\r\n  \"\\u0028\\u0070\\u0029\",\r\n  \"\\u24AC\",\r\n  \"\\u0028\\u0071\\u0029\",\r\n  \"\\u24AD\",\r\n  \"\\u0028\\u0072\\u0029\",\r\n  \"\\u24AE\",\r\n  \"\\u0028\\u0073\\u0029\",\r\n  \"\\u24AF\",\r\n  \"\\u0028\\u0074\\u0029\",\r\n  \"\\u24B0\",\r\n  \"\\u0028\\u0075\\u0029\",\r\n  \"\\u24B1\",\r\n  \"\\u0028\\u0076\\u0029\",\r\n  \"\\u24B2\",\r\n  \"\\u0028\\u0077\\u0029\",\r\n  \"\\u24B3\",\r\n  \"\\u0028\\u0078\\u0029\",\r\n  \"\\u24B4\",\r\n  \"\\u0028\\u0079\\u0029\",\r\n  \"\\u24B5\",\r\n  \"\\u0028\\u007A\\u0029\",\r\n  \"\\u2A0C\",\r\n  \"\\u222B\\u222B\\u222B\\u222B\",\r\n  \"\\u2A74\",\r\n  \"\\u003A\\u003A\\u003D\",\r\n  \"\\u2A75\",\r\n  \"\\u003D\\u003D\",\r\n  \"\\u2A76\",\r\n  \"\\u003D\\u003D\\u003D\",\r\n  \"\\u2E9F\",\r\n  \"\\u6BCD\",\r\n  \"\\u2EF3\",\r\n  \"\\u9F9F\",\r\n  \"\\u2F00\",\r\n  \"\\u4E00\",\r\n  \"\\u2F01\",\r\n  \"\\u4E28\",\r\n  \"\\u2F02\",\r\n  \"\\u4E36\",\r\n  \"\\u2F03\",\r\n  \"\\u4E3F\",\r\n  \"\\u2F04\",\r\n  \"\\u4E59\",\r\n  \"\\u2F05\",\r\n  \"\\u4E85\",\r\n  \"\\u2F06\",\r\n  \"\\u4E8C\",\r\n  \"\\u2F07\",\r\n  \"\\u4EA0\",\r\n  \"\\u2F08\",\r\n  \"\\u4EBA\",\r\n  \"\\u2F09\",\r\n  \"\\u513F\",\r\n  \"\\u2F0A\",\r\n  \"\\u5165\",\r\n  \"\\u2F0B\",\r\n  \"\\u516B\",\r\n  \"\\u2F0C\",\r\n  \"\\u5182\",\r\n  \"\\u2F0D\",\r\n  \"\\u5196\",\r\n  \"\\u2F0E\",\r\n  \"\\u51AB\",\r\n  \"\\u2F0F\",\r\n  \"\\u51E0\",\r\n  \"\\u2F10\",\r\n  \"\\u51F5\",\r\n  \"\\u2F11\",\r\n  \"\\u5200\",\r\n  \"\\u2F12\",\r\n  \"\\u529B\",\r\n  \"\\u2F13\",\r\n  \"\\u52F9\",\r\n  \"\\u2F14\",\r\n  \"\\u5315\",\r\n  \"\\u2F15\",\r\n  \"\\u531A\",\r\n  \"\\u2F16\",\r\n  \"\\u5338\",\r\n  \"\\u2F17\",\r\n  \"\\u5341\",\r\n  \"\\u2F18\",\r\n  \"\\u535C\",\r\n  \"\\u2F19\",\r\n  \"\\u5369\",\r\n  \"\\u2F1A\",\r\n  \"\\u5382\",\r\n  \"\\u2F1B\",\r\n  \"\\u53B6\",\r\n  \"\\u2F1C\",\r\n  \"\\u53C8\",\r\n  \"\\u2F1D\",\r\n  \"\\u53E3\",\r\n  \"\\u2F1E\",\r\n  \"\\u56D7\",\r\n  \"\\u2F1F\",\r\n  \"\\u571F\",\r\n  \"\\u2F20\",\r\n  \"\\u58EB\",\r\n  \"\\u2F21\",\r\n  \"\\u5902\",\r\n  \"\\u2F22\",\r\n  \"\\u590A\",\r\n  \"\\u2F23\",\r\n  \"\\u5915\",\r\n  \"\\u2F24\",\r\n  \"\\u5927\",\r\n  \"\\u2F25\",\r\n  \"\\u5973\",\r\n  \"\\u2F26\",\r\n  \"\\u5B50\",\r\n  \"\\u2F27\",\r\n  \"\\u5B80\",\r\n  \"\\u2F28\",\r\n  \"\\u5BF8\",\r\n  \"\\u2F29\",\r\n  \"\\u5C0F\",\r\n  \"\\u2F2A\",\r\n  \"\\u5C22\",\r\n  \"\\u2F2B\",\r\n  \"\\u5C38\",\r\n  \"\\u2F2C\",\r\n  \"\\u5C6E\",\r\n  \"\\u2F2D\",\r\n  \"\\u5C71\",\r\n  \"\\u2F2E\",\r\n  \"\\u5DDB\",\r\n  \"\\u2F2F\",\r\n  \"\\u5DE5\",\r\n  \"\\u2F30\",\r\n  \"\\u5DF1\",\r\n  \"\\u2F31\",\r\n  \"\\u5DFE\",\r\n  \"\\u2F32\",\r\n  \"\\u5E72\",\r\n  \"\\u2F33\",\r\n  \"\\u5E7A\",\r\n  \"\\u2F34\",\r\n  \"\\u5E7F\",\r\n  \"\\u2F35\",\r\n  \"\\u5EF4\",\r\n  \"\\u2F36\",\r\n  \"\\u5EFE\",\r\n  \"\\u2F37\",\r\n  \"\\u5F0B\",\r\n  \"\\u2F38\",\r\n  \"\\u5F13\",\r\n  \"\\u2F39\",\r\n  \"\\u5F50\",\r\n  \"\\u2F3A\",\r\n  \"\\u5F61\",\r\n  \"\\u2F3B\",\r\n  \"\\u5F73\",\r\n  \"\\u2F3C\",\r\n  \"\\u5FC3\",\r\n  \"\\u2F3D\",\r\n  \"\\u6208\",\r\n  \"\\u2F3E\",\r\n  \"\\u6236\",\r\n  \"\\u2F3F\",\r\n  \"\\u624B\",\r\n  \"\\u2F40\",\r\n  \"\\u652F\",\r\n  \"\\u2F41\",\r\n  \"\\u6534\",\r\n  \"\\u2F42\",\r\n  \"\\u6587\",\r\n  \"\\u2F43\",\r\n  \"\\u6597\",\r\n  \"\\u2F44\",\r\n  \"\\u65A4\",\r\n  \"\\u2F45\",\r\n  \"\\u65B9\",\r\n  \"\\u2F46\",\r\n  \"\\u65E0\",\r\n  \"\\u2F47\",\r\n  \"\\u65E5\",\r\n  \"\\u2F48\",\r\n  \"\\u66F0\",\r\n  \"\\u2F49\",\r\n  \"\\u6708\",\r\n  \"\\u2F4A\",\r\n  \"\\u6728\",\r\n  \"\\u2F4B\",\r\n  \"\\u6B20\",\r\n  \"\\u2F4C\",\r\n  \"\\u6B62\",\r\n  \"\\u2F4D\",\r\n  \"\\u6B79\",\r\n  \"\\u2F4E\",\r\n  \"\\u6BB3\",\r\n  \"\\u2F4F\",\r\n  \"\\u6BCB\",\r\n  \"\\u2F50\",\r\n  \"\\u6BD4\",\r\n  \"\\u2F51\",\r\n  \"\\u6BDB\",\r\n  \"\\u2F52\",\r\n  \"\\u6C0F\",\r\n  \"\\u2F53\",\r\n  \"\\u6C14\",\r\n  \"\\u2F54\",\r\n  \"\\u6C34\",\r\n  \"\\u2F55\",\r\n  \"\\u706B\",\r\n  \"\\u2F56\",\r\n  \"\\u722A\",\r\n  \"\\u2F57\",\r\n  \"\\u7236\",\r\n  \"\\u2F58\",\r\n  \"\\u723B\",\r\n  \"\\u2F59\",\r\n  \"\\u723F\",\r\n  \"\\u2F5A\",\r\n  \"\\u7247\",\r\n  \"\\u2F5B\",\r\n  \"\\u7259\",\r\n  \"\\u2F5C\",\r\n  \"\\u725B\",\r\n  \"\\u2F5D\",\r\n  \"\\u72AC\",\r\n  \"\\u2F5E\",\r\n  \"\\u7384\",\r\n  \"\\u2F5F\",\r\n  \"\\u7389\",\r\n  \"\\u2F60\",\r\n  \"\\u74DC\",\r\n  \"\\u2F61\",\r\n  \"\\u74E6\",\r\n  \"\\u2F62\",\r\n  \"\\u7518\",\r\n  \"\\u2F63\",\r\n  \"\\u751F\",\r\n  \"\\u2F64\",\r\n  \"\\u7528\",\r\n  \"\\u2F65\",\r\n  \"\\u7530\",\r\n  \"\\u2F66\",\r\n  \"\\u758B\",\r\n  \"\\u2F67\",\r\n  \"\\u7592\",\r\n  \"\\u2F68\",\r\n  \"\\u7676\",\r\n  \"\\u2F69\",\r\n  \"\\u767D\",\r\n  \"\\u2F6A\",\r\n  \"\\u76AE\",\r\n  \"\\u2F6B\",\r\n  \"\\u76BF\",\r\n  \"\\u2F6C\",\r\n  \"\\u76EE\",\r\n  \"\\u2F6D\",\r\n  \"\\u77DB\",\r\n  \"\\u2F6E\",\r\n  \"\\u77E2\",\r\n  \"\\u2F6F\",\r\n  \"\\u77F3\",\r\n  \"\\u2F70\",\r\n  \"\\u793A\",\r\n  \"\\u2F71\",\r\n  \"\\u79B8\",\r\n  \"\\u2F72\",\r\n  \"\\u79BE\",\r\n  \"\\u2F73\",\r\n  \"\\u7A74\",\r\n  \"\\u2F74\",\r\n  \"\\u7ACB\",\r\n  \"\\u2F75\",\r\n  \"\\u7AF9\",\r\n  \"\\u2F76\",\r\n  \"\\u7C73\",\r\n  \"\\u2F77\",\r\n  \"\\u7CF8\",\r\n  \"\\u2F78\",\r\n  \"\\u7F36\",\r\n  \"\\u2F79\",\r\n  \"\\u7F51\",\r\n  \"\\u2F7A\",\r\n  \"\\u7F8A\",\r\n  \"\\u2F7B\",\r\n  \"\\u7FBD\",\r\n  \"\\u2F7C\",\r\n  \"\\u8001\",\r\n  \"\\u2F7D\",\r\n  \"\\u800C\",\r\n  \"\\u2F7E\",\r\n  \"\\u8012\",\r\n  \"\\u2F7F\",\r\n  \"\\u8033\",\r\n  \"\\u2F80\",\r\n  \"\\u807F\",\r\n  \"\\u2F81\",\r\n  \"\\u8089\",\r\n  \"\\u2F82\",\r\n  \"\\u81E3\",\r\n  \"\\u2F83\",\r\n  \"\\u81EA\",\r\n  \"\\u2F84\",\r\n  \"\\u81F3\",\r\n  \"\\u2F85\",\r\n  \"\\u81FC\",\r\n  \"\\u2F86\",\r\n  \"\\u820C\",\r\n  \"\\u2F87\",\r\n  \"\\u821B\",\r\n  \"\\u2F88\",\r\n  \"\\u821F\",\r\n  \"\\u2F89\",\r\n  \"\\u826E\",\r\n  \"\\u2F8A\",\r\n  \"\\u8272\",\r\n  \"\\u2F8B\",\r\n  \"\\u8278\",\r\n  \"\\u2F8C\",\r\n  \"\\u864D\",\r\n  \"\\u2F8D\",\r\n  \"\\u866B\",\r\n  \"\\u2F8E\",\r\n  \"\\u8840\",\r\n  \"\\u2F8F\",\r\n  \"\\u884C\",\r\n  \"\\u2F90\",\r\n  \"\\u8863\",\r\n  \"\\u2F91\",\r\n  \"\\u897E\",\r\n  \"\\u2F92\",\r\n  \"\\u898B\",\r\n  \"\\u2F93\",\r\n  \"\\u89D2\",\r\n  \"\\u2F94\",\r\n  \"\\u8A00\",\r\n  \"\\u2F95\",\r\n  \"\\u8C37\",\r\n  \"\\u2F96\",\r\n  \"\\u8C46\",\r\n  \"\\u2F97\",\r\n  \"\\u8C55\",\r\n  \"\\u2F98\",\r\n  \"\\u8C78\",\r\n  \"\\u2F99\",\r\n  \"\\u8C9D\",\r\n  \"\\u2F9A\",\r\n  \"\\u8D64\",\r\n  \"\\u2F9B\",\r\n  \"\\u8D70\",\r\n  \"\\u2F9C\",\r\n  \"\\u8DB3\",\r\n  \"\\u2F9D\",\r\n  \"\\u8EAB\",\r\n  \"\\u2F9E\",\r\n  \"\\u8ECA\",\r\n  \"\\u2F9F\",\r\n  \"\\u8F9B\",\r\n  \"\\u2FA0\",\r\n  \"\\u8FB0\",\r\n  \"\\u2FA1\",\r\n  \"\\u8FB5\",\r\n  \"\\u2FA2\",\r\n  \"\\u9091\",\r\n  \"\\u2FA3\",\r\n  \"\\u9149\",\r\n  \"\\u2FA4\",\r\n  \"\\u91C6\",\r\n  \"\\u2FA5\",\r\n  \"\\u91CC\",\r\n  \"\\u2FA6\",\r\n  \"\\u91D1\",\r\n  \"\\u2FA7\",\r\n  \"\\u9577\",\r\n  \"\\u2FA8\",\r\n  \"\\u9580\",\r\n  \"\\u2FA9\",\r\n  \"\\u961C\",\r\n  \"\\u2FAA\",\r\n  \"\\u96B6\",\r\n  \"\\u2FAB\",\r\n  \"\\u96B9\",\r\n  \"\\u2FAC\",\r\n  \"\\u96E8\",\r\n  \"\\u2FAD\",\r\n  \"\\u9751\",\r\n  \"\\u2FAE\",\r\n  \"\\u975E\",\r\n  \"\\u2FAF\",\r\n  \"\\u9762\",\r\n  \"\\u2FB0\",\r\n  \"\\u9769\",\r\n  \"\\u2FB1\",\r\n  \"\\u97CB\",\r\n  \"\\u2FB2\",\r\n  \"\\u97ED\",\r\n  \"\\u2FB3\",\r\n  \"\\u97F3\",\r\n  \"\\u2FB4\",\r\n  \"\\u9801\",\r\n  \"\\u2FB5\",\r\n  \"\\u98A8\",\r\n  \"\\u2FB6\",\r\n  \"\\u98DB\",\r\n  \"\\u2FB7\",\r\n  \"\\u98DF\",\r\n  \"\\u2FB8\",\r\n  \"\\u9996\",\r\n  \"\\u2FB9\",\r\n  \"\\u9999\",\r\n  \"\\u2FBA\",\r\n  \"\\u99AC\",\r\n  \"\\u2FBB\",\r\n  \"\\u9AA8\",\r\n  \"\\u2FBC\",\r\n  \"\\u9AD8\",\r\n  \"\\u2FBD\",\r\n  \"\\u9ADF\",\r\n  \"\\u2FBE\",\r\n  \"\\u9B25\",\r\n  \"\\u2FBF\",\r\n  \"\\u9B2F\",\r\n  \"\\u2FC0\",\r\n  \"\\u9B32\",\r\n  \"\\u2FC1\",\r\n  \"\\u9B3C\",\r\n  \"\\u2FC2\",\r\n  \"\\u9B5A\",\r\n  \"\\u2FC3\",\r\n  \"\\u9CE5\",\r\n  \"\\u2FC4\",\r\n  \"\\u9E75\",\r\n  \"\\u2FC5\",\r\n  \"\\u9E7F\",\r\n  \"\\u2FC6\",\r\n  \"\\u9EA5\",\r\n  \"\\u2FC7\",\r\n  \"\\u9EBB\",\r\n  \"\\u2FC8\",\r\n  \"\\u9EC3\",\r\n  \"\\u2FC9\",\r\n  \"\\u9ECD\",\r\n  \"\\u2FCA\",\r\n  \"\\u9ED1\",\r\n  \"\\u2FCB\",\r\n  \"\\u9EF9\",\r\n  \"\\u2FCC\",\r\n  \"\\u9EFD\",\r\n  \"\\u2FCD\",\r\n  \"\\u9F0E\",\r\n  \"\\u2FCE\",\r\n  \"\\u9F13\",\r\n  \"\\u2FCF\",\r\n  \"\\u9F20\",\r\n  \"\\u2FD0\",\r\n  \"\\u9F3B\",\r\n  \"\\u2FD1\",\r\n  \"\\u9F4A\",\r\n  \"\\u2FD2\",\r\n  \"\\u9F52\",\r\n  \"\\u2FD3\",\r\n  \"\\u9F8D\",\r\n  \"\\u2FD4\",\r\n  \"\\u9F9C\",\r\n  \"\\u2FD5\",\r\n  \"\\u9FA0\",\r\n  \"\\u3036\",\r\n  \"\\u3012\",\r\n  \"\\u3038\",\r\n  \"\\u5341\",\r\n  \"\\u3039\",\r\n  \"\\u5344\",\r\n  \"\\u303A\",\r\n  \"\\u5345\",\r\n  \"\\u309B\",\r\n  \"\\u0020\\u3099\",\r\n  \"\\u309C\",\r\n  \"\\u0020\\u309A\",\r\n  \"\\u3131\",\r\n  \"\\u1100\",\r\n  \"\\u3132\",\r\n  \"\\u1101\",\r\n  \"\\u3133\",\r\n  \"\\u11AA\",\r\n  \"\\u3134\",\r\n  \"\\u1102\",\r\n  \"\\u3135\",\r\n  \"\\u11AC\",\r\n  \"\\u3136\",\r\n  \"\\u11AD\",\r\n  \"\\u3137\",\r\n  \"\\u1103\",\r\n  \"\\u3138\",\r\n  \"\\u1104\",\r\n  \"\\u3139\",\r\n  \"\\u1105\",\r\n  \"\\u313A\",\r\n  \"\\u11B0\",\r\n  \"\\u313B\",\r\n  \"\\u11B1\",\r\n  \"\\u313C\",\r\n  \"\\u11B2\",\r\n  \"\\u313D\",\r\n  \"\\u11B3\",\r\n  \"\\u313E\",\r\n  \"\\u11B4\",\r\n  \"\\u313F\",\r\n  \"\\u11B5\",\r\n  \"\\u3140\",\r\n  \"\\u111A\",\r\n  \"\\u3141\",\r\n  \"\\u1106\",\r\n  \"\\u3142\",\r\n  \"\\u1107\",\r\n  \"\\u3143\",\r\n  \"\\u1108\",\r\n  \"\\u3144\",\r\n  \"\\u1121\",\r\n  \"\\u3145\",\r\n  \"\\u1109\",\r\n  \"\\u3146\",\r\n  \"\\u110A\",\r\n  \"\\u3147\",\r\n  \"\\u110B\",\r\n  \"\\u3148\",\r\n  \"\\u110C\",\r\n  \"\\u3149\",\r\n  \"\\u110D\",\r\n  \"\\u314A\",\r\n  \"\\u110E\",\r\n  \"\\u314B\",\r\n  \"\\u110F\",\r\n  \"\\u314C\",\r\n  \"\\u1110\",\r\n  \"\\u314D\",\r\n  \"\\u1111\",\r\n  \"\\u314E\",\r\n  \"\\u1112\",\r\n  \"\\u314F\",\r\n  \"\\u1161\",\r\n  \"\\u3150\",\r\n  \"\\u1162\",\r\n  \"\\u3151\",\r\n  \"\\u1163\",\r\n  \"\\u3152\",\r\n  \"\\u1164\",\r\n  \"\\u3153\",\r\n  \"\\u1165\",\r\n  \"\\u3154\",\r\n  \"\\u1166\",\r\n  \"\\u3155\",\r\n  \"\\u1167\",\r\n  \"\\u3156\",\r\n  \"\\u1168\",\r\n  \"\\u3157\",\r\n  \"\\u1169\",\r\n  \"\\u3158\",\r\n  \"\\u116A\",\r\n  \"\\u3159\",\r\n  \"\\u116B\",\r\n  \"\\u315A\",\r\n  \"\\u116C\",\r\n  \"\\u315B\",\r\n  \"\\u116D\",\r\n  \"\\u315C\",\r\n  \"\\u116E\",\r\n  \"\\u315D\",\r\n  \"\\u116F\",\r\n  \"\\u315E\",\r\n  \"\\u1170\",\r\n  \"\\u315F\",\r\n  \"\\u1171\",\r\n  \"\\u3160\",\r\n  \"\\u1172\",\r\n  \"\\u3161\",\r\n  \"\\u1173\",\r\n  \"\\u3162\",\r\n  \"\\u1174\",\r\n  \"\\u3163\",\r\n  \"\\u1175\",\r\n  \"\\u3164\",\r\n  \"\\u1160\",\r\n  \"\\u3165\",\r\n  \"\\u1114\",\r\n  \"\\u3166\",\r\n  \"\\u1115\",\r\n  \"\\u3167\",\r\n  \"\\u11C7\",\r\n  \"\\u3168\",\r\n  \"\\u11C8\",\r\n  \"\\u3169\",\r\n  \"\\u11CC\",\r\n  \"\\u316A\",\r\n  \"\\u11CE\",\r\n  \"\\u316B\",\r\n  \"\\u11D3\",\r\n  \"\\u316C\",\r\n  \"\\u11D7\",\r\n  \"\\u316D\",\r\n  \"\\u11D9\",\r\n  \"\\u316E\",\r\n  \"\\u111C\",\r\n  \"\\u316F\",\r\n  \"\\u11DD\",\r\n  \"\\u3170\",\r\n  \"\\u11DF\",\r\n  \"\\u3171\",\r\n  \"\\u111D\",\r\n  \"\\u3172\",\r\n  \"\\u111E\",\r\n  \"\\u3173\",\r\n  \"\\u1120\",\r\n  \"\\u3174\",\r\n  \"\\u1122\",\r\n  \"\\u3175\",\r\n  \"\\u1123\",\r\n  \"\\u3176\",\r\n  \"\\u1127\",\r\n  \"\\u3177\",\r\n  \"\\u1129\",\r\n  \"\\u3178\",\r\n  \"\\u112B\",\r\n  \"\\u3179\",\r\n  \"\\u112C\",\r\n  \"\\u317A\",\r\n  \"\\u112D\",\r\n  \"\\u317B\",\r\n  \"\\u112E\",\r\n  \"\\u317C\",\r\n  \"\\u112F\",\r\n  \"\\u317D\",\r\n  \"\\u1132\",\r\n  \"\\u317E\",\r\n  \"\\u1136\",\r\n  \"\\u317F\",\r\n  \"\\u1140\",\r\n  \"\\u3180\",\r\n  \"\\u1147\",\r\n  \"\\u3181\",\r\n  \"\\u114C\",\r\n  \"\\u3182\",\r\n  \"\\u11F1\",\r\n  \"\\u3183\",\r\n  \"\\u11F2\",\r\n  \"\\u3184\",\r\n  \"\\u1157\",\r\n  \"\\u3185\",\r\n  \"\\u1158\",\r\n  \"\\u3186\",\r\n  \"\\u1159\",\r\n  \"\\u3187\",\r\n  \"\\u1184\",\r\n  \"\\u3188\",\r\n  \"\\u1185\",\r\n  \"\\u3189\",\r\n  \"\\u1188\",\r\n  \"\\u318A\",\r\n  \"\\u1191\",\r\n  \"\\u318B\",\r\n  \"\\u1192\",\r\n  \"\\u318C\",\r\n  \"\\u1194\",\r\n  \"\\u318D\",\r\n  \"\\u119E\",\r\n  \"\\u318E\",\r\n  \"\\u11A1\",\r\n  \"\\u3200\",\r\n  \"\\u0028\\u1100\\u0029\",\r\n  \"\\u3201\",\r\n  \"\\u0028\\u1102\\u0029\",\r\n  \"\\u3202\",\r\n  \"\\u0028\\u1103\\u0029\",\r\n  \"\\u3203\",\r\n  \"\\u0028\\u1105\\u0029\",\r\n  \"\\u3204\",\r\n  \"\\u0028\\u1106\\u0029\",\r\n  \"\\u3205\",\r\n  \"\\u0028\\u1107\\u0029\",\r\n  \"\\u3206\",\r\n  \"\\u0028\\u1109\\u0029\",\r\n  \"\\u3207\",\r\n  \"\\u0028\\u110B\\u0029\",\r\n  \"\\u3208\",\r\n  \"\\u0028\\u110C\\u0029\",\r\n  \"\\u3209\",\r\n  \"\\u0028\\u110E\\u0029\",\r\n  \"\\u320A\",\r\n  \"\\u0028\\u110F\\u0029\",\r\n  \"\\u320B\",\r\n  \"\\u0028\\u1110\\u0029\",\r\n  \"\\u320C\",\r\n  \"\\u0028\\u1111\\u0029\",\r\n  \"\\u320D\",\r\n  \"\\u0028\\u1112\\u0029\",\r\n  \"\\u320E\",\r\n  \"\\u0028\\u1100\\u1161\\u0029\",\r\n  \"\\u320F\",\r\n  \"\\u0028\\u1102\\u1161\\u0029\",\r\n  \"\\u3210\",\r\n  \"\\u0028\\u1103\\u1161\\u0029\",\r\n  \"\\u3211\",\r\n  \"\\u0028\\u1105\\u1161\\u0029\",\r\n  \"\\u3212\",\r\n  \"\\u0028\\u1106\\u1161\\u0029\",\r\n  \"\\u3213\",\r\n  \"\\u0028\\u1107\\u1161\\u0029\",\r\n  \"\\u3214\",\r\n  \"\\u0028\\u1109\\u1161\\u0029\",\r\n  \"\\u3215\",\r\n  \"\\u0028\\u110B\\u1161\\u0029\",\r\n  \"\\u3216\",\r\n  \"\\u0028\\u110C\\u1161\\u0029\",\r\n  \"\\u3217\",\r\n  \"\\u0028\\u110E\\u1161\\u0029\",\r\n  \"\\u3218\",\r\n  \"\\u0028\\u110F\\u1161\\u0029\",\r\n  \"\\u3219\",\r\n  \"\\u0028\\u1110\\u1161\\u0029\",\r\n  \"\\u321A\",\r\n  \"\\u0028\\u1111\\u1161\\u0029\",\r\n  \"\\u321B\",\r\n  \"\\u0028\\u1112\\u1161\\u0029\",\r\n  \"\\u321C\",\r\n  \"\\u0028\\u110C\\u116E\\u0029\",\r\n  \"\\u321D\",\r\n  \"\\u0028\\u110B\\u1169\\u110C\\u1165\\u11AB\\u0029\",\r\n  \"\\u321E\",\r\n  \"\\u0028\\u110B\\u1169\\u1112\\u116E\\u0029\",\r\n  \"\\u3220\",\r\n  \"\\u0028\\u4E00\\u0029\",\r\n  \"\\u3221\",\r\n  \"\\u0028\\u4E8C\\u0029\",\r\n  \"\\u3222\",\r\n  \"\\u0028\\u4E09\\u0029\",\r\n  \"\\u3223\",\r\n  \"\\u0028\\u56DB\\u0029\",\r\n  \"\\u3224\",\r\n  \"\\u0028\\u4E94\\u0029\",\r\n  \"\\u3225\",\r\n  \"\\u0028\\u516D\\u0029\",\r\n  \"\\u3226\",\r\n  \"\\u0028\\u4E03\\u0029\",\r\n  \"\\u3227\",\r\n  \"\\u0028\\u516B\\u0029\",\r\n  \"\\u3228\",\r\n  \"\\u0028\\u4E5D\\u0029\",\r\n  \"\\u3229\",\r\n  \"\\u0028\\u5341\\u0029\",\r\n  \"\\u322A\",\r\n  \"\\u0028\\u6708\\u0029\",\r\n  \"\\u322B\",\r\n  \"\\u0028\\u706B\\u0029\",\r\n  \"\\u322C\",\r\n  \"\\u0028\\u6C34\\u0029\",\r\n  \"\\u322D\",\r\n  \"\\u0028\\u6728\\u0029\",\r\n  \"\\u322E\",\r\n  \"\\u0028\\u91D1\\u0029\",\r\n  \"\\u322F\",\r\n  \"\\u0028\\u571F\\u0029\",\r\n  \"\\u3230\",\r\n  \"\\u0028\\u65E5\\u0029\",\r\n  \"\\u3231\",\r\n  \"\\u0028\\u682A\\u0029\",\r\n  \"\\u3232\",\r\n  \"\\u0028\\u6709\\u0029\",\r\n  \"\\u3233\",\r\n  \"\\u0028\\u793E\\u0029\",\r\n  \"\\u3234\",\r\n  \"\\u0028\\u540D\\u0029\",\r\n  \"\\u3235\",\r\n  \"\\u0028\\u7279\\u0029\",\r\n  \"\\u3236\",\r\n  \"\\u0028\\u8CA1\\u0029\",\r\n  \"\\u3237\",\r\n  \"\\u0028\\u795D\\u0029\",\r\n  \"\\u3238\",\r\n  \"\\u0028\\u52B4\\u0029\",\r\n  \"\\u3239\",\r\n  \"\\u0028\\u4EE3\\u0029\",\r\n  \"\\u323A\",\r\n  \"\\u0028\\u547C\\u0029\",\r\n  \"\\u323B\",\r\n  \"\\u0028\\u5B66\\u0029\",\r\n  \"\\u323C\",\r\n  \"\\u0028\\u76E3\\u0029\",\r\n  \"\\u323D\",\r\n  \"\\u0028\\u4F01\\u0029\",\r\n  \"\\u323E\",\r\n  \"\\u0028\\u8CC7\\u0029\",\r\n  \"\\u323F\",\r\n  \"\\u0028\\u5354\\u0029\",\r\n  \"\\u3240\",\r\n  \"\\u0028\\u796D\\u0029\",\r\n  \"\\u3241\",\r\n  \"\\u0028\\u4F11\\u0029\",\r\n  \"\\u3242\",\r\n  \"\\u0028\\u81EA\\u0029\",\r\n  \"\\u3243\",\r\n  \"\\u0028\\u81F3\\u0029\",\r\n  \"\\u32C0\",\r\n  \"\\u0031\\u6708\",\r\n  \"\\u32C1\",\r\n  \"\\u0032\\u6708\",\r\n  \"\\u32C2\",\r\n  \"\\u0033\\u6708\",\r\n  \"\\u32C3\",\r\n  \"\\u0034\\u6708\",\r\n  \"\\u32C4\",\r\n  \"\\u0035\\u6708\",\r\n  \"\\u32C5\",\r\n  \"\\u0036\\u6708\",\r\n  \"\\u32C6\",\r\n  \"\\u0037\\u6708\",\r\n  \"\\u32C7\",\r\n  \"\\u0038\\u6708\",\r\n  \"\\u32C8\",\r\n  \"\\u0039\\u6708\",\r\n  \"\\u32C9\",\r\n  \"\\u0031\\u0030\\u6708\",\r\n  \"\\u32CA\",\r\n  \"\\u0031\\u0031\\u6708\",\r\n  \"\\u32CB\",\r\n  \"\\u0031\\u0032\\u6708\",\r\n  \"\\u3358\",\r\n  \"\\u0030\\u70B9\",\r\n  \"\\u3359\",\r\n  \"\\u0031\\u70B9\",\r\n  \"\\u335A\",\r\n  \"\\u0032\\u70B9\",\r\n  \"\\u335B\",\r\n  \"\\u0033\\u70B9\",\r\n  \"\\u335C\",\r\n  \"\\u0034\\u70B9\",\r\n  \"\\u335D\",\r\n  \"\\u0035\\u70B9\",\r\n  \"\\u335E\",\r\n  \"\\u0036\\u70B9\",\r\n  \"\\u335F\",\r\n  \"\\u0037\\u70B9\",\r\n  \"\\u3360\",\r\n  \"\\u0038\\u70B9\",\r\n  \"\\u3361\",\r\n  \"\\u0039\\u70B9\",\r\n  \"\\u3362\",\r\n  \"\\u0031\\u0030\\u70B9\",\r\n  \"\\u3363\",\r\n  \"\\u0031\\u0031\\u70B9\",\r\n  \"\\u3364\",\r\n  \"\\u0031\\u0032\\u70B9\",\r\n  \"\\u3365\",\r\n  \"\\u0031\\u0033\\u70B9\",\r\n  \"\\u3366\",\r\n  \"\\u0031\\u0034\\u70B9\",\r\n  \"\\u3367\",\r\n  \"\\u0031\\u0035\\u70B9\",\r\n  \"\\u3368\",\r\n  \"\\u0031\\u0036\\u70B9\",\r\n  \"\\u3369\",\r\n  \"\\u0031\\u0037\\u70B9\",\r\n  \"\\u336A\",\r\n  \"\\u0031\\u0038\\u70B9\",\r\n  \"\\u336B\",\r\n  \"\\u0031\\u0039\\u70B9\",\r\n  \"\\u336C\",\r\n  \"\\u0032\\u0030\\u70B9\",\r\n  \"\\u336D\",\r\n  \"\\u0032\\u0031\\u70B9\",\r\n  \"\\u336E\",\r\n  \"\\u0032\\u0032\\u70B9\",\r\n  \"\\u336F\",\r\n  \"\\u0032\\u0033\\u70B9\",\r\n  \"\\u3370\",\r\n  \"\\u0032\\u0034\\u70B9\",\r\n  \"\\u33E0\",\r\n  \"\\u0031\\u65E5\",\r\n  \"\\u33E1\",\r\n  \"\\u0032\\u65E5\",\r\n  \"\\u33E2\",\r\n  \"\\u0033\\u65E5\",\r\n  \"\\u33E3\",\r\n  \"\\u0034\\u65E5\",\r\n  \"\\u33E4\",\r\n  \"\\u0035\\u65E5\",\r\n  \"\\u33E5\",\r\n  \"\\u0036\\u65E5\",\r\n  \"\\u33E6\",\r\n  \"\\u0037\\u65E5\",\r\n  \"\\u33E7\",\r\n  \"\\u0038\\u65E5\",\r\n  \"\\u33E8\",\r\n  \"\\u0039\\u65E5\",\r\n  \"\\u33E9\",\r\n  \"\\u0031\\u0030\\u65E5\",\r\n  \"\\u33EA\",\r\n  \"\\u0031\\u0031\\u65E5\",\r\n  \"\\u33EB\",\r\n  \"\\u0031\\u0032\\u65E5\",\r\n  \"\\u33EC\",\r\n  \"\\u0031\\u0033\\u65E5\",\r\n  \"\\u33ED\",\r\n  \"\\u0031\\u0034\\u65E5\",\r\n  \"\\u33EE\",\r\n  \"\\u0031\\u0035\\u65E5\",\r\n  \"\\u33EF\",\r\n  \"\\u0031\\u0036\\u65E5\",\r\n  \"\\u33F0\",\r\n  \"\\u0031\\u0037\\u65E5\",\r\n  \"\\u33F1\",\r\n  \"\\u0031\\u0038\\u65E5\",\r\n  \"\\u33F2\",\r\n  \"\\u0031\\u0039\\u65E5\",\r\n  \"\\u33F3\",\r\n  \"\\u0032\\u0030\\u65E5\",\r\n  \"\\u33F4\",\r\n  \"\\u0032\\u0031\\u65E5\",\r\n  \"\\u33F5\",\r\n  \"\\u0032\\u0032\\u65E5\",\r\n  \"\\u33F6\",\r\n  \"\\u0032\\u0033\\u65E5\",\r\n  \"\\u33F7\",\r\n  \"\\u0032\\u0034\\u65E5\",\r\n  \"\\u33F8\",\r\n  \"\\u0032\\u0035\\u65E5\",\r\n  \"\\u33F9\",\r\n  \"\\u0032\\u0036\\u65E5\",\r\n  \"\\u33FA\",\r\n  \"\\u0032\\u0037\\u65E5\",\r\n  \"\\u33FB\",\r\n  \"\\u0032\\u0038\\u65E5\",\r\n  \"\\u33FC\",\r\n  \"\\u0032\\u0039\\u65E5\",\r\n  \"\\u33FD\",\r\n  \"\\u0033\\u0030\\u65E5\",\r\n  \"\\u33FE\",\r\n  \"\\u0033\\u0031\\u65E5\",\r\n  \"\\uFB00\",\r\n  \"\\u0066\\u0066\",\r\n  \"\\uFB01\",\r\n  \"\\u0066\\u0069\",\r\n  \"\\uFB02\",\r\n  \"\\u0066\\u006C\",\r\n  \"\\uFB03\",\r\n  \"\\u0066\\u0066\\u0069\",\r\n  \"\\uFB04\",\r\n  \"\\u0066\\u0066\\u006C\",\r\n  \"\\uFB05\",\r\n  \"\\u017F\\u0074\",\r\n  \"\\uFB06\",\r\n  \"\\u0073\\u0074\",\r\n  \"\\uFB13\",\r\n  \"\\u0574\\u0576\",\r\n  \"\\uFB14\",\r\n  \"\\u0574\\u0565\",\r\n  \"\\uFB15\",\r\n  \"\\u0574\\u056B\",\r\n  \"\\uFB16\",\r\n  \"\\u057E\\u0576\",\r\n  \"\\uFB17\",\r\n  \"\\u0574\\u056D\",\r\n  \"\\uFB4F\",\r\n  \"\\u05D0\\u05DC\",\r\n  \"\\uFB50\",\r\n  \"\\u0671\",\r\n  \"\\uFB51\",\r\n  \"\\u0671\",\r\n  \"\\uFB52\",\r\n  \"\\u067B\",\r\n  \"\\uFB53\",\r\n  \"\\u067B\",\r\n  \"\\uFB54\",\r\n  \"\\u067B\",\r\n  \"\\uFB55\",\r\n  \"\\u067B\",\r\n  \"\\uFB56\",\r\n  \"\\u067E\",\r\n  \"\\uFB57\",\r\n  \"\\u067E\",\r\n  \"\\uFB58\",\r\n  \"\\u067E\",\r\n  \"\\uFB59\",\r\n  \"\\u067E\",\r\n  \"\\uFB5A\",\r\n  \"\\u0680\",\r\n  \"\\uFB5B\",\r\n  \"\\u0680\",\r\n  \"\\uFB5C\",\r\n  \"\\u0680\",\r\n  \"\\uFB5D\",\r\n  \"\\u0680\",\r\n  \"\\uFB5E\",\r\n  \"\\u067A\",\r\n  \"\\uFB5F\",\r\n  \"\\u067A\",\r\n  \"\\uFB60\",\r\n  \"\\u067A\",\r\n  \"\\uFB61\",\r\n  \"\\u067A\",\r\n  \"\\uFB62\",\r\n  \"\\u067F\",\r\n  \"\\uFB63\",\r\n  \"\\u067F\",\r\n  \"\\uFB64\",\r\n  \"\\u067F\",\r\n  \"\\uFB65\",\r\n  \"\\u067F\",\r\n  \"\\uFB66\",\r\n  \"\\u0679\",\r\n  \"\\uFB67\",\r\n  \"\\u0679\",\r\n  \"\\uFB68\",\r\n  \"\\u0679\",\r\n  \"\\uFB69\",\r\n  \"\\u0679\",\r\n  \"\\uFB6A\",\r\n  \"\\u06A4\",\r\n  \"\\uFB6B\",\r\n  \"\\u06A4\",\r\n  \"\\uFB6C\",\r\n  \"\\u06A4\",\r\n  \"\\uFB6D\",\r\n  \"\\u06A4\",\r\n  \"\\uFB6E\",\r\n  \"\\u06A6\",\r\n  \"\\uFB6F\",\r\n  \"\\u06A6\",\r\n  \"\\uFB70\",\r\n  \"\\u06A6\",\r\n  \"\\uFB71\",\r\n  \"\\u06A6\",\r\n  \"\\uFB72\",\r\n  \"\\u0684\",\r\n  \"\\uFB73\",\r\n  \"\\u0684\",\r\n  \"\\uFB74\",\r\n  \"\\u0684\",\r\n  \"\\uFB75\",\r\n  \"\\u0684\",\r\n  \"\\uFB76\",\r\n  \"\\u0683\",\r\n  \"\\uFB77\",\r\n  \"\\u0683\",\r\n  \"\\uFB78\",\r\n  \"\\u0683\",\r\n  \"\\uFB79\",\r\n  \"\\u0683\",\r\n  \"\\uFB7A\",\r\n  \"\\u0686\",\r\n  \"\\uFB7B\",\r\n  \"\\u0686\",\r\n  \"\\uFB7C\",\r\n  \"\\u0686\",\r\n  \"\\uFB7D\",\r\n  \"\\u0686\",\r\n  \"\\uFB7E\",\r\n  \"\\u0687\",\r\n  \"\\uFB7F\",\r\n  \"\\u0687\",\r\n  \"\\uFB80\",\r\n  \"\\u0687\",\r\n  \"\\uFB81\",\r\n  \"\\u0687\",\r\n  \"\\uFB82\",\r\n  \"\\u068D\",\r\n  \"\\uFB83\",\r\n  \"\\u068D\",\r\n  \"\\uFB84\",\r\n  \"\\u068C\",\r\n  \"\\uFB85\",\r\n  \"\\u068C\",\r\n  \"\\uFB86\",\r\n  \"\\u068E\",\r\n  \"\\uFB87\",\r\n  \"\\u068E\",\r\n  \"\\uFB88\",\r\n  \"\\u0688\",\r\n  \"\\uFB89\",\r\n  \"\\u0688\",\r\n  \"\\uFB8A\",\r\n  \"\\u0698\",\r\n  \"\\uFB8B\",\r\n  \"\\u0698\",\r\n  \"\\uFB8C\",\r\n  \"\\u0691\",\r\n  \"\\uFB8D\",\r\n  \"\\u0691\",\r\n  \"\\uFB8E\",\r\n  \"\\u06A9\",\r\n  \"\\uFB8F\",\r\n  \"\\u06A9\",\r\n  \"\\uFB90\",\r\n  \"\\u06A9\",\r\n  \"\\uFB91\",\r\n  \"\\u06A9\",\r\n  \"\\uFB92\",\r\n  \"\\u06AF\",\r\n  \"\\uFB93\",\r\n  \"\\u06AF\",\r\n  \"\\uFB94\",\r\n  \"\\u06AF\",\r\n  \"\\uFB95\",\r\n  \"\\u06AF\",\r\n  \"\\uFB96\",\r\n  \"\\u06B3\",\r\n  \"\\uFB97\",\r\n  \"\\u06B3\",\r\n  \"\\uFB98\",\r\n  \"\\u06B3\",\r\n  \"\\uFB99\",\r\n  \"\\u06B3\",\r\n  \"\\uFB9A\",\r\n  \"\\u06B1\",\r\n  \"\\uFB9B\",\r\n  \"\\u06B1\",\r\n  \"\\uFB9C\",\r\n  \"\\u06B1\",\r\n  \"\\uFB9D\",\r\n  \"\\u06B1\",\r\n  \"\\uFB9E\",\r\n  \"\\u06BA\",\r\n  \"\\uFB9F\",\r\n  \"\\u06BA\",\r\n  \"\\uFBA0\",\r\n  \"\\u06BB\",\r\n  \"\\uFBA1\",\r\n  \"\\u06BB\",\r\n  \"\\uFBA2\",\r\n  \"\\u06BB\",\r\n  \"\\uFBA3\",\r\n  \"\\u06BB\",\r\n  \"\\uFBA4\",\r\n  \"\\u06C0\",\r\n  \"\\uFBA5\",\r\n  \"\\u06C0\",\r\n  \"\\uFBA6\",\r\n  \"\\u06C1\",\r\n  \"\\uFBA7\",\r\n  \"\\u06C1\",\r\n  \"\\uFBA8\",\r\n  \"\\u06C1\",\r\n  \"\\uFBA9\",\r\n  \"\\u06C1\",\r\n  \"\\uFBAA\",\r\n  \"\\u06BE\",\r\n  \"\\uFBAB\",\r\n  \"\\u06BE\",\r\n  \"\\uFBAC\",\r\n  \"\\u06BE\",\r\n  \"\\uFBAD\",\r\n  \"\\u06BE\",\r\n  \"\\uFBAE\",\r\n  \"\\u06D2\",\r\n  \"\\uFBAF\",\r\n  \"\\u06D2\",\r\n  \"\\uFBB0\",\r\n  \"\\u06D3\",\r\n  \"\\uFBB1\",\r\n  \"\\u06D3\",\r\n  \"\\uFBD3\",\r\n  \"\\u06AD\",\r\n  \"\\uFBD4\",\r\n  \"\\u06AD\",\r\n  \"\\uFBD5\",\r\n  \"\\u06AD\",\r\n  \"\\uFBD6\",\r\n  \"\\u06AD\",\r\n  \"\\uFBD7\",\r\n  \"\\u06C7\",\r\n  \"\\uFBD8\",\r\n  \"\\u06C7\",\r\n  \"\\uFBD9\",\r\n  \"\\u06C6\",\r\n  \"\\uFBDA\",\r\n  \"\\u06C6\",\r\n  \"\\uFBDB\",\r\n  \"\\u06C8\",\r\n  \"\\uFBDC\",\r\n  \"\\u06C8\",\r\n  \"\\uFBDD\",\r\n  \"\\u0677\",\r\n  \"\\uFBDE\",\r\n  \"\\u06CB\",\r\n  \"\\uFBDF\",\r\n  \"\\u06CB\",\r\n  \"\\uFBE0\",\r\n  \"\\u06C5\",\r\n  \"\\uFBE1\",\r\n  \"\\u06C5\",\r\n  \"\\uFBE2\",\r\n  \"\\u06C9\",\r\n  \"\\uFBE3\",\r\n  \"\\u06C9\",\r\n  \"\\uFBE4\",\r\n  \"\\u06D0\",\r\n  \"\\uFBE5\",\r\n  \"\\u06D0\",\r\n  \"\\uFBE6\",\r\n  \"\\u06D0\",\r\n  \"\\uFBE7\",\r\n  \"\\u06D0\",\r\n  \"\\uFBE8\",\r\n  \"\\u0649\",\r\n  \"\\uFBE9\",\r\n  \"\\u0649\",\r\n  \"\\uFBEA\",\r\n  \"\\u0626\\u0627\",\r\n  \"\\uFBEB\",\r\n  \"\\u0626\\u0627\",\r\n  \"\\uFBEC\",\r\n  \"\\u0626\\u06D5\",\r\n  \"\\uFBED\",\r\n  \"\\u0626\\u06D5\",\r\n  \"\\uFBEE\",\r\n  \"\\u0626\\u0648\",\r\n  \"\\uFBEF\",\r\n  \"\\u0626\\u0648\",\r\n  \"\\uFBF0\",\r\n  \"\\u0626\\u06C7\",\r\n  \"\\uFBF1\",\r\n  \"\\u0626\\u06C7\",\r\n  \"\\uFBF2\",\r\n  \"\\u0626\\u06C6\",\r\n  \"\\uFBF3\",\r\n  \"\\u0626\\u06C6\",\r\n  \"\\uFBF4\",\r\n  \"\\u0626\\u06C8\",\r\n  \"\\uFBF5\",\r\n  \"\\u0626\\u06C8\",\r\n  \"\\uFBF6\",\r\n  \"\\u0626\\u06D0\",\r\n  \"\\uFBF7\",\r\n  \"\\u0626\\u06D0\",\r\n  \"\\uFBF8\",\r\n  \"\\u0626\\u06D0\",\r\n  \"\\uFBF9\",\r\n  \"\\u0626\\u0649\",\r\n  \"\\uFBFA\",\r\n  \"\\u0626\\u0649\",\r\n  \"\\uFBFB\",\r\n  \"\\u0626\\u0649\",\r\n  \"\\uFBFC\",\r\n  \"\\u06CC\",\r\n  \"\\uFBFD\",\r\n  \"\\u06CC\",\r\n  \"\\uFBFE\",\r\n  \"\\u06CC\",\r\n  \"\\uFBFF\",\r\n  \"\\u06CC\",\r\n  \"\\uFC00\",\r\n  \"\\u0626\\u062C\",\r\n  \"\\uFC01\",\r\n  \"\\u0626\\u062D\",\r\n  \"\\uFC02\",\r\n  \"\\u0626\\u0645\",\r\n  \"\\uFC03\",\r\n  \"\\u0626\\u0649\",\r\n  \"\\uFC04\",\r\n  \"\\u0626\\u064A\",\r\n  \"\\uFC05\",\r\n  \"\\u0628\\u062C\",\r\n  \"\\uFC06\",\r\n  \"\\u0628\\u062D\",\r\n  \"\\uFC07\",\r\n  \"\\u0628\\u062E\",\r\n  \"\\uFC08\",\r\n  \"\\u0628\\u0645\",\r\n  \"\\uFC09\",\r\n  \"\\u0628\\u0649\",\r\n  \"\\uFC0A\",\r\n  \"\\u0628\\u064A\",\r\n  \"\\uFC0B\",\r\n  \"\\u062A\\u062C\",\r\n  \"\\uFC0C\",\r\n  \"\\u062A\\u062D\",\r\n  \"\\uFC0D\",\r\n  \"\\u062A\\u062E\",\r\n  \"\\uFC0E\",\r\n  \"\\u062A\\u0645\",\r\n  \"\\uFC0F\",\r\n  \"\\u062A\\u0649\",\r\n  \"\\uFC10\",\r\n  \"\\u062A\\u064A\",\r\n  \"\\uFC11\",\r\n  \"\\u062B\\u062C\",\r\n  \"\\uFC12\",\r\n  \"\\u062B\\u0645\",\r\n  \"\\uFC13\",\r\n  \"\\u062B\\u0649\",\r\n  \"\\uFC14\",\r\n  \"\\u062B\\u064A\",\r\n  \"\\uFC15\",\r\n  \"\\u062C\\u062D\",\r\n  \"\\uFC16\",\r\n  \"\\u062C\\u0645\",\r\n  \"\\uFC17\",\r\n  \"\\u062D\\u062C\",\r\n  \"\\uFC18\",\r\n  \"\\u062D\\u0645\",\r\n  \"\\uFC19\",\r\n  \"\\u062E\\u062C\",\r\n  \"\\uFC1A\",\r\n  \"\\u062E\\u062D\",\r\n  \"\\uFC1B\",\r\n  \"\\u062E\\u0645\",\r\n  \"\\uFC1C\",\r\n  \"\\u0633\\u062C\",\r\n  \"\\uFC1D\",\r\n  \"\\u0633\\u062D\",\r\n  \"\\uFC1E\",\r\n  \"\\u0633\\u062E\",\r\n  \"\\uFC1F\",\r\n  \"\\u0633\\u0645\",\r\n  \"\\uFC20\",\r\n  \"\\u0635\\u062D\",\r\n  \"\\uFC21\",\r\n  \"\\u0635\\u0645\",\r\n  \"\\uFC22\",\r\n  \"\\u0636\\u062C\",\r\n  \"\\uFC23\",\r\n  \"\\u0636\\u062D\",\r\n  \"\\uFC24\",\r\n  \"\\u0636\\u062E\",\r\n  \"\\uFC25\",\r\n  \"\\u0636\\u0645\",\r\n  \"\\uFC26\",\r\n  \"\\u0637\\u062D\",\r\n  \"\\uFC27\",\r\n  \"\\u0637\\u0645\",\r\n  \"\\uFC28\",\r\n  \"\\u0638\\u0645\",\r\n  \"\\uFC29\",\r\n  \"\\u0639\\u062C\",\r\n  \"\\uFC2A\",\r\n  \"\\u0639\\u0645\",\r\n  \"\\uFC2B\",\r\n  \"\\u063A\\u062C\",\r\n  \"\\uFC2C\",\r\n  \"\\u063A\\u0645\",\r\n  \"\\uFC2D\",\r\n  \"\\u0641\\u062C\",\r\n  \"\\uFC2E\",\r\n  \"\\u0641\\u062D\",\r\n  \"\\uFC2F\",\r\n  \"\\u0641\\u062E\",\r\n  \"\\uFC30\",\r\n  \"\\u0641\\u0645\",\r\n  \"\\uFC31\",\r\n  \"\\u0641\\u0649\",\r\n  \"\\uFC32\",\r\n  \"\\u0641\\u064A\",\r\n  \"\\uFC33\",\r\n  \"\\u0642\\u062D\",\r\n  \"\\uFC34\",\r\n  \"\\u0642\\u0645\",\r\n  \"\\uFC35\",\r\n  \"\\u0642\\u0649\",\r\n  \"\\uFC36\",\r\n  \"\\u0642\\u064A\",\r\n  \"\\uFC37\",\r\n  \"\\u0643\\u0627\",\r\n  \"\\uFC38\",\r\n  \"\\u0643\\u062C\",\r\n  \"\\uFC39\",\r\n  \"\\u0643\\u062D\",\r\n  \"\\uFC3A\",\r\n  \"\\u0643\\u062E\",\r\n  \"\\uFC3B\",\r\n  \"\\u0643\\u0644\",\r\n  \"\\uFC3C\",\r\n  \"\\u0643\\u0645\",\r\n  \"\\uFC3D\",\r\n  \"\\u0643\\u0649\",\r\n  \"\\uFC3E\",\r\n  \"\\u0643\\u064A\",\r\n  \"\\uFC3F\",\r\n  \"\\u0644\\u062C\",\r\n  \"\\uFC40\",\r\n  \"\\u0644\\u062D\",\r\n  \"\\uFC41\",\r\n  \"\\u0644\\u062E\",\r\n  \"\\uFC42\",\r\n  \"\\u0644\\u0645\",\r\n  \"\\uFC43\",\r\n  \"\\u0644\\u0649\",\r\n  \"\\uFC44\",\r\n  \"\\u0644\\u064A\",\r\n  \"\\uFC45\",\r\n  \"\\u0645\\u062C\",\r\n  \"\\uFC46\",\r\n  \"\\u0645\\u062D\",\r\n  \"\\uFC47\",\r\n  \"\\u0645\\u062E\",\r\n  \"\\uFC48\",\r\n  \"\\u0645\\u0645\",\r\n  \"\\uFC49\",\r\n  \"\\u0645\\u0649\",\r\n  \"\\uFC4A\",\r\n  \"\\u0645\\u064A\",\r\n  \"\\uFC4B\",\r\n  \"\\u0646\\u062C\",\r\n  \"\\uFC4C\",\r\n  \"\\u0646\\u062D\",\r\n  \"\\uFC4D\",\r\n  \"\\u0646\\u062E\",\r\n  \"\\uFC4E\",\r\n  \"\\u0646\\u0645\",\r\n  \"\\uFC4F\",\r\n  \"\\u0646\\u0649\",\r\n  \"\\uFC50\",\r\n  \"\\u0646\\u064A\",\r\n  \"\\uFC51\",\r\n  \"\\u0647\\u062C\",\r\n  \"\\uFC52\",\r\n  \"\\u0647\\u0645\",\r\n  \"\\uFC53\",\r\n  \"\\u0647\\u0649\",\r\n  \"\\uFC54\",\r\n  \"\\u0647\\u064A\",\r\n  \"\\uFC55\",\r\n  \"\\u064A\\u062C\",\r\n  \"\\uFC56\",\r\n  \"\\u064A\\u062D\",\r\n  \"\\uFC57\",\r\n  \"\\u064A\\u062E\",\r\n  \"\\uFC58\",\r\n  \"\\u064A\\u0645\",\r\n  \"\\uFC59\",\r\n  \"\\u064A\\u0649\",\r\n  \"\\uFC5A\",\r\n  \"\\u064A\\u064A\",\r\n  \"\\uFC5B\",\r\n  \"\\u0630\\u0670\",\r\n  \"\\uFC5C\",\r\n  \"\\u0631\\u0670\",\r\n  \"\\uFC5D\",\r\n  \"\\u0649\\u0670\",\r\n  \"\\uFC5E\",\r\n  \"\\u0020\\u064C\\u0651\",\r\n  \"\\uFC5F\",\r\n  \"\\u0020\\u064D\\u0651\",\r\n  \"\\uFC60\",\r\n  \"\\u0020\\u064E\\u0651\",\r\n  \"\\uFC61\",\r\n  \"\\u0020\\u064F\\u0651\",\r\n  \"\\uFC62\",\r\n  \"\\u0020\\u0650\\u0651\",\r\n  \"\\uFC63\",\r\n  \"\\u0020\\u0651\\u0670\",\r\n  \"\\uFC64\",\r\n  \"\\u0626\\u0631\",\r\n  \"\\uFC65\",\r\n  \"\\u0626\\u0632\",\r\n  \"\\uFC66\",\r\n  \"\\u0626\\u0645\",\r\n  \"\\uFC67\",\r\n  \"\\u0626\\u0646\",\r\n  \"\\uFC68\",\r\n  \"\\u0626\\u0649\",\r\n  \"\\uFC69\",\r\n  \"\\u0626\\u064A\",\r\n  \"\\uFC6A\",\r\n  \"\\u0628\\u0631\",\r\n  \"\\uFC6B\",\r\n  \"\\u0628\\u0632\",\r\n  \"\\uFC6C\",\r\n  \"\\u0628\\u0645\",\r\n  \"\\uFC6D\",\r\n  \"\\u0628\\u0646\",\r\n  \"\\uFC6E\",\r\n  \"\\u0628\\u0649\",\r\n  \"\\uFC6F\",\r\n  \"\\u0628\\u064A\",\r\n  \"\\uFC70\",\r\n  \"\\u062A\\u0631\",\r\n  \"\\uFC71\",\r\n  \"\\u062A\\u0632\",\r\n  \"\\uFC72\",\r\n  \"\\u062A\\u0645\",\r\n  \"\\uFC73\",\r\n  \"\\u062A\\u0646\",\r\n  \"\\uFC74\",\r\n  \"\\u062A\\u0649\",\r\n  \"\\uFC75\",\r\n  \"\\u062A\\u064A\",\r\n  \"\\uFC76\",\r\n  \"\\u062B\\u0631\",\r\n  \"\\uFC77\",\r\n  \"\\u062B\\u0632\",\r\n  \"\\uFC78\",\r\n  \"\\u062B\\u0645\",\r\n  \"\\uFC79\",\r\n  \"\\u062B\\u0646\",\r\n  \"\\uFC7A\",\r\n  \"\\u062B\\u0649\",\r\n  \"\\uFC7B\",\r\n  \"\\u062B\\u064A\",\r\n  \"\\uFC7C\",\r\n  \"\\u0641\\u0649\",\r\n  \"\\uFC7D\",\r\n  \"\\u0641\\u064A\",\r\n  \"\\uFC7E\",\r\n  \"\\u0642\\u0649\",\r\n  \"\\uFC7F\",\r\n  \"\\u0642\\u064A\",\r\n  \"\\uFC80\",\r\n  \"\\u0643\\u0627\",\r\n  \"\\uFC81\",\r\n  \"\\u0643\\u0644\",\r\n  \"\\uFC82\",\r\n  \"\\u0643\\u0645\",\r\n  \"\\uFC83\",\r\n  \"\\u0643\\u0649\",\r\n  \"\\uFC84\",\r\n  \"\\u0643\\u064A\",\r\n  \"\\uFC85\",\r\n  \"\\u0644\\u0645\",\r\n  \"\\uFC86\",\r\n  \"\\u0644\\u0649\",\r\n  \"\\uFC87\",\r\n  \"\\u0644\\u064A\",\r\n  \"\\uFC88\",\r\n  \"\\u0645\\u0627\",\r\n  \"\\uFC89\",\r\n  \"\\u0645\\u0645\",\r\n  \"\\uFC8A\",\r\n  \"\\u0646\\u0631\",\r\n  \"\\uFC8B\",\r\n  \"\\u0646\\u0632\",\r\n  \"\\uFC8C\",\r\n  \"\\u0646\\u0645\",\r\n  \"\\uFC8D\",\r\n  \"\\u0646\\u0646\",\r\n  \"\\uFC8E\",\r\n  \"\\u0646\\u0649\",\r\n  \"\\uFC8F\",\r\n  \"\\u0646\\u064A\",\r\n  \"\\uFC90\",\r\n  \"\\u0649\\u0670\",\r\n  \"\\uFC91\",\r\n  \"\\u064A\\u0631\",\r\n  \"\\uFC92\",\r\n  \"\\u064A\\u0632\",\r\n  \"\\uFC93\",\r\n  \"\\u064A\\u0645\",\r\n  \"\\uFC94\",\r\n  \"\\u064A\\u0646\",\r\n  \"\\uFC95\",\r\n  \"\\u064A\\u0649\",\r\n  \"\\uFC96\",\r\n  \"\\u064A\\u064A\",\r\n  \"\\uFC97\",\r\n  \"\\u0626\\u062C\",\r\n  \"\\uFC98\",\r\n  \"\\u0626\\u062D\",\r\n  \"\\uFC99\",\r\n  \"\\u0626\\u062E\",\r\n  \"\\uFC9A\",\r\n  \"\\u0626\\u0645\",\r\n  \"\\uFC9B\",\r\n  \"\\u0626\\u0647\",\r\n  \"\\uFC9C\",\r\n  \"\\u0628\\u062C\",\r\n  \"\\uFC9D\",\r\n  \"\\u0628\\u062D\",\r\n  \"\\uFC9E\",\r\n  \"\\u0628\\u062E\",\r\n  \"\\uFC9F\",\r\n  \"\\u0628\\u0645\",\r\n  \"\\uFCA0\",\r\n  \"\\u0628\\u0647\",\r\n  \"\\uFCA1\",\r\n  \"\\u062A\\u062C\",\r\n  \"\\uFCA2\",\r\n  \"\\u062A\\u062D\",\r\n  \"\\uFCA3\",\r\n  \"\\u062A\\u062E\",\r\n  \"\\uFCA4\",\r\n  \"\\u062A\\u0645\",\r\n  \"\\uFCA5\",\r\n  \"\\u062A\\u0647\",\r\n  \"\\uFCA6\",\r\n  \"\\u062B\\u0645\",\r\n  \"\\uFCA7\",\r\n  \"\\u062C\\u062D\",\r\n  \"\\uFCA8\",\r\n  \"\\u062C\\u0645\",\r\n  \"\\uFCA9\",\r\n  \"\\u062D\\u062C\",\r\n  \"\\uFCAA\",\r\n  \"\\u062D\\u0645\",\r\n  \"\\uFCAB\",\r\n  \"\\u062E\\u062C\",\r\n  \"\\uFCAC\",\r\n  \"\\u062E\\u0645\",\r\n  \"\\uFCAD\",\r\n  \"\\u0633\\u062C\",\r\n  \"\\uFCAE\",\r\n  \"\\u0633\\u062D\",\r\n  \"\\uFCAF\",\r\n  \"\\u0633\\u062E\",\r\n  \"\\uFCB0\",\r\n  \"\\u0633\\u0645\",\r\n  \"\\uFCB1\",\r\n  \"\\u0635\\u062D\",\r\n  \"\\uFCB2\",\r\n  \"\\u0635\\u062E\",\r\n  \"\\uFCB3\",\r\n  \"\\u0635\\u0645\",\r\n  \"\\uFCB4\",\r\n  \"\\u0636\\u062C\",\r\n  \"\\uFCB5\",\r\n  \"\\u0636\\u062D\",\r\n  \"\\uFCB6\",\r\n  \"\\u0636\\u062E\",\r\n  \"\\uFCB7\",\r\n  \"\\u0636\\u0645\",\r\n  \"\\uFCB8\",\r\n  \"\\u0637\\u062D\",\r\n  \"\\uFCB9\",\r\n  \"\\u0638\\u0645\",\r\n  \"\\uFCBA\",\r\n  \"\\u0639\\u062C\",\r\n  \"\\uFCBB\",\r\n  \"\\u0639\\u0645\",\r\n  \"\\uFCBC\",\r\n  \"\\u063A\\u062C\",\r\n  \"\\uFCBD\",\r\n  \"\\u063A\\u0645\",\r\n  \"\\uFCBE\",\r\n  \"\\u0641\\u062C\",\r\n  \"\\uFCBF\",\r\n  \"\\u0641\\u062D\",\r\n  \"\\uFCC0\",\r\n  \"\\u0641\\u062E\",\r\n  \"\\uFCC1\",\r\n  \"\\u0641\\u0645\",\r\n  \"\\uFCC2\",\r\n  \"\\u0642\\u062D\",\r\n  \"\\uFCC3\",\r\n  \"\\u0642\\u0645\",\r\n  \"\\uFCC4\",\r\n  \"\\u0643\\u062C\",\r\n  \"\\uFCC5\",\r\n  \"\\u0643\\u062D\",\r\n  \"\\uFCC6\",\r\n  \"\\u0643\\u062E\",\r\n  \"\\uFCC7\",\r\n  \"\\u0643\\u0644\",\r\n  \"\\uFCC8\",\r\n  \"\\u0643\\u0645\",\r\n  \"\\uFCC9\",\r\n  \"\\u0644\\u062C\",\r\n  \"\\uFCCA\",\r\n  \"\\u0644\\u062D\",\r\n  \"\\uFCCB\",\r\n  \"\\u0644\\u062E\",\r\n  \"\\uFCCC\",\r\n  \"\\u0644\\u0645\",\r\n  \"\\uFCCD\",\r\n  \"\\u0644\\u0647\",\r\n  \"\\uFCCE\",\r\n  \"\\u0645\\u062C\",\r\n  \"\\uFCCF\",\r\n  \"\\u0645\\u062D\",\r\n  \"\\uFCD0\",\r\n  \"\\u0645\\u062E\",\r\n  \"\\uFCD1\",\r\n  \"\\u0645\\u0645\",\r\n  \"\\uFCD2\",\r\n  \"\\u0646\\u062C\",\r\n  \"\\uFCD3\",\r\n  \"\\u0646\\u062D\",\r\n  \"\\uFCD4\",\r\n  \"\\u0646\\u062E\",\r\n  \"\\uFCD5\",\r\n  \"\\u0646\\u0645\",\r\n  \"\\uFCD6\",\r\n  \"\\u0646\\u0647\",\r\n  \"\\uFCD7\",\r\n  \"\\u0647\\u062C\",\r\n  \"\\uFCD8\",\r\n  \"\\u0647\\u0645\",\r\n  \"\\uFCD9\",\r\n  \"\\u0647\\u0670\",\r\n  \"\\uFCDA\",\r\n  \"\\u064A\\u062C\",\r\n  \"\\uFCDB\",\r\n  \"\\u064A\\u062D\",\r\n  \"\\uFCDC\",\r\n  \"\\u064A\\u062E\",\r\n  \"\\uFCDD\",\r\n  \"\\u064A\\u0645\",\r\n  \"\\uFCDE\",\r\n  \"\\u064A\\u0647\",\r\n  \"\\uFCDF\",\r\n  \"\\u0626\\u0645\",\r\n  \"\\uFCE0\",\r\n  \"\\u0626\\u0647\",\r\n  \"\\uFCE1\",\r\n  \"\\u0628\\u0645\",\r\n  \"\\uFCE2\",\r\n  \"\\u0628\\u0647\",\r\n  \"\\uFCE3\",\r\n  \"\\u062A\\u0645\",\r\n  \"\\uFCE4\",\r\n  \"\\u062A\\u0647\",\r\n  \"\\uFCE5\",\r\n  \"\\u062B\\u0645\",\r\n  \"\\uFCE6\",\r\n  \"\\u062B\\u0647\",\r\n  \"\\uFCE7\",\r\n  \"\\u0633\\u0645\",\r\n  \"\\uFCE8\",\r\n  \"\\u0633\\u0647\",\r\n  \"\\uFCE9\",\r\n  \"\\u0634\\u0645\",\r\n  \"\\uFCEA\",\r\n  \"\\u0634\\u0647\",\r\n  \"\\uFCEB\",\r\n  \"\\u0643\\u0644\",\r\n  \"\\uFCEC\",\r\n  \"\\u0643\\u0645\",\r\n  \"\\uFCED\",\r\n  \"\\u0644\\u0645\",\r\n  \"\\uFCEE\",\r\n  \"\\u0646\\u0645\",\r\n  \"\\uFCEF\",\r\n  \"\\u0646\\u0647\",\r\n  \"\\uFCF0\",\r\n  \"\\u064A\\u0645\",\r\n  \"\\uFCF1\",\r\n  \"\\u064A\\u0647\",\r\n  \"\\uFCF2\",\r\n  \"\\u0640\\u064E\\u0651\",\r\n  \"\\uFCF3\",\r\n  \"\\u0640\\u064F\\u0651\",\r\n  \"\\uFCF4\",\r\n  \"\\u0640\\u0650\\u0651\",\r\n  \"\\uFCF5\",\r\n  \"\\u0637\\u0649\",\r\n  \"\\uFCF6\",\r\n  \"\\u0637\\u064A\",\r\n  \"\\uFCF7\",\r\n  \"\\u0639\\u0649\",\r\n  \"\\uFCF8\",\r\n  \"\\u0639\\u064A\",\r\n  \"\\uFCF9\",\r\n  \"\\u063A\\u0649\",\r\n  \"\\uFCFA\",\r\n  \"\\u063A\\u064A\",\r\n  \"\\uFCFB\",\r\n  \"\\u0633\\u0649\",\r\n  \"\\uFCFC\",\r\n  \"\\u0633\\u064A\",\r\n  \"\\uFCFD\",\r\n  \"\\u0634\\u0649\",\r\n  \"\\uFCFE\",\r\n  \"\\u0634\\u064A\",\r\n  \"\\uFCFF\",\r\n  \"\\u062D\\u0649\",\r\n  \"\\uFD00\",\r\n  \"\\u062D\\u064A\",\r\n  \"\\uFD01\",\r\n  \"\\u062C\\u0649\",\r\n  \"\\uFD02\",\r\n  \"\\u062C\\u064A\",\r\n  \"\\uFD03\",\r\n  \"\\u062E\\u0649\",\r\n  \"\\uFD04\",\r\n  \"\\u062E\\u064A\",\r\n  \"\\uFD05\",\r\n  \"\\u0635\\u0649\",\r\n  \"\\uFD06\",\r\n  \"\\u0635\\u064A\",\r\n  \"\\uFD07\",\r\n  \"\\u0636\\u0649\",\r\n  \"\\uFD08\",\r\n  \"\\u0636\\u064A\",\r\n  \"\\uFD09\",\r\n  \"\\u0634\\u062C\",\r\n  \"\\uFD0A\",\r\n  \"\\u0634\\u062D\",\r\n  \"\\uFD0B\",\r\n  \"\\u0634\\u062E\",\r\n  \"\\uFD0C\",\r\n  \"\\u0634\\u0645\",\r\n  \"\\uFD0D\",\r\n  \"\\u0634\\u0631\",\r\n  \"\\uFD0E\",\r\n  \"\\u0633\\u0631\",\r\n  \"\\uFD0F\",\r\n  \"\\u0635\\u0631\",\r\n  \"\\uFD10\",\r\n  \"\\u0636\\u0631\",\r\n  \"\\uFD11\",\r\n  \"\\u0637\\u0649\",\r\n  \"\\uFD12\",\r\n  \"\\u0637\\u064A\",\r\n  \"\\uFD13\",\r\n  \"\\u0639\\u0649\",\r\n  \"\\uFD14\",\r\n  \"\\u0639\\u064A\",\r\n  \"\\uFD15\",\r\n  \"\\u063A\\u0649\",\r\n  \"\\uFD16\",\r\n  \"\\u063A\\u064A\",\r\n  \"\\uFD17\",\r\n  \"\\u0633\\u0649\",\r\n  \"\\uFD18\",\r\n  \"\\u0633\\u064A\",\r\n  \"\\uFD19\",\r\n  \"\\u0634\\u0649\",\r\n  \"\\uFD1A\",\r\n  \"\\u0634\\u064A\",\r\n  \"\\uFD1B\",\r\n  \"\\u062D\\u0649\",\r\n  \"\\uFD1C\",\r\n  \"\\u062D\\u064A\",\r\n  \"\\uFD1D\",\r\n  \"\\u062C\\u0649\",\r\n  \"\\uFD1E\",\r\n  \"\\u062C\\u064A\",\r\n  \"\\uFD1F\",\r\n  \"\\u062E\\u0649\",\r\n  \"\\uFD20\",\r\n  \"\\u062E\\u064A\",\r\n  \"\\uFD21\",\r\n  \"\\u0635\\u0649\",\r\n  \"\\uFD22\",\r\n  \"\\u0635\\u064A\",\r\n  \"\\uFD23\",\r\n  \"\\u0636\\u0649\",\r\n  \"\\uFD24\",\r\n  \"\\u0636\\u064A\",\r\n  \"\\uFD25\",\r\n  \"\\u0634\\u062C\",\r\n  \"\\uFD26\",\r\n  \"\\u0634\\u062D\",\r\n  \"\\uFD27\",\r\n  \"\\u0634\\u062E\",\r\n  \"\\uFD28\",\r\n  \"\\u0634\\u0645\",\r\n  \"\\uFD29\",\r\n  \"\\u0634\\u0631\",\r\n  \"\\uFD2A\",\r\n  \"\\u0633\\u0631\",\r\n  \"\\uFD2B\",\r\n  \"\\u0635\\u0631\",\r\n  \"\\uFD2C\",\r\n  \"\\u0636\\u0631\",\r\n  \"\\uFD2D\",\r\n  \"\\u0634\\u062C\",\r\n  \"\\uFD2E\",\r\n  \"\\u0634\\u062D\",\r\n  \"\\uFD2F\",\r\n  \"\\u0634\\u062E\",\r\n  \"\\uFD30\",\r\n  \"\\u0634\\u0645\",\r\n  \"\\uFD31\",\r\n  \"\\u0633\\u0647\",\r\n  \"\\uFD32\",\r\n  \"\\u0634\\u0647\",\r\n  \"\\uFD33\",\r\n  \"\\u0637\\u0645\",\r\n  \"\\uFD34\",\r\n  \"\\u0633\\u062C\",\r\n  \"\\uFD35\",\r\n  \"\\u0633\\u062D\",\r\n  \"\\uFD36\",\r\n  \"\\u0633\\u062E\",\r\n  \"\\uFD37\",\r\n  \"\\u0634\\u062C\",\r\n  \"\\uFD38\",\r\n  \"\\u0634\\u062D\",\r\n  \"\\uFD39\",\r\n  \"\\u0634\\u062E\",\r\n  \"\\uFD3A\",\r\n  \"\\u0637\\u0645\",\r\n  \"\\uFD3B\",\r\n  \"\\u0638\\u0645\",\r\n  \"\\uFD3C\",\r\n  \"\\u0627\\u064B\",\r\n  \"\\uFD3D\",\r\n  \"\\u0627\\u064B\",\r\n  \"\\uFD50\",\r\n  \"\\u062A\\u062C\\u0645\",\r\n  \"\\uFD51\",\r\n  \"\\u062A\\u062D\\u062C\",\r\n  \"\\uFD52\",\r\n  \"\\u062A\\u062D\\u062C\",\r\n  \"\\uFD53\",\r\n  \"\\u062A\\u062D\\u0645\",\r\n  \"\\uFD54\",\r\n  \"\\u062A\\u062E\\u0645\",\r\n  \"\\uFD55\",\r\n  \"\\u062A\\u0645\\u062C\",\r\n  \"\\uFD56\",\r\n  \"\\u062A\\u0645\\u062D\",\r\n  \"\\uFD57\",\r\n  \"\\u062A\\u0645\\u062E\",\r\n  \"\\uFD58\",\r\n  \"\\u062C\\u0645\\u062D\",\r\n  \"\\uFD59\",\r\n  \"\\u062C\\u0645\\u062D\",\r\n  \"\\uFD5A\",\r\n  \"\\u062D\\u0645\\u064A\",\r\n  \"\\uFD5B\",\r\n  \"\\u062D\\u0645\\u0649\",\r\n  \"\\uFD5C\",\r\n  \"\\u0633\\u062D\\u062C\",\r\n  \"\\uFD5D\",\r\n  \"\\u0633\\u062C\\u062D\",\r\n  \"\\uFD5E\",\r\n  \"\\u0633\\u062C\\u0649\",\r\n  \"\\uFD5F\",\r\n  \"\\u0633\\u0645\\u062D\",\r\n  \"\\uFD60\",\r\n  \"\\u0633\\u0645\\u062D\",\r\n  \"\\uFD61\",\r\n  \"\\u0633\\u0645\\u062C\",\r\n  \"\\uFD62\",\r\n  \"\\u0633\\u0645\\u0645\",\r\n  \"\\uFD63\",\r\n  \"\\u0633\\u0645\\u0645\",\r\n  \"\\uFD64\",\r\n  \"\\u0635\\u062D\\u062D\",\r\n  \"\\uFD65\",\r\n  \"\\u0635\\u062D\\u062D\",\r\n  \"\\uFD66\",\r\n  \"\\u0635\\u0645\\u0645\",\r\n  \"\\uFD67\",\r\n  \"\\u0634\\u062D\\u0645\",\r\n  \"\\uFD68\",\r\n  \"\\u0634\\u062D\\u0645\",\r\n  \"\\uFD69\",\r\n  \"\\u0634\\u062C\\u064A\",\r\n  \"\\uFD6A\",\r\n  \"\\u0634\\u0645\\u062E\",\r\n  \"\\uFD6B\",\r\n  \"\\u0634\\u0645\\u062E\",\r\n  \"\\uFD6C\",\r\n  \"\\u0634\\u0645\\u0645\",\r\n  \"\\uFD6D\",\r\n  \"\\u0634\\u0645\\u0645\",\r\n  \"\\uFD6E\",\r\n  \"\\u0636\\u062D\\u0649\",\r\n  \"\\uFD6F\",\r\n  \"\\u0636\\u062E\\u0645\",\r\n  \"\\uFD70\",\r\n  \"\\u0636\\u062E\\u0645\",\r\n  \"\\uFD71\",\r\n  \"\\u0637\\u0645\\u062D\",\r\n  \"\\uFD72\",\r\n  \"\\u0637\\u0645\\u062D\",\r\n  \"\\uFD73\",\r\n  \"\\u0637\\u0645\\u0645\",\r\n  \"\\uFD74\",\r\n  \"\\u0637\\u0645\\u064A\",\r\n  \"\\uFD75\",\r\n  \"\\u0639\\u062C\\u0645\",\r\n  \"\\uFD76\",\r\n  \"\\u0639\\u0645\\u0645\",\r\n  \"\\uFD77\",\r\n  \"\\u0639\\u0645\\u0645\",\r\n  \"\\uFD78\",\r\n  \"\\u0639\\u0645\\u0649\",\r\n  \"\\uFD79\",\r\n  \"\\u063A\\u0645\\u0645\",\r\n  \"\\uFD7A\",\r\n  \"\\u063A\\u0645\\u064A\",\r\n  \"\\uFD7B\",\r\n  \"\\u063A\\u0645\\u0649\",\r\n  \"\\uFD7C\",\r\n  \"\\u0641\\u062E\\u0645\",\r\n  \"\\uFD7D\",\r\n  \"\\u0641\\u062E\\u0645\",\r\n  \"\\uFD7E\",\r\n  \"\\u0642\\u0645\\u062D\",\r\n  \"\\uFD7F\",\r\n  \"\\u0642\\u0645\\u0645\",\r\n  \"\\uFD80\",\r\n  \"\\u0644\\u062D\\u0645\",\r\n  \"\\uFD81\",\r\n  \"\\u0644\\u062D\\u064A\",\r\n  \"\\uFD82\",\r\n  \"\\u0644\\u062D\\u0649\",\r\n  \"\\uFD83\",\r\n  \"\\u0644\\u062C\\u062C\",\r\n  \"\\uFD84\",\r\n  \"\\u0644\\u062C\\u062C\",\r\n  \"\\uFD85\",\r\n  \"\\u0644\\u062E\\u0645\",\r\n  \"\\uFD86\",\r\n  \"\\u0644\\u062E\\u0645\",\r\n  \"\\uFD87\",\r\n  \"\\u0644\\u0645\\u062D\",\r\n  \"\\uFD88\",\r\n  \"\\u0644\\u0645\\u062D\",\r\n  \"\\uFD89\",\r\n  \"\\u0645\\u062D\\u062C\",\r\n  \"\\uFD8A\",\r\n  \"\\u0645\\u062D\\u0645\",\r\n  \"\\uFD8B\",\r\n  \"\\u0645\\u062D\\u064A\",\r\n  \"\\uFD8C\",\r\n  \"\\u0645\\u062C\\u062D\",\r\n  \"\\uFD8D\",\r\n  \"\\u0645\\u062C\\u0645\",\r\n  \"\\uFD8E\",\r\n  \"\\u0645\\u062E\\u062C\",\r\n  \"\\uFD8F\",\r\n  \"\\u0645\\u062E\\u0645\",\r\n  \"\\uFD92\",\r\n  \"\\u0645\\u062C\\u062E\",\r\n  \"\\uFD93\",\r\n  \"\\u0647\\u0645\\u062C\",\r\n  \"\\uFD94\",\r\n  \"\\u0647\\u0645\\u0645\",\r\n  \"\\uFD95\",\r\n  \"\\u0646\\u062D\\u0645\",\r\n  \"\\uFD96\",\r\n  \"\\u0646\\u062D\\u0649\",\r\n  \"\\uFD97\",\r\n  \"\\u0646\\u062C\\u0645\",\r\n  \"\\uFD98\",\r\n  \"\\u0646\\u062C\\u0645\",\r\n  \"\\uFD99\",\r\n  \"\\u0646\\u062C\\u0649\",\r\n  \"\\uFD9A\",\r\n  \"\\u0646\\u0645\\u064A\",\r\n  \"\\uFD9B\",\r\n  \"\\u0646\\u0645\\u0649\",\r\n  \"\\uFD9C\",\r\n  \"\\u064A\\u0645\\u0645\",\r\n  \"\\uFD9D\",\r\n  \"\\u064A\\u0645\\u0645\",\r\n  \"\\uFD9E\",\r\n  \"\\u0628\\u062E\\u064A\",\r\n  \"\\uFD9F\",\r\n  \"\\u062A\\u062C\\u064A\",\r\n  \"\\uFDA0\",\r\n  \"\\u062A\\u062C\\u0649\",\r\n  \"\\uFDA1\",\r\n  \"\\u062A\\u062E\\u064A\",\r\n  \"\\uFDA2\",\r\n  \"\\u062A\\u062E\\u0649\",\r\n  \"\\uFDA3\",\r\n  \"\\u062A\\u0645\\u064A\",\r\n  \"\\uFDA4\",\r\n  \"\\u062A\\u0645\\u0649\",\r\n  \"\\uFDA5\",\r\n  \"\\u062C\\u0645\\u064A\",\r\n  \"\\uFDA6\",\r\n  \"\\u062C\\u062D\\u0649\",\r\n  \"\\uFDA7\",\r\n  \"\\u062C\\u0645\\u0649\",\r\n  \"\\uFDA8\",\r\n  \"\\u0633\\u062E\\u0649\",\r\n  \"\\uFDA9\",\r\n  \"\\u0635\\u062D\\u064A\",\r\n  \"\\uFDAA\",\r\n  \"\\u0634\\u062D\\u064A\",\r\n  \"\\uFDAB\",\r\n  \"\\u0636\\u062D\\u064A\",\r\n  \"\\uFDAC\",\r\n  \"\\u0644\\u062C\\u064A\",\r\n  \"\\uFDAD\",\r\n  \"\\u0644\\u0645\\u064A\",\r\n  \"\\uFDAE\",\r\n  \"\\u064A\\u062D\\u064A\",\r\n  \"\\uFDAF\",\r\n  \"\\u064A\\u062C\\u064A\",\r\n  \"\\uFDB0\",\r\n  \"\\u064A\\u0645\\u064A\",\r\n  \"\\uFDB1\",\r\n  \"\\u0645\\u0645\\u064A\",\r\n  \"\\uFDB2\",\r\n  \"\\u0642\\u0645\\u064A\",\r\n  \"\\uFDB3\",\r\n  \"\\u0646\\u062D\\u064A\",\r\n  \"\\uFDB4\",\r\n  \"\\u0642\\u0645\\u062D\",\r\n  \"\\uFDB5\",\r\n  \"\\u0644\\u062D\\u0645\",\r\n  \"\\uFDB6\",\r\n  \"\\u0639\\u0645\\u064A\",\r\n  \"\\uFDB7\",\r\n  \"\\u0643\\u0645\\u064A\",\r\n  \"\\uFDB8\",\r\n  \"\\u0646\\u062C\\u062D\",\r\n  \"\\uFDB9\",\r\n  \"\\u0645\\u062E\\u064A\",\r\n  \"\\uFDBA\",\r\n  \"\\u0644\\u062C\\u0645\",\r\n  \"\\uFDBB\",\r\n  \"\\u0643\\u0645\\u0645\",\r\n  \"\\uFDBC\",\r\n  \"\\u0644\\u062C\\u0645\",\r\n  \"\\uFDBD\",\r\n  \"\\u0646\\u062C\\u062D\",\r\n  \"\\uFDBE\",\r\n  \"\\u062C\\u062D\\u064A\",\r\n  \"\\uFDBF\",\r\n  \"\\u062D\\u062C\\u064A\",\r\n  \"\\uFDC0\",\r\n  \"\\u0645\\u062C\\u064A\",\r\n  \"\\uFDC1\",\r\n  \"\\u0641\\u0645\\u064A\",\r\n  \"\\uFDC2\",\r\n  \"\\u0628\\u062D\\u064A\",\r\n  \"\\uFDC3\",\r\n  \"\\u0643\\u0645\\u0645\",\r\n  \"\\uFDC4\",\r\n  \"\\u0639\\u062C\\u0645\",\r\n  \"\\uFDC5\",\r\n  \"\\u0635\\u0645\\u0645\",\r\n  \"\\uFDC6\",\r\n  \"\\u0633\\u062E\\u064A\",\r\n  \"\\uFDC7\",\r\n  \"\\u0646\\u062C\\u064A\",\r\n  \"\\uFE49\",\r\n  \"\\u203E\",\r\n  \"\\uFE4A\",\r\n  \"\\u203E\",\r\n  \"\\uFE4B\",\r\n  \"\\u203E\",\r\n  \"\\uFE4C\",\r\n  \"\\u203E\",\r\n  \"\\uFE4D\",\r\n  \"\\u005F\",\r\n  \"\\uFE4E\",\r\n  \"\\u005F\",\r\n  \"\\uFE4F\",\r\n  \"\\u005F\",\r\n  \"\\uFE80\",\r\n  \"\\u0621\",\r\n  \"\\uFE81\",\r\n  \"\\u0622\",\r\n  \"\\uFE82\",\r\n  \"\\u0622\",\r\n  \"\\uFE83\",\r\n  \"\\u0623\",\r\n  \"\\uFE84\",\r\n  \"\\u0623\",\r\n  \"\\uFE85\",\r\n  \"\\u0624\",\r\n  \"\\uFE86\",\r\n  \"\\u0624\",\r\n  \"\\uFE87\",\r\n  \"\\u0625\",\r\n  \"\\uFE88\",\r\n  \"\\u0625\",\r\n  \"\\uFE89\",\r\n  \"\\u0626\",\r\n  \"\\uFE8A\",\r\n  \"\\u0626\",\r\n  \"\\uFE8B\",\r\n  \"\\u0626\",\r\n  \"\\uFE8C\",\r\n  \"\\u0626\",\r\n  \"\\uFE8D\",\r\n  \"\\u0627\",\r\n  \"\\uFE8E\",\r\n  \"\\u0627\",\r\n  \"\\uFE8F\",\r\n  \"\\u0628\",\r\n  \"\\uFE90\",\r\n  \"\\u0628\",\r\n  \"\\uFE91\",\r\n  \"\\u0628\",\r\n  \"\\uFE92\",\r\n  \"\\u0628\",\r\n  \"\\uFE93\",\r\n  \"\\u0629\",\r\n  \"\\uFE94\",\r\n  \"\\u0629\",\r\n  \"\\uFE95\",\r\n  \"\\u062A\",\r\n  \"\\uFE96\",\r\n  \"\\u062A\",\r\n  \"\\uFE97\",\r\n  \"\\u062A\",\r\n  \"\\uFE98\",\r\n  \"\\u062A\",\r\n  \"\\uFE99\",\r\n  \"\\u062B\",\r\n  \"\\uFE9A\",\r\n  \"\\u062B\",\r\n  \"\\uFE9B\",\r\n  \"\\u062B\",\r\n  \"\\uFE9C\",\r\n  \"\\u062B\",\r\n  \"\\uFE9D\",\r\n  \"\\u062C\",\r\n  \"\\uFE9E\",\r\n  \"\\u062C\",\r\n  \"\\uFE9F\",\r\n  \"\\u062C\",\r\n  \"\\uFEA0\",\r\n  \"\\u062C\",\r\n  \"\\uFEA1\",\r\n  \"\\u062D\",\r\n  \"\\uFEA2\",\r\n  \"\\u062D\",\r\n  \"\\uFEA3\",\r\n  \"\\u062D\",\r\n  \"\\uFEA4\",\r\n  \"\\u062D\",\r\n  \"\\uFEA5\",\r\n  \"\\u062E\",\r\n  \"\\uFEA6\",\r\n  \"\\u062E\",\r\n  \"\\uFEA7\",\r\n  \"\\u062E\",\r\n  \"\\uFEA8\",\r\n  \"\\u062E\",\r\n  \"\\uFEA9\",\r\n  \"\\u062F\",\r\n  \"\\uFEAA\",\r\n  \"\\u062F\",\r\n  \"\\uFEAB\",\r\n  \"\\u0630\",\r\n  \"\\uFEAC\",\r\n  \"\\u0630\",\r\n  \"\\uFEAD\",\r\n  \"\\u0631\",\r\n  \"\\uFEAE\",\r\n  \"\\u0631\",\r\n  \"\\uFEAF\",\r\n  \"\\u0632\",\r\n  \"\\uFEB0\",\r\n  \"\\u0632\",\r\n  \"\\uFEB1\",\r\n  \"\\u0633\",\r\n  \"\\uFEB2\",\r\n  \"\\u0633\",\r\n  \"\\uFEB3\",\r\n  \"\\u0633\",\r\n  \"\\uFEB4\",\r\n  \"\\u0633\",\r\n  \"\\uFEB5\",\r\n  \"\\u0634\",\r\n  \"\\uFEB6\",\r\n  \"\\u0634\",\r\n  \"\\uFEB7\",\r\n  \"\\u0634\",\r\n  \"\\uFEB8\",\r\n  \"\\u0634\",\r\n  \"\\uFEB9\",\r\n  \"\\u0635\",\r\n  \"\\uFEBA\",\r\n  \"\\u0635\",\r\n  \"\\uFEBB\",\r\n  \"\\u0635\",\r\n  \"\\uFEBC\",\r\n  \"\\u0635\",\r\n  \"\\uFEBD\",\r\n  \"\\u0636\",\r\n  \"\\uFEBE\",\r\n  \"\\u0636\",\r\n  \"\\uFEBF\",\r\n  \"\\u0636\",\r\n  \"\\uFEC0\",\r\n  \"\\u0636\",\r\n  \"\\uFEC1\",\r\n  \"\\u0637\",\r\n  \"\\uFEC2\",\r\n  \"\\u0637\",\r\n  \"\\uFEC3\",\r\n  \"\\u0637\",\r\n  \"\\uFEC4\",\r\n  \"\\u0637\",\r\n  \"\\uFEC5\",\r\n  \"\\u0638\",\r\n  \"\\uFEC6\",\r\n  \"\\u0638\",\r\n  \"\\uFEC7\",\r\n  \"\\u0638\",\r\n  \"\\uFEC8\",\r\n  \"\\u0638\",\r\n  \"\\uFEC9\",\r\n  \"\\u0639\",\r\n  \"\\uFECA\",\r\n  \"\\u0639\",\r\n  \"\\uFECB\",\r\n  \"\\u0639\",\r\n  \"\\uFECC\",\r\n  \"\\u0639\",\r\n  \"\\uFECD\",\r\n  \"\\u063A\",\r\n  \"\\uFECE\",\r\n  \"\\u063A\",\r\n  \"\\uFECF\",\r\n  \"\\u063A\",\r\n  \"\\uFED0\",\r\n  \"\\u063A\",\r\n  \"\\uFED1\",\r\n  \"\\u0641\",\r\n  \"\\uFED2\",\r\n  \"\\u0641\",\r\n  \"\\uFED3\",\r\n  \"\\u0641\",\r\n  \"\\uFED4\",\r\n  \"\\u0641\",\r\n  \"\\uFED5\",\r\n  \"\\u0642\",\r\n  \"\\uFED6\",\r\n  \"\\u0642\",\r\n  \"\\uFED7\",\r\n  \"\\u0642\",\r\n  \"\\uFED8\",\r\n  \"\\u0642\",\r\n  \"\\uFED9\",\r\n  \"\\u0643\",\r\n  \"\\uFEDA\",\r\n  \"\\u0643\",\r\n  \"\\uFEDB\",\r\n  \"\\u0643\",\r\n  \"\\uFEDC\",\r\n  \"\\u0643\",\r\n  \"\\uFEDD\",\r\n  \"\\u0644\",\r\n  \"\\uFEDE\",\r\n  \"\\u0644\",\r\n  \"\\uFEDF\",\r\n  \"\\u0644\",\r\n  \"\\uFEE0\",\r\n  \"\\u0644\",\r\n  \"\\uFEE1\",\r\n  \"\\u0645\",\r\n  \"\\uFEE2\",\r\n  \"\\u0645\",\r\n  \"\\uFEE3\",\r\n  \"\\u0645\",\r\n  \"\\uFEE4\",\r\n  \"\\u0645\",\r\n  \"\\uFEE5\",\r\n  \"\\u0646\",\r\n  \"\\uFEE6\",\r\n  \"\\u0646\",\r\n  \"\\uFEE7\",\r\n  \"\\u0646\",\r\n  \"\\uFEE8\",\r\n  \"\\u0646\",\r\n  \"\\uFEE9\",\r\n  \"\\u0647\",\r\n  \"\\uFEEA\",\r\n  \"\\u0647\",\r\n  \"\\uFEEB\",\r\n  \"\\u0647\",\r\n  \"\\uFEEC\",\r\n  \"\\u0647\",\r\n  \"\\uFEED\",\r\n  \"\\u0648\",\r\n  \"\\uFEEE\",\r\n  \"\\u0648\",\r\n  \"\\uFEEF\",\r\n  \"\\u0649\",\r\n  \"\\uFEF0\",\r\n  \"\\u0649\",\r\n  \"\\uFEF1\",\r\n  \"\\u064A\",\r\n  \"\\uFEF2\",\r\n  \"\\u064A\",\r\n  \"\\uFEF3\",\r\n  \"\\u064A\",\r\n  \"\\uFEF4\",\r\n  \"\\u064A\",\r\n  \"\\uFEF5\",\r\n  \"\\u0644\\u0622\",\r\n  \"\\uFEF6\",\r\n  \"\\u0644\\u0622\",\r\n  \"\\uFEF7\",\r\n  \"\\u0644\\u0623\",\r\n  \"\\uFEF8\",\r\n  \"\\u0644\\u0623\",\r\n  \"\\uFEF9\",\r\n  \"\\u0644\\u0625\",\r\n  \"\\uFEFA\",\r\n  \"\\u0644\\u0625\",\r\n  \"\\uFEFB\",\r\n  \"\\u0644\\u0627\",\r\n  \"\\uFEFC\",\r\n  \"\\u0644\\u0627\"\r\n ];\r\n});\r\nfunction reverseIfRtl(chars) {\r\n var charsLength = chars.length;\r\n if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) {\r\n  return chars;\r\n }\r\n var s = \"\";\r\n for (var ii = charsLength - 1; ii >= 0; ii--) {\r\n  s += chars[ii];\r\n }\r\n return s;\r\n}\r\n\r\n\r\n/***/ }),\r\n/* 166 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.FontRendererFactory = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _cff_parser = __w_pdfjs_require__(160);\r\n\r\nvar _glyphlist = __w_pdfjs_require__(163);\r\n\r\nvar _encodings = __w_pdfjs_require__(162);\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar FontRendererFactory = function FontRendererFactoryClosure() {\r\n  function getLong(data, offset) {\r\n    return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];\r\n  }\r\n\r\n  function getUshort(data, offset) {\r\n    return data[offset] << 8 | data[offset + 1];\r\n  }\r\n\r\n  function getSubroutineBias(subrs) {\r\n    var numSubrs = subrs.length;\r\n    var bias = 32768;\r\n\r\n    if (numSubrs < 1240) {\r\n      bias = 107;\r\n    } else if (numSubrs < 33900) {\r\n      bias = 1131;\r\n    }\r\n\r\n    return bias;\r\n  }\r\n\r\n  function parseCmap(data, start, end) {\r\n    var offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16);\r\n    var format = getUshort(data, start + offset);\r\n    var ranges, p, i;\r\n\r\n    if (format === 4) {\r\n      getUshort(data, start + offset + 2);\r\n      var segCount = getUshort(data, start + offset + 6) >> 1;\r\n      p = start + offset + 14;\r\n      ranges = [];\r\n\r\n      for (i = 0; i < segCount; i++, p += 2) {\r\n        ranges[i] = {\r\n          end: getUshort(data, p)\r\n        };\r\n      }\r\n\r\n      p += 2;\r\n\r\n      for (i = 0; i < segCount; i++, p += 2) {\r\n        ranges[i].start = getUshort(data, p);\r\n      }\r\n\r\n      for (i = 0; i < segCount; i++, p += 2) {\r\n        ranges[i].idDelta = getUshort(data, p);\r\n      }\r\n\r\n      for (i = 0; i < segCount; i++, p += 2) {\r\n        var idOffset = getUshort(data, p);\r\n\r\n        if (idOffset === 0) {\r\n          continue;\r\n        }\r\n\r\n        ranges[i].ids = [];\r\n\r\n        for (var j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) {\r\n          ranges[i].ids[j] = getUshort(data, p + idOffset);\r\n          idOffset += 2;\r\n        }\r\n      }\r\n\r\n      return ranges;\r\n    } else if (format === 12) {\r\n      getLong(data, start + offset + 4);\r\n      var groups = getLong(data, start + offset + 12);\r\n      p = start + offset + 16;\r\n      ranges = [];\r\n\r\n      for (i = 0; i < groups; i++) {\r\n        ranges.push({\r\n          start: getLong(data, p),\r\n          end: getLong(data, p + 4),\r\n          idDelta: getLong(data, p + 8) - getLong(data, p)\r\n        });\r\n        p += 12;\r\n      }\r\n\r\n      return ranges;\r\n    }\r\n\r\n    throw new _util.FormatError(\"unsupported cmap: \".concat(format));\r\n  }\r\n\r\n  function parseCff(data, start, end, seacAnalysisEnabled) {\r\n    var properties = {};\r\n    var parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled);\r\n    var cff = parser.parse();\r\n    return {\r\n      glyphs: cff.charStrings.objects,\r\n      subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && cff.topDict.privateDict.subrsIndex.objects,\r\n      gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects,\r\n      isCFFCIDFont: cff.isCIDFont,\r\n      fdSelect: cff.fdSelect,\r\n      fdArray: cff.fdArray\r\n    };\r\n  }\r\n\r\n  function parseGlyfTable(glyf, loca, isGlyphLocationsLong) {\r\n    var itemSize, itemDecode;\r\n\r\n    if (isGlyphLocationsLong) {\r\n      itemSize = 4;\r\n\r\n      itemDecode = function fontItemDecodeLong(data, offset) {\r\n        return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];\r\n      };\r\n    } else {\r\n      itemSize = 2;\r\n\r\n      itemDecode = function fontItemDecode(data, offset) {\r\n        return data[offset] << 9 | data[offset + 1] << 1;\r\n      };\r\n    }\r\n\r\n    var glyphs = [];\r\n    var startOffset = itemDecode(loca, 0);\r\n\r\n    for (var j = itemSize; j < loca.length; j += itemSize) {\r\n      var endOffset = itemDecode(loca, j);\r\n      glyphs.push(glyf.subarray(startOffset, endOffset));\r\n      startOffset = endOffset;\r\n    }\r\n\r\n    return glyphs;\r\n  }\r\n\r\n  function lookupCmap(ranges, unicode) {\r\n    var code = unicode.codePointAt(0),\r\n        gid = 0;\r\n    var l = 0,\r\n        r = ranges.length - 1;\r\n\r\n    while (l < r) {\r\n      var c = l + r + 1 >> 1;\r\n\r\n      if (code < ranges[c].start) {\r\n        r = c - 1;\r\n      } else {\r\n        l = c;\r\n      }\r\n    }\r\n\r\n    if (ranges[l].start <= code && code <= ranges[l].end) {\r\n      gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff;\r\n    }\r\n\r\n    return {\r\n      charCode: code,\r\n      glyphId: gid\r\n    };\r\n  }\r\n\r\n  function compileGlyf(code, cmds, font) {\r\n    function moveTo(x, y) {\r\n      cmds.push({\r\n        cmd: \"moveTo\",\r\n        args: [x, y]\r\n      });\r\n    }\r\n\r\n    function lineTo(x, y) {\r\n      cmds.push({\r\n        cmd: \"lineTo\",\r\n        args: [x, y]\r\n      });\r\n    }\r\n\r\n    function quadraticCurveTo(xa, ya, x, y) {\r\n      cmds.push({\r\n        cmd: \"quadraticCurveTo\",\r\n        args: [xa, ya, x, y]\r\n      });\r\n    }\r\n\r\n    var i = 0;\r\n    var numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16;\r\n    var flags;\r\n    var x = 0,\r\n        y = 0;\r\n    i += 10;\r\n\r\n    if (numberOfContours < 0) {\r\n      do {\r\n        flags = code[i] << 8 | code[i + 1];\r\n        var glyphIndex = code[i + 2] << 8 | code[i + 3];\r\n        i += 4;\r\n        var arg1, arg2;\r\n\r\n        if (flags & 0x01) {\r\n          arg1 = (code[i] << 24 | code[i + 1] << 16) >> 16;\r\n          arg2 = (code[i + 2] << 24 | code[i + 3] << 16) >> 16;\r\n          i += 4;\r\n        } else {\r\n          arg1 = code[i++];\r\n          arg2 = code[i++];\r\n        }\r\n\r\n        if (flags & 0x02) {\r\n          x = arg1;\r\n          y = arg2;\r\n        } else {\r\n          x = 0;\r\n          y = 0;\r\n        }\r\n\r\n        var scaleX = 1,\r\n            scaleY = 1,\r\n            scale01 = 0,\r\n            scale10 = 0;\r\n\r\n        if (flags & 0x08) {\r\n          scaleX = scaleY = (code[i] << 24 | code[i + 1] << 16) / 1073741824;\r\n          i += 2;\r\n        } else if (flags & 0x40) {\r\n          scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824;\r\n          scaleY = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824;\r\n          i += 4;\r\n        } else if (flags & 0x80) {\r\n          scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824;\r\n          scale01 = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824;\r\n          scale10 = (code[i + 4] << 24 | code[i + 5] << 16) / 1073741824;\r\n          scaleY = (code[i + 6] << 24 | code[i + 7] << 16) / 1073741824;\r\n          i += 8;\r\n        }\r\n\r\n        var subglyph = font.glyphs[glyphIndex];\r\n\r\n        if (subglyph) {\r\n          cmds.push({\r\n            cmd: \"save\"\r\n          });\r\n          cmds.push({\r\n            cmd: \"transform\",\r\n            args: [scaleX, scale01, scale10, scaleY, x, y]\r\n          });\r\n          compileGlyf(subglyph, cmds, font);\r\n          cmds.push({\r\n            cmd: \"restore\"\r\n          });\r\n        }\r\n      } while (flags & 0x20);\r\n    } else {\r\n      var endPtsOfContours = [];\r\n      var j, jj;\r\n\r\n      for (j = 0; j < numberOfContours; j++) {\r\n        endPtsOfContours.push(code[i] << 8 | code[i + 1]);\r\n        i += 2;\r\n      }\r\n\r\n      var instructionLength = code[i] << 8 | code[i + 1];\r\n      i += 2 + instructionLength;\r\n      var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1;\r\n      var points = [];\r\n\r\n      while (points.length < numberOfPoints) {\r\n        flags = code[i++];\r\n        var repeat = 1;\r\n\r\n        if (flags & 0x08) {\r\n          repeat += code[i++];\r\n        }\r\n\r\n        while (repeat-- > 0) {\r\n          points.push({\r\n            flags: flags\r\n          });\r\n        }\r\n      }\r\n\r\n      for (j = 0; j < numberOfPoints; j++) {\r\n        switch (points[j].flags & 0x12) {\r\n          case 0x00:\r\n            x += (code[i] << 24 | code[i + 1] << 16) >> 16;\r\n            i += 2;\r\n            break;\r\n\r\n          case 0x02:\r\n            x -= code[i++];\r\n            break;\r\n\r\n          case 0x12:\r\n            x += code[i++];\r\n            break;\r\n        }\r\n\r\n        points[j].x = x;\r\n      }\r\n\r\n      for (j = 0; j < numberOfPoints; j++) {\r\n        switch (points[j].flags & 0x24) {\r\n          case 0x00:\r\n            y += (code[i] << 24 | code[i + 1] << 16) >> 16;\r\n            i += 2;\r\n            break;\r\n\r\n          case 0x04:\r\n            y -= code[i++];\r\n            break;\r\n\r\n          case 0x24:\r\n            y += code[i++];\r\n            break;\r\n        }\r\n\r\n        points[j].y = y;\r\n      }\r\n\r\n      var startPoint = 0;\r\n\r\n      for (i = 0; i < numberOfContours; i++) {\r\n        var endPoint = endPtsOfContours[i];\r\n        var contour = points.slice(startPoint, endPoint + 1);\r\n\r\n        if (contour[0].flags & 1) {\r\n          contour.push(contour[0]);\r\n        } else if (contour[contour.length - 1].flags & 1) {\r\n          contour.unshift(contour[contour.length - 1]);\r\n        } else {\r\n          var p = {\r\n            flags: 1,\r\n            x: (contour[0].x + contour[contour.length - 1].x) / 2,\r\n            y: (contour[0].y + contour[contour.length - 1].y) / 2\r\n          };\r\n          contour.unshift(p);\r\n          contour.push(p);\r\n        }\r\n\r\n        moveTo(contour[0].x, contour[0].y);\r\n\r\n        for (j = 1, jj = contour.length; j < jj; j++) {\r\n          if (contour[j].flags & 1) {\r\n            lineTo(contour[j].x, contour[j].y);\r\n          } else if (contour[j + 1].flags & 1) {\r\n            quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y);\r\n            j++;\r\n          } else {\r\n            quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2);\r\n          }\r\n        }\r\n\r\n        startPoint = endPoint + 1;\r\n      }\r\n    }\r\n  }\r\n\r\n  function compileCharString(charStringCode, cmds, font, glyphId) {\r\n    function moveTo(x, y) {\r\n      cmds.push({\r\n        cmd: \"moveTo\",\r\n        args: [x, y]\r\n      });\r\n    }\r\n\r\n    function lineTo(x, y) {\r\n      cmds.push({\r\n        cmd: \"lineTo\",\r\n        args: [x, y]\r\n      });\r\n    }\r\n\r\n    function bezierCurveTo(x1, y1, x2, y2, x, y) {\r\n      cmds.push({\r\n        cmd: \"bezierCurveTo\",\r\n        args: [x1, y1, x2, y2, x, y]\r\n      });\r\n    }\r\n\r\n    var stack = [];\r\n    var x = 0,\r\n        y = 0;\r\n    var stems = 0;\r\n\r\n    function parse(code) {\r\n      var i = 0;\r\n\r\n      while (i < code.length) {\r\n        var stackClean = false;\r\n        var v = code[i++];\r\n        var xa, xb, ya, yb, y1, y2, y3, n, subrCode;\r\n\r\n        switch (v) {\r\n          case 1:\r\n            stems += stack.length >> 1;\r\n            stackClean = true;\r\n            break;\r\n\r\n          case 3:\r\n            stems += stack.length >> 1;\r\n            stackClean = true;\r\n            break;\r\n\r\n          case 4:\r\n            y += stack.pop();\r\n            moveTo(x, y);\r\n            stackClean = true;\r\n            break;\r\n\r\n          case 5:\r\n            while (stack.length > 0) {\r\n              x += stack.shift();\r\n              y += stack.shift();\r\n              lineTo(x, y);\r\n            }\r\n\r\n            break;\r\n\r\n          case 6:\r\n            while (stack.length > 0) {\r\n              x += stack.shift();\r\n              lineTo(x, y);\r\n\r\n              if (stack.length === 0) {\r\n                break;\r\n              }\r\n\r\n              y += stack.shift();\r\n              lineTo(x, y);\r\n            }\r\n\r\n            break;\r\n\r\n          case 7:\r\n            while (stack.length > 0) {\r\n              y += stack.shift();\r\n              lineTo(x, y);\r\n\r\n              if (stack.length === 0) {\r\n                break;\r\n              }\r\n\r\n              x += stack.shift();\r\n              lineTo(x, y);\r\n            }\r\n\r\n            break;\r\n\r\n          case 8:\r\n            while (stack.length > 0) {\r\n              xa = x + stack.shift();\r\n              ya = y + stack.shift();\r\n              xb = xa + stack.shift();\r\n              yb = ya + stack.shift();\r\n              x = xb + stack.shift();\r\n              y = yb + stack.shift();\r\n              bezierCurveTo(xa, ya, xb, yb, x, y);\r\n            }\r\n\r\n            break;\r\n\r\n          case 10:\r\n            n = stack.pop();\r\n            subrCode = null;\r\n\r\n            if (font.isCFFCIDFont) {\r\n              var fdIndex = font.fdSelect.getFDIndex(glyphId);\r\n\r\n              if (fdIndex >= 0 && fdIndex < font.fdArray.length) {\r\n                var fontDict = font.fdArray[fdIndex];\r\n                var subrs = void 0;\r\n\r\n                if (fontDict.privateDict && fontDict.privateDict.subrsIndex) {\r\n                  subrs = fontDict.privateDict.subrsIndex.objects;\r\n                }\r\n\r\n                if (subrs) {\r\n                  n += getSubroutineBias(subrs);\r\n                  subrCode = subrs[n];\r\n                }\r\n              } else {\r\n                (0, _util.warn)(\"Invalid fd index for glyph index.\");\r\n              }\r\n            } else {\r\n              subrCode = font.subrs[n + font.subrsBias];\r\n            }\r\n\r\n            if (subrCode) {\r\n              parse(subrCode);\r\n            }\r\n\r\n            break;\r\n\r\n          case 11:\r\n            return;\r\n\r\n          case 12:\r\n            v = code[i++];\r\n\r\n            switch (v) {\r\n              case 34:\r\n                xa = x + stack.shift();\r\n                xb = xa + stack.shift();\r\n                y1 = y + stack.shift();\r\n                x = xb + stack.shift();\r\n                bezierCurveTo(xa, y, xb, y1, x, y1);\r\n                xa = x + stack.shift();\r\n                xb = xa + stack.shift();\r\n                x = xb + stack.shift();\r\n                bezierCurveTo(xa, y1, xb, y, x, y);\r\n                break;\r\n\r\n              case 35:\r\n                xa = x + stack.shift();\r\n                ya = y + stack.shift();\r\n                xb = xa + stack.shift();\r\n                yb = ya + stack.shift();\r\n                x = xb + stack.shift();\r\n                y = yb + stack.shift();\r\n                bezierCurveTo(xa, ya, xb, yb, x, y);\r\n                xa = x + stack.shift();\r\n                ya = y + stack.shift();\r\n                xb = xa + stack.shift();\r\n                yb = ya + stack.shift();\r\n                x = xb + stack.shift();\r\n                y = yb + stack.shift();\r\n                bezierCurveTo(xa, ya, xb, yb, x, y);\r\n                stack.pop();\r\n                break;\r\n\r\n              case 36:\r\n                xa = x + stack.shift();\r\n                y1 = y + stack.shift();\r\n                xb = xa + stack.shift();\r\n                y2 = y1 + stack.shift();\r\n                x = xb + stack.shift();\r\n                bezierCurveTo(xa, y1, xb, y2, x, y2);\r\n                xa = x + stack.shift();\r\n                xb = xa + stack.shift();\r\n                y3 = y2 + stack.shift();\r\n                x = xb + stack.shift();\r\n                bezierCurveTo(xa, y2, xb, y3, x, y);\r\n                break;\r\n\r\n              case 37:\r\n                var x0 = x,\r\n                    y0 = y;\r\n                xa = x + stack.shift();\r\n                ya = y + stack.shift();\r\n                xb = xa + stack.shift();\r\n                yb = ya + stack.shift();\r\n                x = xb + stack.shift();\r\n                y = yb + stack.shift();\r\n                bezierCurveTo(xa, ya, xb, yb, x, y);\r\n                xa = x + stack.shift();\r\n                ya = y + stack.shift();\r\n                xb = xa + stack.shift();\r\n                yb = ya + stack.shift();\r\n                x = xb;\r\n                y = yb;\r\n\r\n                if (Math.abs(x - x0) > Math.abs(y - y0)) {\r\n                  x += stack.shift();\r\n                } else {\r\n                  y += stack.shift();\r\n                }\r\n\r\n                bezierCurveTo(xa, ya, xb, yb, x, y);\r\n                break;\r\n\r\n              default:\r\n                throw new _util.FormatError(\"unknown operator: 12 \".concat(v));\r\n            }\r\n\r\n            break;\r\n\r\n          case 14:\r\n            if (stack.length >= 4) {\r\n              var achar = stack.pop();\r\n              var bchar = stack.pop();\r\n              y = stack.pop();\r\n              x = stack.pop();\r\n              cmds.push({\r\n                cmd: \"save\"\r\n              });\r\n              cmds.push({\r\n                cmd: \"translate\",\r\n                args: [x, y]\r\n              });\r\n              var cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]]));\r\n              compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);\r\n              cmds.push({\r\n                cmd: \"restore\"\r\n              });\r\n              cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]]));\r\n              compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);\r\n            }\r\n\r\n            return;\r\n\r\n          case 18:\r\n            stems += stack.length >> 1;\r\n            stackClean = true;\r\n            break;\r\n\r\n          case 19:\r\n            stems += stack.length >> 1;\r\n            i += stems + 7 >> 3;\r\n            stackClean = true;\r\n            break;\r\n\r\n          case 20:\r\n            stems += stack.length >> 1;\r\n            i += stems + 7 >> 3;\r\n            stackClean = true;\r\n            break;\r\n\r\n          case 21:\r\n            y += stack.pop();\r\n            x += stack.pop();\r\n            moveTo(x, y);\r\n            stackClean = true;\r\n            break;\r\n\r\n          case 22:\r\n            x += stack.pop();\r\n            moveTo(x, y);\r\n            stackClean = true;\r\n            break;\r\n\r\n          case 23:\r\n            stems += stack.length >> 1;\r\n            stackClean = true;\r\n            break;\r\n\r\n          case 24:\r\n            while (stack.length > 2) {\r\n              xa = x + stack.shift();\r\n              ya = y + stack.shift();\r\n              xb = xa + stack.shift();\r\n              yb = ya + stack.shift();\r\n              x = xb + stack.shift();\r\n              y = yb + stack.shift();\r\n              bezierCurveTo(xa, ya, xb, yb, x, y);\r\n            }\r\n\r\n            x += stack.shift();\r\n            y += stack.shift();\r\n            lineTo(x, y);\r\n            break;\r\n\r\n          case 25:\r\n            while (stack.length > 6) {\r\n              x += stack.shift();\r\n              y += stack.shift();\r\n              lineTo(x, y);\r\n            }\r\n\r\n            xa = x + stack.shift();\r\n            ya = y + stack.shift();\r\n            xb = xa + stack.shift();\r\n            yb = ya + stack.shift();\r\n            x = xb + stack.shift();\r\n            y = yb + stack.shift();\r\n            bezierCurveTo(xa, ya, xb, yb, x, y);\r\n            break;\r\n\r\n          case 26:\r\n            if (stack.length % 2) {\r\n              x += stack.shift();\r\n            }\r\n\r\n            while (stack.length > 0) {\r\n              xa = x;\r\n              ya = y + stack.shift();\r\n              xb = xa + stack.shift();\r\n              yb = ya + stack.shift();\r\n              x = xb;\r\n              y = yb + stack.shift();\r\n              bezierCurveTo(xa, ya, xb, yb, x, y);\r\n            }\r\n\r\n            break;\r\n\r\n          case 27:\r\n            if (stack.length % 2) {\r\n              y += stack.shift();\r\n            }\r\n\r\n            while (stack.length > 0) {\r\n              xa = x + stack.shift();\r\n              ya = y;\r\n              xb = xa + stack.shift();\r\n              yb = ya + stack.shift();\r\n              x = xb + stack.shift();\r\n              y = yb;\r\n              bezierCurveTo(xa, ya, xb, yb, x, y);\r\n            }\r\n\r\n            break;\r\n\r\n          case 28:\r\n            stack.push((code[i] << 24 | code[i + 1] << 16) >> 16);\r\n            i += 2;\r\n            break;\r\n\r\n          case 29:\r\n            n = stack.pop() + font.gsubrsBias;\r\n            subrCode = font.gsubrs[n];\r\n\r\n            if (subrCode) {\r\n              parse(subrCode);\r\n            }\r\n\r\n            break;\r\n\r\n          case 30:\r\n            while (stack.length > 0) {\r\n              xa = x;\r\n              ya = y + stack.shift();\r\n              xb = xa + stack.shift();\r\n              yb = ya + stack.shift();\r\n              x = xb + stack.shift();\r\n              y = yb + (stack.length === 1 ? stack.shift() : 0);\r\n              bezierCurveTo(xa, ya, xb, yb, x, y);\r\n\r\n              if (stack.length === 0) {\r\n                break;\r\n              }\r\n\r\n              xa = x + stack.shift();\r\n              ya = y;\r\n              xb = xa + stack.shift();\r\n              yb = ya + stack.shift();\r\n              y = yb + stack.shift();\r\n              x = xb + (stack.length === 1 ? stack.shift() : 0);\r\n              bezierCurveTo(xa, ya, xb, yb, x, y);\r\n            }\r\n\r\n            break;\r\n\r\n          case 31:\r\n            while (stack.length > 0) {\r\n              xa = x + stack.shift();\r\n              ya = y;\r\n              xb = xa + stack.shift();\r\n              yb = ya + stack.shift();\r\n              y = yb + stack.shift();\r\n              x = xb + (stack.length === 1 ? stack.shift() : 0);\r\n              bezierCurveTo(xa, ya, xb, yb, x, y);\r\n\r\n              if (stack.length === 0) {\r\n                break;\r\n              }\r\n\r\n              xa = x;\r\n              ya = y + stack.shift();\r\n              xb = xa + stack.shift();\r\n              yb = ya + stack.shift();\r\n              x = xb + stack.shift();\r\n              y = yb + (stack.length === 1 ? stack.shift() : 0);\r\n              bezierCurveTo(xa, ya, xb, yb, x, y);\r\n            }\r\n\r\n            break;\r\n\r\n          default:\r\n            if (v < 32) {\r\n              throw new _util.FormatError(\"unknown operator: \".concat(v));\r\n            }\r\n\r\n            if (v < 247) {\r\n              stack.push(v - 139);\r\n            } else if (v < 251) {\r\n              stack.push((v - 247) * 256 + code[i++] + 108);\r\n            } else if (v < 255) {\r\n              stack.push(-(v - 251) * 256 - code[i++] - 108);\r\n            } else {\r\n              stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536);\r\n              i += 4;\r\n            }\r\n\r\n            break;\r\n        }\r\n\r\n        if (stackClean) {\r\n          stack.length = 0;\r\n        }\r\n      }\r\n    }\r\n\r\n    parse(charStringCode);\r\n  }\r\n\r\n  var NOOP = [];\r\n\r\n  var CompiledFont = /*#__PURE__*/function () {\r\n    function CompiledFont(fontMatrix) {\r\n      _classCallCheck(this, CompiledFont);\r\n\r\n      if (this.constructor === CompiledFont) {\r\n        (0, _util.unreachable)(\"Cannot initialize CompiledFont.\");\r\n      }\r\n\r\n      this.fontMatrix = fontMatrix;\r\n      this.compiledGlyphs = Object.create(null);\r\n      this.compiledCharCodeToGlyphId = Object.create(null);\r\n    }\r\n\r\n    _createClass(CompiledFont, [{\r\n      key: \"getPathJs\",\r\n      value: function getPathJs(unicode) {\r\n        var cmap = lookupCmap(this.cmap, unicode);\r\n        var fn = this.compiledGlyphs[cmap.glyphId];\r\n\r\n        if (!fn) {\r\n          fn = this.compileGlyph(this.glyphs[cmap.glyphId], cmap.glyphId);\r\n          this.compiledGlyphs[cmap.glyphId] = fn;\r\n        }\r\n\r\n        if (this.compiledCharCodeToGlyphId[cmap.charCode] === undefined) {\r\n          this.compiledCharCodeToGlyphId[cmap.charCode] = cmap.glyphId;\r\n        }\r\n\r\n        return fn;\r\n      }\r\n    }, {\r\n      key: \"compileGlyph\",\r\n      value: function compileGlyph(code, glyphId) {\r\n        if (!code || code.length === 0 || code[0] === 14) {\r\n          return NOOP;\r\n        }\r\n\r\n        var fontMatrix = this.fontMatrix;\r\n\r\n        if (this.isCFFCIDFont) {\r\n          var fdIndex = this.fdSelect.getFDIndex(glyphId);\r\n\r\n          if (fdIndex >= 0 && fdIndex < this.fdArray.length) {\r\n            var fontDict = this.fdArray[fdIndex];\r\n            fontMatrix = fontDict.getByName(\"FontMatrix\") || _util.FONT_IDENTITY_MATRIX;\r\n          } else {\r\n            (0, _util.warn)(\"Invalid fd index for glyph index.\");\r\n          }\r\n        }\r\n\r\n        var cmds = [];\r\n        cmds.push({\r\n          cmd: \"save\"\r\n        });\r\n        cmds.push({\r\n          cmd: \"transform\",\r\n          args: fontMatrix.slice()\r\n        });\r\n        cmds.push({\r\n          cmd: \"scale\",\r\n          args: [\"size\", \"-size\"]\r\n        });\r\n        this.compileGlyphImpl(code, cmds, glyphId);\r\n        cmds.push({\r\n          cmd: \"restore\"\r\n        });\r\n        return cmds;\r\n      }\r\n    }, {\r\n      key: \"compileGlyphImpl\",\r\n      value: function compileGlyphImpl() {\r\n        (0, _util.unreachable)(\"Children classes should implement this.\");\r\n      }\r\n    }, {\r\n      key: \"hasBuiltPath\",\r\n      value: function hasBuiltPath(unicode) {\r\n        var cmap = lookupCmap(this.cmap, unicode);\r\n        return this.compiledGlyphs[cmap.glyphId] !== undefined && this.compiledCharCodeToGlyphId[cmap.charCode] !== undefined;\r\n      }\r\n    }]);\r\n\r\n    return CompiledFont;\r\n  }();\r\n\r\n  var TrueTypeCompiled = /*#__PURE__*/function (_CompiledFont) {\r\n    _inherits(TrueTypeCompiled, _CompiledFont);\r\n\r\n    var _super = _createSuper(TrueTypeCompiled);\r\n\r\n    function TrueTypeCompiled(glyphs, cmap, fontMatrix) {\r\n      var _this;\r\n\r\n      _classCallCheck(this, TrueTypeCompiled);\r\n\r\n      _this = _super.call(this, fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]);\r\n      _this.glyphs = glyphs;\r\n      _this.cmap = cmap;\r\n      return _this;\r\n    }\r\n\r\n    _createClass(TrueTypeCompiled, [{\r\n      key: \"compileGlyphImpl\",\r\n      value: function compileGlyphImpl(code, cmds) {\r\n        compileGlyf(code, cmds, this);\r\n      }\r\n    }]);\r\n\r\n    return TrueTypeCompiled;\r\n  }(CompiledFont);\r\n\r\n  var Type2Compiled = /*#__PURE__*/function (_CompiledFont2) {\r\n    _inherits(Type2Compiled, _CompiledFont2);\r\n\r\n    var _super2 = _createSuper(Type2Compiled);\r\n\r\n    function Type2Compiled(cffInfo, cmap, fontMatrix, glyphNameMap) {\r\n      var _this2;\r\n\r\n      _classCallCheck(this, Type2Compiled);\r\n\r\n      _this2 = _super2.call(this, fontMatrix || [0.001, 0, 0, 0.001, 0, 0]);\r\n      _this2.glyphs = cffInfo.glyphs;\r\n      _this2.gsubrs = cffInfo.gsubrs || [];\r\n      _this2.subrs = cffInfo.subrs || [];\r\n      _this2.cmap = cmap;\r\n      _this2.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)();\r\n      _this2.gsubrsBias = getSubroutineBias(_this2.gsubrs);\r\n      _this2.subrsBias = getSubroutineBias(_this2.subrs);\r\n      _this2.isCFFCIDFont = cffInfo.isCFFCIDFont;\r\n      _this2.fdSelect = cffInfo.fdSelect;\r\n      _this2.fdArray = cffInfo.fdArray;\r\n      return _this2;\r\n    }\r\n\r\n    _createClass(Type2Compiled, [{\r\n      key: \"compileGlyphImpl\",\r\n      value: function compileGlyphImpl(code, cmds, glyphId) {\r\n        compileCharString(code, cmds, this, glyphId);\r\n      }\r\n    }]);\r\n\r\n    return Type2Compiled;\r\n  }(CompiledFont);\r\n\r\n  return {\r\n    create: function FontRendererFactory_create(font, seacAnalysisEnabled) {\r\n      var data = new Uint8Array(font.data);\r\n      var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm;\r\n      var numTables = getUshort(data, 4);\r\n\r\n      for (var i = 0, p = 12; i < numTables; i++, p += 16) {\r\n        var tag = (0, _util.bytesToString)(data.subarray(p, p + 4));\r\n        var offset = getLong(data, p + 8);\r\n        var length = getLong(data, p + 12);\r\n\r\n        switch (tag) {\r\n          case \"cmap\":\r\n            cmap = parseCmap(data, offset, offset + length);\r\n            break;\r\n\r\n          case \"glyf\":\r\n            glyf = data.subarray(offset, offset + length);\r\n            break;\r\n\r\n          case \"loca\":\r\n            loca = data.subarray(offset, offset + length);\r\n            break;\r\n\r\n          case \"head\":\r\n            unitsPerEm = getUshort(data, offset + 18);\r\n            indexToLocFormat = getUshort(data, offset + 50);\r\n            break;\r\n\r\n          case \"CFF \":\r\n            cff = parseCff(data, offset, offset + length, seacAnalysisEnabled);\r\n            break;\r\n        }\r\n      }\r\n\r\n      if (glyf) {\r\n        var fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0];\r\n        return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix);\r\n      }\r\n\r\n      return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap);\r\n    }\r\n  };\r\n}();\r\n\r\nexports.FontRendererFactory = FontRendererFactory;\r\n\r\n/***/ }),\r\n/* 167 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.Type1Parser = void 0;\r\n\r\nvar _encodings = __w_pdfjs_require__(162);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar HINTING_ENABLED = false;\r\n\r\nvar Type1CharString = function Type1CharStringClosure() {\r\n  var COMMAND_MAP = {\r\n    hstem: [1],\r\n    vstem: [3],\r\n    vmoveto: [4],\r\n    rlineto: [5],\r\n    hlineto: [6],\r\n    vlineto: [7],\r\n    rrcurveto: [8],\r\n    callsubr: [10],\r\n    flex: [12, 35],\r\n    drop: [12, 18],\r\n    endchar: [14],\r\n    rmoveto: [21],\r\n    hmoveto: [22],\r\n    vhcurveto: [30],\r\n    hvcurveto: [31]\r\n  };\r\n\r\n  function Type1CharString() {\r\n    this.width = 0;\r\n    this.lsb = 0;\r\n    this.flexing = false;\r\n    this.output = [];\r\n    this.stack = [];\r\n  }\r\n\r\n  Type1CharString.prototype = {\r\n    convert: function Type1CharString_convert(encoded, subrs, seacAnalysisEnabled) {\r\n      var count = encoded.length;\r\n      var error = false;\r\n      var wx, sbx, subrNumber;\r\n\r\n      for (var i = 0; i < count; i++) {\r\n        var value = encoded[i];\r\n\r\n        if (value < 32) {\r\n          if (value === 12) {\r\n            value = (value << 8) + encoded[++i];\r\n          }\r\n\r\n          switch (value) {\r\n            case 1:\r\n              if (!HINTING_ENABLED) {\r\n                this.stack = [];\r\n                break;\r\n              }\r\n\r\n              error = this.executeCommand(2, COMMAND_MAP.hstem);\r\n              break;\r\n\r\n            case 3:\r\n              if (!HINTING_ENABLED) {\r\n                this.stack = [];\r\n                break;\r\n              }\r\n\r\n              error = this.executeCommand(2, COMMAND_MAP.vstem);\r\n              break;\r\n\r\n            case 4:\r\n              if (this.flexing) {\r\n                if (this.stack.length < 1) {\r\n                  error = true;\r\n                  break;\r\n                }\r\n\r\n                var dy = this.stack.pop();\r\n                this.stack.push(0, dy);\r\n                break;\r\n              }\r\n\r\n              error = this.executeCommand(1, COMMAND_MAP.vmoveto);\r\n              break;\r\n\r\n            case 5:\r\n              error = this.executeCommand(2, COMMAND_MAP.rlineto);\r\n              break;\r\n\r\n            case 6:\r\n              error = this.executeCommand(1, COMMAND_MAP.hlineto);\r\n              break;\r\n\r\n            case 7:\r\n              error = this.executeCommand(1, COMMAND_MAP.vlineto);\r\n              break;\r\n\r\n            case 8:\r\n              error = this.executeCommand(6, COMMAND_MAP.rrcurveto);\r\n              break;\r\n\r\n            case 9:\r\n              this.stack = [];\r\n              break;\r\n\r\n            case 10:\r\n              if (this.stack.length < 1) {\r\n                error = true;\r\n                break;\r\n              }\r\n\r\n              subrNumber = this.stack.pop();\r\n\r\n              if (!subrs[subrNumber]) {\r\n                error = true;\r\n                break;\r\n              }\r\n\r\n              error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled);\r\n              break;\r\n\r\n            case 11:\r\n              return error;\r\n\r\n            case 13:\r\n              if (this.stack.length < 2) {\r\n                error = true;\r\n                break;\r\n              }\r\n\r\n              wx = this.stack.pop();\r\n              sbx = this.stack.pop();\r\n              this.lsb = sbx;\r\n              this.width = wx;\r\n              this.stack.push(wx, sbx);\r\n              error = this.executeCommand(2, COMMAND_MAP.hmoveto);\r\n              break;\r\n\r\n            case 14:\r\n              this.output.push(COMMAND_MAP.endchar[0]);\r\n              break;\r\n\r\n            case 21:\r\n              if (this.flexing) {\r\n                break;\r\n              }\r\n\r\n              error = this.executeCommand(2, COMMAND_MAP.rmoveto);\r\n              break;\r\n\r\n            case 22:\r\n              if (this.flexing) {\r\n                this.stack.push(0);\r\n                break;\r\n              }\r\n\r\n              error = this.executeCommand(1, COMMAND_MAP.hmoveto);\r\n              break;\r\n\r\n            case 30:\r\n              error = this.executeCommand(4, COMMAND_MAP.vhcurveto);\r\n              break;\r\n\r\n            case 31:\r\n              error = this.executeCommand(4, COMMAND_MAP.hvcurveto);\r\n              break;\r\n\r\n            case (12 << 8) + 0:\r\n              this.stack = [];\r\n              break;\r\n\r\n            case (12 << 8) + 1:\r\n              if (!HINTING_ENABLED) {\r\n                this.stack = [];\r\n                break;\r\n              }\r\n\r\n              error = this.executeCommand(2, COMMAND_MAP.vstem);\r\n              break;\r\n\r\n            case (12 << 8) + 2:\r\n              if (!HINTING_ENABLED) {\r\n                this.stack = [];\r\n                break;\r\n              }\r\n\r\n              error = this.executeCommand(2, COMMAND_MAP.hstem);\r\n              break;\r\n\r\n            case (12 << 8) + 6:\r\n              if (seacAnalysisEnabled) {\r\n                var asb = this.stack[this.stack.length - 5];\r\n                this.seac = this.stack.splice(-4, 4);\r\n                this.seac[0] += this.lsb - asb;\r\n                error = this.executeCommand(0, COMMAND_MAP.endchar);\r\n              } else {\r\n                error = this.executeCommand(4, COMMAND_MAP.endchar);\r\n              }\r\n\r\n              break;\r\n\r\n            case (12 << 8) + 7:\r\n              if (this.stack.length < 4) {\r\n                error = true;\r\n                break;\r\n              }\r\n\r\n              this.stack.pop();\r\n              wx = this.stack.pop();\r\n              var sby = this.stack.pop();\r\n              sbx = this.stack.pop();\r\n              this.lsb = sbx;\r\n              this.width = wx;\r\n              this.stack.push(wx, sbx, sby);\r\n              error = this.executeCommand(3, COMMAND_MAP.rmoveto);\r\n              break;\r\n\r\n            case (12 << 8) + 12:\r\n              if (this.stack.length < 2) {\r\n                error = true;\r\n                break;\r\n              }\r\n\r\n              var num2 = this.stack.pop();\r\n              var num1 = this.stack.pop();\r\n              this.stack.push(num1 / num2);\r\n              break;\r\n\r\n            case (12 << 8) + 16:\r\n              if (this.stack.length < 2) {\r\n                error = true;\r\n                break;\r\n              }\r\n\r\n              subrNumber = this.stack.pop();\r\n              var numArgs = this.stack.pop();\r\n\r\n              if (subrNumber === 0 && numArgs === 3) {\r\n                var flexArgs = this.stack.splice(this.stack.length - 17, 17);\r\n                this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]);\r\n                error = this.executeCommand(13, COMMAND_MAP.flex, true);\r\n                this.flexing = false;\r\n                this.stack.push(flexArgs[15], flexArgs[16]);\r\n              } else if (subrNumber === 1 && numArgs === 0) {\r\n                this.flexing = true;\r\n              }\r\n\r\n              break;\r\n\r\n            case (12 << 8) + 17:\r\n              break;\r\n\r\n            case (12 << 8) + 33:\r\n              this.stack = [];\r\n              break;\r\n\r\n            default:\r\n              (0, _util.warn)('Unknown type 1 charstring command of \"' + value + '\"');\r\n              break;\r\n          }\r\n\r\n          if (error) {\r\n            break;\r\n          }\r\n\r\n          continue;\r\n        } else if (value <= 246) {\r\n          value = value - 139;\r\n        } else if (value <= 250) {\r\n          value = (value - 247) * 256 + encoded[++i] + 108;\r\n        } else if (value <= 254) {\r\n          value = -((value - 251) * 256) - encoded[++i] - 108;\r\n        } else {\r\n          value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0;\r\n        }\r\n\r\n        this.stack.push(value);\r\n      }\r\n\r\n      return error;\r\n    },\r\n    executeCommand: function executeCommand(howManyArgs, command, keepStack) {\r\n      var stackLength = this.stack.length;\r\n\r\n      if (howManyArgs > stackLength) {\r\n        return true;\r\n      }\r\n\r\n      var start = stackLength - howManyArgs;\r\n\r\n      for (var i = start; i < stackLength; i++) {\r\n        var value = this.stack[i];\r\n\r\n        if (Number.isInteger(value)) {\r\n          this.output.push(28, value >> 8 & 0xff, value & 0xff);\r\n        } else {\r\n          value = 65536 * value | 0;\r\n          this.output.push(255, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);\r\n        }\r\n      }\r\n\r\n      this.output.push.apply(this.output, command);\r\n\r\n      if (keepStack) {\r\n        this.stack.splice(start, howManyArgs);\r\n      } else {\r\n        this.stack.length = 0;\r\n      }\r\n\r\n      return false;\r\n    }\r\n  };\r\n  return Type1CharString;\r\n}();\r\n\r\nvar Type1Parser = function Type1ParserClosure() {\r\n  var EEXEC_ENCRYPT_KEY = 55665;\r\n  var CHAR_STRS_ENCRYPT_KEY = 4330;\r\n\r\n  function isHexDigit(code) {\r\n    return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102;\r\n  }\r\n\r\n  function decrypt(data, key, discardNumber) {\r\n    if (discardNumber >= data.length) {\r\n      return new Uint8Array(0);\r\n    }\r\n\r\n    var r = key | 0,\r\n        c1 = 52845,\r\n        c2 = 22719,\r\n        i,\r\n        j;\r\n\r\n    for (i = 0; i < discardNumber; i++) {\r\n      r = (data[i] + r) * c1 + c2 & (1 << 16) - 1;\r\n    }\r\n\r\n    var count = data.length - discardNumber;\r\n    var decrypted = new Uint8Array(count);\r\n\r\n    for (i = discardNumber, j = 0; j < count; i++, j++) {\r\n      var value = data[i];\r\n      decrypted[j] = value ^ r >> 8;\r\n      r = (value + r) * c1 + c2 & (1 << 16) - 1;\r\n    }\r\n\r\n    return decrypted;\r\n  }\r\n\r\n  function decryptAscii(data, key, discardNumber) {\r\n    var r = key | 0,\r\n        c1 = 52845,\r\n        c2 = 22719;\r\n    var count = data.length,\r\n        maybeLength = count >>> 1;\r\n    var decrypted = new Uint8Array(maybeLength);\r\n    var i, j;\r\n\r\n    for (i = 0, j = 0; i < count; i++) {\r\n      var digit1 = data[i];\r\n\r\n      if (!isHexDigit(digit1)) {\r\n        continue;\r\n      }\r\n\r\n      i++;\r\n      var digit2;\r\n\r\n      while (i < count && !isHexDigit(digit2 = data[i])) {\r\n        i++;\r\n      }\r\n\r\n      if (i < count) {\r\n        var value = parseInt(String.fromCharCode(digit1, digit2), 16);\r\n        decrypted[j++] = value ^ r >> 8;\r\n        r = (value + r) * c1 + c2 & (1 << 16) - 1;\r\n      }\r\n    }\r\n\r\n    return decrypted.slice(discardNumber, j);\r\n  }\r\n\r\n  function isSpecial(c) {\r\n    return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29;\r\n  }\r\n\r\n  function Type1Parser(stream, encrypted, seacAnalysisEnabled) {\r\n    if (encrypted) {\r\n      var data = stream.getBytes();\r\n      var isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7]));\r\n      stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4));\r\n    }\r\n\r\n    this.seacAnalysisEnabled = !!seacAnalysisEnabled;\r\n    this.stream = stream;\r\n    this.nextChar();\r\n  }\r\n\r\n  Type1Parser.prototype = {\r\n    readNumberArray: function Type1Parser_readNumberArray() {\r\n      this.getToken();\r\n      var array = [];\r\n\r\n      while (true) {\r\n        var token = this.getToken();\r\n\r\n        if (token === null || token === \"]\" || token === \"}\") {\r\n          break;\r\n        }\r\n\r\n        array.push(parseFloat(token || 0));\r\n      }\r\n\r\n      return array;\r\n    },\r\n    readNumber: function Type1Parser_readNumber() {\r\n      var token = this.getToken();\r\n      return parseFloat(token || 0);\r\n    },\r\n    readInt: function Type1Parser_readInt() {\r\n      var token = this.getToken();\r\n      return parseInt(token || 0, 10) | 0;\r\n    },\r\n    readBoolean: function Type1Parser_readBoolean() {\r\n      var token = this.getToken();\r\n      return token === \"true\" ? 1 : 0;\r\n    },\r\n    nextChar: function Type1_nextChar() {\r\n      return this.currentChar = this.stream.getByte();\r\n    },\r\n    getToken: function Type1Parser_getToken() {\r\n      var comment = false;\r\n      var ch = this.currentChar;\r\n\r\n      while (true) {\r\n        if (ch === -1) {\r\n          return null;\r\n        }\r\n\r\n        if (comment) {\r\n          if (ch === 0x0a || ch === 0x0d) {\r\n            comment = false;\r\n          }\r\n        } else if (ch === 0x25) {\r\n          comment = true;\r\n        } else if (!(0, _core_utils.isWhiteSpace)(ch)) {\r\n          break;\r\n        }\r\n\r\n        ch = this.nextChar();\r\n      }\r\n\r\n      if (isSpecial(ch)) {\r\n        this.nextChar();\r\n        return String.fromCharCode(ch);\r\n      }\r\n\r\n      var token = \"\";\r\n\r\n      do {\r\n        token += String.fromCharCode(ch);\r\n        ch = this.nextChar();\r\n      } while (ch >= 0 && !(0, _core_utils.isWhiteSpace)(ch) && !isSpecial(ch));\r\n\r\n      return token;\r\n    },\r\n    readCharStrings: function Type1Parser_readCharStrings(bytes, lenIV) {\r\n      if (lenIV === -1) {\r\n        return bytes;\r\n      }\r\n\r\n      return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV);\r\n    },\r\n    extractFontProgram: function Type1Parser_extractFontProgram(properties) {\r\n      var stream = this.stream;\r\n      var subrs = [],\r\n          charstrings = [];\r\n      var privateData = Object.create(null);\r\n      privateData.lenIV = 4;\r\n      var program = {\r\n        subrs: [],\r\n        charstrings: [],\r\n        properties: {\r\n          privateData: privateData\r\n        }\r\n      };\r\n      var token, length, data, lenIV, encoded;\r\n\r\n      while ((token = this.getToken()) !== null) {\r\n        if (token !== \"/\") {\r\n          continue;\r\n        }\r\n\r\n        token = this.getToken();\r\n\r\n        switch (token) {\r\n          case \"CharStrings\":\r\n            this.getToken();\r\n            this.getToken();\r\n            this.getToken();\r\n            this.getToken();\r\n\r\n            while (true) {\r\n              token = this.getToken();\r\n\r\n              if (token === null || token === \"end\") {\r\n                break;\r\n              }\r\n\r\n              if (token !== \"/\") {\r\n                continue;\r\n              }\r\n\r\n              var glyph = this.getToken();\r\n              length = this.readInt();\r\n              this.getToken();\r\n              data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);\r\n              lenIV = program.properties.privateData.lenIV;\r\n              encoded = this.readCharStrings(data, lenIV);\r\n              this.nextChar();\r\n              token = this.getToken();\r\n\r\n              if (token === \"noaccess\") {\r\n                this.getToken();\r\n              }\r\n\r\n              charstrings.push({\r\n                glyph: glyph,\r\n                encoded: encoded\r\n              });\r\n            }\r\n\r\n            break;\r\n\r\n          case \"Subrs\":\r\n            this.readInt();\r\n            this.getToken();\r\n\r\n            while (this.getToken() === \"dup\") {\r\n              var index = this.readInt();\r\n              length = this.readInt();\r\n              this.getToken();\r\n              data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);\r\n              lenIV = program.properties.privateData.lenIV;\r\n              encoded = this.readCharStrings(data, lenIV);\r\n              this.nextChar();\r\n              token = this.getToken();\r\n\r\n              if (token === \"noaccess\") {\r\n                this.getToken();\r\n              }\r\n\r\n              subrs[index] = encoded;\r\n            }\r\n\r\n            break;\r\n\r\n          case \"BlueValues\":\r\n          case \"OtherBlues\":\r\n          case \"FamilyBlues\":\r\n          case \"FamilyOtherBlues\":\r\n            var blueArray = this.readNumberArray();\r\n\r\n            if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) {\r\n              program.properties.privateData[token] = blueArray;\r\n            }\r\n\r\n            break;\r\n\r\n          case \"StemSnapH\":\r\n          case \"StemSnapV\":\r\n            program.properties.privateData[token] = this.readNumberArray();\r\n            break;\r\n\r\n          case \"StdHW\":\r\n          case \"StdVW\":\r\n            program.properties.privateData[token] = this.readNumberArray()[0];\r\n            break;\r\n\r\n          case \"BlueShift\":\r\n          case \"lenIV\":\r\n          case \"BlueFuzz\":\r\n          case \"BlueScale\":\r\n          case \"LanguageGroup\":\r\n          case \"ExpansionFactor\":\r\n            program.properties.privateData[token] = this.readNumber();\r\n            break;\r\n\r\n          case \"ForceBold\":\r\n            program.properties.privateData[token] = this.readBoolean();\r\n            break;\r\n        }\r\n      }\r\n\r\n      for (var i = 0; i < charstrings.length; i++) {\r\n        glyph = charstrings[i].glyph;\r\n        encoded = charstrings[i].encoded;\r\n        var charString = new Type1CharString();\r\n        var error = charString.convert(encoded, subrs, this.seacAnalysisEnabled);\r\n        var output = charString.output;\r\n\r\n        if (error) {\r\n          output = [14];\r\n        }\r\n\r\n        var charStringObject = {\r\n          glyphName: glyph,\r\n          charstring: output,\r\n          width: charString.width,\r\n          lsb: charString.lsb,\r\n          seac: charString.seac\r\n        };\r\n\r\n        if (glyph === \".notdef\") {\r\n          program.charstrings.unshift(charStringObject);\r\n        } else {\r\n          program.charstrings.push(charStringObject);\r\n        }\r\n\r\n        if (properties.builtInEncoding) {\r\n          var _index = properties.builtInEncoding.indexOf(glyph);\r\n\r\n          if (_index > -1 && properties.widths[_index] === undefined && _index >= properties.firstChar && _index <= properties.lastChar) {\r\n            properties.widths[_index] = charString.width;\r\n          }\r\n        }\r\n      }\r\n\r\n      return program;\r\n    },\r\n    extractFontHeader: function Type1Parser_extractFontHeader(properties) {\r\n      var token;\r\n\r\n      while ((token = this.getToken()) !== null) {\r\n        if (token !== \"/\") {\r\n          continue;\r\n        }\r\n\r\n        token = this.getToken();\r\n\r\n        switch (token) {\r\n          case \"FontMatrix\":\r\n            var matrix = this.readNumberArray();\r\n            properties.fontMatrix = matrix;\r\n            break;\r\n\r\n          case \"Encoding\":\r\n            var encodingArg = this.getToken();\r\n            var encoding;\r\n\r\n            if (!/^\\d+$/.test(encodingArg)) {\r\n              encoding = (0, _encodings.getEncoding)(encodingArg);\r\n            } else {\r\n              encoding = [];\r\n              var size = parseInt(encodingArg, 10) | 0;\r\n              this.getToken();\r\n\r\n              for (var j = 0; j < size; j++) {\r\n                token = this.getToken();\r\n\r\n                while (token !== \"dup\" && token !== \"def\") {\r\n                  token = this.getToken();\r\n\r\n                  if (token === null) {\r\n                    return;\r\n                  }\r\n                }\r\n\r\n                if (token === \"def\") {\r\n                  break;\r\n                }\r\n\r\n                var index = this.readInt();\r\n                this.getToken();\r\n                var glyph = this.getToken();\r\n                encoding[index] = glyph;\r\n                this.getToken();\r\n              }\r\n            }\r\n\r\n            properties.builtInEncoding = encoding;\r\n            break;\r\n\r\n          case \"FontBBox\":\r\n            var fontBBox = this.readNumberArray();\r\n            properties.ascent = Math.max(fontBBox[3], fontBBox[1]);\r\n            properties.descent = Math.min(fontBBox[1], fontBBox[3]);\r\n            properties.ascentScaled = true;\r\n            break;\r\n        }\r\n      }\r\n    }\r\n  };\r\n  return Type1Parser;\r\n}();\r\n\r\nexports.Type1Parser = Type1Parser;\r\n\r\n/***/ }),\r\n/* 168 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.getTilingPatternIR = getTilingPatternIR;\r\nexports.Pattern = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _colorspace = __w_pdfjs_require__(153);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar ShadingType = {\r\n  FUNCTION_BASED: 1,\r\n  AXIAL: 2,\r\n  RADIAL: 3,\r\n  FREE_FORM_MESH: 4,\r\n  LATTICE_FORM_MESH: 5,\r\n  COONS_PATCH_MESH: 6,\r\n  TENSOR_PATCH_MESH: 7\r\n};\r\n\r\nvar Pattern = function PatternClosure() {\r\n  function Pattern() {\r\n    (0, _util.unreachable)(\"should not call Pattern constructor\");\r\n  }\r\n\r\n  Pattern.prototype = {\r\n    getPattern: function Pattern_getPattern(ctx) {\r\n      (0, _util.unreachable)(\"Should not call Pattern.getStyle: \".concat(ctx));\r\n    }\r\n  };\r\n\r\n  Pattern.parseShading = function (shading, matrix, xref, res, handler, pdfFunctionFactory, localColorSpaceCache) {\r\n    var dict = (0, _primitives.isStream)(shading) ? shading.dict : shading;\r\n    var type = dict.get(\"ShadingType\");\r\n\r\n    try {\r\n      switch (type) {\r\n        case ShadingType.AXIAL:\r\n        case ShadingType.RADIAL:\r\n          return new Shadings.RadialAxial(dict, matrix, xref, res, pdfFunctionFactory, localColorSpaceCache);\r\n\r\n        case ShadingType.FREE_FORM_MESH:\r\n        case ShadingType.LATTICE_FORM_MESH:\r\n        case ShadingType.COONS_PATCH_MESH:\r\n        case ShadingType.TENSOR_PATCH_MESH:\r\n          return new Shadings.Mesh(shading, matrix, xref, res, pdfFunctionFactory, localColorSpaceCache);\r\n\r\n        default:\r\n          throw new _util.FormatError(\"Unsupported ShadingType: \" + type);\r\n      }\r\n    } catch (ex) {\r\n      if (ex instanceof _core_utils.MissingDataException) {\r\n        throw ex;\r\n      }\r\n\r\n      handler.send(\"UnsupportedFeature\", {\r\n        featureId: _util.UNSUPPORTED_FEATURES.shadingPattern\r\n      });\r\n      (0, _util.warn)(ex);\r\n      return new Shadings.Dummy();\r\n    }\r\n  };\r\n\r\n  return Pattern;\r\n}();\r\n\r\nexports.Pattern = Pattern;\r\nvar Shadings = {};\r\nShadings.SMALL_NUMBER = 1e-6;\r\n\r\nShadings.RadialAxial = function RadialAxialClosure() {\r\n  function RadialAxial(dict, matrix, xref, resources, pdfFunctionFactory, localColorSpaceCache) {\r\n    this.matrix = matrix;\r\n    this.coordsArr = dict.getArray(\"Coords\");\r\n    this.shadingType = dict.get(\"ShadingType\");\r\n    this.type = \"Pattern\";\r\n\r\n    var cs = _colorspace.ColorSpace.parse({\r\n      cs: dict.getRaw(\"ColorSpace\") || dict.getRaw(\"CS\"),\r\n      xref: xref,\r\n      resources: resources,\r\n      pdfFunctionFactory: pdfFunctionFactory,\r\n      localColorSpaceCache: localColorSpaceCache\r\n    });\r\n\r\n    this.cs = cs;\r\n    var bbox = dict.getArray(\"BBox\");\r\n\r\n    if (Array.isArray(bbox) && bbox.length === 4) {\r\n      this.bbox = _util.Util.normalizeRect(bbox);\r\n    } else {\r\n      this.bbox = null;\r\n    }\r\n\r\n    var t0 = 0.0,\r\n        t1 = 1.0;\r\n\r\n    if (dict.has(\"Domain\")) {\r\n      var domainArr = dict.getArray(\"Domain\");\r\n      t0 = domainArr[0];\r\n      t1 = domainArr[1];\r\n    }\r\n\r\n    var extendStart = false,\r\n        extendEnd = false;\r\n\r\n    if (dict.has(\"Extend\")) {\r\n      var extendArr = dict.getArray(\"Extend\");\r\n      extendStart = extendArr[0];\r\n      extendEnd = extendArr[1];\r\n    }\r\n\r\n    if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) {\r\n      var x1 = this.coordsArr[0];\r\n      var y1 = this.coordsArr[1];\r\n      var r1 = this.coordsArr[2];\r\n      var x2 = this.coordsArr[3];\r\n      var y2 = this.coordsArr[4];\r\n      var r2 = this.coordsArr[5];\r\n      var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));\r\n\r\n      if (r1 <= r2 + distance && r2 <= r1 + distance) {\r\n        (0, _util.warn)(\"Unsupported radial gradient.\");\r\n      }\r\n    }\r\n\r\n    this.extendStart = extendStart;\r\n    this.extendEnd = extendEnd;\r\n    var fnObj = dict.getRaw(\"Function\");\r\n    var fn = pdfFunctionFactory.createFromArray(fnObj);\r\n    var NUMBER_OF_SAMPLES = 10;\r\n    var step = (t1 - t0) / NUMBER_OF_SAMPLES;\r\n    var colorStops = this.colorStops = [];\r\n\r\n    if (t0 >= t1 || step <= 0) {\r\n      (0, _util.info)(\"Bad shading domain.\");\r\n      return;\r\n    }\r\n\r\n    var color = new Float32Array(cs.numComps),\r\n        ratio = new Float32Array(1);\r\n    var rgbColor;\r\n\r\n    for (var i = 0; i <= NUMBER_OF_SAMPLES; i++) {\r\n      ratio[0] = t0 + i * step;\r\n      fn(ratio, 0, color, 0);\r\n      rgbColor = cs.getRgb(color, 0);\r\n\r\n      var cssColor = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]);\r\n\r\n      colorStops.push([i / NUMBER_OF_SAMPLES, cssColor]);\r\n    }\r\n\r\n    var background = \"transparent\";\r\n\r\n    if (dict.has(\"Background\")) {\r\n      rgbColor = cs.getRgb(dict.get(\"Background\"), 0);\r\n      background = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]);\r\n    }\r\n\r\n    if (!extendStart) {\r\n      colorStops.unshift([0, background]);\r\n      colorStops[1][0] += Shadings.SMALL_NUMBER;\r\n    }\r\n\r\n    if (!extendEnd) {\r\n      colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER;\r\n      colorStops.push([1, background]);\r\n    }\r\n\r\n    this.colorStops = colorStops;\r\n  }\r\n\r\n  RadialAxial.prototype = {\r\n    getIR: function RadialAxial_getIR() {\r\n      var coordsArr = this.coordsArr;\r\n      var shadingType = this.shadingType;\r\n      var type, p0, p1, r0, r1;\r\n\r\n      if (shadingType === ShadingType.AXIAL) {\r\n        p0 = [coordsArr[0], coordsArr[1]];\r\n        p1 = [coordsArr[2], coordsArr[3]];\r\n        r0 = null;\r\n        r1 = null;\r\n        type = \"axial\";\r\n      } else if (shadingType === ShadingType.RADIAL) {\r\n        p0 = [coordsArr[0], coordsArr[1]];\r\n        p1 = [coordsArr[3], coordsArr[4]];\r\n        r0 = coordsArr[2];\r\n        r1 = coordsArr[5];\r\n        type = \"radial\";\r\n      } else {\r\n        (0, _util.unreachable)(\"getPattern type unknown: \".concat(shadingType));\r\n      }\r\n\r\n      var matrix = this.matrix;\r\n\r\n      if (matrix) {\r\n        p0 = _util.Util.applyTransform(p0, matrix);\r\n        p1 = _util.Util.applyTransform(p1, matrix);\r\n\r\n        if (shadingType === ShadingType.RADIAL) {\r\n          var scale = _util.Util.singularValueDecompose2dScale(matrix);\r\n\r\n          r0 *= scale[0];\r\n          r1 *= scale[1];\r\n        }\r\n      }\r\n\r\n      return [\"RadialAxial\", type, this.bbox, this.colorStops, p0, p1, r0, r1];\r\n    }\r\n  };\r\n  return RadialAxial;\r\n}();\r\n\r\nShadings.Mesh = function MeshClosure() {\r\n  function MeshStreamReader(stream, context) {\r\n    this.stream = stream;\r\n    this.context = context;\r\n    this.buffer = 0;\r\n    this.bufferLength = 0;\r\n    var numComps = context.numComps;\r\n    this.tmpCompsBuf = new Float32Array(numComps);\r\n    var csNumComps = context.colorSpace.numComps;\r\n    this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf;\r\n  }\r\n\r\n  MeshStreamReader.prototype = {\r\n    get hasData() {\r\n      if (this.stream.end) {\r\n        return this.stream.pos < this.stream.end;\r\n      }\r\n\r\n      if (this.bufferLength > 0) {\r\n        return true;\r\n      }\r\n\r\n      var nextByte = this.stream.getByte();\r\n\r\n      if (nextByte < 0) {\r\n        return false;\r\n      }\r\n\r\n      this.buffer = nextByte;\r\n      this.bufferLength = 8;\r\n      return true;\r\n    },\r\n\r\n    readBits: function MeshStreamReader_readBits(n) {\r\n      var buffer = this.buffer;\r\n      var bufferLength = this.bufferLength;\r\n\r\n      if (n === 32) {\r\n        if (bufferLength === 0) {\r\n          return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0;\r\n        }\r\n\r\n        buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte();\r\n        var nextByte = this.stream.getByte();\r\n        this.buffer = nextByte & (1 << bufferLength) - 1;\r\n        return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0;\r\n      }\r\n\r\n      if (n === 8 && bufferLength === 0) {\r\n        return this.stream.getByte();\r\n      }\r\n\r\n      while (bufferLength < n) {\r\n        buffer = buffer << 8 | this.stream.getByte();\r\n        bufferLength += 8;\r\n      }\r\n\r\n      bufferLength -= n;\r\n      this.bufferLength = bufferLength;\r\n      this.buffer = buffer & (1 << bufferLength) - 1;\r\n      return buffer >> bufferLength;\r\n    },\r\n    align: function MeshStreamReader_align() {\r\n      this.buffer = 0;\r\n      this.bufferLength = 0;\r\n    },\r\n    readFlag: function MeshStreamReader_readFlag() {\r\n      return this.readBits(this.context.bitsPerFlag);\r\n    },\r\n    readCoordinate: function MeshStreamReader_readCoordinate() {\r\n      var bitsPerCoordinate = this.context.bitsPerCoordinate;\r\n      var xi = this.readBits(bitsPerCoordinate);\r\n      var yi = this.readBits(bitsPerCoordinate);\r\n      var decode = this.context.decode;\r\n      var scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10;\r\n      return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]];\r\n    },\r\n    readComponents: function MeshStreamReader_readComponents() {\r\n      var numComps = this.context.numComps;\r\n      var bitsPerComponent = this.context.bitsPerComponent;\r\n      var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10;\r\n      var decode = this.context.decode;\r\n      var components = this.tmpCompsBuf;\r\n\r\n      for (var i = 0, j = 4; i < numComps; i++, j += 2) {\r\n        var ci = this.readBits(bitsPerComponent);\r\n        components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j];\r\n      }\r\n\r\n      var color = this.tmpCsCompsBuf;\r\n\r\n      if (this.context.colorFn) {\r\n        this.context.colorFn(components, 0, color, 0);\r\n      }\r\n\r\n      return this.context.colorSpace.getRgb(color, 0);\r\n    }\r\n  };\r\n\r\n  function decodeType4Shading(mesh, reader) {\r\n    var coords = mesh.coords;\r\n    var colors = mesh.colors;\r\n    var operators = [];\r\n    var ps = [];\r\n    var verticesLeft = 0;\r\n\r\n    while (reader.hasData) {\r\n      var f = reader.readFlag();\r\n      var coord = reader.readCoordinate();\r\n      var color = reader.readComponents();\r\n\r\n      if (verticesLeft === 0) {\r\n        if (!(0 <= f && f <= 2)) {\r\n          throw new _util.FormatError(\"Unknown type4 flag\");\r\n        }\r\n\r\n        switch (f) {\r\n          case 0:\r\n            verticesLeft = 3;\r\n            break;\r\n\r\n          case 1:\r\n            ps.push(ps[ps.length - 2], ps[ps.length - 1]);\r\n            verticesLeft = 1;\r\n            break;\r\n\r\n          case 2:\r\n            ps.push(ps[ps.length - 3], ps[ps.length - 1]);\r\n            verticesLeft = 1;\r\n            break;\r\n        }\r\n\r\n        operators.push(f);\r\n      }\r\n\r\n      ps.push(coords.length);\r\n      coords.push(coord);\r\n      colors.push(color);\r\n      verticesLeft--;\r\n      reader.align();\r\n    }\r\n\r\n    mesh.figures.push({\r\n      type: \"triangles\",\r\n      coords: new Int32Array(ps),\r\n      colors: new Int32Array(ps)\r\n    });\r\n  }\r\n\r\n  function decodeType5Shading(mesh, reader, verticesPerRow) {\r\n    var coords = mesh.coords;\r\n    var colors = mesh.colors;\r\n    var ps = [];\r\n\r\n    while (reader.hasData) {\r\n      var coord = reader.readCoordinate();\r\n      var color = reader.readComponents();\r\n      ps.push(coords.length);\r\n      coords.push(coord);\r\n      colors.push(color);\r\n    }\r\n\r\n    mesh.figures.push({\r\n      type: \"lattice\",\r\n      coords: new Int32Array(ps),\r\n      colors: new Int32Array(ps),\r\n      verticesPerRow: verticesPerRow\r\n    });\r\n  }\r\n\r\n  var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;\r\n  var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;\r\n  var TRIANGLE_DENSITY = 20;\r\n\r\n  var getB = function getBClosure() {\r\n    function buildB(count) {\r\n      var lut = [];\r\n\r\n      for (var i = 0; i <= count; i++) {\r\n        var t = i / count,\r\n            t_ = 1 - t;\r\n        lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, 3 * t * t * t_, t * t * t]));\r\n      }\r\n\r\n      return lut;\r\n    }\r\n\r\n    var cache = [];\r\n    return function getB(count) {\r\n      if (!cache[count]) {\r\n        cache[count] = buildB(count);\r\n      }\r\n\r\n      return cache[count];\r\n    };\r\n  }();\r\n\r\n  function buildFigureFromPatch(mesh, index) {\r\n    var figure = mesh.figures[index];\r\n    (0, _util.assert)(figure.type === \"patch\", \"Unexpected patch mesh figure\");\r\n    var coords = mesh.coords,\r\n        colors = mesh.colors;\r\n    var pi = figure.coords;\r\n    var ci = figure.colors;\r\n    var figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);\r\n    var figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);\r\n    var figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);\r\n    var figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);\r\n    var splitXBy = Math.ceil((figureMaxX - figureMinX) * TRIANGLE_DENSITY / (mesh.bounds[2] - mesh.bounds[0]));\r\n    splitXBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy));\r\n    var splitYBy = Math.ceil((figureMaxY - figureMinY) * TRIANGLE_DENSITY / (mesh.bounds[3] - mesh.bounds[1]));\r\n    splitYBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy));\r\n    var verticesPerRow = splitXBy + 1;\r\n    var figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow);\r\n    var figureColors = new Int32Array((splitYBy + 1) * verticesPerRow);\r\n    var k = 0;\r\n    var cl = new Uint8Array(3),\r\n        cr = new Uint8Array(3);\r\n    var c0 = colors[ci[0]],\r\n        c1 = colors[ci[1]],\r\n        c2 = colors[ci[2]],\r\n        c3 = colors[ci[3]];\r\n    var bRow = getB(splitYBy),\r\n        bCol = getB(splitXBy);\r\n\r\n    for (var row = 0; row <= splitYBy; row++) {\r\n      cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0;\r\n      cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0;\r\n      cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0;\r\n      cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0;\r\n      cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0;\r\n      cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0;\r\n\r\n      for (var col = 0; col <= splitXBy; col++, k++) {\r\n        if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) {\r\n          continue;\r\n        }\r\n\r\n        var x = 0,\r\n            y = 0;\r\n        var q = 0;\r\n\r\n        for (var i = 0; i <= 3; i++) {\r\n          for (var j = 0; j <= 3; j++, q++) {\r\n            var m = bRow[row][i] * bCol[col][j];\r\n            x += coords[pi[q]][0] * m;\r\n            y += coords[pi[q]][1] * m;\r\n          }\r\n        }\r\n\r\n        figureCoords[k] = coords.length;\r\n        coords.push([x, y]);\r\n        figureColors[k] = colors.length;\r\n        var newColor = new Uint8Array(3);\r\n        newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0;\r\n        newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0;\r\n        newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0;\r\n        colors.push(newColor);\r\n      }\r\n    }\r\n\r\n    figureCoords[0] = pi[0];\r\n    figureColors[0] = ci[0];\r\n    figureCoords[splitXBy] = pi[3];\r\n    figureColors[splitXBy] = ci[1];\r\n    figureCoords[verticesPerRow * splitYBy] = pi[12];\r\n    figureColors[verticesPerRow * splitYBy] = ci[2];\r\n    figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15];\r\n    figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3];\r\n    mesh.figures[index] = {\r\n      type: \"lattice\",\r\n      coords: figureCoords,\r\n      colors: figureColors,\r\n      verticesPerRow: verticesPerRow\r\n    };\r\n  }\r\n\r\n  function decodeType6Shading(mesh, reader) {\r\n    var coords = mesh.coords;\r\n    var colors = mesh.colors;\r\n    var ps = new Int32Array(16);\r\n    var cs = new Int32Array(4);\r\n\r\n    while (reader.hasData) {\r\n      var f = reader.readFlag();\r\n\r\n      if (!(0 <= f && f <= 3)) {\r\n        throw new _util.FormatError(\"Unknown type6 flag\");\r\n      }\r\n\r\n      var i, ii;\r\n      var pi = coords.length;\r\n\r\n      for (i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) {\r\n        coords.push(reader.readCoordinate());\r\n      }\r\n\r\n      var ci = colors.length;\r\n\r\n      for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {\r\n        colors.push(reader.readComponents());\r\n      }\r\n\r\n      var tmp1, tmp2, tmp3, tmp4;\r\n\r\n      switch (f) {\r\n        case 0:\r\n          ps[12] = pi + 3;\r\n          ps[13] = pi + 4;\r\n          ps[14] = pi + 5;\r\n          ps[15] = pi + 6;\r\n          ps[8] = pi + 2;\r\n          ps[11] = pi + 7;\r\n          ps[4] = pi + 1;\r\n          ps[7] = pi + 8;\r\n          ps[0] = pi;\r\n          ps[1] = pi + 11;\r\n          ps[2] = pi + 10;\r\n          ps[3] = pi + 9;\r\n          cs[2] = ci + 1;\r\n          cs[3] = ci + 2;\r\n          cs[0] = ci;\r\n          cs[1] = ci + 3;\r\n          break;\r\n\r\n        case 1:\r\n          tmp1 = ps[12];\r\n          tmp2 = ps[13];\r\n          tmp3 = ps[14];\r\n          tmp4 = ps[15];\r\n          ps[12] = tmp4;\r\n          ps[13] = pi + 0;\r\n          ps[14] = pi + 1;\r\n          ps[15] = pi + 2;\r\n          ps[8] = tmp3;\r\n          ps[11] = pi + 3;\r\n          ps[4] = tmp2;\r\n          ps[7] = pi + 4;\r\n          ps[0] = tmp1;\r\n          ps[1] = pi + 7;\r\n          ps[2] = pi + 6;\r\n          ps[3] = pi + 5;\r\n          tmp1 = cs[2];\r\n          tmp2 = cs[3];\r\n          cs[2] = tmp2;\r\n          cs[3] = ci;\r\n          cs[0] = tmp1;\r\n          cs[1] = ci + 1;\r\n          break;\r\n\r\n        case 2:\r\n          tmp1 = ps[15];\r\n          tmp2 = ps[11];\r\n          ps[12] = ps[3];\r\n          ps[13] = pi + 0;\r\n          ps[14] = pi + 1;\r\n          ps[15] = pi + 2;\r\n          ps[8] = ps[7];\r\n          ps[11] = pi + 3;\r\n          ps[4] = tmp2;\r\n          ps[7] = pi + 4;\r\n          ps[0] = tmp1;\r\n          ps[1] = pi + 7;\r\n          ps[2] = pi + 6;\r\n          ps[3] = pi + 5;\r\n          tmp1 = cs[3];\r\n          cs[2] = cs[1];\r\n          cs[3] = ci;\r\n          cs[0] = tmp1;\r\n          cs[1] = ci + 1;\r\n          break;\r\n\r\n        case 3:\r\n          ps[12] = ps[0];\r\n          ps[13] = pi + 0;\r\n          ps[14] = pi + 1;\r\n          ps[15] = pi + 2;\r\n          ps[8] = ps[1];\r\n          ps[11] = pi + 3;\r\n          ps[4] = ps[2];\r\n          ps[7] = pi + 4;\r\n          ps[0] = ps[3];\r\n          ps[1] = pi + 7;\r\n          ps[2] = pi + 6;\r\n          ps[3] = pi + 5;\r\n          cs[2] = cs[0];\r\n          cs[3] = ci;\r\n          cs[0] = cs[1];\r\n          cs[1] = ci + 1;\r\n          break;\r\n      }\r\n\r\n      ps[5] = coords.length;\r\n      coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]);\r\n      ps[6] = coords.length;\r\n      coords.push([(-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9]);\r\n      ps[9] = coords.length;\r\n      coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]);\r\n      ps[10] = coords.length;\r\n      coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]);\r\n      mesh.figures.push({\r\n        type: \"patch\",\r\n        coords: new Int32Array(ps),\r\n        colors: new Int32Array(cs)\r\n      });\r\n    }\r\n  }\r\n\r\n  function decodeType7Shading(mesh, reader) {\r\n    var coords = mesh.coords;\r\n    var colors = mesh.colors;\r\n    var ps = new Int32Array(16);\r\n    var cs = new Int32Array(4);\r\n\r\n    while (reader.hasData) {\r\n      var f = reader.readFlag();\r\n\r\n      if (!(0 <= f && f <= 3)) {\r\n        throw new _util.FormatError(\"Unknown type7 flag\");\r\n      }\r\n\r\n      var i, ii;\r\n      var pi = coords.length;\r\n\r\n      for (i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) {\r\n        coords.push(reader.readCoordinate());\r\n      }\r\n\r\n      var ci = colors.length;\r\n\r\n      for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {\r\n        colors.push(reader.readComponents());\r\n      }\r\n\r\n      var tmp1, tmp2, tmp3, tmp4;\r\n\r\n      switch (f) {\r\n        case 0:\r\n          ps[12] = pi + 3;\r\n          ps[13] = pi + 4;\r\n          ps[14] = pi + 5;\r\n          ps[15] = pi + 6;\r\n          ps[8] = pi + 2;\r\n          ps[9] = pi + 13;\r\n          ps[10] = pi + 14;\r\n          ps[11] = pi + 7;\r\n          ps[4] = pi + 1;\r\n          ps[5] = pi + 12;\r\n          ps[6] = pi + 15;\r\n          ps[7] = pi + 8;\r\n          ps[0] = pi;\r\n          ps[1] = pi + 11;\r\n          ps[2] = pi + 10;\r\n          ps[3] = pi + 9;\r\n          cs[2] = ci + 1;\r\n          cs[3] = ci + 2;\r\n          cs[0] = ci;\r\n          cs[1] = ci + 3;\r\n          break;\r\n\r\n        case 1:\r\n          tmp1 = ps[12];\r\n          tmp2 = ps[13];\r\n          tmp3 = ps[14];\r\n          tmp4 = ps[15];\r\n          ps[12] = tmp4;\r\n          ps[13] = pi + 0;\r\n          ps[14] = pi + 1;\r\n          ps[15] = pi + 2;\r\n          ps[8] = tmp3;\r\n          ps[9] = pi + 9;\r\n          ps[10] = pi + 10;\r\n          ps[11] = pi + 3;\r\n          ps[4] = tmp2;\r\n          ps[5] = pi + 8;\r\n          ps[6] = pi + 11;\r\n          ps[7] = pi + 4;\r\n          ps[0] = tmp1;\r\n          ps[1] = pi + 7;\r\n          ps[2] = pi + 6;\r\n          ps[3] = pi + 5;\r\n          tmp1 = cs[2];\r\n          tmp2 = cs[3];\r\n          cs[2] = tmp2;\r\n          cs[3] = ci;\r\n          cs[0] = tmp1;\r\n          cs[1] = ci + 1;\r\n          break;\r\n\r\n        case 2:\r\n          tmp1 = ps[15];\r\n          tmp2 = ps[11];\r\n          ps[12] = ps[3];\r\n          ps[13] = pi + 0;\r\n          ps[14] = pi + 1;\r\n          ps[15] = pi + 2;\r\n          ps[8] = ps[7];\r\n          ps[9] = pi + 9;\r\n          ps[10] = pi + 10;\r\n          ps[11] = pi + 3;\r\n          ps[4] = tmp2;\r\n          ps[5] = pi + 8;\r\n          ps[6] = pi + 11;\r\n          ps[7] = pi + 4;\r\n          ps[0] = tmp1;\r\n          ps[1] = pi + 7;\r\n          ps[2] = pi + 6;\r\n          ps[3] = pi + 5;\r\n          tmp1 = cs[3];\r\n          cs[2] = cs[1];\r\n          cs[3] = ci;\r\n          cs[0] = tmp1;\r\n          cs[1] = ci + 1;\r\n          break;\r\n\r\n        case 3:\r\n          ps[12] = ps[0];\r\n          ps[13] = pi + 0;\r\n          ps[14] = pi + 1;\r\n          ps[15] = pi + 2;\r\n          ps[8] = ps[1];\r\n          ps[9] = pi + 9;\r\n          ps[10] = pi + 10;\r\n          ps[11] = pi + 3;\r\n          ps[4] = ps[2];\r\n          ps[5] = pi + 8;\r\n          ps[6] = pi + 11;\r\n          ps[7] = pi + 4;\r\n          ps[0] = ps[3];\r\n          ps[1] = pi + 7;\r\n          ps[2] = pi + 6;\r\n          ps[3] = pi + 5;\r\n          cs[2] = cs[0];\r\n          cs[3] = ci;\r\n          cs[0] = cs[1];\r\n          cs[1] = ci + 1;\r\n          break;\r\n      }\r\n\r\n      mesh.figures.push({\r\n        type: \"patch\",\r\n        coords: new Int32Array(ps),\r\n        colors: new Int32Array(cs)\r\n      });\r\n    }\r\n  }\r\n\r\n  function updateBounds(mesh) {\r\n    var minX = mesh.coords[0][0],\r\n        minY = mesh.coords[0][1],\r\n        maxX = minX,\r\n        maxY = minY;\r\n\r\n    for (var i = 1, ii = mesh.coords.length; i < ii; i++) {\r\n      var x = mesh.coords[i][0],\r\n          y = mesh.coords[i][1];\r\n      minX = minX > x ? x : minX;\r\n      minY = minY > y ? y : minY;\r\n      maxX = maxX < x ? x : maxX;\r\n      maxY = maxY < y ? y : maxY;\r\n    }\r\n\r\n    mesh.bounds = [minX, minY, maxX, maxY];\r\n  }\r\n\r\n  function packData(mesh) {\r\n    var i, ii, j, jj;\r\n    var coords = mesh.coords;\r\n    var coordsPacked = new Float32Array(coords.length * 2);\r\n\r\n    for (i = 0, j = 0, ii = coords.length; i < ii; i++) {\r\n      var xy = coords[i];\r\n      coordsPacked[j++] = xy[0];\r\n      coordsPacked[j++] = xy[1];\r\n    }\r\n\r\n    mesh.coords = coordsPacked;\r\n    var colors = mesh.colors;\r\n    var colorsPacked = new Uint8Array(colors.length * 3);\r\n\r\n    for (i = 0, j = 0, ii = colors.length; i < ii; i++) {\r\n      var c = colors[i];\r\n      colorsPacked[j++] = c[0];\r\n      colorsPacked[j++] = c[1];\r\n      colorsPacked[j++] = c[2];\r\n    }\r\n\r\n    mesh.colors = colorsPacked;\r\n    var figures = mesh.figures;\r\n\r\n    for (i = 0, ii = figures.length; i < ii; i++) {\r\n      var figure = figures[i],\r\n          ps = figure.coords,\r\n          cs = figure.colors;\r\n\r\n      for (j = 0, jj = ps.length; j < jj; j++) {\r\n        ps[j] *= 2;\r\n        cs[j] *= 3;\r\n      }\r\n    }\r\n  }\r\n\r\n  function Mesh(stream, matrix, xref, resources, pdfFunctionFactory, localColorSpaceCache) {\r\n    if (!(0, _primitives.isStream)(stream)) {\r\n      throw new _util.FormatError(\"Mesh data is not a stream\");\r\n    }\r\n\r\n    var dict = stream.dict;\r\n    this.matrix = matrix;\r\n    this.shadingType = dict.get(\"ShadingType\");\r\n    this.type = \"Pattern\";\r\n    var bbox = dict.getArray(\"BBox\");\r\n\r\n    if (Array.isArray(bbox) && bbox.length === 4) {\r\n      this.bbox = _util.Util.normalizeRect(bbox);\r\n    } else {\r\n      this.bbox = null;\r\n    }\r\n\r\n    var cs = _colorspace.ColorSpace.parse({\r\n      cs: dict.getRaw(\"ColorSpace\") || dict.getRaw(\"CS\"),\r\n      xref: xref,\r\n      resources: resources,\r\n      pdfFunctionFactory: pdfFunctionFactory,\r\n      localColorSpaceCache: localColorSpaceCache\r\n    });\r\n\r\n    this.cs = cs;\r\n    this.background = dict.has(\"Background\") ? cs.getRgb(dict.get(\"Background\"), 0) : null;\r\n    var fnObj = dict.getRaw(\"Function\");\r\n    var fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null;\r\n    this.coords = [];\r\n    this.colors = [];\r\n    this.figures = [];\r\n    var decodeContext = {\r\n      bitsPerCoordinate: dict.get(\"BitsPerCoordinate\"),\r\n      bitsPerComponent: dict.get(\"BitsPerComponent\"),\r\n      bitsPerFlag: dict.get(\"BitsPerFlag\"),\r\n      decode: dict.getArray(\"Decode\"),\r\n      colorFn: fn,\r\n      colorSpace: cs,\r\n      numComps: fn ? 1 : cs.numComps\r\n    };\r\n    var reader = new MeshStreamReader(stream, decodeContext);\r\n    var patchMesh = false;\r\n\r\n    switch (this.shadingType) {\r\n      case ShadingType.FREE_FORM_MESH:\r\n        decodeType4Shading(this, reader);\r\n        break;\r\n\r\n      case ShadingType.LATTICE_FORM_MESH:\r\n        var verticesPerRow = dict.get(\"VerticesPerRow\") | 0;\r\n\r\n        if (verticesPerRow < 2) {\r\n          throw new _util.FormatError(\"Invalid VerticesPerRow\");\r\n        }\r\n\r\n        decodeType5Shading(this, reader, verticesPerRow);\r\n        break;\r\n\r\n      case ShadingType.COONS_PATCH_MESH:\r\n        decodeType6Shading(this, reader);\r\n        patchMesh = true;\r\n        break;\r\n\r\n      case ShadingType.TENSOR_PATCH_MESH:\r\n        decodeType7Shading(this, reader);\r\n        patchMesh = true;\r\n        break;\r\n\r\n      default:\r\n        (0, _util.unreachable)(\"Unsupported mesh type.\");\r\n        break;\r\n    }\r\n\r\n    if (patchMesh) {\r\n      updateBounds(this);\r\n\r\n      for (var i = 0, ii = this.figures.length; i < ii; i++) {\r\n        buildFigureFromPatch(this, i);\r\n      }\r\n    }\r\n\r\n    updateBounds(this);\r\n    packData(this);\r\n  }\r\n\r\n  Mesh.prototype = {\r\n    getIR: function Mesh_getIR() {\r\n      return [\"Mesh\", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.matrix, this.bbox, this.background];\r\n    }\r\n  };\r\n  return Mesh;\r\n}();\r\n\r\nShadings.Dummy = function DummyClosure() {\r\n  function Dummy() {\r\n    this.type = \"Pattern\";\r\n  }\r\n\r\n  Dummy.prototype = {\r\n    getIR: function Dummy_getIR() {\r\n      return [\"Dummy\"];\r\n    }\r\n  };\r\n  return Dummy;\r\n}();\r\n\r\nfunction getTilingPatternIR(operatorList, dict, color) {\r\n  var matrix = dict.getArray(\"Matrix\");\r\n\r\n  var bbox = _util.Util.normalizeRect(dict.getArray(\"BBox\"));\r\n\r\n  var xstep = dict.get(\"XStep\");\r\n  var ystep = dict.get(\"YStep\");\r\n  var paintType = dict.get(\"PaintType\");\r\n  var tilingType = dict.get(\"TilingType\");\r\n\r\n  if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) {\r\n    throw new _util.FormatError(\"Invalid getTilingPatternIR /BBox array: [\".concat(bbox, \"].\"));\r\n  }\r\n\r\n  return [\"TilingPattern\", color, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType];\r\n}\r\n\r\n/***/ }),\r\n/* 169 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.isPDFFunction = isPDFFunction;\r\nexports.PostScriptEvaluator = exports.PostScriptCompiler = exports.PDFFunctionFactory = void 0;\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _ps_parser = __w_pdfjs_require__(170);\r\n\r\nvar _image_utils = __w_pdfjs_require__(154);\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar PDFFunctionFactory = /*#__PURE__*/function () {\r\n  function PDFFunctionFactory(_ref) {\r\n    var xref = _ref.xref,\r\n        _ref$isEvalSupported = _ref.isEvalSupported,\r\n        isEvalSupported = _ref$isEvalSupported === void 0 ? true : _ref$isEvalSupported;\r\n\r\n    _classCallCheck(this, PDFFunctionFactory);\r\n\r\n    this.xref = xref;\r\n    this.isEvalSupported = isEvalSupported !== false;\r\n  }\r\n\r\n  _createClass(PDFFunctionFactory, [{\r\n    key: \"create\",\r\n    value: function create(fn) {\r\n      var cachedFunction = this.getCached(fn);\r\n\r\n      if (cachedFunction) {\r\n        return cachedFunction;\r\n      }\r\n\r\n      var parsedFunction = PDFFunction.parse({\r\n        xref: this.xref,\r\n        isEvalSupported: this.isEvalSupported,\r\n        fn: fn instanceof _primitives.Ref ? this.xref.fetch(fn) : fn\r\n      });\r\n\r\n      this._cache(fn, parsedFunction);\r\n\r\n      return parsedFunction;\r\n    }\r\n  }, {\r\n    key: \"createFromArray\",\r\n    value: function createFromArray(fnObj) {\r\n      var cachedFunction = this.getCached(fnObj);\r\n\r\n      if (cachedFunction) {\r\n        return cachedFunction;\r\n      }\r\n\r\n      var parsedFunction = PDFFunction.parseArray({\r\n        xref: this.xref,\r\n        isEvalSupported: this.isEvalSupported,\r\n        fnObj: fnObj instanceof _primitives.Ref ? this.xref.fetch(fnObj) : fnObj\r\n      });\r\n\r\n      this._cache(fnObj, parsedFunction);\r\n\r\n      return parsedFunction;\r\n    }\r\n  }, {\r\n    key: \"getCached\",\r\n    value: function getCached(cacheKey) {\r\n      var fnRef;\r\n\r\n      if (cacheKey instanceof _primitives.Ref) {\r\n        fnRef = cacheKey;\r\n      } else if (cacheKey instanceof _primitives.Dict) {\r\n        fnRef = cacheKey.objId;\r\n      } else if ((0, _primitives.isStream)(cacheKey)) {\r\n        fnRef = cacheKey.dict && cacheKey.dict.objId;\r\n      }\r\n\r\n      if (fnRef) {\r\n        var localFunction = this._localFunctionCache.getByRef(fnRef);\r\n\r\n        if (localFunction) {\r\n          return localFunction;\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n  }, {\r\n    key: \"_cache\",\r\n    value: function _cache(cacheKey, parsedFunction) {\r\n      if (!parsedFunction) {\r\n        throw new Error('PDFFunctionFactory._cache - expected \"parsedFunction\" argument.');\r\n      }\r\n\r\n      var fnRef;\r\n\r\n      if (cacheKey instanceof _primitives.Ref) {\r\n        fnRef = cacheKey;\r\n      } else if (cacheKey instanceof _primitives.Dict) {\r\n        fnRef = cacheKey.objId;\r\n      } else if ((0, _primitives.isStream)(cacheKey)) {\r\n        fnRef = cacheKey.dict && cacheKey.dict.objId;\r\n      }\r\n\r\n      if (fnRef) {\r\n        this._localFunctionCache.set(null, fnRef, parsedFunction);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_localFunctionCache\",\r\n    get: function get() {\r\n      return (0, _util.shadow)(this, \"_localFunctionCache\", new _image_utils.LocalFunctionCache());\r\n    }\r\n  }]);\r\n\r\n  return PDFFunctionFactory;\r\n}();\r\n\r\nexports.PDFFunctionFactory = PDFFunctionFactory;\r\n\r\nfunction toNumberArray(arr) {\r\n  if (!Array.isArray(arr)) {\r\n    return null;\r\n  }\r\n\r\n  var length = arr.length;\r\n\r\n  for (var i = 0; i < length; i++) {\r\n    if (typeof arr[i] !== \"number\") {\r\n      var result = new Array(length);\r\n\r\n      for (var j = 0; j < length; j++) {\r\n        result[j] = +arr[j];\r\n      }\r\n\r\n      return result;\r\n    }\r\n  }\r\n\r\n  return arr;\r\n}\r\n\r\nvar PDFFunction = function PDFFunctionClosure() {\r\n  var CONSTRUCT_SAMPLED = 0;\r\n  var CONSTRUCT_INTERPOLATED = 2;\r\n  var CONSTRUCT_STICHED = 3;\r\n  var CONSTRUCT_POSTSCRIPT = 4;\r\n  return {\r\n    getSampleArray: function getSampleArray(size, outputSize, bps, stream) {\r\n      var i, ii;\r\n      var length = 1;\r\n\r\n      for (i = 0, ii = size.length; i < ii; i++) {\r\n        length *= size[i];\r\n      }\r\n\r\n      length *= outputSize;\r\n      var array = new Array(length);\r\n      var codeSize = 0;\r\n      var codeBuf = 0;\r\n      var sampleMul = 1.0 / (Math.pow(2.0, bps) - 1);\r\n      var strBytes = stream.getBytes((length * bps + 7) / 8);\r\n      var strIdx = 0;\r\n\r\n      for (i = 0; i < length; i++) {\r\n        while (codeSize < bps) {\r\n          codeBuf <<= 8;\r\n          codeBuf |= strBytes[strIdx++];\r\n          codeSize += 8;\r\n        }\r\n\r\n        codeSize -= bps;\r\n        array[i] = (codeBuf >> codeSize) * sampleMul;\r\n        codeBuf &= (1 << codeSize) - 1;\r\n      }\r\n\r\n      return array;\r\n    },\r\n    getIR: function getIR(_ref2) {\r\n      var xref = _ref2.xref,\r\n          isEvalSupported = _ref2.isEvalSupported,\r\n          fn = _ref2.fn;\r\n      var dict = fn.dict;\r\n\r\n      if (!dict) {\r\n        dict = fn;\r\n      }\r\n\r\n      var types = [this.constructSampled, null, this.constructInterpolated, this.constructStiched, this.constructPostScript];\r\n      var typeNum = dict.get(\"FunctionType\");\r\n      var typeFn = types[typeNum];\r\n\r\n      if (!typeFn) {\r\n        throw new _util.FormatError(\"Unknown type of function\");\r\n      }\r\n\r\n      return typeFn.call(this, {\r\n        xref: xref,\r\n        isEvalSupported: isEvalSupported,\r\n        fn: fn,\r\n        dict: dict\r\n      });\r\n    },\r\n    fromIR: function fromIR(_ref3) {\r\n      var xref = _ref3.xref,\r\n          isEvalSupported = _ref3.isEvalSupported,\r\n          IR = _ref3.IR;\r\n      var type = IR[0];\r\n\r\n      switch (type) {\r\n        case CONSTRUCT_SAMPLED:\r\n          return this.constructSampledFromIR({\r\n            xref: xref,\r\n            isEvalSupported: isEvalSupported,\r\n            IR: IR\r\n          });\r\n\r\n        case CONSTRUCT_INTERPOLATED:\r\n          return this.constructInterpolatedFromIR({\r\n            xref: xref,\r\n            isEvalSupported: isEvalSupported,\r\n            IR: IR\r\n          });\r\n\r\n        case CONSTRUCT_STICHED:\r\n          return this.constructStichedFromIR({\r\n            xref: xref,\r\n            isEvalSupported: isEvalSupported,\r\n            IR: IR\r\n          });\r\n\r\n        default:\r\n          return this.constructPostScriptFromIR({\r\n            xref: xref,\r\n            isEvalSupported: isEvalSupported,\r\n            IR: IR\r\n          });\r\n      }\r\n    },\r\n    parse: function parse(_ref4) {\r\n      var xref = _ref4.xref,\r\n          isEvalSupported = _ref4.isEvalSupported,\r\n          fn = _ref4.fn;\r\n      var IR = this.getIR({\r\n        xref: xref,\r\n        isEvalSupported: isEvalSupported,\r\n        fn: fn\r\n      });\r\n      return this.fromIR({\r\n        xref: xref,\r\n        isEvalSupported: isEvalSupported,\r\n        IR: IR\r\n      });\r\n    },\r\n    parseArray: function parseArray(_ref5) {\r\n      var xref = _ref5.xref,\r\n          isEvalSupported = _ref5.isEvalSupported,\r\n          fnObj = _ref5.fnObj;\r\n\r\n      if (!Array.isArray(fnObj)) {\r\n        return this.parse({\r\n          xref: xref,\r\n          isEvalSupported: isEvalSupported,\r\n          fn: fnObj\r\n        });\r\n      }\r\n\r\n      var fnArray = [];\r\n\r\n      for (var j = 0, jj = fnObj.length; j < jj; j++) {\r\n        fnArray.push(this.parse({\r\n          xref: xref,\r\n          isEvalSupported: isEvalSupported,\r\n          fn: xref.fetchIfRef(fnObj[j])\r\n        }));\r\n      }\r\n\r\n      return function (src, srcOffset, dest, destOffset) {\r\n        for (var i = 0, ii = fnArray.length; i < ii; i++) {\r\n          fnArray[i](src, srcOffset, dest, destOffset + i);\r\n        }\r\n      };\r\n    },\r\n    constructSampled: function constructSampled(_ref6) {\r\n      var xref = _ref6.xref,\r\n          isEvalSupported = _ref6.isEvalSupported,\r\n          fn = _ref6.fn,\r\n          dict = _ref6.dict;\r\n\r\n      function toMultiArray(arr) {\r\n        var inputLength = arr.length;\r\n        var out = [];\r\n        var index = 0;\r\n\r\n        for (var i = 0; i < inputLength; i += 2) {\r\n          out[index] = [arr[i], arr[i + 1]];\r\n          ++index;\r\n        }\r\n\r\n        return out;\r\n      }\r\n\r\n      var domain = toNumberArray(dict.getArray(\"Domain\"));\r\n      var range = toNumberArray(dict.getArray(\"Range\"));\r\n\r\n      if (!domain || !range) {\r\n        throw new _util.FormatError(\"No domain or range\");\r\n      }\r\n\r\n      var inputSize = domain.length / 2;\r\n      var outputSize = range.length / 2;\r\n      domain = toMultiArray(domain);\r\n      range = toMultiArray(range);\r\n      var size = toNumberArray(dict.getArray(\"Size\"));\r\n      var bps = dict.get(\"BitsPerSample\");\r\n      var order = dict.get(\"Order\") || 1;\r\n\r\n      if (order !== 1) {\r\n        (0, _util.info)(\"No support for cubic spline interpolation: \" + order);\r\n      }\r\n\r\n      var encode = toNumberArray(dict.getArray(\"Encode\"));\r\n\r\n      if (!encode) {\r\n        encode = [];\r\n\r\n        for (var i = 0; i < inputSize; ++i) {\r\n          encode.push([0, size[i] - 1]);\r\n        }\r\n      } else {\r\n        encode = toMultiArray(encode);\r\n      }\r\n\r\n      var decode = toNumberArray(dict.getArray(\"Decode\"));\r\n\r\n      if (!decode) {\r\n        decode = range;\r\n      } else {\r\n        decode = toMultiArray(decode);\r\n      }\r\n\r\n      var samples = this.getSampleArray(size, outputSize, bps, fn);\r\n      return [CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size, outputSize, Math.pow(2, bps) - 1, range];\r\n    },\r\n    constructSampledFromIR: function constructSampledFromIR(_ref7) {\r\n      var xref = _ref7.xref,\r\n          isEvalSupported = _ref7.isEvalSupported,\r\n          IR = _ref7.IR;\r\n\r\n      function interpolate(x, xmin, xmax, ymin, ymax) {\r\n        return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin));\r\n      }\r\n\r\n      return function constructSampledFromIRResult(src, srcOffset, dest, destOffset) {\r\n        var m = IR[1];\r\n        var domain = IR[2];\r\n        var encode = IR[3];\r\n        var decode = IR[4];\r\n        var samples = IR[5];\r\n        var size = IR[6];\r\n        var n = IR[7];\r\n        var range = IR[9];\r\n        var cubeVertices = 1 << m;\r\n        var cubeN = new Float64Array(cubeVertices);\r\n        var cubeVertex = new Uint32Array(cubeVertices);\r\n        var i, j;\r\n\r\n        for (j = 0; j < cubeVertices; j++) {\r\n          cubeN[j] = 1;\r\n        }\r\n\r\n        var k = n,\r\n            pos = 1;\r\n\r\n        for (i = 0; i < m; ++i) {\r\n          var domain_2i = domain[i][0];\r\n          var domain_2i_1 = domain[i][1];\r\n          var xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1);\r\n          var e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]);\r\n          var size_i = size[i];\r\n          e = Math.min(Math.max(e, 0), size_i - 1);\r\n          var e0 = e < size_i - 1 ? Math.floor(e) : e - 1;\r\n          var n0 = e0 + 1 - e;\r\n          var n1 = e - e0;\r\n          var offset0 = e0 * k;\r\n          var offset1 = offset0 + k;\r\n\r\n          for (j = 0; j < cubeVertices; j++) {\r\n            if (j & pos) {\r\n              cubeN[j] *= n1;\r\n              cubeVertex[j] += offset1;\r\n            } else {\r\n              cubeN[j] *= n0;\r\n              cubeVertex[j] += offset0;\r\n            }\r\n          }\r\n\r\n          k *= size_i;\r\n          pos <<= 1;\r\n        }\r\n\r\n        for (j = 0; j < n; ++j) {\r\n          var rj = 0;\r\n\r\n          for (i = 0; i < cubeVertices; i++) {\r\n            rj += samples[cubeVertex[i] + j] * cubeN[i];\r\n          }\r\n\r\n          rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);\r\n          dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]);\r\n        }\r\n      };\r\n    },\r\n    constructInterpolated: function constructInterpolated(_ref8) {\r\n      var xref = _ref8.xref,\r\n          isEvalSupported = _ref8.isEvalSupported,\r\n          fn = _ref8.fn,\r\n          dict = _ref8.dict;\r\n      var c0 = toNumberArray(dict.getArray(\"C0\")) || [0];\r\n      var c1 = toNumberArray(dict.getArray(\"C1\")) || [1];\r\n      var n = dict.get(\"N\");\r\n      var length = c0.length;\r\n      var diff = [];\r\n\r\n      for (var i = 0; i < length; ++i) {\r\n        diff.push(c1[i] - c0[i]);\r\n      }\r\n\r\n      return [CONSTRUCT_INTERPOLATED, c0, diff, n];\r\n    },\r\n    constructInterpolatedFromIR: function constructInterpolatedFromIR(_ref9) {\r\n      var xref = _ref9.xref,\r\n          isEvalSupported = _ref9.isEvalSupported,\r\n          IR = _ref9.IR;\r\n      var c0 = IR[1];\r\n      var diff = IR[2];\r\n      var n = IR[3];\r\n      var length = diff.length;\r\n      return function constructInterpolatedFromIRResult(src, srcOffset, dest, destOffset) {\r\n        var x = n === 1 ? src[srcOffset] : Math.pow(src[srcOffset], n);\r\n\r\n        for (var j = 0; j < length; ++j) {\r\n          dest[destOffset + j] = c0[j] + x * diff[j];\r\n        }\r\n      };\r\n    },\r\n    constructStiched: function constructStiched(_ref10) {\r\n      var xref = _ref10.xref,\r\n          isEvalSupported = _ref10.isEvalSupported,\r\n          fn = _ref10.fn,\r\n          dict = _ref10.dict;\r\n      var domain = toNumberArray(dict.getArray(\"Domain\"));\r\n\r\n      if (!domain) {\r\n        throw new _util.FormatError(\"No domain\");\r\n      }\r\n\r\n      var inputSize = domain.length / 2;\r\n\r\n      if (inputSize !== 1) {\r\n        throw new _util.FormatError(\"Bad domain for stiched function\");\r\n      }\r\n\r\n      var fnRefs = dict.get(\"Functions\");\r\n      var fns = [];\r\n\r\n      for (var i = 0, ii = fnRefs.length; i < ii; ++i) {\r\n        fns.push(this.parse({\r\n          xref: xref,\r\n          isEvalSupported: isEvalSupported,\r\n          fn: xref.fetchIfRef(fnRefs[i])\r\n        }));\r\n      }\r\n\r\n      var bounds = toNumberArray(dict.getArray(\"Bounds\"));\r\n      var encode = toNumberArray(dict.getArray(\"Encode\"));\r\n      return [CONSTRUCT_STICHED, domain, bounds, encode, fns];\r\n    },\r\n    constructStichedFromIR: function constructStichedFromIR(_ref11) {\r\n      var xref = _ref11.xref,\r\n          isEvalSupported = _ref11.isEvalSupported,\r\n          IR = _ref11.IR;\r\n      var domain = IR[1];\r\n      var bounds = IR[2];\r\n      var encode = IR[3];\r\n      var fns = IR[4];\r\n      var tmpBuf = new Float32Array(1);\r\n      return function constructStichedFromIRResult(src, srcOffset, dest, destOffset) {\r\n        var clip = function constructStichedFromIRClip(v, min, max) {\r\n          if (v > max) {\r\n            v = max;\r\n          } else if (v < min) {\r\n            v = min;\r\n          }\r\n\r\n          return v;\r\n        };\r\n\r\n        var v = clip(src[srcOffset], domain[0], domain[1]);\r\n\r\n        for (var i = 0, ii = bounds.length; i < ii; ++i) {\r\n          if (v < bounds[i]) {\r\n            break;\r\n          }\r\n        }\r\n\r\n        var dmin = domain[0];\r\n\r\n        if (i > 0) {\r\n          dmin = bounds[i - 1];\r\n        }\r\n\r\n        var dmax = domain[1];\r\n\r\n        if (i < bounds.length) {\r\n          dmax = bounds[i];\r\n        }\r\n\r\n        var rmin = encode[2 * i];\r\n        var rmax = encode[2 * i + 1];\r\n        tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);\r\n        fns[i](tmpBuf, 0, dest, destOffset);\r\n      };\r\n    },\r\n    constructPostScript: function constructPostScript(_ref12) {\r\n      var xref = _ref12.xref,\r\n          isEvalSupported = _ref12.isEvalSupported,\r\n          fn = _ref12.fn,\r\n          dict = _ref12.dict;\r\n      var domain = toNumberArray(dict.getArray(\"Domain\"));\r\n      var range = toNumberArray(dict.getArray(\"Range\"));\r\n\r\n      if (!domain) {\r\n        throw new _util.FormatError(\"No domain.\");\r\n      }\r\n\r\n      if (!range) {\r\n        throw new _util.FormatError(\"No range.\");\r\n      }\r\n\r\n      var lexer = new _ps_parser.PostScriptLexer(fn);\r\n      var parser = new _ps_parser.PostScriptParser(lexer);\r\n      var code = parser.parse();\r\n      return [CONSTRUCT_POSTSCRIPT, domain, range, code];\r\n    },\r\n    constructPostScriptFromIR: function constructPostScriptFromIR(_ref13) {\r\n      var xref = _ref13.xref,\r\n          isEvalSupported = _ref13.isEvalSupported,\r\n          IR = _ref13.IR;\r\n      var domain = IR[1];\r\n      var range = IR[2];\r\n      var code = IR[3];\r\n\r\n      if (isEvalSupported && _util.IsEvalSupportedCached.value) {\r\n        var compiled = new PostScriptCompiler().compile(code, domain, range);\r\n\r\n        if (compiled) {\r\n          return new Function(\"src\", \"srcOffset\", \"dest\", \"destOffset\", compiled);\r\n        }\r\n      }\r\n\r\n      (0, _util.info)(\"Unable to compile PS function\");\r\n      var numOutputs = range.length >> 1;\r\n      var numInputs = domain.length >> 1;\r\n      var evaluator = new PostScriptEvaluator(code);\r\n      var cache = Object.create(null);\r\n      var MAX_CACHE_SIZE = 2048 * 4;\r\n      var cache_available = MAX_CACHE_SIZE;\r\n      var tmpBuf = new Float32Array(numInputs);\r\n      return function constructPostScriptFromIRResult(src, srcOffset, dest, destOffset) {\r\n        var i, value;\r\n        var key = \"\";\r\n        var input = tmpBuf;\r\n\r\n        for (i = 0; i < numInputs; i++) {\r\n          value = src[srcOffset + i];\r\n          input[i] = value;\r\n          key += value + \"_\";\r\n        }\r\n\r\n        var cachedValue = cache[key];\r\n\r\n        if (cachedValue !== undefined) {\r\n          dest.set(cachedValue, destOffset);\r\n          return;\r\n        }\r\n\r\n        var output = new Float32Array(numOutputs);\r\n        var stack = evaluator.execute(input);\r\n        var stackIndex = stack.length - numOutputs;\r\n\r\n        for (i = 0; i < numOutputs; i++) {\r\n          value = stack[stackIndex + i];\r\n          var bound = range[i * 2];\r\n\r\n          if (value < bound) {\r\n            value = bound;\r\n          } else {\r\n            bound = range[i * 2 + 1];\r\n\r\n            if (value > bound) {\r\n              value = bound;\r\n            }\r\n          }\r\n\r\n          output[i] = value;\r\n        }\r\n\r\n        if (cache_available > 0) {\r\n          cache_available--;\r\n          cache[key] = output;\r\n        }\r\n\r\n        dest.set(output, destOffset);\r\n      };\r\n    }\r\n  };\r\n}();\r\n\r\nfunction isPDFFunction(v) {\r\n  var fnDict;\r\n\r\n  if (_typeof(v) !== \"object\") {\r\n    return false;\r\n  } else if ((0, _primitives.isDict)(v)) {\r\n    fnDict = v;\r\n  } else if ((0, _primitives.isStream)(v)) {\r\n    fnDict = v.dict;\r\n  } else {\r\n    return false;\r\n  }\r\n\r\n  return fnDict.has(\"FunctionType\");\r\n}\r\n\r\nvar PostScriptStack = function PostScriptStackClosure() {\r\n  var MAX_STACK_SIZE = 100;\r\n\r\n  function PostScriptStack(initialStack) {\r\n    this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0);\r\n  }\r\n\r\n  PostScriptStack.prototype = {\r\n    push: function PostScriptStack_push(value) {\r\n      if (this.stack.length >= MAX_STACK_SIZE) {\r\n        throw new Error(\"PostScript function stack overflow.\");\r\n      }\r\n\r\n      this.stack.push(value);\r\n    },\r\n    pop: function PostScriptStack_pop() {\r\n      if (this.stack.length <= 0) {\r\n        throw new Error(\"PostScript function stack underflow.\");\r\n      }\r\n\r\n      return this.stack.pop();\r\n    },\r\n    copy: function PostScriptStack_copy(n) {\r\n      if (this.stack.length + n >= MAX_STACK_SIZE) {\r\n        throw new Error(\"PostScript function stack overflow.\");\r\n      }\r\n\r\n      var stack = this.stack;\r\n\r\n      for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) {\r\n        stack.push(stack[i]);\r\n      }\r\n    },\r\n    index: function PostScriptStack_index(n) {\r\n      this.push(this.stack[this.stack.length - n - 1]);\r\n    },\r\n    roll: function PostScriptStack_roll(n, p) {\r\n      var stack = this.stack;\r\n      var l = stack.length - n;\r\n      var r = stack.length - 1,\r\n          c = l + (p - Math.floor(p / n) * n),\r\n          i,\r\n          j,\r\n          t;\r\n\r\n      for (i = l, j = r; i < j; i++, j--) {\r\n        t = stack[i];\r\n        stack[i] = stack[j];\r\n        stack[j] = t;\r\n      }\r\n\r\n      for (i = l, j = c - 1; i < j; i++, j--) {\r\n        t = stack[i];\r\n        stack[i] = stack[j];\r\n        stack[j] = t;\r\n      }\r\n\r\n      for (i = c, j = r; i < j; i++, j--) {\r\n        t = stack[i];\r\n        stack[i] = stack[j];\r\n        stack[j] = t;\r\n      }\r\n    }\r\n  };\r\n  return PostScriptStack;\r\n}();\r\n\r\nvar PostScriptEvaluator = function PostScriptEvaluatorClosure() {\r\n  function PostScriptEvaluator(operators) {\r\n    this.operators = operators;\r\n  }\r\n\r\n  PostScriptEvaluator.prototype = {\r\n    execute: function PostScriptEvaluator_execute(initialStack) {\r\n      var stack = new PostScriptStack(initialStack);\r\n      var counter = 0;\r\n      var operators = this.operators;\r\n      var length = operators.length;\r\n      var operator, a, b;\r\n\r\n      while (counter < length) {\r\n        operator = operators[counter++];\r\n\r\n        if (typeof operator === \"number\") {\r\n          stack.push(operator);\r\n          continue;\r\n        }\r\n\r\n        switch (operator) {\r\n          case \"jz\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n\r\n            if (!a) {\r\n              counter = b;\r\n            }\r\n\r\n            break;\r\n\r\n          case \"j\":\r\n            a = stack.pop();\r\n            counter = a;\r\n            break;\r\n\r\n          case \"abs\":\r\n            a = stack.pop();\r\n            stack.push(Math.abs(a));\r\n            break;\r\n\r\n          case \"add\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.push(a + b);\r\n            break;\r\n\r\n          case \"and\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n\r\n            if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {\r\n              stack.push(a && b);\r\n            } else {\r\n              stack.push(a & b);\r\n            }\r\n\r\n            break;\r\n\r\n          case \"atan\":\r\n            a = stack.pop();\r\n            stack.push(Math.atan(a));\r\n            break;\r\n\r\n          case \"bitshift\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n\r\n            if (a > 0) {\r\n              stack.push(a << b);\r\n            } else {\r\n              stack.push(a >> b);\r\n            }\r\n\r\n            break;\r\n\r\n          case \"ceiling\":\r\n            a = stack.pop();\r\n            stack.push(Math.ceil(a));\r\n            break;\r\n\r\n          case \"copy\":\r\n            a = stack.pop();\r\n            stack.copy(a);\r\n            break;\r\n\r\n          case \"cos\":\r\n            a = stack.pop();\r\n            stack.push(Math.cos(a));\r\n            break;\r\n\r\n          case \"cvi\":\r\n            a = stack.pop() | 0;\r\n            stack.push(a);\r\n            break;\r\n\r\n          case \"cvr\":\r\n            break;\r\n\r\n          case \"div\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.push(a / b);\r\n            break;\r\n\r\n          case \"dup\":\r\n            stack.copy(1);\r\n            break;\r\n\r\n          case \"eq\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.push(a === b);\r\n            break;\r\n\r\n          case \"exch\":\r\n            stack.roll(2, 1);\r\n            break;\r\n\r\n          case \"exp\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.push(Math.pow(a, b));\r\n            break;\r\n\r\n          case \"false\":\r\n            stack.push(false);\r\n            break;\r\n\r\n          case \"floor\":\r\n            a = stack.pop();\r\n            stack.push(Math.floor(a));\r\n            break;\r\n\r\n          case \"ge\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.push(a >= b);\r\n            break;\r\n\r\n          case \"gt\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.push(a > b);\r\n            break;\r\n\r\n          case \"idiv\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.push(a / b | 0);\r\n            break;\r\n\r\n          case \"index\":\r\n            a = stack.pop();\r\n            stack.index(a);\r\n            break;\r\n\r\n          case \"le\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.push(a <= b);\r\n            break;\r\n\r\n          case \"ln\":\r\n            a = stack.pop();\r\n            stack.push(Math.log(a));\r\n            break;\r\n\r\n          case \"log\":\r\n            a = stack.pop();\r\n            stack.push(Math.log(a) / Math.LN10);\r\n            break;\r\n\r\n          case \"lt\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.push(a < b);\r\n            break;\r\n\r\n          case \"mod\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.push(a % b);\r\n            break;\r\n\r\n          case \"mul\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.push(a * b);\r\n            break;\r\n\r\n          case \"ne\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.push(a !== b);\r\n            break;\r\n\r\n          case \"neg\":\r\n            a = stack.pop();\r\n            stack.push(-a);\r\n            break;\r\n\r\n          case \"not\":\r\n            a = stack.pop();\r\n\r\n            if ((0, _util.isBool)(a)) {\r\n              stack.push(!a);\r\n            } else {\r\n              stack.push(~a);\r\n            }\r\n\r\n            break;\r\n\r\n          case \"or\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n\r\n            if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {\r\n              stack.push(a || b);\r\n            } else {\r\n              stack.push(a | b);\r\n            }\r\n\r\n            break;\r\n\r\n          case \"pop\":\r\n            stack.pop();\r\n            break;\r\n\r\n          case \"roll\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.roll(a, b);\r\n            break;\r\n\r\n          case \"round\":\r\n            a = stack.pop();\r\n            stack.push(Math.round(a));\r\n            break;\r\n\r\n          case \"sin\":\r\n            a = stack.pop();\r\n            stack.push(Math.sin(a));\r\n            break;\r\n\r\n          case \"sqrt\":\r\n            a = stack.pop();\r\n            stack.push(Math.sqrt(a));\r\n            break;\r\n\r\n          case \"sub\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n            stack.push(a - b);\r\n            break;\r\n\r\n          case \"true\":\r\n            stack.push(true);\r\n            break;\r\n\r\n          case \"truncate\":\r\n            a = stack.pop();\r\n            a = a < 0 ? Math.ceil(a) : Math.floor(a);\r\n            stack.push(a);\r\n            break;\r\n\r\n          case \"xor\":\r\n            b = stack.pop();\r\n            a = stack.pop();\r\n\r\n            if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {\r\n              stack.push(a !== b);\r\n            } else {\r\n              stack.push(a ^ b);\r\n            }\r\n\r\n            break;\r\n\r\n          default:\r\n            throw new _util.FormatError(\"Unknown operator \".concat(operator));\r\n        }\r\n      }\r\n\r\n      return stack.stack;\r\n    }\r\n  };\r\n  return PostScriptEvaluator;\r\n}();\r\n\r\nexports.PostScriptEvaluator = PostScriptEvaluator;\r\n\r\nvar PostScriptCompiler = function PostScriptCompilerClosure() {\r\n  function AstNode(type) {\r\n    this.type = type;\r\n  }\r\n\r\n  AstNode.prototype.visit = function (visitor) {\r\n    (0, _util.unreachable)(\"abstract method\");\r\n  };\r\n\r\n  function AstArgument(index, min, max) {\r\n    AstNode.call(this, \"args\");\r\n    this.index = index;\r\n    this.min = min;\r\n    this.max = max;\r\n  }\r\n\r\n  AstArgument.prototype = Object.create(AstNode.prototype);\r\n\r\n  AstArgument.prototype.visit = function (visitor) {\r\n    visitor.visitArgument(this);\r\n  };\r\n\r\n  function AstLiteral(number) {\r\n    AstNode.call(this, \"literal\");\r\n    this.number = number;\r\n    this.min = number;\r\n    this.max = number;\r\n  }\r\n\r\n  AstLiteral.prototype = Object.create(AstNode.prototype);\r\n\r\n  AstLiteral.prototype.visit = function (visitor) {\r\n    visitor.visitLiteral(this);\r\n  };\r\n\r\n  function AstBinaryOperation(op, arg1, arg2, min, max) {\r\n    AstNode.call(this, \"binary\");\r\n    this.op = op;\r\n    this.arg1 = arg1;\r\n    this.arg2 = arg2;\r\n    this.min = min;\r\n    this.max = max;\r\n  }\r\n\r\n  AstBinaryOperation.prototype = Object.create(AstNode.prototype);\r\n\r\n  AstBinaryOperation.prototype.visit = function (visitor) {\r\n    visitor.visitBinaryOperation(this);\r\n  };\r\n\r\n  function AstMin(arg, max) {\r\n    AstNode.call(this, \"max\");\r\n    this.arg = arg;\r\n    this.min = arg.min;\r\n    this.max = max;\r\n  }\r\n\r\n  AstMin.prototype = Object.create(AstNode.prototype);\r\n\r\n  AstMin.prototype.visit = function (visitor) {\r\n    visitor.visitMin(this);\r\n  };\r\n\r\n  function AstVariable(index, min, max) {\r\n    AstNode.call(this, \"var\");\r\n    this.index = index;\r\n    this.min = min;\r\n    this.max = max;\r\n  }\r\n\r\n  AstVariable.prototype = Object.create(AstNode.prototype);\r\n\r\n  AstVariable.prototype.visit = function (visitor) {\r\n    visitor.visitVariable(this);\r\n  };\r\n\r\n  function AstVariableDefinition(variable, arg) {\r\n    AstNode.call(this, \"definition\");\r\n    this.variable = variable;\r\n    this.arg = arg;\r\n  }\r\n\r\n  AstVariableDefinition.prototype = Object.create(AstNode.prototype);\r\n\r\n  AstVariableDefinition.prototype.visit = function (visitor) {\r\n    visitor.visitVariableDefinition(this);\r\n  };\r\n\r\n  function ExpressionBuilderVisitor() {\r\n    this.parts = [];\r\n  }\r\n\r\n  ExpressionBuilderVisitor.prototype = {\r\n    visitArgument: function visitArgument(arg) {\r\n      this.parts.push(\"Math.max(\", arg.min, \", Math.min(\", arg.max, \", src[srcOffset + \", arg.index, \"]))\");\r\n    },\r\n    visitVariable: function visitVariable(variable) {\r\n      this.parts.push(\"v\", variable.index);\r\n    },\r\n    visitLiteral: function visitLiteral(literal) {\r\n      this.parts.push(literal.number);\r\n    },\r\n    visitBinaryOperation: function visitBinaryOperation(operation) {\r\n      this.parts.push(\"(\");\r\n      operation.arg1.visit(this);\r\n      this.parts.push(\" \", operation.op, \" \");\r\n      operation.arg2.visit(this);\r\n      this.parts.push(\")\");\r\n    },\r\n    visitVariableDefinition: function visitVariableDefinition(definition) {\r\n      this.parts.push(\"var \");\r\n      definition.variable.visit(this);\r\n      this.parts.push(\" = \");\r\n      definition.arg.visit(this);\r\n      this.parts.push(\";\");\r\n    },\r\n    visitMin: function visitMin(max) {\r\n      this.parts.push(\"Math.min(\");\r\n      max.arg.visit(this);\r\n      this.parts.push(\", \", max.max, \")\");\r\n    },\r\n    toString: function toString() {\r\n      return this.parts.join(\"\");\r\n    }\r\n  };\r\n\r\n  function buildAddOperation(num1, num2) {\r\n    if (num2.type === \"literal\" && num2.number === 0) {\r\n      return num1;\r\n    }\r\n\r\n    if (num1.type === \"literal\" && num1.number === 0) {\r\n      return num2;\r\n    }\r\n\r\n    if (num2.type === \"literal\" && num1.type === \"literal\") {\r\n      return new AstLiteral(num1.number + num2.number);\r\n    }\r\n\r\n    return new AstBinaryOperation(\"+\", num1, num2, num1.min + num2.min, num1.max + num2.max);\r\n  }\r\n\r\n  function buildMulOperation(num1, num2) {\r\n    if (num2.type === \"literal\") {\r\n      if (num2.number === 0) {\r\n        return new AstLiteral(0);\r\n      } else if (num2.number === 1) {\r\n        return num1;\r\n      } else if (num1.type === \"literal\") {\r\n        return new AstLiteral(num1.number * num2.number);\r\n      }\r\n    }\r\n\r\n    if (num1.type === \"literal\") {\r\n      if (num1.number === 0) {\r\n        return new AstLiteral(0);\r\n      } else if (num1.number === 1) {\r\n        return num2;\r\n      }\r\n    }\r\n\r\n    var min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);\r\n    var max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);\r\n    return new AstBinaryOperation(\"*\", num1, num2, min, max);\r\n  }\r\n\r\n  function buildSubOperation(num1, num2) {\r\n    if (num2.type === \"literal\") {\r\n      if (num2.number === 0) {\r\n        return num1;\r\n      } else if (num1.type === \"literal\") {\r\n        return new AstLiteral(num1.number - num2.number);\r\n      }\r\n    }\r\n\r\n    if (num2.type === \"binary\" && num2.op === \"-\" && num1.type === \"literal\" && num1.number === 1 && num2.arg1.type === \"literal\" && num2.arg1.number === 1) {\r\n      return num2.arg2;\r\n    }\r\n\r\n    return new AstBinaryOperation(\"-\", num1, num2, num1.min - num2.max, num1.max - num2.min);\r\n  }\r\n\r\n  function buildMinOperation(num1, max) {\r\n    if (num1.min >= max) {\r\n      return new AstLiteral(max);\r\n    } else if (num1.max <= max) {\r\n      return num1;\r\n    }\r\n\r\n    return new AstMin(num1, max);\r\n  }\r\n\r\n  function PostScriptCompiler() {}\r\n\r\n  PostScriptCompiler.prototype = {\r\n    compile: function PostScriptCompiler_compile(code, domain, range) {\r\n      var stack = [];\r\n      var instructions = [];\r\n      var inputSize = domain.length >> 1,\r\n          outputSize = range.length >> 1;\r\n      var lastRegister = 0;\r\n      var n, j;\r\n      var num1, num2, ast1, ast2, tmpVar, item;\r\n\r\n      for (var i = 0; i < inputSize; i++) {\r\n        stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1]));\r\n      }\r\n\r\n      for (var _i = 0, ii = code.length; _i < ii; _i++) {\r\n        item = code[_i];\r\n\r\n        if (typeof item === \"number\") {\r\n          stack.push(new AstLiteral(item));\r\n          continue;\r\n        }\r\n\r\n        switch (item) {\r\n          case \"add\":\r\n            if (stack.length < 2) {\r\n              return null;\r\n            }\r\n\r\n            num2 = stack.pop();\r\n            num1 = stack.pop();\r\n            stack.push(buildAddOperation(num1, num2));\r\n            break;\r\n\r\n          case \"cvr\":\r\n            if (stack.length < 1) {\r\n              return null;\r\n            }\r\n\r\n            break;\r\n\r\n          case \"mul\":\r\n            if (stack.length < 2) {\r\n              return null;\r\n            }\r\n\r\n            num2 = stack.pop();\r\n            num1 = stack.pop();\r\n            stack.push(buildMulOperation(num1, num2));\r\n            break;\r\n\r\n          case \"sub\":\r\n            if (stack.length < 2) {\r\n              return null;\r\n            }\r\n\r\n            num2 = stack.pop();\r\n            num1 = stack.pop();\r\n            stack.push(buildSubOperation(num1, num2));\r\n            break;\r\n\r\n          case \"exch\":\r\n            if (stack.length < 2) {\r\n              return null;\r\n            }\r\n\r\n            ast1 = stack.pop();\r\n            ast2 = stack.pop();\r\n            stack.push(ast1, ast2);\r\n            break;\r\n\r\n          case \"pop\":\r\n            if (stack.length < 1) {\r\n              return null;\r\n            }\r\n\r\n            stack.pop();\r\n            break;\r\n\r\n          case \"index\":\r\n            if (stack.length < 1) {\r\n              return null;\r\n            }\r\n\r\n            num1 = stack.pop();\r\n\r\n            if (num1.type !== \"literal\") {\r\n              return null;\r\n            }\r\n\r\n            n = num1.number;\r\n\r\n            if (n < 0 || !Number.isInteger(n) || stack.length < n) {\r\n              return null;\r\n            }\r\n\r\n            ast1 = stack[stack.length - n - 1];\r\n\r\n            if (ast1.type === \"literal\" || ast1.type === \"var\") {\r\n              stack.push(ast1);\r\n              break;\r\n            }\r\n\r\n            tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);\r\n            stack[stack.length - n - 1] = tmpVar;\r\n            stack.push(tmpVar);\r\n            instructions.push(new AstVariableDefinition(tmpVar, ast1));\r\n            break;\r\n\r\n          case \"dup\":\r\n            if (stack.length < 1) {\r\n              return null;\r\n            }\r\n\r\n            if (typeof code[_i + 1] === \"number\" && code[_i + 2] === \"gt\" && code[_i + 3] === _i + 7 && code[_i + 4] === \"jz\" && code[_i + 5] === \"pop\" && code[_i + 6] === code[_i + 1]) {\r\n              num1 = stack.pop();\r\n              stack.push(buildMinOperation(num1, code[_i + 1]));\r\n              _i += 6;\r\n              break;\r\n            }\r\n\r\n            ast1 = stack[stack.length - 1];\r\n\r\n            if (ast1.type === \"literal\" || ast1.type === \"var\") {\r\n              stack.push(ast1);\r\n              break;\r\n            }\r\n\r\n            tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);\r\n            stack[stack.length - 1] = tmpVar;\r\n            stack.push(tmpVar);\r\n            instructions.push(new AstVariableDefinition(tmpVar, ast1));\r\n            break;\r\n\r\n          case \"roll\":\r\n            if (stack.length < 2) {\r\n              return null;\r\n            }\r\n\r\n            num2 = stack.pop();\r\n            num1 = stack.pop();\r\n\r\n            if (num2.type !== \"literal\" || num1.type !== \"literal\") {\r\n              return null;\r\n            }\r\n\r\n            j = num2.number;\r\n            n = num1.number;\r\n\r\n            if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) {\r\n              return null;\r\n            }\r\n\r\n            j = (j % n + n) % n;\r\n\r\n            if (j === 0) {\r\n              break;\r\n            }\r\n\r\n            Array.prototype.push.apply(stack, stack.splice(stack.length - n, n - j));\r\n            break;\r\n\r\n          default:\r\n            return null;\r\n        }\r\n      }\r\n\r\n      if (stack.length !== outputSize) {\r\n        return null;\r\n      }\r\n\r\n      var result = [];\r\n      instructions.forEach(function (instruction) {\r\n        var statementBuilder = new ExpressionBuilderVisitor();\r\n        instruction.visit(statementBuilder);\r\n        result.push(statementBuilder.toString());\r\n      });\r\n      stack.forEach(function (expr, i) {\r\n        var statementBuilder = new ExpressionBuilderVisitor();\r\n        expr.visit(statementBuilder);\r\n        var min = range[i * 2],\r\n            max = range[i * 2 + 1];\r\n        var out = [statementBuilder.toString()];\r\n\r\n        if (min > expr.min) {\r\n          out.unshift(\"Math.max(\", min, \", \");\r\n          out.push(\")\");\r\n        }\r\n\r\n        if (max < expr.max) {\r\n          out.unshift(\"Math.min(\", max, \", \");\r\n          out.push(\")\");\r\n        }\r\n\r\n        out.unshift(\"dest[destOffset + \", i, \"] = \");\r\n        out.push(\";\");\r\n        result.push(out.join(\"\"));\r\n      });\r\n      return result.join(\"\\n\");\r\n    }\r\n  };\r\n  return PostScriptCompiler;\r\n}();\r\n\r\nexports.PostScriptCompiler = PostScriptCompiler;\r\n\r\n/***/ }),\r\n/* 170 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PostScriptParser = exports.PostScriptLexer = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar PostScriptParser = /*#__PURE__*/function () {\r\n  function PostScriptParser(lexer) {\r\n    _classCallCheck(this, PostScriptParser);\r\n\r\n    this.lexer = lexer;\r\n    this.operators = [];\r\n    this.token = null;\r\n    this.prev = null;\r\n  }\r\n\r\n  _createClass(PostScriptParser, [{\r\n    key: \"nextToken\",\r\n    value: function nextToken() {\r\n      this.prev = this.token;\r\n      this.token = this.lexer.getToken();\r\n    }\r\n  }, {\r\n    key: \"accept\",\r\n    value: function accept(type) {\r\n      if (this.token.type === type) {\r\n        this.nextToken();\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    }\r\n  }, {\r\n    key: \"expect\",\r\n    value: function expect(type) {\r\n      if (this.accept(type)) {\r\n        return true;\r\n      }\r\n\r\n      throw new _util.FormatError(\"Unexpected symbol: found \".concat(this.token.type, \" expected \").concat(type, \".\"));\r\n    }\r\n  }, {\r\n    key: \"parse\",\r\n    value: function parse() {\r\n      this.nextToken();\r\n      this.expect(PostScriptTokenTypes.LBRACE);\r\n      this.parseBlock();\r\n      this.expect(PostScriptTokenTypes.RBRACE);\r\n      return this.operators;\r\n    }\r\n  }, {\r\n    key: \"parseBlock\",\r\n    value: function parseBlock() {\r\n      while (true) {\r\n        if (this.accept(PostScriptTokenTypes.NUMBER)) {\r\n          this.operators.push(this.prev.value);\r\n        } else if (this.accept(PostScriptTokenTypes.OPERATOR)) {\r\n          this.operators.push(this.prev.value);\r\n        } else if (this.accept(PostScriptTokenTypes.LBRACE)) {\r\n          this.parseCondition();\r\n        } else {\r\n          return;\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"parseCondition\",\r\n    value: function parseCondition() {\r\n      var conditionLocation = this.operators.length;\r\n      this.operators.push(null, null);\r\n      this.parseBlock();\r\n      this.expect(PostScriptTokenTypes.RBRACE);\r\n\r\n      if (this.accept(PostScriptTokenTypes.IF)) {\r\n        this.operators[conditionLocation] = this.operators.length;\r\n        this.operators[conditionLocation + 1] = \"jz\";\r\n      } else if (this.accept(PostScriptTokenTypes.LBRACE)) {\r\n        var jumpLocation = this.operators.length;\r\n        this.operators.push(null, null);\r\n        var endOfTrue = this.operators.length;\r\n        this.parseBlock();\r\n        this.expect(PostScriptTokenTypes.RBRACE);\r\n        this.expect(PostScriptTokenTypes.IFELSE);\r\n        this.operators[jumpLocation] = this.operators.length;\r\n        this.operators[jumpLocation + 1] = \"j\";\r\n        this.operators[conditionLocation] = endOfTrue;\r\n        this.operators[conditionLocation + 1] = \"jz\";\r\n      } else {\r\n        throw new _util.FormatError(\"PS Function: error parsing conditional.\");\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return PostScriptParser;\r\n}();\r\n\r\nexports.PostScriptParser = PostScriptParser;\r\nvar PostScriptTokenTypes = {\r\n  LBRACE: 0,\r\n  RBRACE: 1,\r\n  NUMBER: 2,\r\n  OPERATOR: 3,\r\n  IF: 4,\r\n  IFELSE: 5\r\n};\r\n\r\nvar PostScriptToken = function PostScriptTokenClosure() {\r\n  var opCache = Object.create(null);\r\n\r\n  var PostScriptToken = /*#__PURE__*/function () {\r\n    function PostScriptToken(type, value) {\r\n      _classCallCheck(this, PostScriptToken);\r\n\r\n      this.type = type;\r\n      this.value = value;\r\n    }\r\n\r\n    _createClass(PostScriptToken, null, [{\r\n      key: \"getOperator\",\r\n      value: function getOperator(op) {\r\n        var opValue = opCache[op];\r\n\r\n        if (opValue) {\r\n          return opValue;\r\n        }\r\n\r\n        return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);\r\n      }\r\n    }, {\r\n      key: \"LBRACE\",\r\n      get: function get() {\r\n        return (0, _util.shadow)(this, \"LBRACE\", new PostScriptToken(PostScriptTokenTypes.LBRACE, \"{\"));\r\n      }\r\n    }, {\r\n      key: \"RBRACE\",\r\n      get: function get() {\r\n        return (0, _util.shadow)(this, \"RBRACE\", new PostScriptToken(PostScriptTokenTypes.RBRACE, \"}\"));\r\n      }\r\n    }, {\r\n      key: \"IF\",\r\n      get: function get() {\r\n        return (0, _util.shadow)(this, \"IF\", new PostScriptToken(PostScriptTokenTypes.IF, \"IF\"));\r\n      }\r\n    }, {\r\n      key: \"IFELSE\",\r\n      get: function get() {\r\n        return (0, _util.shadow)(this, \"IFELSE\", new PostScriptToken(PostScriptTokenTypes.IFELSE, \"IFELSE\"));\r\n      }\r\n    }]);\r\n\r\n    return PostScriptToken;\r\n  }();\r\n\r\n  return PostScriptToken;\r\n}();\r\n\r\nvar PostScriptLexer = /*#__PURE__*/function () {\r\n  function PostScriptLexer(stream) {\r\n    _classCallCheck(this, PostScriptLexer);\r\n\r\n    this.stream = stream;\r\n    this.nextChar();\r\n    this.strBuf = [];\r\n  }\r\n\r\n  _createClass(PostScriptLexer, [{\r\n    key: \"nextChar\",\r\n    value: function nextChar() {\r\n      return this.currentChar = this.stream.getByte();\r\n    }\r\n  }, {\r\n    key: \"getToken\",\r\n    value: function getToken() {\r\n      var comment = false;\r\n      var ch = this.currentChar;\r\n\r\n      while (true) {\r\n        if (ch < 0) {\r\n          return _primitives.EOF;\r\n        }\r\n\r\n        if (comment) {\r\n          if (ch === 0x0a || ch === 0x0d) {\r\n            comment = false;\r\n          }\r\n        } else if (ch === 0x25) {\r\n          comment = true;\r\n        } else if (!(0, _core_utils.isWhiteSpace)(ch)) {\r\n          break;\r\n        }\r\n\r\n        ch = this.nextChar();\r\n      }\r\n\r\n      switch (ch | 0) {\r\n        case 0x30:\r\n        case 0x31:\r\n        case 0x32:\r\n        case 0x33:\r\n        case 0x34:\r\n        case 0x35:\r\n        case 0x36:\r\n        case 0x37:\r\n        case 0x38:\r\n        case 0x39:\r\n        case 0x2b:\r\n        case 0x2d:\r\n        case 0x2e:\r\n          return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber());\r\n\r\n        case 0x7b:\r\n          this.nextChar();\r\n          return PostScriptToken.LBRACE;\r\n\r\n        case 0x7d:\r\n          this.nextChar();\r\n          return PostScriptToken.RBRACE;\r\n      }\r\n\r\n      var strBuf = this.strBuf;\r\n      strBuf.length = 0;\r\n      strBuf[0] = String.fromCharCode(ch);\r\n\r\n      while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5a || ch >= 0x61 && ch <= 0x7a)) {\r\n        strBuf.push(String.fromCharCode(ch));\r\n      }\r\n\r\n      var str = strBuf.join(\"\");\r\n\r\n      switch (str.toLowerCase()) {\r\n        case \"if\":\r\n          return PostScriptToken.IF;\r\n\r\n        case \"ifelse\":\r\n          return PostScriptToken.IFELSE;\r\n\r\n        default:\r\n          return PostScriptToken.getOperator(str);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getNumber\",\r\n    value: function getNumber() {\r\n      var ch = this.currentChar;\r\n      var strBuf = this.strBuf;\r\n      strBuf.length = 0;\r\n      strBuf[0] = String.fromCharCode(ch);\r\n\r\n      while ((ch = this.nextChar()) >= 0) {\r\n        if (ch >= 0x30 && ch <= 0x39 || ch === 0x2d || ch === 0x2e) {\r\n          strBuf.push(String.fromCharCode(ch));\r\n        } else {\r\n          break;\r\n        }\r\n      }\r\n\r\n      var value = parseFloat(strBuf.join(\"\"));\r\n\r\n      if (isNaN(value)) {\r\n        throw new _util.FormatError(\"Invalid floating point number: \".concat(value));\r\n      }\r\n\r\n      return value;\r\n    }\r\n  }]);\r\n\r\n  return PostScriptLexer;\r\n}();\r\n\r\nexports.PostScriptLexer = PostScriptLexer;\r\n\r\n/***/ }),\r\n/* 171 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.bidi = bidi;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar baseTypes = [\"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"S\", \"B\", \"S\", \"WS\", \"B\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"B\", \"B\", \"B\", \"S\", \"WS\", \"ON\", \"ON\", \"ET\", \"ET\", \"ET\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"ES\", \"CS\", \"ES\", \"CS\", \"CS\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"CS\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"ON\", \"ON\", \"ON\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"B\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"BN\", \"CS\", \"ON\", \"ET\", \"ET\", \"ET\", \"ET\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"ON\", \"ON\", \"BN\", \"ON\", \"ON\", \"ET\", \"ET\", \"EN\", \"EN\", \"ON\", \"L\", \"ON\", \"ON\", \"ON\", \"EN\", \"L\", \"ON\", \"ON\", \"ON\", \"ON\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"ON\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\", \"L\"];\r\nvar arabicTypes = [\"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"ON\", \"ON\", \"AL\", \"ET\", \"ET\", \"AL\", \"CS\", \"AL\", \"ON\", \"ON\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AL\", \"AL\", \"\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"AN\", \"ET\", \"AN\", \"AN\", \"AL\", \"AL\", \"AL\", \"NSM\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AN\", \"ON\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AL\", \"AL\", \"NSM\", \"NSM\", \"ON\", \"NSM\", \"NSM\", \"NSM\", \"NSM\", \"AL\", \"AL\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"EN\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\", \"AL\"];\r\n\r\nfunction isOdd(i) {\r\n  return (i & 1) !== 0;\r\n}\r\n\r\nfunction isEven(i) {\r\n  return (i & 1) === 0;\r\n}\r\n\r\nfunction findUnequal(arr, start, value) {\r\n  for (var j = start, jj = arr.length; j < jj; ++j) {\r\n    if (arr[j] !== value) {\r\n      return j;\r\n    }\r\n  }\r\n\r\n  return j;\r\n}\r\n\r\nfunction setValues(arr, start, end, value) {\r\n  for (var j = start; j < end; ++j) {\r\n    arr[j] = value;\r\n  }\r\n}\r\n\r\nfunction reverseValues(arr, start, end) {\r\n  for (var i = start, j = end - 1; i < j; ++i, --j) {\r\n    var temp = arr[i];\r\n    arr[i] = arr[j];\r\n    arr[j] = temp;\r\n  }\r\n}\r\n\r\nfunction createBidiText(str, isLTR) {\r\n  var vertical = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n  var dir = \"ltr\";\r\n\r\n  if (vertical) {\r\n    dir = \"ttb\";\r\n  } else if (!isLTR) {\r\n    dir = \"rtl\";\r\n  }\r\n\r\n  return {\r\n    str: str,\r\n    dir: dir\r\n  };\r\n}\r\n\r\nvar chars = [];\r\nvar types = [];\r\n\r\nfunction bidi(str, startLevel, vertical) {\r\n  var isLTR = true;\r\n  var strLength = str.length;\r\n\r\n  if (strLength === 0 || vertical) {\r\n    return createBidiText(str, isLTR, vertical);\r\n  }\r\n\r\n  chars.length = strLength;\r\n  types.length = strLength;\r\n  var numBidi = 0;\r\n  var i, ii;\r\n\r\n  for (i = 0; i < strLength; ++i) {\r\n    chars[i] = str.charAt(i);\r\n    var charCode = str.charCodeAt(i);\r\n    var charType = \"L\";\r\n\r\n    if (charCode <= 0x00ff) {\r\n      charType = baseTypes[charCode];\r\n    } else if (0x0590 <= charCode && charCode <= 0x05f4) {\r\n      charType = \"R\";\r\n    } else if (0x0600 <= charCode && charCode <= 0x06ff) {\r\n      charType = arabicTypes[charCode & 0xff];\r\n\r\n      if (!charType) {\r\n        (0, _util.warn)(\"Bidi: invalid Unicode character \" + charCode.toString(16));\r\n      }\r\n    } else if (0x0700 <= charCode && charCode <= 0x08ac) {\r\n      charType = \"AL\";\r\n    }\r\n\r\n    if (charType === \"R\" || charType === \"AL\" || charType === \"AN\") {\r\n      numBidi++;\r\n    }\r\n\r\n    types[i] = charType;\r\n  }\r\n\r\n  if (numBidi === 0) {\r\n    isLTR = true;\r\n    return createBidiText(str, isLTR);\r\n  }\r\n\r\n  if (startLevel === -1) {\r\n    if (numBidi / strLength < 0.3) {\r\n      isLTR = true;\r\n      startLevel = 0;\r\n    } else {\r\n      isLTR = false;\r\n      startLevel = 1;\r\n    }\r\n  }\r\n\r\n  var levels = [];\r\n\r\n  for (i = 0; i < strLength; ++i) {\r\n    levels[i] = startLevel;\r\n  }\r\n\r\n  var e = isOdd(startLevel) ? \"R\" : \"L\";\r\n  var sor = e;\r\n  var eor = sor;\r\n  var lastType = sor;\r\n\r\n  for (i = 0; i < strLength; ++i) {\r\n    if (types[i] === \"NSM\") {\r\n      types[i] = lastType;\r\n    } else {\r\n      lastType = types[i];\r\n    }\r\n  }\r\n\r\n  lastType = sor;\r\n  var t;\r\n\r\n  for (i = 0; i < strLength; ++i) {\r\n    t = types[i];\r\n\r\n    if (t === \"EN\") {\r\n      types[i] = lastType === \"AL\" ? \"AN\" : \"EN\";\r\n    } else if (t === \"R\" || t === \"L\" || t === \"AL\") {\r\n      lastType = t;\r\n    }\r\n  }\r\n\r\n  for (i = 0; i < strLength; ++i) {\r\n    t = types[i];\r\n\r\n    if (t === \"AL\") {\r\n      types[i] = \"R\";\r\n    }\r\n  }\r\n\r\n  for (i = 1; i < strLength - 1; ++i) {\r\n    if (types[i] === \"ES\" && types[i - 1] === \"EN\" && types[i + 1] === \"EN\") {\r\n      types[i] = \"EN\";\r\n    }\r\n\r\n    if (types[i] === \"CS\" && (types[i - 1] === \"EN\" || types[i - 1] === \"AN\") && types[i + 1] === types[i - 1]) {\r\n      types[i] = types[i - 1];\r\n    }\r\n  }\r\n\r\n  for (i = 0; i < strLength; ++i) {\r\n    if (types[i] === \"EN\") {\r\n      var j;\r\n\r\n      for (j = i - 1; j >= 0; --j) {\r\n        if (types[j] !== \"ET\") {\r\n          break;\r\n        }\r\n\r\n        types[j] = \"EN\";\r\n      }\r\n\r\n      for (j = i + 1; j < strLength; ++j) {\r\n        if (types[j] !== \"ET\") {\r\n          break;\r\n        }\r\n\r\n        types[j] = \"EN\";\r\n      }\r\n    }\r\n  }\r\n\r\n  for (i = 0; i < strLength; ++i) {\r\n    t = types[i];\r\n\r\n    if (t === \"WS\" || t === \"ES\" || t === \"ET\" || t === \"CS\") {\r\n      types[i] = \"ON\";\r\n    }\r\n  }\r\n\r\n  lastType = sor;\r\n\r\n  for (i = 0; i < strLength; ++i) {\r\n    t = types[i];\r\n\r\n    if (t === \"EN\") {\r\n      types[i] = lastType === \"L\" ? \"L\" : \"EN\";\r\n    } else if (t === \"R\" || t === \"L\") {\r\n      lastType = t;\r\n    }\r\n  }\r\n\r\n  for (i = 0; i < strLength; ++i) {\r\n    if (types[i] === \"ON\") {\r\n      var end = findUnequal(types, i + 1, \"ON\");\r\n      var before = sor;\r\n\r\n      if (i > 0) {\r\n        before = types[i - 1];\r\n      }\r\n\r\n      var after = eor;\r\n\r\n      if (end + 1 < strLength) {\r\n        after = types[end + 1];\r\n      }\r\n\r\n      if (before !== \"L\") {\r\n        before = \"R\";\r\n      }\r\n\r\n      if (after !== \"L\") {\r\n        after = \"R\";\r\n      }\r\n\r\n      if (before === after) {\r\n        setValues(types, i, end, before);\r\n      }\r\n\r\n      i = end - 1;\r\n    }\r\n  }\r\n\r\n  for (i = 0; i < strLength; ++i) {\r\n    if (types[i] === \"ON\") {\r\n      types[i] = e;\r\n    }\r\n  }\r\n\r\n  for (i = 0; i < strLength; ++i) {\r\n    t = types[i];\r\n\r\n    if (isEven(levels[i])) {\r\n      if (t === \"R\") {\r\n        levels[i] += 1;\r\n      } else if (t === \"AN\" || t === \"EN\") {\r\n        levels[i] += 2;\r\n      }\r\n    } else {\r\n      if (t === \"L\" || t === \"AN\" || t === \"EN\") {\r\n        levels[i] += 1;\r\n      }\r\n    }\r\n  }\r\n\r\n  var highestLevel = -1;\r\n  var lowestOddLevel = 99;\r\n  var level;\r\n\r\n  for (i = 0, ii = levels.length; i < ii; ++i) {\r\n    level = levels[i];\r\n\r\n    if (highestLevel < level) {\r\n      highestLevel = level;\r\n    }\r\n\r\n    if (lowestOddLevel > level && isOdd(level)) {\r\n      lowestOddLevel = level;\r\n    }\r\n  }\r\n\r\n  for (level = highestLevel; level >= lowestOddLevel; --level) {\r\n    var start = -1;\r\n\r\n    for (i = 0, ii = levels.length; i < ii; ++i) {\r\n      if (levels[i] < level) {\r\n        if (start >= 0) {\r\n          reverseValues(chars, start, i);\r\n          start = -1;\r\n        }\r\n      } else if (start < 0) {\r\n        start = i;\r\n      }\r\n    }\r\n\r\n    if (start >= 0) {\r\n      reverseValues(chars, start, levels.length);\r\n    }\r\n  }\r\n\r\n  for (i = 0, ii = chars.length; i < ii; ++i) {\r\n    var ch = chars[i];\r\n\r\n    if (ch === \"<\" || ch === \">\") {\r\n      chars[i] = \"\";\r\n    }\r\n  }\r\n\r\n  return createBidiText(chars.join(\"\"), isLTR);\r\n}\r\n\r\n/***/ }),\r\n/* 172 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.getMetrics = void 0;\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n  t.Courier = 600;\r\n  t[\"Courier-Bold\"] = 600;\r\n  t[\"Courier-BoldOblique\"] = 600;\r\n  t[\"Courier-Oblique\"] = 600;\r\n  t.Helvetica = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n    t.space = 278;\r\n    t.exclam = 278;\r\n    t.quotedbl = 355;\r\n    t.numbersign = 556;\r\n    t.dollar = 556;\r\n    t.percent = 889;\r\n    t.ampersand = 667;\r\n    t.quoteright = 222;\r\n    t.parenleft = 333;\r\n    t.parenright = 333;\r\n    t.asterisk = 389;\r\n    t.plus = 584;\r\n    t.comma = 278;\r\n    t.hyphen = 333;\r\n    t.period = 278;\r\n    t.slash = 278;\r\n    t.zero = 556;\r\n    t.one = 556;\r\n    t.two = 556;\r\n    t.three = 556;\r\n    t.four = 556;\r\n    t.five = 556;\r\n    t.six = 556;\r\n    t.seven = 556;\r\n    t.eight = 556;\r\n    t.nine = 556;\r\n    t.colon = 278;\r\n    t.semicolon = 278;\r\n    t.less = 584;\r\n    t.equal = 584;\r\n    t.greater = 584;\r\n    t.question = 556;\r\n    t.at = 1015;\r\n    t.A = 667;\r\n    t.B = 667;\r\n    t.C = 722;\r\n    t.D = 722;\r\n    t.E = 667;\r\n    t.F = 611;\r\n    t.G = 778;\r\n    t.H = 722;\r\n    t.I = 278;\r\n    t.J = 500;\r\n    t.K = 667;\r\n    t.L = 556;\r\n    t.M = 833;\r\n    t.N = 722;\r\n    t.O = 778;\r\n    t.P = 667;\r\n    t.Q = 778;\r\n    t.R = 722;\r\n    t.S = 667;\r\n    t.T = 611;\r\n    t.U = 722;\r\n    t.V = 667;\r\n    t.W = 944;\r\n    t.X = 667;\r\n    t.Y = 667;\r\n    t.Z = 611;\r\n    t.bracketleft = 278;\r\n    t.backslash = 278;\r\n    t.bracketright = 278;\r\n    t.asciicircum = 469;\r\n    t.underscore = 556;\r\n    t.quoteleft = 222;\r\n    t.a = 556;\r\n    t.b = 556;\r\n    t.c = 500;\r\n    t.d = 556;\r\n    t.e = 556;\r\n    t.f = 278;\r\n    t.g = 556;\r\n    t.h = 556;\r\n    t.i = 222;\r\n    t.j = 222;\r\n    t.k = 500;\r\n    t.l = 222;\r\n    t.m = 833;\r\n    t.n = 556;\r\n    t.o = 556;\r\n    t.p = 556;\r\n    t.q = 556;\r\n    t.r = 333;\r\n    t.s = 500;\r\n    t.t = 278;\r\n    t.u = 556;\r\n    t.v = 500;\r\n    t.w = 722;\r\n    t.x = 500;\r\n    t.y = 500;\r\n    t.z = 500;\r\n    t.braceleft = 334;\r\n    t.bar = 260;\r\n    t.braceright = 334;\r\n    t.asciitilde = 584;\r\n    t.exclamdown = 333;\r\n    t.cent = 556;\r\n    t.sterling = 556;\r\n    t.fraction = 167;\r\n    t.yen = 556;\r\n    t.florin = 556;\r\n    t.section = 556;\r\n    t.currency = 556;\r\n    t.quotesingle = 191;\r\n    t.quotedblleft = 333;\r\n    t.guillemotleft = 556;\r\n    t.guilsinglleft = 333;\r\n    t.guilsinglright = 333;\r\n    t.fi = 500;\r\n    t.fl = 500;\r\n    t.endash = 556;\r\n    t.dagger = 556;\r\n    t.daggerdbl = 556;\r\n    t.periodcentered = 278;\r\n    t.paragraph = 537;\r\n    t.bullet = 350;\r\n    t.quotesinglbase = 222;\r\n    t.quotedblbase = 333;\r\n    t.quotedblright = 333;\r\n    t.guillemotright = 556;\r\n    t.ellipsis = 1000;\r\n    t.perthousand = 1000;\r\n    t.questiondown = 611;\r\n    t.grave = 333;\r\n    t.acute = 333;\r\n    t.circumflex = 333;\r\n    t.tilde = 333;\r\n    t.macron = 333;\r\n    t.breve = 333;\r\n    t.dotaccent = 333;\r\n    t.dieresis = 333;\r\n    t.ring = 333;\r\n    t.cedilla = 333;\r\n    t.hungarumlaut = 333;\r\n    t.ogonek = 333;\r\n    t.caron = 333;\r\n    t.emdash = 1000;\r\n    t.AE = 1000;\r\n    t.ordfeminine = 370;\r\n    t.Lslash = 556;\r\n    t.Oslash = 778;\r\n    t.OE = 1000;\r\n    t.ordmasculine = 365;\r\n    t.ae = 889;\r\n    t.dotlessi = 278;\r\n    t.lslash = 222;\r\n    t.oslash = 611;\r\n    t.oe = 944;\r\n    t.germandbls = 611;\r\n    t.Idieresis = 278;\r\n    t.eacute = 556;\r\n    t.abreve = 556;\r\n    t.uhungarumlaut = 556;\r\n    t.ecaron = 556;\r\n    t.Ydieresis = 667;\r\n    t.divide = 584;\r\n    t.Yacute = 667;\r\n    t.Acircumflex = 667;\r\n    t.aacute = 556;\r\n    t.Ucircumflex = 722;\r\n    t.yacute = 500;\r\n    t.scommaaccent = 500;\r\n    t.ecircumflex = 556;\r\n    t.Uring = 722;\r\n    t.Udieresis = 722;\r\n    t.aogonek = 556;\r\n    t.Uacute = 722;\r\n    t.uogonek = 556;\r\n    t.Edieresis = 667;\r\n    t.Dcroat = 722;\r\n    t.commaaccent = 250;\r\n    t.copyright = 737;\r\n    t.Emacron = 667;\r\n    t.ccaron = 500;\r\n    t.aring = 556;\r\n    t.Ncommaaccent = 722;\r\n    t.lacute = 222;\r\n    t.agrave = 556;\r\n    t.Tcommaaccent = 611;\r\n    t.Cacute = 722;\r\n    t.atilde = 556;\r\n    t.Edotaccent = 667;\r\n    t.scaron = 500;\r\n    t.scedilla = 500;\r\n    t.iacute = 278;\r\n    t.lozenge = 471;\r\n    t.Rcaron = 722;\r\n    t.Gcommaaccent = 778;\r\n    t.ucircumflex = 556;\r\n    t.acircumflex = 556;\r\n    t.Amacron = 667;\r\n    t.rcaron = 333;\r\n    t.ccedilla = 500;\r\n    t.Zdotaccent = 611;\r\n    t.Thorn = 667;\r\n    t.Omacron = 778;\r\n    t.Racute = 722;\r\n    t.Sacute = 667;\r\n    t.dcaron = 643;\r\n    t.Umacron = 722;\r\n    t.uring = 556;\r\n    t.threesuperior = 333;\r\n    t.Ograve = 778;\r\n    t.Agrave = 667;\r\n    t.Abreve = 667;\r\n    t.multiply = 584;\r\n    t.uacute = 556;\r\n    t.Tcaron = 611;\r\n    t.partialdiff = 476;\r\n    t.ydieresis = 500;\r\n    t.Nacute = 722;\r\n    t.icircumflex = 278;\r\n    t.Ecircumflex = 667;\r\n    t.adieresis = 556;\r\n    t.edieresis = 556;\r\n    t.cacute = 500;\r\n    t.nacute = 556;\r\n    t.umacron = 556;\r\n    t.Ncaron = 722;\r\n    t.Iacute = 278;\r\n    t.plusminus = 584;\r\n    t.brokenbar = 260;\r\n    t.registered = 737;\r\n    t.Gbreve = 778;\r\n    t.Idotaccent = 278;\r\n    t.summation = 600;\r\n    t.Egrave = 667;\r\n    t.racute = 333;\r\n    t.omacron = 556;\r\n    t.Zacute = 611;\r\n    t.Zcaron = 611;\r\n    t.greaterequal = 549;\r\n    t.Eth = 722;\r\n    t.Ccedilla = 722;\r\n    t.lcommaaccent = 222;\r\n    t.tcaron = 317;\r\n    t.eogonek = 556;\r\n    t.Uogonek = 722;\r\n    t.Aacute = 667;\r\n    t.Adieresis = 667;\r\n    t.egrave = 556;\r\n    t.zacute = 500;\r\n    t.iogonek = 222;\r\n    t.Oacute = 778;\r\n    t.oacute = 556;\r\n    t.amacron = 556;\r\n    t.sacute = 500;\r\n    t.idieresis = 278;\r\n    t.Ocircumflex = 778;\r\n    t.Ugrave = 722;\r\n    t.Delta = 612;\r\n    t.thorn = 556;\r\n    t.twosuperior = 333;\r\n    t.Odieresis = 778;\r\n    t.mu = 556;\r\n    t.igrave = 278;\r\n    t.ohungarumlaut = 556;\r\n    t.Eogonek = 667;\r\n    t.dcroat = 556;\r\n    t.threequarters = 834;\r\n    t.Scedilla = 667;\r\n    t.lcaron = 299;\r\n    t.Kcommaaccent = 667;\r\n    t.Lacute = 556;\r\n    t.trademark = 1000;\r\n    t.edotaccent = 556;\r\n    t.Igrave = 278;\r\n    t.Imacron = 278;\r\n    t.Lcaron = 556;\r\n    t.onehalf = 834;\r\n    t.lessequal = 549;\r\n    t.ocircumflex = 556;\r\n    t.ntilde = 556;\r\n    t.Uhungarumlaut = 722;\r\n    t.Eacute = 667;\r\n    t.emacron = 556;\r\n    t.gbreve = 556;\r\n    t.onequarter = 834;\r\n    t.Scaron = 667;\r\n    t.Scommaaccent = 667;\r\n    t.Ohungarumlaut = 778;\r\n    t.degree = 400;\r\n    t.ograve = 556;\r\n    t.Ccaron = 722;\r\n    t.ugrave = 556;\r\n    t.radical = 453;\r\n    t.Dcaron = 722;\r\n    t.rcommaaccent = 333;\r\n    t.Ntilde = 722;\r\n    t.otilde = 556;\r\n    t.Rcommaaccent = 722;\r\n    t.Lcommaaccent = 556;\r\n    t.Atilde = 667;\r\n    t.Aogonek = 667;\r\n    t.Aring = 667;\r\n    t.Otilde = 778;\r\n    t.zdotaccent = 500;\r\n    t.Ecaron = 667;\r\n    t.Iogonek = 278;\r\n    t.kcommaaccent = 500;\r\n    t.minus = 584;\r\n    t.Icircumflex = 278;\r\n    t.ncaron = 556;\r\n    t.tcommaaccent = 278;\r\n    t.logicalnot = 584;\r\n    t.odieresis = 556;\r\n    t.udieresis = 556;\r\n    t.notequal = 549;\r\n    t.gcommaaccent = 556;\r\n    t.eth = 556;\r\n    t.zcaron = 500;\r\n    t.ncommaaccent = 556;\r\n    t.onesuperior = 333;\r\n    t.imacron = 278;\r\n    t.Euro = 556;\r\n  });\r\n  t[\"Helvetica-Bold\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n    t.space = 278;\r\n    t.exclam = 333;\r\n    t.quotedbl = 474;\r\n    t.numbersign = 556;\r\n    t.dollar = 556;\r\n    t.percent = 889;\r\n    t.ampersand = 722;\r\n    t.quoteright = 278;\r\n    t.parenleft = 333;\r\n    t.parenright = 333;\r\n    t.asterisk = 389;\r\n    t.plus = 584;\r\n    t.comma = 278;\r\n    t.hyphen = 333;\r\n    t.period = 278;\r\n    t.slash = 278;\r\n    t.zero = 556;\r\n    t.one = 556;\r\n    t.two = 556;\r\n    t.three = 556;\r\n    t.four = 556;\r\n    t.five = 556;\r\n    t.six = 556;\r\n    t.seven = 556;\r\n    t.eight = 556;\r\n    t.nine = 556;\r\n    t.colon = 333;\r\n    t.semicolon = 333;\r\n    t.less = 584;\r\n    t.equal = 584;\r\n    t.greater = 584;\r\n    t.question = 611;\r\n    t.at = 975;\r\n    t.A = 722;\r\n    t.B = 722;\r\n    t.C = 722;\r\n    t.D = 722;\r\n    t.E = 667;\r\n    t.F = 611;\r\n    t.G = 778;\r\n    t.H = 722;\r\n    t.I = 278;\r\n    t.J = 556;\r\n    t.K = 722;\r\n    t.L = 611;\r\n    t.M = 833;\r\n    t.N = 722;\r\n    t.O = 778;\r\n    t.P = 667;\r\n    t.Q = 778;\r\n    t.R = 722;\r\n    t.S = 667;\r\n    t.T = 611;\r\n    t.U = 722;\r\n    t.V = 667;\r\n    t.W = 944;\r\n    t.X = 667;\r\n    t.Y = 667;\r\n    t.Z = 611;\r\n    t.bracketleft = 333;\r\n    t.backslash = 278;\r\n    t.bracketright = 333;\r\n    t.asciicircum = 584;\r\n    t.underscore = 556;\r\n    t.quoteleft = 278;\r\n    t.a = 556;\r\n    t.b = 611;\r\n    t.c = 556;\r\n    t.d = 611;\r\n    t.e = 556;\r\n    t.f = 333;\r\n    t.g = 611;\r\n    t.h = 611;\r\n    t.i = 278;\r\n    t.j = 278;\r\n    t.k = 556;\r\n    t.l = 278;\r\n    t.m = 889;\r\n    t.n = 611;\r\n    t.o = 611;\r\n    t.p = 611;\r\n    t.q = 611;\r\n    t.r = 389;\r\n    t.s = 556;\r\n    t.t = 333;\r\n    t.u = 611;\r\n    t.v = 556;\r\n    t.w = 778;\r\n    t.x = 556;\r\n    t.y = 556;\r\n    t.z = 500;\r\n    t.braceleft = 389;\r\n    t.bar = 280;\r\n    t.braceright = 389;\r\n    t.asciitilde = 584;\r\n    t.exclamdown = 333;\r\n    t.cent = 556;\r\n    t.sterling = 556;\r\n    t.fraction = 167;\r\n    t.yen = 556;\r\n    t.florin = 556;\r\n    t.section = 556;\r\n    t.currency = 556;\r\n    t.quotesingle = 238;\r\n    t.quotedblleft = 500;\r\n    t.guillemotleft = 556;\r\n    t.guilsinglleft = 333;\r\n    t.guilsinglright = 333;\r\n    t.fi = 611;\r\n    t.fl = 611;\r\n    t.endash = 556;\r\n    t.dagger = 556;\r\n    t.daggerdbl = 556;\r\n    t.periodcentered = 278;\r\n    t.paragraph = 556;\r\n    t.bullet = 350;\r\n    t.quotesinglbase = 278;\r\n    t.quotedblbase = 500;\r\n    t.quotedblright = 500;\r\n    t.guillemotright = 556;\r\n    t.ellipsis = 1000;\r\n    t.perthousand = 1000;\r\n    t.questiondown = 611;\r\n    t.grave = 333;\r\n    t.acute = 333;\r\n    t.circumflex = 333;\r\n    t.tilde = 333;\r\n    t.macron = 333;\r\n    t.breve = 333;\r\n    t.dotaccent = 333;\r\n    t.dieresis = 333;\r\n    t.ring = 333;\r\n    t.cedilla = 333;\r\n    t.hungarumlaut = 333;\r\n    t.ogonek = 333;\r\n    t.caron = 333;\r\n    t.emdash = 1000;\r\n    t.AE = 1000;\r\n    t.ordfeminine = 370;\r\n    t.Lslash = 611;\r\n    t.Oslash = 778;\r\n    t.OE = 1000;\r\n    t.ordmasculine = 365;\r\n    t.ae = 889;\r\n    t.dotlessi = 278;\r\n    t.lslash = 278;\r\n    t.oslash = 611;\r\n    t.oe = 944;\r\n    t.germandbls = 611;\r\n    t.Idieresis = 278;\r\n    t.eacute = 556;\r\n    t.abreve = 556;\r\n    t.uhungarumlaut = 611;\r\n    t.ecaron = 556;\r\n    t.Ydieresis = 667;\r\n    t.divide = 584;\r\n    t.Yacute = 667;\r\n    t.Acircumflex = 722;\r\n    t.aacute = 556;\r\n    t.Ucircumflex = 722;\r\n    t.yacute = 556;\r\n    t.scommaaccent = 556;\r\n    t.ecircumflex = 556;\r\n    t.Uring = 722;\r\n    t.Udieresis = 722;\r\n    t.aogonek = 556;\r\n    t.Uacute = 722;\r\n    t.uogonek = 611;\r\n    t.Edieresis = 667;\r\n    t.Dcroat = 722;\r\n    t.commaaccent = 250;\r\n    t.copyright = 737;\r\n    t.Emacron = 667;\r\n    t.ccaron = 556;\r\n    t.aring = 556;\r\n    t.Ncommaaccent = 722;\r\n    t.lacute = 278;\r\n    t.agrave = 556;\r\n    t.Tcommaaccent = 611;\r\n    t.Cacute = 722;\r\n    t.atilde = 556;\r\n    t.Edotaccent = 667;\r\n    t.scaron = 556;\r\n    t.scedilla = 556;\r\n    t.iacute = 278;\r\n    t.lozenge = 494;\r\n    t.Rcaron = 722;\r\n    t.Gcommaaccent = 778;\r\n    t.ucircumflex = 611;\r\n    t.acircumflex = 556;\r\n    t.Amacron = 722;\r\n    t.rcaron = 389;\r\n    t.ccedilla = 556;\r\n    t.Zdotaccent = 611;\r\n    t.Thorn = 667;\r\n    t.Omacron = 778;\r\n    t.Racute = 722;\r\n    t.Sacute = 667;\r\n    t.dcaron = 743;\r\n    t.Umacron = 722;\r\n    t.uring = 611;\r\n    t.threesuperior = 333;\r\n    t.Ograve = 778;\r\n    t.Agrave = 722;\r\n    t.Abreve = 722;\r\n    t.multiply = 584;\r\n    t.uacute = 611;\r\n    t.Tcaron = 611;\r\n    t.partialdiff = 494;\r\n    t.ydieresis = 556;\r\n    t.Nacute = 722;\r\n    t.icircumflex = 278;\r\n    t.Ecircumflex = 667;\r\n    t.adieresis = 556;\r\n    t.edieresis = 556;\r\n    t.cacute = 556;\r\n    t.nacute = 611;\r\n    t.umacron = 611;\r\n    t.Ncaron = 722;\r\n    t.Iacute = 278;\r\n    t.plusminus = 584;\r\n    t.brokenbar = 280;\r\n    t.registered = 737;\r\n    t.Gbreve = 778;\r\n    t.Idotaccent = 278;\r\n    t.summation = 600;\r\n    t.Egrave = 667;\r\n    t.racute = 389;\r\n    t.omacron = 611;\r\n    t.Zacute = 611;\r\n    t.Zcaron = 611;\r\n    t.greaterequal = 549;\r\n    t.Eth = 722;\r\n    t.Ccedilla = 722;\r\n    t.lcommaaccent = 278;\r\n    t.tcaron = 389;\r\n    t.eogonek = 556;\r\n    t.Uogonek = 722;\r\n    t.Aacute = 722;\r\n    t.Adieresis = 722;\r\n    t.egrave = 556;\r\n    t.zacute = 500;\r\n    t.iogonek = 278;\r\n    t.Oacute = 778;\r\n    t.oacute = 611;\r\n    t.amacron = 556;\r\n    t.sacute = 556;\r\n    t.idieresis = 278;\r\n    t.Ocircumflex = 778;\r\n    t.Ugrave = 722;\r\n    t.Delta = 612;\r\n    t.thorn = 611;\r\n    t.twosuperior = 333;\r\n    t.Odieresis = 778;\r\n    t.mu = 611;\r\n    t.igrave = 278;\r\n    t.ohungarumlaut = 611;\r\n    t.Eogonek = 667;\r\n    t.dcroat = 611;\r\n    t.threequarters = 834;\r\n    t.Scedilla = 667;\r\n    t.lcaron = 400;\r\n    t.Kcommaaccent = 722;\r\n    t.Lacute = 611;\r\n    t.trademark = 1000;\r\n    t.edotaccent = 556;\r\n    t.Igrave = 278;\r\n    t.Imacron = 278;\r\n    t.Lcaron = 611;\r\n    t.onehalf = 834;\r\n    t.lessequal = 549;\r\n    t.ocircumflex = 611;\r\n    t.ntilde = 611;\r\n    t.Uhungarumlaut = 722;\r\n    t.Eacute = 667;\r\n    t.emacron = 556;\r\n    t.gbreve = 611;\r\n    t.onequarter = 834;\r\n    t.Scaron = 667;\r\n    t.Scommaaccent = 667;\r\n    t.Ohungarumlaut = 778;\r\n    t.degree = 400;\r\n    t.ograve = 611;\r\n    t.Ccaron = 722;\r\n    t.ugrave = 611;\r\n    t.radical = 549;\r\n    t.Dcaron = 722;\r\n    t.rcommaaccent = 389;\r\n    t.Ntilde = 722;\r\n    t.otilde = 611;\r\n    t.Rcommaaccent = 722;\r\n    t.Lcommaaccent = 611;\r\n    t.Atilde = 722;\r\n    t.Aogonek = 722;\r\n    t.Aring = 722;\r\n    t.Otilde = 778;\r\n    t.zdotaccent = 500;\r\n    t.Ecaron = 667;\r\n    t.Iogonek = 278;\r\n    t.kcommaaccent = 556;\r\n    t.minus = 584;\r\n    t.Icircumflex = 278;\r\n    t.ncaron = 611;\r\n    t.tcommaaccent = 333;\r\n    t.logicalnot = 584;\r\n    t.odieresis = 611;\r\n    t.udieresis = 611;\r\n    t.notequal = 549;\r\n    t.gcommaaccent = 611;\r\n    t.eth = 611;\r\n    t.zcaron = 500;\r\n    t.ncommaaccent = 611;\r\n    t.onesuperior = 333;\r\n    t.imacron = 278;\r\n    t.Euro = 556;\r\n  });\r\n  t[\"Helvetica-BoldOblique\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n    t.space = 278;\r\n    t.exclam = 333;\r\n    t.quotedbl = 474;\r\n    t.numbersign = 556;\r\n    t.dollar = 556;\r\n    t.percent = 889;\r\n    t.ampersand = 722;\r\n    t.quoteright = 278;\r\n    t.parenleft = 333;\r\n    t.parenright = 333;\r\n    t.asterisk = 389;\r\n    t.plus = 584;\r\n    t.comma = 278;\r\n    t.hyphen = 333;\r\n    t.period = 278;\r\n    t.slash = 278;\r\n    t.zero = 556;\r\n    t.one = 556;\r\n    t.two = 556;\r\n    t.three = 556;\r\n    t.four = 556;\r\n    t.five = 556;\r\n    t.six = 556;\r\n    t.seven = 556;\r\n    t.eight = 556;\r\n    t.nine = 556;\r\n    t.colon = 333;\r\n    t.semicolon = 333;\r\n    t.less = 584;\r\n    t.equal = 584;\r\n    t.greater = 584;\r\n    t.question = 611;\r\n    t.at = 975;\r\n    t.A = 722;\r\n    t.B = 722;\r\n    t.C = 722;\r\n    t.D = 722;\r\n    t.E = 667;\r\n    t.F = 611;\r\n    t.G = 778;\r\n    t.H = 722;\r\n    t.I = 278;\r\n    t.J = 556;\r\n    t.K = 722;\r\n    t.L = 611;\r\n    t.M = 833;\r\n    t.N = 722;\r\n    t.O = 778;\r\n    t.P = 667;\r\n    t.Q = 778;\r\n    t.R = 722;\r\n    t.S = 667;\r\n    t.T = 611;\r\n    t.U = 722;\r\n    t.V = 667;\r\n    t.W = 944;\r\n    t.X = 667;\r\n    t.Y = 667;\r\n    t.Z = 611;\r\n    t.bracketleft = 333;\r\n    t.backslash = 278;\r\n    t.bracketright = 333;\r\n    t.asciicircum = 584;\r\n    t.underscore = 556;\r\n    t.quoteleft = 278;\r\n    t.a = 556;\r\n    t.b = 611;\r\n    t.c = 556;\r\n    t.d = 611;\r\n    t.e = 556;\r\n    t.f = 333;\r\n    t.g = 611;\r\n    t.h = 611;\r\n    t.i = 278;\r\n    t.j = 278;\r\n    t.k = 556;\r\n    t.l = 278;\r\n    t.m = 889;\r\n    t.n = 611;\r\n    t.o = 611;\r\n    t.p = 611;\r\n    t.q = 611;\r\n    t.r = 389;\r\n    t.s = 556;\r\n    t.t = 333;\r\n    t.u = 611;\r\n    t.v = 556;\r\n    t.w = 778;\r\n    t.x = 556;\r\n    t.y = 556;\r\n    t.z = 500;\r\n    t.braceleft = 389;\r\n    t.bar = 280;\r\n    t.braceright = 389;\r\n    t.asciitilde = 584;\r\n    t.exclamdown = 333;\r\n    t.cent = 556;\r\n    t.sterling = 556;\r\n    t.fraction = 167;\r\n    t.yen = 556;\r\n    t.florin = 556;\r\n    t.section = 556;\r\n    t.currency = 556;\r\n    t.quotesingle = 238;\r\n    t.quotedblleft = 500;\r\n    t.guillemotleft = 556;\r\n    t.guilsinglleft = 333;\r\n    t.guilsinglright = 333;\r\n    t.fi = 611;\r\n    t.fl = 611;\r\n    t.endash = 556;\r\n    t.dagger = 556;\r\n    t.daggerdbl = 556;\r\n    t.periodcentered = 278;\r\n    t.paragraph = 556;\r\n    t.bullet = 350;\r\n    t.quotesinglbase = 278;\r\n    t.quotedblbase = 500;\r\n    t.quotedblright = 500;\r\n    t.guillemotright = 556;\r\n    t.ellipsis = 1000;\r\n    t.perthousand = 1000;\r\n    t.questiondown = 611;\r\n    t.grave = 333;\r\n    t.acute = 333;\r\n    t.circumflex = 333;\r\n    t.tilde = 333;\r\n    t.macron = 333;\r\n    t.breve = 333;\r\n    t.dotaccent = 333;\r\n    t.dieresis = 333;\r\n    t.ring = 333;\r\n    t.cedilla = 333;\r\n    t.hungarumlaut = 333;\r\n    t.ogonek = 333;\r\n    t.caron = 333;\r\n    t.emdash = 1000;\r\n    t.AE = 1000;\r\n    t.ordfeminine = 370;\r\n    t.Lslash = 611;\r\n    t.Oslash = 778;\r\n    t.OE = 1000;\r\n    t.ordmasculine = 365;\r\n    t.ae = 889;\r\n    t.dotlessi = 278;\r\n    t.lslash = 278;\r\n    t.oslash = 611;\r\n    t.oe = 944;\r\n    t.germandbls = 611;\r\n    t.Idieresis = 278;\r\n    t.eacute = 556;\r\n    t.abreve = 556;\r\n    t.uhungarumlaut = 611;\r\n    t.ecaron = 556;\r\n    t.Ydieresis = 667;\r\n    t.divide = 584;\r\n    t.Yacute = 667;\r\n    t.Acircumflex = 722;\r\n    t.aacute = 556;\r\n    t.Ucircumflex = 722;\r\n    t.yacute = 556;\r\n    t.scommaaccent = 556;\r\n    t.ecircumflex = 556;\r\n    t.Uring = 722;\r\n    t.Udieresis = 722;\r\n    t.aogonek = 556;\r\n    t.Uacute = 722;\r\n    t.uogonek = 611;\r\n    t.Edieresis = 667;\r\n    t.Dcroat = 722;\r\n    t.commaaccent = 250;\r\n    t.copyright = 737;\r\n    t.Emacron = 667;\r\n    t.ccaron = 556;\r\n    t.aring = 556;\r\n    t.Ncommaaccent = 722;\r\n    t.lacute = 278;\r\n    t.agrave = 556;\r\n    t.Tcommaaccent = 611;\r\n    t.Cacute = 722;\r\n    t.atilde = 556;\r\n    t.Edotaccent = 667;\r\n    t.scaron = 556;\r\n    t.scedilla = 556;\r\n    t.iacute = 278;\r\n    t.lozenge = 494;\r\n    t.Rcaron = 722;\r\n    t.Gcommaaccent = 778;\r\n    t.ucircumflex = 611;\r\n    t.acircumflex = 556;\r\n    t.Amacron = 722;\r\n    t.rcaron = 389;\r\n    t.ccedilla = 556;\r\n    t.Zdotaccent = 611;\r\n    t.Thorn = 667;\r\n    t.Omacron = 778;\r\n    t.Racute = 722;\r\n    t.Sacute = 667;\r\n    t.dcaron = 743;\r\n    t.Umacron = 722;\r\n    t.uring = 611;\r\n    t.threesuperior = 333;\r\n    t.Ograve = 778;\r\n    t.Agrave = 722;\r\n    t.Abreve = 722;\r\n    t.multiply = 584;\r\n    t.uacute = 611;\r\n    t.Tcaron = 611;\r\n    t.partialdiff = 494;\r\n    t.ydieresis = 556;\r\n    t.Nacute = 722;\r\n    t.icircumflex = 278;\r\n    t.Ecircumflex = 667;\r\n    t.adieresis = 556;\r\n    t.edieresis = 556;\r\n    t.cacute = 556;\r\n    t.nacute = 611;\r\n    t.umacron = 611;\r\n    t.Ncaron = 722;\r\n    t.Iacute = 278;\r\n    t.plusminus = 584;\r\n    t.brokenbar = 280;\r\n    t.registered = 737;\r\n    t.Gbreve = 778;\r\n    t.Idotaccent = 278;\r\n    t.summation = 600;\r\n    t.Egrave = 667;\r\n    t.racute = 389;\r\n    t.omacron = 611;\r\n    t.Zacute = 611;\r\n    t.Zcaron = 611;\r\n    t.greaterequal = 549;\r\n    t.Eth = 722;\r\n    t.Ccedilla = 722;\r\n    t.lcommaaccent = 278;\r\n    t.tcaron = 389;\r\n    t.eogonek = 556;\r\n    t.Uogonek = 722;\r\n    t.Aacute = 722;\r\n    t.Adieresis = 722;\r\n    t.egrave = 556;\r\n    t.zacute = 500;\r\n    t.iogonek = 278;\r\n    t.Oacute = 778;\r\n    t.oacute = 611;\r\n    t.amacron = 556;\r\n    t.sacute = 556;\r\n    t.idieresis = 278;\r\n    t.Ocircumflex = 778;\r\n    t.Ugrave = 722;\r\n    t.Delta = 612;\r\n    t.thorn = 611;\r\n    t.twosuperior = 333;\r\n    t.Odieresis = 778;\r\n    t.mu = 611;\r\n    t.igrave = 278;\r\n    t.ohungarumlaut = 611;\r\n    t.Eogonek = 667;\r\n    t.dcroat = 611;\r\n    t.threequarters = 834;\r\n    t.Scedilla = 667;\r\n    t.lcaron = 400;\r\n    t.Kcommaaccent = 722;\r\n    t.Lacute = 611;\r\n    t.trademark = 1000;\r\n    t.edotaccent = 556;\r\n    t.Igrave = 278;\r\n    t.Imacron = 278;\r\n    t.Lcaron = 611;\r\n    t.onehalf = 834;\r\n    t.lessequal = 549;\r\n    t.ocircumflex = 611;\r\n    t.ntilde = 611;\r\n    t.Uhungarumlaut = 722;\r\n    t.Eacute = 667;\r\n    t.emacron = 556;\r\n    t.gbreve = 611;\r\n    t.onequarter = 834;\r\n    t.Scaron = 667;\r\n    t.Scommaaccent = 667;\r\n    t.Ohungarumlaut = 778;\r\n    t.degree = 400;\r\n    t.ograve = 611;\r\n    t.Ccaron = 722;\r\n    t.ugrave = 611;\r\n    t.radical = 549;\r\n    t.Dcaron = 722;\r\n    t.rcommaaccent = 389;\r\n    t.Ntilde = 722;\r\n    t.otilde = 611;\r\n    t.Rcommaaccent = 722;\r\n    t.Lcommaaccent = 611;\r\n    t.Atilde = 722;\r\n    t.Aogonek = 722;\r\n    t.Aring = 722;\r\n    t.Otilde = 778;\r\n    t.zdotaccent = 500;\r\n    t.Ecaron = 667;\r\n    t.Iogonek = 278;\r\n    t.kcommaaccent = 556;\r\n    t.minus = 584;\r\n    t.Icircumflex = 278;\r\n    t.ncaron = 611;\r\n    t.tcommaaccent = 333;\r\n    t.logicalnot = 584;\r\n    t.odieresis = 611;\r\n    t.udieresis = 611;\r\n    t.notequal = 549;\r\n    t.gcommaaccent = 611;\r\n    t.eth = 611;\r\n    t.zcaron = 500;\r\n    t.ncommaaccent = 611;\r\n    t.onesuperior = 333;\r\n    t.imacron = 278;\r\n    t.Euro = 556;\r\n  });\r\n  t[\"Helvetica-Oblique\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n    t.space = 278;\r\n    t.exclam = 278;\r\n    t.quotedbl = 355;\r\n    t.numbersign = 556;\r\n    t.dollar = 556;\r\n    t.percent = 889;\r\n    t.ampersand = 667;\r\n    t.quoteright = 222;\r\n    t.parenleft = 333;\r\n    t.parenright = 333;\r\n    t.asterisk = 389;\r\n    t.plus = 584;\r\n    t.comma = 278;\r\n    t.hyphen = 333;\r\n    t.period = 278;\r\n    t.slash = 278;\r\n    t.zero = 556;\r\n    t.one = 556;\r\n    t.two = 556;\r\n    t.three = 556;\r\n    t.four = 556;\r\n    t.five = 556;\r\n    t.six = 556;\r\n    t.seven = 556;\r\n    t.eight = 556;\r\n    t.nine = 556;\r\n    t.colon = 278;\r\n    t.semicolon = 278;\r\n    t.less = 584;\r\n    t.equal = 584;\r\n    t.greater = 584;\r\n    t.question = 556;\r\n    t.at = 1015;\r\n    t.A = 667;\r\n    t.B = 667;\r\n    t.C = 722;\r\n    t.D = 722;\r\n    t.E = 667;\r\n    t.F = 611;\r\n    t.G = 778;\r\n    t.H = 722;\r\n    t.I = 278;\r\n    t.J = 500;\r\n    t.K = 667;\r\n    t.L = 556;\r\n    t.M = 833;\r\n    t.N = 722;\r\n    t.O = 778;\r\n    t.P = 667;\r\n    t.Q = 778;\r\n    t.R = 722;\r\n    t.S = 667;\r\n    t.T = 611;\r\n    t.U = 722;\r\n    t.V = 667;\r\n    t.W = 944;\r\n    t.X = 667;\r\n    t.Y = 667;\r\n    t.Z = 611;\r\n    t.bracketleft = 278;\r\n    t.backslash = 278;\r\n    t.bracketright = 278;\r\n    t.asciicircum = 469;\r\n    t.underscore = 556;\r\n    t.quoteleft = 222;\r\n    t.a = 556;\r\n    t.b = 556;\r\n    t.c = 500;\r\n    t.d = 556;\r\n    t.e = 556;\r\n    t.f = 278;\r\n    t.g = 556;\r\n    t.h = 556;\r\n    t.i = 222;\r\n    t.j = 222;\r\n    t.k = 500;\r\n    t.l = 222;\r\n    t.m = 833;\r\n    t.n = 556;\r\n    t.o = 556;\r\n    t.p = 556;\r\n    t.q = 556;\r\n    t.r = 333;\r\n    t.s = 500;\r\n    t.t = 278;\r\n    t.u = 556;\r\n    t.v = 500;\r\n    t.w = 722;\r\n    t.x = 500;\r\n    t.y = 500;\r\n    t.z = 500;\r\n    t.braceleft = 334;\r\n    t.bar = 260;\r\n    t.braceright = 334;\r\n    t.asciitilde = 584;\r\n    t.exclamdown = 333;\r\n    t.cent = 556;\r\n    t.sterling = 556;\r\n    t.fraction = 167;\r\n    t.yen = 556;\r\n    t.florin = 556;\r\n    t.section = 556;\r\n    t.currency = 556;\r\n    t.quotesingle = 191;\r\n    t.quotedblleft = 333;\r\n    t.guillemotleft = 556;\r\n    t.guilsinglleft = 333;\r\n    t.guilsinglright = 333;\r\n    t.fi = 500;\r\n    t.fl = 500;\r\n    t.endash = 556;\r\n    t.dagger = 556;\r\n    t.daggerdbl = 556;\r\n    t.periodcentered = 278;\r\n    t.paragraph = 537;\r\n    t.bullet = 350;\r\n    t.quotesinglbase = 222;\r\n    t.quotedblbase = 333;\r\n    t.quotedblright = 333;\r\n    t.guillemotright = 556;\r\n    t.ellipsis = 1000;\r\n    t.perthousand = 1000;\r\n    t.questiondown = 611;\r\n    t.grave = 333;\r\n    t.acute = 333;\r\n    t.circumflex = 333;\r\n    t.tilde = 333;\r\n    t.macron = 333;\r\n    t.breve = 333;\r\n    t.dotaccent = 333;\r\n    t.dieresis = 333;\r\n    t.ring = 333;\r\n    t.cedilla = 333;\r\n    t.hungarumlaut = 333;\r\n    t.ogonek = 333;\r\n    t.caron = 333;\r\n    t.emdash = 1000;\r\n    t.AE = 1000;\r\n    t.ordfeminine = 370;\r\n    t.Lslash = 556;\r\n    t.Oslash = 778;\r\n    t.OE = 1000;\r\n    t.ordmasculine = 365;\r\n    t.ae = 889;\r\n    t.dotlessi = 278;\r\n    t.lslash = 222;\r\n    t.oslash = 611;\r\n    t.oe = 944;\r\n    t.germandbls = 611;\r\n    t.Idieresis = 278;\r\n    t.eacute = 556;\r\n    t.abreve = 556;\r\n    t.uhungarumlaut = 556;\r\n    t.ecaron = 556;\r\n    t.Ydieresis = 667;\r\n    t.divide = 584;\r\n    t.Yacute = 667;\r\n    t.Acircumflex = 667;\r\n    t.aacute = 556;\r\n    t.Ucircumflex = 722;\r\n    t.yacute = 500;\r\n    t.scommaaccent = 500;\r\n    t.ecircumflex = 556;\r\n    t.Uring = 722;\r\n    t.Udieresis = 722;\r\n    t.aogonek = 556;\r\n    t.Uacute = 722;\r\n    t.uogonek = 556;\r\n    t.Edieresis = 667;\r\n    t.Dcroat = 722;\r\n    t.commaaccent = 250;\r\n    t.copyright = 737;\r\n    t.Emacron = 667;\r\n    t.ccaron = 500;\r\n    t.aring = 556;\r\n    t.Ncommaaccent = 722;\r\n    t.lacute = 222;\r\n    t.agrave = 556;\r\n    t.Tcommaaccent = 611;\r\n    t.Cacute = 722;\r\n    t.atilde = 556;\r\n    t.Edotaccent = 667;\r\n    t.scaron = 500;\r\n    t.scedilla = 500;\r\n    t.iacute = 278;\r\n    t.lozenge = 471;\r\n    t.Rcaron = 722;\r\n    t.Gcommaaccent = 778;\r\n    t.ucircumflex = 556;\r\n    t.acircumflex = 556;\r\n    t.Amacron = 667;\r\n    t.rcaron = 333;\r\n    t.ccedilla = 500;\r\n    t.Zdotaccent = 611;\r\n    t.Thorn = 667;\r\n    t.Omacron = 778;\r\n    t.Racute = 722;\r\n    t.Sacute = 667;\r\n    t.dcaron = 643;\r\n    t.Umacron = 722;\r\n    t.uring = 556;\r\n    t.threesuperior = 333;\r\n    t.Ograve = 778;\r\n    t.Agrave = 667;\r\n    t.Abreve = 667;\r\n    t.multiply = 584;\r\n    t.uacute = 556;\r\n    t.Tcaron = 611;\r\n    t.partialdiff = 476;\r\n    t.ydieresis = 500;\r\n    t.Nacute = 722;\r\n    t.icircumflex = 278;\r\n    t.Ecircumflex = 667;\r\n    t.adieresis = 556;\r\n    t.edieresis = 556;\r\n    t.cacute = 500;\r\n    t.nacute = 556;\r\n    t.umacron = 556;\r\n    t.Ncaron = 722;\r\n    t.Iacute = 278;\r\n    t.plusminus = 584;\r\n    t.brokenbar = 260;\r\n    t.registered = 737;\r\n    t.Gbreve = 778;\r\n    t.Idotaccent = 278;\r\n    t.summation = 600;\r\n    t.Egrave = 667;\r\n    t.racute = 333;\r\n    t.omacron = 556;\r\n    t.Zacute = 611;\r\n    t.Zcaron = 611;\r\n    t.greaterequal = 549;\r\n    t.Eth = 722;\r\n    t.Ccedilla = 722;\r\n    t.lcommaaccent = 222;\r\n    t.tcaron = 317;\r\n    t.eogonek = 556;\r\n    t.Uogonek = 722;\r\n    t.Aacute = 667;\r\n    t.Adieresis = 667;\r\n    t.egrave = 556;\r\n    t.zacute = 500;\r\n    t.iogonek = 222;\r\n    t.Oacute = 778;\r\n    t.oacute = 556;\r\n    t.amacron = 556;\r\n    t.sacute = 500;\r\n    t.idieresis = 278;\r\n    t.Ocircumflex = 778;\r\n    t.Ugrave = 722;\r\n    t.Delta = 612;\r\n    t.thorn = 556;\r\n    t.twosuperior = 333;\r\n    t.Odieresis = 778;\r\n    t.mu = 556;\r\n    t.igrave = 278;\r\n    t.ohungarumlaut = 556;\r\n    t.Eogonek = 667;\r\n    t.dcroat = 556;\r\n    t.threequarters = 834;\r\n    t.Scedilla = 667;\r\n    t.lcaron = 299;\r\n    t.Kcommaaccent = 667;\r\n    t.Lacute = 556;\r\n    t.trademark = 1000;\r\n    t.edotaccent = 556;\r\n    t.Igrave = 278;\r\n    t.Imacron = 278;\r\n    t.Lcaron = 556;\r\n    t.onehalf = 834;\r\n    t.lessequal = 549;\r\n    t.ocircumflex = 556;\r\n    t.ntilde = 556;\r\n    t.Uhungarumlaut = 722;\r\n    t.Eacute = 667;\r\n    t.emacron = 556;\r\n    t.gbreve = 556;\r\n    t.onequarter = 834;\r\n    t.Scaron = 667;\r\n    t.Scommaaccent = 667;\r\n    t.Ohungarumlaut = 778;\r\n    t.degree = 400;\r\n    t.ograve = 556;\r\n    t.Ccaron = 722;\r\n    t.ugrave = 556;\r\n    t.radical = 453;\r\n    t.Dcaron = 722;\r\n    t.rcommaaccent = 333;\r\n    t.Ntilde = 722;\r\n    t.otilde = 556;\r\n    t.Rcommaaccent = 722;\r\n    t.Lcommaaccent = 556;\r\n    t.Atilde = 667;\r\n    t.Aogonek = 667;\r\n    t.Aring = 667;\r\n    t.Otilde = 778;\r\n    t.zdotaccent = 500;\r\n    t.Ecaron = 667;\r\n    t.Iogonek = 278;\r\n    t.kcommaaccent = 500;\r\n    t.minus = 584;\r\n    t.Icircumflex = 278;\r\n    t.ncaron = 556;\r\n    t.tcommaaccent = 278;\r\n    t.logicalnot = 584;\r\n    t.odieresis = 556;\r\n    t.udieresis = 556;\r\n    t.notequal = 549;\r\n    t.gcommaaccent = 556;\r\n    t.eth = 556;\r\n    t.zcaron = 500;\r\n    t.ncommaaccent = 556;\r\n    t.onesuperior = 333;\r\n    t.imacron = 278;\r\n    t.Euro = 556;\r\n  });\r\n  t.Symbol = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n    t.space = 250;\r\n    t.exclam = 333;\r\n    t.universal = 713;\r\n    t.numbersign = 500;\r\n    t.existential = 549;\r\n    t.percent = 833;\r\n    t.ampersand = 778;\r\n    t.suchthat = 439;\r\n    t.parenleft = 333;\r\n    t.parenright = 333;\r\n    t.asteriskmath = 500;\r\n    t.plus = 549;\r\n    t.comma = 250;\r\n    t.minus = 549;\r\n    t.period = 250;\r\n    t.slash = 278;\r\n    t.zero = 500;\r\n    t.one = 500;\r\n    t.two = 500;\r\n    t.three = 500;\r\n    t.four = 500;\r\n    t.five = 500;\r\n    t.six = 500;\r\n    t.seven = 500;\r\n    t.eight = 500;\r\n    t.nine = 500;\r\n    t.colon = 278;\r\n    t.semicolon = 278;\r\n    t.less = 549;\r\n    t.equal = 549;\r\n    t.greater = 549;\r\n    t.question = 444;\r\n    t.congruent = 549;\r\n    t.Alpha = 722;\r\n    t.Beta = 667;\r\n    t.Chi = 722;\r\n    t.Delta = 612;\r\n    t.Epsilon = 611;\r\n    t.Phi = 763;\r\n    t.Gamma = 603;\r\n    t.Eta = 722;\r\n    t.Iota = 333;\r\n    t.theta1 = 631;\r\n    t.Kappa = 722;\r\n    t.Lambda = 686;\r\n    t.Mu = 889;\r\n    t.Nu = 722;\r\n    t.Omicron = 722;\r\n    t.Pi = 768;\r\n    t.Theta = 741;\r\n    t.Rho = 556;\r\n    t.Sigma = 592;\r\n    t.Tau = 611;\r\n    t.Upsilon = 690;\r\n    t.sigma1 = 439;\r\n    t.Omega = 768;\r\n    t.Xi = 645;\r\n    t.Psi = 795;\r\n    t.Zeta = 611;\r\n    t.bracketleft = 333;\r\n    t.therefore = 863;\r\n    t.bracketright = 333;\r\n    t.perpendicular = 658;\r\n    t.underscore = 500;\r\n    t.radicalex = 500;\r\n    t.alpha = 631;\r\n    t.beta = 549;\r\n    t.chi = 549;\r\n    t.delta = 494;\r\n    t.epsilon = 439;\r\n    t.phi = 521;\r\n    t.gamma = 411;\r\n    t.eta = 603;\r\n    t.iota = 329;\r\n    t.phi1 = 603;\r\n    t.kappa = 549;\r\n    t.lambda = 549;\r\n    t.mu = 576;\r\n    t.nu = 521;\r\n    t.omicron = 549;\r\n    t.pi = 549;\r\n    t.theta = 521;\r\n    t.rho = 549;\r\n    t.sigma = 603;\r\n    t.tau = 439;\r\n    t.upsilon = 576;\r\n    t.omega1 = 713;\r\n    t.omega = 686;\r\n    t.xi = 493;\r\n    t.psi = 686;\r\n    t.zeta = 494;\r\n    t.braceleft = 480;\r\n    t.bar = 200;\r\n    t.braceright = 480;\r\n    t.similar = 549;\r\n    t.Euro = 750;\r\n    t.Upsilon1 = 620;\r\n    t.minute = 247;\r\n    t.lessequal = 549;\r\n    t.fraction = 167;\r\n    t.infinity = 713;\r\n    t.florin = 500;\r\n    t.club = 753;\r\n    t.diamond = 753;\r\n    t.heart = 753;\r\n    t.spade = 753;\r\n    t.arrowboth = 1042;\r\n    t.arrowleft = 987;\r\n    t.arrowup = 603;\r\n    t.arrowright = 987;\r\n    t.arrowdown = 603;\r\n    t.degree = 400;\r\n    t.plusminus = 549;\r\n    t.second = 411;\r\n    t.greaterequal = 549;\r\n    t.multiply = 549;\r\n    t.proportional = 713;\r\n    t.partialdiff = 494;\r\n    t.bullet = 460;\r\n    t.divide = 549;\r\n    t.notequal = 549;\r\n    t.equivalence = 549;\r\n    t.approxequal = 549;\r\n    t.ellipsis = 1000;\r\n    t.arrowvertex = 603;\r\n    t.arrowhorizex = 1000;\r\n    t.carriagereturn = 658;\r\n    t.aleph = 823;\r\n    t.Ifraktur = 686;\r\n    t.Rfraktur = 795;\r\n    t.weierstrass = 987;\r\n    t.circlemultiply = 768;\r\n    t.circleplus = 768;\r\n    t.emptyset = 823;\r\n    t.intersection = 768;\r\n    t.union = 768;\r\n    t.propersuperset = 713;\r\n    t.reflexsuperset = 713;\r\n    t.notsubset = 713;\r\n    t.propersubset = 713;\r\n    t.reflexsubset = 713;\r\n    t.element = 713;\r\n    t.notelement = 713;\r\n    t.angle = 768;\r\n    t.gradient = 713;\r\n    t.registerserif = 790;\r\n    t.copyrightserif = 790;\r\n    t.trademarkserif = 890;\r\n    t.product = 823;\r\n    t.radical = 549;\r\n    t.dotmath = 250;\r\n    t.logicalnot = 713;\r\n    t.logicaland = 603;\r\n    t.logicalor = 603;\r\n    t.arrowdblboth = 1042;\r\n    t.arrowdblleft = 987;\r\n    t.arrowdblup = 603;\r\n    t.arrowdblright = 987;\r\n    t.arrowdbldown = 603;\r\n    t.lozenge = 494;\r\n    t.angleleft = 329;\r\n    t.registersans = 790;\r\n    t.copyrightsans = 790;\r\n    t.trademarksans = 786;\r\n    t.summation = 713;\r\n    t.parenlefttp = 384;\r\n    t.parenleftex = 384;\r\n    t.parenleftbt = 384;\r\n    t.bracketlefttp = 384;\r\n    t.bracketleftex = 384;\r\n    t.bracketleftbt = 384;\r\n    t.bracelefttp = 494;\r\n    t.braceleftmid = 494;\r\n    t.braceleftbt = 494;\r\n    t.braceex = 494;\r\n    t.angleright = 329;\r\n    t.integral = 274;\r\n    t.integraltp = 686;\r\n    t.integralex = 686;\r\n    t.integralbt = 686;\r\n    t.parenrighttp = 384;\r\n    t.parenrightex = 384;\r\n    t.parenrightbt = 384;\r\n    t.bracketrighttp = 384;\r\n    t.bracketrightex = 384;\r\n    t.bracketrightbt = 384;\r\n    t.bracerighttp = 494;\r\n    t.bracerightmid = 494;\r\n    t.bracerightbt = 494;\r\n    t.apple = 790;\r\n  });\r\n  t[\"Times-Roman\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n    t.space = 250;\r\n    t.exclam = 333;\r\n    t.quotedbl = 408;\r\n    t.numbersign = 500;\r\n    t.dollar = 500;\r\n    t.percent = 833;\r\n    t.ampersand = 778;\r\n    t.quoteright = 333;\r\n    t.parenleft = 333;\r\n    t.parenright = 333;\r\n    t.asterisk = 500;\r\n    t.plus = 564;\r\n    t.comma = 250;\r\n    t.hyphen = 333;\r\n    t.period = 250;\r\n    t.slash = 278;\r\n    t.zero = 500;\r\n    t.one = 500;\r\n    t.two = 500;\r\n    t.three = 500;\r\n    t.four = 500;\r\n    t.five = 500;\r\n    t.six = 500;\r\n    t.seven = 500;\r\n    t.eight = 500;\r\n    t.nine = 500;\r\n    t.colon = 278;\r\n    t.semicolon = 278;\r\n    t.less = 564;\r\n    t.equal = 564;\r\n    t.greater = 564;\r\n    t.question = 444;\r\n    t.at = 921;\r\n    t.A = 722;\r\n    t.B = 667;\r\n    t.C = 667;\r\n    t.D = 722;\r\n    t.E = 611;\r\n    t.F = 556;\r\n    t.G = 722;\r\n    t.H = 722;\r\n    t.I = 333;\r\n    t.J = 389;\r\n    t.K = 722;\r\n    t.L = 611;\r\n    t.M = 889;\r\n    t.N = 722;\r\n    t.O = 722;\r\n    t.P = 556;\r\n    t.Q = 722;\r\n    t.R = 667;\r\n    t.S = 556;\r\n    t.T = 611;\r\n    t.U = 722;\r\n    t.V = 722;\r\n    t.W = 944;\r\n    t.X = 722;\r\n    t.Y = 722;\r\n    t.Z = 611;\r\n    t.bracketleft = 333;\r\n    t.backslash = 278;\r\n    t.bracketright = 333;\r\n    t.asciicircum = 469;\r\n    t.underscore = 500;\r\n    t.quoteleft = 333;\r\n    t.a = 444;\r\n    t.b = 500;\r\n    t.c = 444;\r\n    t.d = 500;\r\n    t.e = 444;\r\n    t.f = 333;\r\n    t.g = 500;\r\n    t.h = 500;\r\n    t.i = 278;\r\n    t.j = 278;\r\n    t.k = 500;\r\n    t.l = 278;\r\n    t.m = 778;\r\n    t.n = 500;\r\n    t.o = 500;\r\n    t.p = 500;\r\n    t.q = 500;\r\n    t.r = 333;\r\n    t.s = 389;\r\n    t.t = 278;\r\n    t.u = 500;\r\n    t.v = 500;\r\n    t.w = 722;\r\n    t.x = 500;\r\n    t.y = 500;\r\n    t.z = 444;\r\n    t.braceleft = 480;\r\n    t.bar = 200;\r\n    t.braceright = 480;\r\n    t.asciitilde = 541;\r\n    t.exclamdown = 333;\r\n    t.cent = 500;\r\n    t.sterling = 500;\r\n    t.fraction = 167;\r\n    t.yen = 500;\r\n    t.florin = 500;\r\n    t.section = 500;\r\n    t.currency = 500;\r\n    t.quotesingle = 180;\r\n    t.quotedblleft = 444;\r\n    t.guillemotleft = 500;\r\n    t.guilsinglleft = 333;\r\n    t.guilsinglright = 333;\r\n    t.fi = 556;\r\n    t.fl = 556;\r\n    t.endash = 500;\r\n    t.dagger = 500;\r\n    t.daggerdbl = 500;\r\n    t.periodcentered = 250;\r\n    t.paragraph = 453;\r\n    t.bullet = 350;\r\n    t.quotesinglbase = 333;\r\n    t.quotedblbase = 444;\r\n    t.quotedblright = 444;\r\n    t.guillemotright = 500;\r\n    t.ellipsis = 1000;\r\n    t.perthousand = 1000;\r\n    t.questiondown = 444;\r\n    t.grave = 333;\r\n    t.acute = 333;\r\n    t.circumflex = 333;\r\n    t.tilde = 333;\r\n    t.macron = 333;\r\n    t.breve = 333;\r\n    t.dotaccent = 333;\r\n    t.dieresis = 333;\r\n    t.ring = 333;\r\n    t.cedilla = 333;\r\n    t.hungarumlaut = 333;\r\n    t.ogonek = 333;\r\n    t.caron = 333;\r\n    t.emdash = 1000;\r\n    t.AE = 889;\r\n    t.ordfeminine = 276;\r\n    t.Lslash = 611;\r\n    t.Oslash = 722;\r\n    t.OE = 889;\r\n    t.ordmasculine = 310;\r\n    t.ae = 667;\r\n    t.dotlessi = 278;\r\n    t.lslash = 278;\r\n    t.oslash = 500;\r\n    t.oe = 722;\r\n    t.germandbls = 500;\r\n    t.Idieresis = 333;\r\n    t.eacute = 444;\r\n    t.abreve = 444;\r\n    t.uhungarumlaut = 500;\r\n    t.ecaron = 444;\r\n    t.Ydieresis = 722;\r\n    t.divide = 564;\r\n    t.Yacute = 722;\r\n    t.Acircumflex = 722;\r\n    t.aacute = 444;\r\n    t.Ucircumflex = 722;\r\n    t.yacute = 500;\r\n    t.scommaaccent = 389;\r\n    t.ecircumflex = 444;\r\n    t.Uring = 722;\r\n    t.Udieresis = 722;\r\n    t.aogonek = 444;\r\n    t.Uacute = 722;\r\n    t.uogonek = 500;\r\n    t.Edieresis = 611;\r\n    t.Dcroat = 722;\r\n    t.commaaccent = 250;\r\n    t.copyright = 760;\r\n    t.Emacron = 611;\r\n    t.ccaron = 444;\r\n    t.aring = 444;\r\n    t.Ncommaaccent = 722;\r\n    t.lacute = 278;\r\n    t.agrave = 444;\r\n    t.Tcommaaccent = 611;\r\n    t.Cacute = 667;\r\n    t.atilde = 444;\r\n    t.Edotaccent = 611;\r\n    t.scaron = 389;\r\n    t.scedilla = 389;\r\n    t.iacute = 278;\r\n    t.lozenge = 471;\r\n    t.Rcaron = 667;\r\n    t.Gcommaaccent = 722;\r\n    t.ucircumflex = 500;\r\n    t.acircumflex = 444;\r\n    t.Amacron = 722;\r\n    t.rcaron = 333;\r\n    t.ccedilla = 444;\r\n    t.Zdotaccent = 611;\r\n    t.Thorn = 556;\r\n    t.Omacron = 722;\r\n    t.Racute = 667;\r\n    t.Sacute = 556;\r\n    t.dcaron = 588;\r\n    t.Umacron = 722;\r\n    t.uring = 500;\r\n    t.threesuperior = 300;\r\n    t.Ograve = 722;\r\n    t.Agrave = 722;\r\n    t.Abreve = 722;\r\n    t.multiply = 564;\r\n    t.uacute = 500;\r\n    t.Tcaron = 611;\r\n    t.partialdiff = 476;\r\n    t.ydieresis = 500;\r\n    t.Nacute = 722;\r\n    t.icircumflex = 278;\r\n    t.Ecircumflex = 611;\r\n    t.adieresis = 444;\r\n    t.edieresis = 444;\r\n    t.cacute = 444;\r\n    t.nacute = 500;\r\n    t.umacron = 500;\r\n    t.Ncaron = 722;\r\n    t.Iacute = 333;\r\n    t.plusminus = 564;\r\n    t.brokenbar = 200;\r\n    t.registered = 760;\r\n    t.Gbreve = 722;\r\n    t.Idotaccent = 333;\r\n    t.summation = 600;\r\n    t.Egrave = 611;\r\n    t.racute = 333;\r\n    t.omacron = 500;\r\n    t.Zacute = 611;\r\n    t.Zcaron = 611;\r\n    t.greaterequal = 549;\r\n    t.Eth = 722;\r\n    t.Ccedilla = 667;\r\n    t.lcommaaccent = 278;\r\n    t.tcaron = 326;\r\n    t.eogonek = 444;\r\n    t.Uogonek = 722;\r\n    t.Aacute = 722;\r\n    t.Adieresis = 722;\r\n    t.egrave = 444;\r\n    t.zacute = 444;\r\n    t.iogonek = 278;\r\n    t.Oacute = 722;\r\n    t.oacute = 500;\r\n    t.amacron = 444;\r\n    t.sacute = 389;\r\n    t.idieresis = 278;\r\n    t.Ocircumflex = 722;\r\n    t.Ugrave = 722;\r\n    t.Delta = 612;\r\n    t.thorn = 500;\r\n    t.twosuperior = 300;\r\n    t.Odieresis = 722;\r\n    t.mu = 500;\r\n    t.igrave = 278;\r\n    t.ohungarumlaut = 500;\r\n    t.Eogonek = 611;\r\n    t.dcroat = 500;\r\n    t.threequarters = 750;\r\n    t.Scedilla = 556;\r\n    t.lcaron = 344;\r\n    t.Kcommaaccent = 722;\r\n    t.Lacute = 611;\r\n    t.trademark = 980;\r\n    t.edotaccent = 444;\r\n    t.Igrave = 333;\r\n    t.Imacron = 333;\r\n    t.Lcaron = 611;\r\n    t.onehalf = 750;\r\n    t.lessequal = 549;\r\n    t.ocircumflex = 500;\r\n    t.ntilde = 500;\r\n    t.Uhungarumlaut = 722;\r\n    t.Eacute = 611;\r\n    t.emacron = 444;\r\n    t.gbreve = 500;\r\n    t.onequarter = 750;\r\n    t.Scaron = 556;\r\n    t.Scommaaccent = 556;\r\n    t.Ohungarumlaut = 722;\r\n    t.degree = 400;\r\n    t.ograve = 500;\r\n    t.Ccaron = 667;\r\n    t.ugrave = 500;\r\n    t.radical = 453;\r\n    t.Dcaron = 722;\r\n    t.rcommaaccent = 333;\r\n    t.Ntilde = 722;\r\n    t.otilde = 500;\r\n    t.Rcommaaccent = 667;\r\n    t.Lcommaaccent = 611;\r\n    t.Atilde = 722;\r\n    t.Aogonek = 722;\r\n    t.Aring = 722;\r\n    t.Otilde = 722;\r\n    t.zdotaccent = 444;\r\n    t.Ecaron = 611;\r\n    t.Iogonek = 333;\r\n    t.kcommaaccent = 500;\r\n    t.minus = 564;\r\n    t.Icircumflex = 333;\r\n    t.ncaron = 500;\r\n    t.tcommaaccent = 278;\r\n    t.logicalnot = 564;\r\n    t.odieresis = 500;\r\n    t.udieresis = 500;\r\n    t.notequal = 549;\r\n    t.gcommaaccent = 500;\r\n    t.eth = 500;\r\n    t.zcaron = 444;\r\n    t.ncommaaccent = 500;\r\n    t.onesuperior = 300;\r\n    t.imacron = 278;\r\n    t.Euro = 500;\r\n  });\r\n  t[\"Times-Bold\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n    t.space = 250;\r\n    t.exclam = 333;\r\n    t.quotedbl = 555;\r\n    t.numbersign = 500;\r\n    t.dollar = 500;\r\n    t.percent = 1000;\r\n    t.ampersand = 833;\r\n    t.quoteright = 333;\r\n    t.parenleft = 333;\r\n    t.parenright = 333;\r\n    t.asterisk = 500;\r\n    t.plus = 570;\r\n    t.comma = 250;\r\n    t.hyphen = 333;\r\n    t.period = 250;\r\n    t.slash = 278;\r\n    t.zero = 500;\r\n    t.one = 500;\r\n    t.two = 500;\r\n    t.three = 500;\r\n    t.four = 500;\r\n    t.five = 500;\r\n    t.six = 500;\r\n    t.seven = 500;\r\n    t.eight = 500;\r\n    t.nine = 500;\r\n    t.colon = 333;\r\n    t.semicolon = 333;\r\n    t.less = 570;\r\n    t.equal = 570;\r\n    t.greater = 570;\r\n    t.question = 500;\r\n    t.at = 930;\r\n    t.A = 722;\r\n    t.B = 667;\r\n    t.C = 722;\r\n    t.D = 722;\r\n    t.E = 667;\r\n    t.F = 611;\r\n    t.G = 778;\r\n    t.H = 778;\r\n    t.I = 389;\r\n    t.J = 500;\r\n    t.K = 778;\r\n    t.L = 667;\r\n    t.M = 944;\r\n    t.N = 722;\r\n    t.O = 778;\r\n    t.P = 611;\r\n    t.Q = 778;\r\n    t.R = 722;\r\n    t.S = 556;\r\n    t.T = 667;\r\n    t.U = 722;\r\n    t.V = 722;\r\n    t.W = 1000;\r\n    t.X = 722;\r\n    t.Y = 722;\r\n    t.Z = 667;\r\n    t.bracketleft = 333;\r\n    t.backslash = 278;\r\n    t.bracketright = 333;\r\n    t.asciicircum = 581;\r\n    t.underscore = 500;\r\n    t.quoteleft = 333;\r\n    t.a = 500;\r\n    t.b = 556;\r\n    t.c = 444;\r\n    t.d = 556;\r\n    t.e = 444;\r\n    t.f = 333;\r\n    t.g = 500;\r\n    t.h = 556;\r\n    t.i = 278;\r\n    t.j = 333;\r\n    t.k = 556;\r\n    t.l = 278;\r\n    t.m = 833;\r\n    t.n = 556;\r\n    t.o = 500;\r\n    t.p = 556;\r\n    t.q = 556;\r\n    t.r = 444;\r\n    t.s = 389;\r\n    t.t = 333;\r\n    t.u = 556;\r\n    t.v = 500;\r\n    t.w = 722;\r\n    t.x = 500;\r\n    t.y = 500;\r\n    t.z = 444;\r\n    t.braceleft = 394;\r\n    t.bar = 220;\r\n    t.braceright = 394;\r\n    t.asciitilde = 520;\r\n    t.exclamdown = 333;\r\n    t.cent = 500;\r\n    t.sterling = 500;\r\n    t.fraction = 167;\r\n    t.yen = 500;\r\n    t.florin = 500;\r\n    t.section = 500;\r\n    t.currency = 500;\r\n    t.quotesingle = 278;\r\n    t.quotedblleft = 500;\r\n    t.guillemotleft = 500;\r\n    t.guilsinglleft = 333;\r\n    t.guilsinglright = 333;\r\n    t.fi = 556;\r\n    t.fl = 556;\r\n    t.endash = 500;\r\n    t.dagger = 500;\r\n    t.daggerdbl = 500;\r\n    t.periodcentered = 250;\r\n    t.paragraph = 540;\r\n    t.bullet = 350;\r\n    t.quotesinglbase = 333;\r\n    t.quotedblbase = 500;\r\n    t.quotedblright = 500;\r\n    t.guillemotright = 500;\r\n    t.ellipsis = 1000;\r\n    t.perthousand = 1000;\r\n    t.questiondown = 500;\r\n    t.grave = 333;\r\n    t.acute = 333;\r\n    t.circumflex = 333;\r\n    t.tilde = 333;\r\n    t.macron = 333;\r\n    t.breve = 333;\r\n    t.dotaccent = 333;\r\n    t.dieresis = 333;\r\n    t.ring = 333;\r\n    t.cedilla = 333;\r\n    t.hungarumlaut = 333;\r\n    t.ogonek = 333;\r\n    t.caron = 333;\r\n    t.emdash = 1000;\r\n    t.AE = 1000;\r\n    t.ordfeminine = 300;\r\n    t.Lslash = 667;\r\n    t.Oslash = 778;\r\n    t.OE = 1000;\r\n    t.ordmasculine = 330;\r\n    t.ae = 722;\r\n    t.dotlessi = 278;\r\n    t.lslash = 278;\r\n    t.oslash = 500;\r\n    t.oe = 722;\r\n    t.germandbls = 556;\r\n    t.Idieresis = 389;\r\n    t.eacute = 444;\r\n    t.abreve = 500;\r\n    t.uhungarumlaut = 556;\r\n    t.ecaron = 444;\r\n    t.Ydieresis = 722;\r\n    t.divide = 570;\r\n    t.Yacute = 722;\r\n    t.Acircumflex = 722;\r\n    t.aacute = 500;\r\n    t.Ucircumflex = 722;\r\n    t.yacute = 500;\r\n    t.scommaaccent = 389;\r\n    t.ecircumflex = 444;\r\n    t.Uring = 722;\r\n    t.Udieresis = 722;\r\n    t.aogonek = 500;\r\n    t.Uacute = 722;\r\n    t.uogonek = 556;\r\n    t.Edieresis = 667;\r\n    t.Dcroat = 722;\r\n    t.commaaccent = 250;\r\n    t.copyright = 747;\r\n    t.Emacron = 667;\r\n    t.ccaron = 444;\r\n    t.aring = 500;\r\n    t.Ncommaaccent = 722;\r\n    t.lacute = 278;\r\n    t.agrave = 500;\r\n    t.Tcommaaccent = 667;\r\n    t.Cacute = 722;\r\n    t.atilde = 500;\r\n    t.Edotaccent = 667;\r\n    t.scaron = 389;\r\n    t.scedilla = 389;\r\n    t.iacute = 278;\r\n    t.lozenge = 494;\r\n    t.Rcaron = 722;\r\n    t.Gcommaaccent = 778;\r\n    t.ucircumflex = 556;\r\n    t.acircumflex = 500;\r\n    t.Amacron = 722;\r\n    t.rcaron = 444;\r\n    t.ccedilla = 444;\r\n    t.Zdotaccent = 667;\r\n    t.Thorn = 611;\r\n    t.Omacron = 778;\r\n    t.Racute = 722;\r\n    t.Sacute = 556;\r\n    t.dcaron = 672;\r\n    t.Umacron = 722;\r\n    t.uring = 556;\r\n    t.threesuperior = 300;\r\n    t.Ograve = 778;\r\n    t.Agrave = 722;\r\n    t.Abreve = 722;\r\n    t.multiply = 570;\r\n    t.uacute = 556;\r\n    t.Tcaron = 667;\r\n    t.partialdiff = 494;\r\n    t.ydieresis = 500;\r\n    t.Nacute = 722;\r\n    t.icircumflex = 278;\r\n    t.Ecircumflex = 667;\r\n    t.adieresis = 500;\r\n    t.edieresis = 444;\r\n    t.cacute = 444;\r\n    t.nacute = 556;\r\n    t.umacron = 556;\r\n    t.Ncaron = 722;\r\n    t.Iacute = 389;\r\n    t.plusminus = 570;\r\n    t.brokenbar = 220;\r\n    t.registered = 747;\r\n    t.Gbreve = 778;\r\n    t.Idotaccent = 389;\r\n    t.summation = 600;\r\n    t.Egrave = 667;\r\n    t.racute = 444;\r\n    t.omacron = 500;\r\n    t.Zacute = 667;\r\n    t.Zcaron = 667;\r\n    t.greaterequal = 549;\r\n    t.Eth = 722;\r\n    t.Ccedilla = 722;\r\n    t.lcommaaccent = 278;\r\n    t.tcaron = 416;\r\n    t.eogonek = 444;\r\n    t.Uogonek = 722;\r\n    t.Aacute = 722;\r\n    t.Adieresis = 722;\r\n    t.egrave = 444;\r\n    t.zacute = 444;\r\n    t.iogonek = 278;\r\n    t.Oacute = 778;\r\n    t.oacute = 500;\r\n    t.amacron = 500;\r\n    t.sacute = 389;\r\n    t.idieresis = 278;\r\n    t.Ocircumflex = 778;\r\n    t.Ugrave = 722;\r\n    t.Delta = 612;\r\n    t.thorn = 556;\r\n    t.twosuperior = 300;\r\n    t.Odieresis = 778;\r\n    t.mu = 556;\r\n    t.igrave = 278;\r\n    t.ohungarumlaut = 500;\r\n    t.Eogonek = 667;\r\n    t.dcroat = 556;\r\n    t.threequarters = 750;\r\n    t.Scedilla = 556;\r\n    t.lcaron = 394;\r\n    t.Kcommaaccent = 778;\r\n    t.Lacute = 667;\r\n    t.trademark = 1000;\r\n    t.edotaccent = 444;\r\n    t.Igrave = 389;\r\n    t.Imacron = 389;\r\n    t.Lcaron = 667;\r\n    t.onehalf = 750;\r\n    t.lessequal = 549;\r\n    t.ocircumflex = 500;\r\n    t.ntilde = 556;\r\n    t.Uhungarumlaut = 722;\r\n    t.Eacute = 667;\r\n    t.emacron = 444;\r\n    t.gbreve = 500;\r\n    t.onequarter = 750;\r\n    t.Scaron = 556;\r\n    t.Scommaaccent = 556;\r\n    t.Ohungarumlaut = 778;\r\n    t.degree = 400;\r\n    t.ograve = 500;\r\n    t.Ccaron = 722;\r\n    t.ugrave = 556;\r\n    t.radical = 549;\r\n    t.Dcaron = 722;\r\n    t.rcommaaccent = 444;\r\n    t.Ntilde = 722;\r\n    t.otilde = 500;\r\n    t.Rcommaaccent = 722;\r\n    t.Lcommaaccent = 667;\r\n    t.Atilde = 722;\r\n    t.Aogonek = 722;\r\n    t.Aring = 722;\r\n    t.Otilde = 778;\r\n    t.zdotaccent = 444;\r\n    t.Ecaron = 667;\r\n    t.Iogonek = 389;\r\n    t.kcommaaccent = 556;\r\n    t.minus = 570;\r\n    t.Icircumflex = 389;\r\n    t.ncaron = 556;\r\n    t.tcommaaccent = 333;\r\n    t.logicalnot = 570;\r\n    t.odieresis = 500;\r\n    t.udieresis = 556;\r\n    t.notequal = 549;\r\n    t.gcommaaccent = 500;\r\n    t.eth = 500;\r\n    t.zcaron = 444;\r\n    t.ncommaaccent = 556;\r\n    t.onesuperior = 300;\r\n    t.imacron = 278;\r\n    t.Euro = 500;\r\n  });\r\n  t[\"Times-BoldItalic\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n    t.space = 250;\r\n    t.exclam = 389;\r\n    t.quotedbl = 555;\r\n    t.numbersign = 500;\r\n    t.dollar = 500;\r\n    t.percent = 833;\r\n    t.ampersand = 778;\r\n    t.quoteright = 333;\r\n    t.parenleft = 333;\r\n    t.parenright = 333;\r\n    t.asterisk = 500;\r\n    t.plus = 570;\r\n    t.comma = 250;\r\n    t.hyphen = 333;\r\n    t.period = 250;\r\n    t.slash = 278;\r\n    t.zero = 500;\r\n    t.one = 500;\r\n    t.two = 500;\r\n    t.three = 500;\r\n    t.four = 500;\r\n    t.five = 500;\r\n    t.six = 500;\r\n    t.seven = 500;\r\n    t.eight = 500;\r\n    t.nine = 500;\r\n    t.colon = 333;\r\n    t.semicolon = 333;\r\n    t.less = 570;\r\n    t.equal = 570;\r\n    t.greater = 570;\r\n    t.question = 500;\r\n    t.at = 832;\r\n    t.A = 667;\r\n    t.B = 667;\r\n    t.C = 667;\r\n    t.D = 722;\r\n    t.E = 667;\r\n    t.F = 667;\r\n    t.G = 722;\r\n    t.H = 778;\r\n    t.I = 389;\r\n    t.J = 500;\r\n    t.K = 667;\r\n    t.L = 611;\r\n    t.M = 889;\r\n    t.N = 722;\r\n    t.O = 722;\r\n    t.P = 611;\r\n    t.Q = 722;\r\n    t.R = 667;\r\n    t.S = 556;\r\n    t.T = 611;\r\n    t.U = 722;\r\n    t.V = 667;\r\n    t.W = 889;\r\n    t.X = 667;\r\n    t.Y = 611;\r\n    t.Z = 611;\r\n    t.bracketleft = 333;\r\n    t.backslash = 278;\r\n    t.bracketright = 333;\r\n    t.asciicircum = 570;\r\n    t.underscore = 500;\r\n    t.quoteleft = 333;\r\n    t.a = 500;\r\n    t.b = 500;\r\n    t.c = 444;\r\n    t.d = 500;\r\n    t.e = 444;\r\n    t.f = 333;\r\n    t.g = 500;\r\n    t.h = 556;\r\n    t.i = 278;\r\n    t.j = 278;\r\n    t.k = 500;\r\n    t.l = 278;\r\n    t.m = 778;\r\n    t.n = 556;\r\n    t.o = 500;\r\n    t.p = 500;\r\n    t.q = 500;\r\n    t.r = 389;\r\n    t.s = 389;\r\n    t.t = 278;\r\n    t.u = 556;\r\n    t.v = 444;\r\n    t.w = 667;\r\n    t.x = 500;\r\n    t.y = 444;\r\n    t.z = 389;\r\n    t.braceleft = 348;\r\n    t.bar = 220;\r\n    t.braceright = 348;\r\n    t.asciitilde = 570;\r\n    t.exclamdown = 389;\r\n    t.cent = 500;\r\n    t.sterling = 500;\r\n    t.fraction = 167;\r\n    t.yen = 500;\r\n    t.florin = 500;\r\n    t.section = 500;\r\n    t.currency = 500;\r\n    t.quotesingle = 278;\r\n    t.quotedblleft = 500;\r\n    t.guillemotleft = 500;\r\n    t.guilsinglleft = 333;\r\n    t.guilsinglright = 333;\r\n    t.fi = 556;\r\n    t.fl = 556;\r\n    t.endash = 500;\r\n    t.dagger = 500;\r\n    t.daggerdbl = 500;\r\n    t.periodcentered = 250;\r\n    t.paragraph = 500;\r\n    t.bullet = 350;\r\n    t.quotesinglbase = 333;\r\n    t.quotedblbase = 500;\r\n    t.quotedblright = 500;\r\n    t.guillemotright = 500;\r\n    t.ellipsis = 1000;\r\n    t.perthousand = 1000;\r\n    t.questiondown = 500;\r\n    t.grave = 333;\r\n    t.acute = 333;\r\n    t.circumflex = 333;\r\n    t.tilde = 333;\r\n    t.macron = 333;\r\n    t.breve = 333;\r\n    t.dotaccent = 333;\r\n    t.dieresis = 333;\r\n    t.ring = 333;\r\n    t.cedilla = 333;\r\n    t.hungarumlaut = 333;\r\n    t.ogonek = 333;\r\n    t.caron = 333;\r\n    t.emdash = 1000;\r\n    t.AE = 944;\r\n    t.ordfeminine = 266;\r\n    t.Lslash = 611;\r\n    t.Oslash = 722;\r\n    t.OE = 944;\r\n    t.ordmasculine = 300;\r\n    t.ae = 722;\r\n    t.dotlessi = 278;\r\n    t.lslash = 278;\r\n    t.oslash = 500;\r\n    t.oe = 722;\r\n    t.germandbls = 500;\r\n    t.Idieresis = 389;\r\n    t.eacute = 444;\r\n    t.abreve = 500;\r\n    t.uhungarumlaut = 556;\r\n    t.ecaron = 444;\r\n    t.Ydieresis = 611;\r\n    t.divide = 570;\r\n    t.Yacute = 611;\r\n    t.Acircumflex = 667;\r\n    t.aacute = 500;\r\n    t.Ucircumflex = 722;\r\n    t.yacute = 444;\r\n    t.scommaaccent = 389;\r\n    t.ecircumflex = 444;\r\n    t.Uring = 722;\r\n    t.Udieresis = 722;\r\n    t.aogonek = 500;\r\n    t.Uacute = 722;\r\n    t.uogonek = 556;\r\n    t.Edieresis = 667;\r\n    t.Dcroat = 722;\r\n    t.commaaccent = 250;\r\n    t.copyright = 747;\r\n    t.Emacron = 667;\r\n    t.ccaron = 444;\r\n    t.aring = 500;\r\n    t.Ncommaaccent = 722;\r\n    t.lacute = 278;\r\n    t.agrave = 500;\r\n    t.Tcommaaccent = 611;\r\n    t.Cacute = 667;\r\n    t.atilde = 500;\r\n    t.Edotaccent = 667;\r\n    t.scaron = 389;\r\n    t.scedilla = 389;\r\n    t.iacute = 278;\r\n    t.lozenge = 494;\r\n    t.Rcaron = 667;\r\n    t.Gcommaaccent = 722;\r\n    t.ucircumflex = 556;\r\n    t.acircumflex = 500;\r\n    t.Amacron = 667;\r\n    t.rcaron = 389;\r\n    t.ccedilla = 444;\r\n    t.Zdotaccent = 611;\r\n    t.Thorn = 611;\r\n    t.Omacron = 722;\r\n    t.Racute = 667;\r\n    t.Sacute = 556;\r\n    t.dcaron = 608;\r\n    t.Umacron = 722;\r\n    t.uring = 556;\r\n    t.threesuperior = 300;\r\n    t.Ograve = 722;\r\n    t.Agrave = 667;\r\n    t.Abreve = 667;\r\n    t.multiply = 570;\r\n    t.uacute = 556;\r\n    t.Tcaron = 611;\r\n    t.partialdiff = 494;\r\n    t.ydieresis = 444;\r\n    t.Nacute = 722;\r\n    t.icircumflex = 278;\r\n    t.Ecircumflex = 667;\r\n    t.adieresis = 500;\r\n    t.edieresis = 444;\r\n    t.cacute = 444;\r\n    t.nacute = 556;\r\n    t.umacron = 556;\r\n    t.Ncaron = 722;\r\n    t.Iacute = 389;\r\n    t.plusminus = 570;\r\n    t.brokenbar = 220;\r\n    t.registered = 747;\r\n    t.Gbreve = 722;\r\n    t.Idotaccent = 389;\r\n    t.summation = 600;\r\n    t.Egrave = 667;\r\n    t.racute = 389;\r\n    t.omacron = 500;\r\n    t.Zacute = 611;\r\n    t.Zcaron = 611;\r\n    t.greaterequal = 549;\r\n    t.Eth = 722;\r\n    t.Ccedilla = 667;\r\n    t.lcommaaccent = 278;\r\n    t.tcaron = 366;\r\n    t.eogonek = 444;\r\n    t.Uogonek = 722;\r\n    t.Aacute = 667;\r\n    t.Adieresis = 667;\r\n    t.egrave = 444;\r\n    t.zacute = 389;\r\n    t.iogonek = 278;\r\n    t.Oacute = 722;\r\n    t.oacute = 500;\r\n    t.amacron = 500;\r\n    t.sacute = 389;\r\n    t.idieresis = 278;\r\n    t.Ocircumflex = 722;\r\n    t.Ugrave = 722;\r\n    t.Delta = 612;\r\n    t.thorn = 500;\r\n    t.twosuperior = 300;\r\n    t.Odieresis = 722;\r\n    t.mu = 576;\r\n    t.igrave = 278;\r\n    t.ohungarumlaut = 500;\r\n    t.Eogonek = 667;\r\n    t.dcroat = 500;\r\n    t.threequarters = 750;\r\n    t.Scedilla = 556;\r\n    t.lcaron = 382;\r\n    t.Kcommaaccent = 667;\r\n    t.Lacute = 611;\r\n    t.trademark = 1000;\r\n    t.edotaccent = 444;\r\n    t.Igrave = 389;\r\n    t.Imacron = 389;\r\n    t.Lcaron = 611;\r\n    t.onehalf = 750;\r\n    t.lessequal = 549;\r\n    t.ocircumflex = 500;\r\n    t.ntilde = 556;\r\n    t.Uhungarumlaut = 722;\r\n    t.Eacute = 667;\r\n    t.emacron = 444;\r\n    t.gbreve = 500;\r\n    t.onequarter = 750;\r\n    t.Scaron = 556;\r\n    t.Scommaaccent = 556;\r\n    t.Ohungarumlaut = 722;\r\n    t.degree = 400;\r\n    t.ograve = 500;\r\n    t.Ccaron = 667;\r\n    t.ugrave = 556;\r\n    t.radical = 549;\r\n    t.Dcaron = 722;\r\n    t.rcommaaccent = 389;\r\n    t.Ntilde = 722;\r\n    t.otilde = 500;\r\n    t.Rcommaaccent = 667;\r\n    t.Lcommaaccent = 611;\r\n    t.Atilde = 667;\r\n    t.Aogonek = 667;\r\n    t.Aring = 667;\r\n    t.Otilde = 722;\r\n    t.zdotaccent = 389;\r\n    t.Ecaron = 667;\r\n    t.Iogonek = 389;\r\n    t.kcommaaccent = 500;\r\n    t.minus = 606;\r\n    t.Icircumflex = 389;\r\n    t.ncaron = 556;\r\n    t.tcommaaccent = 278;\r\n    t.logicalnot = 606;\r\n    t.odieresis = 500;\r\n    t.udieresis = 556;\r\n    t.notequal = 549;\r\n    t.gcommaaccent = 500;\r\n    t.eth = 500;\r\n    t.zcaron = 389;\r\n    t.ncommaaccent = 556;\r\n    t.onesuperior = 300;\r\n    t.imacron = 278;\r\n    t.Euro = 500;\r\n  });\r\n  t[\"Times-Italic\"] = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n    t.space = 250;\r\n    t.exclam = 333;\r\n    t.quotedbl = 420;\r\n    t.numbersign = 500;\r\n    t.dollar = 500;\r\n    t.percent = 833;\r\n    t.ampersand = 778;\r\n    t.quoteright = 333;\r\n    t.parenleft = 333;\r\n    t.parenright = 333;\r\n    t.asterisk = 500;\r\n    t.plus = 675;\r\n    t.comma = 250;\r\n    t.hyphen = 333;\r\n    t.period = 250;\r\n    t.slash = 278;\r\n    t.zero = 500;\r\n    t.one = 500;\r\n    t.two = 500;\r\n    t.three = 500;\r\n    t.four = 500;\r\n    t.five = 500;\r\n    t.six = 500;\r\n    t.seven = 500;\r\n    t.eight = 500;\r\n    t.nine = 500;\r\n    t.colon = 333;\r\n    t.semicolon = 333;\r\n    t.less = 675;\r\n    t.equal = 675;\r\n    t.greater = 675;\r\n    t.question = 500;\r\n    t.at = 920;\r\n    t.A = 611;\r\n    t.B = 611;\r\n    t.C = 667;\r\n    t.D = 722;\r\n    t.E = 611;\r\n    t.F = 611;\r\n    t.G = 722;\r\n    t.H = 722;\r\n    t.I = 333;\r\n    t.J = 444;\r\n    t.K = 667;\r\n    t.L = 556;\r\n    t.M = 833;\r\n    t.N = 667;\r\n    t.O = 722;\r\n    t.P = 611;\r\n    t.Q = 722;\r\n    t.R = 611;\r\n    t.S = 500;\r\n    t.T = 556;\r\n    t.U = 722;\r\n    t.V = 611;\r\n    t.W = 833;\r\n    t.X = 611;\r\n    t.Y = 556;\r\n    t.Z = 556;\r\n    t.bracketleft = 389;\r\n    t.backslash = 278;\r\n    t.bracketright = 389;\r\n    t.asciicircum = 422;\r\n    t.underscore = 500;\r\n    t.quoteleft = 333;\r\n    t.a = 500;\r\n    t.b = 500;\r\n    t.c = 444;\r\n    t.d = 500;\r\n    t.e = 444;\r\n    t.f = 278;\r\n    t.g = 500;\r\n    t.h = 500;\r\n    t.i = 278;\r\n    t.j = 278;\r\n    t.k = 444;\r\n    t.l = 278;\r\n    t.m = 722;\r\n    t.n = 500;\r\n    t.o = 500;\r\n    t.p = 500;\r\n    t.q = 500;\r\n    t.r = 389;\r\n    t.s = 389;\r\n    t.t = 278;\r\n    t.u = 500;\r\n    t.v = 444;\r\n    t.w = 667;\r\n    t.x = 444;\r\n    t.y = 444;\r\n    t.z = 389;\r\n    t.braceleft = 400;\r\n    t.bar = 275;\r\n    t.braceright = 400;\r\n    t.asciitilde = 541;\r\n    t.exclamdown = 389;\r\n    t.cent = 500;\r\n    t.sterling = 500;\r\n    t.fraction = 167;\r\n    t.yen = 500;\r\n    t.florin = 500;\r\n    t.section = 500;\r\n    t.currency = 500;\r\n    t.quotesingle = 214;\r\n    t.quotedblleft = 556;\r\n    t.guillemotleft = 500;\r\n    t.guilsinglleft = 333;\r\n    t.guilsinglright = 333;\r\n    t.fi = 500;\r\n    t.fl = 500;\r\n    t.endash = 500;\r\n    t.dagger = 500;\r\n    t.daggerdbl = 500;\r\n    t.periodcentered = 250;\r\n    t.paragraph = 523;\r\n    t.bullet = 350;\r\n    t.quotesinglbase = 333;\r\n    t.quotedblbase = 556;\r\n    t.quotedblright = 556;\r\n    t.guillemotright = 500;\r\n    t.ellipsis = 889;\r\n    t.perthousand = 1000;\r\n    t.questiondown = 500;\r\n    t.grave = 333;\r\n    t.acute = 333;\r\n    t.circumflex = 333;\r\n    t.tilde = 333;\r\n    t.macron = 333;\r\n    t.breve = 333;\r\n    t.dotaccent = 333;\r\n    t.dieresis = 333;\r\n    t.ring = 333;\r\n    t.cedilla = 333;\r\n    t.hungarumlaut = 333;\r\n    t.ogonek = 333;\r\n    t.caron = 333;\r\n    t.emdash = 889;\r\n    t.AE = 889;\r\n    t.ordfeminine = 276;\r\n    t.Lslash = 556;\r\n    t.Oslash = 722;\r\n    t.OE = 944;\r\n    t.ordmasculine = 310;\r\n    t.ae = 667;\r\n    t.dotlessi = 278;\r\n    t.lslash = 278;\r\n    t.oslash = 500;\r\n    t.oe = 667;\r\n    t.germandbls = 500;\r\n    t.Idieresis = 333;\r\n    t.eacute = 444;\r\n    t.abreve = 500;\r\n    t.uhungarumlaut = 500;\r\n    t.ecaron = 444;\r\n    t.Ydieresis = 556;\r\n    t.divide = 675;\r\n    t.Yacute = 556;\r\n    t.Acircumflex = 611;\r\n    t.aacute = 500;\r\n    t.Ucircumflex = 722;\r\n    t.yacute = 444;\r\n    t.scommaaccent = 389;\r\n    t.ecircumflex = 444;\r\n    t.Uring = 722;\r\n    t.Udieresis = 722;\r\n    t.aogonek = 500;\r\n    t.Uacute = 722;\r\n    t.uogonek = 500;\r\n    t.Edieresis = 611;\r\n    t.Dcroat = 722;\r\n    t.commaaccent = 250;\r\n    t.copyright = 760;\r\n    t.Emacron = 611;\r\n    t.ccaron = 444;\r\n    t.aring = 500;\r\n    t.Ncommaaccent = 667;\r\n    t.lacute = 278;\r\n    t.agrave = 500;\r\n    t.Tcommaaccent = 556;\r\n    t.Cacute = 667;\r\n    t.atilde = 500;\r\n    t.Edotaccent = 611;\r\n    t.scaron = 389;\r\n    t.scedilla = 389;\r\n    t.iacute = 278;\r\n    t.lozenge = 471;\r\n    t.Rcaron = 611;\r\n    t.Gcommaaccent = 722;\r\n    t.ucircumflex = 500;\r\n    t.acircumflex = 500;\r\n    t.Amacron = 611;\r\n    t.rcaron = 389;\r\n    t.ccedilla = 444;\r\n    t.Zdotaccent = 556;\r\n    t.Thorn = 611;\r\n    t.Omacron = 722;\r\n    t.Racute = 611;\r\n    t.Sacute = 500;\r\n    t.dcaron = 544;\r\n    t.Umacron = 722;\r\n    t.uring = 500;\r\n    t.threesuperior = 300;\r\n    t.Ograve = 722;\r\n    t.Agrave = 611;\r\n    t.Abreve = 611;\r\n    t.multiply = 675;\r\n    t.uacute = 500;\r\n    t.Tcaron = 556;\r\n    t.partialdiff = 476;\r\n    t.ydieresis = 444;\r\n    t.Nacute = 667;\r\n    t.icircumflex = 278;\r\n    t.Ecircumflex = 611;\r\n    t.adieresis = 500;\r\n    t.edieresis = 444;\r\n    t.cacute = 444;\r\n    t.nacute = 500;\r\n    t.umacron = 500;\r\n    t.Ncaron = 667;\r\n    t.Iacute = 333;\r\n    t.plusminus = 675;\r\n    t.brokenbar = 275;\r\n    t.registered = 760;\r\n    t.Gbreve = 722;\r\n    t.Idotaccent = 333;\r\n    t.summation = 600;\r\n    t.Egrave = 611;\r\n    t.racute = 389;\r\n    t.omacron = 500;\r\n    t.Zacute = 556;\r\n    t.Zcaron = 556;\r\n    t.greaterequal = 549;\r\n    t.Eth = 722;\r\n    t.Ccedilla = 667;\r\n    t.lcommaaccent = 278;\r\n    t.tcaron = 300;\r\n    t.eogonek = 444;\r\n    t.Uogonek = 722;\r\n    t.Aacute = 611;\r\n    t.Adieresis = 611;\r\n    t.egrave = 444;\r\n    t.zacute = 389;\r\n    t.iogonek = 278;\r\n    t.Oacute = 722;\r\n    t.oacute = 500;\r\n    t.amacron = 500;\r\n    t.sacute = 389;\r\n    t.idieresis = 278;\r\n    t.Ocircumflex = 722;\r\n    t.Ugrave = 722;\r\n    t.Delta = 612;\r\n    t.thorn = 500;\r\n    t.twosuperior = 300;\r\n    t.Odieresis = 722;\r\n    t.mu = 500;\r\n    t.igrave = 278;\r\n    t.ohungarumlaut = 500;\r\n    t.Eogonek = 611;\r\n    t.dcroat = 500;\r\n    t.threequarters = 750;\r\n    t.Scedilla = 500;\r\n    t.lcaron = 300;\r\n    t.Kcommaaccent = 667;\r\n    t.Lacute = 556;\r\n    t.trademark = 980;\r\n    t.edotaccent = 444;\r\n    t.Igrave = 333;\r\n    t.Imacron = 333;\r\n    t.Lcaron = 611;\r\n    t.onehalf = 750;\r\n    t.lessequal = 549;\r\n    t.ocircumflex = 500;\r\n    t.ntilde = 500;\r\n    t.Uhungarumlaut = 722;\r\n    t.Eacute = 611;\r\n    t.emacron = 444;\r\n    t.gbreve = 500;\r\n    t.onequarter = 750;\r\n    t.Scaron = 500;\r\n    t.Scommaaccent = 500;\r\n    t.Ohungarumlaut = 722;\r\n    t.degree = 400;\r\n    t.ograve = 500;\r\n    t.Ccaron = 667;\r\n    t.ugrave = 500;\r\n    t.radical = 453;\r\n    t.Dcaron = 722;\r\n    t.rcommaaccent = 389;\r\n    t.Ntilde = 667;\r\n    t.otilde = 500;\r\n    t.Rcommaaccent = 611;\r\n    t.Lcommaaccent = 556;\r\n    t.Atilde = 611;\r\n    t.Aogonek = 611;\r\n    t.Aring = 611;\r\n    t.Otilde = 722;\r\n    t.zdotaccent = 389;\r\n    t.Ecaron = 611;\r\n    t.Iogonek = 333;\r\n    t.kcommaaccent = 444;\r\n    t.minus = 675;\r\n    t.Icircumflex = 333;\r\n    t.ncaron = 500;\r\n    t.tcommaaccent = 278;\r\n    t.logicalnot = 675;\r\n    t.odieresis = 500;\r\n    t.udieresis = 500;\r\n    t.notequal = 549;\r\n    t.gcommaaccent = 500;\r\n    t.eth = 500;\r\n    t.zcaron = 389;\r\n    t.ncommaaccent = 500;\r\n    t.onesuperior = 300;\r\n    t.imacron = 278;\r\n    t.Euro = 500;\r\n  });\r\n  t.ZapfDingbats = (0, _core_utils.getLookupTableFactory)(function (t) {\r\n    t.space = 278;\r\n    t.a1 = 974;\r\n    t.a2 = 961;\r\n    t.a202 = 974;\r\n    t.a3 = 980;\r\n    t.a4 = 719;\r\n    t.a5 = 789;\r\n    t.a119 = 790;\r\n    t.a118 = 791;\r\n    t.a117 = 690;\r\n    t.a11 = 960;\r\n    t.a12 = 939;\r\n    t.a13 = 549;\r\n    t.a14 = 855;\r\n    t.a15 = 911;\r\n    t.a16 = 933;\r\n    t.a105 = 911;\r\n    t.a17 = 945;\r\n    t.a18 = 974;\r\n    t.a19 = 755;\r\n    t.a20 = 846;\r\n    t.a21 = 762;\r\n    t.a22 = 761;\r\n    t.a23 = 571;\r\n    t.a24 = 677;\r\n    t.a25 = 763;\r\n    t.a26 = 760;\r\n    t.a27 = 759;\r\n    t.a28 = 754;\r\n    t.a6 = 494;\r\n    t.a7 = 552;\r\n    t.a8 = 537;\r\n    t.a9 = 577;\r\n    t.a10 = 692;\r\n    t.a29 = 786;\r\n    t.a30 = 788;\r\n    t.a31 = 788;\r\n    t.a32 = 790;\r\n    t.a33 = 793;\r\n    t.a34 = 794;\r\n    t.a35 = 816;\r\n    t.a36 = 823;\r\n    t.a37 = 789;\r\n    t.a38 = 841;\r\n    t.a39 = 823;\r\n    t.a40 = 833;\r\n    t.a41 = 816;\r\n    t.a42 = 831;\r\n    t.a43 = 923;\r\n    t.a44 = 744;\r\n    t.a45 = 723;\r\n    t.a46 = 749;\r\n    t.a47 = 790;\r\n    t.a48 = 792;\r\n    t.a49 = 695;\r\n    t.a50 = 776;\r\n    t.a51 = 768;\r\n    t.a52 = 792;\r\n    t.a53 = 759;\r\n    t.a54 = 707;\r\n    t.a55 = 708;\r\n    t.a56 = 682;\r\n    t.a57 = 701;\r\n    t.a58 = 826;\r\n    t.a59 = 815;\r\n    t.a60 = 789;\r\n    t.a61 = 789;\r\n    t.a62 = 707;\r\n    t.a63 = 687;\r\n    t.a64 = 696;\r\n    t.a65 = 689;\r\n    t.a66 = 786;\r\n    t.a67 = 787;\r\n    t.a68 = 713;\r\n    t.a69 = 791;\r\n    t.a70 = 785;\r\n    t.a71 = 791;\r\n    t.a72 = 873;\r\n    t.a73 = 761;\r\n    t.a74 = 762;\r\n    t.a203 = 762;\r\n    t.a75 = 759;\r\n    t.a204 = 759;\r\n    t.a76 = 892;\r\n    t.a77 = 892;\r\n    t.a78 = 788;\r\n    t.a79 = 784;\r\n    t.a81 = 438;\r\n    t.a82 = 138;\r\n    t.a83 = 277;\r\n    t.a84 = 415;\r\n    t.a97 = 392;\r\n    t.a98 = 392;\r\n    t.a99 = 668;\r\n    t.a100 = 668;\r\n    t.a89 = 390;\r\n    t.a90 = 390;\r\n    t.a93 = 317;\r\n    t.a94 = 317;\r\n    t.a91 = 276;\r\n    t.a92 = 276;\r\n    t.a205 = 509;\r\n    t.a85 = 509;\r\n    t.a206 = 410;\r\n    t.a86 = 410;\r\n    t.a87 = 234;\r\n    t.a88 = 234;\r\n    t.a95 = 334;\r\n    t.a96 = 334;\r\n    t.a101 = 732;\r\n    t.a102 = 544;\r\n    t.a103 = 544;\r\n    t.a104 = 910;\r\n    t.a106 = 667;\r\n    t.a107 = 760;\r\n    t.a108 = 760;\r\n    t.a112 = 776;\r\n    t.a111 = 595;\r\n    t.a110 = 694;\r\n    t.a109 = 626;\r\n    t.a120 = 788;\r\n    t.a121 = 788;\r\n    t.a122 = 788;\r\n    t.a123 = 788;\r\n    t.a124 = 788;\r\n    t.a125 = 788;\r\n    t.a126 = 788;\r\n    t.a127 = 788;\r\n    t.a128 = 788;\r\n    t.a129 = 788;\r\n    t.a130 = 788;\r\n    t.a131 = 788;\r\n    t.a132 = 788;\r\n    t.a133 = 788;\r\n    t.a134 = 788;\r\n    t.a135 = 788;\r\n    t.a136 = 788;\r\n    t.a137 = 788;\r\n    t.a138 = 788;\r\n    t.a139 = 788;\r\n    t.a140 = 788;\r\n    t.a141 = 788;\r\n    t.a142 = 788;\r\n    t.a143 = 788;\r\n    t.a144 = 788;\r\n    t.a145 = 788;\r\n    t.a146 = 788;\r\n    t.a147 = 788;\r\n    t.a148 = 788;\r\n    t.a149 = 788;\r\n    t.a150 = 788;\r\n    t.a151 = 788;\r\n    t.a152 = 788;\r\n    t.a153 = 788;\r\n    t.a154 = 788;\r\n    t.a155 = 788;\r\n    t.a156 = 788;\r\n    t.a157 = 788;\r\n    t.a158 = 788;\r\n    t.a159 = 788;\r\n    t.a160 = 894;\r\n    t.a161 = 838;\r\n    t.a163 = 1016;\r\n    t.a164 = 458;\r\n    t.a196 = 748;\r\n    t.a165 = 924;\r\n    t.a192 = 748;\r\n    t.a166 = 918;\r\n    t.a167 = 927;\r\n    t.a168 = 928;\r\n    t.a169 = 928;\r\n    t.a170 = 834;\r\n    t.a171 = 873;\r\n    t.a172 = 828;\r\n    t.a173 = 924;\r\n    t.a162 = 924;\r\n    t.a174 = 917;\r\n    t.a175 = 930;\r\n    t.a176 = 931;\r\n    t.a177 = 463;\r\n    t.a178 = 883;\r\n    t.a179 = 836;\r\n    t.a193 = 836;\r\n    t.a180 = 867;\r\n    t.a199 = 867;\r\n    t.a181 = 696;\r\n    t.a200 = 696;\r\n    t.a182 = 874;\r\n    t.a201 = 874;\r\n    t.a183 = 760;\r\n    t.a184 = 946;\r\n    t.a197 = 771;\r\n    t.a185 = 865;\r\n    t.a194 = 771;\r\n    t.a198 = 888;\r\n    t.a186 = 967;\r\n    t.a195 = 888;\r\n    t.a187 = 831;\r\n    t.a188 = 873;\r\n    t.a189 = 927;\r\n    t.a190 = 970;\r\n    t.a191 = 918;\r\n  });\r\n});\r\nexports.getMetrics = getMetrics;\r\n\r\n/***/ }),\r\n/* 173 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.MurmurHash3_64 = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar SEED = 0xc3d2e1f0;\r\nvar MASK_HIGH = 0xffff0000;\r\nvar MASK_LOW = 0xffff;\r\n\r\nvar MurmurHash3_64 = /*#__PURE__*/function () {\r\n  function MurmurHash3_64(seed) {\r\n    _classCallCheck(this, MurmurHash3_64);\r\n\r\n    this.h1 = seed ? seed & 0xffffffff : SEED;\r\n    this.h2 = seed ? seed & 0xffffffff : SEED;\r\n  }\r\n\r\n  _createClass(MurmurHash3_64, [{\r\n    key: \"update\",\r\n    value: function update(input) {\r\n      var data, length;\r\n\r\n      if ((0, _util.isString)(input)) {\r\n        data = new Uint8Array(input.length * 2);\r\n        length = 0;\r\n\r\n        for (var i = 0, ii = input.length; i < ii; i++) {\r\n          var code = input.charCodeAt(i);\r\n\r\n          if (code <= 0xff) {\r\n            data[length++] = code;\r\n          } else {\r\n            data[length++] = code >>> 8;\r\n            data[length++] = code & 0xff;\r\n          }\r\n        }\r\n      } else if ((0, _util.isArrayBuffer)(input)) {\r\n        data = input.slice();\r\n        length = data.byteLength;\r\n      } else {\r\n        throw new Error(\"Wrong data format in MurmurHash3_64_update. \" + \"Input must be a string or array.\");\r\n      }\r\n\r\n      var blockCounts = length >> 2;\r\n      var tailLength = length - blockCounts * 4;\r\n      var dataUint32 = new Uint32Array(data.buffer, 0, blockCounts);\r\n      var k1 = 0,\r\n          k2 = 0;\r\n      var h1 = this.h1,\r\n          h2 = this.h2;\r\n      var C1 = 0xcc9e2d51,\r\n          C2 = 0x1b873593;\r\n      var C1_LOW = C1 & MASK_LOW,\r\n          C2_LOW = C2 & MASK_LOW;\r\n\r\n      for (var _i = 0; _i < blockCounts; _i++) {\r\n        if (_i & 1) {\r\n          k1 = dataUint32[_i];\r\n          k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;\r\n          k1 = k1 << 15 | k1 >>> 17;\r\n          k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;\r\n          h1 ^= k1;\r\n          h1 = h1 << 13 | h1 >>> 19;\r\n          h1 = h1 * 5 + 0xe6546b64;\r\n        } else {\r\n          k2 = dataUint32[_i];\r\n          k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW;\r\n          k2 = k2 << 15 | k2 >>> 17;\r\n          k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW;\r\n          h2 ^= k2;\r\n          h2 = h2 << 13 | h2 >>> 19;\r\n          h2 = h2 * 5 + 0xe6546b64;\r\n        }\r\n      }\r\n\r\n      k1 = 0;\r\n\r\n      switch (tailLength) {\r\n        case 3:\r\n          k1 ^= data[blockCounts * 4 + 2] << 16;\r\n\r\n        case 2:\r\n          k1 ^= data[blockCounts * 4 + 1] << 8;\r\n\r\n        case 1:\r\n          k1 ^= data[blockCounts * 4];\r\n          k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW;\r\n          k1 = k1 << 15 | k1 >>> 17;\r\n          k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;\r\n\r\n          if (blockCounts & 1) {\r\n            h1 ^= k1;\r\n          } else {\r\n            h2 ^= k1;\r\n          }\r\n\r\n      }\r\n\r\n      this.h1 = h1;\r\n      this.h2 = h2;\r\n    }\r\n  }, {\r\n    key: \"hexdigest\",\r\n    value: function hexdigest() {\r\n      var h1 = this.h1,\r\n          h2 = this.h2;\r\n      h1 ^= h2 >>> 1;\r\n      h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW;\r\n      h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16;\r\n      h1 ^= h2 >>> 1;\r\n      h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW;\r\n      h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16;\r\n      h1 ^= h2 >>> 1;\r\n      var hex1 = (h1 >>> 0).toString(16),\r\n          hex2 = (h2 >>> 0).toString(16);\r\n      return hex1.padStart(8, \"0\") + hex2.padStart(8, \"0\");\r\n    }\r\n  }]);\r\n\r\n  return MurmurHash3_64;\r\n}();\r\n\r\nexports.MurmurHash3_64 = MurmurHash3_64;\r\n\r\n/***/ }),\r\n/* 174 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.OperatorList = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nvar QueueOptimizer = function QueueOptimizerClosure() {\r\n  function addState(parentState, pattern, checkFn, iterateFn, processFn) {\r\n    var state = parentState;\r\n\r\n    for (var i = 0, ii = pattern.length - 1; i < ii; i++) {\r\n      var item = pattern[i];\r\n      state = state[item] || (state[item] = []);\r\n    }\r\n\r\n    state[pattern[pattern.length - 1]] = {\r\n      checkFn: checkFn,\r\n      iterateFn: iterateFn,\r\n      processFn: processFn\r\n    };\r\n  }\r\n\r\n  function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) {\r\n    var iFirstPIMXO = iFirstSave + 2;\r\n\r\n    for (var i = 0; i < count; i++) {\r\n      var arg = argsArray[iFirstPIMXO + 4 * i];\r\n      var imageMask = arg.length === 1 && arg[0];\r\n\r\n      if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) {\r\n        fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask;\r\n        continue;\r\n      }\r\n\r\n      break;\r\n    }\r\n\r\n    return count - i;\r\n  }\r\n\r\n  var InitialState = [];\r\n  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) {\r\n    var fnArray = context.fnArray;\r\n    var iFirstSave = context.iCurr - 3;\r\n    var pos = (i - iFirstSave) % 4;\r\n\r\n    switch (pos) {\r\n      case 0:\r\n        return fnArray[i] === _util.OPS.save;\r\n\r\n      case 1:\r\n        return fnArray[i] === _util.OPS.transform;\r\n\r\n      case 2:\r\n        return fnArray[i] === _util.OPS.paintInlineImageXObject;\r\n\r\n      case 3:\r\n        return fnArray[i] === _util.OPS.restore;\r\n    }\r\n\r\n    throw new Error(\"iterateInlineImageGroup - invalid pos: \".concat(pos));\r\n  }, function foundInlineImageGroup(context, i) {\r\n    var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;\r\n    var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;\r\n    var MAX_WIDTH = 1000;\r\n    var IMAGE_PADDING = 1;\r\n    var fnArray = context.fnArray,\r\n        argsArray = context.argsArray;\r\n    var curr = context.iCurr;\r\n    var iFirstSave = curr - 3;\r\n    var iFirstTransform = curr - 2;\r\n    var iFirstPIIXO = curr - 1;\r\n    var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);\r\n\r\n    if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {\r\n      return i - (i - iFirstSave) % 4;\r\n    }\r\n\r\n    var maxX = 0;\r\n    var map = [],\r\n        maxLineHeight = 0;\r\n    var currentX = IMAGE_PADDING,\r\n        currentY = IMAGE_PADDING;\r\n    var q;\r\n\r\n    for (q = 0; q < count; q++) {\r\n      var transform = argsArray[iFirstTransform + (q << 2)];\r\n      var img = argsArray[iFirstPIIXO + (q << 2)][0];\r\n\r\n      if (currentX + img.width > MAX_WIDTH) {\r\n        maxX = Math.max(maxX, currentX);\r\n        currentY += maxLineHeight + 2 * IMAGE_PADDING;\r\n        currentX = 0;\r\n        maxLineHeight = 0;\r\n      }\r\n\r\n      map.push({\r\n        transform: transform,\r\n        x: currentX,\r\n        y: currentY,\r\n        w: img.width,\r\n        h: img.height\r\n      });\r\n      currentX += img.width + 2 * IMAGE_PADDING;\r\n      maxLineHeight = Math.max(maxLineHeight, img.height);\r\n    }\r\n\r\n    var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;\r\n    var imgHeight = currentY + maxLineHeight + IMAGE_PADDING;\r\n    var imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4);\r\n    var imgRowSize = imgWidth << 2;\r\n\r\n    for (q = 0; q < count; q++) {\r\n      var data = argsArray[iFirstPIIXO + (q << 2)][0].data;\r\n      var rowSize = map[q].w << 2;\r\n      var dataOffset = 0;\r\n      var offset = map[q].x + map[q].y * imgWidth << 2;\r\n      imgData.set(data.subarray(0, rowSize), offset - imgRowSize);\r\n\r\n      for (var k = 0, kk = map[q].h; k < kk; k++) {\r\n        imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);\r\n        dataOffset += rowSize;\r\n        offset += imgRowSize;\r\n      }\r\n\r\n      imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);\r\n\r\n      while (offset >= 0) {\r\n        data[offset - 4] = data[offset];\r\n        data[offset - 3] = data[offset + 1];\r\n        data[offset - 2] = data[offset + 2];\r\n        data[offset - 1] = data[offset + 3];\r\n        data[offset + rowSize] = data[offset + rowSize - 4];\r\n        data[offset + rowSize + 1] = data[offset + rowSize - 3];\r\n        data[offset + rowSize + 2] = data[offset + rowSize - 2];\r\n        data[offset + rowSize + 3] = data[offset + rowSize - 1];\r\n        offset -= imgRowSize;\r\n      }\r\n    }\r\n\r\n    fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);\r\n    argsArray.splice(iFirstSave, count * 4, [{\r\n      width: imgWidth,\r\n      height: imgHeight,\r\n      kind: _util.ImageKind.RGBA_32BPP,\r\n      data: imgData\r\n    }, map]);\r\n    return iFirstSave + 1;\r\n  });\r\n  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) {\r\n    var fnArray = context.fnArray;\r\n    var iFirstSave = context.iCurr - 3;\r\n    var pos = (i - iFirstSave) % 4;\r\n\r\n    switch (pos) {\r\n      case 0:\r\n        return fnArray[i] === _util.OPS.save;\r\n\r\n      case 1:\r\n        return fnArray[i] === _util.OPS.transform;\r\n\r\n      case 2:\r\n        return fnArray[i] === _util.OPS.paintImageMaskXObject;\r\n\r\n      case 3:\r\n        return fnArray[i] === _util.OPS.restore;\r\n    }\r\n\r\n    throw new Error(\"iterateImageMaskGroup - invalid pos: \".concat(pos));\r\n  }, function foundImageMaskGroup(context, i) {\r\n    var MIN_IMAGES_IN_MASKS_BLOCK = 10;\r\n    var MAX_IMAGES_IN_MASKS_BLOCK = 100;\r\n    var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;\r\n    var fnArray = context.fnArray,\r\n        argsArray = context.argsArray;\r\n    var curr = context.iCurr;\r\n    var iFirstSave = curr - 3;\r\n    var iFirstTransform = curr - 2;\r\n    var iFirstPIMXO = curr - 1;\r\n    var count = Math.floor((i - iFirstSave) / 4);\r\n    count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray);\r\n\r\n    if (count < MIN_IMAGES_IN_MASKS_BLOCK) {\r\n      return i - (i - iFirstSave) % 4;\r\n    }\r\n\r\n    var q;\r\n    var isSameImage = false;\r\n    var iTransform, transformArgs;\r\n    var firstPIMXOArg0 = argsArray[iFirstPIMXO][0];\r\n    var firstTransformArg0 = argsArray[iFirstTransform][0],\r\n        firstTransformArg1 = argsArray[iFirstTransform][1],\r\n        firstTransformArg2 = argsArray[iFirstTransform][2],\r\n        firstTransformArg3 = argsArray[iFirstTransform][3];\r\n\r\n    if (firstTransformArg1 === firstTransformArg2) {\r\n      isSameImage = true;\r\n      iTransform = iFirstTransform + 4;\r\n      var iPIMXO = iFirstPIMXO + 4;\r\n\r\n      for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {\r\n        transformArgs = argsArray[iTransform];\r\n\r\n        if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== firstTransformArg3) {\r\n          if (q < MIN_IMAGES_IN_MASKS_BLOCK) {\r\n            isSameImage = false;\r\n          } else {\r\n            count = q;\r\n          }\r\n\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (isSameImage) {\r\n      count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);\r\n      var positions = new Float32Array(count * 2);\r\n      iTransform = iFirstTransform;\r\n\r\n      for (q = 0; q < count; q++, iTransform += 4) {\r\n        transformArgs = argsArray[iTransform];\r\n        positions[q << 1] = transformArgs[4];\r\n        positions[(q << 1) + 1] = transformArgs[5];\r\n      }\r\n\r\n      fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat);\r\n      argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, firstTransformArg2, firstTransformArg3, positions]);\r\n    } else {\r\n      count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);\r\n      var images = [];\r\n\r\n      for (q = 0; q < count; q++) {\r\n        transformArgs = argsArray[iFirstTransform + (q << 2)];\r\n        var maskParams = argsArray[iFirstPIMXO + (q << 2)][0];\r\n        images.push({\r\n          data: maskParams.data,\r\n          width: maskParams.width,\r\n          height: maskParams.height,\r\n          transform: transformArgs\r\n        });\r\n      }\r\n\r\n      fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup);\r\n      argsArray.splice(iFirstSave, count * 4, [images]);\r\n    }\r\n\r\n    return iFirstSave + 1;\r\n  });\r\n  addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) {\r\n    var argsArray = context.argsArray;\r\n    var iFirstTransform = context.iCurr - 2;\r\n    return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;\r\n  }, function iterateImageGroup(context, i) {\r\n    var fnArray = context.fnArray,\r\n        argsArray = context.argsArray;\r\n    var iFirstSave = context.iCurr - 3;\r\n    var pos = (i - iFirstSave) % 4;\r\n\r\n    switch (pos) {\r\n      case 0:\r\n        return fnArray[i] === _util.OPS.save;\r\n\r\n      case 1:\r\n        if (fnArray[i] !== _util.OPS.transform) {\r\n          return false;\r\n        }\r\n\r\n        var iFirstTransform = context.iCurr - 2;\r\n        var firstTransformArg0 = argsArray[iFirstTransform][0];\r\n        var firstTransformArg3 = argsArray[iFirstTransform][3];\r\n\r\n        if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) {\r\n          return false;\r\n        }\r\n\r\n        return true;\r\n\r\n      case 2:\r\n        if (fnArray[i] !== _util.OPS.paintImageXObject) {\r\n          return false;\r\n        }\r\n\r\n        var iFirstPIXO = context.iCurr - 1;\r\n        var firstPIXOArg0 = argsArray[iFirstPIXO][0];\r\n\r\n        if (argsArray[i][0] !== firstPIXOArg0) {\r\n          return false;\r\n        }\r\n\r\n        return true;\r\n\r\n      case 3:\r\n        return fnArray[i] === _util.OPS.restore;\r\n    }\r\n\r\n    throw new Error(\"iterateImageGroup - invalid pos: \".concat(pos));\r\n  }, function (context, i) {\r\n    var MIN_IMAGES_IN_BLOCK = 3;\r\n    var MAX_IMAGES_IN_BLOCK = 1000;\r\n    var fnArray = context.fnArray,\r\n        argsArray = context.argsArray;\r\n    var curr = context.iCurr;\r\n    var iFirstSave = curr - 3;\r\n    var iFirstTransform = curr - 2;\r\n    var iFirstPIXO = curr - 1;\r\n    var firstPIXOArg0 = argsArray[iFirstPIXO][0];\r\n    var firstTransformArg0 = argsArray[iFirstTransform][0];\r\n    var firstTransformArg3 = argsArray[iFirstTransform][3];\r\n    var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK);\r\n\r\n    if (count < MIN_IMAGES_IN_BLOCK) {\r\n      return i - (i - iFirstSave) % 4;\r\n    }\r\n\r\n    var positions = new Float32Array(count * 2);\r\n    var iTransform = iFirstTransform;\r\n\r\n    for (var q = 0; q < count; q++, iTransform += 4) {\r\n      var transformArgs = argsArray[iTransform];\r\n      positions[q << 1] = transformArgs[4];\r\n      positions[(q << 1) + 1] = transformArgs[5];\r\n    }\r\n\r\n    var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];\r\n    fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat);\r\n    argsArray.splice(iFirstSave, count * 4, args);\r\n    return iFirstSave + 1;\r\n  });\r\n  addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) {\r\n    var fnArray = context.fnArray,\r\n        argsArray = context.argsArray;\r\n    var iFirstSave = context.iCurr - 4;\r\n    var pos = (i - iFirstSave) % 5;\r\n\r\n    switch (pos) {\r\n      case 0:\r\n        return fnArray[i] === _util.OPS.beginText;\r\n\r\n      case 1:\r\n        return fnArray[i] === _util.OPS.setFont;\r\n\r\n      case 2:\r\n        return fnArray[i] === _util.OPS.setTextMatrix;\r\n\r\n      case 3:\r\n        if (fnArray[i] !== _util.OPS.showText) {\r\n          return false;\r\n        }\r\n\r\n        var iFirstSetFont = context.iCurr - 3;\r\n        var firstSetFontArg0 = argsArray[iFirstSetFont][0];\r\n        var firstSetFontArg1 = argsArray[iFirstSetFont][1];\r\n\r\n        if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) {\r\n          return false;\r\n        }\r\n\r\n        return true;\r\n\r\n      case 4:\r\n        return fnArray[i] === _util.OPS.endText;\r\n    }\r\n\r\n    throw new Error(\"iterateShowTextGroup - invalid pos: \".concat(pos));\r\n  }, function (context, i) {\r\n    var MIN_CHARS_IN_BLOCK = 3;\r\n    var MAX_CHARS_IN_BLOCK = 1000;\r\n    var fnArray = context.fnArray,\r\n        argsArray = context.argsArray;\r\n    var curr = context.iCurr;\r\n    var iFirstBeginText = curr - 4;\r\n    var iFirstSetFont = curr - 3;\r\n    var iFirstSetTextMatrix = curr - 2;\r\n    var iFirstShowText = curr - 1;\r\n    var iFirstEndText = curr;\r\n    var firstSetFontArg0 = argsArray[iFirstSetFont][0];\r\n    var firstSetFontArg1 = argsArray[iFirstSetFont][1];\r\n    var count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);\r\n\r\n    if (count < MIN_CHARS_IN_BLOCK) {\r\n      return i - (i - iFirstBeginText) % 5;\r\n    }\r\n\r\n    var iFirst = iFirstBeginText;\r\n\r\n    if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) {\r\n      count++;\r\n      iFirst -= 5;\r\n    }\r\n\r\n    var iEndText = iFirst + 4;\r\n\r\n    for (var q = 1; q < count; q++) {\r\n      fnArray.splice(iEndText, 3);\r\n      argsArray.splice(iEndText, 3);\r\n      iEndText += 2;\r\n    }\r\n\r\n    return iEndText + 1;\r\n  });\r\n\r\n  function QueueOptimizer(queue) {\r\n    this.queue = queue;\r\n    this.state = null;\r\n    this.context = {\r\n      iCurr: 0,\r\n      fnArray: queue.fnArray,\r\n      argsArray: queue.argsArray\r\n    };\r\n    this.match = null;\r\n    this.lastProcessed = 0;\r\n  }\r\n\r\n  QueueOptimizer.prototype = {\r\n    _optimize: function _optimize() {\r\n      var fnArray = this.queue.fnArray;\r\n      var i = this.lastProcessed,\r\n          ii = fnArray.length;\r\n      var state = this.state;\r\n      var match = this.match;\r\n\r\n      if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {\r\n        this.lastProcessed = ii;\r\n        return;\r\n      }\r\n\r\n      var context = this.context;\r\n\r\n      while (i < ii) {\r\n        if (match) {\r\n          var iterate = (0, match.iterateFn)(context, i);\r\n\r\n          if (iterate) {\r\n            i++;\r\n            continue;\r\n          }\r\n\r\n          i = (0, match.processFn)(context, i + 1);\r\n          ii = fnArray.length;\r\n          match = null;\r\n          state = null;\r\n\r\n          if (i >= ii) {\r\n            break;\r\n          }\r\n        }\r\n\r\n        state = (state || InitialState)[fnArray[i]];\r\n\r\n        if (!state || Array.isArray(state)) {\r\n          i++;\r\n          continue;\r\n        }\r\n\r\n        context.iCurr = i;\r\n        i++;\r\n\r\n        if (state.checkFn && !(0, state.checkFn)(context)) {\r\n          state = null;\r\n          continue;\r\n        }\r\n\r\n        match = state;\r\n        state = null;\r\n      }\r\n\r\n      this.state = state;\r\n      this.match = match;\r\n      this.lastProcessed = i;\r\n    },\r\n    push: function push(fn, args) {\r\n      this.queue.fnArray.push(fn);\r\n      this.queue.argsArray.push(args);\r\n\r\n      this._optimize();\r\n    },\r\n    flush: function flush() {\r\n      while (this.match) {\r\n        var length = this.queue.fnArray.length;\r\n        this.lastProcessed = (0, this.match.processFn)(this.context, length);\r\n        this.match = null;\r\n        this.state = null;\r\n\r\n        this._optimize();\r\n      }\r\n    },\r\n    reset: function reset() {\r\n      this.state = null;\r\n      this.match = null;\r\n      this.lastProcessed = 0;\r\n    }\r\n  };\r\n  return QueueOptimizer;\r\n}();\r\n\r\nvar NullOptimizer = function NullOptimizerClosure() {\r\n  function NullOptimizer(queue) {\r\n    this.queue = queue;\r\n  }\r\n\r\n  NullOptimizer.prototype = {\r\n    push: function push(fn, args) {\r\n      this.queue.fnArray.push(fn);\r\n      this.queue.argsArray.push(args);\r\n    },\r\n    flush: function flush() {},\r\n    reset: function reset() {}\r\n  };\r\n  return NullOptimizer;\r\n}();\r\n\r\nvar OperatorList = function OperatorListClosure() {\r\n  var CHUNK_SIZE = 1000;\r\n  var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5;\r\n\r\n  function OperatorList(intent, streamSink) {\r\n    this._streamSink = streamSink;\r\n    this.fnArray = [];\r\n    this.argsArray = [];\r\n\r\n    if (streamSink && intent !== \"oplist\") {\r\n      this.optimizer = new QueueOptimizer(this);\r\n    } else {\r\n      this.optimizer = new NullOptimizer(this);\r\n    }\r\n\r\n    this.dependencies = new Set();\r\n    this._totalLength = 0;\r\n    this.weight = 0;\r\n    this._resolved = streamSink ? null : Promise.resolve();\r\n  }\r\n\r\n  OperatorList.prototype = {\r\n    get length() {\r\n      return this.argsArray.length;\r\n    },\r\n\r\n    get ready() {\r\n      return this._resolved || this._streamSink.ready;\r\n    },\r\n\r\n    get totalLength() {\r\n      return this._totalLength + this.length;\r\n    },\r\n\r\n    addOp: function addOp(fn, args) {\r\n      this.optimizer.push(fn, args);\r\n      this.weight++;\r\n\r\n      if (this._streamSink) {\r\n        if (this.weight >= CHUNK_SIZE) {\r\n          this.flush();\r\n        } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) {\r\n          this.flush();\r\n        }\r\n      }\r\n    },\r\n    addDependency: function addDependency(dependency) {\r\n      if (this.dependencies.has(dependency)) {\r\n        return;\r\n      }\r\n\r\n      this.dependencies.add(dependency);\r\n      this.addOp(_util.OPS.dependency, [dependency]);\r\n    },\r\n    addDependencies: function addDependencies(dependencies) {\r\n      var _iterator = _createForOfIteratorHelper(dependencies),\r\n          _step;\r\n\r\n      try {\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          var dependency = _step.value;\r\n          this.addDependency(dependency);\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n    },\r\n    addOpList: function addOpList(opList) {\r\n      if (!(opList instanceof OperatorList)) {\r\n        (0, _util.warn)('addOpList - ignoring invalid \"opList\" parameter.');\r\n        return;\r\n      }\r\n\r\n      var _iterator2 = _createForOfIteratorHelper(opList.dependencies),\r\n          _step2;\r\n\r\n      try {\r\n        for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n          var dependency = _step2.value;\r\n          this.dependencies.add(dependency);\r\n        }\r\n      } catch (err) {\r\n        _iterator2.e(err);\r\n      } finally {\r\n        _iterator2.f();\r\n      }\r\n\r\n      for (var i = 0, ii = opList.length; i < ii; i++) {\r\n        this.addOp(opList.fnArray[i], opList.argsArray[i]);\r\n      }\r\n    },\r\n    getIR: function getIR() {\r\n      return {\r\n        fnArray: this.fnArray,\r\n        argsArray: this.argsArray,\r\n        length: this.length\r\n      };\r\n    },\r\n\r\n    get _transfers() {\r\n      var transfers = [];\r\n      var fnArray = this.fnArray,\r\n          argsArray = this.argsArray,\r\n          length = this.length;\r\n\r\n      for (var i = 0; i < length; i++) {\r\n        switch (fnArray[i]) {\r\n          case _util.OPS.paintInlineImageXObject:\r\n          case _util.OPS.paintInlineImageXObjectGroup:\r\n          case _util.OPS.paintImageMaskXObject:\r\n            var arg = argsArray[i][0];\r\n            ;\r\n\r\n            if (!arg.cached) {\r\n              transfers.push(arg.data.buffer);\r\n            }\r\n\r\n            break;\r\n        }\r\n      }\r\n\r\n      return transfers;\r\n    },\r\n\r\n    flush: function flush() {\r\n      var lastChunk = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n      this.optimizer.flush();\r\n      var length = this.length;\r\n      this._totalLength += length;\r\n\r\n      this._streamSink.enqueue({\r\n        fnArray: this.fnArray,\r\n        argsArray: this.argsArray,\r\n        lastChunk: lastChunk,\r\n        length: length\r\n      }, 1, this._transfers);\r\n\r\n      this.dependencies.clear();\r\n      this.fnArray.length = 0;\r\n      this.argsArray.length = 0;\r\n      this.weight = 0;\r\n      this.optimizer.reset();\r\n    }\r\n  };\r\n  return OperatorList;\r\n}();\r\n\r\nexports.OperatorList = OperatorList;\r\n\r\n/***/ }),\r\n/* 175 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFImage = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _colorspace = __w_pdfjs_require__(153);\r\n\r\nvar _stream = __w_pdfjs_require__(142);\r\n\r\nvar _jpeg_stream = __w_pdfjs_require__(148);\r\n\r\nvar _jpx = __w_pdfjs_require__(151);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction decodeAndClamp(value, addend, coefficient, max) {\r\n  value = addend + value * coefficient;\r\n\r\n  if (value < 0) {\r\n    value = 0;\r\n  } else if (value > max) {\r\n    value = max;\r\n  }\r\n\r\n  return value;\r\n}\r\n\r\nfunction resizeImageMask(src, bpc, w1, h1, w2, h2) {\r\n  var length = w2 * h2;\r\n  var dest;\r\n\r\n  if (bpc <= 8) {\r\n    dest = new Uint8Array(length);\r\n  } else if (bpc <= 16) {\r\n    dest = new Uint16Array(length);\r\n  } else {\r\n    dest = new Uint32Array(length);\r\n  }\r\n\r\n  var xRatio = w1 / w2;\r\n  var yRatio = h1 / h2;\r\n  var i,\r\n      j,\r\n      py,\r\n      newIndex = 0,\r\n      oldIndex;\r\n  var xScaled = new Uint16Array(w2);\r\n  var w1Scanline = w1;\r\n\r\n  for (i = 0; i < w2; i++) {\r\n    xScaled[i] = Math.floor(i * xRatio);\r\n  }\r\n\r\n  for (i = 0; i < h2; i++) {\r\n    py = Math.floor(i * yRatio) * w1Scanline;\r\n\r\n    for (j = 0; j < w2; j++) {\r\n      oldIndex = py + xScaled[j];\r\n      dest[newIndex++] = src[oldIndex];\r\n    }\r\n  }\r\n\r\n  return dest;\r\n}\r\n\r\nvar PDFImage = /*#__PURE__*/function () {\r\n  function PDFImage(_ref) {\r\n    var xref = _ref.xref,\r\n        res = _ref.res,\r\n        image = _ref.image,\r\n        _ref$isInline = _ref.isInline,\r\n        isInline = _ref$isInline === void 0 ? false : _ref$isInline,\r\n        _ref$smask = _ref.smask,\r\n        smask = _ref$smask === void 0 ? null : _ref$smask,\r\n        _ref$mask = _ref.mask,\r\n        mask = _ref$mask === void 0 ? null : _ref$mask,\r\n        _ref$isMask = _ref.isMask,\r\n        isMask = _ref$isMask === void 0 ? false : _ref$isMask,\r\n        pdfFunctionFactory = _ref.pdfFunctionFactory,\r\n        localColorSpaceCache = _ref.localColorSpaceCache;\r\n\r\n    _classCallCheck(this, PDFImage);\r\n\r\n    this.image = image;\r\n    var dict = image.dict;\r\n    var filter = dict.get(\"Filter\");\r\n\r\n    if ((0, _primitives.isName)(filter)) {\r\n      switch (filter.name) {\r\n        case \"JPXDecode\":\r\n          var jpxImage = new _jpx.JpxImage();\r\n          jpxImage.parseImageProperties(image.stream);\r\n          image.stream.reset();\r\n          image.width = jpxImage.width;\r\n          image.height = jpxImage.height;\r\n          image.bitsPerComponent = jpxImage.bitsPerComponent;\r\n          image.numComps = jpxImage.componentsCount;\r\n          break;\r\n\r\n        case \"JBIG2Decode\":\r\n          image.bitsPerComponent = 1;\r\n          image.numComps = 1;\r\n          break;\r\n      }\r\n    }\r\n\r\n    var width = dict.get(\"Width\", \"W\");\r\n    var height = dict.get(\"Height\", \"H\");\r\n\r\n    if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) {\r\n      (0, _util.warn)(\"PDFImage - using the Width/Height of the image data, \" + \"rather than the image dictionary.\");\r\n      width = image.width;\r\n      height = image.height;\r\n    }\r\n\r\n    if (width < 1 || height < 1) {\r\n      throw new _util.FormatError(\"Invalid image width: \".concat(width, \" or height: \").concat(height));\r\n    }\r\n\r\n    this.width = width;\r\n    this.height = height;\r\n    this.interpolate = dict.get(\"Interpolate\", \"I\") || false;\r\n    this.imageMask = dict.get(\"ImageMask\", \"IM\") || false;\r\n    this.matte = dict.get(\"Matte\") || false;\r\n    var bitsPerComponent = image.bitsPerComponent;\r\n\r\n    if (!bitsPerComponent) {\r\n      bitsPerComponent = dict.get(\"BitsPerComponent\", \"BPC\");\r\n\r\n      if (!bitsPerComponent) {\r\n        if (this.imageMask) {\r\n          bitsPerComponent = 1;\r\n        } else {\r\n          throw new _util.FormatError(\"Bits per component missing in image: \".concat(this.imageMask));\r\n        }\r\n      }\r\n    }\r\n\r\n    this.bpc = bitsPerComponent;\r\n\r\n    if (!this.imageMask) {\r\n      var colorSpace = dict.getRaw(\"ColorSpace\") || dict.getRaw(\"CS\");\r\n\r\n      if (!colorSpace) {\r\n        (0, _util.info)(\"JPX images (which do not require color spaces)\");\r\n\r\n        switch (image.numComps) {\r\n          case 1:\r\n            colorSpace = _primitives.Name.get(\"DeviceGray\");\r\n            break;\r\n\r\n          case 3:\r\n            colorSpace = _primitives.Name.get(\"DeviceRGB\");\r\n            break;\r\n\r\n          case 4:\r\n            colorSpace = _primitives.Name.get(\"DeviceCMYK\");\r\n            break;\r\n\r\n          default:\r\n            throw new Error(\"JPX images with \".concat(image.numComps, \" \") + \"color components not supported.\");\r\n        }\r\n      }\r\n\r\n      this.colorSpace = _colorspace.ColorSpace.parse({\r\n        cs: colorSpace,\r\n        xref: xref,\r\n        resources: isInline ? res : null,\r\n        pdfFunctionFactory: pdfFunctionFactory,\r\n        localColorSpaceCache: localColorSpaceCache\r\n      });\r\n      this.numComps = this.colorSpace.numComps;\r\n    }\r\n\r\n    this.decode = dict.getArray(\"Decode\", \"D\");\r\n    this.needsDecode = false;\r\n\r\n    if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) {\r\n      this.needsDecode = true;\r\n      var max = (1 << bitsPerComponent) - 1;\r\n      this.decodeCoefficients = [];\r\n      this.decodeAddends = [];\r\n      var isIndexed = this.colorSpace && this.colorSpace.name === \"Indexed\";\r\n\r\n      for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) {\r\n        var dmin = this.decode[i];\r\n        var dmax = this.decode[i + 1];\r\n        this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin;\r\n        this.decodeAddends[j] = isIndexed ? dmin : max * dmin;\r\n      }\r\n    }\r\n\r\n    if (smask) {\r\n      this.smask = new PDFImage({\r\n        xref: xref,\r\n        res: res,\r\n        image: smask,\r\n        isInline: isInline,\r\n        pdfFunctionFactory: pdfFunctionFactory,\r\n        localColorSpaceCache: localColorSpaceCache\r\n      });\r\n    } else if (mask) {\r\n      if ((0, _primitives.isStream)(mask)) {\r\n        var maskDict = mask.dict,\r\n            imageMask = maskDict.get(\"ImageMask\", \"IM\");\r\n\r\n        if (!imageMask) {\r\n          (0, _util.warn)(\"Ignoring /Mask in image without /ImageMask.\");\r\n        } else {\r\n          this.mask = new PDFImage({\r\n            xref: xref,\r\n            res: res,\r\n            image: mask,\r\n            isInline: isInline,\r\n            isMask: true,\r\n            pdfFunctionFactory: pdfFunctionFactory,\r\n            localColorSpaceCache: localColorSpaceCache\r\n          });\r\n        }\r\n      } else {\r\n        this.mask = mask;\r\n      }\r\n    }\r\n  }\r\n\r\n  _createClass(PDFImage, [{\r\n    key: \"drawWidth\",\r\n    get: function get() {\r\n      return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0);\r\n    }\r\n  }, {\r\n    key: \"drawHeight\",\r\n    get: function get() {\r\n      return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0);\r\n    }\r\n  }, {\r\n    key: \"decodeBuffer\",\r\n    value: function decodeBuffer(buffer) {\r\n      var bpc = this.bpc;\r\n      var numComps = this.numComps;\r\n      var decodeAddends = this.decodeAddends;\r\n      var decodeCoefficients = this.decodeCoefficients;\r\n      var max = (1 << bpc) - 1;\r\n      var i, ii;\r\n\r\n      if (bpc === 1) {\r\n        for (i = 0, ii = buffer.length; i < ii; i++) {\r\n          buffer[i] = +!buffer[i];\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      var index = 0;\r\n\r\n      for (i = 0, ii = this.width * this.height; i < ii; i++) {\r\n        for (var j = 0; j < numComps; j++) {\r\n          buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max);\r\n          index++;\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getComponents\",\r\n    value: function getComponents(buffer) {\r\n      var bpc = this.bpc;\r\n\r\n      if (bpc === 8) {\r\n        return buffer;\r\n      }\r\n\r\n      var width = this.width;\r\n      var height = this.height;\r\n      var numComps = this.numComps;\r\n      var length = width * height * numComps;\r\n      var bufferPos = 0;\r\n      var output;\r\n\r\n      if (bpc <= 8) {\r\n        output = new Uint8Array(length);\r\n      } else if (bpc <= 16) {\r\n        output = new Uint16Array(length);\r\n      } else {\r\n        output = new Uint32Array(length);\r\n      }\r\n\r\n      var rowComps = width * numComps;\r\n      var max = (1 << bpc) - 1;\r\n      var i = 0,\r\n          ii,\r\n          buf;\r\n\r\n      if (bpc === 1) {\r\n        var mask, loop1End, loop2End;\r\n\r\n        for (var j = 0; j < height; j++) {\r\n          loop1End = i + (rowComps & ~7);\r\n          loop2End = i + rowComps;\r\n\r\n          while (i < loop1End) {\r\n            buf = buffer[bufferPos++];\r\n            output[i] = buf >> 7 & 1;\r\n            output[i + 1] = buf >> 6 & 1;\r\n            output[i + 2] = buf >> 5 & 1;\r\n            output[i + 3] = buf >> 4 & 1;\r\n            output[i + 4] = buf >> 3 & 1;\r\n            output[i + 5] = buf >> 2 & 1;\r\n            output[i + 6] = buf >> 1 & 1;\r\n            output[i + 7] = buf & 1;\r\n            i += 8;\r\n          }\r\n\r\n          if (i < loop2End) {\r\n            buf = buffer[bufferPos++];\r\n            mask = 128;\r\n\r\n            while (i < loop2End) {\r\n              output[i++] = +!!(buf & mask);\r\n              mask >>= 1;\r\n            }\r\n          }\r\n        }\r\n      } else {\r\n        var bits = 0;\r\n        buf = 0;\r\n\r\n        for (i = 0, ii = length; i < ii; ++i) {\r\n          if (i % rowComps === 0) {\r\n            buf = 0;\r\n            bits = 0;\r\n          }\r\n\r\n          while (bits < bpc) {\r\n            buf = buf << 8 | buffer[bufferPos++];\r\n            bits += 8;\r\n          }\r\n\r\n          var remainingBits = bits - bpc;\r\n          var value = buf >> remainingBits;\r\n\r\n          if (value < 0) {\r\n            value = 0;\r\n          } else if (value > max) {\r\n            value = max;\r\n          }\r\n\r\n          output[i] = value;\r\n          buf = buf & (1 << remainingBits) - 1;\r\n          bits = remainingBits;\r\n        }\r\n      }\r\n\r\n      return output;\r\n    }\r\n  }, {\r\n    key: \"fillOpacity\",\r\n    value: function fillOpacity(rgbaBuf, width, height, actualHeight, image) {\r\n      var smask = this.smask;\r\n      var mask = this.mask;\r\n      var alphaBuf, sw, sh, i, ii, j;\r\n\r\n      if (smask) {\r\n        sw = smask.width;\r\n        sh = smask.height;\r\n        alphaBuf = new Uint8ClampedArray(sw * sh);\r\n        smask.fillGrayBuffer(alphaBuf);\r\n\r\n        if (sw !== width || sh !== height) {\r\n          alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height);\r\n        }\r\n      } else if (mask) {\r\n        if (mask instanceof PDFImage) {\r\n          sw = mask.width;\r\n          sh = mask.height;\r\n          alphaBuf = new Uint8ClampedArray(sw * sh);\r\n          mask.numComps = 1;\r\n          mask.fillGrayBuffer(alphaBuf);\r\n\r\n          for (i = 0, ii = sw * sh; i < ii; ++i) {\r\n            alphaBuf[i] = 255 - alphaBuf[i];\r\n          }\r\n\r\n          if (sw !== width || sh !== height) {\r\n            alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height);\r\n          }\r\n        } else if (Array.isArray(mask)) {\r\n          alphaBuf = new Uint8ClampedArray(width * height);\r\n          var numComps = this.numComps;\r\n\r\n          for (i = 0, ii = width * height; i < ii; ++i) {\r\n            var opacity = 0;\r\n            var imageOffset = i * numComps;\r\n\r\n            for (j = 0; j < numComps; ++j) {\r\n              var color = image[imageOffset + j];\r\n              var maskOffset = j * 2;\r\n\r\n              if (color < mask[maskOffset] || color > mask[maskOffset + 1]) {\r\n                opacity = 255;\r\n                break;\r\n              }\r\n            }\r\n\r\n            alphaBuf[i] = opacity;\r\n          }\r\n        } else {\r\n          throw new _util.FormatError(\"Unknown mask format.\");\r\n        }\r\n      }\r\n\r\n      if (alphaBuf) {\r\n        for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {\r\n          rgbaBuf[j] = alphaBuf[i];\r\n        }\r\n      } else {\r\n        for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {\r\n          rgbaBuf[j] = 255;\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"undoPreblend\",\r\n    value: function undoPreblend(buffer, width, height) {\r\n      var matte = this.smask && this.smask.matte;\r\n\r\n      if (!matte) {\r\n        return;\r\n      }\r\n\r\n      var matteRgb = this.colorSpace.getRgb(matte, 0);\r\n      var matteR = matteRgb[0];\r\n      var matteG = matteRgb[1];\r\n      var matteB = matteRgb[2];\r\n      var length = width * height * 4;\r\n\r\n      for (var i = 0; i < length; i += 4) {\r\n        var alpha = buffer[i + 3];\r\n\r\n        if (alpha === 0) {\r\n          buffer[i] = 255;\r\n          buffer[i + 1] = 255;\r\n          buffer[i + 2] = 255;\r\n          continue;\r\n        }\r\n\r\n        var k = 255 / alpha;\r\n        buffer[i] = (buffer[i] - matteR) * k + matteR;\r\n        buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG;\r\n        buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"createImageData\",\r\n    value: function createImageData() {\r\n      var forceRGBA = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n      var drawWidth = this.drawWidth;\r\n      var drawHeight = this.drawHeight;\r\n      var imgData = {\r\n        width: drawWidth,\r\n        height: drawHeight,\r\n        kind: 0,\r\n        data: null\r\n      };\r\n      var numComps = this.numComps;\r\n      var originalWidth = this.width;\r\n      var originalHeight = this.height;\r\n      var bpc = this.bpc;\r\n      var rowBytes = originalWidth * numComps * bpc + 7 >> 3;\r\n      var imgArray;\r\n\r\n      if (!forceRGBA) {\r\n        var kind;\r\n\r\n        if (this.colorSpace.name === \"DeviceGray\" && bpc === 1) {\r\n          kind = _util.ImageKind.GRAYSCALE_1BPP;\r\n        } else if (this.colorSpace.name === \"DeviceRGB\" && bpc === 8 && !this.needsDecode) {\r\n          kind = _util.ImageKind.RGB_24BPP;\r\n        }\r\n\r\n        if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) {\r\n          imgData.kind = kind;\r\n          imgArray = this.getImageBytes(originalHeight * rowBytes);\r\n\r\n          if (this.image instanceof _stream.DecodeStream) {\r\n            imgData.data = imgArray;\r\n          } else {\r\n            var newArray = new Uint8ClampedArray(imgArray.length);\r\n            newArray.set(imgArray);\r\n            imgData.data = newArray;\r\n          }\r\n\r\n          if (this.needsDecode) {\r\n            (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, \"PDFImage.createImageData: The image must be grayscale.\");\r\n            var buffer = imgData.data;\r\n\r\n            for (var i = 0, ii = buffer.length; i < ii; i++) {\r\n              buffer[i] ^= 0xff;\r\n            }\r\n          }\r\n\r\n          return imgData;\r\n        }\r\n\r\n        if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) {\r\n          var imageLength = originalHeight * rowBytes;\r\n\r\n          switch (this.colorSpace.name) {\r\n            case \"DeviceGray\":\r\n              imageLength *= 3;\r\n\r\n            case \"DeviceRGB\":\r\n            case \"DeviceCMYK\":\r\n              imgData.kind = _util.ImageKind.RGB_24BPP;\r\n              imgData.data = this.getImageBytes(imageLength, drawWidth, drawHeight, true);\r\n              return imgData;\r\n          }\r\n        }\r\n      }\r\n\r\n      imgArray = this.getImageBytes(originalHeight * rowBytes);\r\n      var actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight;\r\n      var comps = this.getComponents(imgArray);\r\n      var alpha01, maybeUndoPreblend;\r\n\r\n      if (!forceRGBA && !this.smask && !this.mask) {\r\n        imgData.kind = _util.ImageKind.RGB_24BPP;\r\n        imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3);\r\n        alpha01 = 0;\r\n        maybeUndoPreblend = false;\r\n      } else {\r\n        imgData.kind = _util.ImageKind.RGBA_32BPP;\r\n        imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 4);\r\n        alpha01 = 1;\r\n        maybeUndoPreblend = true;\r\n        this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps);\r\n      }\r\n\r\n      if (this.needsDecode) {\r\n        this.decodeBuffer(comps);\r\n      }\r\n\r\n      this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01);\r\n\r\n      if (maybeUndoPreblend) {\r\n        this.undoPreblend(imgData.data, drawWidth, actualHeight);\r\n      }\r\n\r\n      return imgData;\r\n    }\r\n  }, {\r\n    key: \"fillGrayBuffer\",\r\n    value: function fillGrayBuffer(buffer) {\r\n      var numComps = this.numComps;\r\n\r\n      if (numComps !== 1) {\r\n        throw new _util.FormatError(\"Reading gray scale from a color image: \".concat(numComps));\r\n      }\r\n\r\n      var width = this.width;\r\n      var height = this.height;\r\n      var bpc = this.bpc;\r\n      var rowBytes = width * numComps * bpc + 7 >> 3;\r\n      var imgArray = this.getImageBytes(height * rowBytes);\r\n      var comps = this.getComponents(imgArray);\r\n      var i, length;\r\n\r\n      if (bpc === 1) {\r\n        length = width * height;\r\n\r\n        if (this.needsDecode) {\r\n          for (i = 0; i < length; ++i) {\r\n            buffer[i] = comps[i] - 1 & 255;\r\n          }\r\n        } else {\r\n          for (i = 0; i < length; ++i) {\r\n            buffer[i] = -comps[i] & 255;\r\n          }\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      if (this.needsDecode) {\r\n        this.decodeBuffer(comps);\r\n      }\r\n\r\n      length = width * height;\r\n      var scale = 255 / ((1 << bpc) - 1);\r\n\r\n      for (i = 0; i < length; ++i) {\r\n        buffer[i] = scale * comps[i];\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getImageBytes\",\r\n    value: function getImageBytes(length, drawWidth, drawHeight) {\r\n      var forceRGB = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\r\n      this.image.reset();\r\n      this.image.drawWidth = drawWidth || this.width;\r\n      this.image.drawHeight = drawHeight || this.height;\r\n      this.image.forceRGB = !!forceRGB;\r\n      return this.image.getBytes(length, true);\r\n    }\r\n  }], [{\r\n    key: \"buildImage\",\r\n    value: function () {\r\n      var _buildImage = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(_ref2) {\r\n        var xref, res, image, _ref2$isInline, isInline, pdfFunctionFactory, localColorSpaceCache, imageData, smaskData, maskData, smask, mask;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                xref = _ref2.xref, res = _ref2.res, image = _ref2.image, _ref2$isInline = _ref2.isInline, isInline = _ref2$isInline === void 0 ? false : _ref2$isInline, pdfFunctionFactory = _ref2.pdfFunctionFactory, localColorSpaceCache = _ref2.localColorSpaceCache;\r\n                imageData = image;\r\n                smaskData = null;\r\n                maskData = null;\r\n                smask = image.dict.get(\"SMask\");\r\n                mask = image.dict.get(\"Mask\");\r\n\r\n                if (smask) {\r\n                  smaskData = smask;\r\n                } else if (mask) {\r\n                  if ((0, _primitives.isStream)(mask) || Array.isArray(mask)) {\r\n                    maskData = mask;\r\n                  } else {\r\n                    (0, _util.warn)(\"Unsupported mask format.\");\r\n                  }\r\n                }\r\n\r\n                return _context.abrupt(\"return\", new PDFImage({\r\n                  xref: xref,\r\n                  res: res,\r\n                  image: imageData,\r\n                  isInline: isInline,\r\n                  smask: smaskData,\r\n                  mask: maskData,\r\n                  pdfFunctionFactory: pdfFunctionFactory,\r\n                  localColorSpaceCache: localColorSpaceCache\r\n                }));\r\n\r\n              case 8:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee);\r\n      }));\r\n\r\n      function buildImage(_x) {\r\n        return _buildImage.apply(this, arguments);\r\n      }\r\n\r\n      return buildImage;\r\n    }()\r\n  }, {\r\n    key: \"createMask\",\r\n    value: function createMask(_ref3) {\r\n      var imgArray = _ref3.imgArray,\r\n          width = _ref3.width,\r\n          height = _ref3.height,\r\n          imageIsFromDecodeStream = _ref3.imageIsFromDecodeStream,\r\n          inverseDecode = _ref3.inverseDecode;\r\n      var computedLength = (width + 7 >> 3) * height;\r\n      var actualLength = imgArray.byteLength;\r\n      var haveFullData = computedLength === actualLength;\r\n      var data, i;\r\n\r\n      if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) {\r\n        data = imgArray;\r\n      } else if (!inverseDecode) {\r\n        data = new Uint8ClampedArray(actualLength);\r\n        data.set(imgArray);\r\n      } else {\r\n        data = new Uint8ClampedArray(computedLength);\r\n        data.set(imgArray);\r\n\r\n        for (i = actualLength; i < computedLength; i++) {\r\n          data[i] = 0xff;\r\n        }\r\n      }\r\n\r\n      if (inverseDecode) {\r\n        for (i = 0; i < actualLength; i++) {\r\n          data[i] ^= 0xff;\r\n        }\r\n      }\r\n\r\n      return {\r\n        data: data,\r\n        width: width,\r\n        height: height\r\n      };\r\n    }\r\n  }]);\r\n\r\n  return PDFImage;\r\n}();\r\n\r\nexports.PDFImage = PDFImage;\r\n\r\n/***/ }),\r\n/* 176 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.incrementalUpdate = incrementalUpdate;\r\nexports.writeDict = writeDict;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nvar _primitives = __w_pdfjs_require__(135);\r\n\r\nvar _core_utils = __w_pdfjs_require__(138);\r\n\r\nvar _xml_parser = __w_pdfjs_require__(177);\r\n\r\nvar _crypto = __w_pdfjs_require__(152);\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction writeDict(dict, buffer, transform) {\r\n  buffer.push(\"<<\");\r\n\r\n  var _iterator = _createForOfIteratorHelper(dict.getKeys()),\r\n      _step;\r\n\r\n  try {\r\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n      var key = _step.value;\r\n      buffer.push(\" /\".concat((0, _core_utils.escapePDFName)(key), \" \"));\r\n      writeValue(dict.getRaw(key), buffer, transform);\r\n    }\r\n  } catch (err) {\r\n    _iterator.e(err);\r\n  } finally {\r\n    _iterator.f();\r\n  }\r\n\r\n  buffer.push(\">>\");\r\n}\r\n\r\nfunction writeStream(stream, buffer, transform) {\r\n  writeDict(stream.dict, buffer, transform);\r\n  buffer.push(\" stream\\n\");\r\n  var string = (0, _util.bytesToString)(stream.getBytes());\r\n\r\n  if (transform !== null) {\r\n    string = transform.encryptString(string);\r\n  }\r\n\r\n  buffer.push(string);\r\n  buffer.push(\"\\nendstream\\n\");\r\n}\r\n\r\nfunction writeArray(array, buffer, transform) {\r\n  buffer.push(\"[\");\r\n  var first = true;\r\n\r\n  var _iterator2 = _createForOfIteratorHelper(array),\r\n      _step2;\r\n\r\n  try {\r\n    for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n      var val = _step2.value;\r\n\r\n      if (!first) {\r\n        buffer.push(\" \");\r\n      } else {\r\n        first = false;\r\n      }\r\n\r\n      writeValue(val, buffer, transform);\r\n    }\r\n  } catch (err) {\r\n    _iterator2.e(err);\r\n  } finally {\r\n    _iterator2.f();\r\n  }\r\n\r\n  buffer.push(\"]\");\r\n}\r\n\r\nfunction numberToString(value) {\r\n  if (Number.isInteger(value)) {\r\n    return value.toString();\r\n  }\r\n\r\n  var roundedValue = Math.round(value * 100);\r\n\r\n  if (roundedValue % 100 === 0) {\r\n    return (roundedValue / 100).toString();\r\n  }\r\n\r\n  if (roundedValue % 10 === 0) {\r\n    return value.toFixed(1);\r\n  }\r\n\r\n  return value.toFixed(2);\r\n}\r\n\r\nfunction writeValue(value, buffer, transform) {\r\n  if ((0, _primitives.isName)(value)) {\r\n    buffer.push(\"/\".concat((0, _core_utils.escapePDFName)(value.name)));\r\n  } else if ((0, _primitives.isRef)(value)) {\r\n    buffer.push(\"\".concat(value.num, \" \").concat(value.gen, \" R\"));\r\n  } else if (Array.isArray(value)) {\r\n    writeArray(value, buffer, transform);\r\n  } else if (typeof value === \"string\") {\r\n    if (transform !== null) {\r\n      value = transform.encryptString(value);\r\n    }\r\n\r\n    buffer.push(\"(\".concat((0, _util.escapeString)(value), \")\"));\r\n  } else if (typeof value === \"number\") {\r\n    buffer.push(numberToString(value));\r\n  } else if ((0, _primitives.isDict)(value)) {\r\n    writeDict(value, buffer, transform);\r\n  } else if ((0, _primitives.isStream)(value)) {\r\n    writeStream(value, buffer, transform);\r\n  }\r\n}\r\n\r\nfunction writeInt(number, size, offset, buffer) {\r\n  for (var i = size + offset - 1; i > offset - 1; i--) {\r\n    buffer[i] = number & 0xff;\r\n    number >>= 8;\r\n  }\r\n\r\n  return offset + size;\r\n}\r\n\r\nfunction writeString(string, offset, buffer) {\r\n  for (var i = 0, len = string.length; i < len; i++) {\r\n    buffer[offset + i] = string.charCodeAt(i) & 0xff;\r\n  }\r\n}\r\n\r\nfunction computeMD5(filesize, xrefInfo) {\r\n  var time = Math.floor(Date.now() / 1000);\r\n  var filename = xrefInfo.filename || \"\";\r\n  var md5Buffer = [time.toString(), filename, filesize.toString()];\r\n  var md5BufferLen = md5Buffer.reduce(function (a, str) {\r\n    return a + str.length;\r\n  }, 0);\r\n\r\n  for (var _i = 0, _Object$values = Object.values(xrefInfo.info); _i < _Object$values.length; _i++) {\r\n    var value = _Object$values[_i];\r\n    md5Buffer.push(value);\r\n    md5BufferLen += value.length;\r\n  }\r\n\r\n  var array = new Uint8Array(md5BufferLen);\r\n  var offset = 0;\r\n\r\n  for (var _i2 = 0, _md5Buffer = md5Buffer; _i2 < _md5Buffer.length; _i2++) {\r\n    var str = _md5Buffer[_i2];\r\n    writeString(str, offset, array);\r\n    offset += str.length;\r\n  }\r\n\r\n  return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array));\r\n}\r\n\r\nfunction updateXFA(datasetsRef, newRefs, xref) {\r\n  if (datasetsRef === null || xref === null) {\r\n    return;\r\n  }\r\n\r\n  var datasets = xref.fetchIfRef(datasetsRef);\r\n  var str = (0, _util.bytesToString)(datasets.getBytes());\r\n  var xml = new _xml_parser.SimpleXMLParser({\r\n    hasAttributes: true\r\n  }).parseFromString(str);\r\n\r\n  var _iterator3 = _createForOfIteratorHelper(newRefs),\r\n      _step3;\r\n\r\n  try {\r\n    for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n      var xfa = _step3.value.xfa;\r\n\r\n      if (!xfa) {\r\n        continue;\r\n      }\r\n\r\n      var path = xfa.path,\r\n          value = xfa.value;\r\n\r\n      if (!path) {\r\n        continue;\r\n      }\r\n\r\n      var node = xml.documentElement.searchNode((0, _core_utils.parseXFAPath)(path), 0);\r\n\r\n      if (node) {\r\n        node.childNodes = [new _xml_parser.SimpleDOMNode(\"#text\", value)];\r\n      } else {\r\n        (0, _util.warn)(\"Node not found for path: \".concat(path));\r\n      }\r\n    }\r\n  } catch (err) {\r\n    _iterator3.e(err);\r\n  } finally {\r\n    _iterator3.f();\r\n  }\r\n\r\n  var buffer = [];\r\n  xml.documentElement.dump(buffer);\r\n  var updatedXml = buffer.join(\"\");\r\n  var encrypt = xref.encrypt;\r\n\r\n  if (encrypt) {\r\n    var transform = encrypt.createCipherTransform(datasetsRef.num, datasetsRef.gen);\r\n    updatedXml = transform.encryptString(updatedXml);\r\n  }\r\n\r\n  var data = \"\".concat(datasetsRef.num, \" \").concat(datasetsRef.gen, \" obj\\n\") + \"<< /Type /EmbeddedFile /Length \".concat(updatedXml.length, \">>\\nstream\\n\") + updatedXml + \"\\nendstream\\nendobj\\n\";\r\n  newRefs.push({\r\n    ref: datasetsRef,\r\n    data: data\r\n  });\r\n}\r\n\r\nfunction incrementalUpdate(_ref) {\r\n  var originalData = _ref.originalData,\r\n      xrefInfo = _ref.xrefInfo,\r\n      newRefs = _ref.newRefs,\r\n      _ref$xref = _ref.xref,\r\n      xref = _ref$xref === void 0 ? null : _ref$xref,\r\n      _ref$datasetsRef = _ref.datasetsRef,\r\n      datasetsRef = _ref$datasetsRef === void 0 ? null : _ref$datasetsRef;\r\n  updateXFA(datasetsRef, newRefs, xref);\r\n  var newXref = new _primitives.Dict(null);\r\n  var refForXrefTable = xrefInfo.newRef;\r\n  var buffer, baseOffset;\r\n  var lastByte = originalData[originalData.length - 1];\r\n\r\n  if (lastByte === 0x0a || lastByte === 0x0d) {\r\n    buffer = [];\r\n    baseOffset = originalData.length;\r\n  } else {\r\n    buffer = [\"\\n\"];\r\n    baseOffset = originalData.length + 1;\r\n  }\r\n\r\n  newXref.set(\"Size\", refForXrefTable.num + 1);\r\n  newXref.set(\"Prev\", xrefInfo.startXRef);\r\n  newXref.set(\"Type\", _primitives.Name.get(\"XRef\"));\r\n\r\n  if (xrefInfo.rootRef !== null) {\r\n    newXref.set(\"Root\", xrefInfo.rootRef);\r\n  }\r\n\r\n  if (xrefInfo.infoRef !== null) {\r\n    newXref.set(\"Info\", xrefInfo.infoRef);\r\n  }\r\n\r\n  if (xrefInfo.encrypt !== null) {\r\n    newXref.set(\"Encrypt\", xrefInfo.encrypt);\r\n  }\r\n\r\n  newRefs.push({\r\n    ref: refForXrefTable,\r\n    data: \"\"\r\n  });\r\n  newRefs = newRefs.sort(function (a, b) {\r\n    return a.ref.num - b.ref.num;\r\n  });\r\n  var xrefTableData = [[0, 1, 0xffff]];\r\n  var indexes = [0, 1];\r\n  var maxOffset = 0;\r\n\r\n  var _iterator4 = _createForOfIteratorHelper(newRefs),\r\n      _step4;\r\n\r\n  try {\r\n    for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\r\n      var _step4$value = _step4.value,\r\n          ref = _step4$value.ref,\r\n          data = _step4$value.data;\r\n      maxOffset = Math.max(maxOffset, baseOffset);\r\n      xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]);\r\n      baseOffset += data.length;\r\n      indexes.push(ref.num);\r\n      indexes.push(1);\r\n      buffer.push(data);\r\n    }\r\n  } catch (err) {\r\n    _iterator4.e(err);\r\n  } finally {\r\n    _iterator4.f();\r\n  }\r\n\r\n  newXref.set(\"Index\", indexes);\r\n\r\n  if (xrefInfo.fileIds.length !== 0) {\r\n    var md5 = computeMD5(baseOffset, xrefInfo);\r\n    newXref.set(\"ID\", [xrefInfo.fileIds[0], md5]);\r\n  }\r\n\r\n  var offsetSize = Math.ceil(Math.log2(maxOffset) / 8);\r\n  var sizes = [1, offsetSize, 2];\r\n  var structSize = sizes[0] + sizes[1] + sizes[2];\r\n  var tableLength = structSize * xrefTableData.length;\r\n  newXref.set(\"W\", sizes);\r\n  newXref.set(\"Length\", tableLength);\r\n  buffer.push(\"\".concat(refForXrefTable.num, \" \").concat(refForXrefTable.gen, \" obj\\n\"));\r\n  writeDict(newXref, buffer, null);\r\n  buffer.push(\" stream\\n\");\r\n  var bufferLen = buffer.reduce(function (a, str) {\r\n    return a + str.length;\r\n  }, 0);\r\n  var footer = \"\\nendstream\\nendobj\\nstartxref\\n\".concat(baseOffset, \"\\n%%EOF\\n\");\r\n  var array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length);\r\n  array.set(originalData);\r\n  var offset = originalData.length;\r\n\r\n  var _iterator5 = _createForOfIteratorHelper(buffer),\r\n      _step5;\r\n\r\n  try {\r\n    for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\r\n      var str = _step5.value;\r\n      writeString(str, offset, array);\r\n      offset += str.length;\r\n    }\r\n  } catch (err) {\r\n    _iterator5.e(err);\r\n  } finally {\r\n    _iterator5.f();\r\n  }\r\n\r\n  for (var _i3 = 0, _xrefTableData = xrefTableData; _i3 < _xrefTableData.length; _i3++) {\r\n    var _xrefTableData$_i = _slicedToArray(_xrefTableData[_i3], 3),\r\n        type = _xrefTableData$_i[0],\r\n        objOffset = _xrefTableData$_i[1],\r\n        gen = _xrefTableData$_i[2];\r\n\r\n    offset = writeInt(type, sizes[0], offset, array);\r\n    offset = writeInt(objOffset, sizes[1], offset, array);\r\n    offset = writeInt(gen, sizes[2], offset, array);\r\n  }\r\n\r\n  writeString(footer, offset, array);\r\n  return array;\r\n}\r\n\r\n/***/ }),\r\n/* 177 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.XMLParserErrorCode = exports.XMLParserBase = exports.SimpleXMLParser = exports.SimpleDOMNode = void 0;\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar XMLParserErrorCode = {\r\n  NoError: 0,\r\n  EndOfDocument: -1,\r\n  UnterminatedCdat: -2,\r\n  UnterminatedXmlDeclaration: -3,\r\n  UnterminatedDoctypeDeclaration: -4,\r\n  UnterminatedComment: -5,\r\n  MalformedElement: -6,\r\n  OutOfMemory: -7,\r\n  UnterminatedAttributeValue: -8,\r\n  UnterminatedElement: -9,\r\n  ElementNeverBegun: -10\r\n};\r\nexports.XMLParserErrorCode = XMLParserErrorCode;\r\n\r\nfunction isWhitespace(s, index) {\r\n  var ch = s[index];\r\n  return ch === \" \" || ch === \"\\n\" || ch === \"\\r\" || ch === \"\\t\";\r\n}\r\n\r\nfunction isWhitespaceString(s) {\r\n  for (var i = 0, ii = s.length; i < ii; i++) {\r\n    if (!isWhitespace(s, i)) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nvar XMLParserBase = /*#__PURE__*/function () {\r\n  function XMLParserBase() {\r\n    _classCallCheck(this, XMLParserBase);\r\n  }\r\n\r\n  _createClass(XMLParserBase, [{\r\n    key: \"_resolveEntities\",\r\n    value: function _resolveEntities(s) {\r\n      var _this = this;\r\n\r\n      return s.replace(/&([^;]+);/g, function (all, entity) {\r\n        if (entity.substring(0, 2) === \"#x\") {\r\n          return String.fromCodePoint(parseInt(entity.substring(2), 16));\r\n        } else if (entity.substring(0, 1) === \"#\") {\r\n          return String.fromCodePoint(parseInt(entity.substring(1), 10));\r\n        }\r\n\r\n        switch (entity) {\r\n          case \"lt\":\r\n            return \"<\";\r\n\r\n          case \"gt\":\r\n            return \">\";\r\n\r\n          case \"amp\":\r\n            return \"&\";\r\n\r\n          case \"quot\":\r\n            return '\"';\r\n\r\n          case \"apos\":\r\n            return \"'\";\r\n        }\r\n\r\n        return _this.onResolveEntity(entity);\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_parseContent\",\r\n    value: function _parseContent(s, start) {\r\n      var attributes = [];\r\n      var pos = start;\r\n\r\n      function skipWs() {\r\n        while (pos < s.length && isWhitespace(s, pos)) {\r\n          ++pos;\r\n        }\r\n      }\r\n\r\n      while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \">\" && s[pos] !== \"/\") {\r\n        ++pos;\r\n      }\r\n\r\n      var name = s.substring(start, pos);\r\n      skipWs();\r\n\r\n      while (pos < s.length && s[pos] !== \">\" && s[pos] !== \"/\" && s[pos] !== \"?\") {\r\n        skipWs();\r\n        var attrName = \"\",\r\n            attrValue = \"\";\r\n\r\n        while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \"=\") {\r\n          attrName += s[pos];\r\n          ++pos;\r\n        }\r\n\r\n        skipWs();\r\n\r\n        if (s[pos] !== \"=\") {\r\n          return null;\r\n        }\r\n\r\n        ++pos;\r\n        skipWs();\r\n        var attrEndChar = s[pos];\r\n\r\n        if (attrEndChar !== '\"' && attrEndChar !== \"'\") {\r\n          return null;\r\n        }\r\n\r\n        var attrEndIndex = s.indexOf(attrEndChar, ++pos);\r\n\r\n        if (attrEndIndex < 0) {\r\n          return null;\r\n        }\r\n\r\n        attrValue = s.substring(pos, attrEndIndex);\r\n        attributes.push({\r\n          name: attrName,\r\n          value: this._resolveEntities(attrValue)\r\n        });\r\n        pos = attrEndIndex + 1;\r\n        skipWs();\r\n      }\r\n\r\n      return {\r\n        name: name,\r\n        attributes: attributes,\r\n        parsed: pos - start\r\n      };\r\n    }\r\n  }, {\r\n    key: \"_parseProcessingInstruction\",\r\n    value: function _parseProcessingInstruction(s, start) {\r\n      var pos = start;\r\n\r\n      function skipWs() {\r\n        while (pos < s.length && isWhitespace(s, pos)) {\r\n          ++pos;\r\n        }\r\n      }\r\n\r\n      while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== \">\" && s[pos] !== \"/\") {\r\n        ++pos;\r\n      }\r\n\r\n      var name = s.substring(start, pos);\r\n      skipWs();\r\n      var attrStart = pos;\r\n\r\n      while (pos < s.length && (s[pos] !== \"?\" || s[pos + 1] !== \">\")) {\r\n        ++pos;\r\n      }\r\n\r\n      var value = s.substring(attrStart, pos);\r\n      return {\r\n        name: name,\r\n        value: value,\r\n        parsed: pos - start\r\n      };\r\n    }\r\n  }, {\r\n    key: \"parseXml\",\r\n    value: function parseXml(s) {\r\n      var i = 0;\r\n\r\n      while (i < s.length) {\r\n        var ch = s[i];\r\n        var j = i;\r\n\r\n        if (ch === \"<\") {\r\n          ++j;\r\n          var ch2 = s[j];\r\n          var q = void 0;\r\n\r\n          switch (ch2) {\r\n            case \"/\":\r\n              ++j;\r\n              q = s.indexOf(\">\", j);\r\n\r\n              if (q < 0) {\r\n                this.onError(XMLParserErrorCode.UnterminatedElement);\r\n                return;\r\n              }\r\n\r\n              this.onEndElement(s.substring(j, q));\r\n              j = q + 1;\r\n              break;\r\n\r\n            case \"?\":\r\n              ++j;\r\n\r\n              var pi = this._parseProcessingInstruction(s, j);\r\n\r\n              if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== \"?>\") {\r\n                this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);\r\n                return;\r\n              }\r\n\r\n              this.onPi(pi.name, pi.value);\r\n              j += pi.parsed + 2;\r\n              break;\r\n\r\n            case \"!\":\r\n              if (s.substring(j + 1, j + 3) === \"--\") {\r\n                q = s.indexOf(\"-->\", j + 3);\r\n\r\n                if (q < 0) {\r\n                  this.onError(XMLParserErrorCode.UnterminatedComment);\r\n                  return;\r\n                }\r\n\r\n                this.onComment(s.substring(j + 3, q));\r\n                j = q + 3;\r\n              } else if (s.substring(j + 1, j + 8) === \"[CDATA[\") {\r\n                q = s.indexOf(\"]]>\", j + 8);\r\n\r\n                if (q < 0) {\r\n                  this.onError(XMLParserErrorCode.UnterminatedCdat);\r\n                  return;\r\n                }\r\n\r\n                this.onCdata(s.substring(j + 8, q));\r\n                j = q + 3;\r\n              } else if (s.substring(j + 1, j + 8) === \"DOCTYPE\") {\r\n                var q2 = s.indexOf(\"[\", j + 8);\r\n                var complexDoctype = false;\r\n                q = s.indexOf(\">\", j + 8);\r\n\r\n                if (q < 0) {\r\n                  this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);\r\n                  return;\r\n                }\r\n\r\n                if (q2 > 0 && q > q2) {\r\n                  q = s.indexOf(\"]>\", j + 8);\r\n\r\n                  if (q < 0) {\r\n                    this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);\r\n                    return;\r\n                  }\r\n\r\n                  complexDoctype = true;\r\n                }\r\n\r\n                var doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0));\r\n                this.onDoctype(doctypeContent);\r\n                j = q + (complexDoctype ? 2 : 1);\r\n              } else {\r\n                this.onError(XMLParserErrorCode.MalformedElement);\r\n                return;\r\n              }\r\n\r\n              break;\r\n\r\n            default:\r\n              var content = this._parseContent(s, j);\r\n\r\n              if (content === null) {\r\n                this.onError(XMLParserErrorCode.MalformedElement);\r\n                return;\r\n              }\r\n\r\n              var isClosed = false;\r\n\r\n              if (s.substring(j + content.parsed, j + content.parsed + 2) === \"/>\") {\r\n                isClosed = true;\r\n              } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== \">\") {\r\n                this.onError(XMLParserErrorCode.UnterminatedElement);\r\n                return;\r\n              }\r\n\r\n              this.onBeginElement(content.name, content.attributes, isClosed);\r\n              j += content.parsed + (isClosed ? 2 : 1);\r\n              break;\r\n          }\r\n        } else {\r\n          while (j < s.length && s[j] !== \"<\") {\r\n            j++;\r\n          }\r\n\r\n          var text = s.substring(i, j);\r\n          this.onText(this._resolveEntities(text));\r\n        }\r\n\r\n        i = j;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"onResolveEntity\",\r\n    value: function onResolveEntity(name) {\r\n      return \"&\".concat(name, \";\");\r\n    }\r\n  }, {\r\n    key: \"onPi\",\r\n    value: function onPi(name, value) {}\r\n  }, {\r\n    key: \"onComment\",\r\n    value: function onComment(text) {}\r\n  }, {\r\n    key: \"onCdata\",\r\n    value: function onCdata(text) {}\r\n  }, {\r\n    key: \"onDoctype\",\r\n    value: function onDoctype(doctypeContent) {}\r\n  }, {\r\n    key: \"onText\",\r\n    value: function onText(text) {}\r\n  }, {\r\n    key: \"onBeginElement\",\r\n    value: function onBeginElement(name, attributes, isEmpty) {}\r\n  }, {\r\n    key: \"onEndElement\",\r\n    value: function onEndElement(name) {}\r\n  }, {\r\n    key: \"onError\",\r\n    value: function onError(code) {}\r\n  }]);\r\n\r\n  return XMLParserBase;\r\n}();\r\n\r\nexports.XMLParserBase = XMLParserBase;\r\n\r\nvar SimpleDOMNode = /*#__PURE__*/function () {\r\n  function SimpleDOMNode(nodeName, nodeValue) {\r\n    _classCallCheck(this, SimpleDOMNode);\r\n\r\n    this.nodeName = nodeName;\r\n    this.nodeValue = nodeValue;\r\n    Object.defineProperty(this, \"parentNode\", {\r\n      value: null,\r\n      writable: true\r\n    });\r\n  }\r\n\r\n  _createClass(SimpleDOMNode, [{\r\n    key: \"firstChild\",\r\n    get: function get() {\r\n      return this.childNodes && this.childNodes[0];\r\n    }\r\n  }, {\r\n    key: \"nextSibling\",\r\n    get: function get() {\r\n      var childNodes = this.parentNode.childNodes;\r\n\r\n      if (!childNodes) {\r\n        return undefined;\r\n      }\r\n\r\n      var index = childNodes.indexOf(this);\r\n\r\n      if (index === -1) {\r\n        return undefined;\r\n      }\r\n\r\n      return childNodes[index + 1];\r\n    }\r\n  }, {\r\n    key: \"textContent\",\r\n    get: function get() {\r\n      if (!this.childNodes) {\r\n        return this.nodeValue || \"\";\r\n      }\r\n\r\n      return this.childNodes.map(function (child) {\r\n        return child.textContent;\r\n      }).join(\"\");\r\n    }\r\n  }, {\r\n    key: \"hasChildNodes\",\r\n    value: function hasChildNodes() {\r\n      return this.childNodes && this.childNodes.length > 0;\r\n    }\r\n  }, {\r\n    key: \"searchNode\",\r\n    value: function searchNode(paths, pos) {\r\n      if (pos >= paths.length) {\r\n        return this;\r\n      }\r\n\r\n      var component = paths[pos];\r\n      var stack = [];\r\n      var node = this;\r\n\r\n      while (true) {\r\n        if (component.name === node.nodeName) {\r\n          if (component.pos === 0) {\r\n            var res = node.searchNode(paths, pos + 1);\r\n\r\n            if (res !== null) {\r\n              return res;\r\n            }\r\n          } else if (stack.length === 0) {\r\n            return null;\r\n          } else {\r\n            var _stack$pop = stack.pop(),\r\n                _stack$pop2 = _slicedToArray(_stack$pop, 1),\r\n                parent = _stack$pop2[0];\r\n\r\n            var siblingPos = 0;\r\n\r\n            var _iterator = _createForOfIteratorHelper(parent.childNodes),\r\n                _step;\r\n\r\n            try {\r\n              for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n                var child = _step.value;\r\n\r\n                if (component.name === child.nodeName) {\r\n                  if (siblingPos === component.pos) {\r\n                    return child.searchNode(paths, pos + 1);\r\n                  }\r\n\r\n                  siblingPos++;\r\n                }\r\n              }\r\n            } catch (err) {\r\n              _iterator.e(err);\r\n            } finally {\r\n              _iterator.f();\r\n            }\r\n\r\n            return node.searchNode(paths, pos + 1);\r\n          }\r\n        }\r\n\r\n        if (node.childNodes && node.childNodes.length !== 0) {\r\n          stack.push([node, 0]);\r\n          node = node.childNodes[0];\r\n        } else if (stack.length === 0) {\r\n          return null;\r\n        } else {\r\n          while (stack.length !== 0) {\r\n            var _stack$pop3 = stack.pop(),\r\n                _stack$pop4 = _slicedToArray(_stack$pop3, 2),\r\n                _parent = _stack$pop4[0],\r\n                currentPos = _stack$pop4[1];\r\n\r\n            var newPos = currentPos + 1;\r\n\r\n            if (newPos < _parent.childNodes.length) {\r\n              stack.push([_parent, newPos]);\r\n              node = _parent.childNodes[newPos];\r\n              break;\r\n            }\r\n          }\r\n\r\n          if (stack.length === 0) {\r\n            return null;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"dump\",\r\n    value: function dump(buffer) {\r\n      if (this.nodeName === \"#text\") {\r\n        buffer.push((0, _util.encodeToXmlString)(this.nodeValue));\r\n        return;\r\n      }\r\n\r\n      buffer.push(\"<\".concat(this.nodeName));\r\n\r\n      if (this.attributes) {\r\n        var _iterator2 = _createForOfIteratorHelper(this.attributes),\r\n            _step2;\r\n\r\n        try {\r\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n            var attribute = _step2.value;\r\n            buffer.push(\" \".concat(attribute.name, \"=\\\"\").concat((0, _util.encodeToXmlString)(attribute.value), \"\\\"\"));\r\n          }\r\n        } catch (err) {\r\n          _iterator2.e(err);\r\n        } finally {\r\n          _iterator2.f();\r\n        }\r\n      }\r\n\r\n      if (this.hasChildNodes()) {\r\n        buffer.push(\">\");\r\n\r\n        var _iterator3 = _createForOfIteratorHelper(this.childNodes),\r\n            _step3;\r\n\r\n        try {\r\n          for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n            var child = _step3.value;\r\n            child.dump(buffer);\r\n          }\r\n        } catch (err) {\r\n          _iterator3.e(err);\r\n        } finally {\r\n          _iterator3.f();\r\n        }\r\n\r\n        buffer.push(\"</\".concat(this.nodeName, \">\"));\r\n      } else if (this.nodeValue) {\r\n        buffer.push(\">\".concat((0, _util.encodeToXmlString)(this.nodeValue), \"</\").concat(this.nodeName, \">\"));\r\n      } else {\r\n        buffer.push(\"/>\");\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return SimpleDOMNode;\r\n}();\r\n\r\nexports.SimpleDOMNode = SimpleDOMNode;\r\n\r\nvar SimpleXMLParser = /*#__PURE__*/function (_XMLParserBase) {\r\n  _inherits(SimpleXMLParser, _XMLParserBase);\r\n\r\n  var _super = _createSuper(SimpleXMLParser);\r\n\r\n  function SimpleXMLParser(_ref) {\r\n    var _this2;\r\n\r\n    var _ref$hasAttributes = _ref.hasAttributes,\r\n        hasAttributes = _ref$hasAttributes === void 0 ? false : _ref$hasAttributes,\r\n        _ref$lowerCaseName = _ref.lowerCaseName,\r\n        lowerCaseName = _ref$lowerCaseName === void 0 ? false : _ref$lowerCaseName;\r\n\r\n    _classCallCheck(this, SimpleXMLParser);\r\n\r\n    _this2 = _super.call(this);\r\n    _this2._currentFragment = null;\r\n    _this2._stack = null;\r\n    _this2._errorCode = XMLParserErrorCode.NoError;\r\n    _this2._hasAttributes = hasAttributes;\r\n    _this2._lowerCaseName = lowerCaseName;\r\n    return _this2;\r\n  }\r\n\r\n  _createClass(SimpleXMLParser, [{\r\n    key: \"parseFromString\",\r\n    value: function parseFromString(data) {\r\n      this._currentFragment = [];\r\n      this._stack = [];\r\n      this._errorCode = XMLParserErrorCode.NoError;\r\n      this.parseXml(data);\r\n\r\n      if (this._errorCode !== XMLParserErrorCode.NoError) {\r\n        return undefined;\r\n      }\r\n\r\n      var _this$_currentFragmen = _slicedToArray(this._currentFragment, 1),\r\n          documentElement = _this$_currentFragmen[0];\r\n\r\n      if (!documentElement) {\r\n        return undefined;\r\n      }\r\n\r\n      return {\r\n        documentElement: documentElement\r\n      };\r\n    }\r\n  }, {\r\n    key: \"onText\",\r\n    value: function onText(text) {\r\n      if (isWhitespaceString(text)) {\r\n        return;\r\n      }\r\n\r\n      var node = new SimpleDOMNode(\"#text\", text);\r\n\r\n      this._currentFragment.push(node);\r\n    }\r\n  }, {\r\n    key: \"onCdata\",\r\n    value: function onCdata(text) {\r\n      var node = new SimpleDOMNode(\"#text\", text);\r\n\r\n      this._currentFragment.push(node);\r\n    }\r\n  }, {\r\n    key: \"onBeginElement\",\r\n    value: function onBeginElement(name, attributes, isEmpty) {\r\n      if (this._lowerCaseName) {\r\n        name = name.toLowerCase();\r\n      }\r\n\r\n      var node = new SimpleDOMNode(name);\r\n      node.childNodes = [];\r\n\r\n      if (this._hasAttributes) {\r\n        node.attributes = attributes;\r\n      }\r\n\r\n      this._currentFragment.push(node);\r\n\r\n      if (isEmpty) {\r\n        return;\r\n      }\r\n\r\n      this._stack.push(this._currentFragment);\r\n\r\n      this._currentFragment = node.childNodes;\r\n    }\r\n  }, {\r\n    key: \"onEndElement\",\r\n    value: function onEndElement(name) {\r\n      this._currentFragment = this._stack.pop() || [];\r\n      var lastElement = this._currentFragment[this._currentFragment.length - 1];\r\n\r\n      if (!lastElement) {\r\n        return;\r\n      }\r\n\r\n      for (var i = 0, ii = lastElement.childNodes.length; i < ii; i++) {\r\n        lastElement.childNodes[i].parentNode = lastElement;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"onError\",\r\n    value: function onError(code) {\r\n      this._errorCode = code;\r\n    }\r\n  }]);\r\n\r\n  return SimpleXMLParser;\r\n}(XMLParserBase);\r\n\r\nexports.SimpleXMLParser = SimpleXMLParser;\r\n\r\n/***/ }),\r\n/* 178 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.MessageHandler = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nvar CallbackKind = {\r\n  UNKNOWN: 0,\r\n  DATA: 1,\r\n  ERROR: 2\r\n};\r\nvar StreamKind = {\r\n  UNKNOWN: 0,\r\n  CANCEL: 1,\r\n  CANCEL_COMPLETE: 2,\r\n  CLOSE: 3,\r\n  ENQUEUE: 4,\r\n  ERROR: 5,\r\n  PULL: 6,\r\n  PULL_COMPLETE: 7,\r\n  START_COMPLETE: 8\r\n};\r\n\r\nfunction wrapReason(reason) {\r\n  if (_typeof(reason) !== \"object\" || reason === null) {\r\n    return reason;\r\n  }\r\n\r\n  switch (reason.name) {\r\n    case \"AbortException\":\r\n      return new _util.AbortException(reason.message);\r\n\r\n    case \"MissingPDFException\":\r\n      return new _util.MissingPDFException(reason.message);\r\n\r\n    case \"UnexpectedResponseException\":\r\n      return new _util.UnexpectedResponseException(reason.message, reason.status);\r\n\r\n    case \"UnknownErrorException\":\r\n      return new _util.UnknownErrorException(reason.message, reason.details);\r\n\r\n    default:\r\n      return new _util.UnknownErrorException(reason.message, reason.toString());\r\n  }\r\n}\r\n\r\nvar MessageHandler = /*#__PURE__*/function () {\r\n  function MessageHandler(sourceName, targetName, comObj) {\r\n    var _this = this;\r\n\r\n    _classCallCheck(this, MessageHandler);\r\n\r\n    this.sourceName = sourceName;\r\n    this.targetName = targetName;\r\n    this.comObj = comObj;\r\n    this.callbackId = 1;\r\n    this.streamId = 1;\r\n    this.postMessageTransfers = true;\r\n    this.streamSinks = Object.create(null);\r\n    this.streamControllers = Object.create(null);\r\n    this.callbackCapabilities = Object.create(null);\r\n    this.actionHandler = Object.create(null);\r\n\r\n    this._onComObjOnMessage = function (event) {\r\n      var data = event.data;\r\n\r\n      if (data.targetName !== _this.sourceName) {\r\n        return;\r\n      }\r\n\r\n      if (data.stream) {\r\n        _this._processStreamMessage(data);\r\n\r\n        return;\r\n      }\r\n\r\n      if (data.callback) {\r\n        var callbackId = data.callbackId;\r\n        var capability = _this.callbackCapabilities[callbackId];\r\n\r\n        if (!capability) {\r\n          throw new Error(\"Cannot resolve callback \".concat(callbackId));\r\n        }\r\n\r\n        delete _this.callbackCapabilities[callbackId];\r\n\r\n        if (data.callback === CallbackKind.DATA) {\r\n          capability.resolve(data.data);\r\n        } else if (data.callback === CallbackKind.ERROR) {\r\n          capability.reject(wrapReason(data.reason));\r\n        } else {\r\n          throw new Error(\"Unexpected callback case\");\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      var action = _this.actionHandler[data.action];\r\n\r\n      if (!action) {\r\n        throw new Error(\"Unknown action from worker: \".concat(data.action));\r\n      }\r\n\r\n      if (data.callbackId) {\r\n        var cbSourceName = _this.sourceName;\r\n        var cbTargetName = data.sourceName;\r\n        new Promise(function (resolve) {\r\n          resolve(action(data.data));\r\n        }).then(function (result) {\r\n          comObj.postMessage({\r\n            sourceName: cbSourceName,\r\n            targetName: cbTargetName,\r\n            callback: CallbackKind.DATA,\r\n            callbackId: data.callbackId,\r\n            data: result\r\n          });\r\n        }, function (reason) {\r\n          comObj.postMessage({\r\n            sourceName: cbSourceName,\r\n            targetName: cbTargetName,\r\n            callback: CallbackKind.ERROR,\r\n            callbackId: data.callbackId,\r\n            reason: wrapReason(reason)\r\n          });\r\n        });\r\n        return;\r\n      }\r\n\r\n      if (data.streamId) {\r\n        _this._createStreamSink(data);\r\n\r\n        return;\r\n      }\r\n\r\n      action(data.data);\r\n    };\r\n\r\n    comObj.addEventListener(\"message\", this._onComObjOnMessage);\r\n  }\r\n\r\n  _createClass(MessageHandler, [{\r\n    key: \"on\",\r\n    value: function on(actionName, handler) {\r\n      var ah = this.actionHandler;\r\n\r\n      if (ah[actionName]) {\r\n        throw new Error(\"There is already an actionName called \\\"\".concat(actionName, \"\\\"\"));\r\n      }\r\n\r\n      ah[actionName] = handler;\r\n    }\r\n  }, {\r\n    key: \"send\",\r\n    value: function send(actionName, data, transfers) {\r\n      this._postMessage({\r\n        sourceName: this.sourceName,\r\n        targetName: this.targetName,\r\n        action: actionName,\r\n        data: data\r\n      }, transfers);\r\n    }\r\n  }, {\r\n    key: \"sendWithPromise\",\r\n    value: function sendWithPromise(actionName, data, transfers) {\r\n      var callbackId = this.callbackId++;\r\n      var capability = (0, _util.createPromiseCapability)();\r\n      this.callbackCapabilities[callbackId] = capability;\r\n\r\n      try {\r\n        this._postMessage({\r\n          sourceName: this.sourceName,\r\n          targetName: this.targetName,\r\n          action: actionName,\r\n          callbackId: callbackId,\r\n          data: data\r\n        }, transfers);\r\n      } catch (ex) {\r\n        capability.reject(ex);\r\n      }\r\n\r\n      return capability.promise;\r\n    }\r\n  }, {\r\n    key: \"sendWithStream\",\r\n    value: function sendWithStream(actionName, data, queueingStrategy, transfers) {\r\n      var _this2 = this;\r\n\r\n      var streamId = this.streamId++;\r\n      var sourceName = this.sourceName;\r\n      var targetName = this.targetName;\r\n      var comObj = this.comObj;\r\n      return new ReadableStream({\r\n        start: function start(controller) {\r\n          var startCapability = (0, _util.createPromiseCapability)();\r\n          _this2.streamControllers[streamId] = {\r\n            controller: controller,\r\n            startCall: startCapability,\r\n            pullCall: null,\r\n            cancelCall: null,\r\n            isClosed: false\r\n          };\r\n\r\n          _this2._postMessage({\r\n            sourceName: sourceName,\r\n            targetName: targetName,\r\n            action: actionName,\r\n            streamId: streamId,\r\n            data: data,\r\n            desiredSize: controller.desiredSize\r\n          }, transfers);\r\n\r\n          return startCapability.promise;\r\n        },\r\n        pull: function pull(controller) {\r\n          var pullCapability = (0, _util.createPromiseCapability)();\r\n          _this2.streamControllers[streamId].pullCall = pullCapability;\r\n          comObj.postMessage({\r\n            sourceName: sourceName,\r\n            targetName: targetName,\r\n            stream: StreamKind.PULL,\r\n            streamId: streamId,\r\n            desiredSize: controller.desiredSize\r\n          });\r\n          return pullCapability.promise;\r\n        },\r\n        cancel: function cancel(reason) {\r\n          (0, _util.assert)(reason instanceof Error, \"cancel must have a valid reason\");\r\n          var cancelCapability = (0, _util.createPromiseCapability)();\r\n          _this2.streamControllers[streamId].cancelCall = cancelCapability;\r\n          _this2.streamControllers[streamId].isClosed = true;\r\n          comObj.postMessage({\r\n            sourceName: sourceName,\r\n            targetName: targetName,\r\n            stream: StreamKind.CANCEL,\r\n            streamId: streamId,\r\n            reason: wrapReason(reason)\r\n          });\r\n          return cancelCapability.promise;\r\n        }\r\n      }, queueingStrategy);\r\n    }\r\n  }, {\r\n    key: \"_createStreamSink\",\r\n    value: function _createStreamSink(data) {\r\n      var self = this;\r\n      var action = this.actionHandler[data.action];\r\n      var streamId = data.streamId;\r\n      var sourceName = this.sourceName;\r\n      var targetName = data.sourceName;\r\n      var comObj = this.comObj;\r\n      var streamSink = {\r\n        enqueue: function enqueue(chunk) {\r\n          var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\r\n          var transfers = arguments.length > 2 ? arguments[2] : undefined;\r\n\r\n          if (this.isCancelled) {\r\n            return;\r\n          }\r\n\r\n          var lastDesiredSize = this.desiredSize;\r\n          this.desiredSize -= size;\r\n\r\n          if (lastDesiredSize > 0 && this.desiredSize <= 0) {\r\n            this.sinkCapability = (0, _util.createPromiseCapability)();\r\n            this.ready = this.sinkCapability.promise;\r\n          }\r\n\r\n          self._postMessage({\r\n            sourceName: sourceName,\r\n            targetName: targetName,\r\n            stream: StreamKind.ENQUEUE,\r\n            streamId: streamId,\r\n            chunk: chunk\r\n          }, transfers);\r\n        },\r\n        close: function close() {\r\n          if (this.isCancelled) {\r\n            return;\r\n          }\r\n\r\n          this.isCancelled = true;\r\n          comObj.postMessage({\r\n            sourceName: sourceName,\r\n            targetName: targetName,\r\n            stream: StreamKind.CLOSE,\r\n            streamId: streamId\r\n          });\r\n          delete self.streamSinks[streamId];\r\n        },\r\n        error: function error(reason) {\r\n          (0, _util.assert)(reason instanceof Error, \"error must have a valid reason\");\r\n\r\n          if (this.isCancelled) {\r\n            return;\r\n          }\r\n\r\n          this.isCancelled = true;\r\n          comObj.postMessage({\r\n            sourceName: sourceName,\r\n            targetName: targetName,\r\n            stream: StreamKind.ERROR,\r\n            streamId: streamId,\r\n            reason: wrapReason(reason)\r\n          });\r\n        },\r\n        sinkCapability: (0, _util.createPromiseCapability)(),\r\n        onPull: null,\r\n        onCancel: null,\r\n        isCancelled: false,\r\n        desiredSize: data.desiredSize,\r\n        ready: null\r\n      };\r\n      streamSink.sinkCapability.resolve();\r\n      streamSink.ready = streamSink.sinkCapability.promise;\r\n      this.streamSinks[streamId] = streamSink;\r\n      new Promise(function (resolve) {\r\n        resolve(action(data.data, streamSink));\r\n      }).then(function () {\r\n        comObj.postMessage({\r\n          sourceName: sourceName,\r\n          targetName: targetName,\r\n          stream: StreamKind.START_COMPLETE,\r\n          streamId: streamId,\r\n          success: true\r\n        });\r\n      }, function (reason) {\r\n        comObj.postMessage({\r\n          sourceName: sourceName,\r\n          targetName: targetName,\r\n          stream: StreamKind.START_COMPLETE,\r\n          streamId: streamId,\r\n          reason: wrapReason(reason)\r\n        });\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_processStreamMessage\",\r\n    value: function _processStreamMessage(data) {\r\n      var streamId = data.streamId;\r\n      var sourceName = this.sourceName;\r\n      var targetName = data.sourceName;\r\n      var comObj = this.comObj;\r\n\r\n      switch (data.stream) {\r\n        case StreamKind.START_COMPLETE:\r\n          if (data.success) {\r\n            this.streamControllers[streamId].startCall.resolve();\r\n          } else {\r\n            this.streamControllers[streamId].startCall.reject(wrapReason(data.reason));\r\n          }\r\n\r\n          break;\r\n\r\n        case StreamKind.PULL_COMPLETE:\r\n          if (data.success) {\r\n            this.streamControllers[streamId].pullCall.resolve();\r\n          } else {\r\n            this.streamControllers[streamId].pullCall.reject(wrapReason(data.reason));\r\n          }\r\n\r\n          break;\r\n\r\n        case StreamKind.PULL:\r\n          if (!this.streamSinks[streamId]) {\r\n            comObj.postMessage({\r\n              sourceName: sourceName,\r\n              targetName: targetName,\r\n              stream: StreamKind.PULL_COMPLETE,\r\n              streamId: streamId,\r\n              success: true\r\n            });\r\n            break;\r\n          }\r\n\r\n          if (this.streamSinks[streamId].desiredSize <= 0 && data.desiredSize > 0) {\r\n            this.streamSinks[streamId].sinkCapability.resolve();\r\n          }\r\n\r\n          this.streamSinks[streamId].desiredSize = data.desiredSize;\r\n          var onPull = this.streamSinks[data.streamId].onPull;\r\n          new Promise(function (resolve) {\r\n            resolve(onPull && onPull());\r\n          }).then(function () {\r\n            comObj.postMessage({\r\n              sourceName: sourceName,\r\n              targetName: targetName,\r\n              stream: StreamKind.PULL_COMPLETE,\r\n              streamId: streamId,\r\n              success: true\r\n            });\r\n          }, function (reason) {\r\n            comObj.postMessage({\r\n              sourceName: sourceName,\r\n              targetName: targetName,\r\n              stream: StreamKind.PULL_COMPLETE,\r\n              streamId: streamId,\r\n              reason: wrapReason(reason)\r\n            });\r\n          });\r\n          break;\r\n\r\n        case StreamKind.ENQUEUE:\r\n          (0, _util.assert)(this.streamControllers[streamId], \"enqueue should have stream controller\");\r\n\r\n          if (this.streamControllers[streamId].isClosed) {\r\n            break;\r\n          }\r\n\r\n          this.streamControllers[streamId].controller.enqueue(data.chunk);\r\n          break;\r\n\r\n        case StreamKind.CLOSE:\r\n          (0, _util.assert)(this.streamControllers[streamId], \"close should have stream controller\");\r\n\r\n          if (this.streamControllers[streamId].isClosed) {\r\n            break;\r\n          }\r\n\r\n          this.streamControllers[streamId].isClosed = true;\r\n          this.streamControllers[streamId].controller.close();\r\n\r\n          this._deleteStreamController(streamId);\r\n\r\n          break;\r\n\r\n        case StreamKind.ERROR:\r\n          (0, _util.assert)(this.streamControllers[streamId], \"error should have stream controller\");\r\n          this.streamControllers[streamId].controller.error(wrapReason(data.reason));\r\n\r\n          this._deleteStreamController(streamId);\r\n\r\n          break;\r\n\r\n        case StreamKind.CANCEL_COMPLETE:\r\n          if (data.success) {\r\n            this.streamControllers[streamId].cancelCall.resolve();\r\n          } else {\r\n            this.streamControllers[streamId].cancelCall.reject(wrapReason(data.reason));\r\n          }\r\n\r\n          this._deleteStreamController(streamId);\r\n\r\n          break;\r\n\r\n        case StreamKind.CANCEL:\r\n          if (!this.streamSinks[streamId]) {\r\n            break;\r\n          }\r\n\r\n          var onCancel = this.streamSinks[data.streamId].onCancel;\r\n          new Promise(function (resolve) {\r\n            resolve(onCancel && onCancel(wrapReason(data.reason)));\r\n          }).then(function () {\r\n            comObj.postMessage({\r\n              sourceName: sourceName,\r\n              targetName: targetName,\r\n              stream: StreamKind.CANCEL_COMPLETE,\r\n              streamId: streamId,\r\n              success: true\r\n            });\r\n          }, function (reason) {\r\n            comObj.postMessage({\r\n              sourceName: sourceName,\r\n              targetName: targetName,\r\n              stream: StreamKind.CANCEL_COMPLETE,\r\n              streamId: streamId,\r\n              reason: wrapReason(reason)\r\n            });\r\n          });\r\n          this.streamSinks[streamId].sinkCapability.reject(wrapReason(data.reason));\r\n          this.streamSinks[streamId].isCancelled = true;\r\n          delete this.streamSinks[streamId];\r\n          break;\r\n\r\n        default:\r\n          throw new Error(\"Unexpected stream case\");\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_deleteStreamController\",\r\n    value: function () {\r\n      var _deleteStreamController2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(streamId) {\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                _context.next = 2;\r\n                return Promise.allSettled([this.streamControllers[streamId].startCall, this.streamControllers[streamId].pullCall, this.streamControllers[streamId].cancelCall].map(function (capability) {\r\n                  return capability && capability.promise;\r\n                }));\r\n\r\n              case 2:\r\n                delete this.streamControllers[streamId];\r\n\r\n              case 3:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function _deleteStreamController(_x) {\r\n        return _deleteStreamController2.apply(this, arguments);\r\n      }\r\n\r\n      return _deleteStreamController;\r\n    }()\r\n  }, {\r\n    key: \"_postMessage\",\r\n    value: function _postMessage(message, transfers) {\r\n      if (transfers && this.postMessageTransfers) {\r\n        this.comObj.postMessage(message, transfers);\r\n      } else {\r\n        this.comObj.postMessage(message);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"destroy\",\r\n    value: function destroy() {\r\n      this.comObj.removeEventListener(\"message\", this._onComObjOnMessage);\r\n    }\r\n  }]);\r\n\r\n  return MessageHandler;\r\n}();\r\n\r\nexports.MessageHandler = MessageHandler;\r\n\r\n/***/ }),\r\n/* 179 */\r\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\r\n\r\n\"use strict\";\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFWorkerStream = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__w_pdfjs_require__(2));\r\n\r\nvar _util = __w_pdfjs_require__(4);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar PDFWorkerStream = /*#__PURE__*/function () {\r\n  function PDFWorkerStream(msgHandler) {\r\n    _classCallCheck(this, PDFWorkerStream);\r\n\r\n    this._msgHandler = msgHandler;\r\n    this._contentLength = null;\r\n    this._fullRequestReader = null;\r\n    this._rangeRequestReaders = [];\r\n  }\r\n\r\n  _createClass(PDFWorkerStream, [{\r\n    key: \"getFullReader\",\r\n    value: function getFullReader() {\r\n      (0, _util.assert)(!this._fullRequestReader, \"PDFWorkerStream.getFullReader can only be called once.\");\r\n      this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler);\r\n      return this._fullRequestReader;\r\n    }\r\n  }, {\r\n    key: \"getRangeReader\",\r\n    value: function getRangeReader(begin, end) {\r\n      var reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler);\r\n\r\n      this._rangeRequestReaders.push(reader);\r\n\r\n      return reader;\r\n    }\r\n  }, {\r\n    key: \"cancelAllRequests\",\r\n    value: function cancelAllRequests(reason) {\r\n      if (this._fullRequestReader) {\r\n        this._fullRequestReader.cancel(reason);\r\n      }\r\n\r\n      var readers = this._rangeRequestReaders.slice(0);\r\n\r\n      readers.forEach(function (reader) {\r\n        reader.cancel(reason);\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return PDFWorkerStream;\r\n}();\r\n\r\nexports.PDFWorkerStream = PDFWorkerStream;\r\n\r\nvar PDFWorkerStreamReader = /*#__PURE__*/function () {\r\n  function PDFWorkerStreamReader(msgHandler) {\r\n    var _this = this;\r\n\r\n    _classCallCheck(this, PDFWorkerStreamReader);\r\n\r\n    this._msgHandler = msgHandler;\r\n    this.onProgress = null;\r\n    this._contentLength = null;\r\n    this._isRangeSupported = false;\r\n    this._isStreamingSupported = false;\r\n\r\n    var readableStream = this._msgHandler.sendWithStream(\"GetReader\");\r\n\r\n    this._reader = readableStream.getReader();\r\n    this._headersReady = this._msgHandler.sendWithPromise(\"ReaderHeadersReady\").then(function (data) {\r\n      _this._isStreamingSupported = data.isStreamingSupported;\r\n      _this._isRangeSupported = data.isRangeSupported;\r\n      _this._contentLength = data.contentLength;\r\n    });\r\n  }\r\n\r\n  _createClass(PDFWorkerStreamReader, [{\r\n    key: \"headersReady\",\r\n    get: function get() {\r\n      return this._headersReady;\r\n    }\r\n  }, {\r\n    key: \"contentLength\",\r\n    get: function get() {\r\n      return this._contentLength;\r\n    }\r\n  }, {\r\n    key: \"isStreamingSupported\",\r\n    get: function get() {\r\n      return this._isStreamingSupported;\r\n    }\r\n  }, {\r\n    key: \"isRangeSupported\",\r\n    get: function get() {\r\n      return this._isRangeSupported;\r\n    }\r\n  }, {\r\n    key: \"read\",\r\n    value: function () {\r\n      var _read = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var _yield$this$_reader$r, value, done;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                _context.next = 2;\r\n                return this._reader.read();\r\n\r\n              case 2:\r\n                _yield$this$_reader$r = _context.sent;\r\n                value = _yield$this$_reader$r.value;\r\n                done = _yield$this$_reader$r.done;\r\n\r\n                if (!done) {\r\n                  _context.next = 7;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\", {\r\n                  value: undefined,\r\n                  done: true\r\n                });\r\n\r\n              case 7:\r\n                return _context.abrupt(\"return\", {\r\n                  value: value.buffer,\r\n                  done: false\r\n                });\r\n\r\n              case 8:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function read() {\r\n        return _read.apply(this, arguments);\r\n      }\r\n\r\n      return read;\r\n    }()\r\n  }, {\r\n    key: \"cancel\",\r\n    value: function cancel(reason) {\r\n      this._reader.cancel(reason);\r\n    }\r\n  }]);\r\n\r\n  return PDFWorkerStreamReader;\r\n}();\r\n\r\nvar PDFWorkerStreamRangeReader = /*#__PURE__*/function () {\r\n  function PDFWorkerStreamRangeReader(begin, end, msgHandler) {\r\n    _classCallCheck(this, PDFWorkerStreamRangeReader);\r\n\r\n    this._msgHandler = msgHandler;\r\n    this.onProgress = null;\r\n\r\n    var readableStream = this._msgHandler.sendWithStream(\"GetRangeReader\", {\r\n      begin: begin,\r\n      end: end\r\n    });\r\n\r\n    this._reader = readableStream.getReader();\r\n  }\r\n\r\n  _createClass(PDFWorkerStreamRangeReader, [{\r\n    key: \"isStreamingSupported\",\r\n    get: function get() {\r\n      return false;\r\n    }\r\n  }, {\r\n    key: \"read\",\r\n    value: function () {\r\n      var _read2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n        var _yield$this$_reader$r2, value, done;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                _context2.next = 2;\r\n                return this._reader.read();\r\n\r\n              case 2:\r\n                _yield$this$_reader$r2 = _context2.sent;\r\n                value = _yield$this$_reader$r2.value;\r\n                done = _yield$this$_reader$r2.done;\r\n\r\n                if (!done) {\r\n                  _context2.next = 7;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", {\r\n                  value: undefined,\r\n                  done: true\r\n                });\r\n\r\n              case 7:\r\n                return _context2.abrupt(\"return\", {\r\n                  value: value.buffer,\r\n                  done: false\r\n                });\r\n\r\n              case 8:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this);\r\n      }));\r\n\r\n      function read() {\r\n        return _read2.apply(this, arguments);\r\n      }\r\n\r\n      return read;\r\n    }()\r\n  }, {\r\n    key: \"cancel\",\r\n    value: function cancel(reason) {\r\n      this._reader.cancel(reason);\r\n    }\r\n  }]);\r\n\r\n  return PDFWorkerStreamRangeReader;\r\n}();\r\n\r\n/***/ })\r\n/******/ \t]);\r\n/************************************************************************/\r\n/******/ \t// The module cache\r\n/******/ \tvar __webpack_module_cache__ = {};\r\n/******/ \t\r\n/******/ \t// The require function\r\n/******/ \tfunction __w_pdfjs_require__(moduleId) {\r\n/******/ \t\t// Check if module is in cache\r\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\r\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\r\n/******/ \t\t}\r\n/******/ \t\t// Create a new module (and put it into the cache)\r\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\r\n/******/ \t\t\tid: moduleId,\r\n/******/ \t\t\tloaded: false,\r\n/******/ \t\t\texports: {}\r\n/******/ \t\t};\r\n/******/ \t\r\n/******/ \t\t// Execute the module function\r\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);\r\n/******/ \t\r\n/******/ \t\t// Flag the module as loaded\r\n/******/ \t\tmodule.loaded = true;\r\n/******/ \t\r\n/******/ \t\t// Return the exports of the module\r\n/******/ \t\treturn module.exports;\r\n/******/ \t}\r\n/******/ \t\r\n/************************************************************************/\r\n/******/ \t/* webpack/runtime/define property getters */\r\n/******/ \t(() => {\r\n/******/ \t\t// define getter functions for harmony exports\r\n/******/ \t\t__w_pdfjs_require__.d = (exports, definition) => {\r\n/******/ \t\t\tfor(var key in definition) {\r\n/******/ \t\t\t\tif(__w_pdfjs_require__.o(definition, key) && !__w_pdfjs_require__.o(exports, key)) {\r\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\r\n/******/ \t\t\t\t}\r\n/******/ \t\t\t}\r\n/******/ \t\t};\r\n/******/ \t})();\r\n/******/ \t\r\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\r\n/******/ \t(() => {\r\n/******/ \t\t__w_pdfjs_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\r\n/******/ \t})();\r\n/******/ \t\r\n/******/ \t/* webpack/runtime/make namespace object */\r\n/******/ \t(() => {\r\n/******/ \t\t// define __esModule on exports\r\n/******/ \t\t__w_pdfjs_require__.r = (exports) => {\r\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\r\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\r\n/******/ \t\t\t}\r\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\r\n/******/ \t\t};\r\n/******/ \t})();\r\n/******/ \t\r\n/******/ \t/* webpack/runtime/node module decorator */\r\n/******/ \t(() => {\r\n/******/ \t\t__w_pdfjs_require__.nmd = (module) => {\r\n/******/ \t\t\tmodule.paths = [];\r\n/******/ \t\t\tif (!module.children) module.children = [];\r\n/******/ \t\t\treturn module;\r\n/******/ \t\t};\r\n/******/ \t})();\r\n/******/ \t\r\n/************************************************************************/\r\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\r\n/******/ \t// startup\r\n/******/ \t// Load entry module and return exports\r\n/******/ \treturn __w_pdfjs_require__(0);\r\n/******/ })()\r\n;\r\n});\r\n//# sourceMappingURL=pdf.worker.js.map"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/viewer.css",
    "content": "/* Copyright 2014 Mozilla Foundation\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *     http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n.textLayer {\r\n  position: absolute;\r\n  left: 0;\r\n  top: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  overflow: hidden;\r\n  opacity: 0.2;\r\n  line-height: 1;\r\n}\r\n\r\n.textLayer > span {\r\n  color: transparent;\r\n  position: absolute;\r\n  white-space: pre;\r\n  cursor: text;\r\n  transform-origin: 0% 0%;\r\n}\r\n\r\n.textLayer .highlight {\r\n  margin: -1px;\r\n  padding: 1px;\r\n  background-color: rgba(180, 0, 170, 1);\r\n  border-radius: 4px;\r\n}\r\n\r\n.textLayer .highlight.begin {\r\n  border-radius: 4px 0 0 4px;\r\n}\r\n\r\n.textLayer .highlight.end {\r\n  border-radius: 0 4px 4px 0;\r\n}\r\n\r\n.textLayer .highlight.middle {\r\n  border-radius: 0;\r\n}\r\n\r\n.textLayer .highlight.selected {\r\n  background-color: rgba(0, 100, 0, 1);\r\n}\r\n\r\n.textLayer ::-moz-selection {\r\n  background: rgba(0, 0, 255, 1);\r\n}\r\n\r\n.textLayer ::selection {\r\n  background: rgba(0, 0, 255, 1);\r\n}\r\n\r\n.textLayer .endOfContent {\r\n  display: block;\r\n  position: absolute;\r\n  left: 0;\r\n  top: 100%;\r\n  right: 0;\r\n  bottom: 0;\r\n  z-index: -1;\r\n  cursor: default;\r\n  -webkit-user-select: none;\r\n     -moz-user-select: none;\r\n          user-select: none;\r\n}\r\n\r\n.textLayer .endOfContent.active {\r\n  top: 0;\r\n}\r\n\r\n\r\n.annotationLayer section {\r\n  position: absolute;\r\n  text-align: initial;\r\n}\r\n\r\n.annotationLayer .linkAnnotation > a,\r\n.annotationLayer .buttonWidgetAnnotation.pushButton > a {\r\n  position: absolute;\r\n  font-size: 1em;\r\n  top: 0;\r\n  left: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n}\r\n\r\n.annotationLayer .linkAnnotation > a:hover,\r\n.annotationLayer .buttonWidgetAnnotation.pushButton > a:hover {\r\n  opacity: 0.2;\r\n  background: rgba(255, 255, 0, 1);\r\n  box-shadow: 0 2px 10px rgba(255, 255, 0, 1);\r\n}\r\n\r\n.annotationLayer .textAnnotation img {\r\n  position: absolute;\r\n  cursor: pointer;\r\n}\r\n\r\n.annotationLayer .textWidgetAnnotation input,\r\n.annotationLayer .textWidgetAnnotation textarea,\r\n.annotationLayer .choiceWidgetAnnotation select,\r\n.annotationLayer .buttonWidgetAnnotation.checkBox input,\r\n.annotationLayer .buttonWidgetAnnotation.radioButton input {\r\n  background-color: rgba(0, 54, 255, 0.13);\r\n  border: 1px solid transparent;\r\n  box-sizing: border-box;\r\n  font-size: 9px;\r\n  height: 100%;\r\n  margin: 0;\r\n  padding: 0 3px;\r\n  vertical-align: top;\r\n  width: 100%;\r\n}\r\n\r\n.annotationLayer .choiceWidgetAnnotation select option {\r\n  padding: 0;\r\n}\r\n\r\n.annotationLayer .buttonWidgetAnnotation.radioButton input {\r\n  border-radius: 50%;\r\n}\r\n\r\n.annotationLayer .textWidgetAnnotation textarea {\r\n  font: message-box;\r\n  font-size: 9px;\r\n  resize: none;\r\n}\r\n\r\n.annotationLayer .textWidgetAnnotation input[disabled],\r\n.annotationLayer .textWidgetAnnotation textarea[disabled],\r\n.annotationLayer .choiceWidgetAnnotation select[disabled],\r\n.annotationLayer .buttonWidgetAnnotation.checkBox input[disabled],\r\n.annotationLayer .buttonWidgetAnnotation.radioButton input[disabled] {\r\n  background: none;\r\n  border: 1px solid transparent;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.annotationLayer .textWidgetAnnotation input:hover,\r\n.annotationLayer .textWidgetAnnotation textarea:hover,\r\n.annotationLayer .choiceWidgetAnnotation select:hover,\r\n.annotationLayer .buttonWidgetAnnotation.checkBox input:hover,\r\n.annotationLayer .buttonWidgetAnnotation.radioButton input:hover {\r\n  border: 1px solid rgba(0, 0, 0, 1);\r\n}\r\n\r\n.annotationLayer .textWidgetAnnotation input:focus,\r\n.annotationLayer .textWidgetAnnotation textarea:focus,\r\n.annotationLayer .choiceWidgetAnnotation select:focus {\r\n  background: none;\r\n  border: 1px solid transparent;\r\n}\r\n\r\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,\r\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after,\r\n.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {\r\n  background-color: rgba(0, 0, 0, 1);\r\n  content: \"\";\r\n  display: block;\r\n  position: absolute;\r\n}\r\n\r\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,\r\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {\r\n  height: 80%;\r\n  left: 45%;\r\n  width: 1px;\r\n}\r\n\r\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before {\r\n  transform: rotate(45deg);\r\n}\r\n\r\n.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {\r\n  transform: rotate(-45deg);\r\n}\r\n\r\n.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {\r\n  border-radius: 50%;\r\n  height: 50%;\r\n  left: 30%;\r\n  top: 20%;\r\n  width: 50%;\r\n}\r\n\r\n.annotationLayer .textWidgetAnnotation input.comb {\r\n  font-family: monospace;\r\n  padding-left: 2px;\r\n  padding-right: 0;\r\n}\r\n\r\n.annotationLayer .textWidgetAnnotation input.comb:focus {\r\n  /*\r\n   * Letter spacing is placed on the right side of each character. Hence, the\r\n   * letter spacing of the last character may be placed outside the visible\r\n   * area, causing horizontal scrolling. We avoid this by extending the width\r\n   * when the element has focus and revert this when it loses focus.\r\n   */\r\n  width: 115%;\r\n}\r\n\r\n.annotationLayer .buttonWidgetAnnotation.checkBox input,\r\n.annotationLayer .buttonWidgetAnnotation.radioButton input {\r\n  -webkit-appearance: none;\r\n     -moz-appearance: none;\r\n          appearance: none;\r\n  padding: 0;\r\n}\r\n\r\n.annotationLayer .popupWrapper {\r\n  position: absolute;\r\n  width: 20em;\r\n}\r\n\r\n.annotationLayer .popup {\r\n  position: absolute;\r\n  z-index: 200;\r\n  max-width: 20em;\r\n  background-color: rgba(255, 255, 153, 1);\r\n  box-shadow: 0 2px 5px rgba(136, 136, 136, 1);\r\n  border-radius: 2px;\r\n  padding: 6px;\r\n  margin-left: 5px;\r\n  cursor: pointer;\r\n  font: message-box;\r\n  font-size: 9px;\r\n  white-space: normal;\r\n  word-wrap: break-word;\r\n}\r\n\r\n.annotationLayer .popup > * {\r\n  font-size: 9px;\r\n}\r\n\r\n.annotationLayer .popup h1 {\r\n  display: inline-block;\r\n}\r\n\r\n.annotationLayer .popup span {\r\n  display: inline-block;\r\n  margin-left: 5px;\r\n}\r\n\r\n.annotationLayer .popup p {\r\n  border-top: 1px solid rgba(51, 51, 51, 1);\r\n  margin-top: 2px;\r\n  padding-top: 2px;\r\n}\r\n\r\n.annotationLayer .highlightAnnotation,\r\n.annotationLayer .underlineAnnotation,\r\n.annotationLayer .squigglyAnnotation,\r\n.annotationLayer .strikeoutAnnotation,\r\n.annotationLayer .freeTextAnnotation,\r\n.annotationLayer .lineAnnotation svg line,\r\n.annotationLayer .squareAnnotation svg rect,\r\n.annotationLayer .circleAnnotation svg ellipse,\r\n.annotationLayer .polylineAnnotation svg polyline,\r\n.annotationLayer .polygonAnnotation svg polygon,\r\n.annotationLayer .caretAnnotation,\r\n.annotationLayer .inkAnnotation svg polyline,\r\n.annotationLayer .stampAnnotation,\r\n.annotationLayer .fileAttachmentAnnotation {\r\n  cursor: pointer;\r\n}\r\n\r\n.pdfViewer .canvasWrapper {\r\n  overflow: hidden;\r\n}\r\n\r\n.pdfViewer .page {\r\n  direction: ltr;\r\n  width: 816px;\r\n  height: 1056px;\r\n  margin: 1px auto -8px;\r\n  position: relative;\r\n  overflow: visible;\r\n  border: 9px solid transparent;\r\n  background-clip: content-box;\r\n  -o-border-image: url(images/shadow.png) 9 9 repeat;\r\n     border-image: url(images/shadow.png) 9 9 repeat;\r\n  background-color: rgba(255, 255, 255, 1);\r\n}\r\n\r\n.pdfViewer.removePageBorders .page {\r\n  margin: 0 auto 10px;\r\n  border: none;\r\n}\r\n\r\n.pdfViewer.singlePageView {\r\n  display: inline-block;\r\n}\r\n\r\n.pdfViewer.singlePageView .page {\r\n  margin: 0;\r\n  border: none;\r\n}\r\n\r\n.pdfViewer.scrollHorizontal,\r\n.pdfViewer.scrollWrapped,\r\n.spread {\r\n  margin-left: 3.5px;\r\n  margin-right: 3.5px;\r\n  text-align: center;\r\n}\r\n\r\n.pdfViewer.scrollHorizontal,\r\n.spread {\r\n  white-space: nowrap;\r\n}\r\n\r\n.pdfViewer.removePageBorders,\r\n.pdfViewer.scrollHorizontal .spread,\r\n.pdfViewer.scrollWrapped .spread {\r\n  margin-left: 0;\r\n  margin-right: 0;\r\n}\r\n\r\n.spread .page,\r\n.pdfViewer.scrollHorizontal .page,\r\n.pdfViewer.scrollWrapped .page,\r\n.pdfViewer.scrollHorizontal .spread,\r\n.pdfViewer.scrollWrapped .spread {\r\n  display: inline-block;\r\n  vertical-align: middle;\r\n}\r\n\r\n.spread .page,\r\n.pdfViewer.scrollHorizontal .page,\r\n.pdfViewer.scrollWrapped .page {\r\n  margin-left: -3.5px;\r\n  margin-right: -3.5px;\r\n}\r\n\r\n.pdfViewer.removePageBorders .spread .page,\r\n.pdfViewer.removePageBorders.scrollHorizontal .page,\r\n.pdfViewer.removePageBorders.scrollWrapped .page {\r\n  margin-left: 5px;\r\n  margin-right: 5px;\r\n}\r\n\r\n.pdfViewer .page canvas {\r\n  margin: 0;\r\n  display: block;\r\n}\r\n\r\n.pdfViewer .page canvas[hidden] {\r\n  display: none;\r\n}\r\n\r\n.pdfViewer .page .loadingIcon {\r\n  position: absolute;\r\n  display: block;\r\n  left: 0;\r\n  top: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background: url(\"images/loading-icon.gif\") center no-repeat;\r\n}\r\n\r\n.pdfPresentationMode .pdfViewer {\r\n  margin-left: 0;\r\n  margin-right: 0;\r\n}\r\n\r\n.pdfPresentationMode .pdfViewer .page,\r\n.pdfPresentationMode .pdfViewer .spread {\r\n  display: block;\r\n}\r\n\r\n.pdfPresentationMode .pdfViewer .page,\r\n.pdfPresentationMode .pdfViewer.removePageBorders .page {\r\n  margin-left: auto;\r\n  margin-right: auto;\r\n}\r\n\r\n.pdfPresentationMode:-webkit-full-screen .pdfViewer .page {\r\n  margin-bottom: 100%;\r\n  border: 0;\r\n}\r\n\r\n.pdfPresentationMode:-moz-full-screen .pdfViewer .page {\r\n  margin-bottom: 100%;\r\n  border: 0;\r\n}\r\n\r\n.pdfPresentationMode:fullscreen .pdfViewer .page {\r\n  margin-bottom: 100%;\r\n  border: 0;\r\n}\r\n\r\n:root {\r\n  --sidebar-width: 200px;\r\n  --sidebar-transition-duration: 200ms;\r\n  --sidebar-transition-timing-function: ease;\r\n  --loadingBar-end-offset: 0;\r\n\r\n  --toolbar-icon-opacity: 0.7;\r\n  --doorhanger-icon-opacity: 0.9;\r\n\r\n  --main-color: rgba(12, 12, 13, 1);\r\n  --body-bg-color: rgba(237, 237, 240, 1);\r\n  --errorWrapper-bg-color: rgba(255, 74, 74, 1);\r\n  --progressBar-color: rgba(10, 132, 255, 1);\r\n  --progressBar-indeterminate-bg-color: rgba(221, 221, 222, 1);\r\n  --progressBar-indeterminate-blend-color: rgba(116, 177, 239, 1);\r\n  --scrollbar-color: auto;\r\n  --scrollbar-bg-color: auto;\r\n  --toolbar-icon-bg-color: rgba(0, 0, 0, 1);\r\n\r\n  --sidebar-bg-color: rgba(245, 246, 247, 1);\r\n  --toolbar-bg-color: rgba(249, 249, 250, 1);\r\n  --toolbar-border-color: rgba(204, 204, 204, 1);\r\n  --button-hover-color: rgba(221, 222, 223, 1);\r\n  --toggled-btn-bg-color: rgba(0, 0, 0, 0.3);\r\n  --toggled-hover-active-btn-color: rgba(0, 0, 0, 0.4);\r\n  --dropdown-btn-bg-color: rgba(215, 215, 219, 1);\r\n  --separator-color: rgba(0, 0, 0, 0.3);\r\n  --field-color: rgba(6, 6, 6, 1);\r\n  --field-bg-color: rgba(255, 255, 255, 1);\r\n  --field-border-color: rgba(187, 187, 188, 1);\r\n  --findbar-nextprevious-btn-bg-color: rgba(227, 228, 230, 1);\r\n  --treeitem-color: rgba(0, 0, 0, 0.8);\r\n  --treeitem-hover-color: rgba(0, 0, 0, 0.9);\r\n  --treeitem-selected-color: rgba(0, 0, 0, 0.9);\r\n  --treeitem-selected-bg-color: rgba(0, 0, 0, 0.25);\r\n  --sidebaritem-bg-color: rgba(0, 0, 0, 0.15);\r\n  --doorhanger-bg-color: rgba(255, 255, 255, 1);\r\n  --doorhanger-border-color: rgba(12, 12, 13, 0.2);\r\n  --doorhanger-hover-color: rgba(237, 237, 237, 1);\r\n  --doorhanger-separator-color: rgba(222, 222, 222, 1);\r\n  --overlay-button-bg-color: rgba(12, 12, 13, 0.1);\r\n  --overlay-button-hover-color: rgba(12, 12, 13, 0.3);\r\n\r\n  --loading-icon: url(images/loading.svg);\r\n  --treeitem-expanded-icon: url(images/treeitem-expanded.svg);\r\n  --treeitem-collapsed-icon: url(images/treeitem-collapsed.svg);\r\n  --toolbarButton-menuArrow-icon: url(images/toolbarButton-menuArrow.svg);\r\n  --toolbarButton-sidebarToggle-icon: url(images/toolbarButton-sidebarToggle.svg);\r\n  --toolbarButton-secondaryToolbarToggle-icon: url(images/toolbarButton-secondaryToolbarToggle.svg);\r\n  --toolbarButton-pageUp-icon: url(images/toolbarButton-pageUp.svg);\r\n  --toolbarButton-pageDown-icon: url(images/toolbarButton-pageDown.svg);\r\n  --toolbarButton-zoomOut-icon: url(images/toolbarButton-zoomOut.svg);\r\n  --toolbarButton-zoomIn-icon: url(images/toolbarButton-zoomIn.svg);\r\n  --toolbarButton-presentationMode-icon: url(images/toolbarButton-presentationMode.svg);\r\n  --toolbarButton-print-icon: url(images/toolbarButton-print.svg);\r\n  --toolbarButton-openFile-icon: url(images/toolbarButton-openFile.svg);\r\n  --toolbarButton-download-icon: url(images/toolbarButton-download.svg);\r\n  --toolbarButton-bookmark-icon: url(images/toolbarButton-bookmark.svg);\r\n  --toolbarButton-viewThumbnail-icon: url(images/toolbarButton-viewThumbnail.svg);\r\n  --toolbarButton-viewOutline-icon: url(images/toolbarButton-viewOutline.svg);\r\n  --toolbarButton-viewAttachments-icon: url(images/toolbarButton-viewAttachments.svg);\r\n  --toolbarButton-viewLayers-icon: url(images/toolbarButton-viewLayers.svg);\r\n  --toolbarButton-currentOutlineItem-icon: url(images/toolbarButton-currentOutlineItem.svg);\r\n  --toolbarButton-search-icon: url(images/toolbarButton-search.svg);\r\n  --findbarButton-previous-icon: url(images/findbarButton-previous.svg);\r\n  --findbarButton-next-icon: url(images/findbarButton-next.svg);\r\n  --secondaryToolbarButton-firstPage-icon: url(images/secondaryToolbarButton-firstPage.svg);\r\n  --secondaryToolbarButton-lastPage-icon: url(images/secondaryToolbarButton-lastPage.svg);\r\n  --secondaryToolbarButton-rotateCcw-icon: url(images/secondaryToolbarButton-rotateCcw.svg);\r\n  --secondaryToolbarButton-rotateCw-icon: url(images/secondaryToolbarButton-rotateCw.svg);\r\n  --secondaryToolbarButton-selectTool-icon: url(images/secondaryToolbarButton-selectTool.svg);\r\n  --secondaryToolbarButton-handTool-icon: url(images/secondaryToolbarButton-handTool.svg);\r\n  --secondaryToolbarButton-scrollVertical-icon: url(images/secondaryToolbarButton-scrollVertical.svg);\r\n  --secondaryToolbarButton-scrollHorizontal-icon: url(images/secondaryToolbarButton-scrollHorizontal.svg);\r\n  --secondaryToolbarButton-scrollWrapped-icon: url(images/secondaryToolbarButton-scrollWrapped.svg);\r\n  --secondaryToolbarButton-spreadNone-icon: url(images/secondaryToolbarButton-spreadNone.svg);\r\n  --secondaryToolbarButton-spreadOdd-icon: url(images/secondaryToolbarButton-spreadOdd.svg);\r\n  --secondaryToolbarButton-spreadEven-icon: url(images/secondaryToolbarButton-spreadEven.svg);\r\n  --secondaryToolbarButton-documentProperties-icon: url(images/secondaryToolbarButton-documentProperties.svg);\r\n}\r\n\r\n@media (prefers-color-scheme: dark) {\r\n  :root {\r\n    --main-color: rgba(249, 249, 250, 1);\r\n    --body-bg-color: rgba(42, 42, 46, 1);\r\n    --errorWrapper-bg-color: rgba(199, 17, 17, 1);\r\n    --progressBar-color: rgba(0, 96, 223, 1);\r\n    --progressBar-indeterminate-bg-color: rgba(40, 40, 43, 1);\r\n    --progressBar-indeterminate-blend-color: rgba(20, 68, 133, 1);\r\n    --scrollbar-color: rgba(121, 121, 123, 1);\r\n    --scrollbar-bg-color: rgba(35, 35, 39, 1);\r\n    --toolbar-icon-bg-color: rgba(255, 255, 255, 1);\r\n\r\n    --sidebar-bg-color: rgba(50, 50, 52, 1);\r\n    --toolbar-bg-color: rgba(56, 56, 61, 1);\r\n    --toolbar-border-color: rgba(12, 12, 13, 1);\r\n    --button-hover-color: rgba(102, 102, 103, 1);\r\n    --toggled-btn-bg-color: rgba(0, 0, 0, 0.3);\r\n    --toggled-hover-active-btn-color: rgba(0, 0, 0, 0.4);\r\n    --dropdown-btn-bg-color: rgba(74, 74, 79, 1);\r\n    --separator-color: rgba(0, 0, 0, 0.3);\r\n    --field-color: rgba(250, 250, 250, 1);\r\n    --field-bg-color: rgba(64, 64, 68, 1);\r\n    --field-border-color: rgba(115, 115, 115, 1);\r\n    --findbar-nextprevious-btn-bg-color: rgba(89, 89, 89, 1);\r\n    --treeitem-color: rgba(255, 255, 255, 0.8);\r\n    --treeitem-hover-color: rgba(255, 255, 255, 0.9);\r\n    --treeitem-selected-color: rgba(255, 255, 255, 0.9);\r\n    --treeitem-selected-bg-color: rgba(255, 255, 255, 0.25);\r\n    --sidebaritem-bg-color: rgba(255, 255, 255, 0.15);\r\n    --doorhanger-bg-color: rgba(74, 74, 79, 1);\r\n    --doorhanger-border-color: rgba(39, 39, 43, 1);\r\n    --doorhanger-hover-color: rgba(93, 94, 98, 1);\r\n    --doorhanger-separator-color: rgba(92, 92, 97, 1);\r\n    --overlay-button-bg-color: rgba(92, 92, 97, 1);\r\n    --overlay-button-hover-color: rgba(115, 115, 115, 1);\r\n\r\n    /* This image is used in <input> elements, which unfortunately means that\r\n     * the `mask-image` approach used with all of the other images doesn't work\r\n     * here; hence why we still have two versions of this particular image. */\r\n    --loading-icon: url(images/loading-dark.svg);\r\n  }\r\n}\r\n\r\n* {\r\n  padding: 0;\r\n  margin: 0;\r\n}\r\n\r\nhtml {\r\n  height: 100%;\r\n  width: 100%;\r\n  /* Font size is needed to make the activity bar the correct size. */\r\n  font-size: 10px;\r\n}\r\n\r\nbody {\r\n  height: 100%;\r\n  width: 100%;\r\n  background-color: var(--body-bg-color);\r\n}\r\n\r\nbody,\r\ninput,\r\nbutton,\r\nselect {\r\n  font: message-box;\r\n  outline: none;\r\n  scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);\r\n}\r\n\r\n.hidden {\r\n  display: none !important;\r\n}\r\n[hidden] {\r\n  display: none !important;\r\n}\r\n\r\n.pdfViewer.enablePermissions .textLayer > span {\r\n  -webkit-user-select: none !important;\r\n     -moz-user-select: none !important;\r\n          user-select: none !important;\r\n  cursor: not-allowed;\r\n}\r\n\r\n#viewerContainer.pdfPresentationMode:-webkit-full-screen {\r\n  top: 0;\r\n  border-top: 2px solid rgba(0, 0, 0, 0);\r\n  background-color: rgba(0, 0, 0, 1);\r\n  width: 100%;\r\n  height: 100%;\r\n  overflow: hidden;\r\n  cursor: none;\r\n  -webkit-user-select: none;\r\n          user-select: none;\r\n}\r\n\r\n#viewerContainer.pdfPresentationMode:-moz-full-screen {\r\n  top: 0;\r\n  border-top: 2px solid rgba(0, 0, 0, 0);\r\n  background-color: rgba(0, 0, 0, 1);\r\n  width: 100%;\r\n  height: 100%;\r\n  overflow: hidden;\r\n  cursor: none;\r\n  -moz-user-select: none;\r\n       user-select: none;\r\n}\r\n\r\n#viewerContainer.pdfPresentationMode:fullscreen {\r\n  top: 0;\r\n  border-top: 2px solid rgba(0, 0, 0, 0);\r\n  background-color: rgba(0, 0, 0, 1);\r\n  width: 100%;\r\n  height: 100%;\r\n  overflow: hidden;\r\n  cursor: none;\r\n  -webkit-user-select: none;\r\n     -moz-user-select: none;\r\n          user-select: none;\r\n}\r\n\r\n.pdfPresentationMode:-webkit-full-screen a:not(.internalLink) {\r\n  display: none;\r\n}\r\n\r\n.pdfPresentationMode:-moz-full-screen a:not(.internalLink) {\r\n  display: none;\r\n}\r\n\r\n.pdfPresentationMode:fullscreen a:not(.internalLink) {\r\n  display: none;\r\n}\r\n\r\n.pdfPresentationMode:-webkit-full-screen .textLayer > span {\r\n  cursor: none;\r\n}\r\n\r\n.pdfPresentationMode:-moz-full-screen .textLayer > span {\r\n  cursor: none;\r\n}\r\n\r\n.pdfPresentationMode:fullscreen .textLayer > span {\r\n  cursor: none;\r\n}\r\n\r\n.pdfPresentationMode.pdfPresentationModeControls > *,\r\n.pdfPresentationMode.pdfPresentationModeControls .textLayer > span {\r\n  cursor: default;\r\n}\r\n\r\n#outerContainer {\r\n  width: 100%;\r\n  height: 100%;\r\n  position: relative;\r\n}\r\n\r\n#sidebarContainer {\r\n  position: absolute;\r\n  top: 32px;\r\n  bottom: 0;\r\n  width: var(--sidebar-width);\r\n  visibility: hidden;\r\n  z-index: 100;\r\n  border-top: 1px solid rgba(51, 51, 51, 1);\r\n  transition-duration: var(--sidebar-transition-duration);\r\n  transition-timing-function: var(--sidebar-transition-timing-function);\r\n}\r\nhtml[dir=\"ltr\"] #sidebarContainer {\r\n  transition-property: left;\r\n  left: calc(0px - var(--sidebar-width));\r\n}\r\nhtml[dir=\"rtl\"] #sidebarContainer {\r\n  transition-property: right;\r\n  right: calc(0px - var(--sidebar-width));\r\n}\r\n\r\n#outerContainer.sidebarResizing #sidebarContainer {\r\n  /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */\r\n  transition-duration: 0s;\r\n  /* Prevent e.g. the thumbnails being selected when the sidebar is resized. */\r\n  -webkit-user-select: none;\r\n     -moz-user-select: none;\r\n          user-select: none;\r\n}\r\n\r\n#outerContainer.sidebarMoving #sidebarContainer,\r\n#outerContainer.sidebarOpen #sidebarContainer {\r\n  visibility: visible;\r\n}\r\nhtml[dir=\"ltr\"] #outerContainer.sidebarOpen #sidebarContainer {\r\n  left: 0;\r\n}\r\nhtml[dir=\"rtl\"] #outerContainer.sidebarOpen #sidebarContainer {\r\n  right: 0;\r\n}\r\n\r\n#mainContainer {\r\n  position: absolute;\r\n  top: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  left: 0;\r\n  min-width: 320px;\r\n}\r\n\r\n#sidebarContent {\r\n  top: 32px;\r\n  bottom: 0;\r\n  overflow: auto;\r\n  -webkit-overflow-scrolling: touch;\r\n  position: absolute;\r\n  width: 100%;\r\n  background-color: rgba(0, 0, 0, 0.1);\r\n}\r\nhtml[dir=\"ltr\"] #sidebarContent {\r\n  left: 0;\r\n  box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25);\r\n}\r\nhtml[dir=\"rtl\"] #sidebarContent {\r\n  right: 0;\r\n  box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.25);\r\n}\r\n\r\n#viewerContainer {\r\n  overflow: auto;\r\n  -webkit-overflow-scrolling: touch;\r\n  position: absolute;\r\n  top: 32px;\r\n  right: 0;\r\n  bottom: 0;\r\n  left: 0;\r\n  outline: none;\r\n}\r\n#viewerContainer:not(.pdfPresentationMode) {\r\n  transition-duration: var(--sidebar-transition-duration);\r\n  transition-timing-function: var(--sidebar-transition-timing-function);\r\n}\r\n\r\n#outerContainer.sidebarResizing #viewerContainer {\r\n  /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */\r\n  transition-duration: 0s;\r\n}\r\n\r\nhtml[dir=\"ltr\"]\r\n  #outerContainer.sidebarOpen\r\n  #viewerContainer:not(.pdfPresentationMode) {\r\n  transition-property: left;\r\n  left: var(--sidebar-width);\r\n}\r\nhtml[dir=\"rtl\"]\r\n  #outerContainer.sidebarOpen\r\n  #viewerContainer:not(.pdfPresentationMode) {\r\n  transition-property: right;\r\n  right: var(--sidebar-width);\r\n}\r\n\r\n.toolbar {\r\n  position: relative;\r\n  left: 0;\r\n  right: 0;\r\n  z-index: 9999;\r\n  cursor: default;\r\n}\r\n\r\n#toolbarContainer {\r\n  width: 100%;\r\n}\r\n\r\n#toolbarSidebar {\r\n  width: 100%;\r\n  height: 32px;\r\n  background-color: var(--sidebar-bg-color);\r\n}\r\nhtml[dir=\"ltr\"] #toolbarSidebar {\r\n  box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(0, 0, 0, 0.15),\r\n    0 0 1px rgba(0, 0, 0, 0.1);\r\n}\r\nhtml[dir=\"rtl\"] #toolbarSidebar {\r\n  box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(0, 0, 0, 0.15),\r\n    0 0 1px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\nhtml[dir=\"ltr\"] #toolbarSidebar .toolbarButton {\r\n  margin-right: 2px !important;\r\n}\r\nhtml[dir=\"rtl\"] #toolbarSidebar .toolbarButton {\r\n  margin-left: 2px !important;\r\n}\r\n\r\nhtml[dir=\"ltr\"] #toolbarSidebarRight .toolbarButton {\r\n  margin-right: 3px !important;\r\n}\r\nhtml[dir=\"rtl\"] #toolbarSidebarRight .toolbarButton {\r\n  margin-left: 3px !important;\r\n}\r\n\r\n#sidebarResizer {\r\n  position: absolute;\r\n  top: 0;\r\n  bottom: 0;\r\n  width: 6px;\r\n  z-index: 200;\r\n  cursor: ew-resize;\r\n}\r\nhtml[dir=\"ltr\"] #sidebarResizer {\r\n  right: -6px;\r\n}\r\nhtml[dir=\"rtl\"] #sidebarResizer {\r\n  left: -6px;\r\n}\r\n\r\n#toolbarContainer,\r\n.findbar,\r\n.secondaryToolbar {\r\n  position: relative;\r\n  height: 32px;\r\n  background-color: var(--toolbar-bg-color);\r\n  box-shadow: 0 1px 0 var(--toolbar-border-color);\r\n}\r\n\r\n#toolbarViewer {\r\n  height: 32px;\r\n}\r\n\r\n#loadingBar {\r\n  position: absolute;\r\n  height: 4px;\r\n  background-color: var(--body-bg-color);\r\n  border-bottom: 1px solid var(--toolbar-border-color);\r\n\r\n  transition-duration: var(--sidebar-transition-duration);\r\n  transition-timing-function: var(--sidebar-transition-timing-function);\r\n}\r\nhtml[dir=\"ltr\"] #loadingBar {\r\n  transition-property: left;\r\n  left: 0;\r\n  right: var(--loadingBar-end-offset);\r\n}\r\nhtml[dir=\"rtl\"] #loadingBar {\r\n  transition-property: right;\r\n  left: var(--loadingBar-end-offset);\r\n  right: 0;\r\n}\r\n\r\nhtml[dir=\"ltr\"] #outerContainer.sidebarOpen #loadingBar {\r\n  left: var(--sidebar-width);\r\n}\r\nhtml[dir=\"rtl\"] #outerContainer.sidebarOpen #loadingBar {\r\n  right: var(--sidebar-width);\r\n}\r\n\r\n#outerContainer.sidebarResizing #loadingBar {\r\n  /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */\r\n  transition-duration: 0s;\r\n}\r\n\r\n#loadingBar .progress {\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  width: 0%;\r\n  height: 100%;\r\n  background-color: var(--progressBar-color);\r\n  overflow: hidden;\r\n  transition: width 200ms;\r\n}\r\n\r\n@-webkit-keyframes progressIndeterminate {\r\n  0% {\r\n    left: -142px;\r\n  }\r\n  100% {\r\n    left: 0;\r\n  }\r\n}\r\n\r\n@keyframes progressIndeterminate {\r\n  0% {\r\n    left: -142px;\r\n  }\r\n  100% {\r\n    left: 0;\r\n  }\r\n}\r\n\r\n#loadingBar .progress.indeterminate {\r\n  background-color: var(--progressBar-indeterminate-bg-color);\r\n  transition: none;\r\n}\r\n\r\n#loadingBar .progress.indeterminate .glimmer {\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  height: 100%;\r\n  width: calc(100% + 150px);\r\n  background: repeating-linear-gradient(\r\n    135deg,\r\n    var(--progressBar-indeterminate-blend-color) 0,\r\n    var(--progressBar-indeterminate-bg-color) 5px,\r\n    var(--progressBar-indeterminate-bg-color) 45px,\r\n    var(--progressBar-color) 55px,\r\n    var(--progressBar-color) 95px,\r\n    var(--progressBar-indeterminate-blend-color) 100px\r\n  );\r\n  -webkit-animation: progressIndeterminate 1s linear infinite;\r\n          animation: progressIndeterminate 1s linear infinite;\r\n}\r\n\r\n.findbar,\r\n.secondaryToolbar {\r\n  top: 32px;\r\n  position: absolute;\r\n  z-index: 10000;\r\n  height: auto;\r\n  min-width: 16px;\r\n  padding: 0 4px;\r\n  margin: 4px 2px;\r\n  color: rgba(217, 217, 217, 1);\r\n  font-size: 12px;\r\n  line-height: 14px;\r\n  text-align: left;\r\n  cursor: default;\r\n}\r\n\r\n.findbar {\r\n  min-width: 300px;\r\n  background-color: var(--toolbar-bg-color);\r\n}\r\n.findbar > div {\r\n  height: 32px;\r\n}\r\n.findbar.wrapContainers > div {\r\n  clear: both;\r\n}\r\n.findbar.wrapContainers > div#findbarMessageContainer {\r\n  height: auto;\r\n}\r\nhtml[dir=\"ltr\"] .findbar {\r\n  left: 64px;\r\n}\r\nhtml[dir=\"rtl\"] .findbar {\r\n  right: 64px;\r\n}\r\n\r\n.findbar .splitToolbarButton {\r\n  margin-top: 3px;\r\n}\r\nhtml[dir=\"ltr\"] .findbar .splitToolbarButton {\r\n  margin-left: 0;\r\n  margin-right: 5px;\r\n}\r\nhtml[dir=\"rtl\"] .findbar .splitToolbarButton {\r\n  margin-left: 5px;\r\n  margin-right: 0;\r\n}\r\n\r\n.findbar .splitToolbarButton > .toolbarButton {\r\n  background-color: var(--findbar-nextprevious-btn-bg-color);\r\n  border-radius: 0;\r\n  height: 26px;\r\n  border-top: 1px solid var(--field-border-color);\r\n  border-bottom: 1px solid var(--field-border-color);\r\n}\r\n\r\n.findbar .splitToolbarButton > .toolbarButton::before {\r\n  top: 5px;\r\n}\r\n\r\n.findbar .splitToolbarButton > .findNext {\r\n  width: 29px;\r\n}\r\nhtml[dir=\"ltr\"] .findbar .splitToolbarButton > .findNext {\r\n  border-bottom-right-radius: 2px;\r\n  border-top-right-radius: 2px;\r\n  border-right: 1px solid var(--field-border-color);\r\n}\r\nhtml[dir=\"rtl\"] .findbar .splitToolbarButton > .findNext {\r\n  border-bottom-left-radius: 2px;\r\n  border-top-left-radius: 2px;\r\n  border-left: 1px solid var(--field-border-color);\r\n}\r\n\r\n.findbar input[type=\"checkbox\"] {\r\n  pointer-events: none;\r\n}\r\n\r\n.findbar label {\r\n  -webkit-user-select: none;\r\n     -moz-user-select: none;\r\n          user-select: none;\r\n}\r\n\r\n.findbar label:hover,\r\n.findbar input:focus + label {\r\n  background-color: var(--button-hover-color);\r\n}\r\n\r\nhtml[dir=\"ltr\"] #findInput {\r\n  border-top-right-radius: 0;\r\n  border-bottom-right-radius: 0;\r\n}\r\nhtml[dir=\"rtl\"] #findInput {\r\n  border-top-left-radius: 0;\r\n  border-bottom-left-radius: 0;\r\n}\r\n\r\n.findbar .toolbarField[type=\"checkbox\"]:checked + .toolbarLabel {\r\n  background-color: var(--toggled-btn-bg-color) !important;\r\n}\r\n\r\n#findInput {\r\n  width: 200px;\r\n}\r\n#findInput::-webkit-input-placeholder {\r\n  color: rgba(191, 191, 191, 1);\r\n}\r\n#findInput::-moz-placeholder {\r\n  font-style: normal;\r\n}\r\n#findInput::placeholder {\r\n  font-style: normal;\r\n}\r\n#findInput[data-status=\"pending\"] {\r\n  background-image: var(--loading-icon);\r\n  background-repeat: no-repeat;\r\n  background-position: 98%;\r\n}\r\nhtml[dir=\"rtl\"] #findInput[data-status=\"pending\"] {\r\n  background-position: 3px;\r\n}\r\n#findInput[data-status=\"notFound\"] {\r\n  background-color: rgba(255, 102, 102, 1);\r\n}\r\n\r\n.secondaryToolbar {\r\n  padding: 6px 0 10px;\r\n  height: auto;\r\n  z-index: 30000;\r\n  background-color: var(--doorhanger-bg-color);\r\n}\r\nhtml[dir=\"ltr\"] .secondaryToolbar {\r\n  right: 4px;\r\n}\r\nhtml[dir=\"rtl\"] .secondaryToolbar {\r\n  left: 4px;\r\n}\r\n\r\n#secondaryToolbarButtonContainer {\r\n  max-width: 220px;\r\n  max-height: 400px;\r\n  overflow-y: auto;\r\n  -webkit-overflow-scrolling: touch;\r\n  margin-bottom: -4px;\r\n}\r\n\r\n#secondaryToolbarButtonContainer.hiddenScrollModeButtons > .scrollModeButtons,\r\n#secondaryToolbarButtonContainer.hiddenSpreadModeButtons > .spreadModeButtons {\r\n  display: none !important;\r\n}\r\n\r\n.doorHanger,\r\n.doorHangerRight {\r\n  border-radius: 2px;\r\n  box-shadow: 0 1px 5px var(--doorhanger-border-color),\r\n    0 0 0 1px var(--doorhanger-border-color);\r\n}\r\n.doorHanger:after,\r\n.doorHanger:before,\r\n.doorHangerRight:after,\r\n.doorHangerRight:before {\r\n  bottom: 100%;\r\n  border: solid rgba(0, 0, 0, 0);\r\n  content: \" \";\r\n  height: 0;\r\n  width: 0;\r\n  position: absolute;\r\n  pointer-events: none;\r\n}\r\n.doorHanger:after,\r\n.doorHangerRight:after {\r\n  border-width: 8px;\r\n}\r\n.doorHanger:after {\r\n  border-bottom-color: var(--toolbar-bg-color);\r\n}\r\n.doorHangerRight:after {\r\n  border-bottom-color: var(--doorhanger-bg-color);\r\n}\r\n.doorHanger:before,\r\n.doorHangerRight:before {\r\n  border-bottom-color: var(--doorhanger-border-color);\r\n  border-width: 9px;\r\n}\r\n\r\nhtml[dir=\"ltr\"] .doorHanger:after,\r\nhtml[dir=\"rtl\"] .doorHangerRight:after {\r\n  left: 10px;\r\n  margin-left: -8px;\r\n}\r\n\r\nhtml[dir=\"ltr\"] .doorHanger:before,\r\nhtml[dir=\"rtl\"] .doorHangerRight:before {\r\n  left: 10px;\r\n  margin-left: -9px;\r\n}\r\n\r\nhtml[dir=\"rtl\"] .doorHanger:after,\r\nhtml[dir=\"ltr\"] .doorHangerRight:after {\r\n  right: 10px;\r\n  margin-right: -8px;\r\n}\r\n\r\nhtml[dir=\"rtl\"] .doorHanger:before,\r\nhtml[dir=\"ltr\"] .doorHangerRight:before {\r\n  right: 10px;\r\n  margin-right: -9px;\r\n}\r\n\r\n#findResultsCount {\r\n  background-color: rgba(217, 217, 217, 1);\r\n  color: rgba(82, 82, 82, 1);\r\n  text-align: center;\r\n  padding: 3px 4px;\r\n  margin: 5px;\r\n}\r\n\r\n#findMsg {\r\n  color: rgba(251, 0, 0, 1);\r\n}\r\n#findMsg:empty {\r\n  display: none;\r\n}\r\n\r\n#toolbarViewerMiddle {\r\n  position: absolute;\r\n  left: 50%;\r\n  transform: translateX(-50%);\r\n}\r\n\r\nhtml[dir=\"ltr\"] #toolbarViewerLeft,\r\nhtml[dir=\"rtl\"] #toolbarViewerRight,\r\nhtml[dir=\"ltr\"] #toolbarSidebarLeft,\r\nhtml[dir=\"rtl\"] #toolbarSidebarRight {\r\n  float: left;\r\n}\r\nhtml[dir=\"ltr\"] #toolbarViewerRight,\r\nhtml[dir=\"rtl\"] #toolbarViewerLeft,\r\nhtml[dir=\"ltr\"] #toolbarSidebarRight,\r\nhtml[dir=\"rtl\"] #toolbarSidebarLeft {\r\n  float: right;\r\n}\r\nhtml[dir=\"ltr\"] #toolbarViewerLeft > *,\r\nhtml[dir=\"ltr\"] #toolbarViewerMiddle > *,\r\nhtml[dir=\"ltr\"] #toolbarViewerRight > *,\r\nhtml[dir=\"ltr\"] #toolbarSidebarLeft *,\r\nhtml[dir=\"ltr\"] #toolbarSidebarRight *,\r\nhtml[dir=\"ltr\"] .findbar * {\r\n  position: relative;\r\n  float: left;\r\n}\r\nhtml[dir=\"rtl\"] #toolbarViewerLeft > *,\r\nhtml[dir=\"rtl\"] #toolbarViewerMiddle > *,\r\nhtml[dir=\"rtl\"] #toolbarViewerRight > *,\r\nhtml[dir=\"rtl\"] #toolbarSidebarLeft *,\r\nhtml[dir=\"rtl\"] #toolbarSidebarRight *,\r\nhtml[dir=\"rtl\"] .findbar * {\r\n  position: relative;\r\n  float: right;\r\n}\r\n\r\n.splitToolbarButton {\r\n  margin: 2px 2px 0;\r\n  display: inline-block;\r\n}\r\nhtml[dir=\"ltr\"] .splitToolbarButton > .toolbarButton {\r\n  float: left;\r\n}\r\nhtml[dir=\"rtl\"] .splitToolbarButton > .toolbarButton {\r\n  float: right;\r\n}\r\n\r\n.toolbarButton,\r\n.secondaryToolbarButton,\r\n.overlayButton {\r\n  border: 0 none;\r\n  background: none;\r\n  width: 28px;\r\n  height: 28px;\r\n}\r\n.overlayButton {\r\n  background-color: var(--overlay-button-bg-color);\r\n}\r\n\r\n.overlayButton:hover,\r\n.overlayButton:focus {\r\n  background-color: var(--overlay-button-hover-color);\r\n}\r\n\r\n.toolbarButton > span {\r\n  display: inline-block;\r\n  width: 0;\r\n  height: 0;\r\n  overflow: hidden;\r\n}\r\n\r\n.toolbarButton[disabled],\r\n.secondaryToolbarButton[disabled],\r\n.overlayButton[disabled] {\r\n  opacity: 0.5;\r\n}\r\n\r\n.splitToolbarButton.toggled .toolbarButton {\r\n  margin: 0;\r\n}\r\n\r\n.splitToolbarButton > .toolbarButton:hover,\r\n.splitToolbarButton > .toolbarButton:focus,\r\n.dropdownToolbarButton:hover,\r\n.toolbarButton.textButton:hover,\r\n.toolbarButton.textButton:focus {\r\n  background-color: var(--button-hover-color);\r\n  z-index: 199;\r\n}\r\n.splitToolbarButton > .toolbarButton {\r\n  position: relative;\r\n}\r\nhtml[dir=\"ltr\"] .splitToolbarButton > .toolbarButton:first-child,\r\nhtml[dir=\"rtl\"] .splitToolbarButton > .toolbarButton:last-child {\r\n  margin: 0;\r\n}\r\nhtml[dir=\"ltr\"] .splitToolbarButton > .toolbarButton:last-child,\r\nhtml[dir=\"rtl\"] .splitToolbarButton > .toolbarButton:first-child {\r\n  margin: 0;\r\n}\r\n.splitToolbarButtonSeparator {\r\n  padding: 10px 0;\r\n  width: 1px;\r\n  background-color: var(--separator-color);\r\n  z-index: 99;\r\n  display: inline-block;\r\n  margin: 4px 0;\r\n}\r\n\r\n.findbar .splitToolbarButtonSeparator {\r\n  background-color: var(--field-border-color);\r\n  margin: 0;\r\n  padding: 13px 0;\r\n}\r\n\r\nhtml[dir=\"ltr\"] .splitToolbarButtonSeparator {\r\n  float: left;\r\n}\r\nhtml[dir=\"rtl\"] .splitToolbarButtonSeparator {\r\n  float: right;\r\n}\r\n\r\n.toolbarButton,\r\n.dropdownToolbarButton,\r\n.secondaryToolbarButton,\r\n.overlayButton {\r\n  min-width: 16px;\r\n  margin: 2px 1px;\r\n  padding: 2px 6px 0;\r\n  border: none;\r\n  border-radius: 2px;\r\n  color: var(--main-color);\r\n  font-size: 12px;\r\n  line-height: 14px;\r\n  -webkit-user-select: none;\r\n     -moz-user-select: none;\r\n          user-select: none;\r\n  cursor: default;\r\n  box-sizing: border-box;\r\n}\r\n\r\nhtml[dir=\"ltr\"] #toolbarViewerLeft > .toolbarButton:first-child,\r\nhtml[dir=\"rtl\"] #toolbarViewerRight > .toolbarButton:last-child {\r\n  margin-left: 2px;\r\n}\r\n\r\nhtml[dir=\"ltr\"] #toolbarViewerRight > .toolbarButton:last-child,\r\nhtml[dir=\"rtl\"] #toolbarViewerLeft > .toolbarButton:first-child {\r\n  margin-right: 2px;\r\n}\r\n.toolbarButton:hover,\r\n.toolbarButton:focus {\r\n  background-color: var(--button-hover-color);\r\n}\r\n.secondaryToolbarButton:hover,\r\n.secondaryToolbarButton:focus {\r\n  background-color: var(--doorhanger-hover-color);\r\n}\r\n\r\n.toolbarButton.toggled,\r\n.splitToolbarButton.toggled > .toolbarButton.toggled,\r\n.secondaryToolbarButton.toggled {\r\n  background-color: var(--toggled-btn-bg-color);\r\n}\r\n\r\n.toolbarButton.toggled:hover:active,\r\n.splitToolbarButton.toggled > .toolbarButton.toggled:hover:active,\r\n.secondaryToolbarButton.toggled:hover:active {\r\n  background-color: var(--toggled-hover-active-btn-color);\r\n}\r\n\r\n.dropdownToolbarButton {\r\n  width: 140px;\r\n  padding: 0;\r\n  overflow: hidden;\r\n  background-color: var(--dropdown-btn-bg-color);\r\n  margin-top: 2px !important;\r\n}\r\n.dropdownToolbarButton::after {\r\n  top: 6px;\r\n  pointer-events: none;\r\n\r\n  -webkit-mask-image: var(--toolbarButton-menuArrow-icon);\r\n  mask-image: var(--toolbarButton-menuArrow-icon);\r\n}\r\nhtml[dir=\"ltr\"] .dropdownToolbarButton::after {\r\n  right: 7px;\r\n}\r\nhtml[dir=\"rtl\"] .dropdownToolbarButton::after {\r\n  left: 7px;\r\n}\r\n\r\n.dropdownToolbarButton > select {\r\n  width: 162px;\r\n  height: 28px;\r\n  font-size: 12px;\r\n  color: var(--main-color);\r\n  margin: 0;\r\n  padding: 1px 0 2px;\r\n  border: none;\r\n  background-color: var(--dropdown-btn-bg-color);\r\n}\r\nhtml[dir=\"ltr\"] .dropdownToolbarButton > select {\r\n  padding-left: 4px;\r\n}\r\nhtml[dir=\"rtl\"] .dropdownToolbarButton > select {\r\n  padding-right: 4px;\r\n}\r\n.dropdownToolbarButton > select:hover {\r\n  background-color: var(--button-hover-color);\r\n}\r\n\r\n.dropdownToolbarButton > select:focus {\r\n  background-color: var(--button-hover-color);\r\n}\r\n\r\n.dropdownToolbarButton > select > option {\r\n  background: var(--doorhanger-bg-color);\r\n}\r\n\r\n#customScaleOption {\r\n  display: none;\r\n}\r\n\r\n#pageWidthOption {\r\n  border-bottom: 1px rgba(255, 255, 255, 0.5) solid;\r\n}\r\n\r\n.toolbarButtonSpacer {\r\n  width: 30px;\r\n  display: inline-block;\r\n  height: 1px;\r\n}\r\n\r\n.toolbarButton::before,\r\n.secondaryToolbarButton::before,\r\n.dropdownToolbarButton::after,\r\n.treeItemToggler::before {\r\n  /* All matching images have a size of 16x16\r\n   * All relevant containers have a size of 28x28 */\r\n  position: absolute;\r\n  display: inline-block;\r\n  width: 16px;\r\n  height: 16px;\r\n\r\n  content: \"\";\r\n  background-color: var(--toolbar-icon-bg-color);\r\n  -webkit-mask-size: cover;\r\n  mask-size: cover;\r\n}\r\n\r\n.toolbarButton::before {\r\n  opacity: var(--toolbar-icon-opacity);\r\n  top: 6px;\r\n  left: 6px;\r\n}\r\n\r\n.secondaryToolbarButton::before {\r\n  opacity: var(--doorhanger-icon-opacity);\r\n  top: 5px;\r\n}\r\nhtml[dir=\"ltr\"] .secondaryToolbarButton::before {\r\n  left: 12px;\r\n}\r\nhtml[dir=\"rtl\"] .secondaryToolbarButton::before {\r\n  right: 12px;\r\n}\r\n\r\n.toolbarButton#sidebarToggle::before {\r\n  -webkit-mask-image: var(--toolbarButton-sidebarToggle-icon);\r\n  mask-image: var(--toolbarButton-sidebarToggle-icon);\r\n}\r\nhtml[dir=\"rtl\"] .toolbarButton#sidebarToggle::before {\r\n  transform: scaleX(-1);\r\n}\r\n\r\n.toolbarButton#secondaryToolbarToggle::before {\r\n  -webkit-mask-image: var(--toolbarButton-secondaryToolbarToggle-icon);\r\n  mask-image: var(--toolbarButton-secondaryToolbarToggle-icon);\r\n}\r\nhtml[dir=\"rtl\"] .toolbarButton#secondaryToolbarToggle::before {\r\n  transform: scaleX(-1);\r\n}\r\n\r\n.toolbarButton.findPrevious::before {\r\n  -webkit-mask-image: var(--findbarButton-previous-icon);\r\n  mask-image: var(--findbarButton-previous-icon);\r\n}\r\n\r\n.toolbarButton.findNext::before {\r\n  -webkit-mask-image: var(--findbarButton-next-icon);\r\n  mask-image: var(--findbarButton-next-icon);\r\n}\r\n\r\n.toolbarButton.pageUp::before {\r\n  -webkit-mask-image: var(--toolbarButton-pageUp-icon);\r\n  mask-image: var(--toolbarButton-pageUp-icon);\r\n}\r\n\r\n.toolbarButton.pageDown::before {\r\n  -webkit-mask-image: var(--toolbarButton-pageDown-icon);\r\n  mask-image: var(--toolbarButton-pageDown-icon);\r\n}\r\n\r\n.toolbarButton.zoomOut::before {\r\n  -webkit-mask-image: var(--toolbarButton-zoomOut-icon);\r\n  mask-image: var(--toolbarButton-zoomOut-icon);\r\n}\r\n\r\n.toolbarButton.zoomIn::before {\r\n  -webkit-mask-image: var(--toolbarButton-zoomIn-icon);\r\n  mask-image: var(--toolbarButton-zoomIn-icon);\r\n}\r\n\r\n.toolbarButton.presentationMode::before,\r\n.secondaryToolbarButton.presentationMode::before {\r\n  -webkit-mask-image: var(--toolbarButton-presentationMode-icon);\r\n  mask-image: var(--toolbarButton-presentationMode-icon);\r\n}\r\n\r\n.toolbarButton.print::before,\r\n.secondaryToolbarButton.print::before {\r\n  -webkit-mask-image: var(--toolbarButton-print-icon);\r\n  mask-image: var(--toolbarButton-print-icon);\r\n}\r\n\r\n.toolbarButton.openFile::before,\r\n.secondaryToolbarButton.openFile::before {\r\n  -webkit-mask-image: var(--toolbarButton-openFile-icon);\r\n  mask-image: var(--toolbarButton-openFile-icon);\r\n}\r\n\r\n.toolbarButton.download::before,\r\n.secondaryToolbarButton.download::before {\r\n  -webkit-mask-image: var(--toolbarButton-download-icon);\r\n  mask-image: var(--toolbarButton-download-icon);\r\n}\r\n\r\n.secondaryToolbarButton.bookmark {\r\n  padding-top: 6px;\r\n  text-decoration: none;\r\n}\r\n\r\n.bookmark[href=\"#\"] {\r\n  opacity: 0.5;\r\n  pointer-events: none;\r\n}\r\n\r\n.toolbarButton.bookmark::before,\r\n.secondaryToolbarButton.bookmark::before {\r\n  -webkit-mask-image: var(--toolbarButton-bookmark-icon);\r\n  mask-image: var(--toolbarButton-bookmark-icon);\r\n}\r\n\r\n#viewThumbnail.toolbarButton::before {\r\n  -webkit-mask-image: var(--toolbarButton-viewThumbnail-icon);\r\n  mask-image: var(--toolbarButton-viewThumbnail-icon);\r\n}\r\n\r\n#viewOutline.toolbarButton::before {\r\n  -webkit-mask-image: var(--toolbarButton-viewOutline-icon);\r\n  mask-image: var(--toolbarButton-viewOutline-icon);\r\n}\r\nhtml[dir=\"rtl\"] #viewOutline.toolbarButton::before {\r\n  transform: scaleX(-1);\r\n}\r\n\r\n#viewAttachments.toolbarButton::before {\r\n  -webkit-mask-image: var(--toolbarButton-viewAttachments-icon);\r\n  mask-image: var(--toolbarButton-viewAttachments-icon);\r\n}\r\n\r\n#viewLayers.toolbarButton::before {\r\n  -webkit-mask-image: var(--toolbarButton-viewLayers-icon);\r\n  mask-image: var(--toolbarButton-viewLayers-icon);\r\n}\r\n\r\n#currentOutlineItem.toolbarButton::before {\r\n  -webkit-mask-image: var(--toolbarButton-currentOutlineItem-icon);\r\n  mask-image: var(--toolbarButton-currentOutlineItem-icon);\r\n}\r\nhtml[dir=\"rtl\"] #currentOutlineItem.toolbarButton::before {\r\n  transform: scaleX(-1);\r\n}\r\n\r\n#viewFind.toolbarButton::before {\r\n  -webkit-mask-image: var(--toolbarButton-search-icon);\r\n  mask-image: var(--toolbarButton-search-icon);\r\n}\r\n\r\n.toolbarButton.pdfSidebarNotification::after {\r\n  position: absolute;\r\n  display: inline-block;\r\n  top: 1px;\r\n  /* Create a filled circle, with a diameter of 9 pixels, using only CSS: */\r\n  content: \"\";\r\n  background-color: rgba(112, 219, 85, 1);\r\n  height: 9px;\r\n  width: 9px;\r\n  border-radius: 50%;\r\n}\r\nhtml[dir=\"ltr\"] .toolbarButton.pdfSidebarNotification::after {\r\n  left: 17px;\r\n}\r\nhtml[dir=\"rtl\"] .toolbarButton.pdfSidebarNotification::after {\r\n  right: 17px;\r\n}\r\n\r\n.secondaryToolbarButton {\r\n  position: relative;\r\n  margin: 0;\r\n  padding: 0 0 1px;\r\n  height: auto;\r\n  min-height: 26px;\r\n  width: auto;\r\n  min-width: 100%;\r\n  white-space: normal;\r\n  border-radius: 0;\r\n  box-sizing: border-box;\r\n}\r\nhtml[dir=\"ltr\"] .secondaryToolbarButton {\r\n  padding-left: 36px;\r\n  text-align: left;\r\n}\r\nhtml[dir=\"rtl\"] .secondaryToolbarButton {\r\n  padding-right: 36px;\r\n  text-align: right;\r\n}\r\n\r\nhtml[dir=\"ltr\"] .secondaryToolbarButton > span {\r\n  padding-right: 4px;\r\n}\r\nhtml[dir=\"rtl\"] .secondaryToolbarButton > span {\r\n  padding-left: 4px;\r\n}\r\n\r\n.secondaryToolbarButton.firstPage::before {\r\n  -webkit-mask-image: var(--secondaryToolbarButton-firstPage-icon);\r\n  mask-image: var(--secondaryToolbarButton-firstPage-icon);\r\n}\r\n\r\n.secondaryToolbarButton.lastPage::before {\r\n  -webkit-mask-image: var(--secondaryToolbarButton-lastPage-icon);\r\n  mask-image: var(--secondaryToolbarButton-lastPage-icon);\r\n}\r\n\r\n.secondaryToolbarButton.rotateCcw::before {\r\n  -webkit-mask-image: var(--secondaryToolbarButton-rotateCcw-icon);\r\n  mask-image: var(--secondaryToolbarButton-rotateCcw-icon);\r\n}\r\n\r\n.secondaryToolbarButton.rotateCw::before {\r\n  -webkit-mask-image: var(--secondaryToolbarButton-rotateCw-icon);\r\n  mask-image: var(--secondaryToolbarButton-rotateCw-icon);\r\n}\r\n\r\n.secondaryToolbarButton.selectTool::before {\r\n  -webkit-mask-image: var(--secondaryToolbarButton-selectTool-icon);\r\n  mask-image: var(--secondaryToolbarButton-selectTool-icon);\r\n}\r\n\r\n.secondaryToolbarButton.handTool::before {\r\n  -webkit-mask-image: var(--secondaryToolbarButton-handTool-icon);\r\n  mask-image: var(--secondaryToolbarButton-handTool-icon);\r\n}\r\n\r\n.secondaryToolbarButton.scrollVertical::before {\r\n  -webkit-mask-image: var(--secondaryToolbarButton-scrollVertical-icon);\r\n  mask-image: var(--secondaryToolbarButton-scrollVertical-icon);\r\n}\r\n\r\n.secondaryToolbarButton.scrollHorizontal::before {\r\n  -webkit-mask-image: var(--secondaryToolbarButton-scrollHorizontal-icon);\r\n  mask-image: var(--secondaryToolbarButton-scrollHorizontal-icon);\r\n}\r\n\r\n.secondaryToolbarButton.scrollWrapped::before {\r\n  -webkit-mask-image: var(--secondaryToolbarButton-scrollWrapped-icon);\r\n  mask-image: var(--secondaryToolbarButton-scrollWrapped-icon);\r\n}\r\n\r\n.secondaryToolbarButton.spreadNone::before {\r\n  -webkit-mask-image: var(--secondaryToolbarButton-spreadNone-icon);\r\n  mask-image: var(--secondaryToolbarButton-spreadNone-icon);\r\n}\r\n\r\n.secondaryToolbarButton.spreadOdd::before {\r\n  -webkit-mask-image: var(--secondaryToolbarButton-spreadOdd-icon);\r\n  mask-image: var(--secondaryToolbarButton-spreadOdd-icon);\r\n}\r\n\r\n.secondaryToolbarButton.spreadEven::before {\r\n  -webkit-mask-image: var(--secondaryToolbarButton-spreadEven-icon);\r\n  mask-image: var(--secondaryToolbarButton-spreadEven-icon);\r\n}\r\n\r\n.secondaryToolbarButton.documentProperties::before {\r\n  -webkit-mask-image: var(--secondaryToolbarButton-documentProperties-icon);\r\n  mask-image: var(--secondaryToolbarButton-documentProperties-icon);\r\n}\r\n\r\n.verticalToolbarSeparator {\r\n  display: block;\r\n  padding: 11px 0;\r\n  margin: 5px 2px;\r\n  width: 1px;\r\n  background-color: var(--separator-color);\r\n}\r\nhtml[dir=\"ltr\"] .verticalToolbarSeparator {\r\n  margin-left: 2px;\r\n}\r\nhtml[dir=\"rtl\"] .verticalToolbarSeparator {\r\n  margin-right: 2px;\r\n}\r\n\r\n.horizontalToolbarSeparator {\r\n  display: block;\r\n  margin: 6px 0 5px;\r\n  height: 1px;\r\n  width: 100%;\r\n  border-top: 1px solid var(--doorhanger-separator-color);\r\n}\r\n\r\n.toolbarField {\r\n  padding: 4px 7px;\r\n  margin: 3px 0;\r\n  border-radius: 2px;\r\n  background-color: var(--field-bg-color);\r\n  background-clip: padding-box;\r\n  border-width: 1px;\r\n  border-style: solid;\r\n  border-color: var(--field-border-color);\r\n  box-shadow: none;\r\n  color: var(--field-color);\r\n  font-size: 12px;\r\n  line-height: 16px;\r\n  outline-style: none;\r\n}\r\n\r\n.toolbarField[type=\"checkbox\"] {\r\n  opacity: 0;\r\n  position: absolute !important;\r\n  left: 0;\r\n}\r\n\r\nhtml[dir=\"ltr\"] .toolbarField[type=\"checkbox\"] {\r\n  margin: 10px 0 3px 7px;\r\n}\r\n\r\nhtml[dir=\"rtl\"] .toolbarField[type=\"checkbox\"] {\r\n  margin: 10px 7px 3px 0;\r\n}\r\n\r\n.toolbarField.pageNumber {\r\n  -moz-appearance: textfield; /* hides the spinner in moz */\r\n  min-width: 16px;\r\n  text-align: right;\r\n  width: 40px;\r\n}\r\n\r\n.toolbarField.pageNumber.visiblePageIsLoading {\r\n  background-image: var(--loading-icon);\r\n  background-repeat: no-repeat;\r\n  background-position: 3px;\r\n}\r\n\r\n.toolbarField.pageNumber::-webkit-inner-spin-button,\r\n.toolbarField.pageNumber::-webkit-outer-spin-button {\r\n  -webkit-appearance: none;\r\n  margin: 0;\r\n}\r\n\r\n.toolbarField:focus {\r\n  border-color: #0a84ff;\r\n}\r\n\r\n.toolbarLabel {\r\n  min-width: 16px;\r\n  padding: 6px;\r\n  margin: 2px;\r\n  border: 1px solid rgba(0, 0, 0, 0);\r\n  border-radius: 2px;\r\n  color: var(--main-color);\r\n  font-size: 12px;\r\n  line-height: 14px;\r\n  text-align: left;\r\n  -webkit-user-select: none;\r\n     -moz-user-select: none;\r\n          user-select: none;\r\n  cursor: default;\r\n}\r\n\r\nhtml[dir=\"ltr\"] #numPages.toolbarLabel {\r\n  padding-left: 2px;\r\n}\r\nhtml[dir=\"rtl\"] #numPages.toolbarLabel {\r\n  padding-right: 2px;\r\n}\r\n\r\n#thumbnailView {\r\n  position: absolute;\r\n  width: calc(100% - 60px);\r\n  top: 0;\r\n  bottom: 0;\r\n  padding: 10px 30px 0;\r\n  overflow: auto;\r\n  -webkit-overflow-scrolling: touch;\r\n}\r\n\r\n#thumbnailView > a:active,\r\n#thumbnailView > a:focus {\r\n  outline: 0;\r\n}\r\n\r\n.thumbnail {\r\n  margin: 0 10px 5px;\r\n}\r\nhtml[dir=\"ltr\"] .thumbnail {\r\n  float: left;\r\n}\r\nhtml[dir=\"rtl\"] .thumbnail {\r\n  float: right;\r\n}\r\n\r\n#thumbnailView > a:last-of-type > .thumbnail {\r\n  margin-bottom: 10px;\r\n}\r\n\r\n#thumbnailView > a:last-of-type > .thumbnail:not([data-loaded]) {\r\n  margin-bottom: 9px;\r\n}\r\n\r\n.thumbnail:not([data-loaded]) {\r\n  border: 1px dashed rgba(132, 132, 132, 1);\r\n  margin: -1px 9px 4px;\r\n}\r\n\r\n.thumbnailImage {\r\n  border: 1px solid rgba(0, 0, 0, 0);\r\n  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5), 0 2px 8px rgba(0, 0, 0, 0.3);\r\n  opacity: 0.8;\r\n  z-index: 99;\r\n  background-color: rgba(255, 255, 255, 1);\r\n  background-clip: content-box;\r\n}\r\n\r\n.thumbnailSelectionRing {\r\n  border-radius: 2px;\r\n  padding: 7px;\r\n}\r\n\r\na:focus > .thumbnail > .thumbnailSelectionRing > .thumbnailImage,\r\n.thumbnail:hover > .thumbnailSelectionRing > .thumbnailImage {\r\n  opacity: 0.9;\r\n}\r\n\r\na:focus > .thumbnail > .thumbnailSelectionRing,\r\n.thumbnail:hover > .thumbnailSelectionRing {\r\n  background-color: var(--sidebaritem-bg-color);\r\n  background-clip: padding-box;\r\n  color: rgba(255, 255, 255, 0.9);\r\n}\r\n\r\n.thumbnail.selected > .thumbnailSelectionRing > .thumbnailImage {\r\n  opacity: 1;\r\n}\r\n\r\n.thumbnail.selected > .thumbnailSelectionRing {\r\n  background-color: var(--sidebaritem-bg-color);\r\n  background-clip: padding-box;\r\n  color: rgba(255, 255, 255, 1);\r\n}\r\n\r\n#outlineView,\r\n#attachmentsView,\r\n#layersView {\r\n  position: absolute;\r\n  width: calc(100% - 8px);\r\n  top: 0;\r\n  bottom: 0;\r\n  padding: 4px 4px 0;\r\n  overflow: auto;\r\n  -webkit-overflow-scrolling: touch;\r\n  -webkit-user-select: none;\r\n     -moz-user-select: none;\r\n          user-select: none;\r\n}\r\n\r\nhtml[dir=\"ltr\"] .treeWithDeepNesting > .treeItem,\r\nhtml[dir=\"ltr\"] .treeItem > .treeItems {\r\n  margin-left: 20px;\r\n}\r\n\r\nhtml[dir=\"rtl\"] .treeWithDeepNesting > .treeItem,\r\nhtml[dir=\"rtl\"] .treeItem > .treeItems {\r\n  margin-right: 20px;\r\n}\r\n\r\n.treeItem > a {\r\n  text-decoration: none;\r\n  display: inline-block;\r\n  min-width: 95%;\r\n  /* Subtract the right padding (left, in RTL mode) of the container: */\r\n  min-width: calc(100% - 4px);\r\n  height: auto;\r\n  margin-bottom: 1px;\r\n  border-radius: 2px;\r\n  color: var(--treeitem-color);\r\n  font-size: 13px;\r\n  line-height: 15px;\r\n  -webkit-user-select: none;\r\n     -moz-user-select: none;\r\n          user-select: none;\r\n  white-space: normal;\r\n  cursor: pointer;\r\n}\r\nhtml[dir=\"ltr\"] .treeItem > a {\r\n  padding: 2px 0 5px 4px;\r\n}\r\nhtml[dir=\"rtl\"] .treeItem > a {\r\n  padding: 2px 4px 5px 0;\r\n}\r\n\r\n#layersView .treeItem > a > * {\r\n  cursor: pointer;\r\n}\r\nhtml[dir=\"ltr\"] #layersView .treeItem > a > label {\r\n  padding-left: 4px;\r\n}\r\nhtml[dir=\"rtl\"] #layersView .treesItem > a > label {\r\n  padding-right: 4px;\r\n}\r\n\r\n.treeItemToggler {\r\n  position: relative;\r\n  height: 0;\r\n  width: 0;\r\n  color: rgba(255, 255, 255, 0.5);\r\n}\r\n.treeItemToggler::before {\r\n  -webkit-mask-image: var(--treeitem-expanded-icon);\r\n  mask-image: var(--treeitem-expanded-icon);\r\n}\r\n.treeItemToggler.treeItemsHidden::before {\r\n  -webkit-mask-image: var(--treeitem-collapsed-icon);\r\n  mask-image: var(--treeitem-collapsed-icon);\r\n}\r\nhtml[dir=\"rtl\"] .treeItemToggler.treeItemsHidden::before {\r\n  transform: scaleX(-1);\r\n}\r\n.treeItemToggler.treeItemsHidden ~ .treeItems {\r\n  display: none;\r\n}\r\nhtml[dir=\"ltr\"] .treeItemToggler {\r\n  float: left;\r\n}\r\nhtml[dir=\"rtl\"] .treeItemToggler {\r\n  float: right;\r\n}\r\nhtml[dir=\"ltr\"] .treeItemToggler::before {\r\n  right: 4px;\r\n}\r\nhtml[dir=\"rtl\"] .treeItemToggler::before {\r\n  left: 4px;\r\n}\r\n\r\n.treeItem.selected > a {\r\n  background-color: var(--treeitem-selected-bg-color);\r\n  color: var(--treeitem-selected-color);\r\n}\r\n\r\n.treeItemToggler:hover,\r\n.treeItemToggler:hover + a,\r\n.treeItemToggler:hover ~ .treeItems,\r\n.treeItem > a:hover {\r\n  background-color: var(--sidebaritem-bg-color);\r\n  background-clip: padding-box;\r\n  border-radius: 2px;\r\n  color: var(--treeitem-hover-color);\r\n}\r\n\r\n/* TODO: file FF bug to support ::-moz-selection:window-inactive\r\n   so we can override the opaque grey background when the window is inactive;\r\n   see https://bugzilla.mozilla.org/show_bug.cgi?id=706209 */\r\n::-moz-selection {\r\n  background: rgba(0, 0, 255, 0.3);\r\n}\r\n::selection {\r\n  background: rgba(0, 0, 255, 0.3);\r\n}\r\n\r\n#errorWrapper {\r\n  background: none repeat scroll 0 0 var(--errorWrapper-bg-color);\r\n  color: var(--main-color);\r\n  left: 0;\r\n  position: absolute;\r\n  right: 0;\r\n  z-index: 1000;\r\n  padding: 3px 6px;\r\n}\r\n\r\n#errorMessageLeft {\r\n  float: left;\r\n}\r\n\r\n#errorMessageRight {\r\n  float: right;\r\n}\r\n\r\n#errorMoreInfo {\r\n  background-color: var(--field-bg-color);\r\n  color: var(--field-color);\r\n  border: 1px solid var(--field-border-color);\r\n  padding: 3px;\r\n  margin: 3px;\r\n  width: 98%;\r\n}\r\n\r\n.overlayButton {\r\n  width: auto;\r\n  margin: 3px 4px 2px !important;\r\n  padding: 2px 11px;\r\n}\r\n\r\n#overlayContainer {\r\n  display: table;\r\n  position: absolute;\r\n  width: 100%;\r\n  height: 100%;\r\n  background-color: rgba(0, 0, 0, 0.2);\r\n  z-index: 40000;\r\n}\r\n#overlayContainer > * {\r\n  overflow: auto;\r\n  -webkit-overflow-scrolling: touch;\r\n}\r\n\r\n#overlayContainer > .container {\r\n  display: table-cell;\r\n  vertical-align: middle;\r\n  text-align: center;\r\n}\r\n\r\n#overlayContainer > .container > .dialog {\r\n  display: inline-block;\r\n  padding: 15px;\r\n  border-spacing: 4px;\r\n  color: var(--main-color);\r\n  font-size: 12px;\r\n  line-height: 14px;\r\n  background-color: var(--doorhanger-bg-color);\r\n  border: 1px solid rgba(0, 0, 0, 0.5);\r\n  border-radius: 4px;\r\n  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);\r\n}\r\n\r\n.dialog > .row {\r\n  display: table-row;\r\n}\r\n\r\n.dialog > .row > * {\r\n  display: table-cell;\r\n}\r\n\r\n.dialog .toolbarField {\r\n  margin: 5px 0;\r\n}\r\n\r\n.dialog .separator {\r\n  display: block;\r\n  margin: 4px 0;\r\n  height: 1px;\r\n  width: 100%;\r\n  background-color: var(--separator-color);\r\n}\r\n\r\n.dialog .buttonRow {\r\n  text-align: center;\r\n  vertical-align: middle;\r\n}\r\n\r\n.dialog :link {\r\n  color: rgba(255, 255, 255, 1);\r\n}\r\n\r\n#passwordOverlay > .dialog {\r\n  text-align: center;\r\n}\r\n#passwordOverlay .toolbarField {\r\n  width: 200px;\r\n}\r\n\r\n#documentPropertiesOverlay > .dialog {\r\n  text-align: left;\r\n}\r\n#documentPropertiesOverlay .row > * {\r\n  min-width: 100px;\r\n}\r\nhtml[dir=\"ltr\"] #documentPropertiesOverlay .row > * {\r\n  text-align: left;\r\n}\r\nhtml[dir=\"rtl\"] #documentPropertiesOverlay .row > * {\r\n  text-align: right;\r\n}\r\n#documentPropertiesOverlay .row > span {\r\n  width: 125px;\r\n  word-wrap: break-word;\r\n}\r\n#documentPropertiesOverlay .row > p {\r\n  max-width: 225px;\r\n  word-wrap: break-word;\r\n}\r\n#documentPropertiesOverlay .buttonRow {\r\n  margin-top: 10px;\r\n}\r\n\r\n.clearBoth {\r\n  clear: both;\r\n}\r\n\r\n.fileInput {\r\n  background: rgba(255, 255, 255, 1);\r\n  color: rgba(0, 0, 0, 1);\r\n  margin-top: 5px;\r\n  visibility: hidden;\r\n  position: fixed;\r\n  right: 0;\r\n  top: 0;\r\n}\r\n\r\n#PDFBug {\r\n  background: none repeat scroll 0 0 rgba(255, 255, 255, 1);\r\n  border: 1px solid rgba(102, 102, 102, 1);\r\n  position: fixed;\r\n  top: 32px;\r\n  right: 0;\r\n  bottom: 0;\r\n  font-size: 10px;\r\n  padding: 0;\r\n  width: 300px;\r\n}\r\n#PDFBug .controls {\r\n  background: rgba(238, 238, 238, 1);\r\n  border-bottom: 1px solid rgba(102, 102, 102, 1);\r\n  padding: 3px;\r\n}\r\n#PDFBug .panels {\r\n  bottom: 0;\r\n  left: 0;\r\n  overflow: auto;\r\n  -webkit-overflow-scrolling: touch;\r\n  position: absolute;\r\n  right: 0;\r\n  top: 27px;\r\n}\r\n#PDFBug .panels > div {\r\n  padding: 5px;\r\n}\r\n#PDFBug button.active {\r\n  font-weight: bold;\r\n}\r\n.debuggerShowText {\r\n  background: none repeat scroll 0 0 rgba(255, 255, 0, 1);\r\n  color: rgba(0, 0, 255, 1);\r\n}\r\n.debuggerHideText:hover {\r\n  background: none repeat scroll 0 0 rgba(255, 255, 0, 1);\r\n}\r\n#PDFBug .stats {\r\n  font-family: courier;\r\n  font-size: 10px;\r\n  white-space: pre;\r\n}\r\n#PDFBug .stats .title {\r\n  font-weight: bold;\r\n}\r\n#PDFBug table {\r\n  font-size: 10px;\r\n}\r\n\r\n#viewer.textLayer-visible .textLayer {\r\n  opacity: 1;\r\n}\r\n\r\n#viewer.textLayer-visible .canvasWrapper {\r\n  background-color: rgba(128, 255, 128, 1);\r\n}\r\n\r\n#viewer.textLayer-visible .canvasWrapper canvas {\r\n  mix-blend-mode: screen;\r\n}\r\n\r\n#viewer.textLayer-visible .textLayer > span {\r\n  background-color: rgba(255, 255, 0, 0.1);\r\n  color: rgba(0, 0, 0, 1);\r\n  border: solid 1px rgba(255, 0, 0, 0.5);\r\n  box-sizing: border-box;\r\n}\r\n\r\n#viewer.textLayer-hover .textLayer > span:hover {\r\n  background-color: rgba(255, 255, 255, 1);\r\n  color: rgba(0, 0, 0, 1);\r\n}\r\n\r\n#viewer.textLayer-shadow .textLayer > span {\r\n  background-color: rgba(255, 255, 255, 0.6);\r\n  color: rgba(0, 0, 0, 1);\r\n}\r\n\r\n.grab-to-pan-grab {\r\n  cursor: url(\"images/grab.cur\"), move !important;\r\n  cursor: -webkit-grab !important;\r\n  cursor: grab !important;\r\n}\r\n.grab-to-pan-grab\r\n  *:not(input):not(textarea):not(button):not(select):not(:link) {\r\n  cursor: inherit !important;\r\n}\r\n.grab-to-pan-grab:active,\r\n.grab-to-pan-grabbing {\r\n  cursor: url(\"images/grabbing.cur\"), move !important;\r\n  cursor: -webkit-grabbing !important;\r\n  cursor: grabbing !important;\r\n  position: fixed;\r\n  background: rgba(0, 0, 0, 0);\r\n  display: block;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  overflow: hidden;\r\n  z-index: 50000; /* should be higher than anything else in PDF.js! */\r\n}\r\n\r\n@page {\r\n  margin: 0;\r\n}\r\n\r\n#printContainer {\r\n  display: none;\r\n}\r\n\r\n@media print {\r\n  /* General rules for printing. */\r\n  body {\r\n    background: rgba(0, 0, 0, 0) none;\r\n  }\r\n\r\n  /* Rules for browsers that don't support mozPrintCallback. */\r\n  #sidebarContainer,\r\n  #secondaryToolbar,\r\n  .toolbar,\r\n  #loadingBox,\r\n  #errorWrapper,\r\n  .textLayer {\r\n    display: none;\r\n  }\r\n  #viewerContainer {\r\n    overflow: visible;\r\n  }\r\n\r\n  #mainContainer,\r\n  #viewerContainer,\r\n  .page,\r\n  .page canvas {\r\n    position: static;\r\n    padding: 0;\r\n    margin: 0;\r\n  }\r\n\r\n  .page {\r\n    float: left;\r\n    display: none;\r\n    border: none;\r\n    box-shadow: none;\r\n    background-clip: content-box;\r\n    background-color: rgba(255, 255, 255, 1);\r\n  }\r\n\r\n  .page[data-loaded] {\r\n    display: block;\r\n  }\r\n\r\n  .fileInput {\r\n    display: none;\r\n  }\r\n\r\n  /* Rules for browsers that support PDF.js printing */\r\n  body[data-pdfjsprinting] #outerContainer {\r\n    display: none;\r\n  }\r\n  body[data-pdfjsprinting] #printContainer {\r\n    display: block;\r\n  }\r\n  #printContainer {\r\n    height: 100%;\r\n  }\r\n  /* wrapper around (scaled) print canvas elements */\r\n  #printContainer > div {\r\n    position: relative;\r\n    top: 0;\r\n    left: 0;\r\n    width: 1px;\r\n    height: 1px;\r\n    overflow: visible;\r\n    page-break-after: always;\r\n    page-break-inside: avoid;\r\n  }\r\n  #printContainer canvas,\r\n  #printContainer img {\r\n    direction: ltr;\r\n    display: block;\r\n  }\r\n}\r\n\r\n.visibleLargeView,\r\n.visibleMediumView,\r\n.visibleSmallView {\r\n  display: none;\r\n}\r\n\r\n@media all and (max-width: 900px) {\r\n  #toolbarViewerMiddle {\r\n    display: table;\r\n    margin: auto;\r\n    left: auto;\r\n    position: inherit;\r\n    transform: none;\r\n  }\r\n}\r\n\r\n@media all and (max-width: 840px) {\r\n  #sidebarContent {\r\n    background-color: rgba(0, 0, 0, 0.7);\r\n  }\r\n\r\n  html[dir=\"ltr\"] #outerContainer.sidebarOpen #viewerContainer {\r\n    left: 0 !important;\r\n  }\r\n  html[dir=\"rtl\"] #outerContainer.sidebarOpen #viewerContainer {\r\n    right: 0 !important;\r\n  }\r\n\r\n  #outerContainer .hiddenLargeView,\r\n  #outerContainer .hiddenMediumView {\r\n    display: inherit;\r\n  }\r\n  #outerContainer .visibleLargeView,\r\n  #outerContainer .visibleMediumView {\r\n    display: none;\r\n  }\r\n}\r\n\r\n@media all and (max-width: 770px) {\r\n  #outerContainer .hiddenLargeView {\r\n    display: none;\r\n  }\r\n  #outerContainer .visibleLargeView {\r\n    display: inherit;\r\n  }\r\n}\r\n\r\n@media all and (max-width: 700px) {\r\n  #outerContainer .hiddenMediumView {\r\n    display: none;\r\n  }\r\n  #outerContainer .visibleMediumView {\r\n    display: inherit;\r\n  }\r\n}\r\n\r\n@media all and (max-width: 640px) {\r\n  .hiddenSmallView,\r\n  .hiddenSmallView * {\r\n    display: none;\r\n  }\r\n  .visibleSmallView {\r\n    display: inherit;\r\n  }\r\n  .toolbarButtonSpacer {\r\n    width: 0;\r\n  }\r\n  html[dir=\"ltr\"] .findbar {\r\n    left: 34px;\r\n  }\r\n  html[dir=\"rtl\"] .findbar {\r\n    right: 34px;\r\n  }\r\n}\r\n\r\n@media all and (max-width: 535px) {\r\n  #scaleSelectContainer {\r\n    display: none;\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/viewer.html",
    "content": "<!DOCTYPE html>\r\n<!--\r\nCopyright 2012 Mozilla Foundation\r\n\r\nLicensed under the Apache License, Version 2.0 (the \"License\");\r\nyou may not use this file except in compliance with the License.\r\nYou may obtain a copy of the License at\r\n\r\n    http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nUnless required by applicable law or agreed to in writing, software\r\ndistributed under the License is distributed on an \"AS IS\" BASIS,\r\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\nSee the License for the specific language governing permissions and\r\nlimitations under the License.\r\n\r\nAdobe CMap resources are covered by their own copyright but the same license:\r\n\r\n    Copyright 1990-2015 Adobe Systems Incorporated.\r\n\r\nSee https://github.com/adobe-type-tools/cmap-resources\r\n-->\r\n<html dir=\"ltr\" mozdisallowselectionprint>\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\r\n    <meta name=\"google\" content=\"notranslate\">\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>PDF.js viewer</title>\r\n\r\n\r\n    <link rel=\"stylesheet\" href=\"viewer.css\">\r\n\r\n\r\n<!-- This snippet is used in production (included from viewer.html) -->\r\n<link rel=\"resource\" type=\"application/l10n\" href=\"locale/locale.properties\">\r\n<script src=\"../build/pdf.js\"></script>\r\n\r\n\r\n  <script src=\"viewer.js\"></script>\r\n\r\n  </head>\r\n\r\n  <body tabindex=\"1\">\r\n    <div id=\"outerContainer\">\r\n\r\n      <div id=\"sidebarContainer\">\r\n        <div id=\"toolbarSidebar\">\r\n          <div id=\"toolbarSidebarLeft\">\r\n            <div class=\"splitToolbarButton toggled\">\r\n              <button id=\"viewThumbnail\" class=\"toolbarButton toggled\" title=\"Show Thumbnails\" tabindex=\"2\" data-l10n-id=\"thumbs\">\r\n                 <span data-l10n-id=\"thumbs_label\">Thumbnails</span>\r\n              </button>\r\n              <button id=\"viewOutline\" class=\"toolbarButton\" title=\"Show Document Outline (double-click to expand/collapse all items)\" tabindex=\"3\" data-l10n-id=\"document_outline\">\r\n                 <span data-l10n-id=\"document_outline_label\">Document Outline</span>\r\n              </button>\r\n              <button id=\"viewAttachments\" class=\"toolbarButton\" title=\"Show Attachments\" tabindex=\"4\" data-l10n-id=\"attachments\">\r\n                 <span data-l10n-id=\"attachments_label\">Attachments</span>\r\n              </button>\r\n              <button id=\"viewLayers\" class=\"toolbarButton\" title=\"Show Layers (double-click to reset all layers to the default state)\" tabindex=\"5\" data-l10n-id=\"layers\">\r\n                 <span data-l10n-id=\"layers_label\">Layers</span>\r\n              </button>\r\n            </div>\r\n          </div>\r\n\r\n          <div id=\"toolbarSidebarRight\">\r\n            <div id=\"outlineOptionsContainer\" class=\"hidden\">\r\n              <div class=\"verticalToolbarSeparator\"></div>\r\n\r\n              <button id=\"currentOutlineItem\" class=\"toolbarButton\" disabled=\"disabled\" title=\"Find Current Outline Item\" tabindex=\"6\" data-l10n-id=\"current_outline_item\">\r\n                <span data-l10n-id=\"current_outline_item_label\">Current Outline Item</span>\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div id=\"sidebarContent\">\r\n          <div id=\"thumbnailView\">\r\n          </div>\r\n          <div id=\"outlineView\" class=\"hidden\">\r\n          </div>\r\n          <div id=\"attachmentsView\" class=\"hidden\">\r\n          </div>\r\n          <div id=\"layersView\" class=\"hidden\">\r\n          </div>\r\n        </div>\r\n        <div id=\"sidebarResizer\"></div>\r\n      </div>  <!-- sidebarContainer -->\r\n\r\n      <div id=\"mainContainer\">\r\n        <div class=\"findbar hidden doorHanger\" id=\"findbar\">\r\n          <div id=\"findbarInputContainer\">\r\n            <input id=\"findInput\" class=\"toolbarField\" title=\"Find\" placeholder=\"Find in document…\" tabindex=\"91\" data-l10n-id=\"find_input\">\r\n            <div class=\"splitToolbarButton\">\r\n              <button id=\"findPrevious\" class=\"toolbarButton findPrevious\" title=\"Find the previous occurrence of the phrase\" tabindex=\"92\" data-l10n-id=\"find_previous\">\r\n                <span data-l10n-id=\"find_previous_label\">Previous</span>\r\n              </button>\r\n              <div class=\"splitToolbarButtonSeparator\"></div>\r\n              <button id=\"findNext\" class=\"toolbarButton findNext\" title=\"Find the next occurrence of the phrase\" tabindex=\"93\" data-l10n-id=\"find_next\">\r\n                <span data-l10n-id=\"find_next_label\">Next</span>\r\n              </button>\r\n            </div>\r\n          </div>\r\n\r\n          <div id=\"findbarOptionsOneContainer\">\r\n            <input type=\"checkbox\" id=\"findHighlightAll\" class=\"toolbarField\" tabindex=\"94\">\r\n            <label for=\"findHighlightAll\" class=\"toolbarLabel\" data-l10n-id=\"find_highlight\">Highlight all</label>\r\n            <input type=\"checkbox\" id=\"findMatchCase\" class=\"toolbarField\" tabindex=\"95\">\r\n            <label for=\"findMatchCase\" class=\"toolbarLabel\" data-l10n-id=\"find_match_case_label\">Match case</label>\r\n          </div>\r\n          <div id=\"findbarOptionsTwoContainer\">\r\n            <input type=\"checkbox\" id=\"findEntireWord\" class=\"toolbarField\" tabindex=\"96\">\r\n            <label for=\"findEntireWord\" class=\"toolbarLabel\" data-l10n-id=\"find_entire_word_label\">Whole words</label>\r\n            <span id=\"findResultsCount\" class=\"toolbarLabel hidden\"></span>\r\n          </div>\r\n\r\n          <div id=\"findbarMessageContainer\">\r\n            <span id=\"findMsg\" class=\"toolbarLabel\"></span>\r\n          </div>\r\n        </div>  <!-- findbar -->\r\n\r\n        <div id=\"secondaryToolbar\" class=\"secondaryToolbar hidden doorHangerRight\">\r\n          <div id=\"secondaryToolbarButtonContainer\">\r\n            <button id=\"secondaryPresentationMode\" class=\"secondaryToolbarButton presentationMode visibleLargeView\" title=\"Switch to Presentation Mode\" tabindex=\"51\" data-l10n-id=\"presentation_mode\">\r\n              <span data-l10n-id=\"presentation_mode_label\">Presentation Mode</span>\r\n            </button>\r\n\r\n            <button id=\"secondaryOpenFile\" class=\"secondaryToolbarButton openFile visibleLargeView\" title=\"Open File\" tabindex=\"52\" data-l10n-id=\"open_file\">\r\n              <span data-l10n-id=\"open_file_label\">Open</span>\r\n            </button>\r\n\r\n            <button id=\"secondaryPrint\" class=\"secondaryToolbarButton print visibleMediumView\" title=\"Print\" tabindex=\"53\" data-l10n-id=\"print\">\r\n              <span data-l10n-id=\"print_label\">Print</span>\r\n            </button>\r\n\r\n            <button id=\"secondaryDownload\" class=\"secondaryToolbarButton download visibleMediumView\" title=\"Download\" tabindex=\"54\" data-l10n-id=\"download\">\r\n              <span data-l10n-id=\"download_label\">Download</span>\r\n            </button>\r\n\r\n            <a href=\"#\" id=\"secondaryViewBookmark\" class=\"secondaryToolbarButton bookmark visibleSmallView\" title=\"Current view (copy or open in new window)\" tabindex=\"55\" data-l10n-id=\"bookmark\">\r\n              <span data-l10n-id=\"bookmark_label\">Current View</span>\r\n            </a>\r\n\r\n            <div class=\"horizontalToolbarSeparator visibleLargeView\"></div>\r\n\r\n            <button id=\"firstPage\" class=\"secondaryToolbarButton firstPage\" title=\"Go to First Page\" tabindex=\"56\" data-l10n-id=\"first_page\">\r\n              <span data-l10n-id=\"first_page_label\">Go to First Page</span>\r\n            </button>\r\n            <button id=\"lastPage\" class=\"secondaryToolbarButton lastPage\" title=\"Go to Last Page\" tabindex=\"57\" data-l10n-id=\"last_page\">\r\n              <span data-l10n-id=\"last_page_label\">Go to Last Page</span>\r\n            </button>\r\n\r\n            <div class=\"horizontalToolbarSeparator\"></div>\r\n\r\n            <button id=\"pageRotateCw\" class=\"secondaryToolbarButton rotateCw\" title=\"Rotate Clockwise\" tabindex=\"58\" data-l10n-id=\"page_rotate_cw\">\r\n              <span data-l10n-id=\"page_rotate_cw_label\">Rotate Clockwise</span>\r\n            </button>\r\n            <button id=\"pageRotateCcw\" class=\"secondaryToolbarButton rotateCcw\" title=\"Rotate Counterclockwise\" tabindex=\"59\" data-l10n-id=\"page_rotate_ccw\">\r\n              <span data-l10n-id=\"page_rotate_ccw_label\">Rotate Counterclockwise</span>\r\n            </button>\r\n\r\n            <div class=\"horizontalToolbarSeparator\"></div>\r\n\r\n            <button id=\"cursorSelectTool\" class=\"secondaryToolbarButton selectTool toggled\" title=\"Enable Text Selection Tool\" tabindex=\"60\" data-l10n-id=\"cursor_text_select_tool\">\r\n              <span data-l10n-id=\"cursor_text_select_tool_label\">Text Selection Tool</span>\r\n            </button>\r\n            <button id=\"cursorHandTool\" class=\"secondaryToolbarButton handTool\" title=\"Enable Hand Tool\" tabindex=\"61\" data-l10n-id=\"cursor_hand_tool\">\r\n              <span data-l10n-id=\"cursor_hand_tool_label\">Hand Tool</span>\r\n            </button>\r\n\r\n            <div class=\"horizontalToolbarSeparator\"></div>\r\n\r\n            <button id=\"scrollVertical\" class=\"secondaryToolbarButton scrollModeButtons scrollVertical toggled\" title=\"Use Vertical Scrolling\" tabindex=\"62\" data-l10n-id=\"scroll_vertical\">\r\n              <span data-l10n-id=\"scroll_vertical_label\">Vertical Scrolling</span>\r\n            </button>\r\n            <button id=\"scrollHorizontal\" class=\"secondaryToolbarButton scrollModeButtons scrollHorizontal\" title=\"Use Horizontal Scrolling\" tabindex=\"63\" data-l10n-id=\"scroll_horizontal\">\r\n              <span data-l10n-id=\"scroll_horizontal_label\">Horizontal Scrolling</span>\r\n            </button>\r\n            <button id=\"scrollWrapped\" class=\"secondaryToolbarButton scrollModeButtons scrollWrapped\" title=\"Use Wrapped Scrolling\" tabindex=\"64\" data-l10n-id=\"scroll_wrapped\">\r\n              <span data-l10n-id=\"scroll_wrapped_label\">Wrapped Scrolling</span>\r\n            </button>\r\n\r\n            <div class=\"horizontalToolbarSeparator scrollModeButtons\"></div>\r\n\r\n            <button id=\"spreadNone\" class=\"secondaryToolbarButton spreadModeButtons spreadNone toggled\" title=\"Do not join page spreads\" tabindex=\"65\" data-l10n-id=\"spread_none\">\r\n              <span data-l10n-id=\"spread_none_label\">No Spreads</span>\r\n            </button>\r\n            <button id=\"spreadOdd\" class=\"secondaryToolbarButton spreadModeButtons spreadOdd\" title=\"Join page spreads starting with odd-numbered pages\" tabindex=\"66\" data-l10n-id=\"spread_odd\">\r\n              <span data-l10n-id=\"spread_odd_label\">Odd Spreads</span>\r\n            </button>\r\n            <button id=\"spreadEven\" class=\"secondaryToolbarButton spreadModeButtons spreadEven\" title=\"Join page spreads starting with even-numbered pages\" tabindex=\"67\" data-l10n-id=\"spread_even\">\r\n              <span data-l10n-id=\"spread_even_label\">Even Spreads</span>\r\n            </button>\r\n\r\n            <div class=\"horizontalToolbarSeparator spreadModeButtons\"></div>\r\n\r\n            <button id=\"documentProperties\" class=\"secondaryToolbarButton documentProperties\" title=\"Document Properties…\" tabindex=\"68\" data-l10n-id=\"document_properties\">\r\n              <span data-l10n-id=\"document_properties_label\">Document Properties…</span>\r\n            </button>\r\n          </div>\r\n        </div>  <!-- secondaryToolbar -->\r\n\r\n        <div class=\"toolbar\">\r\n          <div id=\"toolbarContainer\">\r\n            <div id=\"toolbarViewer\">\r\n              <div id=\"toolbarViewerLeft\">\r\n                <button id=\"sidebarToggle\" class=\"toolbarButton\" title=\"Toggle Sidebar\" tabindex=\"11\" data-l10n-id=\"toggle_sidebar\" aria-expanded=\"false\" aria-controls=\"sidebarContainer\">\r\n                  <span data-l10n-id=\"toggle_sidebar_label\">Toggle Sidebar</span>\r\n                </button>\r\n                <div class=\"toolbarButtonSpacer\"></div>\r\n                <button id=\"viewFind\" class=\"toolbarButton\" title=\"Find in Document\" tabindex=\"12\" data-l10n-id=\"findbar\" aria-expanded=\"false\" aria-controls=\"findbar\">\r\n                  <span data-l10n-id=\"findbar_label\">Find</span>\r\n                </button>\r\n                <div class=\"splitToolbarButton hiddenSmallView\">\r\n                  <button class=\"toolbarButton pageUp\" title=\"Previous Page\" id=\"previous\" tabindex=\"13\" data-l10n-id=\"previous\">\r\n                    <span data-l10n-id=\"previous_label\">Previous</span>\r\n                  </button>\r\n                  <div class=\"splitToolbarButtonSeparator\"></div>\r\n                  <button class=\"toolbarButton pageDown\" title=\"Next Page\" id=\"next\" tabindex=\"14\" data-l10n-id=\"next\">\r\n                    <span data-l10n-id=\"next_label\">Next</span>\r\n                  </button>\r\n                </div>\r\n                <input type=\"number\" id=\"pageNumber\" class=\"toolbarField pageNumber\" title=\"Page\" value=\"1\" size=\"4\" min=\"1\" tabindex=\"15\" data-l10n-id=\"page\" autocomplete=\"off\">\r\n                <span id=\"numPages\" class=\"toolbarLabel\"></span>\r\n              </div>\r\n              <div id=\"toolbarViewerRight\">\r\n                <button id=\"presentationMode\" class=\"toolbarButton presentationMode hiddenLargeView\" title=\"Switch to Presentation Mode\" tabindex=\"31\" data-l10n-id=\"presentation_mode\">\r\n                  <span data-l10n-id=\"presentation_mode_label\">Presentation Mode</span>\r\n                </button>\r\n\r\n                <button id=\"openFile\" class=\"toolbarButton openFile hiddenLargeView\" title=\"Open File\" tabindex=\"32\" data-l10n-id=\"open_file\">\r\n                  <span data-l10n-id=\"open_file_label\">Open</span>\r\n                </button>\r\n\r\n                <button id=\"print\" class=\"toolbarButton print hiddenMediumView\" title=\"Print\" tabindex=\"33\" data-l10n-id=\"print\">\r\n                  <span data-l10n-id=\"print_label\">Print</span>\r\n                </button>\r\n\r\n                <button id=\"download\" class=\"toolbarButton download hiddenMediumView\" title=\"Download\" tabindex=\"34\" data-l10n-id=\"download\">\r\n                  <span data-l10n-id=\"download_label\">Download</span>\r\n                </button>\r\n                <a href=\"#\" id=\"viewBookmark\" class=\"toolbarButton bookmark hiddenSmallView\" title=\"Current view (copy or open in new window)\" tabindex=\"35\" data-l10n-id=\"bookmark\">\r\n                  <span data-l10n-id=\"bookmark_label\">Current View</span>\r\n                </a>\r\n\r\n                <div class=\"verticalToolbarSeparator hiddenSmallView\"></div>\r\n\r\n                <button id=\"secondaryToolbarToggle\" class=\"toolbarButton\" title=\"Tools\" tabindex=\"36\" data-l10n-id=\"tools\" aria-expanded=\"false\" aria-controls=\"secondaryToolbar\">\r\n                  <span data-l10n-id=\"tools_label\">Tools</span>\r\n                </button>\r\n              </div>\r\n              <div id=\"toolbarViewerMiddle\">\r\n                <div class=\"splitToolbarButton\">\r\n                  <button id=\"zoomOut\" class=\"toolbarButton zoomOut\" title=\"Zoom Out\" tabindex=\"21\" data-l10n-id=\"zoom_out\">\r\n                    <span data-l10n-id=\"zoom_out_label\">Zoom Out</span>\r\n                  </button>\r\n                  <div class=\"splitToolbarButtonSeparator\"></div>\r\n                  <button id=\"zoomIn\" class=\"toolbarButton zoomIn\" title=\"Zoom In\" tabindex=\"22\" data-l10n-id=\"zoom_in\">\r\n                    <span data-l10n-id=\"zoom_in_label\">Zoom In</span>\r\n                   </button>\r\n                </div>\r\n                <span id=\"scaleSelectContainer\" class=\"dropdownToolbarButton\">\r\n                  <select id=\"scaleSelect\" title=\"Zoom\" tabindex=\"23\" data-l10n-id=\"zoom\">\r\n                    <option id=\"pageAutoOption\" title=\"\" value=\"auto\" selected=\"selected\" data-l10n-id=\"page_scale_auto\">Automatic Zoom</option>\r\n                    <option id=\"pageActualOption\" title=\"\" value=\"page-actual\" data-l10n-id=\"page_scale_actual\">Actual Size</option>\r\n                    <option id=\"pageFitOption\" title=\"\" value=\"page-fit\" data-l10n-id=\"page_scale_fit\">Page Fit</option>\r\n                    <option id=\"pageWidthOption\" title=\"\" value=\"page-width\" data-l10n-id=\"page_scale_width\">Page Width</option>\r\n                    <option id=\"customScaleOption\" title=\"\" value=\"custom\" disabled=\"disabled\" hidden=\"true\"></option>\r\n                    <option title=\"\" value=\"0.5\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 50 }'>50%</option>\r\n                    <option title=\"\" value=\"0.75\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 75 }'>75%</option>\r\n                    <option title=\"\" value=\"1\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 100 }'>100%</option>\r\n                    <option title=\"\" value=\"1.25\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 125 }'>125%</option>\r\n                    <option title=\"\" value=\"1.5\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 150 }'>150%</option>\r\n                    <option title=\"\" value=\"2\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 200 }'>200%</option>\r\n                    <option title=\"\" value=\"3\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 300 }'>300%</option>\r\n                    <option title=\"\" value=\"4\" data-l10n-id=\"page_scale_percent\" data-l10n-args='{ \"scale\": 400 }'>400%</option>\r\n                  </select>\r\n                </span>\r\n              </div>\r\n            </div>\r\n            <div id=\"loadingBar\">\r\n              <div class=\"progress\">\r\n                <div class=\"glimmer\">\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <menu type=\"context\" id=\"viewerContextMenu\">\r\n          <menuitem id=\"contextFirstPage\" label=\"First Page\"\r\n                    data-l10n-id=\"first_page\"></menuitem>\r\n          <menuitem id=\"contextLastPage\" label=\"Last Page\"\r\n                    data-l10n-id=\"last_page\"></menuitem>\r\n          <menuitem id=\"contextPageRotateCw\" label=\"Rotate Clockwise\"\r\n                    data-l10n-id=\"page_rotate_cw\"></menuitem>\r\n          <menuitem id=\"contextPageRotateCcw\" label=\"Rotate Counter-Clockwise\"\r\n                    data-l10n-id=\"page_rotate_ccw\"></menuitem>\r\n        </menu>\r\n\r\n        <div id=\"viewerContainer\" tabindex=\"0\">\r\n          <div id=\"viewer\" class=\"pdfViewer\"></div>\r\n        </div>\r\n\r\n        <div id=\"errorWrapper\" hidden='true'>\r\n          <div id=\"errorMessageLeft\">\r\n            <span id=\"errorMessage\"></span>\r\n            <button id=\"errorShowMore\" data-l10n-id=\"error_more_info\">\r\n              More Information\r\n            </button>\r\n            <button id=\"errorShowLess\" data-l10n-id=\"error_less_info\" hidden='true'>\r\n              Less Information\r\n            </button>\r\n          </div>\r\n          <div id=\"errorMessageRight\">\r\n            <button id=\"errorClose\" data-l10n-id=\"error_close\">\r\n              Close\r\n            </button>\r\n          </div>\r\n          <div class=\"clearBoth\"></div>\r\n          <textarea id=\"errorMoreInfo\" hidden='true' readonly=\"readonly\"></textarea>\r\n        </div>\r\n      </div> <!-- mainContainer -->\r\n\r\n      <div id=\"overlayContainer\" class=\"hidden\">\r\n        <div id=\"passwordOverlay\" class=\"container hidden\">\r\n          <div class=\"dialog\">\r\n            <div class=\"row\">\r\n              <p id=\"passwordText\" data-l10n-id=\"password_label\">Enter the password to open this PDF file:</p>\r\n            </div>\r\n            <div class=\"row\">\r\n              <input type=\"password\" id=\"password\" class=\"toolbarField\">\r\n            </div>\r\n            <div class=\"buttonRow\">\r\n              <button id=\"passwordCancel\" class=\"overlayButton\"><span data-l10n-id=\"password_cancel\">Cancel</span></button>\r\n              <button id=\"passwordSubmit\" class=\"overlayButton\"><span data-l10n-id=\"password_ok\">OK</span></button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div id=\"documentPropertiesOverlay\" class=\"container hidden\">\r\n          <div class=\"dialog\">\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_file_name\">File name:</span> <p id=\"fileNameField\">-</p>\r\n            </div>\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_file_size\">File size:</span> <p id=\"fileSizeField\">-</p>\r\n            </div>\r\n            <div class=\"separator\"></div>\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_title\">Title:</span> <p id=\"titleField\">-</p>\r\n            </div>\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_author\">Author:</span> <p id=\"authorField\">-</p>\r\n            </div>\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_subject\">Subject:</span> <p id=\"subjectField\">-</p>\r\n            </div>\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_keywords\">Keywords:</span> <p id=\"keywordsField\">-</p>\r\n            </div>\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_creation_date\">Creation Date:</span> <p id=\"creationDateField\">-</p>\r\n            </div>\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_modification_date\">Modification Date:</span> <p id=\"modificationDateField\">-</p>\r\n            </div>\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_creator\">Creator:</span> <p id=\"creatorField\">-</p>\r\n            </div>\r\n            <div class=\"separator\"></div>\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_producer\">PDF Producer:</span> <p id=\"producerField\">-</p>\r\n            </div>\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_version\">PDF Version:</span> <p id=\"versionField\">-</p>\r\n            </div>\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_page_count\">Page Count:</span> <p id=\"pageCountField\">-</p>\r\n            </div>\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_page_size\">Page Size:</span> <p id=\"pageSizeField\">-</p>\r\n            </div>\r\n            <div class=\"separator\"></div>\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"document_properties_linearized\">Fast Web View:</span> <p id=\"linearizedField\">-</p>\r\n            </div>\r\n            <div class=\"buttonRow\">\r\n              <button id=\"documentPropertiesClose\" class=\"overlayButton\"><span data-l10n-id=\"document_properties_close\">Close</span></button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div id=\"printServiceOverlay\" class=\"container hidden\">\r\n          <div class=\"dialog\">\r\n            <div class=\"row\">\r\n              <span data-l10n-id=\"print_progress_message\">Preparing document for printing…</span>\r\n            </div>\r\n            <div class=\"row\">\r\n              <progress value=\"0\" max=\"100\"></progress>\r\n              <span data-l10n-id=\"print_progress_percent\" data-l10n-args='{ \"progress\": 0 }' class=\"relative-progress\">0%</span>\r\n            </div>\r\n            <div class=\"buttonRow\">\r\n              <button id=\"printCancel\" class=\"overlayButton\"><span data-l10n-id=\"print_progress_close\">Cancel</span></button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>  <!-- overlayContainer -->\r\n\r\n    </div> <!-- outerContainer -->\r\n    <div id=\"printContainer\"></div>\r\n  </body>\r\n</html>\r\n\r\n"
  },
  {
    "path": "projects/mini/pdf-viewer/wwwroot/js/pdfjs-viewer/viewer.js",
    "content": "/**\r\n * @licstart The following is the entire license notice for the\r\n * Javascript code in this page\r\n *\r\n * Copyright 2020 Mozilla Foundation\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *     http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n *\r\n * @licend The above is the entire license notice for the\r\n * Javascript code in this page\r\n */\r\n\r\n/******/ (() => { // webpackBootstrap\r\n/******/ \t\"use strict\";\r\n/******/ \tvar __webpack_modules__ = ([\r\n/* 0 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nObject.defineProperty(exports, \"PDFViewerApplicationOptions\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _app_options.AppOptions;\r\n  }\r\n}));\r\nObject.defineProperty(exports, \"PDFViewerApplication\", ({\r\n  enumerable: true,\r\n  get: function get() {\r\n    return _app.PDFViewerApplication;\r\n  }\r\n}));\r\n\r\nvar _app_options = __webpack_require__(1);\r\n\r\nvar _app = __webpack_require__(3);\r\n\r\nvar pdfjsVersion = '2.8.57';\r\nvar pdfjsBuild = '3d33313e4';\r\nwindow.PDFViewerApplication = _app.PDFViewerApplication;\r\nwindow.PDFViewerApplicationOptions = _app_options.AppOptions;\r\n;\r\n;\r\n{\r\n  __webpack_require__(37);\r\n}\r\n;\r\n{\r\n  __webpack_require__(43);\r\n}\r\n\r\nfunction getViewerConfiguration() {\r\n  return {\r\n    appContainer: document.body,\r\n    mainContainer: document.getElementById(\"viewerContainer\"),\r\n    viewerContainer: document.getElementById(\"viewer\"),\r\n    eventBus: null,\r\n    toolbar: {\r\n      container: document.getElementById(\"toolbarViewer\"),\r\n      numPages: document.getElementById(\"numPages\"),\r\n      pageNumber: document.getElementById(\"pageNumber\"),\r\n      scaleSelectContainer: document.getElementById(\"scaleSelectContainer\"),\r\n      scaleSelect: document.getElementById(\"scaleSelect\"),\r\n      customScaleOption: document.getElementById(\"customScaleOption\"),\r\n      previous: document.getElementById(\"previous\"),\r\n      next: document.getElementById(\"next\"),\r\n      zoomIn: document.getElementById(\"zoomIn\"),\r\n      zoomOut: document.getElementById(\"zoomOut\"),\r\n      viewFind: document.getElementById(\"viewFind\"),\r\n      openFile: document.getElementById(\"openFile\"),\r\n      print: document.getElementById(\"print\"),\r\n      presentationModeButton: document.getElementById(\"presentationMode\"),\r\n      download: document.getElementById(\"download\"),\r\n      viewBookmark: document.getElementById(\"viewBookmark\")\r\n    },\r\n    secondaryToolbar: {\r\n      toolbar: document.getElementById(\"secondaryToolbar\"),\r\n      toggleButton: document.getElementById(\"secondaryToolbarToggle\"),\r\n      toolbarButtonContainer: document.getElementById(\"secondaryToolbarButtonContainer\"),\r\n      presentationModeButton: document.getElementById(\"secondaryPresentationMode\"),\r\n      openFileButton: document.getElementById(\"secondaryOpenFile\"),\r\n      printButton: document.getElementById(\"secondaryPrint\"),\r\n      downloadButton: document.getElementById(\"secondaryDownload\"),\r\n      viewBookmarkButton: document.getElementById(\"secondaryViewBookmark\"),\r\n      firstPageButton: document.getElementById(\"firstPage\"),\r\n      lastPageButton: document.getElementById(\"lastPage\"),\r\n      pageRotateCwButton: document.getElementById(\"pageRotateCw\"),\r\n      pageRotateCcwButton: document.getElementById(\"pageRotateCcw\"),\r\n      cursorSelectToolButton: document.getElementById(\"cursorSelectTool\"),\r\n      cursorHandToolButton: document.getElementById(\"cursorHandTool\"),\r\n      scrollVerticalButton: document.getElementById(\"scrollVertical\"),\r\n      scrollHorizontalButton: document.getElementById(\"scrollHorizontal\"),\r\n      scrollWrappedButton: document.getElementById(\"scrollWrapped\"),\r\n      spreadNoneButton: document.getElementById(\"spreadNone\"),\r\n      spreadOddButton: document.getElementById(\"spreadOdd\"),\r\n      spreadEvenButton: document.getElementById(\"spreadEven\"),\r\n      documentPropertiesButton: document.getElementById(\"documentProperties\")\r\n    },\r\n    fullscreen: {\r\n      contextFirstPage: document.getElementById(\"contextFirstPage\"),\r\n      contextLastPage: document.getElementById(\"contextLastPage\"),\r\n      contextPageRotateCw: document.getElementById(\"contextPageRotateCw\"),\r\n      contextPageRotateCcw: document.getElementById(\"contextPageRotateCcw\")\r\n    },\r\n    sidebar: {\r\n      outerContainer: document.getElementById(\"outerContainer\"),\r\n      viewerContainer: document.getElementById(\"viewerContainer\"),\r\n      toggleButton: document.getElementById(\"sidebarToggle\"),\r\n      thumbnailButton: document.getElementById(\"viewThumbnail\"),\r\n      outlineButton: document.getElementById(\"viewOutline\"),\r\n      attachmentsButton: document.getElementById(\"viewAttachments\"),\r\n      layersButton: document.getElementById(\"viewLayers\"),\r\n      thumbnailView: document.getElementById(\"thumbnailView\"),\r\n      outlineView: document.getElementById(\"outlineView\"),\r\n      attachmentsView: document.getElementById(\"attachmentsView\"),\r\n      layersView: document.getElementById(\"layersView\"),\r\n      outlineOptionsContainer: document.getElementById(\"outlineOptionsContainer\"),\r\n      currentOutlineItemButton: document.getElementById(\"currentOutlineItem\")\r\n    },\r\n    sidebarResizer: {\r\n      outerContainer: document.getElementById(\"outerContainer\"),\r\n      resizer: document.getElementById(\"sidebarResizer\")\r\n    },\r\n    findBar: {\r\n      bar: document.getElementById(\"findbar\"),\r\n      toggleButton: document.getElementById(\"viewFind\"),\r\n      findField: document.getElementById(\"findInput\"),\r\n      highlightAllCheckbox: document.getElementById(\"findHighlightAll\"),\r\n      caseSensitiveCheckbox: document.getElementById(\"findMatchCase\"),\r\n      entireWordCheckbox: document.getElementById(\"findEntireWord\"),\r\n      findMsg: document.getElementById(\"findMsg\"),\r\n      findResultsCount: document.getElementById(\"findResultsCount\"),\r\n      findPreviousButton: document.getElementById(\"findPrevious\"),\r\n      findNextButton: document.getElementById(\"findNext\")\r\n    },\r\n    passwordOverlay: {\r\n      overlayName: \"passwordOverlay\",\r\n      container: document.getElementById(\"passwordOverlay\"),\r\n      label: document.getElementById(\"passwordText\"),\r\n      input: document.getElementById(\"password\"),\r\n      submitButton: document.getElementById(\"passwordSubmit\"),\r\n      cancelButton: document.getElementById(\"passwordCancel\")\r\n    },\r\n    documentProperties: {\r\n      overlayName: \"documentPropertiesOverlay\",\r\n      container: document.getElementById(\"documentPropertiesOverlay\"),\r\n      closeButton: document.getElementById(\"documentPropertiesClose\"),\r\n      fields: {\r\n        fileName: document.getElementById(\"fileNameField\"),\r\n        fileSize: document.getElementById(\"fileSizeField\"),\r\n        title: document.getElementById(\"titleField\"),\r\n        author: document.getElementById(\"authorField\"),\r\n        subject: document.getElementById(\"subjectField\"),\r\n        keywords: document.getElementById(\"keywordsField\"),\r\n        creationDate: document.getElementById(\"creationDateField\"),\r\n        modificationDate: document.getElementById(\"modificationDateField\"),\r\n        creator: document.getElementById(\"creatorField\"),\r\n        producer: document.getElementById(\"producerField\"),\r\n        version: document.getElementById(\"versionField\"),\r\n        pageCount: document.getElementById(\"pageCountField\"),\r\n        pageSize: document.getElementById(\"pageSizeField\"),\r\n        linearized: document.getElementById(\"linearizedField\")\r\n      }\r\n    },\r\n    errorWrapper: {\r\n      container: document.getElementById(\"errorWrapper\"),\r\n      errorMessage: document.getElementById(\"errorMessage\"),\r\n      closeButton: document.getElementById(\"errorClose\"),\r\n      errorMoreInfo: document.getElementById(\"errorMoreInfo\"),\r\n      moreInfoButton: document.getElementById(\"errorShowMore\"),\r\n      lessInfoButton: document.getElementById(\"errorShowLess\")\r\n    },\r\n    printContainer: document.getElementById(\"printContainer\"),\r\n    openFileInputName: \"fileInput\",\r\n    debuggerScriptPath: \"./debugger.js\"\r\n  };\r\n}\r\n\r\nfunction webViewerLoad() {\r\n  var config = getViewerConfiguration();\r\n  var event = document.createEvent(\"CustomEvent\");\r\n  event.initCustomEvent(\"webviewerloaded\", true, true, {\r\n    source: window\r\n  });\r\n\r\n  try {\r\n    parent.document.dispatchEvent(event);\r\n  } catch (ex) {\r\n    console.error(\"webviewerloaded: \".concat(ex));\r\n    document.dispatchEvent(event);\r\n  }\r\n\r\n  _app.PDFViewerApplication.run(config);\r\n}\r\n\r\nif (document.blockUnblockOnload) {\r\n  document.blockUnblockOnload(true);\r\n}\r\n\r\nif (document.readyState === \"interactive\" || document.readyState === \"complete\") {\r\n  webViewerLoad();\r\n} else {\r\n  document.addEventListener(\"DOMContentLoaded\", webViewerLoad, true);\r\n}\r\n\r\n/***/ }),\r\n/* 1 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.OptionKind = exports.AppOptions = void 0;\r\n\r\nvar _viewer_compatibility = __webpack_require__(2);\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar OptionKind = {\r\n  VIEWER: 0x02,\r\n  API: 0x04,\r\n  WORKER: 0x08,\r\n  PREFERENCE: 0x80\r\n};\r\nexports.OptionKind = OptionKind;\r\nvar defaultOptions = {\r\n  cursorToolOnLoad: {\r\n    value: 0,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  defaultUrl: {\r\n    value: \"compressed.tracemonkey-pldi-09.pdf\",\r\n    kind: OptionKind.VIEWER\r\n  },\r\n  defaultZoomValue: {\r\n    value: \"\",\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  disableHistory: {\r\n    value: false,\r\n    kind: OptionKind.VIEWER\r\n  },\r\n  disablePageLabels: {\r\n    value: false,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  enablePermissions: {\r\n    value: false,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  enablePrintAutoRotate: {\r\n    value: false,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  enableScripting: {\r\n    value: false,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  enableWebGL: {\r\n    value: false,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  externalLinkRel: {\r\n    value: \"noopener noreferrer nofollow\",\r\n    kind: OptionKind.VIEWER\r\n  },\r\n  externalLinkTarget: {\r\n    value: 0,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  historyUpdateUrl: {\r\n    value: false,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  ignoreDestinationZoom: {\r\n    value: false,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  imageResourcesPath: {\r\n    value: \"./images/\",\r\n    kind: OptionKind.VIEWER\r\n  },\r\n  maxCanvasPixels: {\r\n    value: 16777216,\r\n    compatibility: _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels,\r\n    kind: OptionKind.VIEWER\r\n  },\r\n  pdfBugEnabled: {\r\n    value: false,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  printResolution: {\r\n    value: 150,\r\n    kind: OptionKind.VIEWER\r\n  },\r\n  renderer: {\r\n    value: \"canvas\",\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  renderInteractiveForms: {\r\n    value: true,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  sidebarViewOnLoad: {\r\n    value: -1,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  scrollModeOnLoad: {\r\n    value: -1,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  spreadModeOnLoad: {\r\n    value: -1,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  textLayerMode: {\r\n    value: 1,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  useOnlyCssZoom: {\r\n    value: false,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  viewerCssTheme: {\r\n    value: 0,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  viewOnLoad: {\r\n    value: 0,\r\n    kind: OptionKind.VIEWER + OptionKind.PREFERENCE\r\n  },\r\n  cMapPacked: {\r\n    value: true,\r\n    kind: OptionKind.API\r\n  },\r\n  cMapUrl: {\r\n    value: \"../web/cmaps/\",\r\n    kind: OptionKind.API\r\n  },\r\n  disableAutoFetch: {\r\n    value: false,\r\n    kind: OptionKind.API + OptionKind.PREFERENCE\r\n  },\r\n  disableFontFace: {\r\n    value: false,\r\n    kind: OptionKind.API + OptionKind.PREFERENCE\r\n  },\r\n  disableRange: {\r\n    value: false,\r\n    kind: OptionKind.API + OptionKind.PREFERENCE\r\n  },\r\n  disableStream: {\r\n    value: false,\r\n    kind: OptionKind.API + OptionKind.PREFERENCE\r\n  },\r\n  docBaseUrl: {\r\n    value: \"\",\r\n    kind: OptionKind.API\r\n  },\r\n  fontExtraProperties: {\r\n    value: false,\r\n    kind: OptionKind.API\r\n  },\r\n  isEvalSupported: {\r\n    value: true,\r\n    kind: OptionKind.API\r\n  },\r\n  maxImageSize: {\r\n    value: -1,\r\n    kind: OptionKind.API\r\n  },\r\n  pdfBug: {\r\n    value: false,\r\n    kind: OptionKind.API\r\n  },\r\n  verbosity: {\r\n    value: 1,\r\n    kind: OptionKind.API\r\n  },\r\n  workerPort: {\r\n    value: null,\r\n    kind: OptionKind.WORKER\r\n  },\r\n  workerSrc: {\r\n    value: \"../build/pdf.worker.js\",\r\n    kind: OptionKind.WORKER\r\n  }\r\n};\r\n{\r\n  defaultOptions.disablePreferences = {\r\n    value: false,\r\n    kind: OptionKind.VIEWER\r\n  };\r\n  defaultOptions.locale = {\r\n    value: typeof navigator !== \"undefined\" ? navigator.language : \"en-US\",\r\n    kind: OptionKind.VIEWER\r\n  };\r\n  defaultOptions.sandboxBundleSrc = {\r\n    value: \"../build/pdf.sandbox.js\",\r\n    kind: OptionKind.VIEWER\r\n  };\r\n}\r\nvar userOptions = Object.create(null);\r\n\r\nvar AppOptions = /*#__PURE__*/function () {\r\n  function AppOptions() {\r\n    _classCallCheck(this, AppOptions);\r\n\r\n    throw new Error(\"Cannot initialize AppOptions.\");\r\n  }\r\n\r\n  _createClass(AppOptions, null, [{\r\n    key: \"get\",\r\n    value: function get(name) {\r\n      var userOption = userOptions[name];\r\n\r\n      if (userOption !== undefined) {\r\n        return userOption;\r\n      }\r\n\r\n      var defaultOption = defaultOptions[name];\r\n\r\n      if (defaultOption !== undefined) {\r\n        return defaultOption.compatibility || defaultOption.value;\r\n      }\r\n\r\n      return undefined;\r\n    }\r\n  }, {\r\n    key: \"getAll\",\r\n    value: function getAll() {\r\n      var kind = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\r\n      var options = Object.create(null);\r\n\r\n      for (var name in defaultOptions) {\r\n        var defaultOption = defaultOptions[name];\r\n\r\n        if (kind) {\r\n          if ((kind & defaultOption.kind) === 0) {\r\n            continue;\r\n          }\r\n\r\n          if (kind === OptionKind.PREFERENCE) {\r\n            var value = defaultOption.value,\r\n                valueType = _typeof(value);\r\n\r\n            if (valueType === \"boolean\" || valueType === \"string\" || valueType === \"number\" && Number.isInteger(value)) {\r\n              options[name] = value;\r\n              continue;\r\n            }\r\n\r\n            throw new Error(\"Invalid type for preference: \".concat(name));\r\n          }\r\n        }\r\n\r\n        var userOption = userOptions[name];\r\n        options[name] = userOption !== undefined ? userOption : defaultOption.compatibility || defaultOption.value;\r\n      }\r\n\r\n      return options;\r\n    }\r\n  }, {\r\n    key: \"set\",\r\n    value: function set(name, value) {\r\n      userOptions[name] = value;\r\n    }\r\n  }, {\r\n    key: \"setAll\",\r\n    value: function setAll(options) {\r\n      for (var name in options) {\r\n        userOptions[name] = options[name];\r\n      }\r\n    }\r\n  }, {\r\n    key: \"remove\",\r\n    value: function remove(name) {\r\n      delete userOptions[name];\r\n    }\r\n  }]);\r\n\r\n  return AppOptions;\r\n}();\r\n\r\nexports.AppOptions = AppOptions;\r\n\r\n/***/ }),\r\n/* 2 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.viewerCompatibilityParams = void 0;\r\nvar compatibilityParams = Object.create(null);\r\n{\r\n  var userAgent = typeof navigator !== \"undefined\" && navigator.userAgent || \"\";\r\n  var platform = typeof navigator !== \"undefined\" && navigator.platform || \"\";\r\n  var maxTouchPoints = typeof navigator !== \"undefined\" && navigator.maxTouchPoints || 1;\r\n  var isAndroid = /Android/.test(userAgent);\r\n  var isIOS = /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === \"MacIntel\" && maxTouchPoints > 1;\r\n  var isIOSChrome = /CriOS/.test(userAgent);\r\n\r\n  (function checkOnBlobSupport() {\r\n    if (isIOSChrome) {\r\n      compatibilityParams.disableCreateObjectURL = true;\r\n    }\r\n  })();\r\n\r\n  (function checkCanvasSizeLimitation() {\r\n    if (isIOS || isAndroid) {\r\n      compatibilityParams.maxCanvasPixels = 5242880;\r\n    }\r\n  })();\r\n}\r\nvar viewerCompatibilityParams = Object.freeze(compatibilityParams);\r\nexports.viewerCompatibilityParams = viewerCompatibilityParams;\r\n\r\n/***/ }),\r\n/* 3 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFViewerApplication = exports.PDFPrintServiceFactory = exports.DefaultExternalServices = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nvar _app_options = __webpack_require__(1);\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nvar _pdf_cursor_tools = __webpack_require__(8);\r\n\r\nvar _pdf_rendering_queue = __webpack_require__(10);\r\n\r\nvar _overlay_manager = __webpack_require__(11);\r\n\r\nvar _password_prompt = __webpack_require__(12);\r\n\r\nvar _pdf_attachment_viewer = __webpack_require__(13);\r\n\r\nvar _pdf_document_properties = __webpack_require__(15);\r\n\r\nvar _pdf_find_bar = __webpack_require__(16);\r\n\r\nvar _pdf_find_controller = __webpack_require__(17);\r\n\r\nvar _pdf_history = __webpack_require__(19);\r\n\r\nvar _pdf_layer_viewer = __webpack_require__(20);\r\n\r\nvar _pdf_link_service = __webpack_require__(21);\r\n\r\nvar _pdf_outline_viewer = __webpack_require__(22);\r\n\r\nvar _pdf_presentation_mode = __webpack_require__(23);\r\n\r\nvar _pdf_sidebar = __webpack_require__(24);\r\n\r\nvar _pdf_sidebar_resizer = __webpack_require__(25);\r\n\r\nvar _pdf_thumbnail_viewer = __webpack_require__(26);\r\n\r\nvar _pdf_viewer = __webpack_require__(28);\r\n\r\nvar _secondary_toolbar = __webpack_require__(33);\r\n\r\nvar _toolbar = __webpack_require__(35);\r\n\r\nvar _viewer_compatibility = __webpack_require__(2);\r\n\r\nvar _view_history = __webpack_require__(36);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\r\n\r\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\r\n\r\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar DEFAULT_SCALE_DELTA = 1.1;\r\nvar DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000;\r\nvar FORCE_PAGES_LOADED_TIMEOUT = 10000;\r\nvar WHEEL_ZOOM_DISABLED_TIMEOUT = 1000;\r\nvar ENABLE_PERMISSIONS_CLASS = \"enablePermissions\";\r\nvar ViewOnLoad = {\r\n  UNKNOWN: -1,\r\n  PREVIOUS: 0,\r\n  INITIAL: 1\r\n};\r\nvar ViewerCssTheme = {\r\n  AUTOMATIC: 0,\r\n  LIGHT: 1,\r\n  DARK: 2\r\n};\r\nvar KNOWN_VERSIONS = [\"1.0\", \"1.1\", \"1.2\", \"1.3\", \"1.4\", \"1.5\", \"1.6\", \"1.7\", \"1.8\", \"1.9\", \"2.0\", \"2.1\", \"2.2\", \"2.3\"];\r\nvar KNOWN_GENERATORS = [\"acrobat distiller\", \"acrobat pdfwriter\", \"adobe livecycle\", \"adobe pdf library\", \"adobe photoshop\", \"ghostscript\", \"tcpdf\", \"cairo\", \"dvipdfm\", \"dvips\", \"pdftex\", \"pdfkit\", \"itext\", \"prince\", \"quarkxpress\", \"mac os x\", \"microsoft\", \"openoffice\", \"oracle\", \"luradocument\", \"pdf-xchange\", \"antenna house\", \"aspose.cells\", \"fpdf\"];\r\n\r\nvar DefaultExternalServices = /*#__PURE__*/function () {\r\n  function DefaultExternalServices() {\r\n    _classCallCheck(this, DefaultExternalServices);\r\n\r\n    throw new Error(\"Cannot initialize DefaultExternalServices.\");\r\n  }\r\n\r\n  _createClass(DefaultExternalServices, null, [{\r\n    key: \"updateFindControlState\",\r\n    value: function updateFindControlState(data) {}\r\n  }, {\r\n    key: \"updateFindMatchesCount\",\r\n    value: function updateFindMatchesCount(data) {}\r\n  }, {\r\n    key: \"initPassiveLoading\",\r\n    value: function initPassiveLoading(callbacks) {}\r\n  }, {\r\n    key: \"fallback\",\r\n    value: function () {\r\n      var _fallback = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(data) {\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee);\r\n      }));\r\n\r\n      function fallback(_x) {\r\n        return _fallback.apply(this, arguments);\r\n      }\r\n\r\n      return fallback;\r\n    }()\r\n  }, {\r\n    key: \"reportTelemetry\",\r\n    value: function reportTelemetry(data) {}\r\n  }, {\r\n    key: \"createDownloadManager\",\r\n    value: function createDownloadManager(options) {\r\n      throw new Error(\"Not implemented: createDownloadManager\");\r\n    }\r\n  }, {\r\n    key: \"createPreferences\",\r\n    value: function createPreferences() {\r\n      throw new Error(\"Not implemented: createPreferences\");\r\n    }\r\n  }, {\r\n    key: \"createL10n\",\r\n    value: function createL10n(options) {\r\n      throw new Error(\"Not implemented: createL10n\");\r\n    }\r\n  }, {\r\n    key: \"createScripting\",\r\n    value: function createScripting(options) {\r\n      throw new Error(\"Not implemented: createScripting\");\r\n    }\r\n  }, {\r\n    key: \"supportsIntegratedFind\",\r\n    get: function get() {\r\n      return (0, _pdfjsLib.shadow)(this, \"supportsIntegratedFind\", false);\r\n    }\r\n  }, {\r\n    key: \"supportsDocumentFonts\",\r\n    get: function get() {\r\n      return (0, _pdfjsLib.shadow)(this, \"supportsDocumentFonts\", true);\r\n    }\r\n  }, {\r\n    key: \"supportedMouseWheelZoomModifierKeys\",\r\n    get: function get() {\r\n      return (0, _pdfjsLib.shadow)(this, \"supportedMouseWheelZoomModifierKeys\", {\r\n        ctrlKey: true,\r\n        metaKey: true\r\n      });\r\n    }\r\n  }, {\r\n    key: \"isInAutomation\",\r\n    get: function get() {\r\n      return (0, _pdfjsLib.shadow)(this, \"isInAutomation\", false);\r\n    }\r\n  }]);\r\n\r\n  return DefaultExternalServices;\r\n}();\r\n\r\nexports.DefaultExternalServices = DefaultExternalServices;\r\nvar PDFViewerApplication = {\r\n  initialBookmark: document.location.hash.substring(1),\r\n  _initializedCapability: (0, _pdfjsLib.createPromiseCapability)(),\r\n  fellback: false,\r\n  appConfig: null,\r\n  pdfDocument: null,\r\n  pdfLoadingTask: null,\r\n  printService: null,\r\n  pdfViewer: null,\r\n  pdfThumbnailViewer: null,\r\n  pdfRenderingQueue: null,\r\n  pdfPresentationMode: null,\r\n  pdfDocumentProperties: null,\r\n  pdfLinkService: null,\r\n  pdfHistory: null,\r\n  pdfSidebar: null,\r\n  pdfSidebarResizer: null,\r\n  pdfOutlineViewer: null,\r\n  pdfAttachmentViewer: null,\r\n  pdfLayerViewer: null,\r\n  pdfCursorTools: null,\r\n  store: null,\r\n  downloadManager: null,\r\n  overlayManager: null,\r\n  preferences: null,\r\n  toolbar: null,\r\n  secondaryToolbar: null,\r\n  eventBus: null,\r\n  l10n: null,\r\n  isInitialViewSet: false,\r\n  downloadComplete: false,\r\n  isViewerEmbedded: window.parent !== window,\r\n  url: \"\",\r\n  baseUrl: \"\",\r\n  externalServices: DefaultExternalServices,\r\n  _boundEvents: Object.create(null),\r\n  documentInfo: null,\r\n  metadata: null,\r\n  _contentDispositionFilename: null,\r\n  _contentLength: null,\r\n  triggerDelayedFallback: null,\r\n  _saveInProgress: false,\r\n  _wheelUnusedTicks: 0,\r\n  _idleCallbacks: new Set(),\r\n  _scriptingInstance: null,\r\n  _mouseState: Object.create(null),\r\n  initialize: function initialize(appConfig) {\r\n    var _this = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n      var appContainer;\r\n      return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n        while (1) {\r\n          switch (_context2.prev = _context2.next) {\r\n            case 0:\r\n              _this.preferences = _this.externalServices.createPreferences();\r\n              _this.appConfig = appConfig;\r\n              _context2.next = 4;\r\n              return _this._readPreferences();\r\n\r\n            case 4:\r\n              _context2.next = 6;\r\n              return _this._parseHashParameters();\r\n\r\n            case 6:\r\n              _this._forceCssTheme();\r\n\r\n              _context2.next = 9;\r\n              return _this._initializeL10n();\r\n\r\n            case 9:\r\n              if (_this.isViewerEmbedded && _app_options.AppOptions.get(\"externalLinkTarget\") === _pdfjsLib.LinkTarget.NONE) {\r\n                _app_options.AppOptions.set(\"externalLinkTarget\", _pdfjsLib.LinkTarget.TOP);\r\n              }\r\n\r\n              _context2.next = 12;\r\n              return _this._initializeViewerComponents();\r\n\r\n            case 12:\r\n              _this.bindEvents();\r\n\r\n              _this.bindWindowEvents();\r\n\r\n              appContainer = appConfig.appContainer || document.documentElement;\r\n\r\n              _this.l10n.translate(appContainer).then(function () {\r\n                _this.eventBus.dispatch(\"localized\", {\r\n                  source: _this\r\n                });\r\n              });\r\n\r\n              _this._initializedCapability.resolve();\r\n\r\n            case 17:\r\n            case \"end\":\r\n              return _context2.stop();\r\n          }\r\n        }\r\n      }, _callee2);\r\n    }))();\r\n  },\r\n  _readPreferences: function _readPreferences() {\r\n    var _this2 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3() {\r\n      return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\r\n        while (1) {\r\n          switch (_context3.prev = _context3.next) {\r\n            case 0:\r\n              if (!_app_options.AppOptions.get(\"disablePreferences\")) {\r\n                _context3.next = 2;\r\n                break;\r\n              }\r\n\r\n              return _context3.abrupt(\"return\");\r\n\r\n            case 2:\r\n              _context3.prev = 2;\r\n              _context3.t0 = _app_options.AppOptions;\r\n              _context3.next = 6;\r\n              return _this2.preferences.getAll();\r\n\r\n            case 6:\r\n              _context3.t1 = _context3.sent;\r\n\r\n              _context3.t0.setAll.call(_context3.t0, _context3.t1);\r\n\r\n              _context3.next = 13;\r\n              break;\r\n\r\n            case 10:\r\n              _context3.prev = 10;\r\n              _context3.t2 = _context3[\"catch\"](2);\r\n              console.error(\"_readPreferences: \\\"\".concat(_context3.t2 === null || _context3.t2 === void 0 ? void 0 : _context3.t2.message, \"\\\".\"));\r\n\r\n            case 13:\r\n            case \"end\":\r\n              return _context3.stop();\r\n          }\r\n        }\r\n      }, _callee3, null, [[2, 10]]);\r\n    }))();\r\n  },\r\n  _parseHashParameters: function _parseHashParameters() {\r\n    var _this3 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4() {\r\n      var hash, hashParams, waitOn, viewer, enabled;\r\n      return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\r\n        while (1) {\r\n          switch (_context4.prev = _context4.next) {\r\n            case 0:\r\n              if (_app_options.AppOptions.get(\"pdfBugEnabled\")) {\r\n                _context4.next = 2;\r\n                break;\r\n              }\r\n\r\n              return _context4.abrupt(\"return\", undefined);\r\n\r\n            case 2:\r\n              hash = document.location.hash.substring(1);\r\n\r\n              if (hash) {\r\n                _context4.next = 5;\r\n                break;\r\n              }\r\n\r\n              return _context4.abrupt(\"return\", undefined);\r\n\r\n            case 5:\r\n              hashParams = (0, _ui_utils.parseQueryString)(hash), waitOn = [];\r\n\r\n              if (\"disableworker\" in hashParams && hashParams.disableworker === \"true\") {\r\n                waitOn.push(loadFakeWorker());\r\n              }\r\n\r\n              if (\"disablerange\" in hashParams) {\r\n                _app_options.AppOptions.set(\"disableRange\", hashParams.disablerange === \"true\");\r\n              }\r\n\r\n              if (\"disablestream\" in hashParams) {\r\n                _app_options.AppOptions.set(\"disableStream\", hashParams.disablestream === \"true\");\r\n              }\r\n\r\n              if (\"disableautofetch\" in hashParams) {\r\n                _app_options.AppOptions.set(\"disableAutoFetch\", hashParams.disableautofetch === \"true\");\r\n              }\r\n\r\n              if (\"disablefontface\" in hashParams) {\r\n                _app_options.AppOptions.set(\"disableFontFace\", hashParams.disablefontface === \"true\");\r\n              }\r\n\r\n              if (\"disablehistory\" in hashParams) {\r\n                _app_options.AppOptions.set(\"disableHistory\", hashParams.disablehistory === \"true\");\r\n              }\r\n\r\n              if (\"webgl\" in hashParams) {\r\n                _app_options.AppOptions.set(\"enableWebGL\", hashParams.webgl === \"true\");\r\n              }\r\n\r\n              if (\"verbosity\" in hashParams) {\r\n                _app_options.AppOptions.set(\"verbosity\", hashParams.verbosity | 0);\r\n              }\r\n\r\n              if (!(\"textlayer\" in hashParams)) {\r\n                _context4.next = 23;\r\n                break;\r\n              }\r\n\r\n              _context4.t0 = hashParams.textlayer;\r\n              _context4.next = _context4.t0 === \"off\" ? 18 : _context4.t0 === \"visible\" ? 20 : _context4.t0 === \"shadow\" ? 20 : _context4.t0 === \"hover\" ? 20 : 23;\r\n              break;\r\n\r\n            case 18:\r\n              _app_options.AppOptions.set(\"textLayerMode\", _ui_utils.TextLayerMode.DISABLE);\r\n\r\n              return _context4.abrupt(\"break\", 23);\r\n\r\n            case 20:\r\n              viewer = _this3.appConfig.viewerContainer;\r\n              viewer.classList.add(\"textLayer-\" + hashParams.textlayer);\r\n              return _context4.abrupt(\"break\", 23);\r\n\r\n            case 23:\r\n              if (\"pdfbug\" in hashParams) {\r\n                _app_options.AppOptions.set(\"pdfBug\", true);\r\n\r\n                _app_options.AppOptions.set(\"fontExtraProperties\", true);\r\n\r\n                enabled = hashParams.pdfbug.split(\",\");\r\n                waitOn.push(loadAndEnablePDFBug(enabled));\r\n              }\r\n\r\n              if (\"locale\" in hashParams) {\r\n                _app_options.AppOptions.set(\"locale\", hashParams.locale);\r\n              }\r\n\r\n              if (!(waitOn.length === 0)) {\r\n                _context4.next = 27;\r\n                break;\r\n              }\r\n\r\n              return _context4.abrupt(\"return\", undefined);\r\n\r\n            case 27:\r\n              return _context4.abrupt(\"return\", Promise.all(waitOn)[\"catch\"](function (reason) {\r\n                console.error(\"_parseHashParameters: \\\"\".concat(reason.message, \"\\\".\"));\r\n              }));\r\n\r\n            case 28:\r\n            case \"end\":\r\n              return _context4.stop();\r\n          }\r\n        }\r\n      }, _callee4);\r\n    }))();\r\n  },\r\n  _initializeL10n: function _initializeL10n() {\r\n    var _this4 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee5() {\r\n      var dir;\r\n      return _regenerator[\"default\"].wrap(function _callee5$(_context5) {\r\n        while (1) {\r\n          switch (_context5.prev = _context5.next) {\r\n            case 0:\r\n              _this4.l10n = _this4.externalServices.createL10n({\r\n                locale: _app_options.AppOptions.get(\"locale\")\r\n              });\r\n              _context5.next = 3;\r\n              return _this4.l10n.getDirection();\r\n\r\n            case 3:\r\n              dir = _context5.sent;\r\n              document.getElementsByTagName(\"html\")[0].dir = dir;\r\n\r\n            case 5:\r\n            case \"end\":\r\n              return _context5.stop();\r\n          }\r\n        }\r\n      }, _callee5);\r\n    }))();\r\n  },\r\n  _forceCssTheme: function _forceCssTheme() {\r\n    var cssTheme = _app_options.AppOptions.get(\"viewerCssTheme\");\r\n\r\n    if (cssTheme === ViewerCssTheme.AUTOMATIC || !Object.values(ViewerCssTheme).includes(cssTheme)) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      var styleSheet = document.styleSheets[0];\r\n      var cssRules = (styleSheet === null || styleSheet === void 0 ? void 0 : styleSheet.cssRules) || [];\r\n\r\n      for (var i = 0, ii = cssRules.length; i < ii; i++) {\r\n        var _rule$media;\r\n\r\n        var rule = cssRules[i];\r\n\r\n        if (rule instanceof CSSMediaRule && ((_rule$media = rule.media) === null || _rule$media === void 0 ? void 0 : _rule$media[0]) === \"(prefers-color-scheme: dark)\") {\r\n          if (cssTheme === ViewerCssTheme.LIGHT) {\r\n            styleSheet.deleteRule(i);\r\n            return;\r\n          }\r\n\r\n          var darkRules = /^@media \\(prefers-color-scheme: dark\\) {\\n\\s*([\\w\\s-.,:;/\\\\{}()]+)\\n}$/.exec(rule.cssText);\r\n\r\n          if (darkRules !== null && darkRules !== void 0 && darkRules[1]) {\r\n            styleSheet.deleteRule(i);\r\n            styleSheet.insertRule(darkRules[1], i);\r\n          }\r\n\r\n          return;\r\n        }\r\n      }\r\n    } catch (reason) {\r\n      console.error(\"_forceCssTheme: \\\"\".concat(reason === null || reason === void 0 ? void 0 : reason.message, \"\\\".\"));\r\n    }\r\n  },\r\n  _initializeViewerComponents: function _initializeViewerComponents() {\r\n    var _this5 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee6() {\r\n      var appConfig, eventBus, pdfRenderingQueue, pdfLinkService, downloadManager, findController, container, viewer;\r\n      return _regenerator[\"default\"].wrap(function _callee6$(_context6) {\r\n        while (1) {\r\n          switch (_context6.prev = _context6.next) {\r\n            case 0:\r\n              appConfig = _this5.appConfig;\r\n              eventBus = appConfig.eventBus || new _ui_utils.EventBus({\r\n                isInAutomation: _this5.externalServices.isInAutomation\r\n              });\r\n              _this5.eventBus = eventBus;\r\n              _this5.overlayManager = new _overlay_manager.OverlayManager();\r\n              pdfRenderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();\r\n              pdfRenderingQueue.onIdle = _this5.cleanup.bind(_this5);\r\n              _this5.pdfRenderingQueue = pdfRenderingQueue;\r\n              pdfLinkService = new _pdf_link_service.PDFLinkService({\r\n                eventBus: eventBus,\r\n                externalLinkTarget: _app_options.AppOptions.get(\"externalLinkTarget\"),\r\n                externalLinkRel: _app_options.AppOptions.get(\"externalLinkRel\"),\r\n                ignoreDestinationZoom: _app_options.AppOptions.get(\"ignoreDestinationZoom\")\r\n              });\r\n              _this5.pdfLinkService = pdfLinkService;\r\n              downloadManager = _this5.externalServices.createDownloadManager();\r\n              _this5.downloadManager = downloadManager;\r\n              findController = new _pdf_find_controller.PDFFindController({\r\n                linkService: pdfLinkService,\r\n                eventBus: eventBus\r\n              });\r\n              _this5.findController = findController;\r\n              container = appConfig.mainContainer;\r\n              viewer = appConfig.viewerContainer;\r\n              _this5.pdfViewer = new _pdf_viewer.PDFViewer({\r\n                container: container,\r\n                viewer: viewer,\r\n                eventBus: eventBus,\r\n                renderingQueue: pdfRenderingQueue,\r\n                linkService: pdfLinkService,\r\n                downloadManager: downloadManager,\r\n                findController: findController,\r\n                renderer: _app_options.AppOptions.get(\"renderer\"),\r\n                enableWebGL: _app_options.AppOptions.get(\"enableWebGL\"),\r\n                l10n: _this5.l10n,\r\n                textLayerMode: _app_options.AppOptions.get(\"textLayerMode\"),\r\n                imageResourcesPath: _app_options.AppOptions.get(\"imageResourcesPath\"),\r\n                renderInteractiveForms: _app_options.AppOptions.get(\"renderInteractiveForms\"),\r\n                enablePrintAutoRotate: _app_options.AppOptions.get(\"enablePrintAutoRotate\"),\r\n                useOnlyCssZoom: _app_options.AppOptions.get(\"useOnlyCssZoom\"),\r\n                maxCanvasPixels: _app_options.AppOptions.get(\"maxCanvasPixels\"),\r\n                enableScripting: _app_options.AppOptions.get(\"enableScripting\"),\r\n                mouseState: _this5._mouseState\r\n              });\r\n              pdfRenderingQueue.setViewer(_this5.pdfViewer);\r\n              pdfLinkService.setViewer(_this5.pdfViewer);\r\n              _this5.pdfThumbnailViewer = new _pdf_thumbnail_viewer.PDFThumbnailViewer({\r\n                container: appConfig.sidebar.thumbnailView,\r\n                eventBus: eventBus,\r\n                renderingQueue: pdfRenderingQueue,\r\n                linkService: pdfLinkService,\r\n                l10n: _this5.l10n\r\n              });\r\n              pdfRenderingQueue.setThumbnailViewer(_this5.pdfThumbnailViewer);\r\n              _this5.pdfHistory = new _pdf_history.PDFHistory({\r\n                linkService: pdfLinkService,\r\n                eventBus: eventBus\r\n              });\r\n              pdfLinkService.setHistory(_this5.pdfHistory);\r\n\r\n              if (!_this5.supportsIntegratedFind) {\r\n                _this5.findBar = new _pdf_find_bar.PDFFindBar(appConfig.findBar, eventBus, _this5.l10n);\r\n              }\r\n\r\n              _this5.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties, _this5.overlayManager, eventBus, _this5.l10n);\r\n              _this5.pdfCursorTools = new _pdf_cursor_tools.PDFCursorTools({\r\n                container: container,\r\n                eventBus: eventBus,\r\n                cursorToolOnLoad: _app_options.AppOptions.get(\"cursorToolOnLoad\")\r\n              });\r\n              _this5.toolbar = new _toolbar.Toolbar(appConfig.toolbar, eventBus, _this5.l10n);\r\n              _this5.secondaryToolbar = new _secondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus);\r\n\r\n              if (_this5.supportsFullscreen) {\r\n                _this5.pdfPresentationMode = new _pdf_presentation_mode.PDFPresentationMode({\r\n                  container: container,\r\n                  pdfViewer: _this5.pdfViewer,\r\n                  eventBus: eventBus,\r\n                  contextMenuItems: appConfig.fullscreen\r\n                });\r\n              }\r\n\r\n              _this5.passwordPrompt = new _password_prompt.PasswordPrompt(appConfig.passwordOverlay, _this5.overlayManager, _this5.l10n, _this5.isViewerEmbedded);\r\n              _this5.pdfOutlineViewer = new _pdf_outline_viewer.PDFOutlineViewer({\r\n                container: appConfig.sidebar.outlineView,\r\n                eventBus: eventBus,\r\n                linkService: pdfLinkService\r\n              });\r\n              _this5.pdfAttachmentViewer = new _pdf_attachment_viewer.PDFAttachmentViewer({\r\n                container: appConfig.sidebar.attachmentsView,\r\n                eventBus: eventBus,\r\n                downloadManager: downloadManager\r\n              });\r\n              _this5.pdfLayerViewer = new _pdf_layer_viewer.PDFLayerViewer({\r\n                container: appConfig.sidebar.layersView,\r\n                eventBus: eventBus,\r\n                l10n: _this5.l10n\r\n              });\r\n              _this5.pdfSidebar = new _pdf_sidebar.PDFSidebar({\r\n                elements: appConfig.sidebar,\r\n                pdfViewer: _this5.pdfViewer,\r\n                pdfThumbnailViewer: _this5.pdfThumbnailViewer,\r\n                eventBus: eventBus,\r\n                l10n: _this5.l10n\r\n              });\r\n              _this5.pdfSidebar.onToggled = _this5.forceRendering.bind(_this5);\r\n              _this5.pdfSidebarResizer = new _pdf_sidebar_resizer.PDFSidebarResizer(appConfig.sidebarResizer, eventBus, _this5.l10n);\r\n\r\n            case 35:\r\n            case \"end\":\r\n              return _context6.stop();\r\n          }\r\n        }\r\n      }, _callee6);\r\n    }))();\r\n  },\r\n  run: function run(config) {\r\n    this.initialize(config).then(webViewerInitialized);\r\n  },\r\n\r\n  get initialized() {\r\n    return this._initializedCapability.settled;\r\n  },\r\n\r\n  get initializedPromise() {\r\n    return this._initializedCapability.promise;\r\n  },\r\n\r\n  zoomIn: function zoomIn(ticks) {\r\n    if (this.pdfViewer.isInPresentationMode) {\r\n      return;\r\n    }\r\n\r\n    var newScale = this.pdfViewer.currentScale;\r\n\r\n    do {\r\n      newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2);\r\n      newScale = Math.ceil(newScale * 10) / 10;\r\n      newScale = Math.min(_ui_utils.MAX_SCALE, newScale);\r\n    } while (--ticks > 0 && newScale < _ui_utils.MAX_SCALE);\r\n\r\n    this.pdfViewer.currentScaleValue = newScale;\r\n  },\r\n  zoomOut: function zoomOut(ticks) {\r\n    if (this.pdfViewer.isInPresentationMode) {\r\n      return;\r\n    }\r\n\r\n    var newScale = this.pdfViewer.currentScale;\r\n\r\n    do {\r\n      newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2);\r\n      newScale = Math.floor(newScale * 10) / 10;\r\n      newScale = Math.max(_ui_utils.MIN_SCALE, newScale);\r\n    } while (--ticks > 0 && newScale > _ui_utils.MIN_SCALE);\r\n\r\n    this.pdfViewer.currentScaleValue = newScale;\r\n  },\r\n  zoomReset: function zoomReset() {\r\n    if (this.pdfViewer.isInPresentationMode) {\r\n      return;\r\n    }\r\n\r\n    this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;\r\n  },\r\n\r\n  get pagesCount() {\r\n    return this.pdfDocument ? this.pdfDocument.numPages : 0;\r\n  },\r\n\r\n  get page() {\r\n    return this.pdfViewer.currentPageNumber;\r\n  },\r\n\r\n  set page(val) {\r\n    this.pdfViewer.currentPageNumber = val;\r\n  },\r\n\r\n  get supportsPrinting() {\r\n    return PDFPrintServiceFactory.instance.supportsPrinting;\r\n  },\r\n\r\n  get supportsFullscreen() {\r\n    var doc = document.documentElement;\r\n    var support = !!(doc.requestFullscreen || doc.mozRequestFullScreen || doc.webkitRequestFullScreen);\r\n\r\n    if (document.fullscreenEnabled === false || document.mozFullScreenEnabled === false || document.webkitFullscreenEnabled === false) {\r\n      support = false;\r\n    }\r\n\r\n    return (0, _pdfjsLib.shadow)(this, \"supportsFullscreen\", support);\r\n  },\r\n\r\n  get supportsIntegratedFind() {\r\n    return this.externalServices.supportsIntegratedFind;\r\n  },\r\n\r\n  get supportsDocumentFonts() {\r\n    return this.externalServices.supportsDocumentFonts;\r\n  },\r\n\r\n  get loadingBar() {\r\n    var bar = new _ui_utils.ProgressBar(\"#loadingBar\");\r\n    return (0, _pdfjsLib.shadow)(this, \"loadingBar\", bar);\r\n  },\r\n\r\n  get supportedMouseWheelZoomModifierKeys() {\r\n    return this.externalServices.supportedMouseWheelZoomModifierKeys;\r\n  },\r\n\r\n  initPassiveLoading: function initPassiveLoading() {\r\n    throw new Error(\"Not implemented: initPassiveLoading\");\r\n  },\r\n  setTitleUsingUrl: function setTitleUsingUrl() {\r\n    var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"\";\r\n    this.url = url;\r\n    this.baseUrl = url.split(\"#\")[0];\r\n    var title = (0, _ui_utils.getPDFFileNameFromURL)(url, \"\");\r\n\r\n    if (!title) {\r\n      try {\r\n        title = decodeURIComponent((0, _pdfjsLib.getFilenameFromUrl)(url)) || url;\r\n      } catch (ex) {\r\n        title = url;\r\n      }\r\n    }\r\n\r\n    this.setTitle(title);\r\n  },\r\n  setTitle: function setTitle(title) {\r\n    if (this.isViewerEmbedded) {\r\n      return;\r\n    }\r\n\r\n    document.title = title;\r\n  },\r\n\r\n  get _docFilename() {\r\n    return this._contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url);\r\n  },\r\n\r\n  _cancelIdleCallbacks: function _cancelIdleCallbacks() {\r\n    if (!this._idleCallbacks.size) {\r\n      return;\r\n    }\r\n\r\n    var _iterator = _createForOfIteratorHelper(this._idleCallbacks),\r\n        _step;\r\n\r\n    try {\r\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n        var callback = _step.value;\r\n        window.cancelIdleCallback(callback);\r\n      }\r\n    } catch (err) {\r\n      _iterator.e(err);\r\n    } finally {\r\n      _iterator.f();\r\n    }\r\n\r\n    this._idleCallbacks.clear();\r\n  },\r\n  _destroyScriptingInstance: function _destroyScriptingInstance() {\r\n    var _this6 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee7() {\r\n      var _this6$_scriptingInst, scripting, internalEvents, domEvents, _iterator2, _step2, _step2$value, name, listener, _iterator3, _step3, _step3$value, _name, _listener;\r\n\r\n      return _regenerator[\"default\"].wrap(function _callee7$(_context7) {\r\n        while (1) {\r\n          switch (_context7.prev = _context7.next) {\r\n            case 0:\r\n              if (_this6._scriptingInstance) {\r\n                _context7.next = 2;\r\n                break;\r\n              }\r\n\r\n              return _context7.abrupt(\"return\");\r\n\r\n            case 2:\r\n              _this6$_scriptingInst = _this6._scriptingInstance, scripting = _this6$_scriptingInst.scripting, internalEvents = _this6$_scriptingInst.internalEvents, domEvents = _this6$_scriptingInst.domEvents;\r\n              _context7.prev = 3;\r\n              _context7.next = 6;\r\n              return scripting.destroySandbox();\r\n\r\n            case 6:\r\n              _context7.next = 10;\r\n              break;\r\n\r\n            case 8:\r\n              _context7.prev = 8;\r\n              _context7.t0 = _context7[\"catch\"](3);\r\n\r\n            case 10:\r\n              _iterator2 = _createForOfIteratorHelper(internalEvents);\r\n\r\n              try {\r\n                for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n                  _step2$value = _slicedToArray(_step2.value, 2), name = _step2$value[0], listener = _step2$value[1];\r\n\r\n                  _this6.eventBus._off(name, listener);\r\n                }\r\n              } catch (err) {\r\n                _iterator2.e(err);\r\n              } finally {\r\n                _iterator2.f();\r\n              }\r\n\r\n              internalEvents.clear();\r\n              _iterator3 = _createForOfIteratorHelper(domEvents);\r\n\r\n              try {\r\n                for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n                  _step3$value = _slicedToArray(_step3.value, 2), _name = _step3$value[0], _listener = _step3$value[1];\r\n                  window.removeEventListener(_name, _listener);\r\n                }\r\n              } catch (err) {\r\n                _iterator3.e(err);\r\n              } finally {\r\n                _iterator3.f();\r\n              }\r\n\r\n              domEvents.clear();\r\n              delete _this6._mouseState.isDown;\r\n              _this6._scriptingInstance = null;\r\n\r\n            case 18:\r\n            case \"end\":\r\n              return _context7.stop();\r\n          }\r\n        }\r\n      }, _callee7, null, [[3, 8]]);\r\n    }))();\r\n  },\r\n  close: function close() {\r\n    var _this7 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee8() {\r\n      var errorWrapper, promises;\r\n      return _regenerator[\"default\"].wrap(function _callee8$(_context8) {\r\n        while (1) {\r\n          switch (_context8.prev = _context8.next) {\r\n            case 0:\r\n              errorWrapper = _this7.appConfig.errorWrapper.container;\r\n              errorWrapper.setAttribute(\"hidden\", \"true\");\r\n\r\n              if (_this7.pdfLoadingTask) {\r\n                _context8.next = 4;\r\n                break;\r\n              }\r\n\r\n              return _context8.abrupt(\"return\", undefined);\r\n\r\n            case 4:\r\n              promises = [];\r\n              promises.push(_this7.pdfLoadingTask.destroy());\r\n              _this7.pdfLoadingTask = null;\r\n\r\n              if (_this7.pdfDocument) {\r\n                _this7.pdfDocument = null;\r\n\r\n                _this7.pdfThumbnailViewer.setDocument(null);\r\n\r\n                _this7.pdfViewer.setDocument(null);\r\n\r\n                _this7.pdfLinkService.setDocument(null);\r\n\r\n                _this7.pdfDocumentProperties.setDocument(null);\r\n              }\r\n\r\n              webViewerResetPermissions();\r\n              _this7.store = null;\r\n              _this7.isInitialViewSet = false;\r\n              _this7.downloadComplete = false;\r\n              _this7.url = \"\";\r\n              _this7.baseUrl = \"\";\r\n              _this7.documentInfo = null;\r\n              _this7.metadata = null;\r\n              _this7._contentDispositionFilename = null;\r\n              _this7._contentLength = null;\r\n              _this7.triggerDelayedFallback = null;\r\n              _this7._saveInProgress = false;\r\n\r\n              _this7._cancelIdleCallbacks();\r\n\r\n              promises.push(_this7._destroyScriptingInstance());\r\n\r\n              _this7.pdfSidebar.reset();\r\n\r\n              _this7.pdfOutlineViewer.reset();\r\n\r\n              _this7.pdfAttachmentViewer.reset();\r\n\r\n              _this7.pdfLayerViewer.reset();\r\n\r\n              if (_this7.pdfHistory) {\r\n                _this7.pdfHistory.reset();\r\n              }\r\n\r\n              if (_this7.findBar) {\r\n                _this7.findBar.reset();\r\n              }\r\n\r\n              _this7.toolbar.reset();\r\n\r\n              _this7.secondaryToolbar.reset();\r\n\r\n              if (typeof PDFBug !== \"undefined\") {\r\n                PDFBug.cleanup();\r\n              }\r\n\r\n              _context8.next = 33;\r\n              return Promise.all(promises);\r\n\r\n            case 33:\r\n              return _context8.abrupt(\"return\", undefined);\r\n\r\n            case 34:\r\n            case \"end\":\r\n              return _context8.stop();\r\n          }\r\n        }\r\n      }, _callee8);\r\n    }))();\r\n  },\r\n  open: function open(file, args) {\r\n    var _this8 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee9() {\r\n      var workerParameters, key, parameters, apiParameters, _key, value, _key2, loadingTask;\r\n\r\n      return _regenerator[\"default\"].wrap(function _callee9$(_context9) {\r\n        while (1) {\r\n          switch (_context9.prev = _context9.next) {\r\n            case 0:\r\n              if (!_this8.pdfLoadingTask) {\r\n                _context9.next = 3;\r\n                break;\r\n              }\r\n\r\n              _context9.next = 3;\r\n              return _this8.close();\r\n\r\n            case 3:\r\n              workerParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.WORKER);\r\n\r\n              for (key in workerParameters) {\r\n                _pdfjsLib.GlobalWorkerOptions[key] = workerParameters[key];\r\n              }\r\n\r\n              parameters = Object.create(null);\r\n\r\n              if (typeof file === \"string\") {\r\n                _this8.setTitleUsingUrl(file);\r\n\r\n                parameters.url = file;\r\n              } else if (file && \"byteLength\" in file) {\r\n                parameters.data = file;\r\n              } else if (file.url && file.originalUrl) {\r\n                _this8.setTitleUsingUrl(file.originalUrl);\r\n\r\n                parameters.url = file.url;\r\n              }\r\n\r\n              apiParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.API);\r\n\r\n              for (_key in apiParameters) {\r\n                value = apiParameters[_key];\r\n\r\n                if (_key === \"docBaseUrl\" && !value) {}\r\n\r\n                parameters[_key] = value;\r\n              }\r\n\r\n              if (args) {\r\n                for (_key2 in args) {\r\n                  parameters[_key2] = args[_key2];\r\n                }\r\n              }\r\n\r\n              loadingTask = (0, _pdfjsLib.getDocument)(parameters);\r\n              _this8.pdfLoadingTask = loadingTask;\r\n\r\n              loadingTask.onPassword = function (updateCallback, reason) {\r\n                _this8.pdfLinkService.externalLinkEnabled = false;\r\n\r\n                _this8.passwordPrompt.setUpdateCallback(updateCallback, reason);\r\n\r\n                _this8.passwordPrompt.open();\r\n              };\r\n\r\n              loadingTask.onProgress = function (_ref) {\r\n                var loaded = _ref.loaded,\r\n                    total = _ref.total;\r\n\r\n                _this8.progress(loaded / total);\r\n              };\r\n\r\n              loadingTask.onUnsupportedFeature = _this8.fallback.bind(_this8);\r\n              return _context9.abrupt(\"return\", loadingTask.promise.then(function (pdfDocument) {\r\n                _this8.load(pdfDocument);\r\n              }, function (exception) {\r\n                _this8._unblockDocumentLoadEvent();\r\n\r\n                if (loadingTask !== _this8.pdfLoadingTask) {\r\n                  return undefined;\r\n                }\r\n\r\n                var message = exception === null || exception === void 0 ? void 0 : exception.message;\r\n                var loadingErrorMessage;\r\n\r\n                if (exception instanceof _pdfjsLib.InvalidPDFException) {\r\n                  loadingErrorMessage = _this8.l10n.get(\"invalid_file_error\", null, \"Invalid or corrupted PDF file.\");\r\n                } else if (exception instanceof _pdfjsLib.MissingPDFException) {\r\n                  loadingErrorMessage = _this8.l10n.get(\"missing_file_error\", null, \"Missing PDF file.\");\r\n                } else if (exception instanceof _pdfjsLib.UnexpectedResponseException) {\r\n                  loadingErrorMessage = _this8.l10n.get(\"unexpected_response_error\", null, \"Unexpected server response.\");\r\n                } else {\r\n                  loadingErrorMessage = _this8.l10n.get(\"loading_error\", null, \"An error occurred while loading the PDF.\");\r\n                }\r\n\r\n                return loadingErrorMessage.then(function (msg) {\r\n                  _this8.error(msg, {\r\n                    message: message\r\n                  });\r\n\r\n                  throw exception;\r\n                });\r\n              }));\r\n\r\n            case 16:\r\n            case \"end\":\r\n              return _context9.stop();\r\n          }\r\n        }\r\n      }, _callee9);\r\n    }))();\r\n  },\r\n  download: function download() {\r\n    var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\r\n        _ref2$sourceEventType = _ref2.sourceEventType,\r\n        sourceEventType = _ref2$sourceEventType === void 0 ? \"download\" : _ref2$sourceEventType;\r\n\r\n    function downloadByUrl() {\r\n      downloadManager.downloadUrl(url, filename);\r\n    }\r\n\r\n    var downloadManager = this.downloadManager,\r\n        url = this.baseUrl,\r\n        filename = this._docFilename;\r\n\r\n    if (!this.pdfDocument || !this.downloadComplete) {\r\n      downloadByUrl();\r\n      return;\r\n    }\r\n\r\n    this.pdfDocument.getData().then(function (data) {\r\n      var blob = new Blob([data], {\r\n        type: \"application/pdf\"\r\n      });\r\n      downloadManager.download(blob, url, filename, sourceEventType);\r\n    })[\"catch\"](downloadByUrl);\r\n  },\r\n  save: function save() {\r\n    var _arguments = arguments,\r\n        _this9 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee11() {\r\n      var _this9$_scriptingInst;\r\n\r\n      var _ref3, _ref3$sourceEventType, sourceEventType, downloadManager, url, filename;\r\n\r\n      return _regenerator[\"default\"].wrap(function _callee11$(_context11) {\r\n        while (1) {\r\n          switch (_context11.prev = _context11.next) {\r\n            case 0:\r\n              _ref3 = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : {}, _ref3$sourceEventType = _ref3.sourceEventType, sourceEventType = _ref3$sourceEventType === void 0 ? \"download\" : _ref3$sourceEventType;\r\n\r\n              if (!_this9._saveInProgress) {\r\n                _context11.next = 3;\r\n                break;\r\n              }\r\n\r\n              return _context11.abrupt(\"return\");\r\n\r\n            case 3:\r\n              downloadManager = _this9.downloadManager, url = _this9.baseUrl, filename = _this9._docFilename;\r\n\r\n              if (!(!_this9.pdfDocument || !_this9.downloadComplete)) {\r\n                _context11.next = 7;\r\n                break;\r\n              }\r\n\r\n              _this9.download({\r\n                sourceEventType: sourceEventType\r\n              });\r\n\r\n              return _context11.abrupt(\"return\");\r\n\r\n            case 7:\r\n              _this9._saveInProgress = true;\r\n              _context11.next = 10;\r\n              return (_this9$_scriptingInst = _this9._scriptingInstance) === null || _this9$_scriptingInst === void 0 ? void 0 : _this9$_scriptingInst.scripting.dispatchEventInSandbox({\r\n                id: \"doc\",\r\n                name: \"WillSave\"\r\n              });\r\n\r\n            case 10:\r\n              _this9.pdfDocument.saveDocument(_this9.pdfDocument.annotationStorage).then(function (data) {\r\n                var blob = new Blob([data], {\r\n                  type: \"application/pdf\"\r\n                });\r\n                downloadManager.download(blob, url, filename, sourceEventType);\r\n              })[\"catch\"](function () {\r\n                _this9.download({\r\n                  sourceEventType: sourceEventType\r\n                });\r\n              })[\"finally\"]( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee10() {\r\n                var _this9$_scriptingInst2;\r\n\r\n                return _regenerator[\"default\"].wrap(function _callee10$(_context10) {\r\n                  while (1) {\r\n                    switch (_context10.prev = _context10.next) {\r\n                      case 0:\r\n                        _context10.next = 2;\r\n                        return (_this9$_scriptingInst2 = _this9._scriptingInstance) === null || _this9$_scriptingInst2 === void 0 ? void 0 : _this9$_scriptingInst2.scripting.dispatchEventInSandbox({\r\n                          id: \"doc\",\r\n                          name: \"DidSave\"\r\n                        });\r\n\r\n                      case 2:\r\n                        _this9._saveInProgress = false;\r\n\r\n                      case 3:\r\n                      case \"end\":\r\n                        return _context10.stop();\r\n                    }\r\n                  }\r\n                }, _callee10);\r\n              })));\r\n\r\n            case 11:\r\n            case \"end\":\r\n              return _context11.stop();\r\n          }\r\n        }\r\n      }, _callee11);\r\n    }))();\r\n  },\r\n  downloadOrSave: function downloadOrSave(options) {\r\n    var _this$pdfDocument;\r\n\r\n    if (((_this$pdfDocument = this.pdfDocument) === null || _this$pdfDocument === void 0 ? void 0 : _this$pdfDocument.annotationStorage.size) > 0) {\r\n      this.save(options);\r\n    } else {\r\n      this.download(options);\r\n    }\r\n  },\r\n  _delayedFallback: function _delayedFallback(featureId) {\r\n    var _this10 = this;\r\n\r\n    this.externalServices.reportTelemetry({\r\n      type: \"unsupportedFeature\",\r\n      featureId: featureId\r\n    });\r\n\r\n    if (!this.triggerDelayedFallback) {\r\n      this.triggerDelayedFallback = function () {\r\n        _this10.fallback(featureId);\r\n\r\n        _this10.triggerDelayedFallback = null;\r\n      };\r\n    }\r\n  },\r\n  fallback: function fallback(featureId) {\r\n    var _this11 = this;\r\n\r\n    this.externalServices.reportTelemetry({\r\n      type: \"unsupportedFeature\",\r\n      featureId: featureId\r\n    });\r\n\r\n    switch (featureId) {\r\n      case _pdfjsLib.UNSUPPORTED_FEATURES.errorFontLoadNative:\r\n        return;\r\n    }\r\n\r\n    if (this.fellback) {\r\n      return;\r\n    }\r\n\r\n    this.fellback = true;\r\n    this.externalServices.fallback({\r\n      featureId: featureId,\r\n      url: this.baseUrl\r\n    }).then(function (download) {\r\n      if (!download) {\r\n        return;\r\n      }\r\n\r\n      _this11.download({\r\n        sourceEventType: \"download\"\r\n      });\r\n    });\r\n  },\r\n  error: function error(message, moreInfo) {\r\n    var moreInfoText = [this.l10n.get(\"error_version_info\", {\r\n      version: _pdfjsLib.version || \"?\",\r\n      build: _pdfjsLib.build || \"?\"\r\n    }, \"PDF.js v{{version}} (build: {{build}})\")];\r\n\r\n    if (moreInfo) {\r\n      moreInfoText.push(this.l10n.get(\"error_message\", {\r\n        message: moreInfo.message\r\n      }, \"Message: {{message}}\"));\r\n\r\n      if (moreInfo.stack) {\r\n        moreInfoText.push(this.l10n.get(\"error_stack\", {\r\n          stack: moreInfo.stack\r\n        }, \"Stack: {{stack}}\"));\r\n      } else {\r\n        if (moreInfo.filename) {\r\n          moreInfoText.push(this.l10n.get(\"error_file\", {\r\n            file: moreInfo.filename\r\n          }, \"File: {{file}}\"));\r\n        }\r\n\r\n        if (moreInfo.lineNumber) {\r\n          moreInfoText.push(this.l10n.get(\"error_line\", {\r\n            line: moreInfo.lineNumber\r\n          }, \"Line: {{line}}\"));\r\n        }\r\n      }\r\n    }\r\n\r\n    var errorWrapperConfig = this.appConfig.errorWrapper;\r\n    var errorWrapper = errorWrapperConfig.container;\r\n    errorWrapper.removeAttribute(\"hidden\");\r\n    var errorMessage = errorWrapperConfig.errorMessage;\r\n    errorMessage.textContent = message;\r\n    var closeButton = errorWrapperConfig.closeButton;\r\n\r\n    closeButton.onclick = function () {\r\n      errorWrapper.setAttribute(\"hidden\", \"true\");\r\n    };\r\n\r\n    var errorMoreInfo = errorWrapperConfig.errorMoreInfo;\r\n    var moreInfoButton = errorWrapperConfig.moreInfoButton;\r\n    var lessInfoButton = errorWrapperConfig.lessInfoButton;\r\n\r\n    moreInfoButton.onclick = function () {\r\n      errorMoreInfo.removeAttribute(\"hidden\");\r\n      moreInfoButton.setAttribute(\"hidden\", \"true\");\r\n      lessInfoButton.removeAttribute(\"hidden\");\r\n      errorMoreInfo.style.height = errorMoreInfo.scrollHeight + \"px\";\r\n    };\r\n\r\n    lessInfoButton.onclick = function () {\r\n      errorMoreInfo.setAttribute(\"hidden\", \"true\");\r\n      moreInfoButton.removeAttribute(\"hidden\");\r\n      lessInfoButton.setAttribute(\"hidden\", \"true\");\r\n    };\r\n\r\n    moreInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler;\r\n    lessInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler;\r\n    closeButton.oncontextmenu = _ui_utils.noContextMenuHandler;\r\n    moreInfoButton.removeAttribute(\"hidden\");\r\n    lessInfoButton.setAttribute(\"hidden\", \"true\");\r\n    Promise.all(moreInfoText).then(function (parts) {\r\n      errorMoreInfo.value = parts.join(\"\\n\");\r\n    });\r\n  },\r\n  progress: function progress(level) {\r\n    var _this12 = this;\r\n\r\n    if (this.downloadComplete) {\r\n      return;\r\n    }\r\n\r\n    var percent = Math.round(level * 100);\r\n\r\n    if (percent > this.loadingBar.percent || isNaN(percent)) {\r\n      this.loadingBar.percent = percent;\r\n      var disableAutoFetch = this.pdfDocument ? this.pdfDocument.loadingParams.disableAutoFetch : _app_options.AppOptions.get(\"disableAutoFetch\");\r\n\r\n      if (disableAutoFetch && percent) {\r\n        if (this.disableAutoFetchLoadingBarTimeout) {\r\n          clearTimeout(this.disableAutoFetchLoadingBarTimeout);\r\n          this.disableAutoFetchLoadingBarTimeout = null;\r\n        }\r\n\r\n        this.loadingBar.show();\r\n        this.disableAutoFetchLoadingBarTimeout = setTimeout(function () {\r\n          _this12.loadingBar.hide();\r\n\r\n          _this12.disableAutoFetchLoadingBarTimeout = null;\r\n        }, DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT);\r\n      }\r\n    }\r\n  },\r\n  load: function load(pdfDocument) {\r\n    var _this13 = this;\r\n\r\n    this.pdfDocument = pdfDocument;\r\n    pdfDocument.getDownloadInfo().then(function (_ref5) {\r\n      var length = _ref5.length;\r\n      _this13._contentLength = length;\r\n      _this13.downloadComplete = true;\r\n\r\n      _this13.loadingBar.hide();\r\n\r\n      firstPagePromise.then(function () {\r\n        _this13.eventBus.dispatch(\"documentloaded\", {\r\n          source: _this13\r\n        });\r\n      });\r\n    });\r\n    var pageLayoutPromise = pdfDocument.getPageLayout()[\"catch\"](function () {});\r\n    var pageModePromise = pdfDocument.getPageMode()[\"catch\"](function () {});\r\n    var openActionPromise = pdfDocument.getOpenAction()[\"catch\"](function () {});\r\n    this.toolbar.setPagesCount(pdfDocument.numPages, false);\r\n    this.secondaryToolbar.setPagesCount(pdfDocument.numPages);\r\n    var baseDocumentUrl;\r\n    baseDocumentUrl = null;\r\n    this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);\r\n    this.pdfDocumentProperties.setDocument(pdfDocument, this.url);\r\n    var pdfViewer = this.pdfViewer;\r\n    pdfViewer.setDocument(pdfDocument);\r\n    var firstPagePromise = pdfViewer.firstPagePromise,\r\n        onePageRendered = pdfViewer.onePageRendered,\r\n        pagesPromise = pdfViewer.pagesPromise;\r\n    var pdfThumbnailViewer = this.pdfThumbnailViewer;\r\n    pdfThumbnailViewer.setDocument(pdfDocument);\r\n    var storedPromise = (this.store = new _view_history.ViewHistory(pdfDocument.fingerprint)).getMultiple({\r\n      page: null,\r\n      zoom: _ui_utils.DEFAULT_SCALE_VALUE,\r\n      scrollLeft: \"0\",\r\n      scrollTop: \"0\",\r\n      rotation: null,\r\n      sidebarView: _ui_utils.SidebarView.UNKNOWN,\r\n      scrollMode: _ui_utils.ScrollMode.UNKNOWN,\r\n      spreadMode: _ui_utils.SpreadMode.UNKNOWN\r\n    })[\"catch\"](function () {\r\n      return Object.create(null);\r\n    });\r\n    firstPagePromise.then(function (pdfPage) {\r\n      _this13.loadingBar.setWidth(_this13.appConfig.viewerContainer);\r\n\r\n      _this13._initializeAnnotationStorageCallbacks(pdfDocument);\r\n\r\n      Promise.all([_ui_utils.animationStarted, storedPromise, pageLayoutPromise, pageModePromise, openActionPromise]).then( /*#__PURE__*/function () {\r\n        var _ref7 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee12(_ref6) {\r\n          var _ref8, timeStamp, stored, pageLayout, pageMode, openAction, viewOnLoad, initialBookmark, zoom, hash, rotation, sidebarView, scrollMode, spreadMode;\r\n\r\n          return _regenerator[\"default\"].wrap(function _callee12$(_context12) {\r\n            while (1) {\r\n              switch (_context12.prev = _context12.next) {\r\n                case 0:\r\n                  _ref8 = _slicedToArray(_ref6, 5), timeStamp = _ref8[0], stored = _ref8[1], pageLayout = _ref8[2], pageMode = _ref8[3], openAction = _ref8[4];\r\n                  viewOnLoad = _app_options.AppOptions.get(\"viewOnLoad\");\r\n\r\n                  _this13._initializePdfHistory({\r\n                    fingerprint: pdfDocument.fingerprint,\r\n                    viewOnLoad: viewOnLoad,\r\n                    initialDest: openAction === null || openAction === void 0 ? void 0 : openAction.dest\r\n                  });\r\n\r\n                  initialBookmark = _this13.initialBookmark;\r\n                  zoom = _app_options.AppOptions.get(\"defaultZoomValue\");\r\n                  hash = zoom ? \"zoom=\".concat(zoom) : null;\r\n                  rotation = null;\r\n                  sidebarView = _app_options.AppOptions.get(\"sidebarViewOnLoad\");\r\n                  scrollMode = _app_options.AppOptions.get(\"scrollModeOnLoad\");\r\n                  spreadMode = _app_options.AppOptions.get(\"spreadModeOnLoad\");\r\n\r\n                  if (stored.page && viewOnLoad !== ViewOnLoad.INITIAL) {\r\n                    hash = \"page=\".concat(stored.page, \"&zoom=\").concat(zoom || stored.zoom, \",\") + \"\".concat(stored.scrollLeft, \",\").concat(stored.scrollTop);\r\n                    rotation = parseInt(stored.rotation, 10);\r\n\r\n                    if (sidebarView === _ui_utils.SidebarView.UNKNOWN) {\r\n                      sidebarView = stored.sidebarView | 0;\r\n                    }\r\n\r\n                    if (scrollMode === _ui_utils.ScrollMode.UNKNOWN) {\r\n                      scrollMode = stored.scrollMode | 0;\r\n                    }\r\n\r\n                    if (spreadMode === _ui_utils.SpreadMode.UNKNOWN) {\r\n                      spreadMode = stored.spreadMode | 0;\r\n                    }\r\n                  }\r\n\r\n                  if (pageMode && sidebarView === _ui_utils.SidebarView.UNKNOWN) {\r\n                    sidebarView = apiPageModeToSidebarView(pageMode);\r\n                  }\r\n\r\n                  if (pageLayout && spreadMode === _ui_utils.SpreadMode.UNKNOWN) {\r\n                    spreadMode = apiPageLayoutToSpreadMode(pageLayout);\r\n                  }\r\n\r\n                  _this13.setInitialView(hash, {\r\n                    rotation: rotation,\r\n                    sidebarView: sidebarView,\r\n                    scrollMode: scrollMode,\r\n                    spreadMode: spreadMode\r\n                  });\r\n\r\n                  _this13.eventBus.dispatch(\"documentinit\", {\r\n                    source: _this13\r\n                  });\r\n\r\n                  if (!_this13.isViewerEmbedded) {\r\n                    pdfViewer.focus();\r\n                  }\r\n\r\n                  _this13._initializePermissions(pdfDocument);\r\n\r\n                  _context12.next = 19;\r\n                  return Promise.race([pagesPromise, new Promise(function (resolve) {\r\n                    setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT);\r\n                  })]);\r\n\r\n                case 19:\r\n                  if (!(!initialBookmark && !hash)) {\r\n                    _context12.next = 21;\r\n                    break;\r\n                  }\r\n\r\n                  return _context12.abrupt(\"return\");\r\n\r\n                case 21:\r\n                  if (!pdfViewer.hasEqualPageSizes) {\r\n                    _context12.next = 23;\r\n                    break;\r\n                  }\r\n\r\n                  return _context12.abrupt(\"return\");\r\n\r\n                case 23:\r\n                  _this13.initialBookmark = initialBookmark;\r\n                  pdfViewer.currentScaleValue = pdfViewer.currentScaleValue;\r\n\r\n                  _this13.setInitialView(hash);\r\n\r\n                case 26:\r\n                case \"end\":\r\n                  return _context12.stop();\r\n              }\r\n            }\r\n          }, _callee12);\r\n        }));\r\n\r\n        return function (_x2) {\r\n          return _ref7.apply(this, arguments);\r\n        };\r\n      }())[\"catch\"](function () {\r\n        _this13.setInitialView();\r\n      }).then(function () {\r\n        pdfViewer.update();\r\n      });\r\n    });\r\n    pagesPromise.then(function () {\r\n      _this13._unblockDocumentLoadEvent();\r\n\r\n      _this13._initializeAutoPrint(pdfDocument, openActionPromise);\r\n    });\r\n    onePageRendered.then(function () {\r\n      pdfDocument.getOutline().then(function (outline) {\r\n        _this13.pdfOutlineViewer.render({\r\n          outline: outline,\r\n          pdfDocument: pdfDocument\r\n        });\r\n      });\r\n      pdfDocument.getAttachments().then(function (attachments) {\r\n        _this13.pdfAttachmentViewer.render({\r\n          attachments: attachments\r\n        });\r\n      });\r\n      pdfViewer.optionalContentConfigPromise.then(function (optionalContentConfig) {\r\n        _this13.pdfLayerViewer.render({\r\n          optionalContentConfig: optionalContentConfig,\r\n          pdfDocument: pdfDocument\r\n        });\r\n      });\r\n\r\n      if (\"requestIdleCallback\" in window) {\r\n        var callback = window.requestIdleCallback(function () {\r\n          _this13._collectTelemetry(pdfDocument);\r\n\r\n          _this13._idleCallbacks[\"delete\"](callback);\r\n        }, {\r\n          timeout: 1000\r\n        });\r\n\r\n        _this13._idleCallbacks.add(callback);\r\n      }\r\n\r\n      _this13._initializeJavaScript(pdfDocument);\r\n    });\r\n\r\n    this._initializePageLabels(pdfDocument);\r\n\r\n    this._initializeMetadata(pdfDocument);\r\n  },\r\n  _initializeJavaScript: function _initializeJavaScript(pdfDocument) {\r\n    var _this14 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee15() {\r\n      var _yield$Promise$all, _yield$Promise$all2, objects, calculationOrder, docActions, scripting, internalEvents, domEvents, updateFromSandbox, visitedPages, pageOpen, pageClose, dispatchEventInSandbox, mouseDown, mouseUp, _iterator4, _step4, _step4$value, name, listener, _iterator5, _step5, _step5$value, _name2, _listener2, _this14$metadata, _this14$metadata2;\r\n\r\n      return _regenerator[\"default\"].wrap(function _callee15$(_context15) {\r\n        while (1) {\r\n          switch (_context15.prev = _context15.next) {\r\n            case 0:\r\n              if (_app_options.AppOptions.get(\"enableScripting\")) {\r\n                _context15.next = 2;\r\n                break;\r\n              }\r\n\r\n              return _context15.abrupt(\"return\");\r\n\r\n            case 2:\r\n              _context15.next = 4;\r\n              return Promise.all([pdfDocument.getFieldObjects(), pdfDocument.getCalculationOrderIds(), pdfDocument.getJSActions()]);\r\n\r\n            case 4:\r\n              _yield$Promise$all = _context15.sent;\r\n              _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 3);\r\n              objects = _yield$Promise$all2[0];\r\n              calculationOrder = _yield$Promise$all2[1];\r\n              docActions = _yield$Promise$all2[2];\r\n\r\n              if (!(!objects && !docActions)) {\r\n                _context15.next = 11;\r\n                break;\r\n              }\r\n\r\n              return _context15.abrupt(\"return\");\r\n\r\n            case 11:\r\n              if (!(pdfDocument !== _this14.pdfDocument)) {\r\n                _context15.next = 13;\r\n                break;\r\n              }\r\n\r\n              return _context15.abrupt(\"return\");\r\n\r\n            case 13:\r\n              scripting = _this14.externalServices.createScripting({\r\n                sandboxBundleSrc: _app_options.AppOptions.get(\"sandboxBundleSrc\")\r\n              });\r\n              internalEvents = new Map(), domEvents = new Map();\r\n              _this14._scriptingInstance = {\r\n                scripting: scripting,\r\n                ready: false,\r\n                internalEvents: internalEvents,\r\n                domEvents: domEvents\r\n              };\r\n\r\n              if (_this14.documentInfo) {\r\n                _context15.next = 21;\r\n                break;\r\n              }\r\n\r\n              _context15.next = 19;\r\n              return new Promise(function (resolve) {\r\n                _this14.eventBus._on(\"metadataloaded\", function (evt) {\r\n                  resolve();\r\n                }, {\r\n                  once: true\r\n                });\r\n              });\r\n\r\n            case 19:\r\n              if (!(pdfDocument !== _this14.pdfDocument)) {\r\n                _context15.next = 21;\r\n                break;\r\n              }\r\n\r\n              return _context15.abrupt(\"return\");\r\n\r\n            case 21:\r\n              if (_this14._contentLength) {\r\n                _context15.next = 26;\r\n                break;\r\n              }\r\n\r\n              _context15.next = 24;\r\n              return new Promise(function (resolve) {\r\n                _this14.eventBus._on(\"documentloaded\", function (evt) {\r\n                  resolve();\r\n                }, {\r\n                  once: true\r\n                });\r\n              });\r\n\r\n            case 24:\r\n              if (!(pdfDocument !== _this14.pdfDocument)) {\r\n                _context15.next = 26;\r\n                break;\r\n              }\r\n\r\n              return _context15.abrupt(\"return\");\r\n\r\n            case 26:\r\n              updateFromSandbox = function updateFromSandbox(_ref9) {\r\n                var detail = _ref9.detail;\r\n                var id = detail.id,\r\n                    command = detail.command,\r\n                    value = detail.value;\r\n\r\n                if (!id) {\r\n                  switch (command) {\r\n                    case \"clear\":\r\n                      console.clear();\r\n                      break;\r\n\r\n                    case \"error\":\r\n                      console.error(value);\r\n                      break;\r\n\r\n                    case \"layout\":\r\n                      _this14.pdfViewer.spreadMode = apiPageLayoutToSpreadMode(value);\r\n                      break;\r\n\r\n                    case \"page-num\":\r\n                      _this14.pdfViewer.currentPageNumber = value + 1;\r\n                      break;\r\n\r\n                    case \"print\":\r\n                      _this14.pdfViewer.pagesPromise.then(function () {\r\n                        _this14.triggerPrinting();\r\n                      });\r\n\r\n                      break;\r\n\r\n                    case \"println\":\r\n                      console.log(value);\r\n                      break;\r\n\r\n                    case \"zoom\":\r\n                      _this14.pdfViewer.currentScaleValue = value;\r\n                      break;\r\n                  }\r\n\r\n                  return;\r\n                }\r\n\r\n                var element = document.getElementById(id);\r\n\r\n                if (element) {\r\n                  element.dispatchEvent(new CustomEvent(\"updatefromsandbox\", {\r\n                    detail: detail\r\n                  }));\r\n                } else {\r\n                  if (value !== undefined && value !== null) {\r\n                    pdfDocument.annotationStorage.setValue(id, value);\r\n                  }\r\n                }\r\n              };\r\n\r\n              internalEvents.set(\"updatefromsandbox\", updateFromSandbox);\r\n              visitedPages = new Map();\r\n\r\n              pageOpen = function pageOpen(_ref10) {\r\n                var pageNumber = _ref10.pageNumber,\r\n                    actionsPromise = _ref10.actionsPromise;\r\n                visitedPages.set(pageNumber, _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee13() {\r\n                  var _this14$_scriptingIns;\r\n\r\n                  var actions;\r\n                  return _regenerator[\"default\"].wrap(function _callee13$(_context13) {\r\n                    while (1) {\r\n                      switch (_context13.prev = _context13.next) {\r\n                        case 0:\r\n                          actions = null;\r\n\r\n                          if (visitedPages.has(pageNumber)) {\r\n                            _context13.next = 7;\r\n                            break;\r\n                          }\r\n\r\n                          _context13.next = 4;\r\n                          return actionsPromise;\r\n\r\n                        case 4:\r\n                          actions = _context13.sent;\r\n\r\n                          if (!(pdfDocument !== _this14.pdfDocument)) {\r\n                            _context13.next = 7;\r\n                            break;\r\n                          }\r\n\r\n                          return _context13.abrupt(\"return\");\r\n\r\n                        case 7:\r\n                          _context13.next = 9;\r\n                          return (_this14$_scriptingIns = _this14._scriptingInstance) === null || _this14$_scriptingIns === void 0 ? void 0 : _this14$_scriptingIns.scripting.dispatchEventInSandbox({\r\n                            id: \"page\",\r\n                            name: \"PageOpen\",\r\n                            pageNumber: pageNumber,\r\n                            actions: actions\r\n                          });\r\n\r\n                        case 9:\r\n                        case \"end\":\r\n                          return _context13.stop();\r\n                      }\r\n                    }\r\n                  }, _callee13);\r\n                }))());\r\n              };\r\n\r\n              pageClose = /*#__PURE__*/function () {\r\n                var _ref13 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee14(_ref12) {\r\n                  var _this14$_scriptingIns2;\r\n\r\n                  var pageNumber, actionsPromise;\r\n                  return _regenerator[\"default\"].wrap(function _callee14$(_context14) {\r\n                    while (1) {\r\n                      switch (_context14.prev = _context14.next) {\r\n                        case 0:\r\n                          pageNumber = _ref12.pageNumber;\r\n                          actionsPromise = visitedPages.get(pageNumber);\r\n\r\n                          if (actionsPromise) {\r\n                            _context14.next = 4;\r\n                            break;\r\n                          }\r\n\r\n                          return _context14.abrupt(\"return\");\r\n\r\n                        case 4:\r\n                          visitedPages.set(pageNumber, null);\r\n                          _context14.next = 7;\r\n                          return actionsPromise;\r\n\r\n                        case 7:\r\n                          if (!(pdfDocument !== _this14.pdfDocument)) {\r\n                            _context14.next = 9;\r\n                            break;\r\n                          }\r\n\r\n                          return _context14.abrupt(\"return\");\r\n\r\n                        case 9:\r\n                          _context14.next = 11;\r\n                          return (_this14$_scriptingIns2 = _this14._scriptingInstance) === null || _this14$_scriptingIns2 === void 0 ? void 0 : _this14$_scriptingIns2.scripting.dispatchEventInSandbox({\r\n                            id: \"page\",\r\n                            name: \"PageClose\",\r\n                            pageNumber: pageNumber\r\n                          });\r\n\r\n                        case 11:\r\n                        case \"end\":\r\n                          return _context14.stop();\r\n                      }\r\n                    }\r\n                  }, _callee14);\r\n                }));\r\n\r\n                return function pageClose(_x3) {\r\n                  return _ref13.apply(this, arguments);\r\n                };\r\n              }();\r\n\r\n              internalEvents.set(\"pageopen\", pageOpen);\r\n              internalEvents.set(\"pageclose\", pageClose);\r\n\r\n              dispatchEventInSandbox = function dispatchEventInSandbox(_ref14) {\r\n                var detail = _ref14.detail;\r\n                scripting.dispatchEventInSandbox(detail);\r\n              };\r\n\r\n              internalEvents.set(\"dispatcheventinsandbox\", dispatchEventInSandbox);\r\n\r\n              mouseDown = function mouseDown(event) {\r\n                _this14._mouseState.isDown = true;\r\n              };\r\n\r\n              domEvents.set(\"mousedown\", mouseDown);\r\n\r\n              mouseUp = function mouseUp(event) {\r\n                _this14._mouseState.isDown = false;\r\n              };\r\n\r\n              domEvents.set(\"mouseup\", mouseUp);\r\n              _iterator4 = _createForOfIteratorHelper(internalEvents);\r\n\r\n              try {\r\n                for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\r\n                  _step4$value = _slicedToArray(_step4.value, 2), name = _step4$value[0], listener = _step4$value[1];\r\n\r\n                  _this14.eventBus._on(name, listener);\r\n                }\r\n              } catch (err) {\r\n                _iterator4.e(err);\r\n              } finally {\r\n                _iterator4.f();\r\n              }\r\n\r\n              _iterator5 = _createForOfIteratorHelper(domEvents);\r\n\r\n              try {\r\n                for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\r\n                  _step5$value = _slicedToArray(_step5.value, 2), _name2 = _step5$value[0], _listener2 = _step5$value[1];\r\n                  window.addEventListener(_name2, _listener2);\r\n                }\r\n              } catch (err) {\r\n                _iterator5.e(err);\r\n              } finally {\r\n                _iterator5.f();\r\n              }\r\n\r\n              _context15.prev = 43;\r\n              _context15.next = 46;\r\n              return scripting.createSandbox({\r\n                objects: objects,\r\n                calculationOrder: calculationOrder,\r\n                appInfo: {\r\n                  platform: navigator.platform,\r\n                  language: navigator.language\r\n                },\r\n                docInfo: _objectSpread(_objectSpread({}, _this14.documentInfo), {}, {\r\n                  baseURL: _this14.baseUrl,\r\n                  filesize: _this14._contentLength,\r\n                  filename: _this14._docFilename,\r\n                  metadata: (_this14$metadata = _this14.metadata) === null || _this14$metadata === void 0 ? void 0 : _this14$metadata.getRaw(),\r\n                  authors: (_this14$metadata2 = _this14.metadata) === null || _this14$metadata2 === void 0 ? void 0 : _this14$metadata2.get(\"dc:creator\"),\r\n                  numPages: pdfDocument.numPages,\r\n                  URL: _this14.url,\r\n                  actions: docActions\r\n                })\r\n              });\r\n\r\n            case 46:\r\n              if (_this14.externalServices.isInAutomation) {\r\n                _this14.eventBus.dispatch(\"sandboxcreated\", {\r\n                  source: _this14\r\n                });\r\n              }\r\n\r\n              _context15.next = 54;\r\n              break;\r\n\r\n            case 49:\r\n              _context15.prev = 49;\r\n              _context15.t0 = _context15[\"catch\"](43);\r\n              console.error(\"_initializeJavaScript: \\\"\".concat(_context15.t0 === null || _context15.t0 === void 0 ? void 0 : _context15.t0.message, \"\\\".\"));\r\n\r\n              _this14._destroyScriptingInstance();\r\n\r\n              return _context15.abrupt(\"return\");\r\n\r\n            case 54:\r\n              _context15.next = 56;\r\n              return scripting.dispatchEventInSandbox({\r\n                id: \"doc\",\r\n                name: \"Open\"\r\n              });\r\n\r\n            case 56:\r\n              _context15.next = 58;\r\n              return _this14.pdfViewer.initializeScriptingEvents();\r\n\r\n            case 58:\r\n              Promise.resolve().then(function () {\r\n                if (_this14._scriptingInstance) {\r\n                  _this14._scriptingInstance.ready = true;\r\n                }\r\n              });\r\n\r\n            case 59:\r\n            case \"end\":\r\n              return _context15.stop();\r\n          }\r\n        }\r\n      }, _callee15, null, [[43, 49]]);\r\n    }))();\r\n  },\r\n  _collectTelemetry: function _collectTelemetry(pdfDocument) {\r\n    var _this15 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee16() {\r\n      var markInfo, tagged;\r\n      return _regenerator[\"default\"].wrap(function _callee16$(_context16) {\r\n        while (1) {\r\n          switch (_context16.prev = _context16.next) {\r\n            case 0:\r\n              _context16.next = 2;\r\n              return _this15.pdfDocument.getMarkInfo();\r\n\r\n            case 2:\r\n              markInfo = _context16.sent;\r\n\r\n              if (!(pdfDocument !== _this15.pdfDocument)) {\r\n                _context16.next = 5;\r\n                break;\r\n              }\r\n\r\n              return _context16.abrupt(\"return\");\r\n\r\n            case 5:\r\n              tagged = (markInfo === null || markInfo === void 0 ? void 0 : markInfo.Marked) || false;\r\n\r\n              _this15.externalServices.reportTelemetry({\r\n                type: \"tagged\",\r\n                tagged: tagged\r\n              });\r\n\r\n            case 7:\r\n            case \"end\":\r\n              return _context16.stop();\r\n          }\r\n        }\r\n      }, _callee16);\r\n    }))();\r\n  },\r\n  _initializeAutoPrint: function _initializeAutoPrint(pdfDocument, openActionPromise) {\r\n    var _this16 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee17() {\r\n      var _yield$Promise$all3, _yield$Promise$all4, openAction, javaScript, triggerAutoPrint, _iterator6, _step6, js;\r\n\r\n      return _regenerator[\"default\"].wrap(function _callee17$(_context17) {\r\n        while (1) {\r\n          switch (_context17.prev = _context17.next) {\r\n            case 0:\r\n              _context17.next = 2;\r\n              return Promise.all([openActionPromise, !_app_options.AppOptions.get(\"enableScripting\") ? pdfDocument.getJavaScript() : null]);\r\n\r\n            case 2:\r\n              _yield$Promise$all3 = _context17.sent;\r\n              _yield$Promise$all4 = _slicedToArray(_yield$Promise$all3, 2);\r\n              openAction = _yield$Promise$all4[0];\r\n              javaScript = _yield$Promise$all4[1];\r\n\r\n              if (!(pdfDocument !== _this16.pdfDocument)) {\r\n                _context17.next = 8;\r\n                break;\r\n              }\r\n\r\n              return _context17.abrupt(\"return\");\r\n\r\n            case 8:\r\n              triggerAutoPrint = false;\r\n\r\n              if ((openAction === null || openAction === void 0 ? void 0 : openAction.action) === \"Print\") {\r\n                triggerAutoPrint = true;\r\n              }\r\n\r\n              if (!javaScript) {\r\n                _context17.next = 31;\r\n                break;\r\n              }\r\n\r\n              javaScript.some(function (js) {\r\n                if (!js) {\r\n                  return false;\r\n                }\r\n\r\n                console.warn(\"Warning: JavaScript is not supported\");\r\n\r\n                _this16._delayedFallback(_pdfjsLib.UNSUPPORTED_FEATURES.javaScript);\r\n\r\n                return true;\r\n              });\r\n\r\n              if (triggerAutoPrint) {\r\n                _context17.next = 31;\r\n                break;\r\n              }\r\n\r\n              _iterator6 = _createForOfIteratorHelper(javaScript);\r\n              _context17.prev = 14;\r\n\r\n              _iterator6.s();\r\n\r\n            case 16:\r\n              if ((_step6 = _iterator6.n()).done) {\r\n                _context17.next = 23;\r\n                break;\r\n              }\r\n\r\n              js = _step6.value;\r\n\r\n              if (!(js && _ui_utils.AutoPrintRegExp.test(js))) {\r\n                _context17.next = 21;\r\n                break;\r\n              }\r\n\r\n              triggerAutoPrint = true;\r\n              return _context17.abrupt(\"break\", 23);\r\n\r\n            case 21:\r\n              _context17.next = 16;\r\n              break;\r\n\r\n            case 23:\r\n              _context17.next = 28;\r\n              break;\r\n\r\n            case 25:\r\n              _context17.prev = 25;\r\n              _context17.t0 = _context17[\"catch\"](14);\r\n\r\n              _iterator6.e(_context17.t0);\r\n\r\n            case 28:\r\n              _context17.prev = 28;\r\n\r\n              _iterator6.f();\r\n\r\n              return _context17.finish(28);\r\n\r\n            case 31:\r\n              if (triggerAutoPrint) {\r\n                _this16.triggerPrinting();\r\n              }\r\n\r\n            case 32:\r\n            case \"end\":\r\n              return _context17.stop();\r\n          }\r\n        }\r\n      }, _callee17, null, [[14, 25, 28, 31]]);\r\n    }))();\r\n  },\r\n  _initializeMetadata: function _initializeMetadata(pdfDocument) {\r\n    var _this17 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee18() {\r\n      var _this17$_contentLengt;\r\n\r\n      var _yield$pdfDocument$ge, info, metadata, contentDispositionFilename, contentLength, pdfTitle, infoTitle, metadataTitle, versionId, generatorId, producer, formType;\r\n\r\n      return _regenerator[\"default\"].wrap(function _callee18$(_context18) {\r\n        while (1) {\r\n          switch (_context18.prev = _context18.next) {\r\n            case 0:\r\n              _context18.next = 2;\r\n              return pdfDocument.getMetadata();\r\n\r\n            case 2:\r\n              _yield$pdfDocument$ge = _context18.sent;\r\n              info = _yield$pdfDocument$ge.info;\r\n              metadata = _yield$pdfDocument$ge.metadata;\r\n              contentDispositionFilename = _yield$pdfDocument$ge.contentDispositionFilename;\r\n              contentLength = _yield$pdfDocument$ge.contentLength;\r\n\r\n              if (!(pdfDocument !== _this17.pdfDocument)) {\r\n                _context18.next = 9;\r\n                break;\r\n              }\r\n\r\n              return _context18.abrupt(\"return\");\r\n\r\n            case 9:\r\n              _this17.documentInfo = info;\r\n              _this17.metadata = metadata;\r\n              _this17._contentDispositionFilename = contentDispositionFilename;\r\n              (_this17$_contentLengt = _this17._contentLength) !== null && _this17$_contentLengt !== void 0 ? _this17$_contentLengt : _this17._contentLength = contentLength;\r\n              console.log(\"PDF \".concat(pdfDocument.fingerprint, \" [\").concat(info.PDFFormatVersion, \" \") + \"\".concat((info.Producer || \"-\").trim(), \" / \").concat((info.Creator || \"-\").trim(), \"] \") + \"(PDF.js: \".concat(_pdfjsLib.version || \"-\") + \"\".concat(_this17.pdfViewer.enableWebGL ? \" [WebGL]\" : \"\", \")\"));\r\n              infoTitle = info === null || info === void 0 ? void 0 : info.Title;\r\n\r\n              if (infoTitle) {\r\n                pdfTitle = infoTitle;\r\n              }\r\n\r\n              metadataTitle = metadata === null || metadata === void 0 ? void 0 : metadata.get(\"dc:title\");\r\n\r\n              if (metadataTitle) {\r\n                if (metadataTitle !== \"Untitled\" && !/[\\uFFF0-\\uFFFF]/g.test(metadataTitle)) {\r\n                  pdfTitle = metadataTitle;\r\n                }\r\n              }\r\n\r\n              if (pdfTitle) {\r\n                _this17.setTitle(\"\".concat(pdfTitle, \" - \").concat(contentDispositionFilename || document.title));\r\n              } else if (contentDispositionFilename) {\r\n                _this17.setTitle(contentDispositionFilename);\r\n              }\r\n\r\n              if (info.IsXFAPresent && !info.IsAcroFormPresent) {\r\n                console.warn(\"Warning: XFA is not supported\");\r\n\r\n                _this17._delayedFallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms);\r\n              } else if ((info.IsAcroFormPresent || info.IsXFAPresent) && !_this17.pdfViewer.renderInteractiveForms) {\r\n                console.warn(\"Warning: Interactive form support is not enabled\");\r\n\r\n                _this17._delayedFallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms);\r\n              }\r\n\r\n              versionId = \"other\";\r\n\r\n              if (KNOWN_VERSIONS.includes(info.PDFFormatVersion)) {\r\n                versionId = \"v\".concat(info.PDFFormatVersion.replace(\".\", \"_\"));\r\n              }\r\n\r\n              generatorId = \"other\";\r\n\r\n              if (info.Producer) {\r\n                producer = info.Producer.toLowerCase();\r\n                KNOWN_GENERATORS.some(function (generator) {\r\n                  if (!producer.includes(generator)) {\r\n                    return false;\r\n                  }\r\n\r\n                  generatorId = generator.replace(/[ .-]/g, \"_\");\r\n                  return true;\r\n                });\r\n              }\r\n\r\n              formType = null;\r\n\r\n              if (info.IsXFAPresent) {\r\n                formType = \"xfa\";\r\n              } else if (info.IsAcroFormPresent) {\r\n                formType = \"acroform\";\r\n              }\r\n\r\n              _this17.externalServices.reportTelemetry({\r\n                type: \"documentInfo\",\r\n                version: versionId,\r\n                generator: generatorId,\r\n                formType: formType\r\n              });\r\n\r\n              _this17.eventBus.dispatch(\"metadataloaded\", {\r\n                source: _this17\r\n              });\r\n\r\n            case 28:\r\n            case \"end\":\r\n              return _context18.stop();\r\n          }\r\n        }\r\n      }, _callee18);\r\n    }))();\r\n  },\r\n  _initializePageLabels: function _initializePageLabels(pdfDocument) {\r\n    var _this18 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee19() {\r\n      var labels, numLabels, i, pdfViewer, pdfThumbnailViewer, toolbar;\r\n      return _regenerator[\"default\"].wrap(function _callee19$(_context19) {\r\n        while (1) {\r\n          switch (_context19.prev = _context19.next) {\r\n            case 0:\r\n              _context19.next = 2;\r\n              return pdfDocument.getPageLabels();\r\n\r\n            case 2:\r\n              labels = _context19.sent;\r\n\r\n              if (!(pdfDocument !== _this18.pdfDocument)) {\r\n                _context19.next = 5;\r\n                break;\r\n              }\r\n\r\n              return _context19.abrupt(\"return\");\r\n\r\n            case 5:\r\n              if (!(!labels || _app_options.AppOptions.get(\"disablePageLabels\"))) {\r\n                _context19.next = 7;\r\n                break;\r\n              }\r\n\r\n              return _context19.abrupt(\"return\");\r\n\r\n            case 7:\r\n              numLabels = labels.length;\r\n\r\n              if (!(numLabels !== _this18.pagesCount)) {\r\n                _context19.next = 11;\r\n                break;\r\n              }\r\n\r\n              console.error(\"The number of Page Labels does not match the number of pages in the document.\");\r\n              return _context19.abrupt(\"return\");\r\n\r\n            case 11:\r\n              i = 0;\r\n\r\n              while (i < numLabels && labels[i] === (i + 1).toString()) {\r\n                i++;\r\n              }\r\n\r\n              if (!(i === numLabels)) {\r\n                _context19.next = 15;\r\n                break;\r\n              }\r\n\r\n              return _context19.abrupt(\"return\");\r\n\r\n            case 15:\r\n              pdfViewer = _this18.pdfViewer, pdfThumbnailViewer = _this18.pdfThumbnailViewer, toolbar = _this18.toolbar;\r\n              pdfViewer.setPageLabels(labels);\r\n              pdfThumbnailViewer.setPageLabels(labels);\r\n              toolbar.setPagesCount(numLabels, true);\r\n              toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);\r\n\r\n            case 20:\r\n            case \"end\":\r\n              return _context19.stop();\r\n          }\r\n        }\r\n      }, _callee19);\r\n    }))();\r\n  },\r\n  _initializePdfHistory: function _initializePdfHistory(_ref15) {\r\n    var fingerprint = _ref15.fingerprint,\r\n        viewOnLoad = _ref15.viewOnLoad,\r\n        _ref15$initialDest = _ref15.initialDest,\r\n        initialDest = _ref15$initialDest === void 0 ? null : _ref15$initialDest;\r\n\r\n    if (this.isViewerEmbedded || _app_options.AppOptions.get(\"disableHistory\")) {\r\n      return;\r\n    }\r\n\r\n    this.pdfHistory.initialize({\r\n      fingerprint: fingerprint,\r\n      resetHistory: viewOnLoad === ViewOnLoad.INITIAL,\r\n      updateUrl: _app_options.AppOptions.get(\"historyUpdateUrl\")\r\n    });\r\n\r\n    if (this.pdfHistory.initialBookmark) {\r\n      this.initialBookmark = this.pdfHistory.initialBookmark;\r\n      this.initialRotation = this.pdfHistory.initialRotation;\r\n    }\r\n\r\n    if (initialDest && !this.initialBookmark && viewOnLoad === ViewOnLoad.UNKNOWN) {\r\n      this.initialBookmark = JSON.stringify(initialDest);\r\n      this.pdfHistory.push({\r\n        explicitDest: initialDest,\r\n        pageNumber: null\r\n      });\r\n    }\r\n  },\r\n  _initializePermissions: function _initializePermissions(pdfDocument) {\r\n    var _this19 = this;\r\n\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee20() {\r\n      var permissions;\r\n      return _regenerator[\"default\"].wrap(function _callee20$(_context20) {\r\n        while (1) {\r\n          switch (_context20.prev = _context20.next) {\r\n            case 0:\r\n              _context20.next = 2;\r\n              return pdfDocument.getPermissions();\r\n\r\n            case 2:\r\n              permissions = _context20.sent;\r\n\r\n              if (!(pdfDocument !== _this19.pdfDocument)) {\r\n                _context20.next = 5;\r\n                break;\r\n              }\r\n\r\n              return _context20.abrupt(\"return\");\r\n\r\n            case 5:\r\n              if (!(!permissions || !_app_options.AppOptions.get(\"enablePermissions\"))) {\r\n                _context20.next = 7;\r\n                break;\r\n              }\r\n\r\n              return _context20.abrupt(\"return\");\r\n\r\n            case 7:\r\n              if (!permissions.includes(_pdfjsLib.PermissionFlag.COPY)) {\r\n                _this19.appConfig.viewerContainer.classList.add(ENABLE_PERMISSIONS_CLASS);\r\n              }\r\n\r\n            case 8:\r\n            case \"end\":\r\n              return _context20.stop();\r\n          }\r\n        }\r\n      }, _callee20);\r\n    }))();\r\n  },\r\n  _initializeAnnotationStorageCallbacks: function _initializeAnnotationStorageCallbacks(pdfDocument) {\r\n    if (pdfDocument !== this.pdfDocument) {\r\n      return;\r\n    }\r\n\r\n    var annotationStorage = pdfDocument.annotationStorage;\r\n\r\n    annotationStorage.onSetModified = function () {\r\n      window.addEventListener(\"beforeunload\", beforeUnload);\r\n    };\r\n\r\n    annotationStorage.onResetModified = function () {\r\n      window.removeEventListener(\"beforeunload\", beforeUnload);\r\n    };\r\n  },\r\n  setInitialView: function setInitialView(storedHash) {\r\n    var _this20 = this;\r\n\r\n    var _ref16 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\r\n        rotation = _ref16.rotation,\r\n        sidebarView = _ref16.sidebarView,\r\n        scrollMode = _ref16.scrollMode,\r\n        spreadMode = _ref16.spreadMode;\r\n\r\n    var setRotation = function setRotation(angle) {\r\n      if ((0, _ui_utils.isValidRotation)(angle)) {\r\n        _this20.pdfViewer.pagesRotation = angle;\r\n      }\r\n    };\r\n\r\n    var setViewerModes = function setViewerModes(scroll, spread) {\r\n      if ((0, _ui_utils.isValidScrollMode)(scroll)) {\r\n        _this20.pdfViewer.scrollMode = scroll;\r\n      }\r\n\r\n      if ((0, _ui_utils.isValidSpreadMode)(spread)) {\r\n        _this20.pdfViewer.spreadMode = spread;\r\n      }\r\n    };\r\n\r\n    this.isInitialViewSet = true;\r\n    this.pdfSidebar.setInitialView(sidebarView);\r\n    setViewerModes(scrollMode, spreadMode);\r\n\r\n    if (this.initialBookmark) {\r\n      setRotation(this.initialRotation);\r\n      delete this.initialRotation;\r\n      this.pdfLinkService.setHash(this.initialBookmark);\r\n      this.initialBookmark = null;\r\n    } else if (storedHash) {\r\n      setRotation(rotation);\r\n      this.pdfLinkService.setHash(storedHash);\r\n    }\r\n\r\n    this.toolbar.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel);\r\n    this.secondaryToolbar.setPageNumber(this.pdfViewer.currentPageNumber);\r\n\r\n    if (!this.pdfViewer.currentScaleValue) {\r\n      this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;\r\n    }\r\n  },\r\n  cleanup: function cleanup() {\r\n    if (!this.pdfDocument) {\r\n      return;\r\n    }\r\n\r\n    this.pdfViewer.cleanup();\r\n    this.pdfThumbnailViewer.cleanup();\r\n\r\n    if (this.pdfViewer.renderer !== _ui_utils.RendererType.SVG) {\r\n      this.pdfDocument.cleanup();\r\n    }\r\n  },\r\n  forceRendering: function forceRendering() {\r\n    this.pdfRenderingQueue.printing = !!this.printService;\r\n    this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar.isThumbnailViewVisible;\r\n    this.pdfRenderingQueue.renderHighestPriority();\r\n  },\r\n  beforePrint: function beforePrint() {\r\n    var _this$_scriptingInsta,\r\n        _this21 = this;\r\n\r\n    (_this$_scriptingInsta = this._scriptingInstance) === null || _this$_scriptingInsta === void 0 ? void 0 : _this$_scriptingInsta.scripting.dispatchEventInSandbox({\r\n      id: \"doc\",\r\n      name: \"WillPrint\"\r\n    });\r\n\r\n    if (this.printService) {\r\n      return;\r\n    }\r\n\r\n    if (!this.supportsPrinting) {\r\n      this.l10n.get(\"printing_not_supported\", null, \"Warning: Printing is not fully supported by this browser.\").then(function (printMessage) {\r\n        _this21.error(printMessage);\r\n      });\r\n      return;\r\n    }\r\n\r\n    if (!this.pdfViewer.pageViewsReady) {\r\n      this.l10n.get(\"printing_not_ready\", null, \"Warning: The PDF is not fully loaded for printing.\").then(function (notReadyMessage) {\r\n        window.alert(notReadyMessage);\r\n      });\r\n      return;\r\n    }\r\n\r\n    var pagesOverview = this.pdfViewer.getPagesOverview();\r\n    var printContainer = this.appConfig.printContainer;\r\n\r\n    var printResolution = _app_options.AppOptions.get(\"printResolution\");\r\n\r\n    var optionalContentConfigPromise = this.pdfViewer.optionalContentConfigPromise;\r\n    var printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, this.l10n);\r\n    this.printService = printService;\r\n    this.forceRendering();\r\n    printService.layout();\r\n    this.externalServices.reportTelemetry({\r\n      type: \"print\"\r\n    });\r\n  },\r\n  afterPrint: function afterPrint() {\r\n    var _this$_scriptingInsta2;\r\n\r\n    (_this$_scriptingInsta2 = this._scriptingInstance) === null || _this$_scriptingInsta2 === void 0 ? void 0 : _this$_scriptingInsta2.scripting.dispatchEventInSandbox({\r\n      id: \"doc\",\r\n      name: \"DidPrint\"\r\n    });\r\n\r\n    if (this.printService) {\r\n      this.printService.destroy();\r\n      this.printService = null;\r\n\r\n      if (this.pdfDocument) {\r\n        this.pdfDocument.annotationStorage.resetModified();\r\n      }\r\n    }\r\n\r\n    this.forceRendering();\r\n  },\r\n  rotatePages: function rotatePages(delta) {\r\n    if (!this.pdfDocument) {\r\n      return;\r\n    }\r\n\r\n    var newRotation = (this.pdfViewer.pagesRotation + 360 + delta) % 360;\r\n    this.pdfViewer.pagesRotation = newRotation;\r\n  },\r\n  requestPresentationMode: function requestPresentationMode() {\r\n    if (!this.pdfPresentationMode) {\r\n      return;\r\n    }\r\n\r\n    this.pdfPresentationMode.request();\r\n  },\r\n  triggerPrinting: function triggerPrinting() {\r\n    if (!this.supportsPrinting) {\r\n      return;\r\n    }\r\n\r\n    window.print();\r\n  },\r\n  bindEvents: function bindEvents() {\r\n    var eventBus = this.eventBus,\r\n        _boundEvents = this._boundEvents;\r\n    _boundEvents.beforePrint = this.beforePrint.bind(this);\r\n    _boundEvents.afterPrint = this.afterPrint.bind(this);\r\n\r\n    eventBus._on(\"resize\", webViewerResize);\r\n\r\n    eventBus._on(\"hashchange\", webViewerHashchange);\r\n\r\n    eventBus._on(\"beforeprint\", _boundEvents.beforePrint);\r\n\r\n    eventBus._on(\"afterprint\", _boundEvents.afterPrint);\r\n\r\n    eventBus._on(\"pagerendered\", webViewerPageRendered);\r\n\r\n    eventBus._on(\"updateviewarea\", webViewerUpdateViewarea);\r\n\r\n    eventBus._on(\"pagechanging\", webViewerPageChanging);\r\n\r\n    eventBus._on(\"scalechanging\", webViewerScaleChanging);\r\n\r\n    eventBus._on(\"rotationchanging\", webViewerRotationChanging);\r\n\r\n    eventBus._on(\"sidebarviewchanged\", webViewerSidebarViewChanged);\r\n\r\n    eventBus._on(\"pagemode\", webViewerPageMode);\r\n\r\n    eventBus._on(\"namedaction\", webViewerNamedAction);\r\n\r\n    eventBus._on(\"presentationmodechanged\", webViewerPresentationModeChanged);\r\n\r\n    eventBus._on(\"presentationmode\", webViewerPresentationMode);\r\n\r\n    eventBus._on(\"print\", webViewerPrint);\r\n\r\n    eventBus._on(\"download\", webViewerDownload);\r\n\r\n    eventBus._on(\"save\", webViewerSave);\r\n\r\n    eventBus._on(\"firstpage\", webViewerFirstPage);\r\n\r\n    eventBus._on(\"lastpage\", webViewerLastPage);\r\n\r\n    eventBus._on(\"nextpage\", webViewerNextPage);\r\n\r\n    eventBus._on(\"previouspage\", webViewerPreviousPage);\r\n\r\n    eventBus._on(\"zoomin\", webViewerZoomIn);\r\n\r\n    eventBus._on(\"zoomout\", webViewerZoomOut);\r\n\r\n    eventBus._on(\"zoomreset\", webViewerZoomReset);\r\n\r\n    eventBus._on(\"pagenumberchanged\", webViewerPageNumberChanged);\r\n\r\n    eventBus._on(\"scalechanged\", webViewerScaleChanged);\r\n\r\n    eventBus._on(\"rotatecw\", webViewerRotateCw);\r\n\r\n    eventBus._on(\"rotateccw\", webViewerRotateCcw);\r\n\r\n    eventBus._on(\"optionalcontentconfig\", webViewerOptionalContentConfig);\r\n\r\n    eventBus._on(\"switchscrollmode\", webViewerSwitchScrollMode);\r\n\r\n    eventBus._on(\"scrollmodechanged\", webViewerScrollModeChanged);\r\n\r\n    eventBus._on(\"switchspreadmode\", webViewerSwitchSpreadMode);\r\n\r\n    eventBus._on(\"spreadmodechanged\", webViewerSpreadModeChanged);\r\n\r\n    eventBus._on(\"documentproperties\", webViewerDocumentProperties);\r\n\r\n    eventBus._on(\"find\", webViewerFind);\r\n\r\n    eventBus._on(\"findfromurlhash\", webViewerFindFromUrlHash);\r\n\r\n    eventBus._on(\"updatefindmatchescount\", webViewerUpdateFindMatchesCount);\r\n\r\n    eventBus._on(\"updatefindcontrolstate\", webViewerUpdateFindControlState);\r\n\r\n    if (_app_options.AppOptions.get(\"pdfBug\")) {\r\n      _boundEvents.reportPageStatsPDFBug = reportPageStatsPDFBug;\r\n\r\n      eventBus._on(\"pagerendered\", _boundEvents.reportPageStatsPDFBug);\r\n\r\n      eventBus._on(\"pagechanging\", _boundEvents.reportPageStatsPDFBug);\r\n    }\r\n\r\n    eventBus._on(\"fileinputchange\", webViewerFileInputChange);\r\n\r\n    eventBus._on(\"openfile\", webViewerOpenFile);\r\n  },\r\n  bindWindowEvents: function bindWindowEvents() {\r\n    var eventBus = this.eventBus,\r\n        _boundEvents = this._boundEvents;\r\n\r\n    _boundEvents.windowResize = function () {\r\n      eventBus.dispatch(\"resize\", {\r\n        source: window\r\n      });\r\n    };\r\n\r\n    _boundEvents.windowHashChange = function () {\r\n      eventBus.dispatch(\"hashchange\", {\r\n        source: window,\r\n        hash: document.location.hash.substring(1)\r\n      });\r\n    };\r\n\r\n    _boundEvents.windowBeforePrint = function () {\r\n      eventBus.dispatch(\"beforeprint\", {\r\n        source: window\r\n      });\r\n    };\r\n\r\n    _boundEvents.windowAfterPrint = function () {\r\n      eventBus.dispatch(\"afterprint\", {\r\n        source: window\r\n      });\r\n    };\r\n\r\n    _boundEvents.windowUpdateFromSandbox = function (event) {\r\n      eventBus.dispatch(\"updatefromsandbox\", {\r\n        source: window,\r\n        detail: event.detail\r\n      });\r\n    };\r\n\r\n    window.addEventListener(\"visibilitychange\", webViewerVisibilityChange);\r\n    window.addEventListener(\"wheel\", webViewerWheel, {\r\n      passive: false\r\n    });\r\n    window.addEventListener(\"touchstart\", webViewerTouchStart, {\r\n      passive: false\r\n    });\r\n    window.addEventListener(\"click\", webViewerClick);\r\n    window.addEventListener(\"keydown\", webViewerKeyDown);\r\n    window.addEventListener(\"keyup\", webViewerKeyUp);\r\n    window.addEventListener(\"resize\", _boundEvents.windowResize);\r\n    window.addEventListener(\"hashchange\", _boundEvents.windowHashChange);\r\n    window.addEventListener(\"beforeprint\", _boundEvents.windowBeforePrint);\r\n    window.addEventListener(\"afterprint\", _boundEvents.windowAfterPrint);\r\n    window.addEventListener(\"updatefromsandbox\", _boundEvents.windowUpdateFromSandbox);\r\n  },\r\n  unbindEvents: function unbindEvents() {\r\n    var eventBus = this.eventBus,\r\n        _boundEvents = this._boundEvents;\r\n\r\n    eventBus._off(\"resize\", webViewerResize);\r\n\r\n    eventBus._off(\"hashchange\", webViewerHashchange);\r\n\r\n    eventBus._off(\"beforeprint\", _boundEvents.beforePrint);\r\n\r\n    eventBus._off(\"afterprint\", _boundEvents.afterPrint);\r\n\r\n    eventBus._off(\"pagerendered\", webViewerPageRendered);\r\n\r\n    eventBus._off(\"updateviewarea\", webViewerUpdateViewarea);\r\n\r\n    eventBus._off(\"pagechanging\", webViewerPageChanging);\r\n\r\n    eventBus._off(\"scalechanging\", webViewerScaleChanging);\r\n\r\n    eventBus._off(\"rotationchanging\", webViewerRotationChanging);\r\n\r\n    eventBus._off(\"sidebarviewchanged\", webViewerSidebarViewChanged);\r\n\r\n    eventBus._off(\"pagemode\", webViewerPageMode);\r\n\r\n    eventBus._off(\"namedaction\", webViewerNamedAction);\r\n\r\n    eventBus._off(\"presentationmodechanged\", webViewerPresentationModeChanged);\r\n\r\n    eventBus._off(\"presentationmode\", webViewerPresentationMode);\r\n\r\n    eventBus._off(\"print\", webViewerPrint);\r\n\r\n    eventBus._off(\"download\", webViewerDownload);\r\n\r\n    eventBus._off(\"save\", webViewerSave);\r\n\r\n    eventBus._off(\"firstpage\", webViewerFirstPage);\r\n\r\n    eventBus._off(\"lastpage\", webViewerLastPage);\r\n\r\n    eventBus._off(\"nextpage\", webViewerNextPage);\r\n\r\n    eventBus._off(\"previouspage\", webViewerPreviousPage);\r\n\r\n    eventBus._off(\"zoomin\", webViewerZoomIn);\r\n\r\n    eventBus._off(\"zoomout\", webViewerZoomOut);\r\n\r\n    eventBus._off(\"zoomreset\", webViewerZoomReset);\r\n\r\n    eventBus._off(\"pagenumberchanged\", webViewerPageNumberChanged);\r\n\r\n    eventBus._off(\"scalechanged\", webViewerScaleChanged);\r\n\r\n    eventBus._off(\"rotatecw\", webViewerRotateCw);\r\n\r\n    eventBus._off(\"rotateccw\", webViewerRotateCcw);\r\n\r\n    eventBus._off(\"optionalcontentconfig\", webViewerOptionalContentConfig);\r\n\r\n    eventBus._off(\"switchscrollmode\", webViewerSwitchScrollMode);\r\n\r\n    eventBus._off(\"scrollmodechanged\", webViewerScrollModeChanged);\r\n\r\n    eventBus._off(\"switchspreadmode\", webViewerSwitchSpreadMode);\r\n\r\n    eventBus._off(\"spreadmodechanged\", webViewerSpreadModeChanged);\r\n\r\n    eventBus._off(\"documentproperties\", webViewerDocumentProperties);\r\n\r\n    eventBus._off(\"find\", webViewerFind);\r\n\r\n    eventBus._off(\"findfromurlhash\", webViewerFindFromUrlHash);\r\n\r\n    eventBus._off(\"updatefindmatchescount\", webViewerUpdateFindMatchesCount);\r\n\r\n    eventBus._off(\"updatefindcontrolstate\", webViewerUpdateFindControlState);\r\n\r\n    if (_boundEvents.reportPageStatsPDFBug) {\r\n      eventBus._off(\"pagerendered\", _boundEvents.reportPageStatsPDFBug);\r\n\r\n      eventBus._off(\"pagechanging\", _boundEvents.reportPageStatsPDFBug);\r\n\r\n      _boundEvents.reportPageStatsPDFBug = null;\r\n    }\r\n\r\n    eventBus._off(\"fileinputchange\", webViewerFileInputChange);\r\n\r\n    eventBus._off(\"openfile\", webViewerOpenFile);\r\n\r\n    _boundEvents.beforePrint = null;\r\n    _boundEvents.afterPrint = null;\r\n  },\r\n  unbindWindowEvents: function unbindWindowEvents() {\r\n    var _boundEvents = this._boundEvents;\r\n    window.removeEventListener(\"visibilitychange\", webViewerVisibilityChange);\r\n    window.removeEventListener(\"wheel\", webViewerWheel, {\r\n      passive: false\r\n    });\r\n    window.removeEventListener(\"touchstart\", webViewerTouchStart, {\r\n      passive: false\r\n    });\r\n    window.removeEventListener(\"click\", webViewerClick);\r\n    window.removeEventListener(\"keydown\", webViewerKeyDown);\r\n    window.removeEventListener(\"keyup\", webViewerKeyUp);\r\n    window.removeEventListener(\"resize\", _boundEvents.windowResize);\r\n    window.removeEventListener(\"hashchange\", _boundEvents.windowHashChange);\r\n    window.removeEventListener(\"beforeprint\", _boundEvents.windowBeforePrint);\r\n    window.removeEventListener(\"afterprint\", _boundEvents.windowAfterPrint);\r\n    window.removeEventListener(\"updatefromsandbox\", _boundEvents.windowUpdateFromSandbox);\r\n    _boundEvents.windowResize = null;\r\n    _boundEvents.windowHashChange = null;\r\n    _boundEvents.windowBeforePrint = null;\r\n    _boundEvents.windowAfterPrint = null;\r\n    _boundEvents.windowUpdateFromSandbox = null;\r\n  },\r\n  accumulateWheelTicks: function accumulateWheelTicks(ticks) {\r\n    if (this._wheelUnusedTicks > 0 && ticks < 0 || this._wheelUnusedTicks < 0 && ticks > 0) {\r\n      this._wheelUnusedTicks = 0;\r\n    }\r\n\r\n    this._wheelUnusedTicks += ticks;\r\n    var wholeTicks = Math.sign(this._wheelUnusedTicks) * Math.floor(Math.abs(this._wheelUnusedTicks));\r\n    this._wheelUnusedTicks -= wholeTicks;\r\n    return wholeTicks;\r\n  },\r\n  _unblockDocumentLoadEvent: function _unblockDocumentLoadEvent() {\r\n    if (document.blockUnblockOnload) {\r\n      document.blockUnblockOnload(false);\r\n    }\r\n\r\n    this._unblockDocumentLoadEvent = function () {};\r\n  },\r\n\r\n  get scriptingReady() {\r\n    var _this$_scriptingInsta3;\r\n\r\n    return ((_this$_scriptingInsta3 = this._scriptingInstance) === null || _this$_scriptingInsta3 === void 0 ? void 0 : _this$_scriptingInsta3.ready) || false;\r\n  }\r\n\r\n};\r\nexports.PDFViewerApplication = PDFViewerApplication;\r\nvar validateFileURL;\r\n{\r\n  var HOSTED_VIEWER_ORIGINS = [\"null\", \"http://mozilla.github.io\", \"https://mozilla.github.io\"];\r\n\r\n  validateFileURL = function validateFileURL(file) {\r\n    if (file === undefined) {\r\n      return;\r\n    }\r\n\r\n    try {\r\n      var viewerOrigin = new URL(window.location.href).origin || \"null\";\r\n\r\n      if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) {\r\n        return;\r\n      }\r\n\r\n      var _URL = new URL(file, window.location.href),\r\n          origin = _URL.origin,\r\n          protocol = _URL.protocol;\r\n\r\n      if (origin !== viewerOrigin && protocol !== \"blob:\") {\r\n        throw new Error(\"file origin does not match viewer's\");\r\n      }\r\n    } catch (ex) {\r\n      PDFViewerApplication.l10n.get(\"loading_error\", null, \"An error occurred while loading the PDF.\").then(function (loadingErrorMessage) {\r\n        PDFViewerApplication.error(loadingErrorMessage, {\r\n          message: ex === null || ex === void 0 ? void 0 : ex.message\r\n        });\r\n      });\r\n      throw ex;\r\n    }\r\n  };\r\n}\r\n\r\nfunction loadFakeWorker() {\r\n  return _loadFakeWorker.apply(this, arguments);\r\n}\r\n\r\nfunction _loadFakeWorker() {\r\n  _loadFakeWorker = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee21() {\r\n    return _regenerator[\"default\"].wrap(function _callee21$(_context21) {\r\n      while (1) {\r\n        switch (_context21.prev = _context21.next) {\r\n          case 0:\r\n            if (!_pdfjsLib.GlobalWorkerOptions.workerSrc) {\r\n              _pdfjsLib.GlobalWorkerOptions.workerSrc = _app_options.AppOptions.get(\"workerSrc\");\r\n            }\r\n\r\n            return _context21.abrupt(\"return\", (0, _pdfjsLib.loadScript)(_pdfjsLib.PDFWorker.getWorkerSrc()));\r\n\r\n          case 2:\r\n          case \"end\":\r\n            return _context21.stop();\r\n        }\r\n      }\r\n    }, _callee21);\r\n  }));\r\n  return _loadFakeWorker.apply(this, arguments);\r\n}\r\n\r\nfunction loadAndEnablePDFBug(enabledTabs) {\r\n  var appConfig = PDFViewerApplication.appConfig;\r\n  return (0, _pdfjsLib.loadScript)(appConfig.debuggerScriptPath).then(function () {\r\n    PDFBug.enable(enabledTabs);\r\n    PDFBug.init({\r\n      OPS: _pdfjsLib.OPS\r\n    }, appConfig.mainContainer);\r\n  });\r\n}\r\n\r\nfunction reportPageStatsPDFBug(_ref17) {\r\n  var _pageView$pdfPage;\r\n\r\n  var pageNumber = _ref17.pageNumber;\r\n\r\n  if (typeof Stats === \"undefined\" || !Stats.enabled) {\r\n    return;\r\n  }\r\n\r\n  var pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);\r\n  var pageStats = pageView === null || pageView === void 0 ? void 0 : (_pageView$pdfPage = pageView.pdfPage) === null || _pageView$pdfPage === void 0 ? void 0 : _pageView$pdfPage.stats;\r\n\r\n  if (!pageStats) {\r\n    return;\r\n  }\r\n\r\n  Stats.add(pageNumber, pageStats);\r\n}\r\n\r\nfunction webViewerInitialized() {\r\n  var appConfig = PDFViewerApplication.appConfig;\r\n  var file;\r\n  var queryString = document.location.search.substring(1);\r\n  var params = (0, _ui_utils.parseQueryString)(queryString);\r\n  file = \"file\" in params ? params.file : _app_options.AppOptions.get(\"defaultUrl\");\r\n  validateFileURL(file);\r\n  var fileInput = document.createElement(\"input\");\r\n  fileInput.id = appConfig.openFileInputName;\r\n  fileInput.className = \"fileInput\";\r\n  fileInput.setAttribute(\"type\", \"file\");\r\n  fileInput.oncontextmenu = _ui_utils.noContextMenuHandler;\r\n  document.body.appendChild(fileInput);\r\n\r\n  if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {\r\n    appConfig.toolbar.openFile.setAttribute(\"hidden\", \"true\");\r\n    appConfig.secondaryToolbar.openFileButton.setAttribute(\"hidden\", \"true\");\r\n  } else {\r\n    fileInput.value = null;\r\n  }\r\n\r\n  fileInput.addEventListener(\"change\", function (evt) {\r\n    var files = evt.target.files;\r\n\r\n    if (!files || files.length === 0) {\r\n      return;\r\n    }\r\n\r\n    PDFViewerApplication.eventBus.dispatch(\"fileinputchange\", {\r\n      source: this,\r\n      fileInput: evt.target\r\n    });\r\n  });\r\n  appConfig.mainContainer.addEventListener(\"dragover\", function (evt) {\r\n    evt.preventDefault();\r\n    evt.dataTransfer.dropEffect = \"move\";\r\n  });\r\n  appConfig.mainContainer.addEventListener(\"drop\", function (evt) {\r\n    evt.preventDefault();\r\n    var files = evt.dataTransfer.files;\r\n\r\n    if (!files || files.length === 0) {\r\n      return;\r\n    }\r\n\r\n    PDFViewerApplication.eventBus.dispatch(\"fileinputchange\", {\r\n      source: this,\r\n      fileInput: evt.dataTransfer\r\n    });\r\n  });\r\n\r\n  if (!PDFViewerApplication.supportsDocumentFonts) {\r\n    _app_options.AppOptions.set(\"disableFontFace\", true);\r\n\r\n    PDFViewerApplication.l10n.get(\"web_fonts_disabled\", null, \"Web fonts are disabled: unable to use embedded PDF fonts.\").then(function (msg) {\r\n      console.warn(msg);\r\n    });\r\n  }\r\n\r\n  if (!PDFViewerApplication.supportsPrinting) {\r\n    appConfig.toolbar.print.classList.add(\"hidden\");\r\n    appConfig.secondaryToolbar.printButton.classList.add(\"hidden\");\r\n  }\r\n\r\n  if (!PDFViewerApplication.supportsFullscreen) {\r\n    appConfig.toolbar.presentationModeButton.classList.add(\"hidden\");\r\n    appConfig.secondaryToolbar.presentationModeButton.classList.add(\"hidden\");\r\n  }\r\n\r\n  if (PDFViewerApplication.supportsIntegratedFind) {\r\n    appConfig.toolbar.viewFind.classList.add(\"hidden\");\r\n  }\r\n\r\n  appConfig.mainContainer.addEventListener(\"transitionend\", function (evt) {\r\n    if (evt.target === this) {\r\n      PDFViewerApplication.eventBus.dispatch(\"resize\", {\r\n        source: this\r\n      });\r\n    }\r\n  }, true);\r\n\r\n  try {\r\n    webViewerOpenFileViaURL(file);\r\n  } catch (reason) {\r\n    PDFViewerApplication.l10n.get(\"loading_error\", null, \"An error occurred while loading the PDF.\").then(function (msg) {\r\n      PDFViewerApplication.error(msg, reason);\r\n    });\r\n  }\r\n}\r\n\r\nvar webViewerOpenFileViaURL;\r\n{\r\n  webViewerOpenFileViaURL = function webViewerOpenFileViaURL(file) {\r\n    if (file && file.lastIndexOf(\"file:\", 0) === 0) {\r\n      PDFViewerApplication.setTitleUsingUrl(file);\r\n      var xhr = new XMLHttpRequest();\r\n\r\n      xhr.onload = function () {\r\n        PDFViewerApplication.open(new Uint8Array(xhr.response));\r\n      };\r\n\r\n      xhr.open(\"GET\", file);\r\n      xhr.responseType = \"arraybuffer\";\r\n      xhr.send();\r\n      return;\r\n    }\r\n\r\n    if (file) {\r\n      PDFViewerApplication.open(file);\r\n    }\r\n  };\r\n}\r\n\r\nfunction webViewerResetPermissions() {\r\n  var appConfig = PDFViewerApplication.appConfig;\r\n\r\n  if (!appConfig) {\r\n    return;\r\n  }\r\n\r\n  appConfig.viewerContainer.classList.remove(ENABLE_PERMISSIONS_CLASS);\r\n}\r\n\r\nfunction webViewerPageRendered(_ref18) {\r\n  var pageNumber = _ref18.pageNumber,\r\n      timestamp = _ref18.timestamp,\r\n      error = _ref18.error;\r\n\r\n  if (pageNumber === PDFViewerApplication.page) {\r\n    PDFViewerApplication.toolbar.updateLoadingIndicatorState(false);\r\n  }\r\n\r\n  if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) {\r\n    var pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);\r\n    var thumbnailView = PDFViewerApplication.pdfThumbnailViewer.getThumbnail(pageNumber - 1);\r\n\r\n    if (pageView && thumbnailView) {\r\n      thumbnailView.setImage(pageView);\r\n    }\r\n  }\r\n\r\n  if (error) {\r\n    PDFViewerApplication.l10n.get(\"rendering_error\", null, \"An error occurred while rendering the page.\").then(function (msg) {\r\n      PDFViewerApplication.error(msg, error);\r\n    });\r\n  }\r\n\r\n  PDFViewerApplication.externalServices.reportTelemetry({\r\n    type: \"pageInfo\",\r\n    timestamp: timestamp\r\n  });\r\n  PDFViewerApplication.pdfDocument.getStats().then(function (stats) {\r\n    PDFViewerApplication.externalServices.reportTelemetry({\r\n      type: \"documentStats\",\r\n      stats: stats\r\n    });\r\n  });\r\n}\r\n\r\nfunction webViewerPageMode(_ref19) {\r\n  var mode = _ref19.mode;\r\n  var view;\r\n\r\n  switch (mode) {\r\n    case \"thumbs\":\r\n      view = _ui_utils.SidebarView.THUMBS;\r\n      break;\r\n\r\n    case \"bookmarks\":\r\n    case \"outline\":\r\n      view = _ui_utils.SidebarView.OUTLINE;\r\n      break;\r\n\r\n    case \"attachments\":\r\n      view = _ui_utils.SidebarView.ATTACHMENTS;\r\n      break;\r\n\r\n    case \"layers\":\r\n      view = _ui_utils.SidebarView.LAYERS;\r\n      break;\r\n\r\n    case \"none\":\r\n      view = _ui_utils.SidebarView.NONE;\r\n      break;\r\n\r\n    default:\r\n      console.error('Invalid \"pagemode\" hash parameter: ' + mode);\r\n      return;\r\n  }\r\n\r\n  PDFViewerApplication.pdfSidebar.switchView(view, true);\r\n}\r\n\r\nfunction webViewerNamedAction(evt) {\r\n  switch (evt.action) {\r\n    case \"GoToPage\":\r\n      PDFViewerApplication.appConfig.toolbar.pageNumber.select();\r\n      break;\r\n\r\n    case \"Find\":\r\n      if (!PDFViewerApplication.supportsIntegratedFind) {\r\n        PDFViewerApplication.findBar.toggle();\r\n      }\r\n\r\n      break;\r\n\r\n    case \"Print\":\r\n      PDFViewerApplication.triggerPrinting();\r\n      break;\r\n\r\n    case \"SaveAs\":\r\n      webViewerSave();\r\n      break;\r\n  }\r\n}\r\n\r\nfunction webViewerPresentationModeChanged(evt) {\r\n  PDFViewerApplication.pdfViewer.presentationModeState = evt.state;\r\n}\r\n\r\nfunction webViewerSidebarViewChanged(evt) {\r\n  PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = PDFViewerApplication.pdfSidebar.isThumbnailViewVisible;\r\n  var store = PDFViewerApplication.store;\r\n\r\n  if (store && PDFViewerApplication.isInitialViewSet) {\r\n    store.set(\"sidebarView\", evt.view)[\"catch\"](function () {});\r\n  }\r\n}\r\n\r\nfunction webViewerUpdateViewarea(evt) {\r\n  var location = evt.location,\r\n      store = PDFViewerApplication.store;\r\n\r\n  if (store && PDFViewerApplication.isInitialViewSet) {\r\n    store.setMultiple({\r\n      page: location.pageNumber,\r\n      zoom: location.scale,\r\n      scrollLeft: location.left,\r\n      scrollTop: location.top,\r\n      rotation: location.rotation\r\n    })[\"catch\"](function () {});\r\n  }\r\n\r\n  var href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams);\r\n  PDFViewerApplication.appConfig.toolbar.viewBookmark.href = href;\r\n  PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href;\r\n  var currentPage = PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1);\r\n  var loading = (currentPage === null || currentPage === void 0 ? void 0 : currentPage.renderingState) !== _pdf_rendering_queue.RenderingStates.FINISHED;\r\n  PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading);\r\n}\r\n\r\nfunction webViewerScrollModeChanged(evt) {\r\n  var store = PDFViewerApplication.store;\r\n\r\n  if (store && PDFViewerApplication.isInitialViewSet) {\r\n    store.set(\"scrollMode\", evt.mode)[\"catch\"](function () {});\r\n  }\r\n}\r\n\r\nfunction webViewerSpreadModeChanged(evt) {\r\n  var store = PDFViewerApplication.store;\r\n\r\n  if (store && PDFViewerApplication.isInitialViewSet) {\r\n    store.set(\"spreadMode\", evt.mode)[\"catch\"](function () {});\r\n  }\r\n}\r\n\r\nfunction webViewerResize() {\r\n  var pdfDocument = PDFViewerApplication.pdfDocument,\r\n      pdfViewer = PDFViewerApplication.pdfViewer;\r\n\r\n  if (!pdfDocument) {\r\n    return;\r\n  }\r\n\r\n  var currentScaleValue = pdfViewer.currentScaleValue;\r\n\r\n  if (currentScaleValue === \"auto\" || currentScaleValue === \"page-fit\" || currentScaleValue === \"page-width\") {\r\n    pdfViewer.currentScaleValue = currentScaleValue;\r\n  }\r\n\r\n  pdfViewer.update();\r\n}\r\n\r\nfunction webViewerHashchange(evt) {\r\n  var hash = evt.hash;\r\n\r\n  if (!hash) {\r\n    return;\r\n  }\r\n\r\n  if (!PDFViewerApplication.isInitialViewSet) {\r\n    PDFViewerApplication.initialBookmark = hash;\r\n  } else if (!PDFViewerApplication.pdfHistory.popStateInProgress) {\r\n    PDFViewerApplication.pdfLinkService.setHash(hash);\r\n  }\r\n}\r\n\r\nvar webViewerFileInputChange, webViewerOpenFile;\r\n{\r\n  webViewerFileInputChange = function webViewerFileInputChange(evt) {\r\n    var _PDFViewerApplication;\r\n\r\n    if ((_PDFViewerApplication = PDFViewerApplication.pdfViewer) !== null && _PDFViewerApplication !== void 0 && _PDFViewerApplication.isInPresentationMode) {\r\n      return;\r\n    }\r\n\r\n    var file = evt.fileInput.files[0];\r\n\r\n    if (!_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {\r\n      var url = URL.createObjectURL(file);\r\n\r\n      if (file.name) {\r\n        url = {\r\n          url: url,\r\n          originalUrl: file.name\r\n        };\r\n      }\r\n\r\n      PDFViewerApplication.open(url);\r\n    } else {\r\n      PDFViewerApplication.setTitleUsingUrl(file.name);\r\n      var fileReader = new FileReader();\r\n\r\n      fileReader.onload = function webViewerChangeFileReaderOnload(event) {\r\n        var buffer = event.target.result;\r\n        PDFViewerApplication.open(new Uint8Array(buffer));\r\n      };\r\n\r\n      fileReader.readAsArrayBuffer(file);\r\n    }\r\n\r\n    var appConfig = PDFViewerApplication.appConfig;\r\n    appConfig.toolbar.viewBookmark.setAttribute(\"hidden\", \"true\");\r\n    appConfig.secondaryToolbar.viewBookmarkButton.setAttribute(\"hidden\", \"true\");\r\n    appConfig.toolbar.download.setAttribute(\"hidden\", \"true\");\r\n    appConfig.secondaryToolbar.downloadButton.setAttribute(\"hidden\", \"true\");\r\n  };\r\n\r\n  webViewerOpenFile = function webViewerOpenFile(evt) {\r\n    var openFileInputName = PDFViewerApplication.appConfig.openFileInputName;\r\n    document.getElementById(openFileInputName).click();\r\n  };\r\n}\r\n\r\nfunction webViewerPresentationMode() {\r\n  PDFViewerApplication.requestPresentationMode();\r\n}\r\n\r\nfunction webViewerPrint() {\r\n  PDFViewerApplication.triggerPrinting();\r\n}\r\n\r\nfunction webViewerDownload() {\r\n  PDFViewerApplication.downloadOrSave({\r\n    sourceEventType: \"download\"\r\n  });\r\n}\r\n\r\nfunction webViewerSave() {\r\n  PDFViewerApplication.downloadOrSave({\r\n    sourceEventType: \"save\"\r\n  });\r\n}\r\n\r\nfunction webViewerFirstPage() {\r\n  if (PDFViewerApplication.pdfDocument) {\r\n    PDFViewerApplication.page = 1;\r\n  }\r\n}\r\n\r\nfunction webViewerLastPage() {\r\n  if (PDFViewerApplication.pdfDocument) {\r\n    PDFViewerApplication.page = PDFViewerApplication.pagesCount;\r\n  }\r\n}\r\n\r\nfunction webViewerNextPage() {\r\n  PDFViewerApplication.pdfViewer.nextPage();\r\n}\r\n\r\nfunction webViewerPreviousPage() {\r\n  PDFViewerApplication.pdfViewer.previousPage();\r\n}\r\n\r\nfunction webViewerZoomIn() {\r\n  PDFViewerApplication.zoomIn();\r\n}\r\n\r\nfunction webViewerZoomOut() {\r\n  PDFViewerApplication.zoomOut();\r\n}\r\n\r\nfunction webViewerZoomReset() {\r\n  PDFViewerApplication.zoomReset();\r\n}\r\n\r\nfunction webViewerPageNumberChanged(evt) {\r\n  var pdfViewer = PDFViewerApplication.pdfViewer;\r\n\r\n  if (evt.value !== \"\") {\r\n    PDFViewerApplication.pdfLinkService.goToPage(evt.value);\r\n  }\r\n\r\n  if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) {\r\n    PDFViewerApplication.toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);\r\n  }\r\n}\r\n\r\nfunction webViewerScaleChanged(evt) {\r\n  PDFViewerApplication.pdfViewer.currentScaleValue = evt.value;\r\n}\r\n\r\nfunction webViewerRotateCw() {\r\n  PDFViewerApplication.rotatePages(90);\r\n}\r\n\r\nfunction webViewerRotateCcw() {\r\n  PDFViewerApplication.rotatePages(-90);\r\n}\r\n\r\nfunction webViewerOptionalContentConfig(evt) {\r\n  PDFViewerApplication.pdfViewer.optionalContentConfigPromise = evt.promise;\r\n}\r\n\r\nfunction webViewerSwitchScrollMode(evt) {\r\n  PDFViewerApplication.pdfViewer.scrollMode = evt.mode;\r\n}\r\n\r\nfunction webViewerSwitchSpreadMode(evt) {\r\n  PDFViewerApplication.pdfViewer.spreadMode = evt.mode;\r\n}\r\n\r\nfunction webViewerDocumentProperties() {\r\n  PDFViewerApplication.pdfDocumentProperties.open();\r\n}\r\n\r\nfunction webViewerFind(evt) {\r\n  PDFViewerApplication.findController.executeCommand(\"find\" + evt.type, {\r\n    query: evt.query,\r\n    phraseSearch: evt.phraseSearch,\r\n    caseSensitive: evt.caseSensitive,\r\n    entireWord: evt.entireWord,\r\n    highlightAll: evt.highlightAll,\r\n    findPrevious: evt.findPrevious\r\n  });\r\n}\r\n\r\nfunction webViewerFindFromUrlHash(evt) {\r\n  PDFViewerApplication.findController.executeCommand(\"find\", {\r\n    query: evt.query,\r\n    phraseSearch: evt.phraseSearch,\r\n    caseSensitive: false,\r\n    entireWord: false,\r\n    highlightAll: true,\r\n    findPrevious: false\r\n  });\r\n}\r\n\r\nfunction webViewerUpdateFindMatchesCount(_ref20) {\r\n  var matchesCount = _ref20.matchesCount;\r\n\r\n  if (PDFViewerApplication.supportsIntegratedFind) {\r\n    PDFViewerApplication.externalServices.updateFindMatchesCount(matchesCount);\r\n  } else {\r\n    PDFViewerApplication.findBar.updateResultsCount(matchesCount);\r\n  }\r\n}\r\n\r\nfunction webViewerUpdateFindControlState(_ref21) {\r\n  var state = _ref21.state,\r\n      previous = _ref21.previous,\r\n      matchesCount = _ref21.matchesCount,\r\n      rawQuery = _ref21.rawQuery;\r\n\r\n  if (PDFViewerApplication.supportsIntegratedFind) {\r\n    PDFViewerApplication.externalServices.updateFindControlState({\r\n      result: state,\r\n      findPrevious: previous,\r\n      matchesCount: matchesCount,\r\n      rawQuery: rawQuery\r\n    });\r\n  } else {\r\n    PDFViewerApplication.findBar.updateUIState(state, previous, matchesCount);\r\n  }\r\n}\r\n\r\nfunction webViewerScaleChanging(evt) {\r\n  PDFViewerApplication.toolbar.setPageScale(evt.presetValue, evt.scale);\r\n  PDFViewerApplication.pdfViewer.update();\r\n}\r\n\r\nfunction webViewerRotationChanging(evt) {\r\n  PDFViewerApplication.pdfThumbnailViewer.pagesRotation = evt.pagesRotation;\r\n  PDFViewerApplication.forceRendering();\r\n  PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber;\r\n}\r\n\r\nfunction webViewerPageChanging(_ref22) {\r\n  var pageNumber = _ref22.pageNumber,\r\n      pageLabel = _ref22.pageLabel;\r\n  PDFViewerApplication.toolbar.setPageNumber(pageNumber, pageLabel);\r\n  PDFViewerApplication.secondaryToolbar.setPageNumber(pageNumber);\r\n\r\n  if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) {\r\n    PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(pageNumber);\r\n  }\r\n}\r\n\r\nfunction webViewerVisibilityChange(evt) {\r\n  if (document.visibilityState === \"visible\") {\r\n    setZoomDisabledTimeout();\r\n  }\r\n}\r\n\r\nvar zoomDisabledTimeout = null;\r\n\r\nfunction setZoomDisabledTimeout() {\r\n  if (zoomDisabledTimeout) {\r\n    clearTimeout(zoomDisabledTimeout);\r\n  }\r\n\r\n  zoomDisabledTimeout = setTimeout(function () {\r\n    zoomDisabledTimeout = null;\r\n  }, WHEEL_ZOOM_DISABLED_TIMEOUT);\r\n}\r\n\r\nfunction webViewerWheel(evt) {\r\n  var pdfViewer = PDFViewerApplication.pdfViewer,\r\n      supportedMouseWheelZoomModifierKeys = PDFViewerApplication.supportedMouseWheelZoomModifierKeys;\r\n\r\n  if (pdfViewer.isInPresentationMode) {\r\n    return;\r\n  }\r\n\r\n  if (evt.ctrlKey && supportedMouseWheelZoomModifierKeys.ctrlKey || evt.metaKey && supportedMouseWheelZoomModifierKeys.metaKey) {\r\n    evt.preventDefault();\r\n\r\n    if (zoomDisabledTimeout || document.visibilityState === \"hidden\") {\r\n      return;\r\n    }\r\n\r\n    var previousScale = pdfViewer.currentScale;\r\n    var delta = (0, _ui_utils.normalizeWheelEventDirection)(evt);\r\n    var ticks = 0;\r\n\r\n    if (evt.deltaMode === WheelEvent.DOM_DELTA_LINE || evt.deltaMode === WheelEvent.DOM_DELTA_PAGE) {\r\n      if (Math.abs(delta) >= 1) {\r\n        ticks = Math.sign(delta);\r\n      } else {\r\n        ticks = PDFViewerApplication.accumulateWheelTicks(delta);\r\n      }\r\n    } else {\r\n      var PIXELS_PER_LINE_SCALE = 30;\r\n      ticks = PDFViewerApplication.accumulateWheelTicks(delta / PIXELS_PER_LINE_SCALE);\r\n    }\r\n\r\n    if (ticks < 0) {\r\n      PDFViewerApplication.zoomOut(-ticks);\r\n    } else if (ticks > 0) {\r\n      PDFViewerApplication.zoomIn(ticks);\r\n    }\r\n\r\n    var currentScale = pdfViewer.currentScale;\r\n\r\n    if (previousScale !== currentScale) {\r\n      var scaleCorrectionFactor = currentScale / previousScale - 1;\r\n      var rect = pdfViewer.container.getBoundingClientRect();\r\n      var dx = evt.clientX - rect.left;\r\n      var dy = evt.clientY - rect.top;\r\n      pdfViewer.container.scrollLeft += dx * scaleCorrectionFactor;\r\n      pdfViewer.container.scrollTop += dy * scaleCorrectionFactor;\r\n    }\r\n  } else {\r\n    setZoomDisabledTimeout();\r\n  }\r\n}\r\n\r\nfunction webViewerTouchStart(evt) {\r\n  if (evt.touches.length > 1) {\r\n    evt.preventDefault();\r\n  }\r\n}\r\n\r\nfunction webViewerClick(evt) {\r\n  if (PDFViewerApplication.triggerDelayedFallback && PDFViewerApplication.pdfViewer.containsElement(evt.target)) {\r\n    PDFViewerApplication.triggerDelayedFallback();\r\n  }\r\n\r\n  if (!PDFViewerApplication.secondaryToolbar.isOpen) {\r\n    return;\r\n  }\r\n\r\n  var appConfig = PDFViewerApplication.appConfig;\r\n\r\n  if (PDFViewerApplication.pdfViewer.containsElement(evt.target) || appConfig.toolbar.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar.toggleButton) {\r\n    PDFViewerApplication.secondaryToolbar.close();\r\n  }\r\n}\r\n\r\nfunction webViewerKeyUp(evt) {\r\n  if (evt.keyCode === 9) {\r\n    if (PDFViewerApplication.triggerDelayedFallback) {\r\n      PDFViewerApplication.triggerDelayedFallback();\r\n    }\r\n  }\r\n}\r\n\r\nfunction webViewerKeyDown(evt) {\r\n  if (PDFViewerApplication.overlayManager.active) {\r\n    return;\r\n  }\r\n\r\n  var handled = false,\r\n      ensureViewerFocused = false;\r\n  var cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0);\r\n  var pdfViewer = PDFViewerApplication.pdfViewer;\r\n  var isViewerInPresentationMode = pdfViewer === null || pdfViewer === void 0 ? void 0 : pdfViewer.isInPresentationMode;\r\n\r\n  if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) {\r\n    switch (evt.keyCode) {\r\n      case 70:\r\n        if (!PDFViewerApplication.supportsIntegratedFind && !evt.shiftKey) {\r\n          PDFViewerApplication.findBar.open();\r\n          handled = true;\r\n        }\r\n\r\n        break;\r\n\r\n      case 71:\r\n        if (!PDFViewerApplication.supportsIntegratedFind) {\r\n          var findState = PDFViewerApplication.findController.state;\r\n\r\n          if (findState) {\r\n            PDFViewerApplication.findController.executeCommand(\"findagain\", {\r\n              query: findState.query,\r\n              phraseSearch: findState.phraseSearch,\r\n              caseSensitive: findState.caseSensitive,\r\n              entireWord: findState.entireWord,\r\n              highlightAll: findState.highlightAll,\r\n              findPrevious: cmd === 5 || cmd === 12\r\n            });\r\n          }\r\n\r\n          handled = true;\r\n        }\r\n\r\n        break;\r\n\r\n      case 61:\r\n      case 107:\r\n      case 187:\r\n      case 171:\r\n        if (!isViewerInPresentationMode) {\r\n          PDFViewerApplication.zoomIn();\r\n        }\r\n\r\n        handled = true;\r\n        break;\r\n\r\n      case 173:\r\n      case 109:\r\n      case 189:\r\n        if (!isViewerInPresentationMode) {\r\n          PDFViewerApplication.zoomOut();\r\n        }\r\n\r\n        handled = true;\r\n        break;\r\n\r\n      case 48:\r\n      case 96:\r\n        if (!isViewerInPresentationMode) {\r\n          setTimeout(function () {\r\n            PDFViewerApplication.zoomReset();\r\n          });\r\n          handled = false;\r\n        }\r\n\r\n        break;\r\n\r\n      case 38:\r\n        if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {\r\n          PDFViewerApplication.page = 1;\r\n          handled = true;\r\n          ensureViewerFocused = true;\r\n        }\r\n\r\n        break;\r\n\r\n      case 40:\r\n        if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {\r\n          PDFViewerApplication.page = PDFViewerApplication.pagesCount;\r\n          handled = true;\r\n          ensureViewerFocused = true;\r\n        }\r\n\r\n        break;\r\n    }\r\n  }\r\n\r\n  var eventBus = PDFViewerApplication.eventBus;\r\n\r\n  if (cmd === 1 || cmd === 8) {\r\n    switch (evt.keyCode) {\r\n      case 83:\r\n        eventBus.dispatch(\"download\", {\r\n          source: window\r\n        });\r\n        handled = true;\r\n        break;\r\n\r\n      case 79:\r\n        {\r\n          eventBus.dispatch(\"openfile\", {\r\n            source: window\r\n          });\r\n          handled = true;\r\n        }\r\n        break;\r\n    }\r\n  }\r\n\r\n  if (cmd === 3 || cmd === 10) {\r\n    switch (evt.keyCode) {\r\n      case 80:\r\n        PDFViewerApplication.requestPresentationMode();\r\n        handled = true;\r\n        break;\r\n\r\n      case 71:\r\n        PDFViewerApplication.appConfig.toolbar.pageNumber.select();\r\n        handled = true;\r\n        break;\r\n    }\r\n  }\r\n\r\n  if (handled) {\r\n    if (ensureViewerFocused && !isViewerInPresentationMode) {\r\n      pdfViewer.focus();\r\n    }\r\n\r\n    evt.preventDefault();\r\n    return;\r\n  }\r\n\r\n  var curElement = (0, _ui_utils.getActiveOrFocusedElement)();\r\n  var curElementTagName = curElement === null || curElement === void 0 ? void 0 : curElement.tagName.toUpperCase();\r\n\r\n  if (curElementTagName === \"INPUT\" || curElementTagName === \"TEXTAREA\" || curElementTagName === \"SELECT\" || curElement !== null && curElement !== void 0 && curElement.isContentEditable) {\r\n    if (evt.keyCode !== 27) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  if (cmd === 0) {\r\n    var turnPage = 0,\r\n        turnOnlyIfPageFit = false;\r\n\r\n    switch (evt.keyCode) {\r\n      case 38:\r\n      case 33:\r\n        if (pdfViewer.isVerticalScrollbarEnabled) {\r\n          turnOnlyIfPageFit = true;\r\n        }\r\n\r\n        turnPage = -1;\r\n        break;\r\n\r\n      case 8:\r\n        if (!isViewerInPresentationMode) {\r\n          turnOnlyIfPageFit = true;\r\n        }\r\n\r\n        turnPage = -1;\r\n        break;\r\n\r\n      case 37:\r\n        if (pdfViewer.isHorizontalScrollbarEnabled) {\r\n          turnOnlyIfPageFit = true;\r\n        }\r\n\r\n      case 75:\r\n      case 80:\r\n        turnPage = -1;\r\n        break;\r\n\r\n      case 27:\r\n        if (PDFViewerApplication.secondaryToolbar.isOpen) {\r\n          PDFViewerApplication.secondaryToolbar.close();\r\n          handled = true;\r\n        }\r\n\r\n        if (!PDFViewerApplication.supportsIntegratedFind && PDFViewerApplication.findBar.opened) {\r\n          PDFViewerApplication.findBar.close();\r\n          handled = true;\r\n        }\r\n\r\n        break;\r\n\r\n      case 40:\r\n      case 34:\r\n        if (pdfViewer.isVerticalScrollbarEnabled) {\r\n          turnOnlyIfPageFit = true;\r\n        }\r\n\r\n        turnPage = 1;\r\n        break;\r\n\r\n      case 13:\r\n      case 32:\r\n        if (!isViewerInPresentationMode) {\r\n          turnOnlyIfPageFit = true;\r\n        }\r\n\r\n        turnPage = 1;\r\n        break;\r\n\r\n      case 39:\r\n        if (pdfViewer.isHorizontalScrollbarEnabled) {\r\n          turnOnlyIfPageFit = true;\r\n        }\r\n\r\n      case 74:\r\n      case 78:\r\n        turnPage = 1;\r\n        break;\r\n\r\n      case 36:\r\n        if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {\r\n          PDFViewerApplication.page = 1;\r\n          handled = true;\r\n          ensureViewerFocused = true;\r\n        }\r\n\r\n        break;\r\n\r\n      case 35:\r\n        if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {\r\n          PDFViewerApplication.page = PDFViewerApplication.pagesCount;\r\n          handled = true;\r\n          ensureViewerFocused = true;\r\n        }\r\n\r\n        break;\r\n\r\n      case 83:\r\n        PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.SELECT);\r\n        break;\r\n\r\n      case 72:\r\n        PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.HAND);\r\n        break;\r\n\r\n      case 82:\r\n        PDFViewerApplication.rotatePages(90);\r\n        break;\r\n\r\n      case 115:\r\n        PDFViewerApplication.pdfSidebar.toggle();\r\n        break;\r\n    }\r\n\r\n    if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === \"page-fit\")) {\r\n      if (turnPage > 0) {\r\n        pdfViewer.nextPage();\r\n      } else {\r\n        pdfViewer.previousPage();\r\n      }\r\n\r\n      handled = true;\r\n    }\r\n  }\r\n\r\n  if (cmd === 4) {\r\n    switch (evt.keyCode) {\r\n      case 13:\r\n      case 32:\r\n        if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== \"page-fit\") {\r\n          break;\r\n        }\r\n\r\n        if (PDFViewerApplication.page > 1) {\r\n          PDFViewerApplication.page--;\r\n        }\r\n\r\n        handled = true;\r\n        break;\r\n\r\n      case 82:\r\n        PDFViewerApplication.rotatePages(-90);\r\n        break;\r\n    }\r\n  }\r\n\r\n  if (!handled && !isViewerInPresentationMode) {\r\n    if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== \"BUTTON\") {\r\n      ensureViewerFocused = true;\r\n    }\r\n  }\r\n\r\n  if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) {\r\n    pdfViewer.focus();\r\n  }\r\n\r\n  if (handled) {\r\n    evt.preventDefault();\r\n  }\r\n}\r\n\r\nfunction beforeUnload(evt) {\r\n  evt.preventDefault();\r\n  evt.returnValue = \"\";\r\n  return false;\r\n}\r\n\r\nfunction apiPageLayoutToSpreadMode(layout) {\r\n  switch (layout) {\r\n    case \"SinglePage\":\r\n    case \"OneColumn\":\r\n      return _ui_utils.SpreadMode.NONE;\r\n\r\n    case \"TwoColumnLeft\":\r\n    case \"TwoPageLeft\":\r\n      return _ui_utils.SpreadMode.ODD;\r\n\r\n    case \"TwoColumnRight\":\r\n    case \"TwoPageRight\":\r\n      return _ui_utils.SpreadMode.EVEN;\r\n  }\r\n\r\n  return _ui_utils.SpreadMode.NONE;\r\n}\r\n\r\nfunction apiPageModeToSidebarView(mode) {\r\n  switch (mode) {\r\n    case \"UseNone\":\r\n      return _ui_utils.SidebarView.NONE;\r\n\r\n    case \"UseThumbs\":\r\n      return _ui_utils.SidebarView.THUMBS;\r\n\r\n    case \"UseOutlines\":\r\n      return _ui_utils.SidebarView.OUTLINE;\r\n\r\n    case \"UseAttachments\":\r\n      return _ui_utils.SidebarView.ATTACHMENTS;\r\n\r\n    case \"UseOC\":\r\n      return _ui_utils.SidebarView.LAYERS;\r\n  }\r\n\r\n  return _ui_utils.SidebarView.NONE;\r\n}\r\n\r\nvar PDFPrintServiceFactory = {\r\n  instance: {\r\n    supportsPrinting: false,\r\n    createPrintService: function createPrintService() {\r\n      throw new Error(\"Not implemented: createPrintService\");\r\n    }\r\n  }\r\n};\r\nexports.PDFPrintServiceFactory = PDFPrintServiceFactory;\r\n\r\n/***/ }),\r\n/* 4 */\r\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\r\n\r\n\r\n\r\nmodule.exports = __webpack_require__(5);\r\n\r\n/***/ }),\r\n/* 5 */\r\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\r\n\r\n/* module decorator */ module = __webpack_require__.nmd(module);\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nvar runtime = function (exports) {\r\n  \"use strict\";\r\n\r\n  var Op = Object.prototype;\r\n  var hasOwn = Op.hasOwnProperty;\r\n  var undefined;\r\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\r\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\r\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\r\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\r\n\r\n  function define(obj, key, value) {\r\n    Object.defineProperty(obj, key, {\r\n      value: value,\r\n      enumerable: true,\r\n      configurable: true,\r\n      writable: true\r\n    });\r\n    return obj[key];\r\n  }\r\n\r\n  try {\r\n    define({}, \"\");\r\n  } catch (err) {\r\n    define = function define(obj, key, value) {\r\n      return obj[key] = value;\r\n    };\r\n  }\r\n\r\n  function wrap(innerFn, outerFn, self, tryLocsList) {\r\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\r\n    var generator = Object.create(protoGenerator.prototype);\r\n    var context = new Context(tryLocsList || []);\r\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\r\n    return generator;\r\n  }\r\n\r\n  exports.wrap = wrap;\r\n\r\n  function tryCatch(fn, obj, arg) {\r\n    try {\r\n      return {\r\n        type: \"normal\",\r\n        arg: fn.call(obj, arg)\r\n      };\r\n    } catch (err) {\r\n      return {\r\n        type: \"throw\",\r\n        arg: err\r\n      };\r\n    }\r\n  }\r\n\r\n  var GenStateSuspendedStart = \"suspendedStart\";\r\n  var GenStateSuspendedYield = \"suspendedYield\";\r\n  var GenStateExecuting = \"executing\";\r\n  var GenStateCompleted = \"completed\";\r\n  var ContinueSentinel = {};\r\n\r\n  function Generator() {}\r\n\r\n  function GeneratorFunction() {}\r\n\r\n  function GeneratorFunctionPrototype() {}\r\n\r\n  var IteratorPrototype = {};\r\n\r\n  IteratorPrototype[iteratorSymbol] = function () {\r\n    return this;\r\n  };\r\n\r\n  var getProto = Object.getPrototypeOf;\r\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\r\n\r\n  if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\r\n    IteratorPrototype = NativeIteratorPrototype;\r\n  }\r\n\r\n  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\r\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\r\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\r\n  GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\");\r\n\r\n  function defineIteratorMethods(prototype) {\r\n    [\"next\", \"throw\", \"return\"].forEach(function (method) {\r\n      define(prototype, method, function (arg) {\r\n        return this._invoke(method, arg);\r\n      });\r\n    });\r\n  }\r\n\r\n  exports.isGeneratorFunction = function (genFun) {\r\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\r\n    return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === \"GeneratorFunction\" : false;\r\n  };\r\n\r\n  exports.mark = function (genFun) {\r\n    if (Object.setPrototypeOf) {\r\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\r\n    } else {\r\n      genFun.__proto__ = GeneratorFunctionPrototype;\r\n      define(genFun, toStringTagSymbol, \"GeneratorFunction\");\r\n    }\r\n\r\n    genFun.prototype = Object.create(Gp);\r\n    return genFun;\r\n  };\r\n\r\n  exports.awrap = function (arg) {\r\n    return {\r\n      __await: arg\r\n    };\r\n  };\r\n\r\n  function AsyncIterator(generator, PromiseImpl) {\r\n    function invoke(method, arg, resolve, reject) {\r\n      var record = tryCatch(generator[method], generator, arg);\r\n\r\n      if (record.type === \"throw\") {\r\n        reject(record.arg);\r\n      } else {\r\n        var result = record.arg;\r\n        var value = result.value;\r\n\r\n        if (value && _typeof(value) === \"object\" && hasOwn.call(value, \"__await\")) {\r\n          return PromiseImpl.resolve(value.__await).then(function (value) {\r\n            invoke(\"next\", value, resolve, reject);\r\n          }, function (err) {\r\n            invoke(\"throw\", err, resolve, reject);\r\n          });\r\n        }\r\n\r\n        return PromiseImpl.resolve(value).then(function (unwrapped) {\r\n          result.value = unwrapped;\r\n          resolve(result);\r\n        }, function (error) {\r\n          return invoke(\"throw\", error, resolve, reject);\r\n        });\r\n      }\r\n    }\r\n\r\n    var previousPromise;\r\n\r\n    function enqueue(method, arg) {\r\n      function callInvokeWithMethodAndArg() {\r\n        return new PromiseImpl(function (resolve, reject) {\r\n          invoke(method, arg, resolve, reject);\r\n        });\r\n      }\r\n\r\n      return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\r\n    }\r\n\r\n    this._invoke = enqueue;\r\n  }\r\n\r\n  defineIteratorMethods(AsyncIterator.prototype);\r\n\r\n  AsyncIterator.prototype[asyncIteratorSymbol] = function () {\r\n    return this;\r\n  };\r\n\r\n  exports.AsyncIterator = AsyncIterator;\r\n\r\n  exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\r\n    if (PromiseImpl === void 0) PromiseImpl = Promise;\r\n    var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\r\n    return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\r\n      return result.done ? result.value : iter.next();\r\n    });\r\n  };\r\n\r\n  function makeInvokeMethod(innerFn, self, context) {\r\n    var state = GenStateSuspendedStart;\r\n    return function invoke(method, arg) {\r\n      if (state === GenStateExecuting) {\r\n        throw new Error(\"Generator is already running\");\r\n      }\r\n\r\n      if (state === GenStateCompleted) {\r\n        if (method === \"throw\") {\r\n          throw arg;\r\n        }\r\n\r\n        return doneResult();\r\n      }\r\n\r\n      context.method = method;\r\n      context.arg = arg;\r\n\r\n      while (true) {\r\n        var delegate = context.delegate;\r\n\r\n        if (delegate) {\r\n          var delegateResult = maybeInvokeDelegate(delegate, context);\r\n\r\n          if (delegateResult) {\r\n            if (delegateResult === ContinueSentinel) continue;\r\n            return delegateResult;\r\n          }\r\n        }\r\n\r\n        if (context.method === \"next\") {\r\n          context.sent = context._sent = context.arg;\r\n        } else if (context.method === \"throw\") {\r\n          if (state === GenStateSuspendedStart) {\r\n            state = GenStateCompleted;\r\n            throw context.arg;\r\n          }\r\n\r\n          context.dispatchException(context.arg);\r\n        } else if (context.method === \"return\") {\r\n          context.abrupt(\"return\", context.arg);\r\n        }\r\n\r\n        state = GenStateExecuting;\r\n        var record = tryCatch(innerFn, self, context);\r\n\r\n        if (record.type === \"normal\") {\r\n          state = context.done ? GenStateCompleted : GenStateSuspendedYield;\r\n\r\n          if (record.arg === ContinueSentinel) {\r\n            continue;\r\n          }\r\n\r\n          return {\r\n            value: record.arg,\r\n            done: context.done\r\n          };\r\n        } else if (record.type === \"throw\") {\r\n          state = GenStateCompleted;\r\n          context.method = \"throw\";\r\n          context.arg = record.arg;\r\n        }\r\n      }\r\n    };\r\n  }\r\n\r\n  function maybeInvokeDelegate(delegate, context) {\r\n    var method = delegate.iterator[context.method];\r\n\r\n    if (method === undefined) {\r\n      context.delegate = null;\r\n\r\n      if (context.method === \"throw\") {\r\n        if (delegate.iterator[\"return\"]) {\r\n          context.method = \"return\";\r\n          context.arg = undefined;\r\n          maybeInvokeDelegate(delegate, context);\r\n\r\n          if (context.method === \"throw\") {\r\n            return ContinueSentinel;\r\n          }\r\n        }\r\n\r\n        context.method = \"throw\";\r\n        context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\r\n      }\r\n\r\n      return ContinueSentinel;\r\n    }\r\n\r\n    var record = tryCatch(method, delegate.iterator, context.arg);\r\n\r\n    if (record.type === \"throw\") {\r\n      context.method = \"throw\";\r\n      context.arg = record.arg;\r\n      context.delegate = null;\r\n      return ContinueSentinel;\r\n    }\r\n\r\n    var info = record.arg;\r\n\r\n    if (!info) {\r\n      context.method = \"throw\";\r\n      context.arg = new TypeError(\"iterator result is not an object\");\r\n      context.delegate = null;\r\n      return ContinueSentinel;\r\n    }\r\n\r\n    if (info.done) {\r\n      context[delegate.resultName] = info.value;\r\n      context.next = delegate.nextLoc;\r\n\r\n      if (context.method !== \"return\") {\r\n        context.method = \"next\";\r\n        context.arg = undefined;\r\n      }\r\n    } else {\r\n      return info;\r\n    }\r\n\r\n    context.delegate = null;\r\n    return ContinueSentinel;\r\n  }\r\n\r\n  defineIteratorMethods(Gp);\r\n  define(Gp, toStringTagSymbol, \"Generator\");\r\n\r\n  Gp[iteratorSymbol] = function () {\r\n    return this;\r\n  };\r\n\r\n  Gp.toString = function () {\r\n    return \"[object Generator]\";\r\n  };\r\n\r\n  function pushTryEntry(locs) {\r\n    var entry = {\r\n      tryLoc: locs[0]\r\n    };\r\n\r\n    if (1 in locs) {\r\n      entry.catchLoc = locs[1];\r\n    }\r\n\r\n    if (2 in locs) {\r\n      entry.finallyLoc = locs[2];\r\n      entry.afterLoc = locs[3];\r\n    }\r\n\r\n    this.tryEntries.push(entry);\r\n  }\r\n\r\n  function resetTryEntry(entry) {\r\n    var record = entry.completion || {};\r\n    record.type = \"normal\";\r\n    delete record.arg;\r\n    entry.completion = record;\r\n  }\r\n\r\n  function Context(tryLocsList) {\r\n    this.tryEntries = [{\r\n      tryLoc: \"root\"\r\n    }];\r\n    tryLocsList.forEach(pushTryEntry, this);\r\n    this.reset(true);\r\n  }\r\n\r\n  exports.keys = function (object) {\r\n    var keys = [];\r\n\r\n    for (var key in object) {\r\n      keys.push(key);\r\n    }\r\n\r\n    keys.reverse();\r\n    return function next() {\r\n      while (keys.length) {\r\n        var key = keys.pop();\r\n\r\n        if (key in object) {\r\n          next.value = key;\r\n          next.done = false;\r\n          return next;\r\n        }\r\n      }\r\n\r\n      next.done = true;\r\n      return next;\r\n    };\r\n  };\r\n\r\n  function values(iterable) {\r\n    if (iterable) {\r\n      var iteratorMethod = iterable[iteratorSymbol];\r\n\r\n      if (iteratorMethod) {\r\n        return iteratorMethod.call(iterable);\r\n      }\r\n\r\n      if (typeof iterable.next === \"function\") {\r\n        return iterable;\r\n      }\r\n\r\n      if (!isNaN(iterable.length)) {\r\n        var i = -1,\r\n            next = function next() {\r\n          while (++i < iterable.length) {\r\n            if (hasOwn.call(iterable, i)) {\r\n              next.value = iterable[i];\r\n              next.done = false;\r\n              return next;\r\n            }\r\n          }\r\n\r\n          next.value = undefined;\r\n          next.done = true;\r\n          return next;\r\n        };\r\n\r\n        return next.next = next;\r\n      }\r\n    }\r\n\r\n    return {\r\n      next: doneResult\r\n    };\r\n  }\r\n\r\n  exports.values = values;\r\n\r\n  function doneResult() {\r\n    return {\r\n      value: undefined,\r\n      done: true\r\n    };\r\n  }\r\n\r\n  Context.prototype = {\r\n    constructor: Context,\r\n    reset: function reset(skipTempReset) {\r\n      this.prev = 0;\r\n      this.next = 0;\r\n      this.sent = this._sent = undefined;\r\n      this.done = false;\r\n      this.delegate = null;\r\n      this.method = \"next\";\r\n      this.arg = undefined;\r\n      this.tryEntries.forEach(resetTryEntry);\r\n\r\n      if (!skipTempReset) {\r\n        for (var name in this) {\r\n          if (name.charAt(0) === \"t\" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\r\n            this[name] = undefined;\r\n          }\r\n        }\r\n      }\r\n    },\r\n    stop: function stop() {\r\n      this.done = true;\r\n      var rootEntry = this.tryEntries[0];\r\n      var rootRecord = rootEntry.completion;\r\n\r\n      if (rootRecord.type === \"throw\") {\r\n        throw rootRecord.arg;\r\n      }\r\n\r\n      return this.rval;\r\n    },\r\n    dispatchException: function dispatchException(exception) {\r\n      if (this.done) {\r\n        throw exception;\r\n      }\r\n\r\n      var context = this;\r\n\r\n      function handle(loc, caught) {\r\n        record.type = \"throw\";\r\n        record.arg = exception;\r\n        context.next = loc;\r\n\r\n        if (caught) {\r\n          context.method = \"next\";\r\n          context.arg = undefined;\r\n        }\r\n\r\n        return !!caught;\r\n      }\r\n\r\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\r\n        var entry = this.tryEntries[i];\r\n        var record = entry.completion;\r\n\r\n        if (entry.tryLoc === \"root\") {\r\n          return handle(\"end\");\r\n        }\r\n\r\n        if (entry.tryLoc <= this.prev) {\r\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\r\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\r\n\r\n          if (hasCatch && hasFinally) {\r\n            if (this.prev < entry.catchLoc) {\r\n              return handle(entry.catchLoc, true);\r\n            } else if (this.prev < entry.finallyLoc) {\r\n              return handle(entry.finallyLoc);\r\n            }\r\n          } else if (hasCatch) {\r\n            if (this.prev < entry.catchLoc) {\r\n              return handle(entry.catchLoc, true);\r\n            }\r\n          } else if (hasFinally) {\r\n            if (this.prev < entry.finallyLoc) {\r\n              return handle(entry.finallyLoc);\r\n            }\r\n          } else {\r\n            throw new Error(\"try statement without catch or finally\");\r\n          }\r\n        }\r\n      }\r\n    },\r\n    abrupt: function abrupt(type, arg) {\r\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\r\n        var entry = this.tryEntries[i];\r\n\r\n        if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\r\n          var finallyEntry = entry;\r\n          break;\r\n        }\r\n      }\r\n\r\n      if (finallyEntry && (type === \"break\" || type === \"continue\") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\r\n        finallyEntry = null;\r\n      }\r\n\r\n      var record = finallyEntry ? finallyEntry.completion : {};\r\n      record.type = type;\r\n      record.arg = arg;\r\n\r\n      if (finallyEntry) {\r\n        this.method = \"next\";\r\n        this.next = finallyEntry.finallyLoc;\r\n        return ContinueSentinel;\r\n      }\r\n\r\n      return this.complete(record);\r\n    },\r\n    complete: function complete(record, afterLoc) {\r\n      if (record.type === \"throw\") {\r\n        throw record.arg;\r\n      }\r\n\r\n      if (record.type === \"break\" || record.type === \"continue\") {\r\n        this.next = record.arg;\r\n      } else if (record.type === \"return\") {\r\n        this.rval = this.arg = record.arg;\r\n        this.method = \"return\";\r\n        this.next = \"end\";\r\n      } else if (record.type === \"normal\" && afterLoc) {\r\n        this.next = afterLoc;\r\n      }\r\n\r\n      return ContinueSentinel;\r\n    },\r\n    finish: function finish(finallyLoc) {\r\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\r\n        var entry = this.tryEntries[i];\r\n\r\n        if (entry.finallyLoc === finallyLoc) {\r\n          this.complete(entry.completion, entry.afterLoc);\r\n          resetTryEntry(entry);\r\n          return ContinueSentinel;\r\n        }\r\n      }\r\n    },\r\n    \"catch\": function _catch(tryLoc) {\r\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\r\n        var entry = this.tryEntries[i];\r\n\r\n        if (entry.tryLoc === tryLoc) {\r\n          var record = entry.completion;\r\n\r\n          if (record.type === \"throw\") {\r\n            var thrown = record.arg;\r\n            resetTryEntry(entry);\r\n          }\r\n\r\n          return thrown;\r\n        }\r\n      }\r\n\r\n      throw new Error(\"illegal catch attempt\");\r\n    },\r\n    delegateYield: function delegateYield(iterable, resultName, nextLoc) {\r\n      this.delegate = {\r\n        iterator: values(iterable),\r\n        resultName: resultName,\r\n        nextLoc: nextLoc\r\n      };\r\n\r\n      if (this.method === \"next\") {\r\n        this.arg = undefined;\r\n      }\r\n\r\n      return ContinueSentinel;\r\n    }\r\n  };\r\n  return exports;\r\n}(( false ? 0 : _typeof(module)) === \"object\" ? module.exports : {});\r\n\r\ntry {\r\n  regeneratorRuntime = runtime;\r\n} catch (accidentalStrictMode) {\r\n  Function(\"r\", \"regeneratorRuntime = r\")(runtime);\r\n}\r\n\r\n/***/ }),\r\n/* 6 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.approximateFraction = approximateFraction;\r\nexports.backtrackBeforeAllVisibleElements = backtrackBeforeAllVisibleElements;\r\nexports.binarySearchFirstItem = binarySearchFirstItem;\r\nexports.getActiveOrFocusedElement = getActiveOrFocusedElement;\r\nexports.getOutputScale = getOutputScale;\r\nexports.getPageSizeInches = getPageSizeInches;\r\nexports.getPDFFileNameFromURL = getPDFFileNameFromURL;\r\nexports.getVisibleElements = getVisibleElements;\r\nexports.isPortraitOrientation = isPortraitOrientation;\r\nexports.isValidRotation = isValidRotation;\r\nexports.isValidScrollMode = isValidScrollMode;\r\nexports.isValidSpreadMode = isValidSpreadMode;\r\nexports.moveToEndOfArray = moveToEndOfArray;\r\nexports.noContextMenuHandler = noContextMenuHandler;\r\nexports.normalizeWheelEventDelta = normalizeWheelEventDelta;\r\nexports.normalizeWheelEventDirection = normalizeWheelEventDirection;\r\nexports.parseQueryString = parseQueryString;\r\nexports.roundToDivide = roundToDivide;\r\nexports.scrollIntoView = scrollIntoView;\r\nexports.waitOnEventOrTimeout = waitOnEventOrTimeout;\r\nexports.watchScroll = watchScroll;\r\nexports.WaitOnType = exports.VERTICAL_PADDING = exports.UNKNOWN_SCALE = exports.TextLayerMode = exports.SpreadMode = exports.SidebarView = exports.ScrollMode = exports.SCROLLBAR_PADDING = exports.RendererType = exports.ProgressBar = exports.PresentationModeState = exports.NullL10n = exports.MIN_SCALE = exports.MAX_SCALE = exports.MAX_AUTO_SCALE = exports.EventBus = exports.DEFAULT_SCALE_VALUE = exports.DEFAULT_SCALE = exports.CSS_UNITS = exports.AutoPrintRegExp = exports.animationStarted = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nvar CSS_UNITS = 96.0 / 72.0;\r\nexports.CSS_UNITS = CSS_UNITS;\r\nvar DEFAULT_SCALE_VALUE = \"auto\";\r\nexports.DEFAULT_SCALE_VALUE = DEFAULT_SCALE_VALUE;\r\nvar DEFAULT_SCALE = 1.0;\r\nexports.DEFAULT_SCALE = DEFAULT_SCALE;\r\nvar MIN_SCALE = 0.1;\r\nexports.MIN_SCALE = MIN_SCALE;\r\nvar MAX_SCALE = 10.0;\r\nexports.MAX_SCALE = MAX_SCALE;\r\nvar UNKNOWN_SCALE = 0;\r\nexports.UNKNOWN_SCALE = UNKNOWN_SCALE;\r\nvar MAX_AUTO_SCALE = 1.25;\r\nexports.MAX_AUTO_SCALE = MAX_AUTO_SCALE;\r\nvar SCROLLBAR_PADDING = 40;\r\nexports.SCROLLBAR_PADDING = SCROLLBAR_PADDING;\r\nvar VERTICAL_PADDING = 5;\r\nexports.VERTICAL_PADDING = VERTICAL_PADDING;\r\nvar LOADINGBAR_END_OFFSET_VAR = \"--loadingBar-end-offset\";\r\nvar PresentationModeState = {\r\n  UNKNOWN: 0,\r\n  NORMAL: 1,\r\n  CHANGING: 2,\r\n  FULLSCREEN: 3\r\n};\r\nexports.PresentationModeState = PresentationModeState;\r\nvar SidebarView = {\r\n  UNKNOWN: -1,\r\n  NONE: 0,\r\n  THUMBS: 1,\r\n  OUTLINE: 2,\r\n  ATTACHMENTS: 3,\r\n  LAYERS: 4\r\n};\r\nexports.SidebarView = SidebarView;\r\nvar RendererType = {\r\n  CANVAS: \"canvas\",\r\n  SVG: \"svg\"\r\n};\r\nexports.RendererType = RendererType;\r\nvar TextLayerMode = {\r\n  DISABLE: 0,\r\n  ENABLE: 1,\r\n  ENABLE_ENHANCE: 2\r\n};\r\nexports.TextLayerMode = TextLayerMode;\r\nvar ScrollMode = {\r\n  UNKNOWN: -1,\r\n  VERTICAL: 0,\r\n  HORIZONTAL: 1,\r\n  WRAPPED: 2\r\n};\r\nexports.ScrollMode = ScrollMode;\r\nvar SpreadMode = {\r\n  UNKNOWN: -1,\r\n  NONE: 0,\r\n  ODD: 1,\r\n  EVEN: 2\r\n};\r\nexports.SpreadMode = SpreadMode;\r\nvar AutoPrintRegExp = /\\bprint\\s*\\(/;\r\nexports.AutoPrintRegExp = AutoPrintRegExp;\r\n\r\nfunction formatL10nValue(text, args) {\r\n  if (!args) {\r\n    return text;\r\n  }\r\n\r\n  return text.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, function (all, name) {\r\n    return name in args ? args[name] : \"{{\" + name + \"}}\";\r\n  });\r\n}\r\n\r\nvar NullL10n = {\r\n  getLanguage: function getLanguage() {\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n      return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n        while (1) {\r\n          switch (_context.prev = _context.next) {\r\n            case 0:\r\n              return _context.abrupt(\"return\", \"en-us\");\r\n\r\n            case 1:\r\n            case \"end\":\r\n              return _context.stop();\r\n          }\r\n        }\r\n      }, _callee);\r\n    }))();\r\n  },\r\n  getDirection: function getDirection() {\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n      return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n        while (1) {\r\n          switch (_context2.prev = _context2.next) {\r\n            case 0:\r\n              return _context2.abrupt(\"return\", \"ltr\");\r\n\r\n            case 1:\r\n            case \"end\":\r\n              return _context2.stop();\r\n          }\r\n        }\r\n      }, _callee2);\r\n    }))();\r\n  },\r\n  get: function get(property, args, fallback) {\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3() {\r\n      return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\r\n        while (1) {\r\n          switch (_context3.prev = _context3.next) {\r\n            case 0:\r\n              return _context3.abrupt(\"return\", formatL10nValue(fallback, args));\r\n\r\n            case 1:\r\n            case \"end\":\r\n              return _context3.stop();\r\n          }\r\n        }\r\n      }, _callee3);\r\n    }))();\r\n  },\r\n  translate: function translate(element) {\r\n    return _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4() {\r\n      return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\r\n        while (1) {\r\n          switch (_context4.prev = _context4.next) {\r\n            case 0:\r\n            case \"end\":\r\n              return _context4.stop();\r\n          }\r\n        }\r\n      }, _callee4);\r\n    }))();\r\n  }\r\n};\r\nexports.NullL10n = NullL10n;\r\n\r\nfunction getOutputScale(ctx) {\r\n  var devicePixelRatio = window.devicePixelRatio || 1;\r\n  var backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;\r\n  var pixelRatio = devicePixelRatio / backingStoreRatio;\r\n  return {\r\n    sx: pixelRatio,\r\n    sy: pixelRatio,\r\n    scaled: pixelRatio !== 1\r\n  };\r\n}\r\n\r\nfunction scrollIntoView(element, spot) {\r\n  var skipOverflowHiddenElements = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n  var parent = element.offsetParent;\r\n\r\n  if (!parent) {\r\n    console.error(\"offsetParent is not set -- cannot scroll\");\r\n    return;\r\n  }\r\n\r\n  var offsetY = element.offsetTop + element.clientTop;\r\n  var offsetX = element.offsetLeft + element.clientLeft;\r\n\r\n  while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth || skipOverflowHiddenElements && getComputedStyle(parent).overflow === \"hidden\") {\r\n    if (parent.dataset._scaleY) {\r\n      offsetY /= parent.dataset._scaleY;\r\n      offsetX /= parent.dataset._scaleX;\r\n    }\r\n\r\n    offsetY += parent.offsetTop;\r\n    offsetX += parent.offsetLeft;\r\n    parent = parent.offsetParent;\r\n\r\n    if (!parent) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  if (spot) {\r\n    if (spot.top !== undefined) {\r\n      offsetY += spot.top;\r\n    }\r\n\r\n    if (spot.left !== undefined) {\r\n      offsetX += spot.left;\r\n      parent.scrollLeft = offsetX;\r\n    }\r\n  }\r\n\r\n  parent.scrollTop = offsetY;\r\n}\r\n\r\nfunction watchScroll(viewAreaElement, callback) {\r\n  var debounceScroll = function debounceScroll(evt) {\r\n    if (rAF) {\r\n      return;\r\n    }\r\n\r\n    rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {\r\n      rAF = null;\r\n      var currentX = viewAreaElement.scrollLeft;\r\n      var lastX = state.lastX;\r\n\r\n      if (currentX !== lastX) {\r\n        state.right = currentX > lastX;\r\n      }\r\n\r\n      state.lastX = currentX;\r\n      var currentY = viewAreaElement.scrollTop;\r\n      var lastY = state.lastY;\r\n\r\n      if (currentY !== lastY) {\r\n        state.down = currentY > lastY;\r\n      }\r\n\r\n      state.lastY = currentY;\r\n      callback(state);\r\n    });\r\n  };\r\n\r\n  var state = {\r\n    right: true,\r\n    down: true,\r\n    lastX: viewAreaElement.scrollLeft,\r\n    lastY: viewAreaElement.scrollTop,\r\n    _eventHandler: debounceScroll\r\n  };\r\n  var rAF = null;\r\n  viewAreaElement.addEventListener(\"scroll\", debounceScroll, true);\r\n  return state;\r\n}\r\n\r\nfunction parseQueryString(query) {\r\n  var parts = query.split(\"&\");\r\n  var params = Object.create(null);\r\n\r\n  for (var i = 0, ii = parts.length; i < ii; ++i) {\r\n    var param = parts[i].split(\"=\");\r\n    var key = param[0].toLowerCase();\r\n    var value = param.length > 1 ? param[1] : null;\r\n    params[decodeURIComponent(key)] = decodeURIComponent(value);\r\n  }\r\n\r\n  return params;\r\n}\r\n\r\nfunction binarySearchFirstItem(items, condition) {\r\n  var minIndex = 0;\r\n  var maxIndex = items.length - 1;\r\n\r\n  if (maxIndex < 0 || !condition(items[maxIndex])) {\r\n    return items.length;\r\n  }\r\n\r\n  if (condition(items[minIndex])) {\r\n    return minIndex;\r\n  }\r\n\r\n  while (minIndex < maxIndex) {\r\n    var currentIndex = minIndex + maxIndex >> 1;\r\n    var currentItem = items[currentIndex];\r\n\r\n    if (condition(currentItem)) {\r\n      maxIndex = currentIndex;\r\n    } else {\r\n      minIndex = currentIndex + 1;\r\n    }\r\n  }\r\n\r\n  return minIndex;\r\n}\r\n\r\nfunction approximateFraction(x) {\r\n  if (Math.floor(x) === x) {\r\n    return [x, 1];\r\n  }\r\n\r\n  var xinv = 1 / x;\r\n  var limit = 8;\r\n\r\n  if (xinv > limit) {\r\n    return [1, limit];\r\n  } else if (Math.floor(xinv) === xinv) {\r\n    return [1, xinv];\r\n  }\r\n\r\n  var x_ = x > 1 ? xinv : x;\r\n  var a = 0,\r\n      b = 1,\r\n      c = 1,\r\n      d = 1;\r\n\r\n  while (true) {\r\n    var p = a + c,\r\n        q = b + d;\r\n\r\n    if (q > limit) {\r\n      break;\r\n    }\r\n\r\n    if (x_ <= p / q) {\r\n      c = p;\r\n      d = q;\r\n    } else {\r\n      a = p;\r\n      b = q;\r\n    }\r\n  }\r\n\r\n  var result;\r\n\r\n  if (x_ - a / b < c / d - x_) {\r\n    result = x_ === x ? [a, b] : [b, a];\r\n  } else {\r\n    result = x_ === x ? [c, d] : [d, c];\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\nfunction roundToDivide(x, div) {\r\n  var r = x % div;\r\n  return r === 0 ? x : Math.round(x - r + div);\r\n}\r\n\r\nfunction getPageSizeInches(_ref) {\r\n  var view = _ref.view,\r\n      userUnit = _ref.userUnit,\r\n      rotate = _ref.rotate;\r\n\r\n  var _view = _slicedToArray(view, 4),\r\n      x1 = _view[0],\r\n      y1 = _view[1],\r\n      x2 = _view[2],\r\n      y2 = _view[3];\r\n\r\n  var changeOrientation = rotate % 180 !== 0;\r\n  var width = (x2 - x1) / 72 * userUnit;\r\n  var height = (y2 - y1) / 72 * userUnit;\r\n  return {\r\n    width: changeOrientation ? height : width,\r\n    height: changeOrientation ? width : height\r\n  };\r\n}\r\n\r\nfunction backtrackBeforeAllVisibleElements(index, views, top) {\r\n  if (index < 2) {\r\n    return index;\r\n  }\r\n\r\n  var elt = views[index].div;\r\n  var pageTop = elt.offsetTop + elt.clientTop;\r\n\r\n  if (pageTop >= top) {\r\n    elt = views[index - 1].div;\r\n    pageTop = elt.offsetTop + elt.clientTop;\r\n  }\r\n\r\n  for (var i = index - 2; i >= 0; --i) {\r\n    elt = views[i].div;\r\n\r\n    if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {\r\n      break;\r\n    }\r\n\r\n    index = i;\r\n  }\r\n\r\n  return index;\r\n}\r\n\r\nfunction getVisibleElements(_ref2) {\r\n  var scrollEl = _ref2.scrollEl,\r\n      views = _ref2.views,\r\n      _ref2$sortByVisibilit = _ref2.sortByVisibility,\r\n      sortByVisibility = _ref2$sortByVisibilit === void 0 ? false : _ref2$sortByVisibilit,\r\n      _ref2$horizontal = _ref2.horizontal,\r\n      horizontal = _ref2$horizontal === void 0 ? false : _ref2$horizontal,\r\n      _ref2$rtl = _ref2.rtl,\r\n      rtl = _ref2$rtl === void 0 ? false : _ref2$rtl;\r\n  var top = scrollEl.scrollTop,\r\n      bottom = top + scrollEl.clientHeight;\r\n  var left = scrollEl.scrollLeft,\r\n      right = left + scrollEl.clientWidth;\r\n\r\n  function isElementBottomAfterViewTop(view) {\r\n    var element = view.div;\r\n    var elementBottom = element.offsetTop + element.clientTop + element.clientHeight;\r\n    return elementBottom > top;\r\n  }\r\n\r\n  function isElementNextAfterViewHorizontally(view) {\r\n    var element = view.div;\r\n    var elementLeft = element.offsetLeft + element.clientLeft;\r\n    var elementRight = elementLeft + element.clientWidth;\r\n    return rtl ? elementLeft < right : elementRight > left;\r\n  }\r\n\r\n  var visible = [],\r\n      numViews = views.length;\r\n  var firstVisibleElementInd = binarySearchFirstItem(views, horizontal ? isElementNextAfterViewHorizontally : isElementBottomAfterViewTop);\r\n\r\n  if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) {\r\n    firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top);\r\n  }\r\n\r\n  var lastEdge = horizontal ? right : -1;\r\n\r\n  for (var i = firstVisibleElementInd; i < numViews; i++) {\r\n    var view = views[i],\r\n        element = view.div;\r\n    var currentWidth = element.offsetLeft + element.clientLeft;\r\n    var currentHeight = element.offsetTop + element.clientTop;\r\n    var viewWidth = element.clientWidth,\r\n        viewHeight = element.clientHeight;\r\n    var viewRight = currentWidth + viewWidth;\r\n    var viewBottom = currentHeight + viewHeight;\r\n\r\n    if (lastEdge === -1) {\r\n      if (viewBottom >= bottom) {\r\n        lastEdge = viewBottom;\r\n      }\r\n    } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {\r\n      break;\r\n    }\r\n\r\n    if (viewBottom <= top || currentHeight >= bottom || viewRight <= left || currentWidth >= right) {\r\n      continue;\r\n    }\r\n\r\n    var hiddenHeight = Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom);\r\n    var hiddenWidth = Math.max(0, left - currentWidth) + Math.max(0, viewRight - right);\r\n    var fractionHeight = (viewHeight - hiddenHeight) / viewHeight,\r\n        fractionWidth = (viewWidth - hiddenWidth) / viewWidth;\r\n    var percent = fractionHeight * fractionWidth * 100 | 0;\r\n    visible.push({\r\n      id: view.id,\r\n      x: currentWidth,\r\n      y: currentHeight,\r\n      view: view,\r\n      percent: percent,\r\n      widthPercent: fractionWidth * 100 | 0\r\n    });\r\n  }\r\n\r\n  var first = visible[0],\r\n      last = visible[visible.length - 1];\r\n\r\n  if (sortByVisibility) {\r\n    visible.sort(function (a, b) {\r\n      var pc = a.percent - b.percent;\r\n\r\n      if (Math.abs(pc) > 0.001) {\r\n        return -pc;\r\n      }\r\n\r\n      return a.id - b.id;\r\n    });\r\n  }\r\n\r\n  return {\r\n    first: first,\r\n    last: last,\r\n    views: visible\r\n  };\r\n}\r\n\r\nfunction noContextMenuHandler(evt) {\r\n  evt.preventDefault();\r\n}\r\n\r\nfunction isDataSchema(url) {\r\n  var i = 0;\r\n  var ii = url.length;\r\n\r\n  while (i < ii && url[i].trim() === \"\") {\r\n    i++;\r\n  }\r\n\r\n  return url.substring(i, i + 5).toLowerCase() === \"data:\";\r\n}\r\n\r\nfunction getPDFFileNameFromURL(url) {\r\n  var defaultFilename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"document.pdf\";\r\n\r\n  if (typeof url !== \"string\") {\r\n    return defaultFilename;\r\n  }\r\n\r\n  if (isDataSchema(url)) {\r\n    console.warn(\"getPDFFileNameFromURL: \" + 'ignoring \"data:\" URL for performance reasons.');\r\n    return defaultFilename;\r\n  }\r\n\r\n  var reURI = /^(?:(?:[^:]+:)?\\/\\/[^/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/;\r\n  var reFilename = /[^/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\r\n  var splitURI = reURI.exec(url);\r\n  var suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]);\r\n\r\n  if (suggestedFilename) {\r\n    suggestedFilename = suggestedFilename[0];\r\n\r\n    if (suggestedFilename.includes(\"%\")) {\r\n      try {\r\n        suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0];\r\n      } catch (ex) {}\r\n    }\r\n  }\r\n\r\n  return suggestedFilename || defaultFilename;\r\n}\r\n\r\nfunction normalizeWheelEventDirection(evt) {\r\n  var delta = Math.sqrt(evt.deltaX * evt.deltaX + evt.deltaY * evt.deltaY);\r\n  var angle = Math.atan2(evt.deltaY, evt.deltaX);\r\n\r\n  if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {\r\n    delta = -delta;\r\n  }\r\n\r\n  return delta;\r\n}\r\n\r\nfunction normalizeWheelEventDelta(evt) {\r\n  var delta = normalizeWheelEventDirection(evt);\r\n  var MOUSE_DOM_DELTA_PIXEL_MODE = 0;\r\n  var MOUSE_DOM_DELTA_LINE_MODE = 1;\r\n  var MOUSE_PIXELS_PER_LINE = 30;\r\n  var MOUSE_LINES_PER_PAGE = 30;\r\n\r\n  if (evt.deltaMode === MOUSE_DOM_DELTA_PIXEL_MODE) {\r\n    delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\r\n  } else if (evt.deltaMode === MOUSE_DOM_DELTA_LINE_MODE) {\r\n    delta /= MOUSE_LINES_PER_PAGE;\r\n  }\r\n\r\n  return delta;\r\n}\r\n\r\nfunction isValidRotation(angle) {\r\n  return Number.isInteger(angle) && angle % 90 === 0;\r\n}\r\n\r\nfunction isValidScrollMode(mode) {\r\n  return Number.isInteger(mode) && Object.values(ScrollMode).includes(mode) && mode !== ScrollMode.UNKNOWN;\r\n}\r\n\r\nfunction isValidSpreadMode(mode) {\r\n  return Number.isInteger(mode) && Object.values(SpreadMode).includes(mode) && mode !== SpreadMode.UNKNOWN;\r\n}\r\n\r\nfunction isPortraitOrientation(size) {\r\n  return size.width <= size.height;\r\n}\r\n\r\nvar WaitOnType = {\r\n  EVENT: \"event\",\r\n  TIMEOUT: \"timeout\"\r\n};\r\nexports.WaitOnType = WaitOnType;\r\n\r\nfunction waitOnEventOrTimeout(_ref3) {\r\n  var target = _ref3.target,\r\n      name = _ref3.name,\r\n      _ref3$delay = _ref3.delay,\r\n      delay = _ref3$delay === void 0 ? 0 : _ref3$delay;\r\n  return new Promise(function (resolve, reject) {\r\n    if (_typeof(target) !== \"object\" || !(name && typeof name === \"string\") || !(Number.isInteger(delay) && delay >= 0)) {\r\n      throw new Error(\"waitOnEventOrTimeout - invalid parameters.\");\r\n    }\r\n\r\n    function handler(type) {\r\n      if (target instanceof EventBus) {\r\n        target._off(name, eventHandler);\r\n      } else {\r\n        target.removeEventListener(name, eventHandler);\r\n      }\r\n\r\n      if (timeout) {\r\n        clearTimeout(timeout);\r\n      }\r\n\r\n      resolve(type);\r\n    }\r\n\r\n    var eventHandler = handler.bind(null, WaitOnType.EVENT);\r\n\r\n    if (target instanceof EventBus) {\r\n      target._on(name, eventHandler);\r\n    } else {\r\n      target.addEventListener(name, eventHandler);\r\n    }\r\n\r\n    var timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT);\r\n    var timeout = setTimeout(timeoutHandler, delay);\r\n  });\r\n}\r\n\r\nvar animationStarted = new Promise(function (resolve) {\r\n  window.requestAnimationFrame(resolve);\r\n});\r\nexports.animationStarted = animationStarted;\r\n\r\nfunction dispatchDOMEvent(eventName) {\r\n  var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n  throw new Error(\"Not implemented: dispatchDOMEvent\");\r\n}\r\n\r\nvar EventBus = /*#__PURE__*/function () {\r\n  function EventBus(options) {\r\n    _classCallCheck(this, EventBus);\r\n\r\n    this._listeners = Object.create(null);\r\n  }\r\n\r\n  _createClass(EventBus, [{\r\n    key: \"on\",\r\n    value: function on(eventName, listener) {\r\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\r\n\r\n      this._on(eventName, listener, {\r\n        external: true,\r\n        once: options === null || options === void 0 ? void 0 : options.once\r\n      });\r\n    }\r\n  }, {\r\n    key: \"off\",\r\n    value: function off(eventName, listener) {\r\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\r\n\r\n      this._off(eventName, listener, {\r\n        external: true,\r\n        once: options === null || options === void 0 ? void 0 : options.once\r\n      });\r\n    }\r\n  }, {\r\n    key: \"dispatch\",\r\n    value: function dispatch(eventName) {\r\n      var _this = this;\r\n\r\n      var eventListeners = this._listeners[eventName];\r\n\r\n      if (!eventListeners || eventListeners.length === 0) {\r\n        return;\r\n      }\r\n\r\n      var args = Array.prototype.slice.call(arguments, 1);\r\n      var externalListeners;\r\n      eventListeners.slice(0).forEach(function (_ref4) {\r\n        var listener = _ref4.listener,\r\n            external = _ref4.external,\r\n            once = _ref4.once;\r\n\r\n        if (once) {\r\n          _this._off(eventName, listener);\r\n        }\r\n\r\n        if (external) {\r\n          (externalListeners || (externalListeners = [])).push(listener);\r\n          return;\r\n        }\r\n\r\n        listener.apply(null, args);\r\n      });\r\n\r\n      if (externalListeners) {\r\n        externalListeners.forEach(function (listener) {\r\n          listener.apply(null, args);\r\n        });\r\n        externalListeners = null;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_on\",\r\n    value: function _on(eventName, listener) {\r\n      var _this$_listeners;\r\n\r\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\r\n      var eventListeners = (_this$_listeners = this._listeners)[eventName] || (_this$_listeners[eventName] = []);\r\n      eventListeners.push({\r\n        listener: listener,\r\n        external: (options === null || options === void 0 ? void 0 : options.external) === true,\r\n        once: (options === null || options === void 0 ? void 0 : options.once) === true\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_off\",\r\n    value: function _off(eventName, listener) {\r\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\r\n      var eventListeners = this._listeners[eventName];\r\n\r\n      if (!eventListeners) {\r\n        return;\r\n      }\r\n\r\n      for (var i = 0, ii = eventListeners.length; i < ii; i++) {\r\n        if (eventListeners[i].listener === listener) {\r\n          eventListeners.splice(i, 1);\r\n          return;\r\n        }\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return EventBus;\r\n}();\r\n\r\nexports.EventBus = EventBus;\r\n\r\nfunction clamp(v, min, max) {\r\n  return Math.min(Math.max(v, min), max);\r\n}\r\n\r\nvar ProgressBar = /*#__PURE__*/function () {\r\n  function ProgressBar(id) {\r\n    var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\r\n        height = _ref5.height,\r\n        width = _ref5.width,\r\n        units = _ref5.units;\r\n\r\n    _classCallCheck(this, ProgressBar);\r\n\r\n    this.visible = true;\r\n    this.div = document.querySelector(id + \" .progress\");\r\n    this.bar = this.div.parentNode;\r\n    this.height = height || 100;\r\n    this.width = width || 100;\r\n    this.units = units || \"%\";\r\n    this.div.style.height = this.height + this.units;\r\n    this.percent = 0;\r\n  }\r\n\r\n  _createClass(ProgressBar, [{\r\n    key: \"_updateBar\",\r\n    value: function _updateBar() {\r\n      if (this._indeterminate) {\r\n        this.div.classList.add(\"indeterminate\");\r\n        this.div.style.width = this.width + this.units;\r\n        return;\r\n      }\r\n\r\n      this.div.classList.remove(\"indeterminate\");\r\n      var progressSize = this.width * this._percent / 100;\r\n      this.div.style.width = progressSize + this.units;\r\n    }\r\n  }, {\r\n    key: \"percent\",\r\n    get: function get() {\r\n      return this._percent;\r\n    },\r\n    set: function set(val) {\r\n      this._indeterminate = isNaN(val);\r\n      this._percent = clamp(val, 0, 100);\r\n\r\n      this._updateBar();\r\n    }\r\n  }, {\r\n    key: \"setWidth\",\r\n    value: function setWidth(viewer) {\r\n      if (!viewer) {\r\n        return;\r\n      }\r\n\r\n      var container = viewer.parentNode;\r\n      var scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\r\n\r\n      if (scrollbarWidth > 0) {\r\n        var doc = document.documentElement;\r\n        doc.style.setProperty(LOADINGBAR_END_OFFSET_VAR, \"\".concat(scrollbarWidth, \"px\"));\r\n      }\r\n    }\r\n  }, {\r\n    key: \"hide\",\r\n    value: function hide() {\r\n      if (!this.visible) {\r\n        return;\r\n      }\r\n\r\n      this.visible = false;\r\n      this.bar.classList.add(\"hidden\");\r\n    }\r\n  }, {\r\n    key: \"show\",\r\n    value: function show() {\r\n      if (this.visible) {\r\n        return;\r\n      }\r\n\r\n      this.visible = true;\r\n      this.bar.classList.remove(\"hidden\");\r\n    }\r\n  }]);\r\n\r\n  return ProgressBar;\r\n}();\r\n\r\nexports.ProgressBar = ProgressBar;\r\n\r\nfunction moveToEndOfArray(arr, condition) {\r\n  var moved = [],\r\n      len = arr.length;\r\n  var write = 0;\r\n\r\n  for (var read = 0; read < len; ++read) {\r\n    if (condition(arr[read])) {\r\n      moved.push(arr[read]);\r\n    } else {\r\n      arr[write] = arr[read];\r\n      ++write;\r\n    }\r\n  }\r\n\r\n  for (var _read = 0; write < len; ++_read, ++write) {\r\n    arr[write] = moved[_read];\r\n  }\r\n}\r\n\r\nfunction getActiveOrFocusedElement() {\r\n  var curRoot = document;\r\n  var curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(\":focus\");\r\n\r\n  while ((_curActiveOrFocused = curActiveOrFocused) !== null && _curActiveOrFocused !== void 0 && _curActiveOrFocused.shadowRoot) {\r\n    var _curActiveOrFocused;\r\n\r\n    curRoot = curActiveOrFocused.shadowRoot;\r\n    curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(\":focus\");\r\n  }\r\n\r\n  return curActiveOrFocused;\r\n}\r\n\r\n/***/ }),\r\n/* 7 */\r\n/***/ ((module) => {\r\n\r\n\r\n\r\nvar pdfjsLib;\r\n\r\nif (typeof window !== \"undefined\" && window[\"pdfjs-dist/build/pdf\"]) {\r\n  pdfjsLib = window[\"pdfjs-dist/build/pdf\"];\r\n} else {\r\n  pdfjsLib = require(\"../build/pdf.js\");\r\n}\r\n\r\nmodule.exports = pdfjsLib;\r\n\r\n/***/ }),\r\n/* 8 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFCursorTools = exports.CursorTool = void 0;\r\n\r\nvar _grab_to_pan = __webpack_require__(9);\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar CursorTool = {\r\n  SELECT: 0,\r\n  HAND: 1,\r\n  ZOOM: 2\r\n};\r\nexports.CursorTool = CursorTool;\r\n\r\nvar PDFCursorTools = /*#__PURE__*/function () {\r\n  function PDFCursorTools(_ref) {\r\n    var _this = this;\r\n\r\n    var container = _ref.container,\r\n        eventBus = _ref.eventBus,\r\n        _ref$cursorToolOnLoad = _ref.cursorToolOnLoad,\r\n        cursorToolOnLoad = _ref$cursorToolOnLoad === void 0 ? CursorTool.SELECT : _ref$cursorToolOnLoad;\r\n\r\n    _classCallCheck(this, PDFCursorTools);\r\n\r\n    this.container = container;\r\n    this.eventBus = eventBus;\r\n    this.active = CursorTool.SELECT;\r\n    this.activeBeforePresentationMode = null;\r\n    this.handTool = new _grab_to_pan.GrabToPan({\r\n      element: this.container\r\n    });\r\n\r\n    this._addEventListeners();\r\n\r\n    Promise.resolve().then(function () {\r\n      _this.switchTool(cursorToolOnLoad);\r\n    });\r\n  }\r\n\r\n  _createClass(PDFCursorTools, [{\r\n    key: \"activeTool\",\r\n    get: function get() {\r\n      return this.active;\r\n    }\r\n  }, {\r\n    key: \"switchTool\",\r\n    value: function switchTool(tool) {\r\n      var _this2 = this;\r\n\r\n      if (this.activeBeforePresentationMode !== null) {\r\n        return;\r\n      }\r\n\r\n      if (tool === this.active) {\r\n        return;\r\n      }\r\n\r\n      var disableActiveTool = function disableActiveTool() {\r\n        switch (_this2.active) {\r\n          case CursorTool.SELECT:\r\n            break;\r\n\r\n          case CursorTool.HAND:\r\n            _this2.handTool.deactivate();\r\n\r\n            break;\r\n\r\n          case CursorTool.ZOOM:\r\n        }\r\n      };\r\n\r\n      switch (tool) {\r\n        case CursorTool.SELECT:\r\n          disableActiveTool();\r\n          break;\r\n\r\n        case CursorTool.HAND:\r\n          disableActiveTool();\r\n          this.handTool.activate();\r\n          break;\r\n\r\n        case CursorTool.ZOOM:\r\n        default:\r\n          console.error(\"switchTool: \\\"\".concat(tool, \"\\\" is an unsupported value.\"));\r\n          return;\r\n      }\r\n\r\n      this.active = tool;\r\n\r\n      this._dispatchEvent();\r\n    }\r\n  }, {\r\n    key: \"_dispatchEvent\",\r\n    value: function _dispatchEvent() {\r\n      this.eventBus.dispatch(\"cursortoolchanged\", {\r\n        source: this,\r\n        tool: this.active\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_addEventListeners\",\r\n    value: function _addEventListeners() {\r\n      var _this3 = this;\r\n\r\n      this.eventBus._on(\"switchcursortool\", function (evt) {\r\n        _this3.switchTool(evt.tool);\r\n      });\r\n\r\n      this.eventBus._on(\"presentationmodechanged\", function (evt) {\r\n        switch (evt.state) {\r\n          case _ui_utils.PresentationModeState.CHANGING:\r\n            break;\r\n\r\n          case _ui_utils.PresentationModeState.FULLSCREEN:\r\n            {\r\n              var previouslyActive = _this3.active;\r\n\r\n              _this3.switchTool(CursorTool.SELECT);\r\n\r\n              _this3.activeBeforePresentationMode = previouslyActive;\r\n              break;\r\n            }\r\n\r\n          case _ui_utils.PresentationModeState.NORMAL:\r\n            {\r\n              var _previouslyActive = _this3.activeBeforePresentationMode;\r\n              _this3.activeBeforePresentationMode = null;\r\n\r\n              _this3.switchTool(_previouslyActive);\r\n\r\n              break;\r\n            }\r\n        }\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return PDFCursorTools;\r\n}();\r\n\r\nexports.PDFCursorTools = PDFCursorTools;\r\n\r\n/***/ }),\r\n/* 9 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.GrabToPan = GrabToPan;\r\n\r\nfunction GrabToPan(options) {\r\n  this.element = options.element;\r\n  this.document = options.element.ownerDocument;\r\n\r\n  if (typeof options.ignoreTarget === \"function\") {\r\n    this.ignoreTarget = options.ignoreTarget;\r\n  }\r\n\r\n  this.onActiveChanged = options.onActiveChanged;\r\n  this.activate = this.activate.bind(this);\r\n  this.deactivate = this.deactivate.bind(this);\r\n  this.toggle = this.toggle.bind(this);\r\n  this._onmousedown = this._onmousedown.bind(this);\r\n  this._onmousemove = this._onmousemove.bind(this);\r\n  this._endPan = this._endPan.bind(this);\r\n  var overlay = this.overlay = document.createElement(\"div\");\r\n  overlay.className = \"grab-to-pan-grabbing\";\r\n}\r\n\r\nGrabToPan.prototype = {\r\n  CSS_CLASS_GRAB: \"grab-to-pan-grab\",\r\n  activate: function GrabToPan_activate() {\r\n    if (!this.active) {\r\n      this.active = true;\r\n      this.element.addEventListener(\"mousedown\", this._onmousedown, true);\r\n      this.element.classList.add(this.CSS_CLASS_GRAB);\r\n\r\n      if (this.onActiveChanged) {\r\n        this.onActiveChanged(true);\r\n      }\r\n    }\r\n  },\r\n  deactivate: function GrabToPan_deactivate() {\r\n    if (this.active) {\r\n      this.active = false;\r\n      this.element.removeEventListener(\"mousedown\", this._onmousedown, true);\r\n\r\n      this._endPan();\r\n\r\n      this.element.classList.remove(this.CSS_CLASS_GRAB);\r\n\r\n      if (this.onActiveChanged) {\r\n        this.onActiveChanged(false);\r\n      }\r\n    }\r\n  },\r\n  toggle: function GrabToPan_toggle() {\r\n    if (this.active) {\r\n      this.deactivate();\r\n    } else {\r\n      this.activate();\r\n    }\r\n  },\r\n  ignoreTarget: function GrabToPan_ignoreTarget(node) {\r\n    return node[matchesSelector](\"a[href], a[href] *, input, textarea, button, button *, select, option\");\r\n  },\r\n  _onmousedown: function GrabToPan__onmousedown(event) {\r\n    if (event.button !== 0 || this.ignoreTarget(event.target)) {\r\n      return;\r\n    }\r\n\r\n    if (event.originalTarget) {\r\n      try {\r\n        event.originalTarget.tagName;\r\n      } catch (e) {\r\n        return;\r\n      }\r\n    }\r\n\r\n    this.scrollLeftStart = this.element.scrollLeft;\r\n    this.scrollTopStart = this.element.scrollTop;\r\n    this.clientXStart = event.clientX;\r\n    this.clientYStart = event.clientY;\r\n    this.document.addEventListener(\"mousemove\", this._onmousemove, true);\r\n    this.document.addEventListener(\"mouseup\", this._endPan, true);\r\n    this.element.addEventListener(\"scroll\", this._endPan, true);\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    var focusedElement = document.activeElement;\r\n\r\n    if (focusedElement && !focusedElement.contains(event.target)) {\r\n      focusedElement.blur();\r\n    }\r\n  },\r\n  _onmousemove: function GrabToPan__onmousemove(event) {\r\n    this.element.removeEventListener(\"scroll\", this._endPan, true);\r\n\r\n    if (isLeftMouseReleased(event)) {\r\n      this._endPan();\r\n\r\n      return;\r\n    }\r\n\r\n    var xDiff = event.clientX - this.clientXStart;\r\n    var yDiff = event.clientY - this.clientYStart;\r\n    var scrollTop = this.scrollTopStart - yDiff;\r\n    var scrollLeft = this.scrollLeftStart - xDiff;\r\n\r\n    if (this.element.scrollTo) {\r\n      this.element.scrollTo({\r\n        top: scrollTop,\r\n        left: scrollLeft,\r\n        behavior: \"instant\"\r\n      });\r\n    } else {\r\n      this.element.scrollTop = scrollTop;\r\n      this.element.scrollLeft = scrollLeft;\r\n    }\r\n\r\n    if (!this.overlay.parentNode) {\r\n      document.body.appendChild(this.overlay);\r\n    }\r\n  },\r\n  _endPan: function GrabToPan__endPan() {\r\n    this.element.removeEventListener(\"scroll\", this._endPan, true);\r\n    this.document.removeEventListener(\"mousemove\", this._onmousemove, true);\r\n    this.document.removeEventListener(\"mouseup\", this._endPan, true);\r\n    this.overlay.remove();\r\n  }\r\n};\r\nvar matchesSelector;\r\n[\"webkitM\", \"mozM\", \"m\"].some(function (prefix) {\r\n  var name = prefix + \"atches\";\r\n\r\n  if (name in document.documentElement) {\r\n    matchesSelector = name;\r\n  }\r\n\r\n  name += \"Selector\";\r\n\r\n  if (name in document.documentElement) {\r\n    matchesSelector = name;\r\n  }\r\n\r\n  return matchesSelector;\r\n});\r\nvar isNotIEorIsIE10plus = !document.documentMode || document.documentMode > 9;\r\nvar chrome = window.chrome;\r\nvar isChrome15OrOpera15plus = chrome && (chrome.webstore || chrome.app);\r\nvar isSafari6plus = /Apple/.test(navigator.vendor) && /Version\\/([6-9]\\d*|[1-5]\\d+)/.test(navigator.userAgent);\r\n\r\nfunction isLeftMouseReleased(event) {\r\n  if (\"buttons\" in event && isNotIEorIsIE10plus) {\r\n    return !(event.buttons & 1);\r\n  }\r\n\r\n  if (isChrome15OrOpera15plus || isSafari6plus) {\r\n    return event.which === 0;\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\n/***/ }),\r\n/* 10 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.RenderingStates = exports.PDFRenderingQueue = void 0;\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar CLEANUP_TIMEOUT = 30000;\r\nvar RenderingStates = {\r\n  INITIAL: 0,\r\n  RUNNING: 1,\r\n  PAUSED: 2,\r\n  FINISHED: 3\r\n};\r\nexports.RenderingStates = RenderingStates;\r\n\r\nvar PDFRenderingQueue = /*#__PURE__*/function () {\r\n  function PDFRenderingQueue() {\r\n    _classCallCheck(this, PDFRenderingQueue);\r\n\r\n    this.pdfViewer = null;\r\n    this.pdfThumbnailViewer = null;\r\n    this.onIdle = null;\r\n    this.highestPriorityPage = null;\r\n    this.idleTimeout = null;\r\n    this.printing = false;\r\n    this.isThumbnailViewEnabled = false;\r\n  }\r\n\r\n  _createClass(PDFRenderingQueue, [{\r\n    key: \"setViewer\",\r\n    value: function setViewer(pdfViewer) {\r\n      this.pdfViewer = pdfViewer;\r\n    }\r\n  }, {\r\n    key: \"setThumbnailViewer\",\r\n    value: function setThumbnailViewer(pdfThumbnailViewer) {\r\n      this.pdfThumbnailViewer = pdfThumbnailViewer;\r\n    }\r\n  }, {\r\n    key: \"isHighestPriority\",\r\n    value: function isHighestPriority(view) {\r\n      return this.highestPriorityPage === view.renderingId;\r\n    }\r\n  }, {\r\n    key: \"renderHighestPriority\",\r\n    value: function renderHighestPriority(currentlyVisiblePages) {\r\n      if (this.idleTimeout) {\r\n        clearTimeout(this.idleTimeout);\r\n        this.idleTimeout = null;\r\n      }\r\n\r\n      if (this.pdfViewer.forceRendering(currentlyVisiblePages)) {\r\n        return;\r\n      }\r\n\r\n      if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) {\r\n        if (this.pdfThumbnailViewer.forceRendering()) {\r\n          return;\r\n        }\r\n      }\r\n\r\n      if (this.printing) {\r\n        return;\r\n      }\r\n\r\n      if (this.onIdle) {\r\n        this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"getHighestPriority\",\r\n    value: function getHighestPriority(visible, views, scrolledDown) {\r\n      var visibleViews = visible.views;\r\n      var numVisible = visibleViews.length;\r\n\r\n      if (numVisible === 0) {\r\n        return null;\r\n      }\r\n\r\n      for (var i = 0; i < numVisible; ++i) {\r\n        var view = visibleViews[i].view;\r\n\r\n        if (!this.isViewFinished(view)) {\r\n          return view;\r\n        }\r\n      }\r\n\r\n      if (scrolledDown) {\r\n        var nextPageIndex = visible.last.id;\r\n\r\n        if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) {\r\n          return views[nextPageIndex];\r\n        }\r\n      } else {\r\n        var previousPageIndex = visible.first.id - 2;\r\n\r\n        if (views[previousPageIndex] && !this.isViewFinished(views[previousPageIndex])) {\r\n          return views[previousPageIndex];\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n  }, {\r\n    key: \"isViewFinished\",\r\n    value: function isViewFinished(view) {\r\n      return view.renderingState === RenderingStates.FINISHED;\r\n    }\r\n  }, {\r\n    key: \"renderView\",\r\n    value: function renderView(view) {\r\n      var _this = this;\r\n\r\n      switch (view.renderingState) {\r\n        case RenderingStates.FINISHED:\r\n          return false;\r\n\r\n        case RenderingStates.PAUSED:\r\n          this.highestPriorityPage = view.renderingId;\r\n          view.resume();\r\n          break;\r\n\r\n        case RenderingStates.RUNNING:\r\n          this.highestPriorityPage = view.renderingId;\r\n          break;\r\n\r\n        case RenderingStates.INITIAL:\r\n          this.highestPriorityPage = view.renderingId;\r\n          view.draw()[\"finally\"](function () {\r\n            _this.renderHighestPriority();\r\n          })[\"catch\"](function (reason) {\r\n            if (reason instanceof _pdfjsLib.RenderingCancelledException) {\r\n              return;\r\n            }\r\n\r\n            console.error(\"renderView: \\\"\".concat(reason, \"\\\"\"));\r\n          });\r\n          break;\r\n      }\r\n\r\n      return true;\r\n    }\r\n  }]);\r\n\r\n  return PDFRenderingQueue;\r\n}();\r\n\r\nexports.PDFRenderingQueue = PDFRenderingQueue;\r\n\r\n/***/ }),\r\n/* 11 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.OverlayManager = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar OverlayManager = /*#__PURE__*/function () {\r\n  function OverlayManager() {\r\n    _classCallCheck(this, OverlayManager);\r\n\r\n    this._overlays = {};\r\n    this._active = null;\r\n    this._keyDownBound = this._keyDown.bind(this);\r\n  }\r\n\r\n  _createClass(OverlayManager, [{\r\n    key: \"active\",\r\n    get: function get() {\r\n      return this._active;\r\n    }\r\n  }, {\r\n    key: \"register\",\r\n    value: function () {\r\n      var _register = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(name, element) {\r\n        var callerCloseMethod,\r\n            canForceClose,\r\n            container,\r\n            _args = arguments;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                callerCloseMethod = _args.length > 2 && _args[2] !== undefined ? _args[2] : null;\r\n                canForceClose = _args.length > 3 && _args[3] !== undefined ? _args[3] : false;\r\n\r\n                if (!(!name || !element || !(container = element.parentNode))) {\r\n                  _context.next = 6;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"Not enough parameters.\");\r\n\r\n              case 6:\r\n                if (!this._overlays[name]) {\r\n                  _context.next = 8;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"The overlay is already registered.\");\r\n\r\n              case 8:\r\n                this._overlays[name] = {\r\n                  element: element,\r\n                  container: container,\r\n                  callerCloseMethod: callerCloseMethod,\r\n                  canForceClose: canForceClose\r\n                };\r\n\r\n              case 9:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function register(_x, _x2) {\r\n        return _register.apply(this, arguments);\r\n      }\r\n\r\n      return register;\r\n    }()\r\n  }, {\r\n    key: \"unregister\",\r\n    value: function () {\r\n      var _unregister = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(name) {\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                if (this._overlays[name]) {\r\n                  _context2.next = 4;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"The overlay does not exist.\");\r\n\r\n              case 4:\r\n                if (!(this._active === name)) {\r\n                  _context2.next = 6;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"The overlay cannot be removed while it is active.\");\r\n\r\n              case 6:\r\n                delete this._overlays[name];\r\n\r\n              case 7:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this);\r\n      }));\r\n\r\n      function unregister(_x3) {\r\n        return _unregister.apply(this, arguments);\r\n      }\r\n\r\n      return unregister;\r\n    }()\r\n  }, {\r\n    key: \"open\",\r\n    value: function () {\r\n      var _open = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3(name) {\r\n        return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\r\n          while (1) {\r\n            switch (_context3.prev = _context3.next) {\r\n              case 0:\r\n                if (this._overlays[name]) {\r\n                  _context3.next = 4;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"The overlay does not exist.\");\r\n\r\n              case 4:\r\n                if (!this._active) {\r\n                  _context3.next = 14;\r\n                  break;\r\n                }\r\n\r\n                if (!this._overlays[name].canForceClose) {\r\n                  _context3.next = 9;\r\n                  break;\r\n                }\r\n\r\n                this._closeThroughCaller();\r\n\r\n                _context3.next = 14;\r\n                break;\r\n\r\n              case 9:\r\n                if (!(this._active === name)) {\r\n                  _context3.next = 13;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"The overlay is already active.\");\r\n\r\n              case 13:\r\n                throw new Error(\"Another overlay is currently active.\");\r\n\r\n              case 14:\r\n                this._active = name;\r\n\r\n                this._overlays[this._active].element.classList.remove(\"hidden\");\r\n\r\n                this._overlays[this._active].container.classList.remove(\"hidden\");\r\n\r\n                window.addEventListener(\"keydown\", this._keyDownBound);\r\n\r\n              case 18:\r\n              case \"end\":\r\n                return _context3.stop();\r\n            }\r\n          }\r\n        }, _callee3, this);\r\n      }));\r\n\r\n      function open(_x4) {\r\n        return _open.apply(this, arguments);\r\n      }\r\n\r\n      return open;\r\n    }()\r\n  }, {\r\n    key: \"close\",\r\n    value: function () {\r\n      var _close = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(name) {\r\n        return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\r\n          while (1) {\r\n            switch (_context4.prev = _context4.next) {\r\n              case 0:\r\n                if (this._overlays[name]) {\r\n                  _context4.next = 4;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"The overlay does not exist.\");\r\n\r\n              case 4:\r\n                if (this._active) {\r\n                  _context4.next = 8;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"The overlay is currently not active.\");\r\n\r\n              case 8:\r\n                if (!(this._active !== name)) {\r\n                  _context4.next = 10;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"Another overlay is currently active.\");\r\n\r\n              case 10:\r\n                this._overlays[this._active].container.classList.add(\"hidden\");\r\n\r\n                this._overlays[this._active].element.classList.add(\"hidden\");\r\n\r\n                this._active = null;\r\n                window.removeEventListener(\"keydown\", this._keyDownBound);\r\n\r\n              case 14:\r\n              case \"end\":\r\n                return _context4.stop();\r\n            }\r\n          }\r\n        }, _callee4, this);\r\n      }));\r\n\r\n      function close(_x5) {\r\n        return _close.apply(this, arguments);\r\n      }\r\n\r\n      return close;\r\n    }()\r\n  }, {\r\n    key: \"_keyDown\",\r\n    value: function _keyDown(evt) {\r\n      if (this._active && evt.keyCode === 27) {\r\n        this._closeThroughCaller();\r\n\r\n        evt.preventDefault();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_closeThroughCaller\",\r\n    value: function _closeThroughCaller() {\r\n      if (this._overlays[this._active].callerCloseMethod) {\r\n        this._overlays[this._active].callerCloseMethod();\r\n      }\r\n\r\n      if (this._active) {\r\n        this.close(this._active);\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return OverlayManager;\r\n}();\r\n\r\nexports.OverlayManager = OverlayManager;\r\n\r\n/***/ }),\r\n/* 12 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PasswordPrompt = void 0;\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar PasswordPrompt = /*#__PURE__*/function () {\r\n  function PasswordPrompt(options, overlayManager) {\r\n    var _this = this;\r\n\r\n    var l10n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _ui_utils.NullL10n;\r\n    var isViewerEmbedded = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\r\n\r\n    _classCallCheck(this, PasswordPrompt);\r\n\r\n    this.overlayName = options.overlayName;\r\n    this.container = options.container;\r\n    this.label = options.label;\r\n    this.input = options.input;\r\n    this.submitButton = options.submitButton;\r\n    this.cancelButton = options.cancelButton;\r\n    this.overlayManager = overlayManager;\r\n    this.l10n = l10n;\r\n    this._isViewerEmbedded = isViewerEmbedded;\r\n    this.updateCallback = null;\r\n    this.reason = null;\r\n    this.submitButton.addEventListener(\"click\", this.verify.bind(this));\r\n    this.cancelButton.addEventListener(\"click\", this.close.bind(this));\r\n    this.input.addEventListener(\"keydown\", function (e) {\r\n      if (e.keyCode === 13) {\r\n        _this.verify();\r\n      }\r\n    });\r\n    this.overlayManager.register(this.overlayName, this.container, this.close.bind(this), true);\r\n  }\r\n\r\n  _createClass(PasswordPrompt, [{\r\n    key: \"open\",\r\n    value: function open() {\r\n      var _this2 = this;\r\n\r\n      this.overlayManager.open(this.overlayName).then(function () {\r\n        if (!_this2._isViewerEmbedded || _this2.reason === _pdfjsLib.PasswordResponses.INCORRECT_PASSWORD) {\r\n          _this2.input.focus();\r\n        }\r\n\r\n        var promptString;\r\n\r\n        if (_this2.reason === _pdfjsLib.PasswordResponses.INCORRECT_PASSWORD) {\r\n          promptString = _this2.l10n.get(\"password_invalid\", null, \"Invalid password. Please try again.\");\r\n        } else {\r\n          promptString = _this2.l10n.get(\"password_label\", null, \"Enter the password to open this PDF file.\");\r\n        }\r\n\r\n        promptString.then(function (msg) {\r\n          _this2.label.textContent = msg;\r\n        });\r\n      });\r\n    }\r\n  }, {\r\n    key: \"close\",\r\n    value: function close() {\r\n      var _this3 = this;\r\n\r\n      this.overlayManager.close(this.overlayName).then(function () {\r\n        _this3.input.value = \"\";\r\n      });\r\n    }\r\n  }, {\r\n    key: \"verify\",\r\n    value: function verify() {\r\n      var password = this.input.value;\r\n\r\n      if ((password === null || password === void 0 ? void 0 : password.length) > 0) {\r\n        this.close();\r\n        this.updateCallback(password);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"setUpdateCallback\",\r\n    value: function setUpdateCallback(updateCallback, reason) {\r\n      this.updateCallback = updateCallback;\r\n      this.reason = reason;\r\n    }\r\n  }]);\r\n\r\n  return PasswordPrompt;\r\n}();\r\n\r\nexports.PasswordPrompt = PasswordPrompt;\r\n\r\n/***/ }),\r\n/* 13 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFAttachmentViewer = void 0;\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nvar _base_tree_viewer = __webpack_require__(14);\r\n\r\nvar _viewer_compatibility = __webpack_require__(2);\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\r\n\r\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nvar PdfFileRegExp = /\\.pdf$/i;\r\n\r\nvar PDFAttachmentViewer = /*#__PURE__*/function (_BaseTreeViewer) {\r\n  _inherits(PDFAttachmentViewer, _BaseTreeViewer);\r\n\r\n  var _super = _createSuper(PDFAttachmentViewer);\r\n\r\n  function PDFAttachmentViewer(options) {\r\n    var _this;\r\n\r\n    _classCallCheck(this, PDFAttachmentViewer);\r\n\r\n    _this = _super.call(this, options);\r\n    _this.downloadManager = options.downloadManager;\r\n\r\n    _this.eventBus._on(\"fileattachmentannotation\", _this._appendAttachment.bind(_assertThisInitialized(_this)));\r\n\r\n    return _this;\r\n  }\r\n\r\n  _createClass(PDFAttachmentViewer, [{\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      var keepRenderedCapability = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n\r\n      _get(_getPrototypeOf(PDFAttachmentViewer.prototype), \"reset\", this).call(this);\r\n\r\n      this._attachments = null;\r\n\r\n      if (!keepRenderedCapability) {\r\n        this._renderedCapability = (0, _pdfjsLib.createPromiseCapability)();\r\n      }\r\n\r\n      if (this._pendingDispatchEvent) {\r\n        clearTimeout(this._pendingDispatchEvent);\r\n      }\r\n\r\n      this._pendingDispatchEvent = null;\r\n    }\r\n  }, {\r\n    key: \"_dispatchEvent\",\r\n    value: function _dispatchEvent(attachmentsCount) {\r\n      var _this2 = this;\r\n\r\n      this._renderedCapability.resolve();\r\n\r\n      if (this._pendingDispatchEvent) {\r\n        clearTimeout(this._pendingDispatchEvent);\r\n        this._pendingDispatchEvent = null;\r\n      }\r\n\r\n      if (attachmentsCount === 0) {\r\n        this._pendingDispatchEvent = setTimeout(function () {\r\n          _this2.eventBus.dispatch(\"attachmentsloaded\", {\r\n            source: _this2,\r\n            attachmentsCount: 0\r\n          });\r\n\r\n          _this2._pendingDispatchEvent = null;\r\n        });\r\n        return;\r\n      }\r\n\r\n      this.eventBus.dispatch(\"attachmentsloaded\", {\r\n        source: this,\r\n        attachmentsCount: attachmentsCount\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_bindPdfLink\",\r\n    value: function _bindPdfLink(element, _ref) {\r\n      var _this3 = this;\r\n\r\n      var content = _ref.content,\r\n          filename = _ref.filename;\r\n      var blobUrl;\r\n\r\n      element.onclick = function () {\r\n        if (!blobUrl) {\r\n          blobUrl = URL.createObjectURL(new Blob([content], {\r\n            type: \"application/pdf\"\r\n          }));\r\n        }\r\n\r\n        var viewerUrl;\r\n        viewerUrl = \"?file=\" + encodeURIComponent(blobUrl + \"#\" + filename);\r\n\r\n        try {\r\n          window.open(viewerUrl);\r\n        } catch (ex) {\r\n          console.error(\"_bindPdfLink: \".concat(ex));\r\n          URL.revokeObjectURL(blobUrl);\r\n          blobUrl = null;\r\n\r\n          _this3.downloadManager.downloadData(content, filename, \"application/pdf\");\r\n        }\r\n\r\n        return false;\r\n      };\r\n    }\r\n  }, {\r\n    key: \"_bindLink\",\r\n    value: function _bindLink(element, _ref2) {\r\n      var _this4 = this;\r\n\r\n      var content = _ref2.content,\r\n          filename = _ref2.filename;\r\n\r\n      element.onclick = function () {\r\n        var contentType = PdfFileRegExp.test(filename) ? \"application/pdf\" : \"\";\r\n\r\n        _this4.downloadManager.downloadData(content, filename, contentType);\r\n\r\n        return false;\r\n      };\r\n    }\r\n  }, {\r\n    key: \"render\",\r\n    value: function render(_ref3) {\r\n      var attachments = _ref3.attachments,\r\n          _ref3$keepRenderedCap = _ref3.keepRenderedCapability,\r\n          keepRenderedCapability = _ref3$keepRenderedCap === void 0 ? false : _ref3$keepRenderedCap;\r\n\r\n      if (this._attachments) {\r\n        this.reset(keepRenderedCapability);\r\n      }\r\n\r\n      this._attachments = attachments || null;\r\n\r\n      if (!attachments) {\r\n        this._dispatchEvent(0);\r\n\r\n        return;\r\n      }\r\n\r\n      var names = Object.keys(attachments).sort(function (a, b) {\r\n        return a.toLowerCase().localeCompare(b.toLowerCase());\r\n      });\r\n      var fragment = document.createDocumentFragment();\r\n      var attachmentsCount = 0;\r\n\r\n      var _iterator = _createForOfIteratorHelper(names),\r\n          _step;\r\n\r\n      try {\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          var name = _step.value;\r\n          var item = attachments[name];\r\n          var filename = (0, _pdfjsLib.getFilenameFromUrl)(item.filename);\r\n          var div = document.createElement(\"div\");\r\n          div.className = \"treeItem\";\r\n          var element = document.createElement(\"a\");\r\n\r\n          if (PdfFileRegExp.test(filename) && !_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {\r\n            this._bindPdfLink(element, {\r\n              content: item.content,\r\n              filename: filename\r\n            });\r\n          } else {\r\n            this._bindLink(element, {\r\n              content: item.content,\r\n              filename: filename\r\n            });\r\n          }\r\n\r\n          element.textContent = this._normalizeTextContent(filename);\r\n          div.appendChild(element);\r\n          fragment.appendChild(div);\r\n          attachmentsCount++;\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n\r\n      this._finishRendering(fragment, attachmentsCount);\r\n    }\r\n  }, {\r\n    key: \"_appendAttachment\",\r\n    value: function _appendAttachment(_ref4) {\r\n      var _this5 = this;\r\n\r\n      var id = _ref4.id,\r\n          filename = _ref4.filename,\r\n          content = _ref4.content;\r\n      var renderedPromise = this._renderedCapability.promise;\r\n      renderedPromise.then(function () {\r\n        if (renderedPromise !== _this5._renderedCapability.promise) {\r\n          return;\r\n        }\r\n\r\n        var attachments = _this5._attachments;\r\n\r\n        if (!attachments) {\r\n          attachments = Object.create(null);\r\n        } else {\r\n          for (var name in attachments) {\r\n            if (id === name) {\r\n              return;\r\n            }\r\n          }\r\n        }\r\n\r\n        attachments[id] = {\r\n          filename: filename,\r\n          content: content\r\n        };\r\n\r\n        _this5.render({\r\n          attachments: attachments,\r\n          keepRenderedCapability: true\r\n        });\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return PDFAttachmentViewer;\r\n}(_base_tree_viewer.BaseTreeViewer);\r\n\r\nexports.PDFAttachmentViewer = PDFAttachmentViewer;\r\n\r\n/***/ }),\r\n/* 14 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.BaseTreeViewer = void 0;\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar TREEITEM_OFFSET_TOP = -100;\r\nvar TREEITEM_SELECTED_CLASS = \"selected\";\r\n\r\nvar BaseTreeViewer = /*#__PURE__*/function () {\r\n  function BaseTreeViewer(options) {\r\n    _classCallCheck(this, BaseTreeViewer);\r\n\r\n    if (this.constructor === BaseTreeViewer) {\r\n      throw new Error(\"Cannot initialize BaseTreeViewer.\");\r\n    }\r\n\r\n    this.container = options.container;\r\n    this.eventBus = options.eventBus;\r\n    this.reset();\r\n  }\r\n\r\n  _createClass(BaseTreeViewer, [{\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      this._pdfDocument = null;\r\n      this._lastToggleIsShow = true;\r\n      this._currentTreeItem = null;\r\n      this.container.textContent = \"\";\r\n      this.container.classList.remove(\"treeWithDeepNesting\");\r\n    }\r\n  }, {\r\n    key: \"_dispatchEvent\",\r\n    value: function _dispatchEvent(count) {\r\n      throw new Error(\"Not implemented: _dispatchEvent\");\r\n    }\r\n  }, {\r\n    key: \"_bindLink\",\r\n    value: function _bindLink(element, params) {\r\n      throw new Error(\"Not implemented: _bindLink\");\r\n    }\r\n  }, {\r\n    key: \"_normalizeTextContent\",\r\n    value: function _normalizeTextContent(str) {\r\n      return (0, _pdfjsLib.removeNullCharacters)(str) || \"\\u2013\";\r\n    }\r\n  }, {\r\n    key: \"_addToggleButton\",\r\n    value: function _addToggleButton(div) {\r\n      var _this = this;\r\n\r\n      var hidden = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      var toggler = document.createElement(\"div\");\r\n      toggler.className = \"treeItemToggler\";\r\n\r\n      if (hidden) {\r\n        toggler.classList.add(\"treeItemsHidden\");\r\n      }\r\n\r\n      toggler.onclick = function (evt) {\r\n        evt.stopPropagation();\r\n        toggler.classList.toggle(\"treeItemsHidden\");\r\n\r\n        if (evt.shiftKey) {\r\n          var shouldShowAll = !toggler.classList.contains(\"treeItemsHidden\");\r\n\r\n          _this._toggleTreeItem(div, shouldShowAll);\r\n        }\r\n      };\r\n\r\n      div.insertBefore(toggler, div.firstChild);\r\n    }\r\n  }, {\r\n    key: \"_toggleTreeItem\",\r\n    value: function _toggleTreeItem(root) {\r\n      var show = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      this._lastToggleIsShow = show;\r\n\r\n      var _iterator = _createForOfIteratorHelper(root.querySelectorAll(\".treeItemToggler\")),\r\n          _step;\r\n\r\n      try {\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          var toggler = _step.value;\r\n          toggler.classList.toggle(\"treeItemsHidden\", !show);\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_toggleAllTreeItems\",\r\n    value: function _toggleAllTreeItems() {\r\n      this._toggleTreeItem(this.container, !this._lastToggleIsShow);\r\n    }\r\n  }, {\r\n    key: \"_finishRendering\",\r\n    value: function _finishRendering(fragment, count) {\r\n      var hasAnyNesting = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n\r\n      if (hasAnyNesting) {\r\n        this.container.classList.add(\"treeWithDeepNesting\");\r\n        this._lastToggleIsShow = !fragment.querySelector(\".treeItemsHidden\");\r\n      }\r\n\r\n      this.container.appendChild(fragment);\r\n\r\n      this._dispatchEvent(count);\r\n    }\r\n  }, {\r\n    key: \"render\",\r\n    value: function render(params) {\r\n      throw new Error(\"Not implemented: render\");\r\n    }\r\n  }, {\r\n    key: \"_updateCurrentTreeItem\",\r\n    value: function _updateCurrentTreeItem() {\r\n      var treeItem = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\r\n\r\n      if (this._currentTreeItem) {\r\n        this._currentTreeItem.classList.remove(TREEITEM_SELECTED_CLASS);\r\n\r\n        this._currentTreeItem = null;\r\n      }\r\n\r\n      if (treeItem) {\r\n        treeItem.classList.add(TREEITEM_SELECTED_CLASS);\r\n        this._currentTreeItem = treeItem;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_scrollToCurrentTreeItem\",\r\n    value: function _scrollToCurrentTreeItem(treeItem) {\r\n      if (!treeItem) {\r\n        return;\r\n      }\r\n\r\n      var currentNode = treeItem.parentNode;\r\n\r\n      while (currentNode && currentNode !== this.container) {\r\n        if (currentNode.classList.contains(\"treeItem\")) {\r\n          var toggler = currentNode.firstElementChild;\r\n          toggler === null || toggler === void 0 ? void 0 : toggler.classList.remove(\"treeItemsHidden\");\r\n        }\r\n\r\n        currentNode = currentNode.parentNode;\r\n      }\r\n\r\n      this._updateCurrentTreeItem(treeItem);\r\n\r\n      this.container.scrollTo(treeItem.offsetLeft, treeItem.offsetTop + TREEITEM_OFFSET_TOP);\r\n    }\r\n  }]);\r\n\r\n  return BaseTreeViewer;\r\n}();\r\n\r\nexports.BaseTreeViewer = BaseTreeViewer;\r\n\r\n/***/ }),\r\n/* 15 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFDocumentProperties = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar DEFAULT_FIELD_CONTENT = \"-\";\r\nvar NON_METRIC_LOCALES = [\"en-us\", \"en-lr\", \"my\"];\r\nvar US_PAGE_NAMES = {\r\n  \"8.5x11\": \"Letter\",\r\n  \"8.5x14\": \"Legal\"\r\n};\r\nvar METRIC_PAGE_NAMES = {\r\n  \"297x420\": \"A3\",\r\n  \"210x297\": \"A4\"\r\n};\r\n\r\nfunction getPageName(size, isPortrait, pageNames) {\r\n  var width = isPortrait ? size.width : size.height;\r\n  var height = isPortrait ? size.height : size.width;\r\n  return pageNames[\"\".concat(width, \"x\").concat(height)];\r\n}\r\n\r\nvar PDFDocumentProperties = /*#__PURE__*/function () {\r\n  function PDFDocumentProperties(_ref, overlayManager, eventBus) {\r\n    var _this = this;\r\n\r\n    var overlayName = _ref.overlayName,\r\n        fields = _ref.fields,\r\n        container = _ref.container,\r\n        closeButton = _ref.closeButton;\r\n    var l10n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _ui_utils.NullL10n;\r\n\r\n    _classCallCheck(this, PDFDocumentProperties);\r\n\r\n    this.overlayName = overlayName;\r\n    this.fields = fields;\r\n    this.container = container;\r\n    this.overlayManager = overlayManager;\r\n    this.l10n = l10n;\r\n\r\n    this._reset();\r\n\r\n    closeButton.addEventListener(\"click\", this.close.bind(this));\r\n    this.overlayManager.register(this.overlayName, this.container, this.close.bind(this));\r\n\r\n    eventBus._on(\"pagechanging\", function (evt) {\r\n      _this._currentPageNumber = evt.pageNumber;\r\n    });\r\n\r\n    eventBus._on(\"rotationchanging\", function (evt) {\r\n      _this._pagesRotation = evt.pagesRotation;\r\n    });\r\n\r\n    this._isNonMetricLocale = true;\r\n    l10n.getLanguage().then(function (locale) {\r\n      _this._isNonMetricLocale = NON_METRIC_LOCALES.includes(locale);\r\n    });\r\n  }\r\n\r\n  _createClass(PDFDocumentProperties, [{\r\n    key: \"open\",\r\n    value: function () {\r\n      var _open = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var _this2 = this;\r\n\r\n        var freezeFieldData, currentPageNumber, pagesRotation, _yield$this$pdfDocume, info, contentDispositionFilename, contentLength, _yield$Promise$all, _yield$Promise$all2, fileName, fileSize, creationDate, modificationDate, pageSize, isLinearized, _yield$this$pdfDocume2, length, data;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                freezeFieldData = function freezeFieldData(data) {\r\n                  Object.defineProperty(_this2, \"fieldData\", {\r\n                    value: Object.freeze(data),\r\n                    writable: false,\r\n                    enumerable: true,\r\n                    configurable: true\r\n                  });\r\n                };\r\n\r\n                _context.next = 3;\r\n                return Promise.all([this.overlayManager.open(this.overlayName), this._dataAvailableCapability.promise]);\r\n\r\n              case 3:\r\n                currentPageNumber = this._currentPageNumber;\r\n                pagesRotation = this._pagesRotation;\r\n\r\n                if (!(this.fieldData && currentPageNumber === this.fieldData._currentPageNumber && pagesRotation === this.fieldData._pagesRotation)) {\r\n                  _context.next = 8;\r\n                  break;\r\n                }\r\n\r\n                this._updateUI();\r\n\r\n                return _context.abrupt(\"return\");\r\n\r\n              case 8:\r\n                _context.next = 10;\r\n                return this.pdfDocument.getMetadata();\r\n\r\n              case 10:\r\n                _yield$this$pdfDocume = _context.sent;\r\n                info = _yield$this$pdfDocume.info;\r\n                contentDispositionFilename = _yield$this$pdfDocume.contentDispositionFilename;\r\n                contentLength = _yield$this$pdfDocume.contentLength;\r\n                _context.next = 16;\r\n                return Promise.all([contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url), this._parseFileSize(contentLength), this._parseDate(info.CreationDate), this._parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(function (pdfPage) {\r\n                  return _this2._parsePageSize((0, _ui_utils.getPageSizeInches)(pdfPage), pagesRotation);\r\n                }), this._parseLinearization(info.IsLinearized)]);\r\n\r\n              case 16:\r\n                _yield$Promise$all = _context.sent;\r\n                _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 6);\r\n                fileName = _yield$Promise$all2[0];\r\n                fileSize = _yield$Promise$all2[1];\r\n                creationDate = _yield$Promise$all2[2];\r\n                modificationDate = _yield$Promise$all2[3];\r\n                pageSize = _yield$Promise$all2[4];\r\n                isLinearized = _yield$Promise$all2[5];\r\n                freezeFieldData({\r\n                  fileName: fileName,\r\n                  fileSize: fileSize,\r\n                  title: info.Title,\r\n                  author: info.Author,\r\n                  subject: info.Subject,\r\n                  keywords: info.Keywords,\r\n                  creationDate: creationDate,\r\n                  modificationDate: modificationDate,\r\n                  creator: info.Creator,\r\n                  producer: info.Producer,\r\n                  version: info.PDFFormatVersion,\r\n                  pageCount: this.pdfDocument.numPages,\r\n                  pageSize: pageSize,\r\n                  linearized: isLinearized,\r\n                  _currentPageNumber: currentPageNumber,\r\n                  _pagesRotation: pagesRotation\r\n                });\r\n\r\n                this._updateUI();\r\n\r\n                _context.next = 28;\r\n                return this.pdfDocument.getDownloadInfo();\r\n\r\n              case 28:\r\n                _yield$this$pdfDocume2 = _context.sent;\r\n                length = _yield$this$pdfDocume2.length;\r\n\r\n                if (!(contentLength === length)) {\r\n                  _context.next = 32;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\");\r\n\r\n              case 32:\r\n                data = Object.assign(Object.create(null), this.fieldData);\r\n                _context.next = 35;\r\n                return this._parseFileSize(length);\r\n\r\n              case 35:\r\n                data.fileSize = _context.sent;\r\n                freezeFieldData(data);\r\n\r\n                this._updateUI();\r\n\r\n              case 38:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function open() {\r\n        return _open.apply(this, arguments);\r\n      }\r\n\r\n      return open;\r\n    }()\r\n  }, {\r\n    key: \"close\",\r\n    value: function close() {\r\n      this.overlayManager.close(this.overlayName);\r\n    }\r\n  }, {\r\n    key: \"setDocument\",\r\n    value: function setDocument(pdfDocument) {\r\n      var url = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n\r\n      if (this.pdfDocument) {\r\n        this._reset();\r\n\r\n        this._updateUI(true);\r\n      }\r\n\r\n      if (!pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      this.pdfDocument = pdfDocument;\r\n      this.url = url;\r\n\r\n      this._dataAvailableCapability.resolve();\r\n    }\r\n  }, {\r\n    key: \"_reset\",\r\n    value: function _reset() {\r\n      this.pdfDocument = null;\r\n      this.url = null;\r\n      delete this.fieldData;\r\n      this._dataAvailableCapability = (0, _pdfjsLib.createPromiseCapability)();\r\n      this._currentPageNumber = 1;\r\n      this._pagesRotation = 0;\r\n    }\r\n  }, {\r\n    key: \"_updateUI\",\r\n    value: function _updateUI() {\r\n      var reset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n\r\n      if (reset || !this.fieldData) {\r\n        for (var id in this.fields) {\r\n          this.fields[id].textContent = DEFAULT_FIELD_CONTENT;\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      if (this.overlayManager.active !== this.overlayName) {\r\n        return;\r\n      }\r\n\r\n      for (var _id in this.fields) {\r\n        var content = this.fieldData[_id];\r\n        this.fields[_id].textContent = content || content === 0 ? content : DEFAULT_FIELD_CONTENT;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_parseFileSize\",\r\n    value: function () {\r\n      var _parseFileSize2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n        var fileSize,\r\n            kb,\r\n            _args2 = arguments;\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                fileSize = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : 0;\r\n                kb = fileSize / 1024;\r\n\r\n                if (kb) {\r\n                  _context2.next = 6;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", undefined);\r\n\r\n              case 6:\r\n                if (!(kb < 1024)) {\r\n                  _context2.next = 8;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", this.l10n.get(\"document_properties_kb\", {\r\n                  size_kb: (+kb.toPrecision(3)).toLocaleString(),\r\n                  size_b: fileSize.toLocaleString()\r\n                }, \"{{size_kb}} KB ({{size_b}} bytes)\"));\r\n\r\n              case 8:\r\n                return _context2.abrupt(\"return\", this.l10n.get(\"document_properties_mb\", {\r\n                  size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(),\r\n                  size_b: fileSize.toLocaleString()\r\n                }, \"{{size_mb}} MB ({{size_b}} bytes)\"));\r\n\r\n              case 9:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this);\r\n      }));\r\n\r\n      function _parseFileSize() {\r\n        return _parseFileSize2.apply(this, arguments);\r\n      }\r\n\r\n      return _parseFileSize;\r\n    }()\r\n  }, {\r\n    key: \"_parsePageSize\",\r\n    value: function () {\r\n      var _parsePageSize2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3(pageSizeInches, pagesRotation) {\r\n        var _this3 = this;\r\n\r\n        var isPortrait, sizeInches, sizeMillimeters, pageName, rawName, exactMillimeters, intMillimeters;\r\n        return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\r\n          while (1) {\r\n            switch (_context3.prev = _context3.next) {\r\n              case 0:\r\n                if (pageSizeInches) {\r\n                  _context3.next = 2;\r\n                  break;\r\n                }\r\n\r\n                return _context3.abrupt(\"return\", undefined);\r\n\r\n              case 2:\r\n                if (pagesRotation % 180 !== 0) {\r\n                  pageSizeInches = {\r\n                    width: pageSizeInches.height,\r\n                    height: pageSizeInches.width\r\n                  };\r\n                }\r\n\r\n                isPortrait = (0, _ui_utils.isPortraitOrientation)(pageSizeInches);\r\n                sizeInches = {\r\n                  width: Math.round(pageSizeInches.width * 100) / 100,\r\n                  height: Math.round(pageSizeInches.height * 100) / 100\r\n                };\r\n                sizeMillimeters = {\r\n                  width: Math.round(pageSizeInches.width * 25.4 * 10) / 10,\r\n                  height: Math.round(pageSizeInches.height * 25.4 * 10) / 10\r\n                };\r\n                pageName = null;\r\n                rawName = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES);\r\n\r\n                if (!rawName && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) {\r\n                  exactMillimeters = {\r\n                    width: pageSizeInches.width * 25.4,\r\n                    height: pageSizeInches.height * 25.4\r\n                  };\r\n                  intMillimeters = {\r\n                    width: Math.round(sizeMillimeters.width),\r\n                    height: Math.round(sizeMillimeters.height)\r\n                  };\r\n\r\n                  if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height - intMillimeters.height) < 0.1) {\r\n                    rawName = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES);\r\n\r\n                    if (rawName) {\r\n                      sizeInches = {\r\n                        width: Math.round(intMillimeters.width / 25.4 * 100) / 100,\r\n                        height: Math.round(intMillimeters.height / 25.4 * 100) / 100\r\n                      };\r\n                      sizeMillimeters = intMillimeters;\r\n                    }\r\n                  }\r\n                }\r\n\r\n                if (rawName) {\r\n                  pageName = this.l10n.get(\"document_properties_page_size_name_\" + rawName.toLowerCase(), null, rawName);\r\n                }\r\n\r\n                return _context3.abrupt(\"return\", Promise.all([this._isNonMetricLocale ? sizeInches : sizeMillimeters, this.l10n.get(\"document_properties_page_size_unit_\" + (this._isNonMetricLocale ? \"inches\" : \"millimeters\"), null, this._isNonMetricLocale ? \"in\" : \"mm\"), pageName, this.l10n.get(\"document_properties_page_size_orientation_\" + (isPortrait ? \"portrait\" : \"landscape\"), null, isPortrait ? \"portrait\" : \"landscape\")]).then(function (_ref2) {\r\n                  var _ref3 = _slicedToArray(_ref2, 4),\r\n                      _ref3$ = _ref3[0],\r\n                      width = _ref3$.width,\r\n                      height = _ref3$.height,\r\n                      unit = _ref3[1],\r\n                      name = _ref3[2],\r\n                      orientation = _ref3[3];\r\n\r\n                  return _this3.l10n.get(\"document_properties_page_size_dimension_\" + (name ? \"name_\" : \"\") + \"string\", {\r\n                    width: width.toLocaleString(),\r\n                    height: height.toLocaleString(),\r\n                    unit: unit,\r\n                    name: name,\r\n                    orientation: orientation\r\n                  }, \"{{width}} × {{height}} {{unit}} (\" + (name ? \"{{name}}, \" : \"\") + \"{{orientation}})\");\r\n                }));\r\n\r\n              case 11:\r\n              case \"end\":\r\n                return _context3.stop();\r\n            }\r\n          }\r\n        }, _callee3, this);\r\n      }));\r\n\r\n      function _parsePageSize(_x, _x2) {\r\n        return _parsePageSize2.apply(this, arguments);\r\n      }\r\n\r\n      return _parsePageSize;\r\n    }()\r\n  }, {\r\n    key: \"_parseDate\",\r\n    value: function () {\r\n      var _parseDate2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(inputDate) {\r\n        var dateObject;\r\n        return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\r\n          while (1) {\r\n            switch (_context4.prev = _context4.next) {\r\n              case 0:\r\n                dateObject = _pdfjsLib.PDFDateString.toDateObject(inputDate);\r\n\r\n                if (dateObject) {\r\n                  _context4.next = 3;\r\n                  break;\r\n                }\r\n\r\n                return _context4.abrupt(\"return\", undefined);\r\n\r\n              case 3:\r\n                return _context4.abrupt(\"return\", this.l10n.get(\"document_properties_date_string\", {\r\n                  date: dateObject.toLocaleDateString(),\r\n                  time: dateObject.toLocaleTimeString()\r\n                }, \"{{date}}, {{time}}\"));\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context4.stop();\r\n            }\r\n          }\r\n        }, _callee4, this);\r\n      }));\r\n\r\n      function _parseDate(_x3) {\r\n        return _parseDate2.apply(this, arguments);\r\n      }\r\n\r\n      return _parseDate;\r\n    }()\r\n  }, {\r\n    key: \"_parseLinearization\",\r\n    value: function _parseLinearization(isLinearized) {\r\n      return this.l10n.get(\"document_properties_linearized_\" + (isLinearized ? \"yes\" : \"no\"), null, isLinearized ? \"Yes\" : \"No\");\r\n    }\r\n  }]);\r\n\r\n  return PDFDocumentProperties;\r\n}();\r\n\r\nexports.PDFDocumentProperties = PDFDocumentProperties;\r\n\r\n/***/ }),\r\n/* 16 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFFindBar = void 0;\r\n\r\nvar _pdf_find_controller = __webpack_require__(17);\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar MATCHES_COUNT_LIMIT = 1000;\r\n\r\nvar PDFFindBar = /*#__PURE__*/function () {\r\n  function PDFFindBar(options, eventBus) {\r\n    var _this = this;\r\n\r\n    var l10n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _ui_utils.NullL10n;\r\n\r\n    _classCallCheck(this, PDFFindBar);\r\n\r\n    this.opened = false;\r\n    this.bar = options.bar || null;\r\n    this.toggleButton = options.toggleButton || null;\r\n    this.findField = options.findField || null;\r\n    this.highlightAll = options.highlightAllCheckbox || null;\r\n    this.caseSensitive = options.caseSensitiveCheckbox || null;\r\n    this.entireWord = options.entireWordCheckbox || null;\r\n    this.findMsg = options.findMsg || null;\r\n    this.findResultsCount = options.findResultsCount || null;\r\n    this.findPreviousButton = options.findPreviousButton || null;\r\n    this.findNextButton = options.findNextButton || null;\r\n    this.eventBus = eventBus;\r\n    this.l10n = l10n;\r\n    this.toggleButton.addEventListener(\"click\", function () {\r\n      _this.toggle();\r\n    });\r\n    this.findField.addEventListener(\"input\", function () {\r\n      _this.dispatchEvent(\"\");\r\n    });\r\n    this.bar.addEventListener(\"keydown\", function (e) {\r\n      switch (e.keyCode) {\r\n        case 13:\r\n          if (e.target === _this.findField) {\r\n            _this.dispatchEvent(\"again\", e.shiftKey);\r\n          }\r\n\r\n          break;\r\n\r\n        case 27:\r\n          _this.close();\r\n\r\n          break;\r\n      }\r\n    });\r\n    this.findPreviousButton.addEventListener(\"click\", function () {\r\n      _this.dispatchEvent(\"again\", true);\r\n    });\r\n    this.findNextButton.addEventListener(\"click\", function () {\r\n      _this.dispatchEvent(\"again\", false);\r\n    });\r\n    this.highlightAll.addEventListener(\"click\", function () {\r\n      _this.dispatchEvent(\"highlightallchange\");\r\n    });\r\n    this.caseSensitive.addEventListener(\"click\", function () {\r\n      _this.dispatchEvent(\"casesensitivitychange\");\r\n    });\r\n    this.entireWord.addEventListener(\"click\", function () {\r\n      _this.dispatchEvent(\"entirewordchange\");\r\n    });\r\n\r\n    this.eventBus._on(\"resize\", this._adjustWidth.bind(this));\r\n  }\r\n\r\n  _createClass(PDFFindBar, [{\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      this.updateUIState();\r\n    }\r\n  }, {\r\n    key: \"dispatchEvent\",\r\n    value: function dispatchEvent(type, findPrev) {\r\n      this.eventBus.dispatch(\"find\", {\r\n        source: this,\r\n        type: type,\r\n        query: this.findField.value,\r\n        phraseSearch: true,\r\n        caseSensitive: this.caseSensitive.checked,\r\n        entireWord: this.entireWord.checked,\r\n        highlightAll: this.highlightAll.checked,\r\n        findPrevious: findPrev\r\n      });\r\n    }\r\n  }, {\r\n    key: \"updateUIState\",\r\n    value: function updateUIState(state, previous, matchesCount) {\r\n      var _this2 = this;\r\n\r\n      var findMsg = \"\";\r\n      var status = \"\";\r\n\r\n      switch (state) {\r\n        case _pdf_find_controller.FindState.FOUND:\r\n          break;\r\n\r\n        case _pdf_find_controller.FindState.PENDING:\r\n          status = \"pending\";\r\n          break;\r\n\r\n        case _pdf_find_controller.FindState.NOT_FOUND:\r\n          findMsg = this.l10n.get(\"find_not_found\", null, \"Phrase not found\");\r\n          status = \"notFound\";\r\n          break;\r\n\r\n        case _pdf_find_controller.FindState.WRAPPED:\r\n          if (previous) {\r\n            findMsg = this.l10n.get(\"find_reached_top\", null, \"Reached top of document, continued from bottom\");\r\n          } else {\r\n            findMsg = this.l10n.get(\"find_reached_bottom\", null, \"Reached end of document, continued from top\");\r\n          }\r\n\r\n          break;\r\n      }\r\n\r\n      this.findField.setAttribute(\"data-status\", status);\r\n      Promise.resolve(findMsg).then(function (msg) {\r\n        _this2.findMsg.textContent = msg;\r\n\r\n        _this2._adjustWidth();\r\n      });\r\n      this.updateResultsCount(matchesCount);\r\n    }\r\n  }, {\r\n    key: \"updateResultsCount\",\r\n    value: function updateResultsCount() {\r\n      var _this3 = this;\r\n\r\n      var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\r\n          _ref$current = _ref.current,\r\n          current = _ref$current === void 0 ? 0 : _ref$current,\r\n          _ref$total = _ref.total,\r\n          total = _ref$total === void 0 ? 0 : _ref$total;\r\n\r\n      if (!this.findResultsCount) {\r\n        return;\r\n      }\r\n\r\n      var limit = MATCHES_COUNT_LIMIT;\r\n      var matchesCountMsg = \"\";\r\n\r\n      if (total > 0) {\r\n        if (total > limit) {\r\n          matchesCountMsg = this.l10n.get(\"find_match_count_limit\", {\r\n            limit: limit\r\n          }, \"More than {{limit}} match\" + (limit !== 1 ? \"es\" : \"\"));\r\n        } else {\r\n          matchesCountMsg = this.l10n.get(\"find_match_count\", {\r\n            current: current,\r\n            total: total\r\n          }, \"{{current}} of {{total}} match\" + (total !== 1 ? \"es\" : \"\"));\r\n        }\r\n      }\r\n\r\n      Promise.resolve(matchesCountMsg).then(function (msg) {\r\n        _this3.findResultsCount.textContent = msg;\r\n\r\n        _this3.findResultsCount.classList.toggle(\"hidden\", !total);\r\n\r\n        _this3._adjustWidth();\r\n      });\r\n    }\r\n  }, {\r\n    key: \"open\",\r\n    value: function open() {\r\n      if (!this.opened) {\r\n        this.opened = true;\r\n        this.toggleButton.classList.add(\"toggled\");\r\n        this.toggleButton.setAttribute(\"aria-expanded\", \"true\");\r\n        this.bar.classList.remove(\"hidden\");\r\n      }\r\n\r\n      this.findField.select();\r\n      this.findField.focus();\r\n\r\n      this._adjustWidth();\r\n    }\r\n  }, {\r\n    key: \"close\",\r\n    value: function close() {\r\n      if (!this.opened) {\r\n        return;\r\n      }\r\n\r\n      this.opened = false;\r\n      this.toggleButton.classList.remove(\"toggled\");\r\n      this.toggleButton.setAttribute(\"aria-expanded\", \"false\");\r\n      this.bar.classList.add(\"hidden\");\r\n      this.eventBus.dispatch(\"findbarclose\", {\r\n        source: this\r\n      });\r\n    }\r\n  }, {\r\n    key: \"toggle\",\r\n    value: function toggle() {\r\n      if (this.opened) {\r\n        this.close();\r\n      } else {\r\n        this.open();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_adjustWidth\",\r\n    value: function _adjustWidth() {\r\n      if (!this.opened) {\r\n        return;\r\n      }\r\n\r\n      this.bar.classList.remove(\"wrapContainers\");\r\n      var findbarHeight = this.bar.clientHeight;\r\n      var inputContainerHeight = this.bar.firstElementChild.clientHeight;\r\n\r\n      if (findbarHeight > inputContainerHeight) {\r\n        this.bar.classList.add(\"wrapContainers\");\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return PDFFindBar;\r\n}();\r\n\r\nexports.PDFFindBar = PDFFindBar;\r\n\r\n/***/ }),\r\n/* 17 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFFindController = exports.FindState = void 0;\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nvar _pdf_find_utils = __webpack_require__(18);\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nvar FindState = {\r\n  FOUND: 0,\r\n  NOT_FOUND: 1,\r\n  WRAPPED: 2,\r\n  PENDING: 3\r\n};\r\nexports.FindState = FindState;\r\nvar FIND_TIMEOUT = 250;\r\nvar MATCH_SCROLL_OFFSET_TOP = -50;\r\nvar MATCH_SCROLL_OFFSET_LEFT = -400;\r\nvar CHARACTERS_TO_NORMALIZE = {\r\n  \"\\u2018\": \"'\",\r\n  \"\\u2019\": \"'\",\r\n  \"\\u201A\": \"'\",\r\n  \"\\u201B\": \"'\",\r\n  \"\\u201C\": '\"',\r\n  \"\\u201D\": '\"',\r\n  \"\\u201E\": '\"',\r\n  \"\\u201F\": '\"',\r\n  \"\\xBC\": \"1/4\",\r\n  \"\\xBD\": \"1/2\",\r\n  \"\\xBE\": \"3/4\"\r\n};\r\nvar normalizationRegex = null;\r\n\r\nfunction normalize(text) {\r\n  if (!normalizationRegex) {\r\n    var replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(\"\");\r\n    normalizationRegex = new RegExp(\"[\".concat(replace, \"]\"), \"g\");\r\n  }\r\n\r\n  var diffs = null;\r\n  var normalizedText = text.replace(normalizationRegex, function (ch, index) {\r\n    var normalizedCh = CHARACTERS_TO_NORMALIZE[ch],\r\n        diff = normalizedCh.length - ch.length;\r\n\r\n    if (diff !== 0) {\r\n      (diffs || (diffs = [])).push([index, diff]);\r\n    }\r\n\r\n    return normalizedCh;\r\n  });\r\n  return [normalizedText, diffs];\r\n}\r\n\r\nfunction getOriginalIndex(matchIndex) {\r\n  var diffs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n\r\n  if (!diffs) {\r\n    return matchIndex;\r\n  }\r\n\r\n  var totalDiff = 0;\r\n\r\n  var _iterator = _createForOfIteratorHelper(diffs),\r\n      _step;\r\n\r\n  try {\r\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n      var _step$value = _slicedToArray(_step.value, 2),\r\n          index = _step$value[0],\r\n          diff = _step$value[1];\r\n\r\n      var currentIndex = index + totalDiff;\r\n\r\n      if (currentIndex >= matchIndex) {\r\n        break;\r\n      }\r\n\r\n      if (currentIndex + diff > matchIndex) {\r\n        totalDiff += matchIndex - currentIndex;\r\n        break;\r\n      }\r\n\r\n      totalDiff += diff;\r\n    }\r\n  } catch (err) {\r\n    _iterator.e(err);\r\n  } finally {\r\n    _iterator.f();\r\n  }\r\n\r\n  return matchIndex - totalDiff;\r\n}\r\n\r\nvar PDFFindController = /*#__PURE__*/function () {\r\n  function PDFFindController(_ref) {\r\n    var linkService = _ref.linkService,\r\n        eventBus = _ref.eventBus;\r\n\r\n    _classCallCheck(this, PDFFindController);\r\n\r\n    this._linkService = linkService;\r\n    this._eventBus = eventBus;\r\n\r\n    this._reset();\r\n\r\n    eventBus._on(\"findbarclose\", this._onFindBarClose.bind(this));\r\n  }\r\n\r\n  _createClass(PDFFindController, [{\r\n    key: \"highlightMatches\",\r\n    get: function get() {\r\n      return this._highlightMatches;\r\n    }\r\n  }, {\r\n    key: \"pageMatches\",\r\n    get: function get() {\r\n      return this._pageMatches;\r\n    }\r\n  }, {\r\n    key: \"pageMatchesLength\",\r\n    get: function get() {\r\n      return this._pageMatchesLength;\r\n    }\r\n  }, {\r\n    key: \"selected\",\r\n    get: function get() {\r\n      return this._selected;\r\n    }\r\n  }, {\r\n    key: \"state\",\r\n    get: function get() {\r\n      return this._state;\r\n    }\r\n  }, {\r\n    key: \"setDocument\",\r\n    value: function setDocument(pdfDocument) {\r\n      if (this._pdfDocument) {\r\n        this._reset();\r\n      }\r\n\r\n      if (!pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      this._pdfDocument = pdfDocument;\r\n\r\n      this._firstPageCapability.resolve();\r\n    }\r\n  }, {\r\n    key: \"executeCommand\",\r\n    value: function executeCommand(cmd, state) {\r\n      var _this = this;\r\n\r\n      if (!state) {\r\n        return;\r\n      }\r\n\r\n      var pdfDocument = this._pdfDocument;\r\n\r\n      if (this._state === null || this._shouldDirtyMatch(cmd, state)) {\r\n        this._dirtyMatch = true;\r\n      }\r\n\r\n      this._state = state;\r\n\r\n      if (cmd !== \"findhighlightallchange\") {\r\n        this._updateUIState(FindState.PENDING);\r\n      }\r\n\r\n      this._firstPageCapability.promise.then(function () {\r\n        if (!_this._pdfDocument || pdfDocument && _this._pdfDocument !== pdfDocument) {\r\n          return;\r\n        }\r\n\r\n        _this._extractText();\r\n\r\n        var findbarClosed = !_this._highlightMatches;\r\n        var pendingTimeout = !!_this._findTimeout;\r\n\r\n        if (_this._findTimeout) {\r\n          clearTimeout(_this._findTimeout);\r\n          _this._findTimeout = null;\r\n        }\r\n\r\n        if (cmd === \"find\") {\r\n          _this._findTimeout = setTimeout(function () {\r\n            _this._nextMatch();\r\n\r\n            _this._findTimeout = null;\r\n          }, FIND_TIMEOUT);\r\n        } else if (_this._dirtyMatch) {\r\n          _this._nextMatch();\r\n        } else if (cmd === \"findagain\") {\r\n          _this._nextMatch();\r\n\r\n          if (findbarClosed && _this._state.highlightAll) {\r\n            _this._updateAllPages();\r\n          }\r\n        } else if (cmd === \"findhighlightallchange\") {\r\n          if (pendingTimeout) {\r\n            _this._nextMatch();\r\n          } else {\r\n            _this._highlightMatches = true;\r\n          }\r\n\r\n          _this._updateAllPages();\r\n        } else {\r\n          _this._nextMatch();\r\n        }\r\n      });\r\n    }\r\n  }, {\r\n    key: \"scrollMatchIntoView\",\r\n    value: function scrollMatchIntoView(_ref2) {\r\n      var _ref2$element = _ref2.element,\r\n          element = _ref2$element === void 0 ? null : _ref2$element,\r\n          _ref2$pageIndex = _ref2.pageIndex,\r\n          pageIndex = _ref2$pageIndex === void 0 ? -1 : _ref2$pageIndex,\r\n          _ref2$matchIndex = _ref2.matchIndex,\r\n          matchIndex = _ref2$matchIndex === void 0 ? -1 : _ref2$matchIndex;\r\n\r\n      if (!this._scrollMatches || !element) {\r\n        return;\r\n      } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) {\r\n        return;\r\n      } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) {\r\n        return;\r\n      }\r\n\r\n      this._scrollMatches = false;\r\n      var spot = {\r\n        top: MATCH_SCROLL_OFFSET_TOP,\r\n        left: MATCH_SCROLL_OFFSET_LEFT\r\n      };\r\n      (0, _ui_utils.scrollIntoView)(element, spot, true);\r\n    }\r\n  }, {\r\n    key: \"_reset\",\r\n    value: function _reset() {\r\n      this._highlightMatches = false;\r\n      this._scrollMatches = false;\r\n      this._pdfDocument = null;\r\n      this._pageMatches = [];\r\n      this._pageMatchesLength = [];\r\n      this._state = null;\r\n      this._selected = {\r\n        pageIdx: -1,\r\n        matchIdx: -1\r\n      };\r\n      this._offset = {\r\n        pageIdx: null,\r\n        matchIdx: null,\r\n        wrapped: false\r\n      };\r\n      this._extractTextPromises = [];\r\n      this._pageContents = [];\r\n      this._pageDiffs = [];\r\n      this._matchesCountTotal = 0;\r\n      this._pagesToSearch = null;\r\n      this._pendingFindMatches = Object.create(null);\r\n      this._resumePageIdx = null;\r\n      this._dirtyMatch = false;\r\n      clearTimeout(this._findTimeout);\r\n      this._findTimeout = null;\r\n      this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)();\r\n    }\r\n  }, {\r\n    key: \"_query\",\r\n    get: function get() {\r\n      if (this._state.query !== this._rawQuery) {\r\n        this._rawQuery = this._state.query;\r\n\r\n        var _normalize = normalize(this._state.query);\r\n\r\n        var _normalize2 = _slicedToArray(_normalize, 1);\r\n\r\n        this._normalizedQuery = _normalize2[0];\r\n      }\r\n\r\n      return this._normalizedQuery;\r\n    }\r\n  }, {\r\n    key: \"_shouldDirtyMatch\",\r\n    value: function _shouldDirtyMatch(cmd, state) {\r\n      if (state.query !== this._state.query) {\r\n        return true;\r\n      }\r\n\r\n      switch (cmd) {\r\n        case \"findagain\":\r\n          var pageNumber = this._selected.pageIdx + 1;\r\n          var linkService = this._linkService;\r\n\r\n          if (pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && !linkService.isPageVisible(pageNumber)) {\r\n            return true;\r\n          }\r\n\r\n          return false;\r\n\r\n        case \"findhighlightallchange\":\r\n          return false;\r\n      }\r\n\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"_prepareMatches\",\r\n    value: function _prepareMatches(matchesWithLength, matches, matchesLength) {\r\n      function isSubTerm(currentIndex) {\r\n        var currentElem = matchesWithLength[currentIndex];\r\n        var nextElem = matchesWithLength[currentIndex + 1];\r\n\r\n        if (currentIndex < matchesWithLength.length - 1 && currentElem.match === nextElem.match) {\r\n          currentElem.skipped = true;\r\n          return true;\r\n        }\r\n\r\n        for (var i = currentIndex - 1; i >= 0; i--) {\r\n          var prevElem = matchesWithLength[i];\r\n\r\n          if (prevElem.skipped) {\r\n            continue;\r\n          }\r\n\r\n          if (prevElem.match + prevElem.matchLength < currentElem.match) {\r\n            break;\r\n          }\r\n\r\n          if (prevElem.match + prevElem.matchLength >= currentElem.match + currentElem.matchLength) {\r\n            currentElem.skipped = true;\r\n            return true;\r\n          }\r\n        }\r\n\r\n        return false;\r\n      }\r\n\r\n      matchesWithLength.sort(function (a, b) {\r\n        return a.match === b.match ? a.matchLength - b.matchLength : a.match - b.match;\r\n      });\r\n\r\n      for (var i = 0, len = matchesWithLength.length; i < len; i++) {\r\n        if (isSubTerm(i)) {\r\n          continue;\r\n        }\r\n\r\n        matches.push(matchesWithLength[i].match);\r\n        matchesLength.push(matchesWithLength[i].matchLength);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_isEntireWord\",\r\n    value: function _isEntireWord(content, startIdx, length) {\r\n      if (startIdx > 0) {\r\n        var first = content.charCodeAt(startIdx);\r\n        var limit = content.charCodeAt(startIdx - 1);\r\n\r\n        if ((0, _pdf_find_utils.getCharacterType)(first) === (0, _pdf_find_utils.getCharacterType)(limit)) {\r\n          return false;\r\n        }\r\n      }\r\n\r\n      var endIdx = startIdx + length - 1;\r\n\r\n      if (endIdx < content.length - 1) {\r\n        var last = content.charCodeAt(endIdx);\r\n\r\n        var _limit = content.charCodeAt(endIdx + 1);\r\n\r\n        if ((0, _pdf_find_utils.getCharacterType)(last) === (0, _pdf_find_utils.getCharacterType)(_limit)) {\r\n          return false;\r\n        }\r\n      }\r\n\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"_calculatePhraseMatch\",\r\n    value: function _calculatePhraseMatch(query, pageIndex, pageContent, pageDiffs, entireWord) {\r\n      var matches = [],\r\n          matchesLength = [];\r\n      var queryLen = query.length;\r\n      var matchIdx = -queryLen;\r\n\r\n      while (true) {\r\n        matchIdx = pageContent.indexOf(query, matchIdx + queryLen);\r\n\r\n        if (matchIdx === -1) {\r\n          break;\r\n        }\r\n\r\n        if (entireWord && !this._isEntireWord(pageContent, matchIdx, queryLen)) {\r\n          continue;\r\n        }\r\n\r\n        var originalMatchIdx = getOriginalIndex(matchIdx, pageDiffs),\r\n            matchEnd = matchIdx + queryLen - 1,\r\n            originalQueryLen = getOriginalIndex(matchEnd, pageDiffs) - originalMatchIdx + 1;\r\n        matches.push(originalMatchIdx);\r\n        matchesLength.push(originalQueryLen);\r\n      }\r\n\r\n      this._pageMatches[pageIndex] = matches;\r\n      this._pageMatchesLength[pageIndex] = matchesLength;\r\n    }\r\n  }, {\r\n    key: \"_calculateWordMatch\",\r\n    value: function _calculateWordMatch(query, pageIndex, pageContent, pageDiffs, entireWord) {\r\n      var matchesWithLength = [];\r\n      var queryArray = query.match(/\\S+/g);\r\n\r\n      for (var i = 0, len = queryArray.length; i < len; i++) {\r\n        var subquery = queryArray[i];\r\n        var subqueryLen = subquery.length;\r\n        var matchIdx = -subqueryLen;\r\n\r\n        while (true) {\r\n          matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen);\r\n\r\n          if (matchIdx === -1) {\r\n            break;\r\n          }\r\n\r\n          if (entireWord && !this._isEntireWord(pageContent, matchIdx, subqueryLen)) {\r\n            continue;\r\n          }\r\n\r\n          var originalMatchIdx = getOriginalIndex(matchIdx, pageDiffs),\r\n              matchEnd = matchIdx + subqueryLen - 1,\r\n              originalQueryLen = getOriginalIndex(matchEnd, pageDiffs) - originalMatchIdx + 1;\r\n          matchesWithLength.push({\r\n            match: originalMatchIdx,\r\n            matchLength: originalQueryLen,\r\n            skipped: false\r\n          });\r\n        }\r\n      }\r\n\r\n      this._pageMatchesLength[pageIndex] = [];\r\n      this._pageMatches[pageIndex] = [];\r\n\r\n      this._prepareMatches(matchesWithLength, this._pageMatches[pageIndex], this._pageMatchesLength[pageIndex]);\r\n    }\r\n  }, {\r\n    key: \"_calculateMatch\",\r\n    value: function _calculateMatch(pageIndex) {\r\n      var pageContent = this._pageContents[pageIndex];\r\n      var pageDiffs = this._pageDiffs[pageIndex];\r\n      var query = this._query;\r\n      var _this$_state = this._state,\r\n          caseSensitive = _this$_state.caseSensitive,\r\n          entireWord = _this$_state.entireWord,\r\n          phraseSearch = _this$_state.phraseSearch;\r\n\r\n      if (query.length === 0) {\r\n        return;\r\n      }\r\n\r\n      if (!caseSensitive) {\r\n        pageContent = pageContent.toLowerCase();\r\n        query = query.toLowerCase();\r\n      }\r\n\r\n      if (phraseSearch) {\r\n        this._calculatePhraseMatch(query, pageIndex, pageContent, pageDiffs, entireWord);\r\n      } else {\r\n        this._calculateWordMatch(query, pageIndex, pageContent, pageDiffs, entireWord);\r\n      }\r\n\r\n      if (this._state.highlightAll) {\r\n        this._updatePage(pageIndex);\r\n      }\r\n\r\n      if (this._resumePageIdx === pageIndex) {\r\n        this._resumePageIdx = null;\r\n\r\n        this._nextPageMatch();\r\n      }\r\n\r\n      var pageMatchesCount = this._pageMatches[pageIndex].length;\r\n\r\n      if (pageMatchesCount > 0) {\r\n        this._matchesCountTotal += pageMatchesCount;\r\n\r\n        this._updateUIResultsCount();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_extractText\",\r\n    value: function _extractText() {\r\n      var _this2 = this;\r\n\r\n      if (this._extractTextPromises.length > 0) {\r\n        return;\r\n      }\r\n\r\n      var promise = Promise.resolve();\r\n\r\n      var _loop = function _loop(i, ii) {\r\n        var extractTextCapability = (0, _pdfjsLib.createPromiseCapability)();\r\n        _this2._extractTextPromises[i] = extractTextCapability.promise;\r\n        promise = promise.then(function () {\r\n          return _this2._pdfDocument.getPage(i + 1).then(function (pdfPage) {\r\n            return pdfPage.getTextContent({\r\n              normalizeWhitespace: true\r\n            });\r\n          }).then(function (textContent) {\r\n            var textItems = textContent.items;\r\n            var strBuf = [];\r\n\r\n            for (var j = 0, jj = textItems.length; j < jj; j++) {\r\n              strBuf.push(textItems[j].str);\r\n            }\r\n\r\n            var _normalize3 = normalize(strBuf.join(\"\"));\r\n\r\n            var _normalize4 = _slicedToArray(_normalize3, 2);\r\n\r\n            _this2._pageContents[i] = _normalize4[0];\r\n            _this2._pageDiffs[i] = _normalize4[1];\r\n            extractTextCapability.resolve(i);\r\n          }, function (reason) {\r\n            console.error(\"Unable to get text content for page \".concat(i + 1), reason);\r\n            _this2._pageContents[i] = \"\";\r\n            _this2._pageDiffs[i] = null;\r\n            extractTextCapability.resolve(i);\r\n          });\r\n        });\r\n      };\r\n\r\n      for (var i = 0, ii = this._linkService.pagesCount; i < ii; i++) {\r\n        _loop(i, ii);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_updatePage\",\r\n    value: function _updatePage(index) {\r\n      if (this._scrollMatches && this._selected.pageIdx === index) {\r\n        this._linkService.page = index + 1;\r\n      }\r\n\r\n      this._eventBus.dispatch(\"updatetextlayermatches\", {\r\n        source: this,\r\n        pageIndex: index\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_updateAllPages\",\r\n    value: function _updateAllPages() {\r\n      this._eventBus.dispatch(\"updatetextlayermatches\", {\r\n        source: this,\r\n        pageIndex: -1\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_nextMatch\",\r\n    value: function _nextMatch() {\r\n      var _this3 = this;\r\n\r\n      var previous = this._state.findPrevious;\r\n      var currentPageIndex = this._linkService.page - 1;\r\n      var numPages = this._linkService.pagesCount;\r\n      this._highlightMatches = true;\r\n\r\n      if (this._dirtyMatch) {\r\n        this._dirtyMatch = false;\r\n        this._selected.pageIdx = this._selected.matchIdx = -1;\r\n        this._offset.pageIdx = currentPageIndex;\r\n        this._offset.matchIdx = null;\r\n        this._offset.wrapped = false;\r\n        this._resumePageIdx = null;\r\n        this._pageMatches.length = 0;\r\n        this._pageMatchesLength.length = 0;\r\n        this._matchesCountTotal = 0;\r\n\r\n        this._updateAllPages();\r\n\r\n        for (var i = 0; i < numPages; i++) {\r\n          if (this._pendingFindMatches[i] === true) {\r\n            continue;\r\n          }\r\n\r\n          this._pendingFindMatches[i] = true;\r\n\r\n          this._extractTextPromises[i].then(function (pageIdx) {\r\n            delete _this3._pendingFindMatches[pageIdx];\r\n\r\n            _this3._calculateMatch(pageIdx);\r\n          });\r\n        }\r\n      }\r\n\r\n      if (this._query === \"\") {\r\n        this._updateUIState(FindState.FOUND);\r\n\r\n        return;\r\n      }\r\n\r\n      if (this._resumePageIdx) {\r\n        return;\r\n      }\r\n\r\n      var offset = this._offset;\r\n      this._pagesToSearch = numPages;\r\n\r\n      if (offset.matchIdx !== null) {\r\n        var numPageMatches = this._pageMatches[offset.pageIdx].length;\r\n\r\n        if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) {\r\n          offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1;\r\n\r\n          this._updateMatch(true);\r\n\r\n          return;\r\n        }\r\n\r\n        this._advanceOffsetPage(previous);\r\n      }\r\n\r\n      this._nextPageMatch();\r\n    }\r\n  }, {\r\n    key: \"_matchesReady\",\r\n    value: function _matchesReady(matches) {\r\n      var offset = this._offset;\r\n      var numMatches = matches.length;\r\n      var previous = this._state.findPrevious;\r\n\r\n      if (numMatches) {\r\n        offset.matchIdx = previous ? numMatches - 1 : 0;\r\n\r\n        this._updateMatch(true);\r\n\r\n        return true;\r\n      }\r\n\r\n      this._advanceOffsetPage(previous);\r\n\r\n      if (offset.wrapped) {\r\n        offset.matchIdx = null;\r\n\r\n        if (this._pagesToSearch < 0) {\r\n          this._updateMatch(false);\r\n\r\n          return true;\r\n        }\r\n      }\r\n\r\n      return false;\r\n    }\r\n  }, {\r\n    key: \"_nextPageMatch\",\r\n    value: function _nextPageMatch() {\r\n      if (this._resumePageIdx !== null) {\r\n        console.error(\"There can only be one pending page.\");\r\n      }\r\n\r\n      var matches = null;\r\n\r\n      do {\r\n        var pageIdx = this._offset.pageIdx;\r\n        matches = this._pageMatches[pageIdx];\r\n\r\n        if (!matches) {\r\n          this._resumePageIdx = pageIdx;\r\n          break;\r\n        }\r\n      } while (!this._matchesReady(matches));\r\n    }\r\n  }, {\r\n    key: \"_advanceOffsetPage\",\r\n    value: function _advanceOffsetPage(previous) {\r\n      var offset = this._offset;\r\n      var numPages = this._linkService.pagesCount;\r\n      offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1;\r\n      offset.matchIdx = null;\r\n      this._pagesToSearch--;\r\n\r\n      if (offset.pageIdx >= numPages || offset.pageIdx < 0) {\r\n        offset.pageIdx = previous ? numPages - 1 : 0;\r\n        offset.wrapped = true;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_updateMatch\",\r\n    value: function _updateMatch() {\r\n      var found = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n      var state = FindState.NOT_FOUND;\r\n      var wrapped = this._offset.wrapped;\r\n      this._offset.wrapped = false;\r\n\r\n      if (found) {\r\n        var previousPage = this._selected.pageIdx;\r\n        this._selected.pageIdx = this._offset.pageIdx;\r\n        this._selected.matchIdx = this._offset.matchIdx;\r\n        state = wrapped ? FindState.WRAPPED : FindState.FOUND;\r\n\r\n        if (previousPage !== -1 && previousPage !== this._selected.pageIdx) {\r\n          this._updatePage(previousPage);\r\n        }\r\n      }\r\n\r\n      this._updateUIState(state, this._state.findPrevious);\r\n\r\n      if (this._selected.pageIdx !== -1) {\r\n        this._scrollMatches = true;\r\n\r\n        this._updatePage(this._selected.pageIdx);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_onFindBarClose\",\r\n    value: function _onFindBarClose(evt) {\r\n      var _this4 = this;\r\n\r\n      var pdfDocument = this._pdfDocument;\r\n\r\n      this._firstPageCapability.promise.then(function () {\r\n        if (!_this4._pdfDocument || pdfDocument && _this4._pdfDocument !== pdfDocument) {\r\n          return;\r\n        }\r\n\r\n        if (_this4._findTimeout) {\r\n          clearTimeout(_this4._findTimeout);\r\n          _this4._findTimeout = null;\r\n        }\r\n\r\n        if (_this4._resumePageIdx) {\r\n          _this4._resumePageIdx = null;\r\n          _this4._dirtyMatch = true;\r\n        }\r\n\r\n        _this4._updateUIState(FindState.FOUND);\r\n\r\n        _this4._highlightMatches = false;\r\n\r\n        _this4._updateAllPages();\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_requestMatchesCount\",\r\n    value: function _requestMatchesCount() {\r\n      var _this$_selected = this._selected,\r\n          pageIdx = _this$_selected.pageIdx,\r\n          matchIdx = _this$_selected.matchIdx;\r\n      var current = 0,\r\n          total = this._matchesCountTotal;\r\n\r\n      if (matchIdx !== -1) {\r\n        for (var i = 0; i < pageIdx; i++) {\r\n          current += this._pageMatches[i] && this._pageMatches[i].length || 0;\r\n        }\r\n\r\n        current += matchIdx + 1;\r\n      }\r\n\r\n      if (current < 1 || current > total) {\r\n        current = total = 0;\r\n      }\r\n\r\n      return {\r\n        current: current,\r\n        total: total\r\n      };\r\n    }\r\n  }, {\r\n    key: \"_updateUIResultsCount\",\r\n    value: function _updateUIResultsCount() {\r\n      this._eventBus.dispatch(\"updatefindmatchescount\", {\r\n        source: this,\r\n        matchesCount: this._requestMatchesCount()\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_updateUIState\",\r\n    value: function _updateUIState(state, previous) {\r\n      this._eventBus.dispatch(\"updatefindcontrolstate\", {\r\n        source: this,\r\n        state: state,\r\n        previous: previous,\r\n        matchesCount: this._requestMatchesCount(),\r\n        rawQuery: this._state ? this._state.query : null\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return PDFFindController;\r\n}();\r\n\r\nexports.PDFFindController = PDFFindController;\r\n\r\n/***/ }),\r\n/* 18 */\r\n/***/ ((__unused_webpack_module, exports) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.getCharacterType = getCharacterType;\r\nexports.CharacterType = void 0;\r\nvar CharacterType = {\r\n  SPACE: 0,\r\n  ALPHA_LETTER: 1,\r\n  PUNCT: 2,\r\n  HAN_LETTER: 3,\r\n  KATAKANA_LETTER: 4,\r\n  HIRAGANA_LETTER: 5,\r\n  HALFWIDTH_KATAKANA_LETTER: 6,\r\n  THAI_LETTER: 7\r\n};\r\nexports.CharacterType = CharacterType;\r\n\r\nfunction isAlphabeticalScript(charCode) {\r\n  return charCode < 0x2e80;\r\n}\r\n\r\nfunction isAscii(charCode) {\r\n  return (charCode & 0xff80) === 0;\r\n}\r\n\r\nfunction isAsciiAlpha(charCode) {\r\n  return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a;\r\n}\r\n\r\nfunction isAsciiDigit(charCode) {\r\n  return charCode >= 0x30 && charCode <= 0x39;\r\n}\r\n\r\nfunction isAsciiSpace(charCode) {\r\n  return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a;\r\n}\r\n\r\nfunction isHan(charCode) {\r\n  return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff;\r\n}\r\n\r\nfunction isKatakana(charCode) {\r\n  return charCode >= 0x30a0 && charCode <= 0x30ff;\r\n}\r\n\r\nfunction isHiragana(charCode) {\r\n  return charCode >= 0x3040 && charCode <= 0x309f;\r\n}\r\n\r\nfunction isHalfwidthKatakana(charCode) {\r\n  return charCode >= 0xff60 && charCode <= 0xff9f;\r\n}\r\n\r\nfunction isThai(charCode) {\r\n  return (charCode & 0xff80) === 0x0e00;\r\n}\r\n\r\nfunction getCharacterType(charCode) {\r\n  if (isAlphabeticalScript(charCode)) {\r\n    if (isAscii(charCode)) {\r\n      if (isAsciiSpace(charCode)) {\r\n        return CharacterType.SPACE;\r\n      } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) {\r\n        return CharacterType.ALPHA_LETTER;\r\n      }\r\n\r\n      return CharacterType.PUNCT;\r\n    } else if (isThai(charCode)) {\r\n      return CharacterType.THAI_LETTER;\r\n    } else if (charCode === 0xa0) {\r\n      return CharacterType.SPACE;\r\n    }\r\n\r\n    return CharacterType.ALPHA_LETTER;\r\n  }\r\n\r\n  if (isHan(charCode)) {\r\n    return CharacterType.HAN_LETTER;\r\n  } else if (isKatakana(charCode)) {\r\n    return CharacterType.KATAKANA_LETTER;\r\n  } else if (isHiragana(charCode)) {\r\n    return CharacterType.HIRAGANA_LETTER;\r\n  } else if (isHalfwidthKatakana(charCode)) {\r\n    return CharacterType.HALFWIDTH_KATAKANA_LETTER;\r\n  }\r\n\r\n  return CharacterType.ALPHA_LETTER;\r\n}\r\n\r\n/***/ }),\r\n/* 19 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.isDestArraysEqual = isDestArraysEqual;\r\nexports.isDestHashesEqual = isDestHashesEqual;\r\nexports.PDFHistory = void 0;\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar HASH_CHANGE_TIMEOUT = 1000;\r\nvar POSITION_UPDATED_THRESHOLD = 50;\r\nvar UPDATE_VIEWAREA_TIMEOUT = 1000;\r\n\r\nfunction getCurrentHash() {\r\n  return document.location.hash;\r\n}\r\n\r\nvar PDFHistory = /*#__PURE__*/function () {\r\n  function PDFHistory(_ref) {\r\n    var _this = this;\r\n\r\n    var linkService = _ref.linkService,\r\n        eventBus = _ref.eventBus;\r\n\r\n    _classCallCheck(this, PDFHistory);\r\n\r\n    this.linkService = linkService;\r\n    this.eventBus = eventBus;\r\n    this._initialized = false;\r\n    this._fingerprint = \"\";\r\n    this.reset();\r\n    this._boundEvents = null;\r\n    this._isViewerInPresentationMode = false;\r\n\r\n    this.eventBus._on(\"presentationmodechanged\", function (evt) {\r\n      _this._isViewerInPresentationMode = evt.state !== _ui_utils.PresentationModeState.NORMAL;\r\n    });\r\n\r\n    this.eventBus._on(\"pagesinit\", function () {\r\n      _this._isPagesLoaded = false;\r\n\r\n      _this.eventBus._on(\"pagesloaded\", function (evt) {\r\n        _this._isPagesLoaded = !!evt.pagesCount;\r\n      }, {\r\n        once: true\r\n      });\r\n    });\r\n  }\r\n\r\n  _createClass(PDFHistory, [{\r\n    key: \"initialize\",\r\n    value: function initialize(_ref2) {\r\n      var fingerprint = _ref2.fingerprint,\r\n          _ref2$resetHistory = _ref2.resetHistory,\r\n          resetHistory = _ref2$resetHistory === void 0 ? false : _ref2$resetHistory,\r\n          _ref2$updateUrl = _ref2.updateUrl,\r\n          updateUrl = _ref2$updateUrl === void 0 ? false : _ref2$updateUrl;\r\n\r\n      if (!fingerprint || typeof fingerprint !== \"string\") {\r\n        console.error('PDFHistory.initialize: The \"fingerprint\" must be a non-empty string.');\r\n        return;\r\n      }\r\n\r\n      if (this._initialized) {\r\n        this.reset();\r\n      }\r\n\r\n      var reInitialized = this._fingerprint !== \"\" && this._fingerprint !== fingerprint;\r\n      this._fingerprint = fingerprint;\r\n      this._updateUrl = updateUrl === true;\r\n      this._initialized = true;\r\n\r\n      this._bindEvents();\r\n\r\n      var state = window.history.state;\r\n      this._popStateInProgress = false;\r\n      this._blockHashChange = 0;\r\n      this._currentHash = getCurrentHash();\r\n      this._numPositionUpdates = 0;\r\n      this._uid = this._maxUid = 0;\r\n      this._destination = null;\r\n      this._position = null;\r\n\r\n      if (!this._isValidState(state, true) || resetHistory) {\r\n        var _this$_parseCurrentHa = this._parseCurrentHash(true),\r\n            hash = _this$_parseCurrentHa.hash,\r\n            page = _this$_parseCurrentHa.page,\r\n            rotation = _this$_parseCurrentHa.rotation;\r\n\r\n        if (!hash || reInitialized || resetHistory) {\r\n          this._pushOrReplaceState(null, true);\r\n\r\n          return;\r\n        }\r\n\r\n        this._pushOrReplaceState({\r\n          hash: hash,\r\n          page: page,\r\n          rotation: rotation\r\n        }, true);\r\n\r\n        return;\r\n      }\r\n\r\n      var destination = state.destination;\r\n\r\n      this._updateInternalState(destination, state.uid, true);\r\n\r\n      if (destination.rotation !== undefined) {\r\n        this._initialRotation = destination.rotation;\r\n      }\r\n\r\n      if (destination.dest) {\r\n        this._initialBookmark = JSON.stringify(destination.dest);\r\n        this._destination.page = null;\r\n      } else if (destination.hash) {\r\n        this._initialBookmark = destination.hash;\r\n      } else if (destination.page) {\r\n        this._initialBookmark = \"page=\".concat(destination.page);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      if (this._initialized) {\r\n        this._pageHide();\r\n\r\n        this._initialized = false;\r\n\r\n        this._unbindEvents();\r\n      }\r\n\r\n      if (this._updateViewareaTimeout) {\r\n        clearTimeout(this._updateViewareaTimeout);\r\n        this._updateViewareaTimeout = null;\r\n      }\r\n\r\n      this._initialBookmark = null;\r\n      this._initialRotation = null;\r\n    }\r\n  }, {\r\n    key: \"push\",\r\n    value: function push(_ref3) {\r\n      var _this2 = this;\r\n\r\n      var _ref3$namedDest = _ref3.namedDest,\r\n          namedDest = _ref3$namedDest === void 0 ? null : _ref3$namedDest,\r\n          explicitDest = _ref3.explicitDest,\r\n          pageNumber = _ref3.pageNumber;\r\n\r\n      if (!this._initialized) {\r\n        return;\r\n      }\r\n\r\n      if (namedDest && typeof namedDest !== \"string\") {\r\n        console.error(\"PDFHistory.push: \" + \"\\\"\".concat(namedDest, \"\\\" is not a valid namedDest parameter.\"));\r\n        return;\r\n      } else if (!Array.isArray(explicitDest)) {\r\n        console.error(\"PDFHistory.push: \" + \"\\\"\".concat(explicitDest, \"\\\" is not a valid explicitDest parameter.\"));\r\n        return;\r\n      } else if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) {\r\n        if (pageNumber !== null || this._destination) {\r\n          console.error(\"PDFHistory.push: \" + \"\\\"\".concat(pageNumber, \"\\\" is not a valid pageNumber parameter.\"));\r\n          return;\r\n        }\r\n      }\r\n\r\n      var hash = namedDest || JSON.stringify(explicitDest);\r\n\r\n      if (!hash) {\r\n        return;\r\n      }\r\n\r\n      var forceReplace = false;\r\n\r\n      if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || isDestArraysEqual(this._destination.dest, explicitDest))) {\r\n        if (this._destination.page) {\r\n          return;\r\n        }\r\n\r\n        forceReplace = true;\r\n      }\r\n\r\n      if (this._popStateInProgress && !forceReplace) {\r\n        return;\r\n      }\r\n\r\n      this._pushOrReplaceState({\r\n        dest: explicitDest,\r\n        hash: hash,\r\n        page: pageNumber,\r\n        rotation: this.linkService.rotation\r\n      }, forceReplace);\r\n\r\n      if (!this._popStateInProgress) {\r\n        this._popStateInProgress = true;\r\n        Promise.resolve().then(function () {\r\n          _this2._popStateInProgress = false;\r\n        });\r\n      }\r\n    }\r\n  }, {\r\n    key: \"pushPage\",\r\n    value: function pushPage(pageNumber) {\r\n      var _this$_destination,\r\n          _this3 = this;\r\n\r\n      if (!this._initialized) {\r\n        return;\r\n      }\r\n\r\n      if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) {\r\n        console.error(\"PDFHistory.pushPage: \\\"\".concat(pageNumber, \"\\\" is not a valid page number.\"));\r\n        return;\r\n      }\r\n\r\n      if (((_this$_destination = this._destination) === null || _this$_destination === void 0 ? void 0 : _this$_destination.page) === pageNumber) {\r\n        return;\r\n      }\r\n\r\n      if (this._popStateInProgress) {\r\n        return;\r\n      }\r\n\r\n      this._pushOrReplaceState({\r\n        hash: \"page=\".concat(pageNumber),\r\n        page: pageNumber,\r\n        rotation: this.linkService.rotation\r\n      });\r\n\r\n      if (!this._popStateInProgress) {\r\n        this._popStateInProgress = true;\r\n        Promise.resolve().then(function () {\r\n          _this3._popStateInProgress = false;\r\n        });\r\n      }\r\n    }\r\n  }, {\r\n    key: \"pushCurrentPosition\",\r\n    value: function pushCurrentPosition() {\r\n      if (!this._initialized || this._popStateInProgress) {\r\n        return;\r\n      }\r\n\r\n      this._tryPushCurrentPosition();\r\n    }\r\n  }, {\r\n    key: \"back\",\r\n    value: function back() {\r\n      if (!this._initialized || this._popStateInProgress) {\r\n        return;\r\n      }\r\n\r\n      var state = window.history.state;\r\n\r\n      if (this._isValidState(state) && state.uid > 0) {\r\n        window.history.back();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"forward\",\r\n    value: function forward() {\r\n      if (!this._initialized || this._popStateInProgress) {\r\n        return;\r\n      }\r\n\r\n      var state = window.history.state;\r\n\r\n      if (this._isValidState(state) && state.uid < this._maxUid) {\r\n        window.history.forward();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"popStateInProgress\",\r\n    get: function get() {\r\n      return this._initialized && (this._popStateInProgress || this._blockHashChange > 0);\r\n    }\r\n  }, {\r\n    key: \"initialBookmark\",\r\n    get: function get() {\r\n      return this._initialized ? this._initialBookmark : null;\r\n    }\r\n  }, {\r\n    key: \"initialRotation\",\r\n    get: function get() {\r\n      return this._initialized ? this._initialRotation : null;\r\n    }\r\n  }, {\r\n    key: \"_pushOrReplaceState\",\r\n    value: function _pushOrReplaceState(destination) {\r\n      var forceReplace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      var shouldReplace = forceReplace || !this._destination;\r\n      var newState = {\r\n        fingerprint: this._fingerprint,\r\n        uid: shouldReplace ? this._uid : this._uid + 1,\r\n        destination: destination\r\n      };\r\n\r\n      this._updateInternalState(destination, newState.uid);\r\n\r\n      var newUrl;\r\n\r\n      if (this._updateUrl && destination !== null && destination !== void 0 && destination.hash) {\r\n        var baseUrl = document.location.href.split(\"#\")[0];\r\n\r\n        if (!baseUrl.startsWith(\"file://\")) {\r\n          newUrl = \"\".concat(baseUrl, \"#\").concat(destination.hash);\r\n        }\r\n      }\r\n\r\n      if (shouldReplace) {\r\n        window.history.replaceState(newState, \"\", newUrl);\r\n      } else {\r\n        window.history.pushState(newState, \"\", newUrl);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_tryPushCurrentPosition\",\r\n    value: function _tryPushCurrentPosition() {\r\n      var temporary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n\r\n      if (!this._position) {\r\n        return;\r\n      }\r\n\r\n      var position = this._position;\r\n\r\n      if (temporary) {\r\n        position = Object.assign(Object.create(null), this._position);\r\n        position.temporary = true;\r\n      }\r\n\r\n      if (!this._destination) {\r\n        this._pushOrReplaceState(position);\r\n\r\n        return;\r\n      }\r\n\r\n      if (this._destination.temporary) {\r\n        this._pushOrReplaceState(position, true);\r\n\r\n        return;\r\n      }\r\n\r\n      if (this._destination.hash === position.hash) {\r\n        return;\r\n      }\r\n\r\n      if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) {\r\n        return;\r\n      }\r\n\r\n      var forceReplace = false;\r\n\r\n      if (this._destination.page >= position.first && this._destination.page <= position.page) {\r\n        if (this._destination.dest || !this._destination.first) {\r\n          return;\r\n        }\r\n\r\n        forceReplace = true;\r\n      }\r\n\r\n      this._pushOrReplaceState(position, forceReplace);\r\n    }\r\n  }, {\r\n    key: \"_isValidState\",\r\n    value: function _isValidState(state) {\r\n      var checkReload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n\r\n      if (!state) {\r\n        return false;\r\n      }\r\n\r\n      if (state.fingerprint !== this._fingerprint) {\r\n        if (checkReload) {\r\n          if (typeof state.fingerprint !== \"string\" || state.fingerprint.length !== this._fingerprint.length) {\r\n            return false;\r\n          }\r\n\r\n          var _performance$getEntri = performance.getEntriesByType(\"navigation\"),\r\n              _performance$getEntri2 = _slicedToArray(_performance$getEntri, 1),\r\n              perfEntry = _performance$getEntri2[0];\r\n\r\n          if ((perfEntry === null || perfEntry === void 0 ? void 0 : perfEntry.type) !== \"reload\") {\r\n            return false;\r\n          }\r\n        } else {\r\n          return false;\r\n        }\r\n      }\r\n\r\n      if (!Number.isInteger(state.uid) || state.uid < 0) {\r\n        return false;\r\n      }\r\n\r\n      if (state.destination === null || _typeof(state.destination) !== \"object\") {\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"_updateInternalState\",\r\n    value: function _updateInternalState(destination, uid) {\r\n      var removeTemporary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n\r\n      if (this._updateViewareaTimeout) {\r\n        clearTimeout(this._updateViewareaTimeout);\r\n        this._updateViewareaTimeout = null;\r\n      }\r\n\r\n      if (removeTemporary && destination !== null && destination !== void 0 && destination.temporary) {\r\n        delete destination.temporary;\r\n      }\r\n\r\n      this._destination = destination;\r\n      this._uid = uid;\r\n      this._maxUid = Math.max(this._maxUid, uid);\r\n      this._numPositionUpdates = 0;\r\n    }\r\n  }, {\r\n    key: \"_parseCurrentHash\",\r\n    value: function _parseCurrentHash() {\r\n      var checkNameddest = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n      var hash = unescape(getCurrentHash()).substring(1);\r\n      var params = (0, _ui_utils.parseQueryString)(hash);\r\n      var nameddest = params.nameddest || \"\";\r\n      var page = params.page | 0;\r\n\r\n      if (!(Number.isInteger(page) && page > 0 && page <= this.linkService.pagesCount) || checkNameddest && nameddest.length > 0) {\r\n        page = null;\r\n      }\r\n\r\n      return {\r\n        hash: hash,\r\n        page: page,\r\n        rotation: this.linkService.rotation\r\n      };\r\n    }\r\n  }, {\r\n    key: \"_updateViewarea\",\r\n    value: function _updateViewarea(_ref4) {\r\n      var _this4 = this;\r\n\r\n      var location = _ref4.location;\r\n\r\n      if (this._updateViewareaTimeout) {\r\n        clearTimeout(this._updateViewareaTimeout);\r\n        this._updateViewareaTimeout = null;\r\n      }\r\n\r\n      this._position = {\r\n        hash: this._isViewerInPresentationMode ? \"page=\".concat(location.pageNumber) : location.pdfOpenParams.substring(1),\r\n        page: this.linkService.page,\r\n        first: location.pageNumber,\r\n        rotation: location.rotation\r\n      };\r\n\r\n      if (this._popStateInProgress) {\r\n        return;\r\n      }\r\n\r\n      if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) {\r\n        this._numPositionUpdates++;\r\n      }\r\n\r\n      if (UPDATE_VIEWAREA_TIMEOUT > 0) {\r\n        this._updateViewareaTimeout = setTimeout(function () {\r\n          if (!_this4._popStateInProgress) {\r\n            _this4._tryPushCurrentPosition(true);\r\n          }\r\n\r\n          _this4._updateViewareaTimeout = null;\r\n        }, UPDATE_VIEWAREA_TIMEOUT);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_popState\",\r\n    value: function _popState(_ref5) {\r\n      var _this5 = this;\r\n\r\n      var state = _ref5.state;\r\n      var newHash = getCurrentHash(),\r\n          hashChanged = this._currentHash !== newHash;\r\n      this._currentHash = newHash;\r\n\r\n      if (!state) {\r\n        this._uid++;\r\n\r\n        var _this$_parseCurrentHa2 = this._parseCurrentHash(),\r\n            hash = _this$_parseCurrentHa2.hash,\r\n            page = _this$_parseCurrentHa2.page,\r\n            rotation = _this$_parseCurrentHa2.rotation;\r\n\r\n        this._pushOrReplaceState({\r\n          hash: hash,\r\n          page: page,\r\n          rotation: rotation\r\n        }, true);\r\n\r\n        return;\r\n      }\r\n\r\n      if (!this._isValidState(state)) {\r\n        return;\r\n      }\r\n\r\n      this._popStateInProgress = true;\r\n\r\n      if (hashChanged) {\r\n        this._blockHashChange++;\r\n        (0, _ui_utils.waitOnEventOrTimeout)({\r\n          target: window,\r\n          name: \"hashchange\",\r\n          delay: HASH_CHANGE_TIMEOUT\r\n        }).then(function () {\r\n          _this5._blockHashChange--;\r\n        });\r\n      }\r\n\r\n      var destination = state.destination;\r\n\r\n      this._updateInternalState(destination, state.uid, true);\r\n\r\n      if ((0, _ui_utils.isValidRotation)(destination.rotation)) {\r\n        this.linkService.rotation = destination.rotation;\r\n      }\r\n\r\n      if (destination.dest) {\r\n        this.linkService.goToDestination(destination.dest);\r\n      } else if (destination.hash) {\r\n        this.linkService.setHash(destination.hash);\r\n      } else if (destination.page) {\r\n        this.linkService.page = destination.page;\r\n      }\r\n\r\n      Promise.resolve().then(function () {\r\n        _this5._popStateInProgress = false;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_pageHide\",\r\n    value: function _pageHide() {\r\n      if (!this._destination || this._destination.temporary) {\r\n        this._tryPushCurrentPosition();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_bindEvents\",\r\n    value: function _bindEvents() {\r\n      if (this._boundEvents) {\r\n        return;\r\n      }\r\n\r\n      this._boundEvents = {\r\n        updateViewarea: this._updateViewarea.bind(this),\r\n        popState: this._popState.bind(this),\r\n        pageHide: this._pageHide.bind(this)\r\n      };\r\n\r\n      this.eventBus._on(\"updateviewarea\", this._boundEvents.updateViewarea);\r\n\r\n      window.addEventListener(\"popstate\", this._boundEvents.popState);\r\n      window.addEventListener(\"pagehide\", this._boundEvents.pageHide);\r\n    }\r\n  }, {\r\n    key: \"_unbindEvents\",\r\n    value: function _unbindEvents() {\r\n      if (!this._boundEvents) {\r\n        return;\r\n      }\r\n\r\n      this.eventBus._off(\"updateviewarea\", this._boundEvents.updateViewarea);\r\n\r\n      window.removeEventListener(\"popstate\", this._boundEvents.popState);\r\n      window.removeEventListener(\"pagehide\", this._boundEvents.pageHide);\r\n      this._boundEvents = null;\r\n    }\r\n  }]);\r\n\r\n  return PDFHistory;\r\n}();\r\n\r\nexports.PDFHistory = PDFHistory;\r\n\r\nfunction isDestHashesEqual(destHash, pushHash) {\r\n  if (typeof destHash !== \"string\" || typeof pushHash !== \"string\") {\r\n    return false;\r\n  }\r\n\r\n  if (destHash === pushHash) {\r\n    return true;\r\n  }\r\n\r\n  var _parseQueryString = (0, _ui_utils.parseQueryString)(destHash),\r\n      nameddest = _parseQueryString.nameddest;\r\n\r\n  if (nameddest === pushHash) {\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nfunction isDestArraysEqual(firstDest, secondDest) {\r\n  function isEntryEqual(first, second) {\r\n    if (_typeof(first) !== _typeof(second)) {\r\n      return false;\r\n    }\r\n\r\n    if (Array.isArray(first) || Array.isArray(second)) {\r\n      return false;\r\n    }\r\n\r\n    if (first !== null && _typeof(first) === \"object\" && second !== null) {\r\n      if (Object.keys(first).length !== Object.keys(second).length) {\r\n        return false;\r\n      }\r\n\r\n      for (var key in first) {\r\n        if (!isEntryEqual(first[key], second[key])) {\r\n          return false;\r\n        }\r\n      }\r\n\r\n      return true;\r\n    }\r\n\r\n    return first === second || Number.isNaN(first) && Number.isNaN(second);\r\n  }\r\n\r\n  if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) {\r\n    return false;\r\n  }\r\n\r\n  if (firstDest.length !== secondDest.length) {\r\n    return false;\r\n  }\r\n\r\n  for (var i = 0, ii = firstDest.length; i < ii; i++) {\r\n    if (!isEntryEqual(firstDest[i], secondDest[i])) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\n/***/ }),\r\n/* 20 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFLayerViewer = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nvar _base_tree_viewer = __webpack_require__(14);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\r\n\r\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nvar PDFLayerViewer = /*#__PURE__*/function (_BaseTreeViewer) {\r\n  _inherits(PDFLayerViewer, _BaseTreeViewer);\r\n\r\n  var _super = _createSuper(PDFLayerViewer);\r\n\r\n  function PDFLayerViewer(options) {\r\n    var _this;\r\n\r\n    _classCallCheck(this, PDFLayerViewer);\r\n\r\n    _this = _super.call(this, options);\r\n    _this.l10n = options.l10n;\r\n\r\n    _this.eventBus._on(\"resetlayers\", _this._resetLayers.bind(_assertThisInitialized(_this)));\r\n\r\n    _this.eventBus._on(\"togglelayerstree\", _this._toggleAllTreeItems.bind(_assertThisInitialized(_this)));\r\n\r\n    return _this;\r\n  }\r\n\r\n  _createClass(PDFLayerViewer, [{\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      _get(_getPrototypeOf(PDFLayerViewer.prototype), \"reset\", this).call(this);\r\n\r\n      this._optionalContentConfig = null;\r\n    }\r\n  }, {\r\n    key: \"_dispatchEvent\",\r\n    value: function _dispatchEvent(layersCount) {\r\n      this.eventBus.dispatch(\"layersloaded\", {\r\n        source: this,\r\n        layersCount: layersCount\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_bindLink\",\r\n    value: function _bindLink(element, _ref) {\r\n      var _this2 = this;\r\n\r\n      var groupId = _ref.groupId,\r\n          input = _ref.input;\r\n\r\n      var setVisibility = function setVisibility() {\r\n        _this2._optionalContentConfig.setVisibility(groupId, input.checked);\r\n\r\n        _this2.eventBus.dispatch(\"optionalcontentconfig\", {\r\n          source: _this2,\r\n          promise: Promise.resolve(_this2._optionalContentConfig)\r\n        });\r\n      };\r\n\r\n      element.onclick = function (evt) {\r\n        if (evt.target === input) {\r\n          setVisibility();\r\n          return true;\r\n        } else if (evt.target !== element) {\r\n          return true;\r\n        }\r\n\r\n        input.checked = !input.checked;\r\n        setVisibility();\r\n        return false;\r\n      };\r\n    }\r\n  }, {\r\n    key: \"_setNestedName\",\r\n    value: function () {\r\n      var _setNestedName2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(element, _ref2) {\r\n        var _ref2$name, name;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                _ref2$name = _ref2.name, name = _ref2$name === void 0 ? null : _ref2$name;\r\n\r\n                if (!(typeof name === \"string\")) {\r\n                  _context.next = 4;\r\n                  break;\r\n                }\r\n\r\n                element.textContent = this._normalizeTextContent(name);\r\n                return _context.abrupt(\"return\");\r\n\r\n              case 4:\r\n                _context.next = 6;\r\n                return this.l10n.get(\"additional_layers\", null, \"Additional Layers\");\r\n\r\n              case 6:\r\n                element.textContent = _context.sent;\r\n                element.style.fontStyle = \"italic\";\r\n\r\n              case 8:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function _setNestedName(_x, _x2) {\r\n        return _setNestedName2.apply(this, arguments);\r\n      }\r\n\r\n      return _setNestedName;\r\n    }()\r\n  }, {\r\n    key: \"_addToggleButton\",\r\n    value: function _addToggleButton(div, _ref3) {\r\n      var _ref3$name = _ref3.name,\r\n          name = _ref3$name === void 0 ? null : _ref3$name;\r\n\r\n      _get(_getPrototypeOf(PDFLayerViewer.prototype), \"_addToggleButton\", this).call(this, div, name === null);\r\n    }\r\n  }, {\r\n    key: \"_toggleAllTreeItems\",\r\n    value: function _toggleAllTreeItems() {\r\n      if (!this._optionalContentConfig) {\r\n        return;\r\n      }\r\n\r\n      _get(_getPrototypeOf(PDFLayerViewer.prototype), \"_toggleAllTreeItems\", this).call(this);\r\n    }\r\n  }, {\r\n    key: \"render\",\r\n    value: function render(_ref4) {\r\n      var optionalContentConfig = _ref4.optionalContentConfig,\r\n          pdfDocument = _ref4.pdfDocument;\r\n\r\n      if (this._optionalContentConfig) {\r\n        this.reset();\r\n      }\r\n\r\n      this._optionalContentConfig = optionalContentConfig || null;\r\n      this._pdfDocument = pdfDocument || null;\r\n      var groups = optionalContentConfig === null || optionalContentConfig === void 0 ? void 0 : optionalContentConfig.getOrder();\r\n\r\n      if (!groups) {\r\n        this._dispatchEvent(0);\r\n\r\n        return;\r\n      }\r\n\r\n      var fragment = document.createDocumentFragment(),\r\n          queue = [{\r\n        parent: fragment,\r\n        groups: groups\r\n      }];\r\n      var layersCount = 0,\r\n          hasAnyNesting = false;\r\n\r\n      while (queue.length > 0) {\r\n        var levelData = queue.shift();\r\n\r\n        var _iterator = _createForOfIteratorHelper(levelData.groups),\r\n            _step;\r\n\r\n        try {\r\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n            var groupId = _step.value;\r\n            var div = document.createElement(\"div\");\r\n            div.className = \"treeItem\";\r\n            var element = document.createElement(\"a\");\r\n            div.appendChild(element);\r\n\r\n            if (_typeof(groupId) === \"object\") {\r\n              hasAnyNesting = true;\r\n\r\n              this._addToggleButton(div, groupId);\r\n\r\n              this._setNestedName(element, groupId);\r\n\r\n              var itemsDiv = document.createElement(\"div\");\r\n              itemsDiv.className = \"treeItems\";\r\n              div.appendChild(itemsDiv);\r\n              queue.push({\r\n                parent: itemsDiv,\r\n                groups: groupId.order\r\n              });\r\n            } else {\r\n              var group = optionalContentConfig.getGroup(groupId);\r\n              var input = document.createElement(\"input\");\r\n\r\n              this._bindLink(element, {\r\n                groupId: groupId,\r\n                input: input\r\n              });\r\n\r\n              input.type = \"checkbox\";\r\n              input.id = groupId;\r\n              input.checked = group.visible;\r\n              var label = document.createElement(\"label\");\r\n              label.setAttribute(\"for\", groupId);\r\n              label.textContent = this._normalizeTextContent(group.name);\r\n              element.appendChild(input);\r\n              element.appendChild(label);\r\n              layersCount++;\r\n            }\r\n\r\n            levelData.parent.appendChild(div);\r\n          }\r\n        } catch (err) {\r\n          _iterator.e(err);\r\n        } finally {\r\n          _iterator.f();\r\n        }\r\n      }\r\n\r\n      this._finishRendering(fragment, layersCount, hasAnyNesting);\r\n    }\r\n  }, {\r\n    key: \"_resetLayers\",\r\n    value: function () {\r\n      var _resetLayers2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n        var optionalContentConfig;\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                if (this._optionalContentConfig) {\r\n                  _context2.next = 2;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\");\r\n\r\n              case 2:\r\n                _context2.next = 4;\r\n                return this._pdfDocument.getOptionalContentConfig();\r\n\r\n              case 4:\r\n                optionalContentConfig = _context2.sent;\r\n                this.eventBus.dispatch(\"optionalcontentconfig\", {\r\n                  source: this,\r\n                  promise: Promise.resolve(optionalContentConfig)\r\n                });\r\n                this.render({\r\n                  optionalContentConfig: optionalContentConfig,\r\n                  pdfDocument: this._pdfDocument\r\n                });\r\n\r\n              case 7:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this);\r\n      }));\r\n\r\n      function _resetLayers() {\r\n        return _resetLayers2.apply(this, arguments);\r\n      }\r\n\r\n      return _resetLayers;\r\n    }()\r\n  }]);\r\n\r\n  return PDFLayerViewer;\r\n}(_base_tree_viewer.BaseTreeViewer);\r\n\r\nexports.PDFLayerViewer = PDFLayerViewer;\r\n\r\n/***/ }),\r\n/* 21 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.SimpleLinkService = exports.PDFLinkService = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar PDFLinkService = /*#__PURE__*/function () {\r\n  function PDFLinkService() {\r\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\r\n        eventBus = _ref.eventBus,\r\n        _ref$externalLinkTarg = _ref.externalLinkTarget,\r\n        externalLinkTarget = _ref$externalLinkTarg === void 0 ? null : _ref$externalLinkTarg,\r\n        _ref$externalLinkRel = _ref.externalLinkRel,\r\n        externalLinkRel = _ref$externalLinkRel === void 0 ? null : _ref$externalLinkRel,\r\n        _ref$externalLinkEnab = _ref.externalLinkEnabled,\r\n        externalLinkEnabled = _ref$externalLinkEnab === void 0 ? true : _ref$externalLinkEnab,\r\n        _ref$ignoreDestinatio = _ref.ignoreDestinationZoom,\r\n        ignoreDestinationZoom = _ref$ignoreDestinatio === void 0 ? false : _ref$ignoreDestinatio;\r\n\r\n    _classCallCheck(this, PDFLinkService);\r\n\r\n    this.eventBus = eventBus;\r\n    this.externalLinkTarget = externalLinkTarget;\r\n    this.externalLinkRel = externalLinkRel;\r\n    this.externalLinkEnabled = externalLinkEnabled;\r\n    this._ignoreDestinationZoom = ignoreDestinationZoom;\r\n    this.baseUrl = null;\r\n    this.pdfDocument = null;\r\n    this.pdfViewer = null;\r\n    this.pdfHistory = null;\r\n    this._pagesRefCache = null;\r\n  }\r\n\r\n  _createClass(PDFLinkService, [{\r\n    key: \"setDocument\",\r\n    value: function setDocument(pdfDocument) {\r\n      var baseUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n      this.baseUrl = baseUrl;\r\n      this.pdfDocument = pdfDocument;\r\n      this._pagesRefCache = Object.create(null);\r\n    }\r\n  }, {\r\n    key: \"setViewer\",\r\n    value: function setViewer(pdfViewer) {\r\n      this.pdfViewer = pdfViewer;\r\n    }\r\n  }, {\r\n    key: \"setHistory\",\r\n    value: function setHistory(pdfHistory) {\r\n      this.pdfHistory = pdfHistory;\r\n    }\r\n  }, {\r\n    key: \"pagesCount\",\r\n    get: function get() {\r\n      return this.pdfDocument ? this.pdfDocument.numPages : 0;\r\n    }\r\n  }, {\r\n    key: \"page\",\r\n    get: function get() {\r\n      return this.pdfViewer.currentPageNumber;\r\n    },\r\n    set: function set(value) {\r\n      this.pdfViewer.currentPageNumber = value;\r\n    }\r\n  }, {\r\n    key: \"rotation\",\r\n    get: function get() {\r\n      return this.pdfViewer.pagesRotation;\r\n    },\r\n    set: function set(value) {\r\n      this.pdfViewer.pagesRotation = value;\r\n    }\r\n  }, {\r\n    key: \"navigateTo\",\r\n    value: function navigateTo(dest) {\r\n      console.error(\"Deprecated method: `navigateTo`, use `goToDestination` instead.\");\r\n      this.goToDestination(dest);\r\n    }\r\n  }, {\r\n    key: \"_goToDestinationHelper\",\r\n    value: function _goToDestinationHelper(rawDest) {\r\n      var _this = this;\r\n\r\n      var namedDest = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\r\n      var explicitDest = arguments.length > 2 ? arguments[2] : undefined;\r\n      var destRef = explicitDest[0];\r\n      var pageNumber;\r\n\r\n      if (destRef instanceof Object) {\r\n        pageNumber = this._cachedPageNumber(destRef);\r\n\r\n        if (pageNumber === null) {\r\n          this.pdfDocument.getPageIndex(destRef).then(function (pageIndex) {\r\n            _this.cachePageRef(pageIndex + 1, destRef);\r\n\r\n            _this._goToDestinationHelper(rawDest, namedDest, explicitDest);\r\n          })[\"catch\"](function () {\r\n            console.error(\"PDFLinkService._goToDestinationHelper: \\\"\".concat(destRef, \"\\\" is not \") + \"a valid page reference, for dest=\\\"\".concat(rawDest, \"\\\".\"));\r\n          });\r\n          return;\r\n        }\r\n      } else if (Number.isInteger(destRef)) {\r\n        pageNumber = destRef + 1;\r\n      } else {\r\n        console.error(\"PDFLinkService._goToDestinationHelper: \\\"\".concat(destRef, \"\\\" is not \") + \"a valid destination reference, for dest=\\\"\".concat(rawDest, \"\\\".\"));\r\n        return;\r\n      }\r\n\r\n      if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\r\n        console.error(\"PDFLinkService._goToDestinationHelper: \\\"\".concat(pageNumber, \"\\\" is not \") + \"a valid page number, for dest=\\\"\".concat(rawDest, \"\\\".\"));\r\n        return;\r\n      }\r\n\r\n      if (this.pdfHistory) {\r\n        this.pdfHistory.pushCurrentPosition();\r\n        this.pdfHistory.push({\r\n          namedDest: namedDest,\r\n          explicitDest: explicitDest,\r\n          pageNumber: pageNumber\r\n        });\r\n      }\r\n\r\n      this.pdfViewer.scrollPageIntoView({\r\n        pageNumber: pageNumber,\r\n        destArray: explicitDest,\r\n        ignoreDestinationZoom: this._ignoreDestinationZoom\r\n      });\r\n    }\r\n  }, {\r\n    key: \"goToDestination\",\r\n    value: function () {\r\n      var _goToDestination = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(dest) {\r\n        var namedDest, explicitDest;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                if (this.pdfDocument) {\r\n                  _context.next = 2;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\");\r\n\r\n              case 2:\r\n                if (!(typeof dest === \"string\")) {\r\n                  _context.next = 9;\r\n                  break;\r\n                }\r\n\r\n                namedDest = dest;\r\n                _context.next = 6;\r\n                return this.pdfDocument.getDestination(dest);\r\n\r\n              case 6:\r\n                explicitDest = _context.sent;\r\n                _context.next = 13;\r\n                break;\r\n\r\n              case 9:\r\n                namedDest = null;\r\n                _context.next = 12;\r\n                return dest;\r\n\r\n              case 12:\r\n                explicitDest = _context.sent;\r\n\r\n              case 13:\r\n                if (Array.isArray(explicitDest)) {\r\n                  _context.next = 16;\r\n                  break;\r\n                }\r\n\r\n                console.error(\"PDFLinkService.goToDestination: \\\"\".concat(explicitDest, \"\\\" is not \") + \"a valid destination array, for dest=\\\"\".concat(dest, \"\\\".\"));\r\n                return _context.abrupt(\"return\");\r\n\r\n              case 16:\r\n                this._goToDestinationHelper(dest, namedDest, explicitDest);\r\n\r\n              case 17:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function goToDestination(_x) {\r\n        return _goToDestination.apply(this, arguments);\r\n      }\r\n\r\n      return goToDestination;\r\n    }()\r\n  }, {\r\n    key: \"goToPage\",\r\n    value: function goToPage(val) {\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      var pageNumber = typeof val === \"string\" && this.pdfViewer.pageLabelToPageNumber(val) || val | 0;\r\n\r\n      if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {\r\n        console.error(\"PDFLinkService.goToPage: \\\"\".concat(val, \"\\\" is not a valid page.\"));\r\n        return;\r\n      }\r\n\r\n      if (this.pdfHistory) {\r\n        this.pdfHistory.pushCurrentPosition();\r\n        this.pdfHistory.pushPage(pageNumber);\r\n      }\r\n\r\n      this.pdfViewer.scrollPageIntoView({\r\n        pageNumber: pageNumber\r\n      });\r\n    }\r\n  }, {\r\n    key: \"getDestinationHash\",\r\n    value: function getDestinationHash(dest) {\r\n      if (typeof dest === \"string\") {\r\n        if (dest.length > 0) {\r\n          return this.getAnchorUrl(\"#\" + escape(dest));\r\n        }\r\n      } else if (Array.isArray(dest)) {\r\n        var str = JSON.stringify(dest);\r\n\r\n        if (str.length > 0) {\r\n          return this.getAnchorUrl(\"#\" + escape(str));\r\n        }\r\n      }\r\n\r\n      return this.getAnchorUrl(\"\");\r\n    }\r\n  }, {\r\n    key: \"getAnchorUrl\",\r\n    value: function getAnchorUrl(anchor) {\r\n      return (this.baseUrl || \"\") + anchor;\r\n    }\r\n  }, {\r\n    key: \"setHash\",\r\n    value: function setHash(hash) {\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      var pageNumber, dest;\r\n\r\n      if (hash.includes(\"=\")) {\r\n        var params = (0, _ui_utils.parseQueryString)(hash);\r\n\r\n        if (\"search\" in params) {\r\n          this.eventBus.dispatch(\"findfromurlhash\", {\r\n            source: this,\r\n            query: params.search.replace(/\"/g, \"\"),\r\n            phraseSearch: params.phrase === \"true\"\r\n          });\r\n        }\r\n\r\n        if (\"page\" in params) {\r\n          pageNumber = params.page | 0 || 1;\r\n        }\r\n\r\n        if (\"zoom\" in params) {\r\n          var zoomArgs = params.zoom.split(\",\");\r\n          var zoomArg = zoomArgs[0];\r\n          var zoomArgNumber = parseFloat(zoomArg);\r\n\r\n          if (!zoomArg.includes(\"Fit\")) {\r\n            dest = [null, {\r\n              name: \"XYZ\"\r\n            }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg];\r\n          } else {\r\n            if (zoomArg === \"Fit\" || zoomArg === \"FitB\") {\r\n              dest = [null, {\r\n                name: zoomArg\r\n              }];\r\n            } else if (zoomArg === \"FitH\" || zoomArg === \"FitBH\" || zoomArg === \"FitV\" || zoomArg === \"FitBV\") {\r\n              dest = [null, {\r\n                name: zoomArg\r\n              }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null];\r\n            } else if (zoomArg === \"FitR\") {\r\n              if (zoomArgs.length !== 5) {\r\n                console.error('PDFLinkService.setHash: Not enough parameters for \"FitR\".');\r\n              } else {\r\n                dest = [null, {\r\n                  name: zoomArg\r\n                }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0];\r\n              }\r\n            } else {\r\n              console.error(\"PDFLinkService.setHash: \\\"\".concat(zoomArg, \"\\\" is not \") + \"a valid zoom value.\");\r\n            }\r\n          }\r\n        }\r\n\r\n        if (dest) {\r\n          this.pdfViewer.scrollPageIntoView({\r\n            pageNumber: pageNumber || this.page,\r\n            destArray: dest,\r\n            allowNegativeOffset: true\r\n          });\r\n        } else if (pageNumber) {\r\n          this.page = pageNumber;\r\n        }\r\n\r\n        if (\"pagemode\" in params) {\r\n          this.eventBus.dispatch(\"pagemode\", {\r\n            source: this,\r\n            mode: params.pagemode\r\n          });\r\n        }\r\n\r\n        if (\"nameddest\" in params) {\r\n          this.goToDestination(params.nameddest);\r\n        }\r\n      } else {\r\n        dest = unescape(hash);\r\n\r\n        try {\r\n          dest = JSON.parse(dest);\r\n\r\n          if (!Array.isArray(dest)) {\r\n            dest = dest.toString();\r\n          }\r\n        } catch (ex) {}\r\n\r\n        if (typeof dest === \"string\" || isValidExplicitDestination(dest)) {\r\n          this.goToDestination(dest);\r\n          return;\r\n        }\r\n\r\n        console.error(\"PDFLinkService.setHash: \\\"\".concat(unescape(hash), \"\\\" is not \") + \"a valid destination.\");\r\n      }\r\n    }\r\n  }, {\r\n    key: \"executeNamedAction\",\r\n    value: function executeNamedAction(action) {\r\n      switch (action) {\r\n        case \"GoBack\":\r\n          if (this.pdfHistory) {\r\n            this.pdfHistory.back();\r\n          }\r\n\r\n          break;\r\n\r\n        case \"GoForward\":\r\n          if (this.pdfHistory) {\r\n            this.pdfHistory.forward();\r\n          }\r\n\r\n          break;\r\n\r\n        case \"NextPage\":\r\n          this.pdfViewer.nextPage();\r\n          break;\r\n\r\n        case \"PrevPage\":\r\n          this.pdfViewer.previousPage();\r\n          break;\r\n\r\n        case \"LastPage\":\r\n          this.page = this.pagesCount;\r\n          break;\r\n\r\n        case \"FirstPage\":\r\n          this.page = 1;\r\n          break;\r\n\r\n        default:\r\n          break;\r\n      }\r\n\r\n      this.eventBus.dispatch(\"namedaction\", {\r\n        source: this,\r\n        action: action\r\n      });\r\n    }\r\n  }, {\r\n    key: \"cachePageRef\",\r\n    value: function cachePageRef(pageNum, pageRef) {\r\n      if (!pageRef) {\r\n        return;\r\n      }\r\n\r\n      var refStr = pageRef.gen === 0 ? \"\".concat(pageRef.num, \"R\") : \"\".concat(pageRef.num, \"R\").concat(pageRef.gen);\r\n      this._pagesRefCache[refStr] = pageNum;\r\n    }\r\n  }, {\r\n    key: \"_cachedPageNumber\",\r\n    value: function _cachedPageNumber(pageRef) {\r\n      var _this$_pagesRefCache;\r\n\r\n      var refStr = pageRef.gen === 0 ? \"\".concat(pageRef.num, \"R\") : \"\".concat(pageRef.num, \"R\").concat(pageRef.gen);\r\n      return ((_this$_pagesRefCache = this._pagesRefCache) === null || _this$_pagesRefCache === void 0 ? void 0 : _this$_pagesRefCache[refStr]) || null;\r\n    }\r\n  }, {\r\n    key: \"isPageVisible\",\r\n    value: function isPageVisible(pageNumber) {\r\n      return this.pdfViewer.isPageVisible(pageNumber);\r\n    }\r\n  }, {\r\n    key: \"isPageCached\",\r\n    value: function isPageCached(pageNumber) {\r\n      return this.pdfViewer.isPageCached(pageNumber);\r\n    }\r\n  }]);\r\n\r\n  return PDFLinkService;\r\n}();\r\n\r\nexports.PDFLinkService = PDFLinkService;\r\n\r\nfunction isValidExplicitDestination(dest) {\r\n  if (!Array.isArray(dest)) {\r\n    return false;\r\n  }\r\n\r\n  var destLength = dest.length;\r\n\r\n  if (destLength < 2) {\r\n    return false;\r\n  }\r\n\r\n  var page = dest[0];\r\n\r\n  if (!(_typeof(page) === \"object\" && Number.isInteger(page.num) && Number.isInteger(page.gen)) && !(Number.isInteger(page) && page >= 0)) {\r\n    return false;\r\n  }\r\n\r\n  var zoom = dest[1];\r\n\r\n  if (!(_typeof(zoom) === \"object\" && typeof zoom.name === \"string\")) {\r\n    return false;\r\n  }\r\n\r\n  var allowNull = true;\r\n\r\n  switch (zoom.name) {\r\n    case \"XYZ\":\r\n      if (destLength !== 5) {\r\n        return false;\r\n      }\r\n\r\n      break;\r\n\r\n    case \"Fit\":\r\n    case \"FitB\":\r\n      return destLength === 2;\r\n\r\n    case \"FitH\":\r\n    case \"FitBH\":\r\n    case \"FitV\":\r\n    case \"FitBV\":\r\n      if (destLength !== 3) {\r\n        return false;\r\n      }\r\n\r\n      break;\r\n\r\n    case \"FitR\":\r\n      if (destLength !== 6) {\r\n        return false;\r\n      }\r\n\r\n      allowNull = false;\r\n      break;\r\n\r\n    default:\r\n      return false;\r\n  }\r\n\r\n  for (var i = 2; i < destLength; i++) {\r\n    var param = dest[i];\r\n\r\n    if (!(typeof param === \"number\" || allowNull && param === null)) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  return true;\r\n}\r\n\r\nvar SimpleLinkService = /*#__PURE__*/function () {\r\n  function SimpleLinkService() {\r\n    _classCallCheck(this, SimpleLinkService);\r\n\r\n    this.externalLinkTarget = null;\r\n    this.externalLinkRel = null;\r\n    this.externalLinkEnabled = true;\r\n    this._ignoreDestinationZoom = false;\r\n  }\r\n\r\n  _createClass(SimpleLinkService, [{\r\n    key: \"pagesCount\",\r\n    get: function get() {\r\n      return 0;\r\n    }\r\n  }, {\r\n    key: \"page\",\r\n    get: function get() {\r\n      return 0;\r\n    },\r\n    set: function set(value) {}\r\n  }, {\r\n    key: \"rotation\",\r\n    get: function get() {\r\n      return 0;\r\n    },\r\n    set: function set(value) {}\r\n  }, {\r\n    key: \"goToDestination\",\r\n    value: function () {\r\n      var _goToDestination2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(dest) {\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2);\r\n      }));\r\n\r\n      function goToDestination(_x2) {\r\n        return _goToDestination2.apply(this, arguments);\r\n      }\r\n\r\n      return goToDestination;\r\n    }()\r\n  }, {\r\n    key: \"goToPage\",\r\n    value: function goToPage(val) {}\r\n  }, {\r\n    key: \"getDestinationHash\",\r\n    value: function getDestinationHash(dest) {\r\n      return \"#\";\r\n    }\r\n  }, {\r\n    key: \"getAnchorUrl\",\r\n    value: function getAnchorUrl(hash) {\r\n      return \"#\";\r\n    }\r\n  }, {\r\n    key: \"setHash\",\r\n    value: function setHash(hash) {}\r\n  }, {\r\n    key: \"executeNamedAction\",\r\n    value: function executeNamedAction(action) {}\r\n  }, {\r\n    key: \"cachePageRef\",\r\n    value: function cachePageRef(pageNum, pageRef) {}\r\n  }, {\r\n    key: \"isPageVisible\",\r\n    value: function isPageVisible(pageNumber) {\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"isPageCached\",\r\n    value: function isPageCached(pageNumber) {\r\n      return true;\r\n    }\r\n  }]);\r\n\r\n  return SimpleLinkService;\r\n}();\r\n\r\nexports.SimpleLinkService = SimpleLinkService;\r\n\r\n/***/ }),\r\n/* 22 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFOutlineViewer = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nvar _base_tree_viewer = __webpack_require__(14);\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\r\n\r\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\r\n\r\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\r\n\r\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nvar PDFOutlineViewer = /*#__PURE__*/function (_BaseTreeViewer) {\r\n  _inherits(PDFOutlineViewer, _BaseTreeViewer);\r\n\r\n  var _super = _createSuper(PDFOutlineViewer);\r\n\r\n  function PDFOutlineViewer(options) {\r\n    var _this;\r\n\r\n    _classCallCheck(this, PDFOutlineViewer);\r\n\r\n    _this = _super.call(this, options);\r\n    _this.linkService = options.linkService;\r\n\r\n    _this.eventBus._on(\"toggleoutlinetree\", _this._toggleAllTreeItems.bind(_assertThisInitialized(_this)));\r\n\r\n    _this.eventBus._on(\"currentoutlineitem\", _this._currentOutlineItem.bind(_assertThisInitialized(_this)));\r\n\r\n    _this.eventBus._on(\"pagechanging\", function (evt) {\r\n      _this._currentPageNumber = evt.pageNumber;\r\n    });\r\n\r\n    _this.eventBus._on(\"pagesloaded\", function (evt) {\r\n      _this._isPagesLoaded = !!evt.pagesCount;\r\n    });\r\n\r\n    _this.eventBus._on(\"sidebarviewchanged\", function (evt) {\r\n      _this._sidebarView = evt.view;\r\n    });\r\n\r\n    return _this;\r\n  }\r\n\r\n  _createClass(PDFOutlineViewer, [{\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      _get(_getPrototypeOf(PDFOutlineViewer.prototype), \"reset\", this).call(this);\r\n\r\n      this._outline = null;\r\n      this._pageNumberToDestHashCapability = null;\r\n      this._currentPageNumber = 1;\r\n      this._isPagesLoaded = false;\r\n    }\r\n  }, {\r\n    key: \"_dispatchEvent\",\r\n    value: function _dispatchEvent(outlineCount) {\r\n      var _this$_pdfDocument;\r\n\r\n      this.eventBus.dispatch(\"outlineloaded\", {\r\n        source: this,\r\n        outlineCount: outlineCount,\r\n        enableCurrentOutlineItemButton: outlineCount > 0 && !((_this$_pdfDocument = this._pdfDocument) !== null && _this$_pdfDocument !== void 0 && _this$_pdfDocument.loadingParams.disableAutoFetch)\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_bindLink\",\r\n    value: function _bindLink(element, _ref) {\r\n      var _this2 = this;\r\n\r\n      var url = _ref.url,\r\n          newWindow = _ref.newWindow,\r\n          dest = _ref.dest;\r\n      var linkService = this.linkService;\r\n\r\n      if (url) {\r\n        (0, _pdfjsLib.addLinkAttributes)(element, {\r\n          url: url,\r\n          target: newWindow ? _pdfjsLib.LinkTarget.BLANK : linkService.externalLinkTarget,\r\n          rel: linkService.externalLinkRel,\r\n          enabled: linkService.externalLinkEnabled\r\n        });\r\n        return;\r\n      }\r\n\r\n      element.href = linkService.getDestinationHash(dest);\r\n\r\n      element.onclick = function (evt) {\r\n        _this2._updateCurrentTreeItem(evt.target.parentNode);\r\n\r\n        if (dest) {\r\n          linkService.goToDestination(dest);\r\n        }\r\n\r\n        return false;\r\n      };\r\n    }\r\n  }, {\r\n    key: \"_setStyles\",\r\n    value: function _setStyles(element, _ref2) {\r\n      var bold = _ref2.bold,\r\n          italic = _ref2.italic;\r\n\r\n      if (bold) {\r\n        element.style.fontWeight = \"bold\";\r\n      }\r\n\r\n      if (italic) {\r\n        element.style.fontStyle = \"italic\";\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_addToggleButton\",\r\n    value: function _addToggleButton(div, _ref3) {\r\n      var count = _ref3.count,\r\n          items = _ref3.items;\r\n      var hidden = false;\r\n\r\n      if (count < 0) {\r\n        var totalCount = items.length;\r\n\r\n        if (totalCount > 0) {\r\n          var queue = _toConsumableArray(items);\r\n\r\n          while (queue.length > 0) {\r\n            var _queue$shift = queue.shift(),\r\n                nestedCount = _queue$shift.count,\r\n                nestedItems = _queue$shift.items;\r\n\r\n            if (nestedCount > 0 && nestedItems.length > 0) {\r\n              totalCount += nestedItems.length;\r\n              queue.push.apply(queue, _toConsumableArray(nestedItems));\r\n            }\r\n          }\r\n        }\r\n\r\n        if (Math.abs(count) === totalCount) {\r\n          hidden = true;\r\n        }\r\n      }\r\n\r\n      _get(_getPrototypeOf(PDFOutlineViewer.prototype), \"_addToggleButton\", this).call(this, div, hidden);\r\n    }\r\n  }, {\r\n    key: \"_toggleAllTreeItems\",\r\n    value: function _toggleAllTreeItems() {\r\n      if (!this._outline) {\r\n        return;\r\n      }\r\n\r\n      _get(_getPrototypeOf(PDFOutlineViewer.prototype), \"_toggleAllTreeItems\", this).call(this);\r\n    }\r\n  }, {\r\n    key: \"render\",\r\n    value: function render(_ref4) {\r\n      var outline = _ref4.outline,\r\n          pdfDocument = _ref4.pdfDocument;\r\n\r\n      if (this._outline) {\r\n        this.reset();\r\n      }\r\n\r\n      this._outline = outline || null;\r\n      this._pdfDocument = pdfDocument || null;\r\n\r\n      if (!outline) {\r\n        this._dispatchEvent(0);\r\n\r\n        return;\r\n      }\r\n\r\n      var fragment = document.createDocumentFragment();\r\n      var queue = [{\r\n        parent: fragment,\r\n        items: outline\r\n      }];\r\n      var outlineCount = 0,\r\n          hasAnyNesting = false;\r\n\r\n      while (queue.length > 0) {\r\n        var levelData = queue.shift();\r\n\r\n        var _iterator = _createForOfIteratorHelper(levelData.items),\r\n            _step;\r\n\r\n        try {\r\n          for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n            var item = _step.value;\r\n            var div = document.createElement(\"div\");\r\n            div.className = \"treeItem\";\r\n            var element = document.createElement(\"a\");\r\n\r\n            this._bindLink(element, item);\r\n\r\n            this._setStyles(element, item);\r\n\r\n            element.textContent = this._normalizeTextContent(item.title);\r\n            div.appendChild(element);\r\n\r\n            if (item.items.length > 0) {\r\n              hasAnyNesting = true;\r\n\r\n              this._addToggleButton(div, item);\r\n\r\n              var itemsDiv = document.createElement(\"div\");\r\n              itemsDiv.className = \"treeItems\";\r\n              div.appendChild(itemsDiv);\r\n              queue.push({\r\n                parent: itemsDiv,\r\n                items: item.items\r\n              });\r\n            }\r\n\r\n            levelData.parent.appendChild(div);\r\n            outlineCount++;\r\n          }\r\n        } catch (err) {\r\n          _iterator.e(err);\r\n        } finally {\r\n          _iterator.f();\r\n        }\r\n      }\r\n\r\n      this._finishRendering(fragment, outlineCount, hasAnyNesting);\r\n    }\r\n  }, {\r\n    key: \"_currentOutlineItem\",\r\n    value: function () {\r\n      var _currentOutlineItem2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var pageNumberToDestHash, i, destHash, linkElement;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                if (this._isPagesLoaded) {\r\n                  _context.next = 2;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"_currentOutlineItem: All pages have not been loaded.\");\r\n\r\n              case 2:\r\n                if (!(!this._outline || !this._pdfDocument)) {\r\n                  _context.next = 4;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\");\r\n\r\n              case 4:\r\n                _context.next = 6;\r\n                return this._getPageNumberToDestHash(this._pdfDocument);\r\n\r\n              case 6:\r\n                pageNumberToDestHash = _context.sent;\r\n\r\n                if (pageNumberToDestHash) {\r\n                  _context.next = 9;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\");\r\n\r\n              case 9:\r\n                this._updateCurrentTreeItem(null);\r\n\r\n                if (!(this._sidebarView !== _ui_utils.SidebarView.OUTLINE)) {\r\n                  _context.next = 12;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"return\");\r\n\r\n              case 12:\r\n                i = this._currentPageNumber;\r\n\r\n              case 13:\r\n                if (!(i > 0)) {\r\n                  _context.next = 25;\r\n                  break;\r\n                }\r\n\r\n                destHash = pageNumberToDestHash.get(i);\r\n\r\n                if (destHash) {\r\n                  _context.next = 17;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"continue\", 22);\r\n\r\n              case 17:\r\n                linkElement = this.container.querySelector(\"a[href=\\\"\".concat(destHash, \"\\\"]\"));\r\n\r\n                if (linkElement) {\r\n                  _context.next = 20;\r\n                  break;\r\n                }\r\n\r\n                return _context.abrupt(\"continue\", 22);\r\n\r\n              case 20:\r\n                this._scrollToCurrentTreeItem(linkElement.parentNode);\r\n\r\n                return _context.abrupt(\"break\", 25);\r\n\r\n              case 22:\r\n                i--;\r\n                _context.next = 13;\r\n                break;\r\n\r\n              case 25:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function _currentOutlineItem() {\r\n        return _currentOutlineItem2.apply(this, arguments);\r\n      }\r\n\r\n      return _currentOutlineItem;\r\n    }()\r\n  }, {\r\n    key: \"_getPageNumberToDestHash\",\r\n    value: function () {\r\n      var _getPageNumberToDestHash2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(pdfDocument) {\r\n        var pageNumberToDestHash, pageNumberNesting, queue, levelData, currentNesting, _iterator2, _step2, _step2$value, dest, items, explicitDest, pageNumber, _explicitDest, _explicitDest2, destRef, destHash;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                if (!this._pageNumberToDestHashCapability) {\r\n                  _context2.next = 2;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", this._pageNumberToDestHashCapability.promise);\r\n\r\n              case 2:\r\n                this._pageNumberToDestHashCapability = (0, _pdfjsLib.createPromiseCapability)();\r\n                pageNumberToDestHash = new Map(), pageNumberNesting = new Map();\r\n                queue = [{\r\n                  nesting: 0,\r\n                  items: this._outline\r\n                }];\r\n\r\n              case 5:\r\n                if (!(queue.length > 0)) {\r\n                  _context2.next = 56;\r\n                  break;\r\n                }\r\n\r\n                levelData = queue.shift(), currentNesting = levelData.nesting;\r\n                _iterator2 = _createForOfIteratorHelper(levelData.items);\r\n                _context2.prev = 8;\r\n\r\n                _iterator2.s();\r\n\r\n              case 10:\r\n                if ((_step2 = _iterator2.n()).done) {\r\n                  _context2.next = 46;\r\n                  break;\r\n                }\r\n\r\n                _step2$value = _step2.value, dest = _step2$value.dest, items = _step2$value.items;\r\n                explicitDest = void 0, pageNumber = void 0;\r\n\r\n                if (!(typeof dest === \"string\")) {\r\n                  _context2.next = 21;\r\n                  break;\r\n                }\r\n\r\n                _context2.next = 16;\r\n                return pdfDocument.getDestination(dest);\r\n\r\n              case 16:\r\n                explicitDest = _context2.sent;\r\n\r\n                if (!(pdfDocument !== this._pdfDocument)) {\r\n                  _context2.next = 19;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", null);\r\n\r\n              case 19:\r\n                _context2.next = 22;\r\n                break;\r\n\r\n              case 21:\r\n                explicitDest = dest;\r\n\r\n              case 22:\r\n                if (!Array.isArray(explicitDest)) {\r\n                  _context2.next = 43;\r\n                  break;\r\n                }\r\n\r\n                _explicitDest = explicitDest, _explicitDest2 = _slicedToArray(_explicitDest, 1), destRef = _explicitDest2[0];\r\n\r\n                if (!(_typeof(destRef) === \"object\")) {\r\n                  _context2.next = 41;\r\n                  break;\r\n                }\r\n\r\n                pageNumber = this.linkService._cachedPageNumber(destRef);\r\n\r\n                if (pageNumber) {\r\n                  _context2.next = 39;\r\n                  break;\r\n                }\r\n\r\n                _context2.prev = 27;\r\n                _context2.next = 30;\r\n                return pdfDocument.getPageIndex(destRef);\r\n\r\n              case 30:\r\n                _context2.t0 = _context2.sent;\r\n                pageNumber = _context2.t0 + 1;\r\n\r\n                if (!(pdfDocument !== this._pdfDocument)) {\r\n                  _context2.next = 34;\r\n                  break;\r\n                }\r\n\r\n                return _context2.abrupt(\"return\", null);\r\n\r\n              case 34:\r\n                this.linkService.cachePageRef(pageNumber, destRef);\r\n                _context2.next = 39;\r\n                break;\r\n\r\n              case 37:\r\n                _context2.prev = 37;\r\n                _context2.t1 = _context2[\"catch\"](27);\r\n\r\n              case 39:\r\n                _context2.next = 42;\r\n                break;\r\n\r\n              case 41:\r\n                if (Number.isInteger(destRef)) {\r\n                  pageNumber = destRef + 1;\r\n                }\r\n\r\n              case 42:\r\n                if (Number.isInteger(pageNumber) && (!pageNumberToDestHash.has(pageNumber) || currentNesting > pageNumberNesting.get(pageNumber))) {\r\n                  destHash = this.linkService.getDestinationHash(dest);\r\n                  pageNumberToDestHash.set(pageNumber, destHash);\r\n                  pageNumberNesting.set(pageNumber, currentNesting);\r\n                }\r\n\r\n              case 43:\r\n                if (items.length > 0) {\r\n                  queue.push({\r\n                    nesting: currentNesting + 1,\r\n                    items: items\r\n                  });\r\n                }\r\n\r\n              case 44:\r\n                _context2.next = 10;\r\n                break;\r\n\r\n              case 46:\r\n                _context2.next = 51;\r\n                break;\r\n\r\n              case 48:\r\n                _context2.prev = 48;\r\n                _context2.t2 = _context2[\"catch\"](8);\r\n\r\n                _iterator2.e(_context2.t2);\r\n\r\n              case 51:\r\n                _context2.prev = 51;\r\n\r\n                _iterator2.f();\r\n\r\n                return _context2.finish(51);\r\n\r\n              case 54:\r\n                _context2.next = 5;\r\n                break;\r\n\r\n              case 56:\r\n                this._pageNumberToDestHashCapability.resolve(pageNumberToDestHash.size > 0 ? pageNumberToDestHash : null);\r\n\r\n                return _context2.abrupt(\"return\", this._pageNumberToDestHashCapability.promise);\r\n\r\n              case 58:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this, [[8, 48, 51, 54], [27, 37]]);\r\n      }));\r\n\r\n      function _getPageNumberToDestHash(_x) {\r\n        return _getPageNumberToDestHash2.apply(this, arguments);\r\n      }\r\n\r\n      return _getPageNumberToDestHash;\r\n    }()\r\n  }]);\r\n\r\n  return PDFOutlineViewer;\r\n}(_base_tree_viewer.BaseTreeViewer);\r\n\r\nexports.PDFOutlineViewer = PDFOutlineViewer;\r\n\r\n/***/ }),\r\n/* 23 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFPresentationMode = void 0;\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS = 1500;\r\nvar DELAY_BEFORE_HIDING_CONTROLS = 3000;\r\nvar ACTIVE_SELECTOR = \"pdfPresentationMode\";\r\nvar CONTROLS_SELECTOR = \"pdfPresentationModeControls\";\r\nvar MOUSE_SCROLL_COOLDOWN_TIME = 50;\r\nvar PAGE_SWITCH_THRESHOLD = 0.1;\r\nvar SWIPE_MIN_DISTANCE_THRESHOLD = 50;\r\nvar SWIPE_ANGLE_THRESHOLD = Math.PI / 6;\r\n\r\nvar PDFPresentationMode = /*#__PURE__*/function () {\r\n  function PDFPresentationMode(_ref) {\r\n    var _this = this;\r\n\r\n    var container = _ref.container,\r\n        pdfViewer = _ref.pdfViewer,\r\n        eventBus = _ref.eventBus,\r\n        _ref$contextMenuItems = _ref.contextMenuItems,\r\n        contextMenuItems = _ref$contextMenuItems === void 0 ? null : _ref$contextMenuItems;\r\n\r\n    _classCallCheck(this, PDFPresentationMode);\r\n\r\n    this.container = container;\r\n    this.pdfViewer = pdfViewer;\r\n    this.eventBus = eventBus;\r\n    this.active = false;\r\n    this.args = null;\r\n    this.contextMenuOpen = false;\r\n    this.mouseScrollTimeStamp = 0;\r\n    this.mouseScrollDelta = 0;\r\n    this.touchSwipeState = null;\r\n\r\n    if (contextMenuItems) {\r\n      contextMenuItems.contextFirstPage.addEventListener(\"click\", function () {\r\n        _this.contextMenuOpen = false;\r\n\r\n        _this.eventBus.dispatch(\"firstpage\", {\r\n          source: _this\r\n        });\r\n      });\r\n      contextMenuItems.contextLastPage.addEventListener(\"click\", function () {\r\n        _this.contextMenuOpen = false;\r\n\r\n        _this.eventBus.dispatch(\"lastpage\", {\r\n          source: _this\r\n        });\r\n      });\r\n      contextMenuItems.contextPageRotateCw.addEventListener(\"click\", function () {\r\n        _this.contextMenuOpen = false;\r\n\r\n        _this.eventBus.dispatch(\"rotatecw\", {\r\n          source: _this\r\n        });\r\n      });\r\n      contextMenuItems.contextPageRotateCcw.addEventListener(\"click\", function () {\r\n        _this.contextMenuOpen = false;\r\n\r\n        _this.eventBus.dispatch(\"rotateccw\", {\r\n          source: _this\r\n        });\r\n      });\r\n    }\r\n  }\r\n\r\n  _createClass(PDFPresentationMode, [{\r\n    key: \"request\",\r\n    value: function request() {\r\n      if (this.switchInProgress || this.active || !this.pdfViewer.pagesCount) {\r\n        return false;\r\n      }\r\n\r\n      this._addFullscreenChangeListeners();\r\n\r\n      this._setSwitchInProgress();\r\n\r\n      this._notifyStateChange();\r\n\r\n      if (this.container.requestFullscreen) {\r\n        this.container.requestFullscreen();\r\n      } else if (this.container.mozRequestFullScreen) {\r\n        this.container.mozRequestFullScreen();\r\n      } else if (this.container.webkitRequestFullscreen) {\r\n        this.container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\r\n      } else {\r\n        return false;\r\n      }\r\n\r\n      this.args = {\r\n        page: this.pdfViewer.currentPageNumber,\r\n        previousScale: this.pdfViewer.currentScaleValue\r\n      };\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"_mouseWheel\",\r\n    value: function _mouseWheel(evt) {\r\n      if (!this.active) {\r\n        return;\r\n      }\r\n\r\n      evt.preventDefault();\r\n      var delta = (0, _ui_utils.normalizeWheelEventDelta)(evt);\r\n      var currentTime = new Date().getTime();\r\n      var storedTime = this.mouseScrollTimeStamp;\r\n\r\n      if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) {\r\n        return;\r\n      }\r\n\r\n      if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) {\r\n        this._resetMouseScrollState();\r\n      }\r\n\r\n      this.mouseScrollDelta += delta;\r\n\r\n      if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) {\r\n        var totalDelta = this.mouseScrollDelta;\r\n\r\n        this._resetMouseScrollState();\r\n\r\n        var success = totalDelta > 0 ? this.pdfViewer.previousPage() : this.pdfViewer.nextPage();\r\n\r\n        if (success) {\r\n          this.mouseScrollTimeStamp = currentTime;\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"isFullscreen\",\r\n    get: function get() {\r\n      return !!(document.fullscreenElement || document.mozFullScreen || document.webkitIsFullScreen);\r\n    }\r\n  }, {\r\n    key: \"_notifyStateChange\",\r\n    value: function _notifyStateChange() {\r\n      var state = _ui_utils.PresentationModeState.NORMAL;\r\n\r\n      if (this.switchInProgress) {\r\n        state = _ui_utils.PresentationModeState.CHANGING;\r\n      } else if (this.active) {\r\n        state = _ui_utils.PresentationModeState.FULLSCREEN;\r\n      }\r\n\r\n      this.eventBus.dispatch(\"presentationmodechanged\", {\r\n        source: this,\r\n        state: state,\r\n\r\n        get active() {\r\n          throw new Error(\"Deprecated parameter: `active`, please use `state` instead.\");\r\n        },\r\n\r\n        get switchInProgress() {\r\n          throw new Error(\"Deprecated parameter: `switchInProgress`, please use `state` instead.\");\r\n        }\r\n\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_setSwitchInProgress\",\r\n    value: function _setSwitchInProgress() {\r\n      var _this2 = this;\r\n\r\n      if (this.switchInProgress) {\r\n        clearTimeout(this.switchInProgress);\r\n      }\r\n\r\n      this.switchInProgress = setTimeout(function () {\r\n        _this2._removeFullscreenChangeListeners();\r\n\r\n        delete _this2.switchInProgress;\r\n\r\n        _this2._notifyStateChange();\r\n      }, DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS);\r\n    }\r\n  }, {\r\n    key: \"_resetSwitchInProgress\",\r\n    value: function _resetSwitchInProgress() {\r\n      if (this.switchInProgress) {\r\n        clearTimeout(this.switchInProgress);\r\n        delete this.switchInProgress;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_enter\",\r\n    value: function _enter() {\r\n      var _this3 = this;\r\n\r\n      this.active = true;\r\n\r\n      this._resetSwitchInProgress();\r\n\r\n      this._notifyStateChange();\r\n\r\n      this.container.classList.add(ACTIVE_SELECTOR);\r\n      setTimeout(function () {\r\n        _this3.pdfViewer.currentPageNumber = _this3.args.page;\r\n        _this3.pdfViewer.currentScaleValue = \"page-fit\";\r\n      }, 0);\r\n\r\n      this._addWindowListeners();\r\n\r\n      this._showControls();\r\n\r\n      this.contextMenuOpen = false;\r\n      this.container.setAttribute(\"contextmenu\", \"viewerContextMenu\");\r\n      window.getSelection().removeAllRanges();\r\n    }\r\n  }, {\r\n    key: \"_exit\",\r\n    value: function _exit() {\r\n      var _this4 = this;\r\n\r\n      var page = this.pdfViewer.currentPageNumber;\r\n      this.container.classList.remove(ACTIVE_SELECTOR);\r\n      setTimeout(function () {\r\n        _this4.active = false;\r\n\r\n        _this4._removeFullscreenChangeListeners();\r\n\r\n        _this4._notifyStateChange();\r\n\r\n        _this4.pdfViewer.currentScaleValue = _this4.args.previousScale;\r\n        _this4.pdfViewer.currentPageNumber = page;\r\n        _this4.args = null;\r\n      }, 0);\r\n\r\n      this._removeWindowListeners();\r\n\r\n      this._hideControls();\r\n\r\n      this._resetMouseScrollState();\r\n\r\n      this.container.removeAttribute(\"contextmenu\");\r\n      this.contextMenuOpen = false;\r\n    }\r\n  }, {\r\n    key: \"_mouseDown\",\r\n    value: function _mouseDown(evt) {\r\n      if (this.contextMenuOpen) {\r\n        this.contextMenuOpen = false;\r\n        evt.preventDefault();\r\n        return;\r\n      }\r\n\r\n      if (evt.button === 0) {\r\n        var isInternalLink = evt.target.href && evt.target.classList.contains(\"internalLink\");\r\n\r\n        if (!isInternalLink) {\r\n          evt.preventDefault();\r\n\r\n          if (evt.shiftKey) {\r\n            this.pdfViewer.previousPage();\r\n          } else {\r\n            this.pdfViewer.nextPage();\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_contextMenu\",\r\n    value: function _contextMenu() {\r\n      this.contextMenuOpen = true;\r\n    }\r\n  }, {\r\n    key: \"_showControls\",\r\n    value: function _showControls() {\r\n      var _this5 = this;\r\n\r\n      if (this.controlsTimeout) {\r\n        clearTimeout(this.controlsTimeout);\r\n      } else {\r\n        this.container.classList.add(CONTROLS_SELECTOR);\r\n      }\r\n\r\n      this.controlsTimeout = setTimeout(function () {\r\n        _this5.container.classList.remove(CONTROLS_SELECTOR);\r\n\r\n        delete _this5.controlsTimeout;\r\n      }, DELAY_BEFORE_HIDING_CONTROLS);\r\n    }\r\n  }, {\r\n    key: \"_hideControls\",\r\n    value: function _hideControls() {\r\n      if (!this.controlsTimeout) {\r\n        return;\r\n      }\r\n\r\n      clearTimeout(this.controlsTimeout);\r\n      this.container.classList.remove(CONTROLS_SELECTOR);\r\n      delete this.controlsTimeout;\r\n    }\r\n  }, {\r\n    key: \"_resetMouseScrollState\",\r\n    value: function _resetMouseScrollState() {\r\n      this.mouseScrollTimeStamp = 0;\r\n      this.mouseScrollDelta = 0;\r\n    }\r\n  }, {\r\n    key: \"_touchSwipe\",\r\n    value: function _touchSwipe(evt) {\r\n      if (!this.active) {\r\n        return;\r\n      }\r\n\r\n      if (evt.touches.length > 1) {\r\n        this.touchSwipeState = null;\r\n        return;\r\n      }\r\n\r\n      switch (evt.type) {\r\n        case \"touchstart\":\r\n          this.touchSwipeState = {\r\n            startX: evt.touches[0].pageX,\r\n            startY: evt.touches[0].pageY,\r\n            endX: evt.touches[0].pageX,\r\n            endY: evt.touches[0].pageY\r\n          };\r\n          break;\r\n\r\n        case \"touchmove\":\r\n          if (this.touchSwipeState === null) {\r\n            return;\r\n          }\r\n\r\n          this.touchSwipeState.endX = evt.touches[0].pageX;\r\n          this.touchSwipeState.endY = evt.touches[0].pageY;\r\n          evt.preventDefault();\r\n          break;\r\n\r\n        case \"touchend\":\r\n          if (this.touchSwipeState === null) {\r\n            return;\r\n          }\r\n\r\n          var delta = 0;\r\n          var dx = this.touchSwipeState.endX - this.touchSwipeState.startX;\r\n          var dy = this.touchSwipeState.endY - this.touchSwipeState.startY;\r\n          var absAngle = Math.abs(Math.atan2(dy, dx));\r\n\r\n          if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) {\r\n            delta = dx;\r\n          } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) {\r\n            delta = dy;\r\n          }\r\n\r\n          if (delta > 0) {\r\n            this.pdfViewer.previousPage();\r\n          } else if (delta < 0) {\r\n            this.pdfViewer.nextPage();\r\n          }\r\n\r\n          break;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_addWindowListeners\",\r\n    value: function _addWindowListeners() {\r\n      this.showControlsBind = this._showControls.bind(this);\r\n      this.mouseDownBind = this._mouseDown.bind(this);\r\n      this.mouseWheelBind = this._mouseWheel.bind(this);\r\n      this.resetMouseScrollStateBind = this._resetMouseScrollState.bind(this);\r\n      this.contextMenuBind = this._contextMenu.bind(this);\r\n      this.touchSwipeBind = this._touchSwipe.bind(this);\r\n      window.addEventListener(\"mousemove\", this.showControlsBind);\r\n      window.addEventListener(\"mousedown\", this.mouseDownBind);\r\n      window.addEventListener(\"wheel\", this.mouseWheelBind, {\r\n        passive: false\r\n      });\r\n      window.addEventListener(\"keydown\", this.resetMouseScrollStateBind);\r\n      window.addEventListener(\"contextmenu\", this.contextMenuBind);\r\n      window.addEventListener(\"touchstart\", this.touchSwipeBind);\r\n      window.addEventListener(\"touchmove\", this.touchSwipeBind);\r\n      window.addEventListener(\"touchend\", this.touchSwipeBind);\r\n    }\r\n  }, {\r\n    key: \"_removeWindowListeners\",\r\n    value: function _removeWindowListeners() {\r\n      window.removeEventListener(\"mousemove\", this.showControlsBind);\r\n      window.removeEventListener(\"mousedown\", this.mouseDownBind);\r\n      window.removeEventListener(\"wheel\", this.mouseWheelBind, {\r\n        passive: false\r\n      });\r\n      window.removeEventListener(\"keydown\", this.resetMouseScrollStateBind);\r\n      window.removeEventListener(\"contextmenu\", this.contextMenuBind);\r\n      window.removeEventListener(\"touchstart\", this.touchSwipeBind);\r\n      window.removeEventListener(\"touchmove\", this.touchSwipeBind);\r\n      window.removeEventListener(\"touchend\", this.touchSwipeBind);\r\n      delete this.showControlsBind;\r\n      delete this.mouseDownBind;\r\n      delete this.mouseWheelBind;\r\n      delete this.resetMouseScrollStateBind;\r\n      delete this.contextMenuBind;\r\n      delete this.touchSwipeBind;\r\n    }\r\n  }, {\r\n    key: \"_fullscreenChange\",\r\n    value: function _fullscreenChange() {\r\n      if (this.isFullscreen) {\r\n        this._enter();\r\n      } else {\r\n        this._exit();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_addFullscreenChangeListeners\",\r\n    value: function _addFullscreenChangeListeners() {\r\n      this.fullscreenChangeBind = this._fullscreenChange.bind(this);\r\n      window.addEventListener(\"fullscreenchange\", this.fullscreenChangeBind);\r\n      window.addEventListener(\"mozfullscreenchange\", this.fullscreenChangeBind);\r\n      window.addEventListener(\"webkitfullscreenchange\", this.fullscreenChangeBind);\r\n    }\r\n  }, {\r\n    key: \"_removeFullscreenChangeListeners\",\r\n    value: function _removeFullscreenChangeListeners() {\r\n      window.removeEventListener(\"fullscreenchange\", this.fullscreenChangeBind);\r\n      window.removeEventListener(\"mozfullscreenchange\", this.fullscreenChangeBind);\r\n      window.removeEventListener(\"webkitfullscreenchange\", this.fullscreenChangeBind);\r\n      delete this.fullscreenChangeBind;\r\n    }\r\n  }]);\r\n\r\n  return PDFPresentationMode;\r\n}();\r\n\r\nexports.PDFPresentationMode = PDFPresentationMode;\r\n\r\n/***/ }),\r\n/* 24 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFSidebar = void 0;\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nvar _pdf_rendering_queue = __webpack_require__(10);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar UI_NOTIFICATION_CLASS = \"pdfSidebarNotification\";\r\n\r\nvar PDFSidebar = /*#__PURE__*/function () {\r\n  function PDFSidebar(_ref) {\r\n    var elements = _ref.elements,\r\n        pdfViewer = _ref.pdfViewer,\r\n        pdfThumbnailViewer = _ref.pdfThumbnailViewer,\r\n        eventBus = _ref.eventBus,\r\n        _ref$l10n = _ref.l10n,\r\n        l10n = _ref$l10n === void 0 ? _ui_utils.NullL10n : _ref$l10n;\r\n\r\n    _classCallCheck(this, PDFSidebar);\r\n\r\n    this.isOpen = false;\r\n    this.active = _ui_utils.SidebarView.THUMBS;\r\n    this.isInitialViewSet = false;\r\n    this.onToggled = null;\r\n    this.pdfViewer = pdfViewer;\r\n    this.pdfThumbnailViewer = pdfThumbnailViewer;\r\n    this.outerContainer = elements.outerContainer;\r\n    this.viewerContainer = elements.viewerContainer;\r\n    this.toggleButton = elements.toggleButton;\r\n    this.thumbnailButton = elements.thumbnailButton;\r\n    this.outlineButton = elements.outlineButton;\r\n    this.attachmentsButton = elements.attachmentsButton;\r\n    this.layersButton = elements.layersButton;\r\n    this.thumbnailView = elements.thumbnailView;\r\n    this.outlineView = elements.outlineView;\r\n    this.attachmentsView = elements.attachmentsView;\r\n    this.layersView = elements.layersView;\r\n    this._outlineOptionsContainer = elements.outlineOptionsContainer;\r\n    this._currentOutlineItemButton = elements.currentOutlineItemButton;\r\n    this.eventBus = eventBus;\r\n    this.l10n = l10n;\r\n\r\n    this._addEventListeners();\r\n  }\r\n\r\n  _createClass(PDFSidebar, [{\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      this.isInitialViewSet = false;\r\n\r\n      this._hideUINotification(true);\r\n\r\n      this.switchView(_ui_utils.SidebarView.THUMBS);\r\n      this.outlineButton.disabled = false;\r\n      this.attachmentsButton.disabled = false;\r\n      this.layersButton.disabled = false;\r\n      this._currentOutlineItemButton.disabled = true;\r\n    }\r\n  }, {\r\n    key: \"visibleView\",\r\n    get: function get() {\r\n      return this.isOpen ? this.active : _ui_utils.SidebarView.NONE;\r\n    }\r\n  }, {\r\n    key: \"isThumbnailViewVisible\",\r\n    get: function get() {\r\n      return this.isOpen && this.active === _ui_utils.SidebarView.THUMBS;\r\n    }\r\n  }, {\r\n    key: \"isOutlineViewVisible\",\r\n    get: function get() {\r\n      return this.isOpen && this.active === _ui_utils.SidebarView.OUTLINE;\r\n    }\r\n  }, {\r\n    key: \"isAttachmentsViewVisible\",\r\n    get: function get() {\r\n      return this.isOpen && this.active === _ui_utils.SidebarView.ATTACHMENTS;\r\n    }\r\n  }, {\r\n    key: \"isLayersViewVisible\",\r\n    get: function get() {\r\n      return this.isOpen && this.active === _ui_utils.SidebarView.LAYERS;\r\n    }\r\n  }, {\r\n    key: \"setInitialView\",\r\n    value: function setInitialView() {\r\n      var view = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _ui_utils.SidebarView.NONE;\r\n\r\n      if (this.isInitialViewSet) {\r\n        return;\r\n      }\r\n\r\n      this.isInitialViewSet = true;\r\n\r\n      if (view === _ui_utils.SidebarView.NONE || view === _ui_utils.SidebarView.UNKNOWN) {\r\n        this._dispatchEvent();\r\n\r\n        return;\r\n      }\r\n\r\n      if (!this._switchView(view, true)) {\r\n        this._dispatchEvent();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"switchView\",\r\n    value: function switchView(view) {\r\n      var forceOpen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n\r\n      this._switchView(view, forceOpen);\r\n    }\r\n  }, {\r\n    key: \"_switchView\",\r\n    value: function _switchView(view) {\r\n      var forceOpen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      var isViewChanged = view !== this.active;\r\n      var shouldForceRendering = false;\r\n\r\n      switch (view) {\r\n        case _ui_utils.SidebarView.NONE:\r\n          if (this.isOpen) {\r\n            this.close();\r\n            return true;\r\n          }\r\n\r\n          return false;\r\n\r\n        case _ui_utils.SidebarView.THUMBS:\r\n          if (this.isOpen && isViewChanged) {\r\n            shouldForceRendering = true;\r\n          }\r\n\r\n          break;\r\n\r\n        case _ui_utils.SidebarView.OUTLINE:\r\n          if (this.outlineButton.disabled) {\r\n            return false;\r\n          }\r\n\r\n          break;\r\n\r\n        case _ui_utils.SidebarView.ATTACHMENTS:\r\n          if (this.attachmentsButton.disabled) {\r\n            return false;\r\n          }\r\n\r\n          break;\r\n\r\n        case _ui_utils.SidebarView.LAYERS:\r\n          if (this.layersButton.disabled) {\r\n            return false;\r\n          }\r\n\r\n          break;\r\n\r\n        default:\r\n          console.error(\"PDFSidebar._switchView: \\\"\".concat(view, \"\\\" is not a valid view.\"));\r\n          return false;\r\n      }\r\n\r\n      this.active = view;\r\n      this.thumbnailButton.classList.toggle(\"toggled\", view === _ui_utils.SidebarView.THUMBS);\r\n      this.outlineButton.classList.toggle(\"toggled\", view === _ui_utils.SidebarView.OUTLINE);\r\n      this.attachmentsButton.classList.toggle(\"toggled\", view === _ui_utils.SidebarView.ATTACHMENTS);\r\n      this.layersButton.classList.toggle(\"toggled\", view === _ui_utils.SidebarView.LAYERS);\r\n      this.thumbnailView.classList.toggle(\"hidden\", view !== _ui_utils.SidebarView.THUMBS);\r\n      this.outlineView.classList.toggle(\"hidden\", view !== _ui_utils.SidebarView.OUTLINE);\r\n      this.attachmentsView.classList.toggle(\"hidden\", view !== _ui_utils.SidebarView.ATTACHMENTS);\r\n      this.layersView.classList.toggle(\"hidden\", view !== _ui_utils.SidebarView.LAYERS);\r\n\r\n      this._outlineOptionsContainer.classList.toggle(\"hidden\", view !== _ui_utils.SidebarView.OUTLINE);\r\n\r\n      if (forceOpen && !this.isOpen) {\r\n        this.open();\r\n        return true;\r\n      }\r\n\r\n      if (shouldForceRendering) {\r\n        this._updateThumbnailViewer();\r\n\r\n        this._forceRendering();\r\n      }\r\n\r\n      if (isViewChanged) {\r\n        this._dispatchEvent();\r\n      }\r\n\r\n      return isViewChanged;\r\n    }\r\n  }, {\r\n    key: \"open\",\r\n    value: function open() {\r\n      if (this.isOpen) {\r\n        return;\r\n      }\r\n\r\n      this.isOpen = true;\r\n      this.toggleButton.classList.add(\"toggled\");\r\n      this.toggleButton.setAttribute(\"aria-expanded\", \"true\");\r\n      this.outerContainer.classList.add(\"sidebarMoving\", \"sidebarOpen\");\r\n\r\n      if (this.active === _ui_utils.SidebarView.THUMBS) {\r\n        this._updateThumbnailViewer();\r\n      }\r\n\r\n      this._forceRendering();\r\n\r\n      this._dispatchEvent();\r\n\r\n      this._hideUINotification();\r\n    }\r\n  }, {\r\n    key: \"close\",\r\n    value: function close() {\r\n      if (!this.isOpen) {\r\n        return;\r\n      }\r\n\r\n      this.isOpen = false;\r\n      this.toggleButton.classList.remove(\"toggled\");\r\n      this.toggleButton.setAttribute(\"aria-expanded\", \"false\");\r\n      this.outerContainer.classList.add(\"sidebarMoving\");\r\n      this.outerContainer.classList.remove(\"sidebarOpen\");\r\n\r\n      this._forceRendering();\r\n\r\n      this._dispatchEvent();\r\n    }\r\n  }, {\r\n    key: \"toggle\",\r\n    value: function toggle() {\r\n      if (this.isOpen) {\r\n        this.close();\r\n      } else {\r\n        this.open();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_dispatchEvent\",\r\n    value: function _dispatchEvent() {\r\n      this.eventBus.dispatch(\"sidebarviewchanged\", {\r\n        source: this,\r\n        view: this.visibleView\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_forceRendering\",\r\n    value: function _forceRendering() {\r\n      if (this.onToggled) {\r\n        this.onToggled();\r\n      } else {\r\n        this.pdfViewer.forceRendering();\r\n        this.pdfThumbnailViewer.forceRendering();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_updateThumbnailViewer\",\r\n    value: function _updateThumbnailViewer() {\r\n      var pdfViewer = this.pdfViewer,\r\n          pdfThumbnailViewer = this.pdfThumbnailViewer;\r\n      var pagesCount = pdfViewer.pagesCount;\r\n\r\n      for (var pageIndex = 0; pageIndex < pagesCount; pageIndex++) {\r\n        var pageView = pdfViewer.getPageView(pageIndex);\r\n\r\n        if ((pageView === null || pageView === void 0 ? void 0 : pageView.renderingState) === _pdf_rendering_queue.RenderingStates.FINISHED) {\r\n          var thumbnailView = pdfThumbnailViewer.getThumbnail(pageIndex);\r\n          thumbnailView.setImage(pageView);\r\n        }\r\n      }\r\n\r\n      pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber);\r\n    }\r\n  }, {\r\n    key: \"_showUINotification\",\r\n    value: function _showUINotification() {\r\n      var _this = this;\r\n\r\n      this.l10n.get(\"toggle_sidebar_notification2.title\", null, \"Toggle Sidebar (document contains outline/attachments/layers)\").then(function (msg) {\r\n        _this.toggleButton.title = msg;\r\n      });\r\n\r\n      if (!this.isOpen) {\r\n        this.toggleButton.classList.add(UI_NOTIFICATION_CLASS);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_hideUINotification\",\r\n    value: function _hideUINotification() {\r\n      var _this2 = this;\r\n\r\n      var reset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n\r\n      if (this.isOpen || reset) {\r\n        this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS);\r\n      }\r\n\r\n      if (reset) {\r\n        this.l10n.get(\"toggle_sidebar.title\", null, \"Toggle Sidebar\").then(function (msg) {\r\n          _this2.toggleButton.title = msg;\r\n        });\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_addEventListeners\",\r\n    value: function _addEventListeners() {\r\n      var _this3 = this;\r\n\r\n      this.viewerContainer.addEventListener(\"transitionend\", function (evt) {\r\n        if (evt.target === _this3.viewerContainer) {\r\n          _this3.outerContainer.classList.remove(\"sidebarMoving\");\r\n        }\r\n      });\r\n      this.toggleButton.addEventListener(\"click\", function () {\r\n        _this3.toggle();\r\n      });\r\n      this.thumbnailButton.addEventListener(\"click\", function () {\r\n        _this3.switchView(_ui_utils.SidebarView.THUMBS);\r\n      });\r\n      this.outlineButton.addEventListener(\"click\", function () {\r\n        _this3.switchView(_ui_utils.SidebarView.OUTLINE);\r\n      });\r\n      this.outlineButton.addEventListener(\"dblclick\", function () {\r\n        _this3.eventBus.dispatch(\"toggleoutlinetree\", {\r\n          source: _this3\r\n        });\r\n      });\r\n      this.attachmentsButton.addEventListener(\"click\", function () {\r\n        _this3.switchView(_ui_utils.SidebarView.ATTACHMENTS);\r\n      });\r\n      this.layersButton.addEventListener(\"click\", function () {\r\n        _this3.switchView(_ui_utils.SidebarView.LAYERS);\r\n      });\r\n      this.layersButton.addEventListener(\"dblclick\", function () {\r\n        _this3.eventBus.dispatch(\"resetlayers\", {\r\n          source: _this3\r\n        });\r\n      });\r\n\r\n      this._currentOutlineItemButton.addEventListener(\"click\", function () {\r\n        _this3.eventBus.dispatch(\"currentoutlineitem\", {\r\n          source: _this3\r\n        });\r\n      });\r\n\r\n      var onTreeLoaded = function onTreeLoaded(count, button, view) {\r\n        button.disabled = !count;\r\n\r\n        if (count) {\r\n          _this3._showUINotification();\r\n        } else if (_this3.active === view) {\r\n          _this3.switchView(_ui_utils.SidebarView.THUMBS);\r\n        }\r\n      };\r\n\r\n      this.eventBus._on(\"outlineloaded\", function (evt) {\r\n        onTreeLoaded(evt.outlineCount, _this3.outlineButton, _ui_utils.SidebarView.OUTLINE);\r\n\r\n        if (evt.enableCurrentOutlineItemButton) {\r\n          _this3.pdfViewer.pagesPromise.then(function () {\r\n            _this3._currentOutlineItemButton.disabled = !_this3.isInitialViewSet;\r\n          });\r\n        }\r\n      });\r\n\r\n      this.eventBus._on(\"attachmentsloaded\", function (evt) {\r\n        onTreeLoaded(evt.attachmentsCount, _this3.attachmentsButton, _ui_utils.SidebarView.ATTACHMENTS);\r\n      });\r\n\r\n      this.eventBus._on(\"layersloaded\", function (evt) {\r\n        onTreeLoaded(evt.layersCount, _this3.layersButton, _ui_utils.SidebarView.LAYERS);\r\n      });\r\n\r\n      this.eventBus._on(\"presentationmodechanged\", function (evt) {\r\n        if (evt.state === _ui_utils.PresentationModeState.NORMAL && _this3.isThumbnailViewVisible) {\r\n          _this3._updateThumbnailViewer();\r\n        }\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return PDFSidebar;\r\n}();\r\n\r\nexports.PDFSidebar = PDFSidebar;\r\n\r\n/***/ }),\r\n/* 25 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFSidebarResizer = void 0;\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar SIDEBAR_WIDTH_VAR = \"--sidebar-width\";\r\nvar SIDEBAR_MIN_WIDTH = 200;\r\nvar SIDEBAR_RESIZING_CLASS = \"sidebarResizing\";\r\n\r\nvar PDFSidebarResizer = /*#__PURE__*/function () {\r\n  function PDFSidebarResizer(options, eventBus) {\r\n    var _this = this;\r\n\r\n    var l10n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _ui_utils.NullL10n;\r\n\r\n    _classCallCheck(this, PDFSidebarResizer);\r\n\r\n    this.isRTL = false;\r\n    this.sidebarOpen = false;\r\n    this.doc = document.documentElement;\r\n    this._width = null;\r\n    this._outerContainerWidth = null;\r\n    this._boundEvents = Object.create(null);\r\n    this.outerContainer = options.outerContainer;\r\n    this.resizer = options.resizer;\r\n    this.eventBus = eventBus;\r\n    l10n.getDirection().then(function (dir) {\r\n      _this.isRTL = dir === \"rtl\";\r\n    });\r\n\r\n    this._addEventListeners();\r\n  }\r\n\r\n  _createClass(PDFSidebarResizer, [{\r\n    key: \"outerContainerWidth\",\r\n    get: function get() {\r\n      if (!this._outerContainerWidth) {\r\n        this._outerContainerWidth = this.outerContainer.clientWidth;\r\n      }\r\n\r\n      return this._outerContainerWidth;\r\n    }\r\n  }, {\r\n    key: \"_updateWidth\",\r\n    value: function _updateWidth() {\r\n      var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\r\n      var maxWidth = Math.floor(this.outerContainerWidth / 2);\r\n\r\n      if (width > maxWidth) {\r\n        width = maxWidth;\r\n      }\r\n\r\n      if (width < SIDEBAR_MIN_WIDTH) {\r\n        width = SIDEBAR_MIN_WIDTH;\r\n      }\r\n\r\n      if (width === this._width) {\r\n        return false;\r\n      }\r\n\r\n      this._width = width;\r\n      this.doc.style.setProperty(SIDEBAR_WIDTH_VAR, \"\".concat(width, \"px\"));\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"_mouseMove\",\r\n    value: function _mouseMove(evt) {\r\n      var width = evt.clientX;\r\n\r\n      if (this.isRTL) {\r\n        width = this.outerContainerWidth - width;\r\n      }\r\n\r\n      this._updateWidth(width);\r\n    }\r\n  }, {\r\n    key: \"_mouseUp\",\r\n    value: function _mouseUp(evt) {\r\n      this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);\r\n      this.eventBus.dispatch(\"resize\", {\r\n        source: this\r\n      });\r\n      var _boundEvents = this._boundEvents;\r\n      window.removeEventListener(\"mousemove\", _boundEvents.mouseMove);\r\n      window.removeEventListener(\"mouseup\", _boundEvents.mouseUp);\r\n    }\r\n  }, {\r\n    key: \"_addEventListeners\",\r\n    value: function _addEventListeners() {\r\n      var _this2 = this;\r\n\r\n      var _boundEvents = this._boundEvents;\r\n      _boundEvents.mouseMove = this._mouseMove.bind(this);\r\n      _boundEvents.mouseUp = this._mouseUp.bind(this);\r\n      this.resizer.addEventListener(\"mousedown\", function (evt) {\r\n        if (evt.button !== 0) {\r\n          return;\r\n        }\r\n\r\n        _this2.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);\r\n\r\n        window.addEventListener(\"mousemove\", _boundEvents.mouseMove);\r\n        window.addEventListener(\"mouseup\", _boundEvents.mouseUp);\r\n      });\r\n\r\n      this.eventBus._on(\"sidebarviewchanged\", function (evt) {\r\n        _this2.sidebarOpen = !!(evt !== null && evt !== void 0 && evt.view);\r\n      });\r\n\r\n      this.eventBus._on(\"resize\", function (evt) {\r\n        if (!evt || evt.source !== window) {\r\n          return;\r\n        }\r\n\r\n        _this2._outerContainerWidth = null;\r\n\r\n        if (!_this2._width) {\r\n          return;\r\n        }\r\n\r\n        if (!_this2.sidebarOpen) {\r\n          _this2._updateWidth(_this2._width);\r\n\r\n          return;\r\n        }\r\n\r\n        _this2.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);\r\n\r\n        var updated = _this2._updateWidth(_this2._width);\r\n\r\n        Promise.resolve().then(function () {\r\n          _this2.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);\r\n\r\n          if (updated) {\r\n            _this2.eventBus.dispatch(\"resize\", {\r\n              source: _this2\r\n            });\r\n          }\r\n        });\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return PDFSidebarResizer;\r\n}();\r\n\r\nexports.PDFSidebarResizer = PDFSidebarResizer;\r\n\r\n/***/ }),\r\n/* 26 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFThumbnailViewer = void 0;\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nvar _pdf_thumbnail_view = __webpack_require__(27);\r\n\r\nvar _pdf_rendering_queue = __webpack_require__(10);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar THUMBNAIL_SCROLL_MARGIN = -19;\r\nvar THUMBNAIL_SELECTED_CLASS = \"selected\";\r\n\r\nvar PDFThumbnailViewer = /*#__PURE__*/function () {\r\n  function PDFThumbnailViewer(_ref) {\r\n    var _this = this;\r\n\r\n    var container = _ref.container,\r\n        eventBus = _ref.eventBus,\r\n        linkService = _ref.linkService,\r\n        renderingQueue = _ref.renderingQueue,\r\n        _ref$l10n = _ref.l10n,\r\n        l10n = _ref$l10n === void 0 ? _ui_utils.NullL10n : _ref$l10n;\r\n\r\n    _classCallCheck(this, PDFThumbnailViewer);\r\n\r\n    this.container = container;\r\n    this.linkService = linkService;\r\n    this.renderingQueue = renderingQueue;\r\n    this.l10n = l10n;\r\n    this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdated.bind(this));\r\n\r\n    this._resetView();\r\n\r\n    eventBus._on(\"optionalcontentconfigchanged\", function () {\r\n      _this._setImageDisabled = true;\r\n    });\r\n  }\r\n\r\n  _createClass(PDFThumbnailViewer, [{\r\n    key: \"_scrollUpdated\",\r\n    value: function _scrollUpdated() {\r\n      this.renderingQueue.renderHighestPriority();\r\n    }\r\n  }, {\r\n    key: \"getThumbnail\",\r\n    value: function getThumbnail(index) {\r\n      return this._thumbnails[index];\r\n    }\r\n  }, {\r\n    key: \"_getVisibleThumbs\",\r\n    value: function _getVisibleThumbs() {\r\n      return (0, _ui_utils.getVisibleElements)({\r\n        scrollEl: this.container,\r\n        views: this._thumbnails\r\n      });\r\n    }\r\n  }, {\r\n    key: \"scrollThumbnailIntoView\",\r\n    value: function scrollThumbnailIntoView(pageNumber) {\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      var thumbnailView = this._thumbnails[pageNumber - 1];\r\n\r\n      if (!thumbnailView) {\r\n        console.error('scrollThumbnailIntoView: Invalid \"pageNumber\" parameter.');\r\n        return;\r\n      }\r\n\r\n      if (pageNumber !== this._currentPageNumber) {\r\n        var prevThumbnailView = this._thumbnails[this._currentPageNumber - 1];\r\n        prevThumbnailView.div.classList.remove(THUMBNAIL_SELECTED_CLASS);\r\n        thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);\r\n      }\r\n\r\n      var visibleThumbs = this._getVisibleThumbs();\r\n\r\n      var numVisibleThumbs = visibleThumbs.views.length;\r\n\r\n      if (numVisibleThumbs > 0) {\r\n        var first = visibleThumbs.first.id;\r\n        var last = numVisibleThumbs > 1 ? visibleThumbs.last.id : first;\r\n        var shouldScroll = false;\r\n\r\n        if (pageNumber <= first || pageNumber >= last) {\r\n          shouldScroll = true;\r\n        } else {\r\n          visibleThumbs.views.some(function (view) {\r\n            if (view.id !== pageNumber) {\r\n              return false;\r\n            }\r\n\r\n            shouldScroll = view.percent < 100;\r\n            return true;\r\n          });\r\n        }\r\n\r\n        if (shouldScroll) {\r\n          (0, _ui_utils.scrollIntoView)(thumbnailView.div, {\r\n            top: THUMBNAIL_SCROLL_MARGIN\r\n          });\r\n        }\r\n      }\r\n\r\n      this._currentPageNumber = pageNumber;\r\n    }\r\n  }, {\r\n    key: \"pagesRotation\",\r\n    get: function get() {\r\n      return this._pagesRotation;\r\n    },\r\n    set: function set(rotation) {\r\n      if (!(0, _ui_utils.isValidRotation)(rotation)) {\r\n        throw new Error(\"Invalid thumbnails rotation angle.\");\r\n      }\r\n\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      if (this._pagesRotation === rotation) {\r\n        return;\r\n      }\r\n\r\n      this._pagesRotation = rotation;\r\n\r\n      for (var i = 0, ii = this._thumbnails.length; i < ii; i++) {\r\n        this._thumbnails[i].update(rotation);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"cleanup\",\r\n    value: function cleanup() {\r\n      for (var i = 0, ii = this._thumbnails.length; i < ii; i++) {\r\n        if (this._thumbnails[i] && this._thumbnails[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {\r\n          this._thumbnails[i].reset();\r\n        }\r\n      }\r\n\r\n      _pdf_thumbnail_view.TempImageFactory.destroyCanvas();\r\n    }\r\n  }, {\r\n    key: \"_resetView\",\r\n    value: function _resetView() {\r\n      this._thumbnails = [];\r\n      this._currentPageNumber = 1;\r\n      this._pageLabels = null;\r\n      this._pagesRotation = 0;\r\n      this._optionalContentConfigPromise = null;\r\n      this._pagesRequests = new WeakMap();\r\n      this._setImageDisabled = false;\r\n      this.container.textContent = \"\";\r\n    }\r\n  }, {\r\n    key: \"setDocument\",\r\n    value: function setDocument(pdfDocument) {\r\n      var _this2 = this;\r\n\r\n      if (this.pdfDocument) {\r\n        this._cancelRendering();\r\n\r\n        this._resetView();\r\n      }\r\n\r\n      this.pdfDocument = pdfDocument;\r\n\r\n      if (!pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      var firstPagePromise = pdfDocument.getPage(1);\r\n      var optionalContentConfigPromise = pdfDocument.getOptionalContentConfig();\r\n      firstPagePromise.then(function (firstPdfPage) {\r\n        _this2._optionalContentConfigPromise = optionalContentConfigPromise;\r\n        var pagesCount = pdfDocument.numPages;\r\n        var viewport = firstPdfPage.getViewport({\r\n          scale: 1\r\n        });\r\n\r\n        var checkSetImageDisabled = function checkSetImageDisabled() {\r\n          return _this2._setImageDisabled;\r\n        };\r\n\r\n        for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {\r\n          var thumbnail = new _pdf_thumbnail_view.PDFThumbnailView({\r\n            container: _this2.container,\r\n            id: pageNum,\r\n            defaultViewport: viewport.clone(),\r\n            optionalContentConfigPromise: optionalContentConfigPromise,\r\n            linkService: _this2.linkService,\r\n            renderingQueue: _this2.renderingQueue,\r\n            checkSetImageDisabled: checkSetImageDisabled,\r\n            disableCanvasToImageConversion: false,\r\n            l10n: _this2.l10n\r\n          });\r\n\r\n          _this2._thumbnails.push(thumbnail);\r\n        }\r\n\r\n        var firstThumbnailView = _this2._thumbnails[0];\r\n\r\n        if (firstThumbnailView) {\r\n          firstThumbnailView.setPdfPage(firstPdfPage);\r\n        }\r\n\r\n        var thumbnailView = _this2._thumbnails[_this2._currentPageNumber - 1];\r\n        thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);\r\n      })[\"catch\"](function (reason) {\r\n        console.error(\"Unable to initialize thumbnail viewer\", reason);\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_cancelRendering\",\r\n    value: function _cancelRendering() {\r\n      for (var i = 0, ii = this._thumbnails.length; i < ii; i++) {\r\n        if (this._thumbnails[i]) {\r\n          this._thumbnails[i].cancelRendering();\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"setPageLabels\",\r\n    value: function setPageLabels(labels) {\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      if (!labels) {\r\n        this._pageLabels = null;\r\n      } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {\r\n        this._pageLabels = null;\r\n        console.error(\"PDFThumbnailViewer_setPageLabels: Invalid page labels.\");\r\n      } else {\r\n        this._pageLabels = labels;\r\n      }\r\n\r\n      for (var i = 0, ii = this._thumbnails.length; i < ii; i++) {\r\n        var _this$_pageLabels$i, _this$_pageLabels;\r\n\r\n        this._thumbnails[i].setPageLabel((_this$_pageLabels$i = (_this$_pageLabels = this._pageLabels) === null || _this$_pageLabels === void 0 ? void 0 : _this$_pageLabels[i]) !== null && _this$_pageLabels$i !== void 0 ? _this$_pageLabels$i : null);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_ensurePdfPageLoaded\",\r\n    value: function _ensurePdfPageLoaded(thumbView) {\r\n      var _this3 = this;\r\n\r\n      if (thumbView.pdfPage) {\r\n        return Promise.resolve(thumbView.pdfPage);\r\n      }\r\n\r\n      if (this._pagesRequests.has(thumbView)) {\r\n        return this._pagesRequests.get(thumbView);\r\n      }\r\n\r\n      var promise = this.pdfDocument.getPage(thumbView.id).then(function (pdfPage) {\r\n        if (!thumbView.pdfPage) {\r\n          thumbView.setPdfPage(pdfPage);\r\n        }\r\n\r\n        _this3._pagesRequests[\"delete\"](thumbView);\r\n\r\n        return pdfPage;\r\n      })[\"catch\"](function (reason) {\r\n        console.error(\"Unable to get page for thumb view\", reason);\r\n\r\n        _this3._pagesRequests[\"delete\"](thumbView);\r\n      });\r\n\r\n      this._pagesRequests.set(thumbView, promise);\r\n\r\n      return promise;\r\n    }\r\n  }, {\r\n    key: \"forceRendering\",\r\n    value: function forceRendering() {\r\n      var _this4 = this;\r\n\r\n      var visibleThumbs = this._getVisibleThumbs();\r\n\r\n      var thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, this.scroll.down);\r\n\r\n      if (thumbView) {\r\n        this._ensurePdfPageLoaded(thumbView).then(function () {\r\n          _this4.renderingQueue.renderView(thumbView);\r\n        });\r\n\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    }\r\n  }]);\r\n\r\n  return PDFThumbnailViewer;\r\n}();\r\n\r\nexports.PDFThumbnailViewer = PDFThumbnailViewer;\r\n\r\n/***/ }),\r\n/* 27 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.TempImageFactory = exports.PDFThumbnailView = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nvar _pdf_rendering_queue = __webpack_require__(10);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar MAX_NUM_SCALING_STEPS = 3;\r\nvar THUMBNAIL_CANVAS_BORDER_WIDTH = 1;\r\nvar THUMBNAIL_WIDTH = 98;\r\n\r\nvar TempImageFactory = function TempImageFactoryClosure() {\r\n  var tempCanvasCache = null;\r\n  return {\r\n    getCanvas: function getCanvas(width, height) {\r\n      var tempCanvas = tempCanvasCache;\r\n\r\n      if (!tempCanvas) {\r\n        tempCanvas = document.createElement(\"canvas\");\r\n        tempCanvasCache = tempCanvas;\r\n      }\r\n\r\n      tempCanvas.width = width;\r\n      tempCanvas.height = height;\r\n      tempCanvas.mozOpaque = true;\r\n      var ctx = tempCanvas.getContext(\"2d\", {\r\n        alpha: false\r\n      });\r\n      ctx.save();\r\n      ctx.fillStyle = \"rgb(255, 255, 255)\";\r\n      ctx.fillRect(0, 0, width, height);\r\n      ctx.restore();\r\n      return tempCanvas;\r\n    },\r\n    destroyCanvas: function destroyCanvas() {\r\n      var tempCanvas = tempCanvasCache;\r\n\r\n      if (tempCanvas) {\r\n        tempCanvas.width = 0;\r\n        tempCanvas.height = 0;\r\n      }\r\n\r\n      tempCanvasCache = null;\r\n    }\r\n  };\r\n}();\r\n\r\nexports.TempImageFactory = TempImageFactory;\r\n\r\nvar PDFThumbnailView = /*#__PURE__*/function () {\r\n  function PDFThumbnailView(_ref) {\r\n    var container = _ref.container,\r\n        id = _ref.id,\r\n        defaultViewport = _ref.defaultViewport,\r\n        optionalContentConfigPromise = _ref.optionalContentConfigPromise,\r\n        linkService = _ref.linkService,\r\n        renderingQueue = _ref.renderingQueue,\r\n        checkSetImageDisabled = _ref.checkSetImageDisabled,\r\n        _ref$disableCanvasToI = _ref.disableCanvasToImageConversion,\r\n        disableCanvasToImageConversion = _ref$disableCanvasToI === void 0 ? false : _ref$disableCanvasToI,\r\n        _ref$l10n = _ref.l10n,\r\n        l10n = _ref$l10n === void 0 ? _ui_utils.NullL10n : _ref$l10n;\r\n\r\n    _classCallCheck(this, PDFThumbnailView);\r\n\r\n    this.id = id;\r\n    this.renderingId = \"thumbnail\" + id;\r\n    this.pageLabel = null;\r\n    this.pdfPage = null;\r\n    this.rotation = 0;\r\n    this.viewport = defaultViewport;\r\n    this.pdfPageRotate = defaultViewport.rotation;\r\n    this._optionalContentConfigPromise = optionalContentConfigPromise || null;\r\n    this.linkService = linkService;\r\n    this.renderingQueue = renderingQueue;\r\n    this.renderTask = null;\r\n    this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;\r\n    this.resume = null;\r\n\r\n    this._checkSetImageDisabled = checkSetImageDisabled || function () {\r\n      return false;\r\n    };\r\n\r\n    this.disableCanvasToImageConversion = disableCanvasToImageConversion;\r\n    this.pageWidth = this.viewport.width;\r\n    this.pageHeight = this.viewport.height;\r\n    this.pageRatio = this.pageWidth / this.pageHeight;\r\n    this.canvasWidth = THUMBNAIL_WIDTH;\r\n    this.canvasHeight = this.canvasWidth / this.pageRatio | 0;\r\n    this.scale = this.canvasWidth / this.pageWidth;\r\n    this.l10n = l10n;\r\n    var anchor = document.createElement(\"a\");\r\n    anchor.href = linkService.getAnchorUrl(\"#page=\" + id);\r\n\r\n    this._thumbPageTitle.then(function (msg) {\r\n      anchor.title = msg;\r\n    });\r\n\r\n    anchor.onclick = function () {\r\n      linkService.goToPage(id);\r\n      return false;\r\n    };\r\n\r\n    this.anchor = anchor;\r\n    var div = document.createElement(\"div\");\r\n    div.className = \"thumbnail\";\r\n    div.setAttribute(\"data-page-number\", this.id);\r\n    this.div = div;\r\n    var ring = document.createElement(\"div\");\r\n    ring.className = \"thumbnailSelectionRing\";\r\n    var borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH;\r\n    ring.style.width = this.canvasWidth + borderAdjustment + \"px\";\r\n    ring.style.height = this.canvasHeight + borderAdjustment + \"px\";\r\n    this.ring = ring;\r\n    div.appendChild(ring);\r\n    anchor.appendChild(div);\r\n    container.appendChild(anchor);\r\n  }\r\n\r\n  _createClass(PDFThumbnailView, [{\r\n    key: \"setPdfPage\",\r\n    value: function setPdfPage(pdfPage) {\r\n      this.pdfPage = pdfPage;\r\n      this.pdfPageRotate = pdfPage.rotate;\r\n      var totalRotation = (this.rotation + this.pdfPageRotate) % 360;\r\n      this.viewport = pdfPage.getViewport({\r\n        scale: 1,\r\n        rotation: totalRotation\r\n      });\r\n      this.reset();\r\n    }\r\n  }, {\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      this.cancelRendering();\r\n      this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;\r\n      this.pageWidth = this.viewport.width;\r\n      this.pageHeight = this.viewport.height;\r\n      this.pageRatio = this.pageWidth / this.pageHeight;\r\n      this.canvasHeight = this.canvasWidth / this.pageRatio | 0;\r\n      this.scale = this.canvasWidth / this.pageWidth;\r\n      this.div.removeAttribute(\"data-loaded\");\r\n      var ring = this.ring;\r\n      var childNodes = ring.childNodes;\r\n\r\n      for (var i = childNodes.length - 1; i >= 0; i--) {\r\n        ring.removeChild(childNodes[i]);\r\n      }\r\n\r\n      var borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH;\r\n      ring.style.width = this.canvasWidth + borderAdjustment + \"px\";\r\n      ring.style.height = this.canvasHeight + borderAdjustment + \"px\";\r\n\r\n      if (this.canvas) {\r\n        this.canvas.width = 0;\r\n        this.canvas.height = 0;\r\n        delete this.canvas;\r\n      }\r\n\r\n      if (this.image) {\r\n        this.image.removeAttribute(\"src\");\r\n        delete this.image;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"update\",\r\n    value: function update(rotation) {\r\n      if (typeof rotation !== \"undefined\") {\r\n        this.rotation = rotation;\r\n      }\r\n\r\n      var totalRotation = (this.rotation + this.pdfPageRotate) % 360;\r\n      this.viewport = this.viewport.clone({\r\n        scale: 1,\r\n        rotation: totalRotation\r\n      });\r\n      this.reset();\r\n    }\r\n  }, {\r\n    key: \"cancelRendering\",\r\n    value: function cancelRendering() {\r\n      if (this.renderTask) {\r\n        this.renderTask.cancel();\r\n        this.renderTask = null;\r\n      }\r\n\r\n      this.resume = null;\r\n    }\r\n  }, {\r\n    key: \"_getPageDrawContext\",\r\n    value: function _getPageDrawContext() {\r\n      var canvas = document.createElement(\"canvas\");\r\n      this.canvas = canvas;\r\n      canvas.mozOpaque = true;\r\n      var ctx = canvas.getContext(\"2d\", {\r\n        alpha: false\r\n      });\r\n      var outputScale = (0, _ui_utils.getOutputScale)(ctx);\r\n      canvas.width = this.canvasWidth * outputScale.sx | 0;\r\n      canvas.height = this.canvasHeight * outputScale.sy | 0;\r\n      canvas.style.width = this.canvasWidth + \"px\";\r\n      canvas.style.height = this.canvasHeight + \"px\";\r\n      var transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null;\r\n      return [ctx, transform];\r\n    }\r\n  }, {\r\n    key: \"_convertCanvasToImage\",\r\n    value: function _convertCanvasToImage() {\r\n      var _this = this;\r\n\r\n      if (!this.canvas) {\r\n        return;\r\n      }\r\n\r\n      if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {\r\n        return;\r\n      }\r\n\r\n      var className = \"thumbnailImage\";\r\n\r\n      if (this.disableCanvasToImageConversion) {\r\n        this.canvas.className = className;\r\n\r\n        this._thumbPageCanvas.then(function (msg) {\r\n          _this.canvas.setAttribute(\"aria-label\", msg);\r\n        });\r\n\r\n        this.div.setAttribute(\"data-loaded\", true);\r\n        this.ring.appendChild(this.canvas);\r\n        return;\r\n      }\r\n\r\n      var image = document.createElement(\"img\");\r\n      image.className = className;\r\n\r\n      this._thumbPageCanvas.then(function (msg) {\r\n        image.setAttribute(\"aria-label\", msg);\r\n      });\r\n\r\n      image.style.width = this.canvasWidth + \"px\";\r\n      image.style.height = this.canvasHeight + \"px\";\r\n      image.src = this.canvas.toDataURL();\r\n      this.image = image;\r\n      this.div.setAttribute(\"data-loaded\", true);\r\n      this.ring.appendChild(image);\r\n      this.canvas.width = 0;\r\n      this.canvas.height = 0;\r\n      delete this.canvas;\r\n    }\r\n  }, {\r\n    key: \"draw\",\r\n    value: function draw() {\r\n      var _this2 = this;\r\n\r\n      if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) {\r\n        console.error(\"Must be in new state before drawing\");\r\n        return Promise.resolve(undefined);\r\n      }\r\n\r\n      var pdfPage = this.pdfPage;\r\n\r\n      if (!pdfPage) {\r\n        this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;\r\n        return Promise.reject(new Error(\"pdfPage is not loaded\"));\r\n      }\r\n\r\n      this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;\r\n\r\n      var finishRenderTask = /*#__PURE__*/function () {\r\n        var _ref2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n          var error,\r\n              _args = arguments;\r\n          return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n            while (1) {\r\n              switch (_context.prev = _context.next) {\r\n                case 0:\r\n                  error = _args.length > 0 && _args[0] !== undefined ? _args[0] : null;\r\n\r\n                  if (renderTask === _this2.renderTask) {\r\n                    _this2.renderTask = null;\r\n                  }\r\n\r\n                  if (!(error instanceof _pdfjsLib.RenderingCancelledException)) {\r\n                    _context.next = 4;\r\n                    break;\r\n                  }\r\n\r\n                  return _context.abrupt(\"return\");\r\n\r\n                case 4:\r\n                  _this2.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;\r\n\r\n                  _this2._convertCanvasToImage();\r\n\r\n                  if (!error) {\r\n                    _context.next = 8;\r\n                    break;\r\n                  }\r\n\r\n                  throw error;\r\n\r\n                case 8:\r\n                case \"end\":\r\n                  return _context.stop();\r\n              }\r\n            }\r\n          }, _callee);\r\n        }));\r\n\r\n        return function finishRenderTask() {\r\n          return _ref2.apply(this, arguments);\r\n        };\r\n      }();\r\n\r\n      var _this$_getPageDrawCon = this._getPageDrawContext(),\r\n          _this$_getPageDrawCon2 = _slicedToArray(_this$_getPageDrawCon, 2),\r\n          ctx = _this$_getPageDrawCon2[0],\r\n          transform = _this$_getPageDrawCon2[1];\r\n\r\n      var drawViewport = this.viewport.clone({\r\n        scale: this.scale\r\n      });\r\n\r\n      var renderContinueCallback = function renderContinueCallback(cont) {\r\n        if (!_this2.renderingQueue.isHighestPriority(_this2)) {\r\n          _this2.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED;\r\n\r\n          _this2.resume = function () {\r\n            _this2.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;\r\n            cont();\r\n          };\r\n\r\n          return;\r\n        }\r\n\r\n        cont();\r\n      };\r\n\r\n      var renderContext = {\r\n        canvasContext: ctx,\r\n        transform: transform,\r\n        viewport: drawViewport,\r\n        optionalContentConfigPromise: this._optionalContentConfigPromise\r\n      };\r\n      var renderTask = this.renderTask = pdfPage.render(renderContext);\r\n      renderTask.onContinue = renderContinueCallback;\r\n      var resultPromise = renderTask.promise.then(function () {\r\n        finishRenderTask(null);\r\n      }, function (error) {\r\n        finishRenderTask(error);\r\n      });\r\n      resultPromise[\"finally\"](function () {\r\n        var _this2$pdfPage;\r\n\r\n        var pageCached = _this2.linkService.isPageCached(_this2.id);\r\n\r\n        if (pageCached) {\r\n          return;\r\n        }\r\n\r\n        (_this2$pdfPage = _this2.pdfPage) === null || _this2$pdfPage === void 0 ? void 0 : _this2$pdfPage.cleanup();\r\n      });\r\n      return resultPromise;\r\n    }\r\n  }, {\r\n    key: \"setImage\",\r\n    value: function setImage(pageView) {\r\n      if (this._checkSetImageDisabled()) {\r\n        return;\r\n      }\r\n\r\n      if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) {\r\n        return;\r\n      }\r\n\r\n      var img = pageView.canvas;\r\n\r\n      if (!img) {\r\n        return;\r\n      }\r\n\r\n      if (!this.pdfPage) {\r\n        this.setPdfPage(pageView.pdfPage);\r\n      }\r\n\r\n      this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;\r\n\r\n      var _this$_getPageDrawCon3 = this._getPageDrawContext(),\r\n          _this$_getPageDrawCon4 = _slicedToArray(_this$_getPageDrawCon3, 1),\r\n          ctx = _this$_getPageDrawCon4[0];\r\n\r\n      var canvas = ctx.canvas;\r\n\r\n      if (img.width <= 2 * canvas.width) {\r\n        ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height);\r\n\r\n        this._convertCanvasToImage();\r\n\r\n        return;\r\n      }\r\n\r\n      var reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS;\r\n      var reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS;\r\n      var reducedImage = TempImageFactory.getCanvas(reducedWidth, reducedHeight);\r\n      var reducedImageCtx = reducedImage.getContext(\"2d\");\r\n\r\n      while (reducedWidth > img.width || reducedHeight > img.height) {\r\n        reducedWidth >>= 1;\r\n        reducedHeight >>= 1;\r\n      }\r\n\r\n      reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight);\r\n\r\n      while (reducedWidth > 2 * canvas.width) {\r\n        reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1);\r\n        reducedWidth >>= 1;\r\n        reducedHeight >>= 1;\r\n      }\r\n\r\n      ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height);\r\n\r\n      this._convertCanvasToImage();\r\n    }\r\n  }, {\r\n    key: \"_thumbPageTitle\",\r\n    get: function get() {\r\n      var _this$pageLabel;\r\n\r\n      return this.l10n.get(\"thumb_page_title\", {\r\n        page: (_this$pageLabel = this.pageLabel) !== null && _this$pageLabel !== void 0 ? _this$pageLabel : this.id\r\n      }, \"Page {{page}}\");\r\n    }\r\n  }, {\r\n    key: \"_thumbPageCanvas\",\r\n    get: function get() {\r\n      var _this$pageLabel2;\r\n\r\n      return this.l10n.get(\"thumb_page_canvas\", {\r\n        page: (_this$pageLabel2 = this.pageLabel) !== null && _this$pageLabel2 !== void 0 ? _this$pageLabel2 : this.id\r\n      }, \"Thumbnail of Page {{page}}\");\r\n    }\r\n  }, {\r\n    key: \"setPageLabel\",\r\n    value: function setPageLabel(label) {\r\n      var _this3 = this;\r\n\r\n      this.pageLabel = typeof label === \"string\" ? label : null;\r\n\r\n      this._thumbPageTitle.then(function (msg) {\r\n        _this3.anchor.title = msg;\r\n      });\r\n\r\n      if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {\r\n        return;\r\n      }\r\n\r\n      this._thumbPageCanvas.then(function (msg) {\r\n        if (_this3.image) {\r\n          _this3.image.setAttribute(\"aria-label\", msg);\r\n        } else if (_this3.disableCanvasToImageConversion && _this3.canvas) {\r\n          _this3.canvas.setAttribute(\"aria-label\", msg);\r\n        }\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return PDFThumbnailView;\r\n}();\r\n\r\nexports.PDFThumbnailView = PDFThumbnailView;\r\n\r\n/***/ }),\r\n/* 28 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFViewer = void 0;\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nvar _base_viewer = __webpack_require__(29);\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\r\n\r\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nvar PDFViewer = /*#__PURE__*/function (_BaseViewer) {\r\n  _inherits(PDFViewer, _BaseViewer);\r\n\r\n  var _super = _createSuper(PDFViewer);\r\n\r\n  function PDFViewer() {\r\n    _classCallCheck(this, PDFViewer);\r\n\r\n    return _super.apply(this, arguments);\r\n  }\r\n\r\n  _createClass(PDFViewer, [{\r\n    key: \"_viewerElement\",\r\n    get: function get() {\r\n      return (0, _pdfjsLib.shadow)(this, \"_viewerElement\", this.viewer);\r\n    }\r\n  }, {\r\n    key: \"_scrollIntoView\",\r\n    value: function _scrollIntoView(_ref) {\r\n      var pageDiv = _ref.pageDiv,\r\n          _ref$pageSpot = _ref.pageSpot,\r\n          pageSpot = _ref$pageSpot === void 0 ? null : _ref$pageSpot,\r\n          _ref$pageNumber = _ref.pageNumber,\r\n          pageNumber = _ref$pageNumber === void 0 ? null : _ref$pageNumber;\r\n\r\n      if (!pageSpot && !this.isInPresentationMode) {\r\n        var left = pageDiv.offsetLeft + pageDiv.clientLeft;\r\n        var right = left + pageDiv.clientWidth;\r\n        var _this$container = this.container,\r\n            scrollLeft = _this$container.scrollLeft,\r\n            clientWidth = _this$container.clientWidth;\r\n\r\n        if (this._isScrollModeHorizontal || left < scrollLeft || right > scrollLeft + clientWidth) {\r\n          pageSpot = {\r\n            left: 0,\r\n            top: 0\r\n          };\r\n        }\r\n      }\r\n\r\n      _get(_getPrototypeOf(PDFViewer.prototype), \"_scrollIntoView\", this).call(this, {\r\n        pageDiv: pageDiv,\r\n        pageSpot: pageSpot,\r\n        pageNumber: pageNumber\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_getVisiblePages\",\r\n    value: function _getVisiblePages() {\r\n      if (this.isInPresentationMode) {\r\n        return this._getCurrentVisiblePage();\r\n      }\r\n\r\n      return _get(_getPrototypeOf(PDFViewer.prototype), \"_getVisiblePages\", this).call(this);\r\n    }\r\n  }, {\r\n    key: \"_updateHelper\",\r\n    value: function _updateHelper(visiblePages) {\r\n      if (this.isInPresentationMode) {\r\n        return;\r\n      }\r\n\r\n      var currentId = this._currentPageNumber;\r\n      var stillFullyVisible = false;\r\n\r\n      var _iterator = _createForOfIteratorHelper(visiblePages),\r\n          _step;\r\n\r\n      try {\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          var page = _step.value;\r\n\r\n          if (page.percent < 100) {\r\n            break;\r\n          }\r\n\r\n          if (page.id === currentId && this._scrollMode === _ui_utils.ScrollMode.VERTICAL && this._spreadMode === _ui_utils.SpreadMode.NONE) {\r\n            stillFullyVisible = true;\r\n            break;\r\n          }\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n\r\n      if (!stillFullyVisible) {\r\n        currentId = visiblePages[0].id;\r\n      }\r\n\r\n      this._setCurrentPageNumber(currentId);\r\n    }\r\n  }]);\r\n\r\n  return PDFViewer;\r\n}(_base_viewer.BaseViewer);\r\n\r\nexports.PDFViewer = PDFViewer;\r\n\r\n/***/ }),\r\n/* 29 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.BaseViewer = void 0;\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nvar _pdf_rendering_queue = __webpack_require__(10);\r\n\r\nvar _annotation_layer_builder = __webpack_require__(30);\r\n\r\nvar _pdf_page_view = __webpack_require__(31);\r\n\r\nvar _pdf_link_service = __webpack_require__(21);\r\n\r\nvar _text_layer_builder = __webpack_require__(32);\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar DEFAULT_CACHE_SIZE = 10;\r\n\r\nfunction PDFPageViewBuffer(size) {\r\n  var data = [];\r\n\r\n  this.push = function (view) {\r\n    var i = data.indexOf(view);\r\n\r\n    if (i >= 0) {\r\n      data.splice(i, 1);\r\n    }\r\n\r\n    data.push(view);\r\n\r\n    if (data.length > size) {\r\n      data.shift().destroy();\r\n    }\r\n  };\r\n\r\n  this.resize = function (newSize, pagesToKeep) {\r\n    size = newSize;\r\n\r\n    if (pagesToKeep) {\r\n      var pageIdsToKeep = new Set();\r\n\r\n      for (var i = 0, iMax = pagesToKeep.length; i < iMax; ++i) {\r\n        pageIdsToKeep.add(pagesToKeep[i].id);\r\n      }\r\n\r\n      (0, _ui_utils.moveToEndOfArray)(data, function (page) {\r\n        return pageIdsToKeep.has(page.id);\r\n      });\r\n    }\r\n\r\n    while (data.length > size) {\r\n      data.shift().destroy();\r\n    }\r\n  };\r\n\r\n  this.has = function (view) {\r\n    return data.includes(view);\r\n  };\r\n}\r\n\r\nfunction isSameScale(oldScale, newScale) {\r\n  if (newScale === oldScale) {\r\n    return true;\r\n  }\r\n\r\n  if (Math.abs(newScale - oldScale) < 1e-15) {\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nvar BaseViewer = /*#__PURE__*/function () {\r\n  function BaseViewer(options) {\r\n    var _this$container,\r\n        _this$viewer,\r\n        _this = this;\r\n\r\n    _classCallCheck(this, BaseViewer);\r\n\r\n    if (this.constructor === BaseViewer) {\r\n      throw new Error(\"Cannot initialize BaseViewer.\");\r\n    }\r\n\r\n    var viewerVersion = '2.8.57';\r\n\r\n    if (_pdfjsLib.version !== viewerVersion) {\r\n      throw new Error(\"The API version \\\"\".concat(_pdfjsLib.version, \"\\\" does not match the Viewer version \\\"\").concat(viewerVersion, \"\\\".\"));\r\n    }\r\n\r\n    this._name = this.constructor.name;\r\n    this.container = options.container;\r\n    this.viewer = options.viewer || options.container.firstElementChild;\r\n\r\n    if (!(((_this$container = this.container) === null || _this$container === void 0 ? void 0 : _this$container.tagName.toUpperCase()) === \"DIV\" && ((_this$viewer = this.viewer) === null || _this$viewer === void 0 ? void 0 : _this$viewer.tagName.toUpperCase()) === \"DIV\")) {\r\n      throw new Error(\"Invalid `container` and/or `viewer` option.\");\r\n    }\r\n\r\n    if (getComputedStyle(this.container).position !== \"absolute\") {\r\n      throw new Error(\"The `container` must be absolutely positioned.\");\r\n    }\r\n\r\n    this.eventBus = options.eventBus;\r\n    this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService();\r\n    this.downloadManager = options.downloadManager || null;\r\n    this.findController = options.findController || null;\r\n    this.removePageBorders = options.removePageBorders || false;\r\n    this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE;\r\n    this.imageResourcesPath = options.imageResourcesPath || \"\";\r\n    this.renderInteractiveForms = typeof options.renderInteractiveForms === \"boolean\" ? options.renderInteractiveForms : true;\r\n    this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;\r\n    this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;\r\n    this.enableWebGL = options.enableWebGL || false;\r\n    this.useOnlyCssZoom = options.useOnlyCssZoom || false;\r\n    this.maxCanvasPixels = options.maxCanvasPixels;\r\n    this.l10n = options.l10n || _ui_utils.NullL10n;\r\n    this.enableScripting = options.enableScripting || false;\r\n    this._mouseState = options.mouseState || null;\r\n    this.defaultRenderingQueue = !options.renderingQueue;\r\n\r\n    if (this.defaultRenderingQueue) {\r\n      this.renderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();\r\n      this.renderingQueue.setViewer(this);\r\n    } else {\r\n      this.renderingQueue = options.renderingQueue;\r\n    }\r\n\r\n    this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this));\r\n    this.presentationModeState = _ui_utils.PresentationModeState.UNKNOWN;\r\n    this._onBeforeDraw = this._onAfterDraw = null;\r\n\r\n    this._resetView();\r\n\r\n    if (this.removePageBorders) {\r\n      this.viewer.classList.add(\"removePageBorders\");\r\n    }\r\n\r\n    Promise.resolve().then(function () {\r\n      _this.eventBus.dispatch(\"baseviewerinit\", {\r\n        source: _this\r\n      });\r\n    });\r\n  }\r\n\r\n  _createClass(BaseViewer, [{\r\n    key: \"pagesCount\",\r\n    get: function get() {\r\n      return this._pages.length;\r\n    }\r\n  }, {\r\n    key: \"getPageView\",\r\n    value: function getPageView(index) {\r\n      return this._pages[index];\r\n    }\r\n  }, {\r\n    key: \"pageViewsReady\",\r\n    get: function get() {\r\n      if (!this._pagesCapability.settled) {\r\n        return false;\r\n      }\r\n\r\n      return this._pages.every(function (pageView) {\r\n        return pageView === null || pageView === void 0 ? void 0 : pageView.pdfPage;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"currentPageNumber\",\r\n    get: function get() {\r\n      return this._currentPageNumber;\r\n    },\r\n    set: function set(val) {\r\n      if (!Number.isInteger(val)) {\r\n        throw new Error(\"Invalid page number.\");\r\n      }\r\n\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      if (!this._setCurrentPageNumber(val, true)) {\r\n        console.error(\"\".concat(this._name, \".currentPageNumber: \\\"\").concat(val, \"\\\" is not a valid page.\"));\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_setCurrentPageNumber\",\r\n    value: function _setCurrentPageNumber(val) {\r\n      var _this$_pageLabels, _this$_pageLabels2;\r\n\r\n      var resetCurrentPageView = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n\r\n      if (this._currentPageNumber === val) {\r\n        if (resetCurrentPageView) {\r\n          this._resetCurrentPageView();\r\n        }\r\n\r\n        return true;\r\n      }\r\n\r\n      if (!(0 < val && val <= this.pagesCount)) {\r\n        return false;\r\n      }\r\n\r\n      var previous = this._currentPageNumber;\r\n      this._currentPageNumber = val;\r\n      this.eventBus.dispatch(\"pagechanging\", {\r\n        source: this,\r\n        pageNumber: val,\r\n        pageLabel: (_this$_pageLabels = (_this$_pageLabels2 = this._pageLabels) === null || _this$_pageLabels2 === void 0 ? void 0 : _this$_pageLabels2[val - 1]) !== null && _this$_pageLabels !== void 0 ? _this$_pageLabels : null,\r\n        previous: previous\r\n      });\r\n\r\n      if (resetCurrentPageView) {\r\n        this._resetCurrentPageView();\r\n      }\r\n\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"currentPageLabel\",\r\n    get: function get() {\r\n      var _this$_pageLabels3, _this$_pageLabels4;\r\n\r\n      return (_this$_pageLabels3 = (_this$_pageLabels4 = this._pageLabels) === null || _this$_pageLabels4 === void 0 ? void 0 : _this$_pageLabels4[this._currentPageNumber - 1]) !== null && _this$_pageLabels3 !== void 0 ? _this$_pageLabels3 : null;\r\n    },\r\n    set: function set(val) {\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      var page = val | 0;\r\n\r\n      if (this._pageLabels) {\r\n        var i = this._pageLabels.indexOf(val);\r\n\r\n        if (i >= 0) {\r\n          page = i + 1;\r\n        }\r\n      }\r\n\r\n      if (!this._setCurrentPageNumber(page, true)) {\r\n        console.error(\"\".concat(this._name, \".currentPageLabel: \\\"\").concat(val, \"\\\" is not a valid page.\"));\r\n      }\r\n    }\r\n  }, {\r\n    key: \"currentScale\",\r\n    get: function get() {\r\n      return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE;\r\n    },\r\n    set: function set(val) {\r\n      if (isNaN(val)) {\r\n        throw new Error(\"Invalid numeric scale.\");\r\n      }\r\n\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      this._setScale(val, false);\r\n    }\r\n  }, {\r\n    key: \"currentScaleValue\",\r\n    get: function get() {\r\n      return this._currentScaleValue;\r\n    },\r\n    set: function set(val) {\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      this._setScale(val, false);\r\n    }\r\n  }, {\r\n    key: \"pagesRotation\",\r\n    get: function get() {\r\n      return this._pagesRotation;\r\n    },\r\n    set: function set(rotation) {\r\n      if (!(0, _ui_utils.isValidRotation)(rotation)) {\r\n        throw new Error(\"Invalid pages rotation angle.\");\r\n      }\r\n\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      if (this._pagesRotation === rotation) {\r\n        return;\r\n      }\r\n\r\n      this._pagesRotation = rotation;\r\n      var pageNumber = this._currentPageNumber;\r\n\r\n      for (var i = 0, ii = this._pages.length; i < ii; i++) {\r\n        var pageView = this._pages[i];\r\n        pageView.update(pageView.scale, rotation);\r\n      }\r\n\r\n      if (this._currentScaleValue) {\r\n        this._setScale(this._currentScaleValue, true);\r\n      }\r\n\r\n      this.eventBus.dispatch(\"rotationchanging\", {\r\n        source: this,\r\n        pagesRotation: rotation,\r\n        pageNumber: pageNumber\r\n      });\r\n\r\n      if (this.defaultRenderingQueue) {\r\n        this.update();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"firstPagePromise\",\r\n    get: function get() {\r\n      return this.pdfDocument ? this._firstPageCapability.promise : null;\r\n    }\r\n  }, {\r\n    key: \"onePageRendered\",\r\n    get: function get() {\r\n      return this.pdfDocument ? this._onePageRenderedCapability.promise : null;\r\n    }\r\n  }, {\r\n    key: \"pagesPromise\",\r\n    get: function get() {\r\n      return this.pdfDocument ? this._pagesCapability.promise : null;\r\n    }\r\n  }, {\r\n    key: \"_viewerElement\",\r\n    get: function get() {\r\n      throw new Error(\"Not implemented: _viewerElement\");\r\n    }\r\n  }, {\r\n    key: \"_onePageRenderedOrForceFetch\",\r\n    value: function _onePageRenderedOrForceFetch() {\r\n      if (!this.container.offsetParent || this._getVisiblePages().views.length === 0) {\r\n        return Promise.resolve();\r\n      }\r\n\r\n      return this._onePageRenderedCapability.promise;\r\n    }\r\n  }, {\r\n    key: \"setDocument\",\r\n    value: function setDocument(pdfDocument) {\r\n      var _this2 = this;\r\n\r\n      if (this.pdfDocument) {\r\n        this.eventBus.dispatch(\"pagesdestroy\", {\r\n          source: this\r\n        });\r\n\r\n        this._cancelRendering();\r\n\r\n        this._resetView();\r\n\r\n        if (this.findController) {\r\n          this.findController.setDocument(null);\r\n        }\r\n      }\r\n\r\n      this.pdfDocument = pdfDocument;\r\n\r\n      if (!pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      var pagesCount = pdfDocument.numPages;\r\n      var firstPagePromise = pdfDocument.getPage(1);\r\n      var optionalContentConfigPromise = pdfDocument.getOptionalContentConfig();\r\n\r\n      this._pagesCapability.promise.then(function () {\r\n        _this2.eventBus.dispatch(\"pagesloaded\", {\r\n          source: _this2,\r\n          pagesCount: pagesCount\r\n        });\r\n      });\r\n\r\n      this._onBeforeDraw = function (evt) {\r\n        var pageView = _this2._pages[evt.pageNumber - 1];\r\n\r\n        if (!pageView) {\r\n          return;\r\n        }\r\n\r\n        _this2._buffer.push(pageView);\r\n      };\r\n\r\n      this.eventBus._on(\"pagerender\", this._onBeforeDraw);\r\n\r\n      this._onAfterDraw = function (evt) {\r\n        if (evt.cssTransform || _this2._onePageRenderedCapability.settled) {\r\n          return;\r\n        }\r\n\r\n        _this2._onePageRenderedCapability.resolve();\r\n\r\n        _this2.eventBus._off(\"pagerendered\", _this2._onAfterDraw);\r\n\r\n        _this2._onAfterDraw = null;\r\n      };\r\n\r\n      this.eventBus._on(\"pagerendered\", this._onAfterDraw);\r\n\r\n      firstPagePromise.then(function (firstPdfPage) {\r\n        _this2._firstPageCapability.resolve(firstPdfPage);\r\n\r\n        _this2._optionalContentConfigPromise = optionalContentConfigPromise;\r\n        var scale = _this2.currentScale;\r\n        var viewport = firstPdfPage.getViewport({\r\n          scale: scale * _ui_utils.CSS_UNITS\r\n        });\r\n        var textLayerFactory = _this2.textLayerMode !== _ui_utils.TextLayerMode.DISABLE ? _this2 : null;\r\n\r\n        for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {\r\n          var pageView = new _pdf_page_view.PDFPageView({\r\n            container: _this2._viewerElement,\r\n            eventBus: _this2.eventBus,\r\n            id: pageNum,\r\n            scale: scale,\r\n            defaultViewport: viewport.clone(),\r\n            optionalContentConfigPromise: optionalContentConfigPromise,\r\n            renderingQueue: _this2.renderingQueue,\r\n            textLayerFactory: textLayerFactory,\r\n            textLayerMode: _this2.textLayerMode,\r\n            annotationLayerFactory: _this2,\r\n            imageResourcesPath: _this2.imageResourcesPath,\r\n            renderInteractiveForms: _this2.renderInteractiveForms,\r\n            renderer: _this2.renderer,\r\n            enableWebGL: _this2.enableWebGL,\r\n            useOnlyCssZoom: _this2.useOnlyCssZoom,\r\n            maxCanvasPixels: _this2.maxCanvasPixels,\r\n            l10n: _this2.l10n,\r\n            enableScripting: _this2.enableScripting\r\n          });\r\n\r\n          _this2._pages.push(pageView);\r\n        }\r\n\r\n        var firstPageView = _this2._pages[0];\r\n\r\n        if (firstPageView) {\r\n          firstPageView.setPdfPage(firstPdfPage);\r\n\r\n          _this2.linkService.cachePageRef(1, firstPdfPage.ref);\r\n        }\r\n\r\n        if (_this2._spreadMode !== _ui_utils.SpreadMode.NONE) {\r\n          _this2._updateSpreadMode();\r\n        }\r\n\r\n        _this2._onePageRenderedOrForceFetch().then(function () {\r\n          if (_this2.findController) {\r\n            _this2.findController.setDocument(pdfDocument);\r\n          }\r\n\r\n          if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > 7500) {\r\n            _this2._pagesCapability.resolve();\r\n\r\n            return;\r\n          }\r\n\r\n          var getPagesLeft = pagesCount - 1;\r\n\r\n          if (getPagesLeft <= 0) {\r\n            _this2._pagesCapability.resolve();\r\n\r\n            return;\r\n          }\r\n\r\n          var _loop = function _loop(_pageNum) {\r\n            pdfDocument.getPage(_pageNum).then(function (pdfPage) {\r\n              var pageView = _this2._pages[_pageNum - 1];\r\n\r\n              if (!pageView.pdfPage) {\r\n                pageView.setPdfPage(pdfPage);\r\n              }\r\n\r\n              _this2.linkService.cachePageRef(_pageNum, pdfPage.ref);\r\n\r\n              if (--getPagesLeft === 0) {\r\n                _this2._pagesCapability.resolve();\r\n              }\r\n            }, function (reason) {\r\n              console.error(\"Unable to get page \".concat(_pageNum, \" to initialize viewer\"), reason);\r\n\r\n              if (--getPagesLeft === 0) {\r\n                _this2._pagesCapability.resolve();\r\n              }\r\n            });\r\n          };\r\n\r\n          for (var _pageNum = 2; _pageNum <= pagesCount; ++_pageNum) {\r\n            _loop(_pageNum);\r\n          }\r\n        });\r\n\r\n        _this2.eventBus.dispatch(\"pagesinit\", {\r\n          source: _this2\r\n        });\r\n\r\n        if (_this2.defaultRenderingQueue) {\r\n          _this2.update();\r\n        }\r\n      })[\"catch\"](function (reason) {\r\n        console.error(\"Unable to initialize viewer\", reason);\r\n      });\r\n    }\r\n  }, {\r\n    key: \"setPageLabels\",\r\n    value: function setPageLabels(labels) {\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      if (!labels) {\r\n        this._pageLabels = null;\r\n      } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {\r\n        this._pageLabels = null;\r\n        console.error(\"\".concat(this._name, \".setPageLabels: Invalid page labels.\"));\r\n      } else {\r\n        this._pageLabels = labels;\r\n      }\r\n\r\n      for (var i = 0, ii = this._pages.length; i < ii; i++) {\r\n        var _this$_pageLabels$i, _this$_pageLabels5;\r\n\r\n        this._pages[i].setPageLabel((_this$_pageLabels$i = (_this$_pageLabels5 = this._pageLabels) === null || _this$_pageLabels5 === void 0 ? void 0 : _this$_pageLabels5[i]) !== null && _this$_pageLabels$i !== void 0 ? _this$_pageLabels$i : null);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_resetView\",\r\n    value: function _resetView() {\r\n      this._pages = [];\r\n      this._currentPageNumber = 1;\r\n      this._currentScale = _ui_utils.UNKNOWN_SCALE;\r\n      this._currentScaleValue = null;\r\n      this._pageLabels = null;\r\n      this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);\r\n      this._location = null;\r\n      this._pagesRotation = 0;\r\n      this._optionalContentConfigPromise = null;\r\n      this._pagesRequests = new WeakMap();\r\n      this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)();\r\n      this._onePageRenderedCapability = (0, _pdfjsLib.createPromiseCapability)();\r\n      this._pagesCapability = (0, _pdfjsLib.createPromiseCapability)();\r\n      this._scrollMode = _ui_utils.ScrollMode.VERTICAL;\r\n      this._spreadMode = _ui_utils.SpreadMode.NONE;\r\n\r\n      if (this._onBeforeDraw) {\r\n        this.eventBus._off(\"pagerender\", this._onBeforeDraw);\r\n\r\n        this._onBeforeDraw = null;\r\n      }\r\n\r\n      if (this._onAfterDraw) {\r\n        this.eventBus._off(\"pagerendered\", this._onAfterDraw);\r\n\r\n        this._onAfterDraw = null;\r\n      }\r\n\r\n      this._resetScriptingEvents();\r\n\r\n      this.viewer.textContent = \"\";\r\n\r\n      this._updateScrollMode();\r\n    }\r\n  }, {\r\n    key: \"_scrollUpdate\",\r\n    value: function _scrollUpdate() {\r\n      if (this.pagesCount === 0) {\r\n        return;\r\n      }\r\n\r\n      this.update();\r\n    }\r\n  }, {\r\n    key: \"_scrollIntoView\",\r\n    value: function _scrollIntoView(_ref) {\r\n      var pageDiv = _ref.pageDiv,\r\n          _ref$pageSpot = _ref.pageSpot,\r\n          pageSpot = _ref$pageSpot === void 0 ? null : _ref$pageSpot,\r\n          _ref$pageNumber = _ref.pageNumber,\r\n          pageNumber = _ref$pageNumber === void 0 ? null : _ref$pageNumber;\r\n      (0, _ui_utils.scrollIntoView)(pageDiv, pageSpot);\r\n    }\r\n  }, {\r\n    key: \"_setScaleUpdatePages\",\r\n    value: function _setScaleUpdatePages(newScale, newValue) {\r\n      var noScroll = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\r\n      var preset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\r\n      this._currentScaleValue = newValue.toString();\r\n\r\n      if (isSameScale(this._currentScale, newScale)) {\r\n        if (preset) {\r\n          this.eventBus.dispatch(\"scalechanging\", {\r\n            source: this,\r\n            scale: newScale,\r\n            presetValue: newValue\r\n          });\r\n        }\r\n\r\n        return;\r\n      }\r\n\r\n      for (var i = 0, ii = this._pages.length; i < ii; i++) {\r\n        this._pages[i].update(newScale);\r\n      }\r\n\r\n      this._currentScale = newScale;\r\n\r\n      if (!noScroll) {\r\n        var page = this._currentPageNumber,\r\n            dest;\r\n\r\n        if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) {\r\n          page = this._location.pageNumber;\r\n          dest = [null, {\r\n            name: \"XYZ\"\r\n          }, this._location.left, this._location.top, null];\r\n        }\r\n\r\n        this.scrollPageIntoView({\r\n          pageNumber: page,\r\n          destArray: dest,\r\n          allowNegativeOffset: true\r\n        });\r\n      }\r\n\r\n      this.eventBus.dispatch(\"scalechanging\", {\r\n        source: this,\r\n        scale: newScale,\r\n        presetValue: preset ? newValue : undefined\r\n      });\r\n\r\n      if (this.defaultRenderingQueue) {\r\n        this.update();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_pageWidthScaleFactor\",\r\n    get: function get() {\r\n      if (this.spreadMode !== _ui_utils.SpreadMode.NONE && this.scrollMode !== _ui_utils.ScrollMode.HORIZONTAL && !this.isInPresentationMode) {\r\n        return 2;\r\n      }\r\n\r\n      return 1;\r\n    }\r\n  }, {\r\n    key: \"_setScale\",\r\n    value: function _setScale(value) {\r\n      var noScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      var scale = parseFloat(value);\r\n\r\n      if (scale > 0) {\r\n        this._setScaleUpdatePages(scale, value, noScroll, false);\r\n      } else {\r\n        var currentPage = this._pages[this._currentPageNumber - 1];\r\n\r\n        if (!currentPage) {\r\n          return;\r\n        }\r\n\r\n        var noPadding = this.isInPresentationMode || this.removePageBorders;\r\n        var hPadding = noPadding ? 0 : _ui_utils.SCROLLBAR_PADDING;\r\n        var vPadding = noPadding ? 0 : _ui_utils.VERTICAL_PADDING;\r\n\r\n        if (!noPadding && this._isScrollModeHorizontal) {\r\n          var _ref2 = [vPadding, hPadding];\r\n          hPadding = _ref2[0];\r\n          vPadding = _ref2[1];\r\n        }\r\n\r\n        var pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale / this._pageWidthScaleFactor;\r\n        var pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale;\r\n\r\n        switch (value) {\r\n          case \"page-actual\":\r\n            scale = 1;\r\n            break;\r\n\r\n          case \"page-width\":\r\n            scale = pageWidthScale;\r\n            break;\r\n\r\n          case \"page-height\":\r\n            scale = pageHeightScale;\r\n            break;\r\n\r\n          case \"page-fit\":\r\n            scale = Math.min(pageWidthScale, pageHeightScale);\r\n            break;\r\n\r\n          case \"auto\":\r\n            var horizontalScale = (0, _ui_utils.isPortraitOrientation)(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale);\r\n            scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale);\r\n            break;\r\n\r\n          default:\r\n            console.error(\"\".concat(this._name, \"._setScale: \\\"\").concat(value, \"\\\" is an unknown zoom value.\"));\r\n            return;\r\n        }\r\n\r\n        this._setScaleUpdatePages(scale, value, noScroll, true);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_resetCurrentPageView\",\r\n    value: function _resetCurrentPageView() {\r\n      if (this.isInPresentationMode) {\r\n        this._setScale(this._currentScaleValue, true);\r\n      }\r\n\r\n      var pageView = this._pages[this._currentPageNumber - 1];\r\n\r\n      this._scrollIntoView({\r\n        pageDiv: pageView.div\r\n      });\r\n    }\r\n  }, {\r\n    key: \"pageLabelToPageNumber\",\r\n    value: function pageLabelToPageNumber(label) {\r\n      if (!this._pageLabels) {\r\n        return null;\r\n      }\r\n\r\n      var i = this._pageLabels.indexOf(label);\r\n\r\n      if (i < 0) {\r\n        return null;\r\n      }\r\n\r\n      return i + 1;\r\n    }\r\n  }, {\r\n    key: \"scrollPageIntoView\",\r\n    value: function scrollPageIntoView(_ref3) {\r\n      var pageNumber = _ref3.pageNumber,\r\n          _ref3$destArray = _ref3.destArray,\r\n          destArray = _ref3$destArray === void 0 ? null : _ref3$destArray,\r\n          _ref3$allowNegativeOf = _ref3.allowNegativeOffset,\r\n          allowNegativeOffset = _ref3$allowNegativeOf === void 0 ? false : _ref3$allowNegativeOf,\r\n          _ref3$ignoreDestinati = _ref3.ignoreDestinationZoom,\r\n          ignoreDestinationZoom = _ref3$ignoreDestinati === void 0 ? false : _ref3$ignoreDestinati;\r\n\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      var pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1];\r\n\r\n      if (!pageView) {\r\n        console.error(\"\".concat(this._name, \".scrollPageIntoView: \") + \"\\\"\".concat(pageNumber, \"\\\" is not a valid pageNumber parameter.\"));\r\n        return;\r\n      }\r\n\r\n      if (this.isInPresentationMode || !destArray) {\r\n        this._setCurrentPageNumber(pageNumber, true);\r\n\r\n        return;\r\n      }\r\n\r\n      var x = 0,\r\n          y = 0;\r\n      var width = 0,\r\n          height = 0,\r\n          widthScale,\r\n          heightScale;\r\n      var changeOrientation = pageView.rotation % 180 !== 0;\r\n      var pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _ui_utils.CSS_UNITS;\r\n      var pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _ui_utils.CSS_UNITS;\r\n      var scale = 0;\r\n\r\n      switch (destArray[1].name) {\r\n        case \"XYZ\":\r\n          x = destArray[2];\r\n          y = destArray[3];\r\n          scale = destArray[4];\r\n          x = x !== null ? x : 0;\r\n          y = y !== null ? y : pageHeight;\r\n          break;\r\n\r\n        case \"Fit\":\r\n        case \"FitB\":\r\n          scale = \"page-fit\";\r\n          break;\r\n\r\n        case \"FitH\":\r\n        case \"FitBH\":\r\n          y = destArray[2];\r\n          scale = \"page-width\";\r\n\r\n          if (y === null && this._location) {\r\n            x = this._location.left;\r\n            y = this._location.top;\r\n          } else if (typeof y !== \"number\") {\r\n            y = pageHeight;\r\n          }\r\n\r\n          break;\r\n\r\n        case \"FitV\":\r\n        case \"FitBV\":\r\n          x = destArray[2];\r\n          width = pageWidth;\r\n          height = pageHeight;\r\n          scale = \"page-height\";\r\n          break;\r\n\r\n        case \"FitR\":\r\n          x = destArray[2];\r\n          y = destArray[3];\r\n          width = destArray[4] - x;\r\n          height = destArray[5] - y;\r\n          var hPadding = this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING;\r\n          var vPadding = this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING;\r\n          widthScale = (this.container.clientWidth - hPadding) / width / _ui_utils.CSS_UNITS;\r\n          heightScale = (this.container.clientHeight - vPadding) / height / _ui_utils.CSS_UNITS;\r\n          scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));\r\n          break;\r\n\r\n        default:\r\n          console.error(\"\".concat(this._name, \".scrollPageIntoView: \") + \"\\\"\".concat(destArray[1].name, \"\\\" is not a valid destination type.\"));\r\n          return;\r\n      }\r\n\r\n      if (!ignoreDestinationZoom) {\r\n        if (scale && scale !== this._currentScale) {\r\n          this.currentScaleValue = scale;\r\n        } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) {\r\n          this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;\r\n        }\r\n      }\r\n\r\n      if (scale === \"page-fit\" && !destArray[4]) {\r\n        this._scrollIntoView({\r\n          pageDiv: pageView.div,\r\n          pageNumber: pageNumber\r\n        });\r\n\r\n        return;\r\n      }\r\n\r\n      var boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)];\r\n      var left = Math.min(boundingRect[0][0], boundingRect[1][0]);\r\n      var top = Math.min(boundingRect[0][1], boundingRect[1][1]);\r\n\r\n      if (!allowNegativeOffset) {\r\n        left = Math.max(left, 0);\r\n        top = Math.max(top, 0);\r\n      }\r\n\r\n      this._scrollIntoView({\r\n        pageDiv: pageView.div,\r\n        pageSpot: {\r\n          left: left,\r\n          top: top\r\n        },\r\n        pageNumber: pageNumber\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_updateLocation\",\r\n    value: function _updateLocation(firstPage) {\r\n      var currentScale = this._currentScale;\r\n      var currentScaleValue = this._currentScaleValue;\r\n      var normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue;\r\n      var pageNumber = firstPage.id;\r\n      var pdfOpenParams = \"#page=\" + pageNumber;\r\n      pdfOpenParams += \"&zoom=\" + normalizedScaleValue;\r\n      var currentPageView = this._pages[pageNumber - 1];\r\n      var container = this.container;\r\n      var topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y);\r\n      var intLeft = Math.round(topLeft[0]);\r\n      var intTop = Math.round(topLeft[1]);\r\n      pdfOpenParams += \",\" + intLeft + \",\" + intTop;\r\n      this._location = {\r\n        pageNumber: pageNumber,\r\n        scale: normalizedScaleValue,\r\n        top: intTop,\r\n        left: intLeft,\r\n        rotation: this._pagesRotation,\r\n        pdfOpenParams: pdfOpenParams\r\n      };\r\n    }\r\n  }, {\r\n    key: \"_updateHelper\",\r\n    value: function _updateHelper(visiblePages) {\r\n      throw new Error(\"Not implemented: _updateHelper\");\r\n    }\r\n  }, {\r\n    key: \"update\",\r\n    value: function update() {\r\n      var visible = this._getVisiblePages();\r\n\r\n      var visiblePages = visible.views,\r\n          numVisiblePages = visiblePages.length;\r\n\r\n      if (numVisiblePages === 0) {\r\n        return;\r\n      }\r\n\r\n      var newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1);\r\n\r\n      this._buffer.resize(newCacheSize, visiblePages);\r\n\r\n      this.renderingQueue.renderHighestPriority(visible);\r\n\r\n      this._updateHelper(visiblePages);\r\n\r\n      this._updateLocation(visible.first);\r\n\r\n      this.eventBus.dispatch(\"updateviewarea\", {\r\n        source: this,\r\n        location: this._location\r\n      });\r\n    }\r\n  }, {\r\n    key: \"containsElement\",\r\n    value: function containsElement(element) {\r\n      return this.container.contains(element);\r\n    }\r\n  }, {\r\n    key: \"focus\",\r\n    value: function focus() {\r\n      this.container.focus();\r\n    }\r\n  }, {\r\n    key: \"_isScrollModeHorizontal\",\r\n    get: function get() {\r\n      return this.isInPresentationMode ? false : this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL;\r\n    }\r\n  }, {\r\n    key: \"_isContainerRtl\",\r\n    get: function get() {\r\n      return getComputedStyle(this.container).direction === \"rtl\";\r\n    }\r\n  }, {\r\n    key: \"isInPresentationMode\",\r\n    get: function get() {\r\n      return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN;\r\n    }\r\n  }, {\r\n    key: \"isChangingPresentationMode\",\r\n    get: function get() {\r\n      return this.presentationModeState === _ui_utils.PresentationModeState.CHANGING;\r\n    }\r\n  }, {\r\n    key: \"isHorizontalScrollbarEnabled\",\r\n    get: function get() {\r\n      return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth;\r\n    }\r\n  }, {\r\n    key: \"isVerticalScrollbarEnabled\",\r\n    get: function get() {\r\n      return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight;\r\n    }\r\n  }, {\r\n    key: \"_getCurrentVisiblePage\",\r\n    value: function _getCurrentVisiblePage() {\r\n      if (!this.pagesCount) {\r\n        return {\r\n          views: []\r\n        };\r\n      }\r\n\r\n      var pageView = this._pages[this._currentPageNumber - 1];\r\n      var element = pageView.div;\r\n      var view = {\r\n        id: pageView.id,\r\n        x: element.offsetLeft + element.clientLeft,\r\n        y: element.offsetTop + element.clientTop,\r\n        view: pageView\r\n      };\r\n      return {\r\n        first: view,\r\n        last: view,\r\n        views: [view]\r\n      };\r\n    }\r\n  }, {\r\n    key: \"_getVisiblePages\",\r\n    value: function _getVisiblePages() {\r\n      return (0, _ui_utils.getVisibleElements)({\r\n        scrollEl: this.container,\r\n        views: this._pages,\r\n        sortByVisibility: true,\r\n        horizontal: this._isScrollModeHorizontal,\r\n        rtl: this._isScrollModeHorizontal && this._isContainerRtl\r\n      });\r\n    }\r\n  }, {\r\n    key: \"isPageVisible\",\r\n    value: function isPageVisible(pageNumber) {\r\n      if (!this.pdfDocument) {\r\n        return false;\r\n      }\r\n\r\n      if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {\r\n        console.error(\"\".concat(this._name, \".isPageVisible: \\\"\").concat(pageNumber, \"\\\" is not a valid page.\"));\r\n        return false;\r\n      }\r\n\r\n      return this._getVisiblePages().views.some(function (view) {\r\n        return view.id === pageNumber;\r\n      });\r\n    }\r\n  }, {\r\n    key: \"isPageCached\",\r\n    value: function isPageCached(pageNumber) {\r\n      if (!this.pdfDocument || !this._buffer) {\r\n        return false;\r\n      }\r\n\r\n      if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {\r\n        console.error(\"\".concat(this._name, \".isPageCached: \\\"\").concat(pageNumber, \"\\\" is not a valid page.\"));\r\n        return false;\r\n      }\r\n\r\n      var pageView = this._pages[pageNumber - 1];\r\n\r\n      if (!pageView) {\r\n        return false;\r\n      }\r\n\r\n      return this._buffer.has(pageView);\r\n    }\r\n  }, {\r\n    key: \"cleanup\",\r\n    value: function cleanup() {\r\n      for (var i = 0, ii = this._pages.length; i < ii; i++) {\r\n        if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {\r\n          this._pages[i].reset();\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_cancelRendering\",\r\n    value: function _cancelRendering() {\r\n      for (var i = 0, ii = this._pages.length; i < ii; i++) {\r\n        if (this._pages[i]) {\r\n          this._pages[i].cancelRendering();\r\n        }\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_ensurePdfPageLoaded\",\r\n    value: function _ensurePdfPageLoaded(pageView) {\r\n      var _this3 = this;\r\n\r\n      if (pageView.pdfPage) {\r\n        return Promise.resolve(pageView.pdfPage);\r\n      }\r\n\r\n      if (this._pagesRequests.has(pageView)) {\r\n        return this._pagesRequests.get(pageView);\r\n      }\r\n\r\n      var promise = this.pdfDocument.getPage(pageView.id).then(function (pdfPage) {\r\n        if (!pageView.pdfPage) {\r\n          pageView.setPdfPage(pdfPage);\r\n        }\r\n\r\n        _this3._pagesRequests[\"delete\"](pageView);\r\n\r\n        return pdfPage;\r\n      })[\"catch\"](function (reason) {\r\n        console.error(\"Unable to get page for page view\", reason);\r\n\r\n        _this3._pagesRequests[\"delete\"](pageView);\r\n      });\r\n\r\n      this._pagesRequests.set(pageView, promise);\r\n\r\n      return promise;\r\n    }\r\n  }, {\r\n    key: \"forceRendering\",\r\n    value: function forceRendering(currentlyVisiblePages) {\r\n      var _this4 = this;\r\n\r\n      var visiblePages = currentlyVisiblePages || this._getVisiblePages();\r\n\r\n      var scrollAhead = this._isScrollModeHorizontal ? this.scroll.right : this.scroll.down;\r\n      var pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead);\r\n\r\n      if (pageView) {\r\n        this._ensurePdfPageLoaded(pageView).then(function () {\r\n          _this4.renderingQueue.renderView(pageView);\r\n        });\r\n\r\n        return true;\r\n      }\r\n\r\n      return false;\r\n    }\r\n  }, {\r\n    key: \"createTextLayerBuilder\",\r\n    value: function createTextLayerBuilder(textLayerDiv, pageIndex, viewport) {\r\n      var enhanceTextSelection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\r\n      var eventBus = arguments.length > 4 ? arguments[4] : undefined;\r\n      return new _text_layer_builder.TextLayerBuilder({\r\n        textLayerDiv: textLayerDiv,\r\n        eventBus: eventBus,\r\n        pageIndex: pageIndex,\r\n        viewport: viewport,\r\n        findController: this.isInPresentationMode ? null : this.findController,\r\n        enhanceTextSelection: this.isInPresentationMode ? false : enhanceTextSelection\r\n      });\r\n    }\r\n  }, {\r\n    key: \"createAnnotationLayerBuilder\",\r\n    value: function createAnnotationLayerBuilder(pageDiv, pdfPage) {\r\n      var _this$pdfDocument, _this$pdfDocument2;\r\n\r\n      var annotationStorage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\r\n      var imageResourcesPath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : \"\";\r\n      var renderInteractiveForms = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\r\n      var l10n = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : _ui_utils.NullL10n;\r\n      var enableScripting = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;\r\n      var hasJSActionsPromise = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;\r\n      var mouseState = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null;\r\n      return new _annotation_layer_builder.AnnotationLayerBuilder({\r\n        pageDiv: pageDiv,\r\n        pdfPage: pdfPage,\r\n        annotationStorage: annotationStorage || ((_this$pdfDocument = this.pdfDocument) === null || _this$pdfDocument === void 0 ? void 0 : _this$pdfDocument.annotationStorage),\r\n        imageResourcesPath: imageResourcesPath,\r\n        renderInteractiveForms: renderInteractiveForms,\r\n        linkService: this.linkService,\r\n        downloadManager: this.downloadManager,\r\n        l10n: l10n,\r\n        enableScripting: enableScripting,\r\n        hasJSActionsPromise: hasJSActionsPromise || ((_this$pdfDocument2 = this.pdfDocument) === null || _this$pdfDocument2 === void 0 ? void 0 : _this$pdfDocument2.hasJSActions()),\r\n        mouseState: mouseState || this._mouseState\r\n      });\r\n    }\r\n  }, {\r\n    key: \"hasEqualPageSizes\",\r\n    get: function get() {\r\n      var firstPageView = this._pages[0];\r\n\r\n      for (var i = 1, ii = this._pages.length; i < ii; ++i) {\r\n        var pageView = this._pages[i];\r\n\r\n        if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) {\r\n          return false;\r\n        }\r\n      }\r\n\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"getPagesOverview\",\r\n    value: function getPagesOverview() {\r\n      var pagesOverview = this._pages.map(function (pageView) {\r\n        var viewport = pageView.pdfPage.getViewport({\r\n          scale: 1\r\n        });\r\n        return {\r\n          width: viewport.width,\r\n          height: viewport.height,\r\n          rotation: viewport.rotation\r\n        };\r\n      });\r\n\r\n      if (!this.enablePrintAutoRotate) {\r\n        return pagesOverview;\r\n      }\r\n\r\n      return pagesOverview.map(function (size) {\r\n        if ((0, _ui_utils.isPortraitOrientation)(size)) {\r\n          return size;\r\n        }\r\n\r\n        return {\r\n          width: size.height,\r\n          height: size.width,\r\n          rotation: (size.rotation + 90) % 360\r\n        };\r\n      });\r\n    }\r\n  }, {\r\n    key: \"optionalContentConfigPromise\",\r\n    get: function get() {\r\n      if (!this.pdfDocument) {\r\n        return Promise.resolve(null);\r\n      }\r\n\r\n      if (!this._optionalContentConfigPromise) {\r\n        return this.pdfDocument.getOptionalContentConfig();\r\n      }\r\n\r\n      return this._optionalContentConfigPromise;\r\n    },\r\n    set: function set(promise) {\r\n      if (!(promise instanceof Promise)) {\r\n        throw new Error(\"Invalid optionalContentConfigPromise: \".concat(promise));\r\n      }\r\n\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      if (!this._optionalContentConfigPromise) {\r\n        return;\r\n      }\r\n\r\n      this._optionalContentConfigPromise = promise;\r\n\r\n      var _iterator = _createForOfIteratorHelper(this._pages),\r\n          _step;\r\n\r\n      try {\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          var pageView = _step.value;\r\n          pageView.update(pageView.scale, pageView.rotation, promise);\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n\r\n      this.update();\r\n      this.eventBus.dispatch(\"optionalcontentconfigchanged\", {\r\n        source: this,\r\n        promise: promise\r\n      });\r\n    }\r\n  }, {\r\n    key: \"scrollMode\",\r\n    get: function get() {\r\n      return this._scrollMode;\r\n    },\r\n    set: function set(mode) {\r\n      if (this._scrollMode === mode) {\r\n        return;\r\n      }\r\n\r\n      if (!(0, _ui_utils.isValidScrollMode)(mode)) {\r\n        throw new Error(\"Invalid scroll mode: \".concat(mode));\r\n      }\r\n\r\n      this._scrollMode = mode;\r\n      this.eventBus.dispatch(\"scrollmodechanged\", {\r\n        source: this,\r\n        mode: mode\r\n      });\r\n\r\n      this._updateScrollMode(this._currentPageNumber);\r\n    }\r\n  }, {\r\n    key: \"_updateScrollMode\",\r\n    value: function _updateScrollMode() {\r\n      var pageNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\r\n      var scrollMode = this._scrollMode,\r\n          viewer = this.viewer;\r\n      viewer.classList.toggle(\"scrollHorizontal\", scrollMode === _ui_utils.ScrollMode.HORIZONTAL);\r\n      viewer.classList.toggle(\"scrollWrapped\", scrollMode === _ui_utils.ScrollMode.WRAPPED);\r\n\r\n      if (!this.pdfDocument || !pageNumber) {\r\n        return;\r\n      }\r\n\r\n      if (this._currentScaleValue && isNaN(this._currentScaleValue)) {\r\n        this._setScale(this._currentScaleValue, true);\r\n      }\r\n\r\n      this._setCurrentPageNumber(pageNumber, true);\r\n\r\n      this.update();\r\n    }\r\n  }, {\r\n    key: \"spreadMode\",\r\n    get: function get() {\r\n      return this._spreadMode;\r\n    },\r\n    set: function set(mode) {\r\n      if (this._spreadMode === mode) {\r\n        return;\r\n      }\r\n\r\n      if (!(0, _ui_utils.isValidSpreadMode)(mode)) {\r\n        throw new Error(\"Invalid spread mode: \".concat(mode));\r\n      }\r\n\r\n      this._spreadMode = mode;\r\n      this.eventBus.dispatch(\"spreadmodechanged\", {\r\n        source: this,\r\n        mode: mode\r\n      });\r\n\r\n      this._updateSpreadMode(this._currentPageNumber);\r\n    }\r\n  }, {\r\n    key: \"_updateSpreadMode\",\r\n    value: function _updateSpreadMode() {\r\n      var pageNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\r\n\r\n      if (!this.pdfDocument) {\r\n        return;\r\n      }\r\n\r\n      var viewer = this.viewer,\r\n          pages = this._pages;\r\n      viewer.textContent = \"\";\r\n\r\n      if (this._spreadMode === _ui_utils.SpreadMode.NONE) {\r\n        for (var i = 0, iMax = pages.length; i < iMax; ++i) {\r\n          viewer.appendChild(pages[i].div);\r\n        }\r\n      } else {\r\n        var parity = this._spreadMode - 1;\r\n        var spread = null;\r\n\r\n        for (var _i = 0, _iMax = pages.length; _i < _iMax; ++_i) {\r\n          if (spread === null) {\r\n            spread = document.createElement(\"div\");\r\n            spread.className = \"spread\";\r\n            viewer.appendChild(spread);\r\n          } else if (_i % 2 === parity) {\r\n            spread = spread.cloneNode(false);\r\n            viewer.appendChild(spread);\r\n          }\r\n\r\n          spread.appendChild(pages[_i].div);\r\n        }\r\n      }\r\n\r\n      if (!pageNumber) {\r\n        return;\r\n      }\r\n\r\n      if (this._currentScaleValue && isNaN(this._currentScaleValue)) {\r\n        this._setScale(this._currentScaleValue, true);\r\n      }\r\n\r\n      this._setCurrentPageNumber(pageNumber, true);\r\n\r\n      this.update();\r\n    }\r\n  }, {\r\n    key: \"_getPageAdvance\",\r\n    value: function _getPageAdvance(currentPageNumber) {\r\n      var previous = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n\r\n      if (this.isInPresentationMode) {\r\n        return 1;\r\n      }\r\n\r\n      switch (this._scrollMode) {\r\n        case _ui_utils.ScrollMode.WRAPPED:\r\n          {\r\n            var _this$_getVisiblePage = this._getVisiblePages(),\r\n                views = _this$_getVisiblePage.views,\r\n                pageLayout = new Map();\r\n\r\n            var _iterator2 = _createForOfIteratorHelper(views),\r\n                _step2;\r\n\r\n            try {\r\n              for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n                var _step2$value = _step2.value,\r\n                    id = _step2$value.id,\r\n                    y = _step2$value.y,\r\n                    percent = _step2$value.percent,\r\n                    widthPercent = _step2$value.widthPercent;\r\n\r\n                if (percent === 0 || widthPercent < 100) {\r\n                  continue;\r\n                }\r\n\r\n                var yArray = pageLayout.get(y);\r\n\r\n                if (!yArray) {\r\n                  pageLayout.set(y, yArray || (yArray = []));\r\n                }\r\n\r\n                yArray.push(id);\r\n              }\r\n            } catch (err) {\r\n              _iterator2.e(err);\r\n            } finally {\r\n              _iterator2.f();\r\n            }\r\n\r\n            var _iterator3 = _createForOfIteratorHelper(pageLayout.values()),\r\n                _step3;\r\n\r\n            try {\r\n              for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n                var _yArray = _step3.value;\r\n\r\n                var currentIndex = _yArray.indexOf(currentPageNumber);\r\n\r\n                if (currentIndex === -1) {\r\n                  continue;\r\n                }\r\n\r\n                var numPages = _yArray.length;\r\n\r\n                if (numPages === 1) {\r\n                  break;\r\n                }\r\n\r\n                if (previous) {\r\n                  for (var i = currentIndex - 1, ii = 0; i >= ii; i--) {\r\n                    var currentId = _yArray[i],\r\n                        expectedId = _yArray[i + 1] - 1;\r\n\r\n                    if (currentId < expectedId) {\r\n                      return currentPageNumber - expectedId;\r\n                    }\r\n                  }\r\n                } else {\r\n                  for (var _i2 = currentIndex + 1, _ii = numPages; _i2 < _ii; _i2++) {\r\n                    var _currentId = _yArray[_i2],\r\n                        _expectedId = _yArray[_i2 - 1] + 1;\r\n\r\n                    if (_currentId > _expectedId) {\r\n                      return _expectedId - currentPageNumber;\r\n                    }\r\n                  }\r\n                }\r\n\r\n                if (previous) {\r\n                  var firstId = _yArray[0];\r\n\r\n                  if (firstId < currentPageNumber) {\r\n                    return currentPageNumber - firstId + 1;\r\n                  }\r\n                } else {\r\n                  var lastId = _yArray[numPages - 1];\r\n\r\n                  if (lastId > currentPageNumber) {\r\n                    return lastId - currentPageNumber + 1;\r\n                  }\r\n                }\r\n\r\n                break;\r\n              }\r\n            } catch (err) {\r\n              _iterator3.e(err);\r\n            } finally {\r\n              _iterator3.f();\r\n            }\r\n\r\n            break;\r\n          }\r\n\r\n        case _ui_utils.ScrollMode.HORIZONTAL:\r\n          {\r\n            break;\r\n          }\r\n\r\n        case _ui_utils.ScrollMode.VERTICAL:\r\n          {\r\n            if (this._spreadMode === _ui_utils.SpreadMode.NONE) {\r\n              break;\r\n            }\r\n\r\n            var parity = this._spreadMode - 1;\r\n\r\n            if (previous && currentPageNumber % 2 !== parity) {\r\n              break;\r\n            } else if (!previous && currentPageNumber % 2 === parity) {\r\n              break;\r\n            }\r\n\r\n            var _this$_getVisiblePage2 = this._getVisiblePages(),\r\n                _views = _this$_getVisiblePage2.views,\r\n                _expectedId2 = previous ? currentPageNumber - 1 : currentPageNumber + 1;\r\n\r\n            var _iterator4 = _createForOfIteratorHelper(_views),\r\n                _step4;\r\n\r\n            try {\r\n              for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\r\n                var _step4$value = _step4.value,\r\n                    _id = _step4$value.id,\r\n                    _percent = _step4$value.percent,\r\n                    _widthPercent = _step4$value.widthPercent;\r\n\r\n                if (_id !== _expectedId2) {\r\n                  continue;\r\n                }\r\n\r\n                if (_percent > 0 && _widthPercent === 100) {\r\n                  return 2;\r\n                }\r\n\r\n                break;\r\n              }\r\n            } catch (err) {\r\n              _iterator4.e(err);\r\n            } finally {\r\n              _iterator4.f();\r\n            }\r\n\r\n            break;\r\n          }\r\n      }\r\n\r\n      return 1;\r\n    }\r\n  }, {\r\n    key: \"nextPage\",\r\n    value: function nextPage() {\r\n      var currentPageNumber = this._currentPageNumber,\r\n          pagesCount = this.pagesCount;\r\n\r\n      if (currentPageNumber >= pagesCount) {\r\n        return false;\r\n      }\r\n\r\n      var advance = this._getPageAdvance(currentPageNumber, false) || 1;\r\n      this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount);\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"previousPage\",\r\n    value: function previousPage() {\r\n      var currentPageNumber = this._currentPageNumber;\r\n\r\n      if (currentPageNumber <= 1) {\r\n        return false;\r\n      }\r\n\r\n      var advance = this._getPageAdvance(currentPageNumber, true) || 1;\r\n      this.currentPageNumber = Math.max(currentPageNumber - advance, 1);\r\n      return true;\r\n    }\r\n  }, {\r\n    key: \"initializeScriptingEvents\",\r\n    value: function initializeScriptingEvents() {\r\n      var _this5 = this;\r\n\r\n      if (!this.enableScripting || this._pageOpenPendingSet) {\r\n        return;\r\n      }\r\n\r\n      var eventBus = this.eventBus,\r\n          pageOpenPendingSet = this._pageOpenPendingSet = new Set(),\r\n          scriptingEvents = this._scriptingEvents || (this._scriptingEvents = Object.create(null));\r\n\r\n      var dispatchPageClose = function dispatchPageClose(pageNumber) {\r\n        if (pageOpenPendingSet.has(pageNumber)) {\r\n          return;\r\n        }\r\n\r\n        eventBus.dispatch(\"pageclose\", {\r\n          source: _this5,\r\n          pageNumber: pageNumber\r\n        });\r\n      };\r\n\r\n      var dispatchPageOpen = function dispatchPageOpen(pageNumber) {\r\n        var pageView = _this5._pages[pageNumber - 1];\r\n\r\n        if ((pageView === null || pageView === void 0 ? void 0 : pageView.renderingState) === _pdf_rendering_queue.RenderingStates.FINISHED) {\r\n          var _pageView$pdfPage;\r\n\r\n          pageOpenPendingSet[\"delete\"](pageNumber);\r\n          eventBus.dispatch(\"pageopen\", {\r\n            source: _this5,\r\n            pageNumber: pageNumber,\r\n            actionsPromise: (_pageView$pdfPage = pageView.pdfPage) === null || _pageView$pdfPage === void 0 ? void 0 : _pageView$pdfPage.getJSActions()\r\n          });\r\n        } else {\r\n          pageOpenPendingSet.add(pageNumber);\r\n        }\r\n      };\r\n\r\n      scriptingEvents.onPageChanging = function (_ref4) {\r\n        var pageNumber = _ref4.pageNumber,\r\n            previous = _ref4.previous;\r\n\r\n        if (pageNumber === previous) {\r\n          return;\r\n        }\r\n\r\n        dispatchPageClose(previous);\r\n        dispatchPageOpen(pageNumber);\r\n      };\r\n\r\n      eventBus._on(\"pagechanging\", scriptingEvents.onPageChanging);\r\n\r\n      scriptingEvents.onPageRendered = function (_ref5) {\r\n        var pageNumber = _ref5.pageNumber;\r\n\r\n        if (!pageOpenPendingSet.has(pageNumber)) {\r\n          return;\r\n        }\r\n\r\n        if (pageNumber !== _this5._currentPageNumber) {\r\n          return;\r\n        }\r\n\r\n        dispatchPageOpen(pageNumber);\r\n      };\r\n\r\n      eventBus._on(\"pagerendered\", scriptingEvents.onPageRendered);\r\n\r\n      scriptingEvents.onPagesDestroy = function () {\r\n        dispatchPageClose(_this5._currentPageNumber);\r\n      };\r\n\r\n      eventBus._on(\"pagesdestroy\", scriptingEvents.onPagesDestroy);\r\n\r\n      dispatchPageOpen(this._currentPageNumber);\r\n    }\r\n  }, {\r\n    key: \"_resetScriptingEvents\",\r\n    value: function _resetScriptingEvents() {\r\n      if (!this.enableScripting || !this._pageOpenPendingSet) {\r\n        return;\r\n      }\r\n\r\n      var eventBus = this.eventBus,\r\n          scriptingEvents = this._scriptingEvents;\r\n\r\n      eventBus._off(\"pagechanging\", scriptingEvents.onPageChanging);\r\n\r\n      scriptingEvents.onPageChanging = null;\r\n\r\n      eventBus._off(\"pagerendered\", scriptingEvents.onPageRendered);\r\n\r\n      scriptingEvents.onPageRendered = null;\r\n\r\n      eventBus._off(\"pagesdestroy\", scriptingEvents.onPagesDestroy);\r\n\r\n      scriptingEvents.onPagesDestroy = null;\r\n      this._pageOpenPendingSet = null;\r\n    }\r\n  }]);\r\n\r\n  return BaseViewer;\r\n}();\r\n\r\nexports.BaseViewer = BaseViewer;\r\n\r\n/***/ }),\r\n/* 30 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.DefaultAnnotationLayerFactory = exports.AnnotationLayerBuilder = void 0;\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nvar _pdf_link_service = __webpack_require__(21);\r\n\r\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\r\n\r\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\r\n\r\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar AnnotationLayerBuilder = /*#__PURE__*/function () {\r\n  function AnnotationLayerBuilder(_ref) {\r\n    var pageDiv = _ref.pageDiv,\r\n        pdfPage = _ref.pdfPage,\r\n        linkService = _ref.linkService,\r\n        downloadManager = _ref.downloadManager,\r\n        _ref$annotationStorag = _ref.annotationStorage,\r\n        annotationStorage = _ref$annotationStorag === void 0 ? null : _ref$annotationStorag,\r\n        _ref$imageResourcesPa = _ref.imageResourcesPath,\r\n        imageResourcesPath = _ref$imageResourcesPa === void 0 ? \"\" : _ref$imageResourcesPa,\r\n        _ref$renderInteractiv = _ref.renderInteractiveForms,\r\n        renderInteractiveForms = _ref$renderInteractiv === void 0 ? true : _ref$renderInteractiv,\r\n        _ref$l10n = _ref.l10n,\r\n        l10n = _ref$l10n === void 0 ? _ui_utils.NullL10n : _ref$l10n,\r\n        _ref$enableScripting = _ref.enableScripting,\r\n        enableScripting = _ref$enableScripting === void 0 ? false : _ref$enableScripting,\r\n        _ref$hasJSActionsProm = _ref.hasJSActionsPromise,\r\n        hasJSActionsPromise = _ref$hasJSActionsProm === void 0 ? null : _ref$hasJSActionsProm,\r\n        _ref$mouseState = _ref.mouseState,\r\n        mouseState = _ref$mouseState === void 0 ? null : _ref$mouseState;\r\n\r\n    _classCallCheck(this, AnnotationLayerBuilder);\r\n\r\n    this.pageDiv = pageDiv;\r\n    this.pdfPage = pdfPage;\r\n    this.linkService = linkService;\r\n    this.downloadManager = downloadManager;\r\n    this.imageResourcesPath = imageResourcesPath;\r\n    this.renderInteractiveForms = renderInteractiveForms;\r\n    this.l10n = l10n;\r\n    this.annotationStorage = annotationStorage;\r\n    this.enableScripting = enableScripting;\r\n    this._hasJSActionsPromise = hasJSActionsPromise;\r\n    this._mouseState = mouseState;\r\n    this.div = null;\r\n    this._cancelled = false;\r\n  }\r\n\r\n  _createClass(AnnotationLayerBuilder, [{\r\n    key: \"render\",\r\n    value: function render(viewport) {\r\n      var _this = this;\r\n\r\n      var intent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"display\";\r\n      return Promise.all([this.pdfPage.getAnnotations({\r\n        intent: intent\r\n      }), this._hasJSActionsPromise]).then(function (_ref2) {\r\n        var _ref3 = _slicedToArray(_ref2, 2),\r\n            annotations = _ref3[0],\r\n            _ref3$ = _ref3[1],\r\n            hasJSActions = _ref3$ === void 0 ? false : _ref3$;\r\n\r\n        if (_this._cancelled) {\r\n          return;\r\n        }\r\n\r\n        if (annotations.length === 0) {\r\n          return;\r\n        }\r\n\r\n        var parameters = {\r\n          viewport: viewport.clone({\r\n            dontFlip: true\r\n          }),\r\n          div: _this.div,\r\n          annotations: annotations,\r\n          page: _this.pdfPage,\r\n          imageResourcesPath: _this.imageResourcesPath,\r\n          renderInteractiveForms: _this.renderInteractiveForms,\r\n          linkService: _this.linkService,\r\n          downloadManager: _this.downloadManager,\r\n          annotationStorage: _this.annotationStorage,\r\n          enableScripting: _this.enableScripting,\r\n          hasJSActions: hasJSActions,\r\n          mouseState: _this._mouseState\r\n        };\r\n\r\n        if (_this.div) {\r\n          _pdfjsLib.AnnotationLayer.update(parameters);\r\n        } else {\r\n          _this.div = document.createElement(\"div\");\r\n          _this.div.className = \"annotationLayer\";\r\n\r\n          _this.pageDiv.appendChild(_this.div);\r\n\r\n          parameters.div = _this.div;\r\n\r\n          _pdfjsLib.AnnotationLayer.render(parameters);\r\n\r\n          _this.l10n.translate(_this.div);\r\n        }\r\n      });\r\n    }\r\n  }, {\r\n    key: \"cancel\",\r\n    value: function cancel() {\r\n      this._cancelled = true;\r\n    }\r\n  }, {\r\n    key: \"hide\",\r\n    value: function hide() {\r\n      if (!this.div) {\r\n        return;\r\n      }\r\n\r\n      this.div.setAttribute(\"hidden\", \"true\");\r\n    }\r\n  }]);\r\n\r\n  return AnnotationLayerBuilder;\r\n}();\r\n\r\nexports.AnnotationLayerBuilder = AnnotationLayerBuilder;\r\n\r\nvar DefaultAnnotationLayerFactory = /*#__PURE__*/function () {\r\n  function DefaultAnnotationLayerFactory() {\r\n    _classCallCheck(this, DefaultAnnotationLayerFactory);\r\n  }\r\n\r\n  _createClass(DefaultAnnotationLayerFactory, [{\r\n    key: \"createAnnotationLayerBuilder\",\r\n    value: function createAnnotationLayerBuilder(pageDiv, pdfPage) {\r\n      var annotationStorage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\r\n      var imageResourcesPath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : \"\";\r\n      var renderInteractiveForms = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\r\n      var l10n = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : _ui_utils.NullL10n;\r\n      var enableScripting = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;\r\n      var hasJSActionsPromise = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;\r\n      var mouseState = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null;\r\n      return new AnnotationLayerBuilder({\r\n        pageDiv: pageDiv,\r\n        pdfPage: pdfPage,\r\n        imageResourcesPath: imageResourcesPath,\r\n        renderInteractiveForms: renderInteractiveForms,\r\n        linkService: new _pdf_link_service.SimpleLinkService(),\r\n        l10n: l10n,\r\n        annotationStorage: annotationStorage,\r\n        enableScripting: enableScripting,\r\n        hasJSActionsPromise: hasJSActionsPromise,\r\n        mouseState: mouseState\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return DefaultAnnotationLayerFactory;\r\n}();\r\n\r\nexports.DefaultAnnotationLayerFactory = DefaultAnnotationLayerFactory;\r\n\r\n/***/ }),\r\n/* 31 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFPageView = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nvar _pdf_rendering_queue = __webpack_require__(10);\r\n\r\nvar _viewer_compatibility = __webpack_require__(2);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar MAX_CANVAS_PIXELS = _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels || 16777216;\r\n\r\nvar PDFPageView = /*#__PURE__*/function () {\r\n  function PDFPageView(options) {\r\n    _classCallCheck(this, PDFPageView);\r\n\r\n    var container = options.container;\r\n    var defaultViewport = options.defaultViewport;\r\n    this.id = options.id;\r\n    this.renderingId = \"page\" + this.id;\r\n    this.pdfPage = null;\r\n    this.pageLabel = null;\r\n    this.rotation = 0;\r\n    this.scale = options.scale || _ui_utils.DEFAULT_SCALE;\r\n    this.viewport = defaultViewport;\r\n    this.pdfPageRotate = defaultViewport.rotation;\r\n    this._optionalContentConfigPromise = options.optionalContentConfigPromise || null;\r\n    this.hasRestrictedScaling = false;\r\n    this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE;\r\n    this.imageResourcesPath = options.imageResourcesPath || \"\";\r\n    this.renderInteractiveForms = typeof options.renderInteractiveForms === \"boolean\" ? options.renderInteractiveForms : true;\r\n    this.useOnlyCssZoom = options.useOnlyCssZoom || false;\r\n    this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS;\r\n    this.eventBus = options.eventBus;\r\n    this.renderingQueue = options.renderingQueue;\r\n    this.textLayerFactory = options.textLayerFactory;\r\n    this.annotationLayerFactory = options.annotationLayerFactory;\r\n    this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;\r\n    this.enableWebGL = options.enableWebGL || false;\r\n    this.l10n = options.l10n || _ui_utils.NullL10n;\r\n    this.enableScripting = options.enableScripting || false;\r\n    this.paintTask = null;\r\n    this.paintedViewportMap = new WeakMap();\r\n    this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;\r\n    this.resume = null;\r\n    this._renderError = null;\r\n    this.annotationLayer = null;\r\n    this.textLayer = null;\r\n    this.zoomLayer = null;\r\n    var div = document.createElement(\"div\");\r\n    div.className = \"page\";\r\n    div.style.width = Math.floor(this.viewport.width) + \"px\";\r\n    div.style.height = Math.floor(this.viewport.height) + \"px\";\r\n    div.setAttribute(\"data-page-number\", this.id);\r\n    this.div = div;\r\n    container.appendChild(div);\r\n  }\r\n\r\n  _createClass(PDFPageView, [{\r\n    key: \"setPdfPage\",\r\n    value: function setPdfPage(pdfPage) {\r\n      this.pdfPage = pdfPage;\r\n      this.pdfPageRotate = pdfPage.rotate;\r\n      var totalRotation = (this.rotation + this.pdfPageRotate) % 360;\r\n      this.viewport = pdfPage.getViewport({\r\n        scale: this.scale * _ui_utils.CSS_UNITS,\r\n        rotation: totalRotation\r\n      });\r\n      this.reset();\r\n    }\r\n  }, {\r\n    key: \"destroy\",\r\n    value: function destroy() {\r\n      this.reset();\r\n\r\n      if (this.pdfPage) {\r\n        this.pdfPage.cleanup();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_renderAnnotationLayer\",\r\n    value: function () {\r\n      var _renderAnnotationLayer2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var error;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                error = null;\r\n                _context.prev = 1;\r\n                _context.next = 4;\r\n                return this.annotationLayer.render(this.viewport, \"display\");\r\n\r\n              case 4:\r\n                _context.next = 9;\r\n                break;\r\n\r\n              case 6:\r\n                _context.prev = 6;\r\n                _context.t0 = _context[\"catch\"](1);\r\n                error = _context.t0;\r\n\r\n              case 9:\r\n                _context.prev = 9;\r\n                this.eventBus.dispatch(\"annotationlayerrendered\", {\r\n                  source: this,\r\n                  pageNumber: this.id,\r\n                  error: error\r\n                });\r\n                return _context.finish(9);\r\n\r\n              case 12:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this, [[1, 6, 9, 12]]);\r\n      }));\r\n\r\n      function _renderAnnotationLayer() {\r\n        return _renderAnnotationLayer2.apply(this, arguments);\r\n      }\r\n\r\n      return _renderAnnotationLayer;\r\n    }()\r\n  }, {\r\n    key: \"_resetZoomLayer\",\r\n    value: function _resetZoomLayer() {\r\n      var removeFromDOM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n\r\n      if (!this.zoomLayer) {\r\n        return;\r\n      }\r\n\r\n      var zoomLayerCanvas = this.zoomLayer.firstChild;\r\n      this.paintedViewportMap[\"delete\"](zoomLayerCanvas);\r\n      zoomLayerCanvas.width = 0;\r\n      zoomLayerCanvas.height = 0;\r\n\r\n      if (removeFromDOM) {\r\n        this.zoomLayer.remove();\r\n      }\r\n\r\n      this.zoomLayer = null;\r\n    }\r\n  }, {\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      var _this$annotationLayer;\r\n\r\n      var keepZoomLayer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n      var keepAnnotations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      this.cancelRendering(keepAnnotations);\r\n      this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;\r\n      var div = this.div;\r\n      div.style.width = Math.floor(this.viewport.width) + \"px\";\r\n      div.style.height = Math.floor(this.viewport.height) + \"px\";\r\n      var childNodes = div.childNodes;\r\n      var currentZoomLayerNode = keepZoomLayer && this.zoomLayer || null;\r\n      var currentAnnotationNode = keepAnnotations && ((_this$annotationLayer = this.annotationLayer) === null || _this$annotationLayer === void 0 ? void 0 : _this$annotationLayer.div) || null;\r\n\r\n      for (var i = childNodes.length - 1; i >= 0; i--) {\r\n        var node = childNodes[i];\r\n\r\n        if (currentZoomLayerNode === node || currentAnnotationNode === node) {\r\n          continue;\r\n        }\r\n\r\n        div.removeChild(node);\r\n      }\r\n\r\n      div.removeAttribute(\"data-loaded\");\r\n\r\n      if (currentAnnotationNode) {\r\n        this.annotationLayer.hide();\r\n      } else if (this.annotationLayer) {\r\n        this.annotationLayer.cancel();\r\n        this.annotationLayer = null;\r\n      }\r\n\r\n      if (!currentZoomLayerNode) {\r\n        if (this.canvas) {\r\n          this.paintedViewportMap[\"delete\"](this.canvas);\r\n          this.canvas.width = 0;\r\n          this.canvas.height = 0;\r\n          delete this.canvas;\r\n        }\r\n\r\n        this._resetZoomLayer();\r\n      }\r\n\r\n      if (this.svg) {\r\n        this.paintedViewportMap[\"delete\"](this.svg);\r\n        delete this.svg;\r\n      }\r\n\r\n      this.loadingIconDiv = document.createElement(\"div\");\r\n      this.loadingIconDiv.className = \"loadingIcon\";\r\n      div.appendChild(this.loadingIconDiv);\r\n    }\r\n  }, {\r\n    key: \"update\",\r\n    value: function update(scale, rotation) {\r\n      var optionalContentConfigPromise = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\r\n      this.scale = scale || this.scale;\r\n\r\n      if (typeof rotation !== \"undefined\") {\r\n        this.rotation = rotation;\r\n      }\r\n\r\n      if (optionalContentConfigPromise instanceof Promise) {\r\n        this._optionalContentConfigPromise = optionalContentConfigPromise;\r\n      }\r\n\r\n      var totalRotation = (this.rotation + this.pdfPageRotate) % 360;\r\n      this.viewport = this.viewport.clone({\r\n        scale: this.scale * _ui_utils.CSS_UNITS,\r\n        rotation: totalRotation\r\n      });\r\n\r\n      if (this.svg) {\r\n        this.cssTransform(this.svg, true);\r\n        this.eventBus.dispatch(\"pagerendered\", {\r\n          source: this,\r\n          pageNumber: this.id,\r\n          cssTransform: true,\r\n          timestamp: performance.now(),\r\n          error: this._renderError\r\n        });\r\n        return;\r\n      }\r\n\r\n      var isScalingRestricted = false;\r\n\r\n      if (this.canvas && this.maxCanvasPixels > 0) {\r\n        var outputScale = this.outputScale;\r\n\r\n        if ((Math.floor(this.viewport.width) * outputScale.sx | 0) * (Math.floor(this.viewport.height) * outputScale.sy | 0) > this.maxCanvasPixels) {\r\n          isScalingRestricted = true;\r\n        }\r\n      }\r\n\r\n      if (this.canvas) {\r\n        if (this.useOnlyCssZoom || this.hasRestrictedScaling && isScalingRestricted) {\r\n          this.cssTransform(this.canvas, true);\r\n          this.eventBus.dispatch(\"pagerendered\", {\r\n            source: this,\r\n            pageNumber: this.id,\r\n            cssTransform: true,\r\n            timestamp: performance.now(),\r\n            error: this._renderError\r\n          });\r\n          return;\r\n        }\r\n\r\n        if (!this.zoomLayer && !this.canvas.hasAttribute(\"hidden\")) {\r\n          this.zoomLayer = this.canvas.parentNode;\r\n          this.zoomLayer.style.position = \"absolute\";\r\n        }\r\n      }\r\n\r\n      if (this.zoomLayer) {\r\n        this.cssTransform(this.zoomLayer.firstChild);\r\n      }\r\n\r\n      this.reset(true, true);\r\n    }\r\n  }, {\r\n    key: \"cancelRendering\",\r\n    value: function cancelRendering() {\r\n      var keepAnnotations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n\r\n      if (this.paintTask) {\r\n        this.paintTask.cancel();\r\n        this.paintTask = null;\r\n      }\r\n\r\n      this.resume = null;\r\n\r\n      if (this.textLayer) {\r\n        this.textLayer.cancel();\r\n        this.textLayer = null;\r\n      }\r\n\r\n      if (!keepAnnotations && this.annotationLayer) {\r\n        this.annotationLayer.cancel();\r\n        this.annotationLayer = null;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"cssTransform\",\r\n    value: function cssTransform(target) {\r\n      var redrawAnnotations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\r\n      var width = this.viewport.width;\r\n      var height = this.viewport.height;\r\n      var div = this.div;\r\n      target.style.width = target.parentNode.style.width = div.style.width = Math.floor(width) + \"px\";\r\n      target.style.height = target.parentNode.style.height = div.style.height = Math.floor(height) + \"px\";\r\n      var relativeRotation = this.viewport.rotation - this.paintedViewportMap.get(target).rotation;\r\n      var absRotation = Math.abs(relativeRotation);\r\n      var scaleX = 1,\r\n          scaleY = 1;\r\n\r\n      if (absRotation === 90 || absRotation === 270) {\r\n        scaleX = height / width;\r\n        scaleY = width / height;\r\n      }\r\n\r\n      target.style.transform = \"rotate(\".concat(relativeRotation, \"deg) scale(\").concat(scaleX, \", \").concat(scaleY, \")\");\r\n\r\n      if (this.textLayer) {\r\n        var textLayerViewport = this.textLayer.viewport;\r\n        var textRelativeRotation = this.viewport.rotation - textLayerViewport.rotation;\r\n        var textAbsRotation = Math.abs(textRelativeRotation);\r\n        var scale = width / textLayerViewport.width;\r\n\r\n        if (textAbsRotation === 90 || textAbsRotation === 270) {\r\n          scale = width / textLayerViewport.height;\r\n        }\r\n\r\n        var textLayerDiv = this.textLayer.textLayerDiv;\r\n        var transX, transY;\r\n\r\n        switch (textAbsRotation) {\r\n          case 0:\r\n            transX = transY = 0;\r\n            break;\r\n\r\n          case 90:\r\n            transX = 0;\r\n            transY = \"-\" + textLayerDiv.style.height;\r\n            break;\r\n\r\n          case 180:\r\n            transX = \"-\" + textLayerDiv.style.width;\r\n            transY = \"-\" + textLayerDiv.style.height;\r\n            break;\r\n\r\n          case 270:\r\n            transX = \"-\" + textLayerDiv.style.width;\r\n            transY = 0;\r\n            break;\r\n\r\n          default:\r\n            console.error(\"Bad rotation value.\");\r\n            break;\r\n        }\r\n\r\n        textLayerDiv.style.transform = \"rotate(\".concat(textAbsRotation, \"deg) \") + \"scale(\".concat(scale, \") \") + \"translate(\".concat(transX, \", \").concat(transY, \")\");\r\n        textLayerDiv.style.transformOrigin = \"0% 0%\";\r\n      }\r\n\r\n      if (redrawAnnotations && this.annotationLayer) {\r\n        this._renderAnnotationLayer();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"width\",\r\n    get: function get() {\r\n      return this.viewport.width;\r\n    }\r\n  }, {\r\n    key: \"height\",\r\n    get: function get() {\r\n      return this.viewport.height;\r\n    }\r\n  }, {\r\n    key: \"getPagePoint\",\r\n    value: function getPagePoint(x, y) {\r\n      return this.viewport.convertToPdfPoint(x, y);\r\n    }\r\n  }, {\r\n    key: \"draw\",\r\n    value: function draw() {\r\n      var _this$annotationLayer2,\r\n          _this = this;\r\n\r\n      if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) {\r\n        console.error(\"Must be in new state before drawing\");\r\n        this.reset();\r\n      }\r\n\r\n      var div = this.div,\r\n          pdfPage = this.pdfPage;\r\n\r\n      if (!pdfPage) {\r\n        this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;\r\n\r\n        if (this.loadingIconDiv) {\r\n          div.removeChild(this.loadingIconDiv);\r\n          delete this.loadingIconDiv;\r\n        }\r\n\r\n        return Promise.reject(new Error(\"pdfPage is not loaded\"));\r\n      }\r\n\r\n      this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;\r\n      var canvasWrapper = document.createElement(\"div\");\r\n      canvasWrapper.style.width = div.style.width;\r\n      canvasWrapper.style.height = div.style.height;\r\n      canvasWrapper.classList.add(\"canvasWrapper\");\r\n\r\n      if ((_this$annotationLayer2 = this.annotationLayer) !== null && _this$annotationLayer2 !== void 0 && _this$annotationLayer2.div) {\r\n        div.insertBefore(canvasWrapper, this.annotationLayer.div);\r\n      } else {\r\n        div.appendChild(canvasWrapper);\r\n      }\r\n\r\n      var textLayer = null;\r\n\r\n      if (this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE && this.textLayerFactory) {\r\n        var _this$annotationLayer3;\r\n\r\n        var textLayerDiv = document.createElement(\"div\");\r\n        textLayerDiv.className = \"textLayer\";\r\n        textLayerDiv.style.width = canvasWrapper.style.width;\r\n        textLayerDiv.style.height = canvasWrapper.style.height;\r\n\r\n        if ((_this$annotationLayer3 = this.annotationLayer) !== null && _this$annotationLayer3 !== void 0 && _this$annotationLayer3.div) {\r\n          div.insertBefore(textLayerDiv, this.annotationLayer.div);\r\n        } else {\r\n          div.appendChild(textLayerDiv);\r\n        }\r\n\r\n        textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport, this.textLayerMode === _ui_utils.TextLayerMode.ENABLE_ENHANCE, this.eventBus);\r\n      }\r\n\r\n      this.textLayer = textLayer;\r\n      var renderContinueCallback = null;\r\n\r\n      if (this.renderingQueue) {\r\n        renderContinueCallback = function renderContinueCallback(cont) {\r\n          if (!_this.renderingQueue.isHighestPriority(_this)) {\r\n            _this.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED;\r\n\r\n            _this.resume = function () {\r\n              _this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;\r\n              cont();\r\n            };\r\n\r\n            return;\r\n          }\r\n\r\n          cont();\r\n        };\r\n      }\r\n\r\n      var finishPaintTask = /*#__PURE__*/function () {\r\n        var _ref = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n          var error,\r\n              _args2 = arguments;\r\n          return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n            while (1) {\r\n              switch (_context2.prev = _context2.next) {\r\n                case 0:\r\n                  error = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : null;\r\n\r\n                  if (paintTask === _this.paintTask) {\r\n                    _this.paintTask = null;\r\n                  }\r\n\r\n                  if (!(error instanceof _pdfjsLib.RenderingCancelledException)) {\r\n                    _context2.next = 5;\r\n                    break;\r\n                  }\r\n\r\n                  _this._renderError = null;\r\n                  return _context2.abrupt(\"return\");\r\n\r\n                case 5:\r\n                  _this._renderError = error;\r\n                  _this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;\r\n\r\n                  if (_this.loadingIconDiv) {\r\n                    div.removeChild(_this.loadingIconDiv);\r\n                    delete _this.loadingIconDiv;\r\n                  }\r\n\r\n                  _this._resetZoomLayer(true);\r\n\r\n                  _this.eventBus.dispatch(\"pagerendered\", {\r\n                    source: _this,\r\n                    pageNumber: _this.id,\r\n                    cssTransform: false,\r\n                    timestamp: performance.now(),\r\n                    error: _this._renderError\r\n                  });\r\n\r\n                  if (!error) {\r\n                    _context2.next = 12;\r\n                    break;\r\n                  }\r\n\r\n                  throw error;\r\n\r\n                case 12:\r\n                case \"end\":\r\n                  return _context2.stop();\r\n              }\r\n            }\r\n          }, _callee2);\r\n        }));\r\n\r\n        return function finishPaintTask() {\r\n          return _ref.apply(this, arguments);\r\n        };\r\n      }();\r\n\r\n      var paintTask = this.renderer === _ui_utils.RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper);\r\n      paintTask.onRenderContinue = renderContinueCallback;\r\n      this.paintTask = paintTask;\r\n      var resultPromise = paintTask.promise.then(function () {\r\n        return finishPaintTask(null).then(function () {\r\n          if (textLayer) {\r\n            var readableStream = pdfPage.streamTextContent({\r\n              normalizeWhitespace: true\r\n            });\r\n            textLayer.setTextContentStream(readableStream);\r\n            textLayer.render();\r\n          }\r\n        });\r\n      }, function (reason) {\r\n        return finishPaintTask(reason);\r\n      });\r\n\r\n      if (this.annotationLayerFactory) {\r\n        if (!this.annotationLayer) {\r\n          this.annotationLayer = this.annotationLayerFactory.createAnnotationLayerBuilder(div, pdfPage, null, this.imageResourcesPath, this.renderInteractiveForms, this.l10n, this.enableScripting, null, null);\r\n        }\r\n\r\n        this._renderAnnotationLayer();\r\n      }\r\n\r\n      div.setAttribute(\"data-loaded\", true);\r\n      this.eventBus.dispatch(\"pagerender\", {\r\n        source: this,\r\n        pageNumber: this.id\r\n      });\r\n      return resultPromise;\r\n    }\r\n  }, {\r\n    key: \"paintOnCanvas\",\r\n    value: function paintOnCanvas(canvasWrapper) {\r\n      var renderCapability = (0, _pdfjsLib.createPromiseCapability)();\r\n      var result = {\r\n        promise: renderCapability.promise,\r\n        onRenderContinue: function onRenderContinue(cont) {\r\n          cont();\r\n        },\r\n        cancel: function cancel() {\r\n          renderTask.cancel();\r\n        }\r\n      };\r\n      var viewport = this.viewport;\r\n      var canvas = document.createElement(\"canvas\");\r\n      this.l10n.get(\"page_canvas\", {\r\n        page: this.id\r\n      }, \"Page {{page}}\").then(function (msg) {\r\n        canvas.setAttribute(\"aria-label\", msg);\r\n      });\r\n      canvas.setAttribute(\"hidden\", \"hidden\");\r\n      var isCanvasHidden = true;\r\n\r\n      var showCanvas = function showCanvas() {\r\n        if (isCanvasHidden) {\r\n          canvas.removeAttribute(\"hidden\");\r\n          isCanvasHidden = false;\r\n        }\r\n      };\r\n\r\n      canvasWrapper.appendChild(canvas);\r\n      this.canvas = canvas;\r\n      canvas.mozOpaque = true;\r\n      var ctx = canvas.getContext(\"2d\", {\r\n        alpha: false\r\n      });\r\n      var outputScale = (0, _ui_utils.getOutputScale)(ctx);\r\n      this.outputScale = outputScale;\r\n\r\n      if (this.useOnlyCssZoom) {\r\n        var actualSizeViewport = viewport.clone({\r\n          scale: _ui_utils.CSS_UNITS\r\n        });\r\n        outputScale.sx *= actualSizeViewport.width / viewport.width;\r\n        outputScale.sy *= actualSizeViewport.height / viewport.height;\r\n        outputScale.scaled = true;\r\n      }\r\n\r\n      if (this.maxCanvasPixels > 0) {\r\n        var pixelsInViewport = viewport.width * viewport.height;\r\n        var maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport);\r\n\r\n        if (outputScale.sx > maxScale || outputScale.sy > maxScale) {\r\n          outputScale.sx = maxScale;\r\n          outputScale.sy = maxScale;\r\n          outputScale.scaled = true;\r\n          this.hasRestrictedScaling = true;\r\n        } else {\r\n          this.hasRestrictedScaling = false;\r\n        }\r\n      }\r\n\r\n      var sfx = (0, _ui_utils.approximateFraction)(outputScale.sx);\r\n      var sfy = (0, _ui_utils.approximateFraction)(outputScale.sy);\r\n      canvas.width = (0, _ui_utils.roundToDivide)(viewport.width * outputScale.sx, sfx[0]);\r\n      canvas.height = (0, _ui_utils.roundToDivide)(viewport.height * outputScale.sy, sfy[0]);\r\n      canvas.style.width = (0, _ui_utils.roundToDivide)(viewport.width, sfx[1]) + \"px\";\r\n      canvas.style.height = (0, _ui_utils.roundToDivide)(viewport.height, sfy[1]) + \"px\";\r\n      this.paintedViewportMap.set(canvas, viewport);\r\n      var transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0];\r\n      var renderContext = {\r\n        canvasContext: ctx,\r\n        transform: transform,\r\n        viewport: this.viewport,\r\n        enableWebGL: this.enableWebGL,\r\n        renderInteractiveForms: this.renderInteractiveForms,\r\n        optionalContentConfigPromise: this._optionalContentConfigPromise\r\n      };\r\n      var renderTask = this.pdfPage.render(renderContext);\r\n\r\n      renderTask.onContinue = function (cont) {\r\n        showCanvas();\r\n\r\n        if (result.onRenderContinue) {\r\n          result.onRenderContinue(cont);\r\n        } else {\r\n          cont();\r\n        }\r\n      };\r\n\r\n      renderTask.promise.then(function () {\r\n        showCanvas();\r\n        renderCapability.resolve(undefined);\r\n      }, function (error) {\r\n        showCanvas();\r\n        renderCapability.reject(error);\r\n      });\r\n      return result;\r\n    }\r\n  }, {\r\n    key: \"paintOnSvg\",\r\n    value: function paintOnSvg(wrapper) {\r\n      var _this2 = this;\r\n\r\n      var cancelled = false;\r\n\r\n      var ensureNotCancelled = function ensureNotCancelled() {\r\n        if (cancelled) {\r\n          throw new _pdfjsLib.RenderingCancelledException(\"Rendering cancelled, page \".concat(_this2.id), \"svg\");\r\n        }\r\n      };\r\n\r\n      var pdfPage = this.pdfPage;\r\n      var actualSizeViewport = this.viewport.clone({\r\n        scale: _ui_utils.CSS_UNITS\r\n      });\r\n      var promise = pdfPage.getOperatorList().then(function (opList) {\r\n        ensureNotCancelled();\r\n        var svgGfx = new _pdfjsLib.SVGGraphics(pdfPage.commonObjs, pdfPage.objs);\r\n        return svgGfx.getSVG(opList, actualSizeViewport).then(function (svg) {\r\n          ensureNotCancelled();\r\n          _this2.svg = svg;\r\n\r\n          _this2.paintedViewportMap.set(svg, actualSizeViewport);\r\n\r\n          svg.style.width = wrapper.style.width;\r\n          svg.style.height = wrapper.style.height;\r\n          _this2.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;\r\n          wrapper.appendChild(svg);\r\n        });\r\n      });\r\n      return {\r\n        promise: promise,\r\n        onRenderContinue: function onRenderContinue(cont) {\r\n          cont();\r\n        },\r\n        cancel: function cancel() {\r\n          cancelled = true;\r\n        }\r\n      };\r\n    }\r\n  }, {\r\n    key: \"setPageLabel\",\r\n    value: function setPageLabel(label) {\r\n      this.pageLabel = typeof label === \"string\" ? label : null;\r\n\r\n      if (this.pageLabel !== null) {\r\n        this.div.setAttribute(\"data-page-label\", this.pageLabel);\r\n      } else {\r\n        this.div.removeAttribute(\"data-page-label\");\r\n      }\r\n    }\r\n  }]);\r\n\r\n  return PDFPageView;\r\n}();\r\n\r\nexports.PDFPageView = PDFPageView;\r\n\r\n/***/ }),\r\n/* 32 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.TextLayerBuilder = exports.DefaultTextLayerFactory = void 0;\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar EXPAND_DIVS_TIMEOUT = 300;\r\n\r\nvar TextLayerBuilder = /*#__PURE__*/function () {\r\n  function TextLayerBuilder(_ref) {\r\n    var textLayerDiv = _ref.textLayerDiv,\r\n        eventBus = _ref.eventBus,\r\n        pageIndex = _ref.pageIndex,\r\n        viewport = _ref.viewport,\r\n        _ref$findController = _ref.findController,\r\n        findController = _ref$findController === void 0 ? null : _ref$findController,\r\n        _ref$enhanceTextSelec = _ref.enhanceTextSelection,\r\n        enhanceTextSelection = _ref$enhanceTextSelec === void 0 ? false : _ref$enhanceTextSelec;\r\n\r\n    _classCallCheck(this, TextLayerBuilder);\r\n\r\n    this.textLayerDiv = textLayerDiv;\r\n    this.eventBus = eventBus;\r\n    this.textContent = null;\r\n    this.textContentItemsStr = [];\r\n    this.textContentStream = null;\r\n    this.renderingDone = false;\r\n    this.pageIdx = pageIndex;\r\n    this.pageNumber = this.pageIdx + 1;\r\n    this.matches = [];\r\n    this.viewport = viewport;\r\n    this.textDivs = [];\r\n    this.findController = findController;\r\n    this.textLayerRenderTask = null;\r\n    this.enhanceTextSelection = enhanceTextSelection;\r\n    this._onUpdateTextLayerMatches = null;\r\n\r\n    this._bindMouse();\r\n  }\r\n\r\n  _createClass(TextLayerBuilder, [{\r\n    key: \"_finishRendering\",\r\n    value: function _finishRendering() {\r\n      this.renderingDone = true;\r\n\r\n      if (!this.enhanceTextSelection) {\r\n        var endOfContent = document.createElement(\"div\");\r\n        endOfContent.className = \"endOfContent\";\r\n        this.textLayerDiv.appendChild(endOfContent);\r\n      }\r\n\r\n      this.eventBus.dispatch(\"textlayerrendered\", {\r\n        source: this,\r\n        pageNumber: this.pageNumber,\r\n        numTextDivs: this.textDivs.length\r\n      });\r\n    }\r\n  }, {\r\n    key: \"render\",\r\n    value: function render() {\r\n      var _this = this;\r\n\r\n      var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\r\n\r\n      if (!(this.textContent || this.textContentStream) || this.renderingDone) {\r\n        return;\r\n      }\r\n\r\n      this.cancel();\r\n      this.textDivs = [];\r\n      var textLayerFrag = document.createDocumentFragment();\r\n      this.textLayerRenderTask = (0, _pdfjsLib.renderTextLayer)({\r\n        textContent: this.textContent,\r\n        textContentStream: this.textContentStream,\r\n        container: textLayerFrag,\r\n        viewport: this.viewport,\r\n        textDivs: this.textDivs,\r\n        textContentItemsStr: this.textContentItemsStr,\r\n        timeout: timeout,\r\n        enhanceTextSelection: this.enhanceTextSelection\r\n      });\r\n      this.textLayerRenderTask.promise.then(function () {\r\n        _this.textLayerDiv.appendChild(textLayerFrag);\r\n\r\n        _this._finishRendering();\r\n\r\n        _this._updateMatches();\r\n      }, function (reason) {});\r\n\r\n      if (!this._onUpdateTextLayerMatches) {\r\n        this._onUpdateTextLayerMatches = function (evt) {\r\n          if (evt.pageIndex === _this.pageIdx || evt.pageIndex === -1) {\r\n            _this._updateMatches();\r\n          }\r\n        };\r\n\r\n        this.eventBus._on(\"updatetextlayermatches\", this._onUpdateTextLayerMatches);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"cancel\",\r\n    value: function cancel() {\r\n      if (this.textLayerRenderTask) {\r\n        this.textLayerRenderTask.cancel();\r\n        this.textLayerRenderTask = null;\r\n      }\r\n\r\n      if (this._onUpdateTextLayerMatches) {\r\n        this.eventBus._off(\"updatetextlayermatches\", this._onUpdateTextLayerMatches);\r\n\r\n        this._onUpdateTextLayerMatches = null;\r\n      }\r\n    }\r\n  }, {\r\n    key: \"setTextContentStream\",\r\n    value: function setTextContentStream(readableStream) {\r\n      this.cancel();\r\n      this.textContentStream = readableStream;\r\n    }\r\n  }, {\r\n    key: \"setTextContent\",\r\n    value: function setTextContent(textContent) {\r\n      this.cancel();\r\n      this.textContent = textContent;\r\n    }\r\n  }, {\r\n    key: \"_convertMatches\",\r\n    value: function _convertMatches(matches, matchesLength) {\r\n      if (!matches) {\r\n        return [];\r\n      }\r\n\r\n      var textContentItemsStr = this.textContentItemsStr;\r\n      var i = 0,\r\n          iIndex = 0;\r\n      var end = textContentItemsStr.length - 1;\r\n      var result = [];\r\n\r\n      for (var m = 0, mm = matches.length; m < mm; m++) {\r\n        var matchIdx = matches[m];\r\n\r\n        while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) {\r\n          iIndex += textContentItemsStr[i].length;\r\n          i++;\r\n        }\r\n\r\n        if (i === textContentItemsStr.length) {\r\n          console.error(\"Could not find a matching mapping\");\r\n        }\r\n\r\n        var match = {\r\n          begin: {\r\n            divIdx: i,\r\n            offset: matchIdx - iIndex\r\n          }\r\n        };\r\n        matchIdx += matchesLength[m];\r\n\r\n        while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) {\r\n          iIndex += textContentItemsStr[i].length;\r\n          i++;\r\n        }\r\n\r\n        match.end = {\r\n          divIdx: i,\r\n          offset: matchIdx - iIndex\r\n        };\r\n        result.push(match);\r\n      }\r\n\r\n      return result;\r\n    }\r\n  }, {\r\n    key: \"_renderMatches\",\r\n    value: function _renderMatches(matches) {\r\n      if (matches.length === 0) {\r\n        return;\r\n      }\r\n\r\n      var findController = this.findController,\r\n          pageIdx = this.pageIdx,\r\n          textContentItemsStr = this.textContentItemsStr,\r\n          textDivs = this.textDivs;\r\n      var isSelectedPage = pageIdx === findController.selected.pageIdx;\r\n      var selectedMatchIdx = findController.selected.matchIdx;\r\n      var highlightAll = findController.state.highlightAll;\r\n      var prevEnd = null;\r\n      var infinity = {\r\n        divIdx: -1,\r\n        offset: undefined\r\n      };\r\n\r\n      function beginText(begin, className) {\r\n        var divIdx = begin.divIdx;\r\n        textDivs[divIdx].textContent = \"\";\r\n        appendTextToDiv(divIdx, 0, begin.offset, className);\r\n      }\r\n\r\n      function appendTextToDiv(divIdx, fromOffset, toOffset, className) {\r\n        var div = textDivs[divIdx];\r\n        var content = textContentItemsStr[divIdx].substring(fromOffset, toOffset);\r\n        var node = document.createTextNode(content);\r\n\r\n        if (className) {\r\n          var span = document.createElement(\"span\");\r\n          span.className = className;\r\n          span.appendChild(node);\r\n          div.appendChild(span);\r\n          return;\r\n        }\r\n\r\n        div.appendChild(node);\r\n      }\r\n\r\n      var i0 = selectedMatchIdx,\r\n          i1 = i0 + 1;\r\n\r\n      if (highlightAll) {\r\n        i0 = 0;\r\n        i1 = matches.length;\r\n      } else if (!isSelectedPage) {\r\n        return;\r\n      }\r\n\r\n      for (var i = i0; i < i1; i++) {\r\n        var match = matches[i];\r\n        var begin = match.begin;\r\n        var end = match.end;\r\n        var isSelected = isSelectedPage && i === selectedMatchIdx;\r\n        var highlightSuffix = isSelected ? \" selected\" : \"\";\r\n\r\n        if (isSelected) {\r\n          findController.scrollMatchIntoView({\r\n            element: textDivs[begin.divIdx],\r\n            pageIndex: pageIdx,\r\n            matchIndex: selectedMatchIdx\r\n          });\r\n        }\r\n\r\n        if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {\r\n          if (prevEnd !== null) {\r\n            appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\r\n          }\r\n\r\n          beginText(begin);\r\n        } else {\r\n          appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);\r\n        }\r\n\r\n        if (begin.divIdx === end.divIdx) {\r\n          appendTextToDiv(begin.divIdx, begin.offset, end.offset, \"highlight\" + highlightSuffix);\r\n        } else {\r\n          appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, \"highlight begin\" + highlightSuffix);\r\n\r\n          for (var n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {\r\n            textDivs[n0].className = \"highlight middle\" + highlightSuffix;\r\n          }\r\n\r\n          beginText(end, \"highlight end\" + highlightSuffix);\r\n        }\r\n\r\n        prevEnd = end;\r\n      }\r\n\r\n      if (prevEnd) {\r\n        appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_updateMatches\",\r\n    value: function _updateMatches() {\r\n      if (!this.renderingDone) {\r\n        return;\r\n      }\r\n\r\n      var findController = this.findController,\r\n          matches = this.matches,\r\n          pageIdx = this.pageIdx,\r\n          textContentItemsStr = this.textContentItemsStr,\r\n          textDivs = this.textDivs;\r\n      var clearedUntilDivIdx = -1;\r\n\r\n      for (var i = 0, ii = matches.length; i < ii; i++) {\r\n        var match = matches[i];\r\n        var begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);\r\n\r\n        for (var n = begin, end = match.end.divIdx; n <= end; n++) {\r\n          var div = textDivs[n];\r\n          div.textContent = textContentItemsStr[n];\r\n          div.className = \"\";\r\n        }\r\n\r\n        clearedUntilDivIdx = match.end.divIdx + 1;\r\n      }\r\n\r\n      if (!(findController !== null && findController !== void 0 && findController.highlightMatches)) {\r\n        return;\r\n      }\r\n\r\n      var pageMatches = findController.pageMatches[pageIdx] || null;\r\n      var pageMatchesLength = findController.pageMatchesLength[pageIdx] || null;\r\n      this.matches = this._convertMatches(pageMatches, pageMatchesLength);\r\n\r\n      this._renderMatches(this.matches);\r\n    }\r\n  }, {\r\n    key: \"_bindMouse\",\r\n    value: function _bindMouse() {\r\n      var _this2 = this;\r\n\r\n      var div = this.textLayerDiv;\r\n      var expandDivsTimer = null;\r\n      div.addEventListener(\"mousedown\", function (evt) {\r\n        if (_this2.enhanceTextSelection && _this2.textLayerRenderTask) {\r\n          _this2.textLayerRenderTask.expandTextDivs(true);\r\n\r\n          if (expandDivsTimer) {\r\n            clearTimeout(expandDivsTimer);\r\n            expandDivsTimer = null;\r\n          }\r\n\r\n          return;\r\n        }\r\n\r\n        var end = div.querySelector(\".endOfContent\");\r\n\r\n        if (!end) {\r\n          return;\r\n        }\r\n\r\n        var adjustTop = evt.target !== div;\r\n        adjustTop = adjustTop && window.getComputedStyle(end).getPropertyValue(\"-moz-user-select\") !== \"none\";\r\n\r\n        if (adjustTop) {\r\n          var divBounds = div.getBoundingClientRect();\r\n          var r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height);\r\n          end.style.top = (r * 100).toFixed(2) + \"%\";\r\n        }\r\n\r\n        end.classList.add(\"active\");\r\n      });\r\n      div.addEventListener(\"mouseup\", function () {\r\n        if (_this2.enhanceTextSelection && _this2.textLayerRenderTask) {\r\n          expandDivsTimer = setTimeout(function () {\r\n            if (_this2.textLayerRenderTask) {\r\n              _this2.textLayerRenderTask.expandTextDivs(false);\r\n            }\r\n\r\n            expandDivsTimer = null;\r\n          }, EXPAND_DIVS_TIMEOUT);\r\n          return;\r\n        }\r\n\r\n        var end = div.querySelector(\".endOfContent\");\r\n\r\n        if (!end) {\r\n          return;\r\n        }\r\n\r\n        end.style.top = \"\";\r\n        end.classList.remove(\"active\");\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return TextLayerBuilder;\r\n}();\r\n\r\nexports.TextLayerBuilder = TextLayerBuilder;\r\n\r\nvar DefaultTextLayerFactory = /*#__PURE__*/function () {\r\n  function DefaultTextLayerFactory() {\r\n    _classCallCheck(this, DefaultTextLayerFactory);\r\n  }\r\n\r\n  _createClass(DefaultTextLayerFactory, [{\r\n    key: \"createTextLayerBuilder\",\r\n    value: function createTextLayerBuilder(textLayerDiv, pageIndex, viewport) {\r\n      var enhanceTextSelection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\r\n      var eventBus = arguments.length > 4 ? arguments[4] : undefined;\r\n      return new TextLayerBuilder({\r\n        textLayerDiv: textLayerDiv,\r\n        pageIndex: pageIndex,\r\n        viewport: viewport,\r\n        enhanceTextSelection: enhanceTextSelection,\r\n        eventBus: eventBus\r\n      });\r\n    }\r\n  }]);\r\n\r\n  return DefaultTextLayerFactory;\r\n}();\r\n\r\nexports.DefaultTextLayerFactory = DefaultTextLayerFactory;\r\n\r\n/***/ }),\r\n/* 33 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.SecondaryToolbar = void 0;\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nvar _pdf_cursor_tools = __webpack_require__(8);\r\n\r\nvar _pdf_single_page_viewer = __webpack_require__(34);\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar SecondaryToolbar = /*#__PURE__*/function () {\r\n  function SecondaryToolbar(options, mainContainer, eventBus) {\r\n    var _this = this;\r\n\r\n    _classCallCheck(this, SecondaryToolbar);\r\n\r\n    this.toolbar = options.toolbar;\r\n    this.toggleButton = options.toggleButton;\r\n    this.toolbarButtonContainer = options.toolbarButtonContainer;\r\n    this.buttons = [{\r\n      element: options.presentationModeButton,\r\n      eventName: \"presentationmode\",\r\n      close: true\r\n    }, {\r\n      element: options.openFileButton,\r\n      eventName: \"openfile\",\r\n      close: true\r\n    }, {\r\n      element: options.printButton,\r\n      eventName: \"print\",\r\n      close: true\r\n    }, {\r\n      element: options.downloadButton,\r\n      eventName: \"download\",\r\n      close: true\r\n    }, {\r\n      element: options.viewBookmarkButton,\r\n      eventName: null,\r\n      close: true\r\n    }, {\r\n      element: options.firstPageButton,\r\n      eventName: \"firstpage\",\r\n      close: true\r\n    }, {\r\n      element: options.lastPageButton,\r\n      eventName: \"lastpage\",\r\n      close: true\r\n    }, {\r\n      element: options.pageRotateCwButton,\r\n      eventName: \"rotatecw\",\r\n      close: false\r\n    }, {\r\n      element: options.pageRotateCcwButton,\r\n      eventName: \"rotateccw\",\r\n      close: false\r\n    }, {\r\n      element: options.cursorSelectToolButton,\r\n      eventName: \"switchcursortool\",\r\n      eventDetails: {\r\n        tool: _pdf_cursor_tools.CursorTool.SELECT\r\n      },\r\n      close: true\r\n    }, {\r\n      element: options.cursorHandToolButton,\r\n      eventName: \"switchcursortool\",\r\n      eventDetails: {\r\n        tool: _pdf_cursor_tools.CursorTool.HAND\r\n      },\r\n      close: true\r\n    }, {\r\n      element: options.scrollVerticalButton,\r\n      eventName: \"switchscrollmode\",\r\n      eventDetails: {\r\n        mode: _ui_utils.ScrollMode.VERTICAL\r\n      },\r\n      close: true\r\n    }, {\r\n      element: options.scrollHorizontalButton,\r\n      eventName: \"switchscrollmode\",\r\n      eventDetails: {\r\n        mode: _ui_utils.ScrollMode.HORIZONTAL\r\n      },\r\n      close: true\r\n    }, {\r\n      element: options.scrollWrappedButton,\r\n      eventName: \"switchscrollmode\",\r\n      eventDetails: {\r\n        mode: _ui_utils.ScrollMode.WRAPPED\r\n      },\r\n      close: true\r\n    }, {\r\n      element: options.spreadNoneButton,\r\n      eventName: \"switchspreadmode\",\r\n      eventDetails: {\r\n        mode: _ui_utils.SpreadMode.NONE\r\n      },\r\n      close: true\r\n    }, {\r\n      element: options.spreadOddButton,\r\n      eventName: \"switchspreadmode\",\r\n      eventDetails: {\r\n        mode: _ui_utils.SpreadMode.ODD\r\n      },\r\n      close: true\r\n    }, {\r\n      element: options.spreadEvenButton,\r\n      eventName: \"switchspreadmode\",\r\n      eventDetails: {\r\n        mode: _ui_utils.SpreadMode.EVEN\r\n      },\r\n      close: true\r\n    }, {\r\n      element: options.documentPropertiesButton,\r\n      eventName: \"documentproperties\",\r\n      close: true\r\n    }];\r\n    this.items = {\r\n      firstPage: options.firstPageButton,\r\n      lastPage: options.lastPageButton,\r\n      pageRotateCw: options.pageRotateCwButton,\r\n      pageRotateCcw: options.pageRotateCcwButton\r\n    };\r\n    this.mainContainer = mainContainer;\r\n    this.eventBus = eventBus;\r\n    this.opened = false;\r\n    this.containerHeight = null;\r\n    this.previousContainerHeight = null;\r\n    this.reset();\r\n\r\n    this._bindClickListeners();\r\n\r\n    this._bindCursorToolsListener(options);\r\n\r\n    this._bindScrollModeListener(options);\r\n\r\n    this._bindSpreadModeListener(options);\r\n\r\n    this.eventBus._on(\"resize\", this._setMaxHeight.bind(this));\r\n\r\n    this.eventBus._on(\"baseviewerinit\", function (evt) {\r\n      if (evt.source instanceof _pdf_single_page_viewer.PDFSinglePageViewer) {\r\n        _this.toolbarButtonContainer.classList.add(\"hiddenScrollModeButtons\", \"hiddenSpreadModeButtons\");\r\n      } else {\r\n        _this.toolbarButtonContainer.classList.remove(\"hiddenScrollModeButtons\", \"hiddenSpreadModeButtons\");\r\n      }\r\n    });\r\n  }\r\n\r\n  _createClass(SecondaryToolbar, [{\r\n    key: \"isOpen\",\r\n    get: function get() {\r\n      return this.opened;\r\n    }\r\n  }, {\r\n    key: \"setPageNumber\",\r\n    value: function setPageNumber(pageNumber) {\r\n      this.pageNumber = pageNumber;\r\n\r\n      this._updateUIState();\r\n    }\r\n  }, {\r\n    key: \"setPagesCount\",\r\n    value: function setPagesCount(pagesCount) {\r\n      this.pagesCount = pagesCount;\r\n\r\n      this._updateUIState();\r\n    }\r\n  }, {\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      this.pageNumber = 0;\r\n      this.pagesCount = 0;\r\n\r\n      this._updateUIState();\r\n\r\n      this.eventBus.dispatch(\"secondarytoolbarreset\", {\r\n        source: this\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_updateUIState\",\r\n    value: function _updateUIState() {\r\n      this.items.firstPage.disabled = this.pageNumber <= 1;\r\n      this.items.lastPage.disabled = this.pageNumber >= this.pagesCount;\r\n      this.items.pageRotateCw.disabled = this.pagesCount === 0;\r\n      this.items.pageRotateCcw.disabled = this.pagesCount === 0;\r\n    }\r\n  }, {\r\n    key: \"_bindClickListeners\",\r\n    value: function _bindClickListeners() {\r\n      var _this2 = this;\r\n\r\n      this.toggleButton.addEventListener(\"click\", this.toggle.bind(this));\r\n\r\n      var _iterator = _createForOfIteratorHelper(this.buttons),\r\n          _step;\r\n\r\n      try {\r\n        var _loop = function _loop() {\r\n          var _step$value = _step.value,\r\n              element = _step$value.element,\r\n              eventName = _step$value.eventName,\r\n              close = _step$value.close,\r\n              eventDetails = _step$value.eventDetails;\r\n          element.addEventListener(\"click\", function (evt) {\r\n            if (eventName !== null) {\r\n              var details = {\r\n                source: _this2\r\n              };\r\n\r\n              for (var property in eventDetails) {\r\n                details[property] = eventDetails[property];\r\n              }\r\n\r\n              _this2.eventBus.dispatch(eventName, details);\r\n            }\r\n\r\n            if (close) {\r\n              _this2.close();\r\n            }\r\n          });\r\n        };\r\n\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          _loop();\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_bindCursorToolsListener\",\r\n    value: function _bindCursorToolsListener(buttons) {\r\n      this.eventBus._on(\"cursortoolchanged\", function (_ref) {\r\n        var tool = _ref.tool;\r\n        buttons.cursorSelectToolButton.classList.toggle(\"toggled\", tool === _pdf_cursor_tools.CursorTool.SELECT);\r\n        buttons.cursorHandToolButton.classList.toggle(\"toggled\", tool === _pdf_cursor_tools.CursorTool.HAND);\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_bindScrollModeListener\",\r\n    value: function _bindScrollModeListener(buttons) {\r\n      var _this3 = this;\r\n\r\n      function scrollModeChanged(_ref2) {\r\n        var mode = _ref2.mode;\r\n        buttons.scrollVerticalButton.classList.toggle(\"toggled\", mode === _ui_utils.ScrollMode.VERTICAL);\r\n        buttons.scrollHorizontalButton.classList.toggle(\"toggled\", mode === _ui_utils.ScrollMode.HORIZONTAL);\r\n        buttons.scrollWrappedButton.classList.toggle(\"toggled\", mode === _ui_utils.ScrollMode.WRAPPED);\r\n        var isScrollModeHorizontal = mode === _ui_utils.ScrollMode.HORIZONTAL;\r\n        buttons.spreadNoneButton.disabled = isScrollModeHorizontal;\r\n        buttons.spreadOddButton.disabled = isScrollModeHorizontal;\r\n        buttons.spreadEvenButton.disabled = isScrollModeHorizontal;\r\n      }\r\n\r\n      this.eventBus._on(\"scrollmodechanged\", scrollModeChanged);\r\n\r\n      this.eventBus._on(\"secondarytoolbarreset\", function (evt) {\r\n        if (evt.source === _this3) {\r\n          scrollModeChanged({\r\n            mode: _ui_utils.ScrollMode.VERTICAL\r\n          });\r\n        }\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_bindSpreadModeListener\",\r\n    value: function _bindSpreadModeListener(buttons) {\r\n      var _this4 = this;\r\n\r\n      function spreadModeChanged(_ref3) {\r\n        var mode = _ref3.mode;\r\n        buttons.spreadNoneButton.classList.toggle(\"toggled\", mode === _ui_utils.SpreadMode.NONE);\r\n        buttons.spreadOddButton.classList.toggle(\"toggled\", mode === _ui_utils.SpreadMode.ODD);\r\n        buttons.spreadEvenButton.classList.toggle(\"toggled\", mode === _ui_utils.SpreadMode.EVEN);\r\n      }\r\n\r\n      this.eventBus._on(\"spreadmodechanged\", spreadModeChanged);\r\n\r\n      this.eventBus._on(\"secondarytoolbarreset\", function (evt) {\r\n        if (evt.source === _this4) {\r\n          spreadModeChanged({\r\n            mode: _ui_utils.SpreadMode.NONE\r\n          });\r\n        }\r\n      });\r\n    }\r\n  }, {\r\n    key: \"open\",\r\n    value: function open() {\r\n      if (this.opened) {\r\n        return;\r\n      }\r\n\r\n      this.opened = true;\r\n\r\n      this._setMaxHeight();\r\n\r\n      this.toggleButton.classList.add(\"toggled\");\r\n      this.toggleButton.setAttribute(\"aria-expanded\", \"true\");\r\n      this.toolbar.classList.remove(\"hidden\");\r\n    }\r\n  }, {\r\n    key: \"close\",\r\n    value: function close() {\r\n      if (!this.opened) {\r\n        return;\r\n      }\r\n\r\n      this.opened = false;\r\n      this.toolbar.classList.add(\"hidden\");\r\n      this.toggleButton.classList.remove(\"toggled\");\r\n      this.toggleButton.setAttribute(\"aria-expanded\", \"false\");\r\n    }\r\n  }, {\r\n    key: \"toggle\",\r\n    value: function toggle() {\r\n      if (this.opened) {\r\n        this.close();\r\n      } else {\r\n        this.open();\r\n      }\r\n    }\r\n  }, {\r\n    key: \"_setMaxHeight\",\r\n    value: function _setMaxHeight() {\r\n      if (!this.opened) {\r\n        return;\r\n      }\r\n\r\n      this.containerHeight = this.mainContainer.clientHeight;\r\n\r\n      if (this.containerHeight === this.previousContainerHeight) {\r\n        return;\r\n      }\r\n\r\n      this.toolbarButtonContainer.style.maxHeight = \"\".concat(this.containerHeight - _ui_utils.SCROLLBAR_PADDING, \"px\");\r\n      this.previousContainerHeight = this.containerHeight;\r\n    }\r\n  }]);\r\n\r\n  return SecondaryToolbar;\r\n}();\r\n\r\nexports.SecondaryToolbar = SecondaryToolbar;\r\n\r\n/***/ }),\r\n/* 34 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFSinglePageViewer = void 0;\r\n\r\nvar _base_viewer = __webpack_require__(29);\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\r\n\r\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\nvar PDFSinglePageViewer = /*#__PURE__*/function (_BaseViewer) {\r\n  _inherits(PDFSinglePageViewer, _BaseViewer);\r\n\r\n  var _super = _createSuper(PDFSinglePageViewer);\r\n\r\n  function PDFSinglePageViewer(options) {\r\n    var _this;\r\n\r\n    _classCallCheck(this, PDFSinglePageViewer);\r\n\r\n    _this = _super.call(this, options);\r\n\r\n    _this.eventBus._on(\"pagesinit\", function (evt) {\r\n      _this._ensurePageViewVisible();\r\n    });\r\n\r\n    return _this;\r\n  }\r\n\r\n  _createClass(PDFSinglePageViewer, [{\r\n    key: \"_viewerElement\",\r\n    get: function get() {\r\n      return (0, _pdfjsLib.shadow)(this, \"_viewerElement\", this._shadowViewer);\r\n    }\r\n  }, {\r\n    key: \"_pageWidthScaleFactor\",\r\n    get: function get() {\r\n      return 1;\r\n    }\r\n  }, {\r\n    key: \"_resetView\",\r\n    value: function _resetView() {\r\n      _get(_getPrototypeOf(PDFSinglePageViewer.prototype), \"_resetView\", this).call(this);\r\n\r\n      this._previousPageNumber = 1;\r\n      this._shadowViewer = document.createDocumentFragment();\r\n      this._updateScrollDown = null;\r\n    }\r\n  }, {\r\n    key: \"_ensurePageViewVisible\",\r\n    value: function _ensurePageViewVisible() {\r\n      var pageView = this._pages[this._currentPageNumber - 1];\r\n      var previousPageView = this._pages[this._previousPageNumber - 1];\r\n      var viewerNodes = this.viewer.childNodes;\r\n\r\n      switch (viewerNodes.length) {\r\n        case 0:\r\n          this.viewer.appendChild(pageView.div);\r\n          break;\r\n\r\n        case 1:\r\n          if (viewerNodes[0] !== previousPageView.div) {\r\n            throw new Error(\"_ensurePageViewVisible: Unexpected previously visible page.\");\r\n          }\r\n\r\n          if (pageView === previousPageView) {\r\n            break;\r\n          }\r\n\r\n          this._shadowViewer.appendChild(previousPageView.div);\r\n\r\n          this.viewer.appendChild(pageView.div);\r\n          this.container.scrollTop = 0;\r\n          break;\r\n\r\n        default:\r\n          throw new Error(\"_ensurePageViewVisible: Only one page should be visible at a time.\");\r\n      }\r\n\r\n      this._previousPageNumber = this._currentPageNumber;\r\n    }\r\n  }, {\r\n    key: \"_scrollUpdate\",\r\n    value: function _scrollUpdate() {\r\n      if (this._updateScrollDown) {\r\n        this._updateScrollDown();\r\n      }\r\n\r\n      _get(_getPrototypeOf(PDFSinglePageViewer.prototype), \"_scrollUpdate\", this).call(this);\r\n    }\r\n  }, {\r\n    key: \"_scrollIntoView\",\r\n    value: function _scrollIntoView(_ref) {\r\n      var _this2 = this;\r\n\r\n      var pageDiv = _ref.pageDiv,\r\n          _ref$pageSpot = _ref.pageSpot,\r\n          pageSpot = _ref$pageSpot === void 0 ? null : _ref$pageSpot,\r\n          _ref$pageNumber = _ref.pageNumber,\r\n          pageNumber = _ref$pageNumber === void 0 ? null : _ref$pageNumber;\r\n\r\n      if (pageNumber) {\r\n        this._setCurrentPageNumber(pageNumber);\r\n      }\r\n\r\n      var scrolledDown = this._currentPageNumber >= this._previousPageNumber;\r\n\r\n      this._ensurePageViewVisible();\r\n\r\n      this.update();\r\n\r\n      _get(_getPrototypeOf(PDFSinglePageViewer.prototype), \"_scrollIntoView\", this).call(this, {\r\n        pageDiv: pageDiv,\r\n        pageSpot: pageSpot,\r\n        pageNumber: pageNumber\r\n      });\r\n\r\n      this._updateScrollDown = function () {\r\n        _this2.scroll.down = scrolledDown;\r\n        _this2._updateScrollDown = null;\r\n      };\r\n    }\r\n  }, {\r\n    key: \"_getVisiblePages\",\r\n    value: function _getVisiblePages() {\r\n      return this._getCurrentVisiblePage();\r\n    }\r\n  }, {\r\n    key: \"_updateHelper\",\r\n    value: function _updateHelper(visiblePages) {}\r\n  }, {\r\n    key: \"_isScrollModeHorizontal\",\r\n    get: function get() {\r\n      return (0, _pdfjsLib.shadow)(this, \"_isScrollModeHorizontal\", false);\r\n    }\r\n  }, {\r\n    key: \"_updateScrollMode\",\r\n    value: function _updateScrollMode() {}\r\n  }, {\r\n    key: \"_updateSpreadMode\",\r\n    value: function _updateSpreadMode() {}\r\n  }, {\r\n    key: \"_getPageAdvance\",\r\n    value: function _getPageAdvance() {\r\n      return 1;\r\n    }\r\n  }]);\r\n\r\n  return PDFSinglePageViewer;\r\n}(_base_viewer.BaseViewer);\r\n\r\nexports.PDFSinglePageViewer = PDFSinglePageViewer;\r\n\r\n/***/ }),\r\n/* 35 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.Toolbar = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\r\n\r\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\r\n\r\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar PAGE_NUMBER_LOADING_INDICATOR = \"visiblePageIsLoading\";\r\nvar SCALE_SELECT_CONTAINER_WIDTH = 140;\r\nvar SCALE_SELECT_WIDTH = 162;\r\n\r\nvar Toolbar = /*#__PURE__*/function () {\r\n  function Toolbar(options, eventBus) {\r\n    var l10n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _ui_utils.NullL10n;\r\n\r\n    _classCallCheck(this, Toolbar);\r\n\r\n    this.toolbar = options.container;\r\n    this.eventBus = eventBus;\r\n    this.l10n = l10n;\r\n    this.buttons = [{\r\n      element: options.previous,\r\n      eventName: \"previouspage\"\r\n    }, {\r\n      element: options.next,\r\n      eventName: \"nextpage\"\r\n    }, {\r\n      element: options.zoomIn,\r\n      eventName: \"zoomin\"\r\n    }, {\r\n      element: options.zoomOut,\r\n      eventName: \"zoomout\"\r\n    }, {\r\n      element: options.openFile,\r\n      eventName: \"openfile\"\r\n    }, {\r\n      element: options.print,\r\n      eventName: \"print\"\r\n    }, {\r\n      element: options.presentationModeButton,\r\n      eventName: \"presentationmode\"\r\n    }, {\r\n      element: options.download,\r\n      eventName: \"download\"\r\n    }, {\r\n      element: options.viewBookmark,\r\n      eventName: null\r\n    }];\r\n    this.items = {\r\n      numPages: options.numPages,\r\n      pageNumber: options.pageNumber,\r\n      scaleSelectContainer: options.scaleSelectContainer,\r\n      scaleSelect: options.scaleSelect,\r\n      customScaleOption: options.customScaleOption,\r\n      previous: options.previous,\r\n      next: options.next,\r\n      zoomIn: options.zoomIn,\r\n      zoomOut: options.zoomOut\r\n    };\r\n    this._wasLocalized = false;\r\n    this.reset();\r\n\r\n    this._bindListeners();\r\n  }\r\n\r\n  _createClass(Toolbar, [{\r\n    key: \"setPageNumber\",\r\n    value: function setPageNumber(pageNumber, pageLabel) {\r\n      this.pageNumber = pageNumber;\r\n      this.pageLabel = pageLabel;\r\n\r\n      this._updateUIState(false);\r\n    }\r\n  }, {\r\n    key: \"setPagesCount\",\r\n    value: function setPagesCount(pagesCount, hasPageLabels) {\r\n      this.pagesCount = pagesCount;\r\n      this.hasPageLabels = hasPageLabels;\r\n\r\n      this._updateUIState(true);\r\n    }\r\n  }, {\r\n    key: \"setPageScale\",\r\n    value: function setPageScale(pageScaleValue, pageScale) {\r\n      this.pageScaleValue = (pageScaleValue || pageScale).toString();\r\n      this.pageScale = pageScale;\r\n\r\n      this._updateUIState(false);\r\n    }\r\n  }, {\r\n    key: \"reset\",\r\n    value: function reset() {\r\n      this.pageNumber = 0;\r\n      this.pageLabel = null;\r\n      this.hasPageLabels = false;\r\n      this.pagesCount = 0;\r\n      this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;\r\n      this.pageScale = _ui_utils.DEFAULT_SCALE;\r\n\r\n      this._updateUIState(true);\r\n\r\n      this.updateLoadingIndicatorState();\r\n    }\r\n  }, {\r\n    key: \"_bindListeners\",\r\n    value: function _bindListeners() {\r\n      var _this = this;\r\n\r\n      var _this$items = this.items,\r\n          pageNumber = _this$items.pageNumber,\r\n          scaleSelect = _this$items.scaleSelect;\r\n      var self = this;\r\n\r\n      var _iterator = _createForOfIteratorHelper(this.buttons),\r\n          _step;\r\n\r\n      try {\r\n        var _loop = function _loop() {\r\n          var _step$value = _step.value,\r\n              element = _step$value.element,\r\n              eventName = _step$value.eventName;\r\n          element.addEventListener(\"click\", function (evt) {\r\n            if (eventName !== null) {\r\n              _this.eventBus.dispatch(eventName, {\r\n                source: _this\r\n              });\r\n            }\r\n          });\r\n        };\r\n\r\n        for (_iterator.s(); !(_step = _iterator.n()).done;) {\r\n          _loop();\r\n        }\r\n      } catch (err) {\r\n        _iterator.e(err);\r\n      } finally {\r\n        _iterator.f();\r\n      }\r\n\r\n      pageNumber.addEventListener(\"click\", function () {\r\n        this.select();\r\n      });\r\n      pageNumber.addEventListener(\"change\", function () {\r\n        self.eventBus.dispatch(\"pagenumberchanged\", {\r\n          source: self,\r\n          value: this.value\r\n        });\r\n      });\r\n      scaleSelect.addEventListener(\"change\", function () {\r\n        if (this.value === \"custom\") {\r\n          return;\r\n        }\r\n\r\n        self.eventBus.dispatch(\"scalechanged\", {\r\n          source: self,\r\n          value: this.value\r\n        });\r\n      });\r\n      scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler;\r\n\r\n      this.eventBus._on(\"localized\", function () {\r\n        _this._wasLocalized = true;\r\n\r\n        _this._adjustScaleWidth();\r\n\r\n        _this._updateUIState(true);\r\n      });\r\n    }\r\n  }, {\r\n    key: \"_updateUIState\",\r\n    value: function _updateUIState() {\r\n      var resetNumPages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n\r\n      if (!this._wasLocalized) {\r\n        return;\r\n      }\r\n\r\n      var pageNumber = this.pageNumber,\r\n          pagesCount = this.pagesCount,\r\n          pageScaleValue = this.pageScaleValue,\r\n          pageScale = this.pageScale,\r\n          items = this.items;\r\n\r\n      if (resetNumPages) {\r\n        if (this.hasPageLabels) {\r\n          items.pageNumber.type = \"text\";\r\n        } else {\r\n          items.pageNumber.type = \"number\";\r\n          this.l10n.get(\"of_pages\", {\r\n            pagesCount: pagesCount\r\n          }, \"of {{pagesCount}}\").then(function (msg) {\r\n            items.numPages.textContent = msg;\r\n          });\r\n        }\r\n\r\n        items.pageNumber.max = pagesCount;\r\n      }\r\n\r\n      if (this.hasPageLabels) {\r\n        items.pageNumber.value = this.pageLabel;\r\n        this.l10n.get(\"page_of_pages\", {\r\n          pageNumber: pageNumber,\r\n          pagesCount: pagesCount\r\n        }, \"({{pageNumber}} of {{pagesCount}})\").then(function (msg) {\r\n          items.numPages.textContent = msg;\r\n        });\r\n      } else {\r\n        items.pageNumber.value = pageNumber;\r\n      }\r\n\r\n      items.previous.disabled = pageNumber <= 1;\r\n      items.next.disabled = pageNumber >= pagesCount;\r\n      items.zoomOut.disabled = pageScale <= _ui_utils.MIN_SCALE;\r\n      items.zoomIn.disabled = pageScale >= _ui_utils.MAX_SCALE;\r\n      var customScale = Math.round(pageScale * 10000) / 100;\r\n      this.l10n.get(\"page_scale_percent\", {\r\n        scale: customScale\r\n      }, \"{{scale}}%\").then(function (msg) {\r\n        var predefinedValueFound = false;\r\n\r\n        var _iterator2 = _createForOfIteratorHelper(items.scaleSelect.options),\r\n            _step2;\r\n\r\n        try {\r\n          for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\r\n            var option = _step2.value;\r\n\r\n            if (option.value !== pageScaleValue) {\r\n              option.selected = false;\r\n              continue;\r\n            }\r\n\r\n            option.selected = true;\r\n            predefinedValueFound = true;\r\n          }\r\n        } catch (err) {\r\n          _iterator2.e(err);\r\n        } finally {\r\n          _iterator2.f();\r\n        }\r\n\r\n        if (!predefinedValueFound) {\r\n          items.customScaleOption.textContent = msg;\r\n          items.customScaleOption.selected = true;\r\n        }\r\n      });\r\n    }\r\n  }, {\r\n    key: \"updateLoadingIndicatorState\",\r\n    value: function updateLoadingIndicatorState() {\r\n      var loading = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\r\n      var pageNumberInput = this.items.pageNumber;\r\n      pageNumberInput.classList.toggle(PAGE_NUMBER_LOADING_INDICATOR, loading);\r\n    }\r\n  }, {\r\n    key: \"_adjustScaleWidth\",\r\n    value: function () {\r\n      var _adjustScaleWidth2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var items, l10n, predefinedValuesPromise, canvas, ctx, _getComputedStyle, fontSize, fontFamily, maxWidth, _iterator3, _step3, predefinedValue, _ctx$measureText, width, overflow;\r\n\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                items = this.items, l10n = this.l10n;\r\n                predefinedValuesPromise = Promise.all([l10n.get(\"page_scale_auto\", null, \"Automatic Zoom\"), l10n.get(\"page_scale_actual\", null, \"Actual Size\"), l10n.get(\"page_scale_fit\", null, \"Page Fit\"), l10n.get(\"page_scale_width\", null, \"Page Width\")]);\r\n                canvas = document.createElement(\"canvas\");\r\n                canvas.mozOpaque = true;\r\n                ctx = canvas.getContext(\"2d\", {\r\n                  alpha: false\r\n                });\r\n                _context.next = 7;\r\n                return _ui_utils.animationStarted;\r\n\r\n              case 7:\r\n                _getComputedStyle = getComputedStyle(items.scaleSelect), fontSize = _getComputedStyle.fontSize, fontFamily = _getComputedStyle.fontFamily;\r\n                ctx.font = \"\".concat(fontSize, \" \").concat(fontFamily);\r\n                maxWidth = 0;\r\n                _context.t0 = _createForOfIteratorHelper;\r\n                _context.next = 13;\r\n                return predefinedValuesPromise;\r\n\r\n              case 13:\r\n                _context.t1 = _context.sent;\r\n                _iterator3 = (0, _context.t0)(_context.t1);\r\n\r\n                try {\r\n                  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\r\n                    predefinedValue = _step3.value;\r\n                    _ctx$measureText = ctx.measureText(predefinedValue), width = _ctx$measureText.width;\r\n\r\n                    if (width > maxWidth) {\r\n                      maxWidth = width;\r\n                    }\r\n                  }\r\n                } catch (err) {\r\n                  _iterator3.e(err);\r\n                } finally {\r\n                  _iterator3.f();\r\n                }\r\n\r\n                overflow = SCALE_SELECT_WIDTH - SCALE_SELECT_CONTAINER_WIDTH;\r\n                maxWidth += 2 * overflow;\r\n\r\n                if (maxWidth > SCALE_SELECT_CONTAINER_WIDTH) {\r\n                  items.scaleSelect.style.width = \"\".concat(maxWidth + overflow, \"px\");\r\n                  items.scaleSelectContainer.style.width = \"\".concat(maxWidth, \"px\");\r\n                }\r\n\r\n                canvas.width = 0;\r\n                canvas.height = 0;\r\n                canvas = ctx = null;\r\n\r\n              case 22:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function _adjustScaleWidth() {\r\n        return _adjustScaleWidth2.apply(this, arguments);\r\n      }\r\n\r\n      return _adjustScaleWidth;\r\n    }()\r\n  }]);\r\n\r\n  return Toolbar;\r\n}();\r\n\r\nexports.Toolbar = Toolbar;\r\n\r\n/***/ }),\r\n/* 36 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.ViewHistory = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20;\r\n\r\nvar ViewHistory = /*#__PURE__*/function () {\r\n  function ViewHistory(fingerprint) {\r\n    var _this = this;\r\n\r\n    var cacheSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_VIEW_HISTORY_CACHE_SIZE;\r\n\r\n    _classCallCheck(this, ViewHistory);\r\n\r\n    this.fingerprint = fingerprint;\r\n    this.cacheSize = cacheSize;\r\n    this._initializedPromise = this._readFromStorage().then(function (databaseStr) {\r\n      var database = JSON.parse(databaseStr || \"{}\");\r\n      var index = -1;\r\n\r\n      if (!Array.isArray(database.files)) {\r\n        database.files = [];\r\n      } else {\r\n        while (database.files.length >= _this.cacheSize) {\r\n          database.files.shift();\r\n        }\r\n\r\n        for (var i = 0, ii = database.files.length; i < ii; i++) {\r\n          var branch = database.files[i];\r\n\r\n          if (branch.fingerprint === _this.fingerprint) {\r\n            index = i;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n\r\n      if (index === -1) {\r\n        index = database.files.push({\r\n          fingerprint: _this.fingerprint\r\n        }) - 1;\r\n      }\r\n\r\n      _this.file = database.files[index];\r\n      _this.database = database;\r\n    });\r\n  }\r\n\r\n  _createClass(ViewHistory, [{\r\n    key: \"_writeToStorage\",\r\n    value: function () {\r\n      var _writeToStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var databaseStr;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                databaseStr = JSON.stringify(this.database);\r\n                localStorage.setItem(\"pdfjs.history\", databaseStr);\r\n\r\n              case 2:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function _writeToStorage() {\r\n        return _writeToStorage2.apply(this, arguments);\r\n      }\r\n\r\n      return _writeToStorage;\r\n    }()\r\n  }, {\r\n    key: \"_readFromStorage\",\r\n    value: function () {\r\n      var _readFromStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                return _context2.abrupt(\"return\", localStorage.getItem(\"pdfjs.history\"));\r\n\r\n              case 1:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2);\r\n      }));\r\n\r\n      function _readFromStorage() {\r\n        return _readFromStorage2.apply(this, arguments);\r\n      }\r\n\r\n      return _readFromStorage;\r\n    }()\r\n  }, {\r\n    key: \"set\",\r\n    value: function () {\r\n      var _set = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3(name, val) {\r\n        return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\r\n          while (1) {\r\n            switch (_context3.prev = _context3.next) {\r\n              case 0:\r\n                _context3.next = 2;\r\n                return this._initializedPromise;\r\n\r\n              case 2:\r\n                this.file[name] = val;\r\n                return _context3.abrupt(\"return\", this._writeToStorage());\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context3.stop();\r\n            }\r\n          }\r\n        }, _callee3, this);\r\n      }));\r\n\r\n      function set(_x, _x2) {\r\n        return _set.apply(this, arguments);\r\n      }\r\n\r\n      return set;\r\n    }()\r\n  }, {\r\n    key: \"setMultiple\",\r\n    value: function () {\r\n      var _setMultiple = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(properties) {\r\n        var name;\r\n        return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\r\n          while (1) {\r\n            switch (_context4.prev = _context4.next) {\r\n              case 0:\r\n                _context4.next = 2;\r\n                return this._initializedPromise;\r\n\r\n              case 2:\r\n                for (name in properties) {\r\n                  this.file[name] = properties[name];\r\n                }\r\n\r\n                return _context4.abrupt(\"return\", this._writeToStorage());\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context4.stop();\r\n            }\r\n          }\r\n        }, _callee4, this);\r\n      }));\r\n\r\n      function setMultiple(_x3) {\r\n        return _setMultiple.apply(this, arguments);\r\n      }\r\n\r\n      return setMultiple;\r\n    }()\r\n  }, {\r\n    key: \"get\",\r\n    value: function () {\r\n      var _get = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee5(name, defaultValue) {\r\n        var val;\r\n        return _regenerator[\"default\"].wrap(function _callee5$(_context5) {\r\n          while (1) {\r\n            switch (_context5.prev = _context5.next) {\r\n              case 0:\r\n                _context5.next = 2;\r\n                return this._initializedPromise;\r\n\r\n              case 2:\r\n                val = this.file[name];\r\n                return _context5.abrupt(\"return\", val !== undefined ? val : defaultValue);\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context5.stop();\r\n            }\r\n          }\r\n        }, _callee5, this);\r\n      }));\r\n\r\n      function get(_x4, _x5) {\r\n        return _get.apply(this, arguments);\r\n      }\r\n\r\n      return get;\r\n    }()\r\n  }, {\r\n    key: \"getMultiple\",\r\n    value: function () {\r\n      var _getMultiple = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee6(properties) {\r\n        var values, name, val;\r\n        return _regenerator[\"default\"].wrap(function _callee6$(_context6) {\r\n          while (1) {\r\n            switch (_context6.prev = _context6.next) {\r\n              case 0:\r\n                _context6.next = 2;\r\n                return this._initializedPromise;\r\n\r\n              case 2:\r\n                values = Object.create(null);\r\n\r\n                for (name in properties) {\r\n                  val = this.file[name];\r\n                  values[name] = val !== undefined ? val : properties[name];\r\n                }\r\n\r\n                return _context6.abrupt(\"return\", values);\r\n\r\n              case 5:\r\n              case \"end\":\r\n                return _context6.stop();\r\n            }\r\n          }\r\n        }, _callee6, this);\r\n      }));\r\n\r\n      function getMultiple(_x6) {\r\n        return _getMultiple.apply(this, arguments);\r\n      }\r\n\r\n      return getMultiple;\r\n    }()\r\n  }]);\r\n\r\n  return ViewHistory;\r\n}();\r\n\r\nexports.ViewHistory = ViewHistory;\r\n\r\n/***/ }),\r\n/* 37 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.GenericCom = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nvar _app = __webpack_require__(3);\r\n\r\nvar _preferences = __webpack_require__(38);\r\n\r\nvar _download_manager = __webpack_require__(39);\r\n\r\nvar _genericl10n = __webpack_require__(40);\r\n\r\nvar _generic_scripting = __webpack_require__(42);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\r\n\r\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\r\n\r\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\r\n\r\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\r\n\r\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\r\n\r\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\r\n\r\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\r\n\r\n;\r\nvar GenericCom = {};\r\nexports.GenericCom = GenericCom;\r\n\r\nvar GenericPreferences = /*#__PURE__*/function (_BasePreferences) {\r\n  _inherits(GenericPreferences, _BasePreferences);\r\n\r\n  var _super = _createSuper(GenericPreferences);\r\n\r\n  function GenericPreferences() {\r\n    _classCallCheck(this, GenericPreferences);\r\n\r\n    return _super.apply(this, arguments);\r\n  }\r\n\r\n  _createClass(GenericPreferences, [{\r\n    key: \"_writeToStorage\",\r\n    value: function () {\r\n      var _writeToStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(prefObj) {\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                localStorage.setItem(\"pdfjs.preferences\", JSON.stringify(prefObj));\r\n\r\n              case 1:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee);\r\n      }));\r\n\r\n      function _writeToStorage(_x) {\r\n        return _writeToStorage2.apply(this, arguments);\r\n      }\r\n\r\n      return _writeToStorage;\r\n    }()\r\n  }, {\r\n    key: \"_readFromStorage\",\r\n    value: function () {\r\n      var _readFromStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(prefObj) {\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                return _context2.abrupt(\"return\", JSON.parse(localStorage.getItem(\"pdfjs.preferences\")));\r\n\r\n              case 1:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2);\r\n      }));\r\n\r\n      function _readFromStorage(_x2) {\r\n        return _readFromStorage2.apply(this, arguments);\r\n      }\r\n\r\n      return _readFromStorage;\r\n    }()\r\n  }]);\r\n\r\n  return GenericPreferences;\r\n}(_preferences.BasePreferences);\r\n\r\nvar GenericExternalServices = /*#__PURE__*/function (_DefaultExternalServi) {\r\n  _inherits(GenericExternalServices, _DefaultExternalServi);\r\n\r\n  var _super2 = _createSuper(GenericExternalServices);\r\n\r\n  function GenericExternalServices() {\r\n    _classCallCheck(this, GenericExternalServices);\r\n\r\n    return _super2.apply(this, arguments);\r\n  }\r\n\r\n  _createClass(GenericExternalServices, null, [{\r\n    key: \"createDownloadManager\",\r\n    value: function createDownloadManager(options) {\r\n      return new _download_manager.DownloadManager();\r\n    }\r\n  }, {\r\n    key: \"createPreferences\",\r\n    value: function createPreferences() {\r\n      return new GenericPreferences();\r\n    }\r\n  }, {\r\n    key: \"createL10n\",\r\n    value: function createL10n(_ref) {\r\n      var _ref$locale = _ref.locale,\r\n          locale = _ref$locale === void 0 ? \"en-US\" : _ref$locale;\r\n      return new _genericl10n.GenericL10n(locale);\r\n    }\r\n  }, {\r\n    key: \"createScripting\",\r\n    value: function createScripting(_ref2) {\r\n      var sandboxBundleSrc = _ref2.sandboxBundleSrc;\r\n      return new _generic_scripting.GenericScripting(sandboxBundleSrc);\r\n    }\r\n  }]);\r\n\r\n  return GenericExternalServices;\r\n}(_app.DefaultExternalServices);\r\n\r\n_app.PDFViewerApplication.externalServices = GenericExternalServices;\r\n\r\n/***/ }),\r\n/* 38 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.BasePreferences = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nvar _app_options = __webpack_require__(1);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar BasePreferences = /*#__PURE__*/function () {\r\n  function BasePreferences() {\r\n    var _this = this;\r\n\r\n    _classCallCheck(this, BasePreferences);\r\n\r\n    if (this.constructor === BasePreferences) {\r\n      throw new Error(\"Cannot initialize BasePreferences.\");\r\n    }\r\n\r\n    Object.defineProperty(this, \"defaults\", {\r\n      value: Object.freeze({\r\n        \"cursorToolOnLoad\": 0,\r\n        \"defaultZoomValue\": \"\",\r\n        \"disablePageLabels\": false,\r\n        \"enablePermissions\": false,\r\n        \"enablePrintAutoRotate\": false,\r\n        \"enableScripting\": false,\r\n        \"enableWebGL\": false,\r\n        \"externalLinkTarget\": 0,\r\n        \"historyUpdateUrl\": false,\r\n        \"ignoreDestinationZoom\": false,\r\n        \"pdfBugEnabled\": false,\r\n        \"renderer\": \"canvas\",\r\n        \"renderInteractiveForms\": true,\r\n        \"sidebarViewOnLoad\": -1,\r\n        \"scrollModeOnLoad\": -1,\r\n        \"spreadModeOnLoad\": -1,\r\n        \"textLayerMode\": 1,\r\n        \"useOnlyCssZoom\": false,\r\n        \"viewerCssTheme\": 0,\r\n        \"viewOnLoad\": 0,\r\n        \"disableAutoFetch\": false,\r\n        \"disableFontFace\": false,\r\n        \"disableRange\": false,\r\n        \"disableStream\": false\r\n      }),\r\n      writable: false,\r\n      enumerable: true,\r\n      configurable: false\r\n    });\r\n    this.prefs = Object.assign(Object.create(null), this.defaults);\r\n    this._initializedPromise = this._readFromStorage(this.defaults).then(function (prefs) {\r\n      if (!prefs) {\r\n        return;\r\n      }\r\n\r\n      for (var name in prefs) {\r\n        var defaultValue = _this.defaults[name],\r\n            prefValue = prefs[name];\r\n\r\n        if (defaultValue === undefined || _typeof(prefValue) !== _typeof(defaultValue)) {\r\n          continue;\r\n        }\r\n\r\n        _this.prefs[name] = prefValue;\r\n      }\r\n    });\r\n  }\r\n\r\n  _createClass(BasePreferences, [{\r\n    key: \"_writeToStorage\",\r\n    value: function () {\r\n      var _writeToStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(prefObj) {\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                throw new Error(\"Not implemented: _writeToStorage\");\r\n\r\n              case 1:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee);\r\n      }));\r\n\r\n      function _writeToStorage(_x) {\r\n        return _writeToStorage2.apply(this, arguments);\r\n      }\r\n\r\n      return _writeToStorage;\r\n    }()\r\n  }, {\r\n    key: \"_readFromStorage\",\r\n    value: function () {\r\n      var _readFromStorage2 = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(prefObj) {\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                throw new Error(\"Not implemented: _readFromStorage\");\r\n\r\n              case 1:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2);\r\n      }));\r\n\r\n      function _readFromStorage(_x2) {\r\n        return _readFromStorage2.apply(this, arguments);\r\n      }\r\n\r\n      return _readFromStorage;\r\n    }()\r\n  }, {\r\n    key: \"reset\",\r\n    value: function () {\r\n      var _reset = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3() {\r\n        return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\r\n          while (1) {\r\n            switch (_context3.prev = _context3.next) {\r\n              case 0:\r\n                _context3.next = 2;\r\n                return this._initializedPromise;\r\n\r\n              case 2:\r\n                this.prefs = Object.assign(Object.create(null), this.defaults);\r\n                return _context3.abrupt(\"return\", this._writeToStorage(this.defaults));\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context3.stop();\r\n            }\r\n          }\r\n        }, _callee3, this);\r\n      }));\r\n\r\n      function reset() {\r\n        return _reset.apply(this, arguments);\r\n      }\r\n\r\n      return reset;\r\n    }()\r\n  }, {\r\n    key: \"set\",\r\n    value: function () {\r\n      var _set = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(name, value) {\r\n        var defaultValue, valueType, defaultType;\r\n        return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\r\n          while (1) {\r\n            switch (_context4.prev = _context4.next) {\r\n              case 0:\r\n                _context4.next = 2;\r\n                return this._initializedPromise;\r\n\r\n              case 2:\r\n                defaultValue = this.defaults[name];\r\n\r\n                if (!(defaultValue === undefined)) {\r\n                  _context4.next = 7;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"Set preference: \\\"\".concat(name, \"\\\" is undefined.\"));\r\n\r\n              case 7:\r\n                if (!(value === undefined)) {\r\n                  _context4.next = 9;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"Set preference: no value is specified.\");\r\n\r\n              case 9:\r\n                valueType = _typeof(value);\r\n                defaultType = _typeof(defaultValue);\r\n\r\n                if (!(valueType !== defaultType)) {\r\n                  _context4.next = 19;\r\n                  break;\r\n                }\r\n\r\n                if (!(valueType === \"number\" && defaultType === \"string\")) {\r\n                  _context4.next = 16;\r\n                  break;\r\n                }\r\n\r\n                value = value.toString();\r\n                _context4.next = 17;\r\n                break;\r\n\r\n              case 16:\r\n                throw new Error(\"Set preference: \\\"\".concat(value, \"\\\" is a \").concat(valueType, \", \") + \"expected a \".concat(defaultType, \".\"));\r\n\r\n              case 17:\r\n                _context4.next = 21;\r\n                break;\r\n\r\n              case 19:\r\n                if (!(valueType === \"number\" && !Number.isInteger(value))) {\r\n                  _context4.next = 21;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"Set preference: \\\"\".concat(value, \"\\\" must be an integer.\"));\r\n\r\n              case 21:\r\n                this.prefs[name] = value;\r\n                return _context4.abrupt(\"return\", this._writeToStorage(this.prefs));\r\n\r\n              case 23:\r\n              case \"end\":\r\n                return _context4.stop();\r\n            }\r\n          }\r\n        }, _callee4, this);\r\n      }));\r\n\r\n      function set(_x3, _x4) {\r\n        return _set.apply(this, arguments);\r\n      }\r\n\r\n      return set;\r\n    }()\r\n  }, {\r\n    key: \"get\",\r\n    value: function () {\r\n      var _get = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee5(name) {\r\n        var defaultValue, prefValue;\r\n        return _regenerator[\"default\"].wrap(function _callee5$(_context5) {\r\n          while (1) {\r\n            switch (_context5.prev = _context5.next) {\r\n              case 0:\r\n                _context5.next = 2;\r\n                return this._initializedPromise;\r\n\r\n              case 2:\r\n                defaultValue = this.defaults[name];\r\n\r\n                if (!(defaultValue === undefined)) {\r\n                  _context5.next = 7;\r\n                  break;\r\n                }\r\n\r\n                throw new Error(\"Get preference: \\\"\".concat(name, \"\\\" is undefined.\"));\r\n\r\n              case 7:\r\n                prefValue = this.prefs[name];\r\n\r\n                if (!(prefValue !== undefined)) {\r\n                  _context5.next = 10;\r\n                  break;\r\n                }\r\n\r\n                return _context5.abrupt(\"return\", prefValue);\r\n\r\n              case 10:\r\n                return _context5.abrupt(\"return\", defaultValue);\r\n\r\n              case 11:\r\n              case \"end\":\r\n                return _context5.stop();\r\n            }\r\n          }\r\n        }, _callee5, this);\r\n      }));\r\n\r\n      function get(_x5) {\r\n        return _get.apply(this, arguments);\r\n      }\r\n\r\n      return get;\r\n    }()\r\n  }, {\r\n    key: \"getAll\",\r\n    value: function () {\r\n      var _getAll = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee6() {\r\n        return _regenerator[\"default\"].wrap(function _callee6$(_context6) {\r\n          while (1) {\r\n            switch (_context6.prev = _context6.next) {\r\n              case 0:\r\n                _context6.next = 2;\r\n                return this._initializedPromise;\r\n\r\n              case 2:\r\n                return _context6.abrupt(\"return\", Object.assign(Object.create(null), this.defaults, this.prefs));\r\n\r\n              case 3:\r\n              case \"end\":\r\n                return _context6.stop();\r\n            }\r\n          }\r\n        }, _callee6, this);\r\n      }));\r\n\r\n      function getAll() {\r\n        return _getAll.apply(this, arguments);\r\n      }\r\n\r\n      return getAll;\r\n    }()\r\n  }]);\r\n\r\n  return BasePreferences;\r\n}();\r\n\r\nexports.BasePreferences = BasePreferences;\r\n\r\n/***/ }),\r\n/* 39 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.DownloadManager = void 0;\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nvar _viewer_compatibility = __webpack_require__(2);\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\n;\r\n\r\nfunction _download(blobUrl, filename) {\r\n  var a = document.createElement(\"a\");\r\n\r\n  if (!a.click) {\r\n    throw new Error('DownloadManager: \"a.click()\" is not supported.');\r\n  }\r\n\r\n  a.href = blobUrl;\r\n  a.target = \"_parent\";\r\n\r\n  if (\"download\" in a) {\r\n    a.download = filename;\r\n  }\r\n\r\n  (document.body || document.documentElement).appendChild(a);\r\n  a.click();\r\n  a.remove();\r\n}\r\n\r\nvar DownloadManager = /*#__PURE__*/function () {\r\n  function DownloadManager() {\r\n    _classCallCheck(this, DownloadManager);\r\n  }\r\n\r\n  _createClass(DownloadManager, [{\r\n    key: \"downloadUrl\",\r\n    value: function downloadUrl(url, filename) {\r\n      if (!(0, _pdfjsLib.createValidAbsoluteUrl)(url, \"http://example.com\")) {\r\n        return;\r\n      }\r\n\r\n      _download(url + \"#pdfjs.action=download\", filename);\r\n    }\r\n  }, {\r\n    key: \"downloadData\",\r\n    value: function downloadData(data, filename, contentType) {\r\n      var blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType, _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL);\r\n\r\n      _download(blobUrl, filename);\r\n    }\r\n  }, {\r\n    key: \"download\",\r\n    value: function download(blob, url, filename) {\r\n      var sourceEventType = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : \"download\";\r\n\r\n      if (_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {\r\n        this.downloadUrl(url, filename);\r\n        return;\r\n      }\r\n\r\n      var blobUrl = URL.createObjectURL(blob);\r\n\r\n      _download(blobUrl, filename);\r\n    }\r\n  }]);\r\n\r\n  return DownloadManager;\r\n}();\r\n\r\nexports.DownloadManager = DownloadManager;\r\n\r\n/***/ }),\r\n/* 40 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.GenericL10n = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\n__webpack_require__(41);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar webL10n = document.webL10n;\r\n\r\nvar GenericL10n = /*#__PURE__*/function () {\r\n  function GenericL10n(lang) {\r\n    _classCallCheck(this, GenericL10n);\r\n\r\n    this._lang = lang;\r\n    this._ready = new Promise(function (resolve, reject) {\r\n      webL10n.setLanguage(lang, function () {\r\n        resolve(webL10n);\r\n      });\r\n    });\r\n  }\r\n\r\n  _createClass(GenericL10n, [{\r\n    key: \"getLanguage\",\r\n    value: function () {\r\n      var _getLanguage = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\r\n        var l10n;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                _context.next = 2;\r\n                return this._ready;\r\n\r\n              case 2:\r\n                l10n = _context.sent;\r\n                return _context.abrupt(\"return\", l10n.getLanguage());\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function getLanguage() {\r\n        return _getLanguage.apply(this, arguments);\r\n      }\r\n\r\n      return getLanguage;\r\n    }()\r\n  }, {\r\n    key: \"getDirection\",\r\n    value: function () {\r\n      var _getDirection = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\r\n        var l10n;\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                _context2.next = 2;\r\n                return this._ready;\r\n\r\n              case 2:\r\n                l10n = _context2.sent;\r\n                return _context2.abrupt(\"return\", l10n.getDirection());\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this);\r\n      }));\r\n\r\n      function getDirection() {\r\n        return _getDirection.apply(this, arguments);\r\n      }\r\n\r\n      return getDirection;\r\n    }()\r\n  }, {\r\n    key: \"get\",\r\n    value: function () {\r\n      var _get = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3(property, args, fallback) {\r\n        var l10n;\r\n        return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\r\n          while (1) {\r\n            switch (_context3.prev = _context3.next) {\r\n              case 0:\r\n                _context3.next = 2;\r\n                return this._ready;\r\n\r\n              case 2:\r\n                l10n = _context3.sent;\r\n                return _context3.abrupt(\"return\", l10n.get(property, args, fallback));\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context3.stop();\r\n            }\r\n          }\r\n        }, _callee3, this);\r\n      }));\r\n\r\n      function get(_x, _x2, _x3) {\r\n        return _get.apply(this, arguments);\r\n      }\r\n\r\n      return get;\r\n    }()\r\n  }, {\r\n    key: \"translate\",\r\n    value: function () {\r\n      var _translate = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(element) {\r\n        var l10n;\r\n        return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\r\n          while (1) {\r\n            switch (_context4.prev = _context4.next) {\r\n              case 0:\r\n                _context4.next = 2;\r\n                return this._ready;\r\n\r\n              case 2:\r\n                l10n = _context4.sent;\r\n                return _context4.abrupt(\"return\", l10n.translate(element));\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context4.stop();\r\n            }\r\n          }\r\n        }, _callee4, this);\r\n      }));\r\n\r\n      function translate(_x4) {\r\n        return _translate.apply(this, arguments);\r\n      }\r\n\r\n      return translate;\r\n    }()\r\n  }]);\r\n\r\n  return GenericL10n;\r\n}();\r\n\r\nexports.GenericL10n = GenericL10n;\r\n\r\n/***/ }),\r\n/* 41 */\r\n/***/ (() => {\r\n\r\n\r\n\r\ndocument.webL10n = function (window, document, undefined) {\r\n  var gL10nData = {};\r\n  var gTextData = '';\r\n  var gTextProp = 'textContent';\r\n  var gLanguage = '';\r\n  var gMacros = {};\r\n  var gReadyState = 'loading';\r\n  var gAsyncResourceLoading = true;\r\n\r\n  function getL10nResourceLinks() {\r\n    return document.querySelectorAll('link[type=\"application/l10n\"]');\r\n  }\r\n\r\n  function getL10nDictionary() {\r\n    var script = document.querySelector('script[type=\"application/l10n\"]');\r\n    return script ? JSON.parse(script.innerHTML) : null;\r\n  }\r\n\r\n  function getTranslatableChildren(element) {\r\n    return element ? element.querySelectorAll('*[data-l10n-id]') : [];\r\n  }\r\n\r\n  function getL10nAttributes(element) {\r\n    if (!element) return {};\r\n    var l10nId = element.getAttribute('data-l10n-id');\r\n    var l10nArgs = element.getAttribute('data-l10n-args');\r\n    var args = {};\r\n\r\n    if (l10nArgs) {\r\n      try {\r\n        args = JSON.parse(l10nArgs);\r\n      } catch (e) {\r\n        console.warn('could not parse arguments for #' + l10nId);\r\n      }\r\n    }\r\n\r\n    return {\r\n      id: l10nId,\r\n      args: args\r\n    };\r\n  }\r\n\r\n  function xhrLoadText(url, onSuccess, onFailure) {\r\n    onSuccess = onSuccess || function _onSuccess(data) {};\r\n\r\n    onFailure = onFailure || function _onFailure() {};\r\n\r\n    var xhr = new XMLHttpRequest();\r\n    xhr.open('GET', url, gAsyncResourceLoading);\r\n\r\n    if (xhr.overrideMimeType) {\r\n      xhr.overrideMimeType('text/plain; charset=utf-8');\r\n    }\r\n\r\n    xhr.onreadystatechange = function () {\r\n      if (xhr.readyState == 4) {\r\n        if (xhr.status == 200 || xhr.status === 0) {\r\n          onSuccess(xhr.responseText);\r\n        } else {\r\n          onFailure();\r\n        }\r\n      }\r\n    };\r\n\r\n    xhr.onerror = onFailure;\r\n    xhr.ontimeout = onFailure;\r\n\r\n    try {\r\n      xhr.send(null);\r\n    } catch (e) {\r\n      onFailure();\r\n    }\r\n  }\r\n\r\n  function parseResource(href, lang, successCallback, failureCallback) {\r\n    var baseURL = href.replace(/[^\\/]*$/, '') || './';\r\n\r\n    function evalString(text) {\r\n      if (text.lastIndexOf('\\\\') < 0) return text;\r\n      return text.replace(/\\\\\\\\/g, '\\\\').replace(/\\\\n/g, '\\n').replace(/\\\\r/g, '\\r').replace(/\\\\t/g, '\\t').replace(/\\\\b/g, '\\b').replace(/\\\\f/g, '\\f').replace(/\\\\{/g, '{').replace(/\\\\}/g, '}').replace(/\\\\\"/g, '\"').replace(/\\\\'/g, \"'\");\r\n    }\r\n\r\n    function parseProperties(text, parsedPropertiesCallback) {\r\n      var dictionary = {};\r\n      var reBlank = /^\\s*|\\s*$/;\r\n      var reComment = /^\\s*#|^\\s*$/;\r\n      var reSection = /^\\s*\\[(.*)\\]\\s*$/;\r\n      var reImport = /^\\s*@import\\s+url\\((.*)\\)\\s*$/i;\r\n      var reSplit = /^([^=\\s]*)\\s*=\\s*(.+)$/;\r\n\r\n      function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) {\r\n        var entries = rawText.replace(reBlank, '').split(/[\\r\\n]+/);\r\n        var currentLang = '*';\r\n        var genericLang = lang.split('-', 1)[0];\r\n        var skipLang = false;\r\n        var match = '';\r\n\r\n        function nextEntry() {\r\n          while (true) {\r\n            if (!entries.length) {\r\n              parsedRawLinesCallback();\r\n              return;\r\n            }\r\n\r\n            var line = entries.shift();\r\n            if (reComment.test(line)) continue;\r\n\r\n            if (extendedSyntax) {\r\n              match = reSection.exec(line);\r\n\r\n              if (match) {\r\n                currentLang = match[1].toLowerCase();\r\n                skipLang = currentLang !== '*' && currentLang !== lang && currentLang !== genericLang;\r\n                continue;\r\n              } else if (skipLang) {\r\n                continue;\r\n              }\r\n\r\n              match = reImport.exec(line);\r\n\r\n              if (match) {\r\n                loadImport(baseURL + match[1], nextEntry);\r\n                return;\r\n              }\r\n            }\r\n\r\n            var tmp = line.match(reSplit);\r\n\r\n            if (tmp && tmp.length == 3) {\r\n              dictionary[tmp[1]] = evalString(tmp[2]);\r\n            }\r\n          }\r\n        }\r\n\r\n        nextEntry();\r\n      }\r\n\r\n      function loadImport(url, callback) {\r\n        xhrLoadText(url, function (content) {\r\n          parseRawLines(content, false, callback);\r\n        }, function () {\r\n          console.warn(url + ' not found.');\r\n          callback();\r\n        });\r\n      }\r\n\r\n      parseRawLines(text, true, function () {\r\n        parsedPropertiesCallback(dictionary);\r\n      });\r\n    }\r\n\r\n    xhrLoadText(href, function (response) {\r\n      gTextData += response;\r\n      parseProperties(response, function (data) {\r\n        for (var key in data) {\r\n          var id,\r\n              prop,\r\n              index = key.lastIndexOf('.');\r\n\r\n          if (index > 0) {\r\n            id = key.substring(0, index);\r\n            prop = key.substring(index + 1);\r\n          } else {\r\n            id = key;\r\n            prop = gTextProp;\r\n          }\r\n\r\n          if (!gL10nData[id]) {\r\n            gL10nData[id] = {};\r\n          }\r\n\r\n          gL10nData[id][prop] = data[key];\r\n        }\r\n\r\n        if (successCallback) {\r\n          successCallback();\r\n        }\r\n      });\r\n    }, failureCallback);\r\n  }\r\n\r\n  function loadLocale(lang, callback) {\r\n    if (lang) {\r\n      lang = lang.toLowerCase();\r\n    }\r\n\r\n    callback = callback || function _callback() {};\r\n\r\n    clear();\r\n    gLanguage = lang;\r\n    var langLinks = getL10nResourceLinks();\r\n    var langCount = langLinks.length;\r\n\r\n    if (langCount === 0) {\r\n      var dict = getL10nDictionary();\r\n\r\n      if (dict && dict.locales && dict.default_locale) {\r\n        console.log('using the embedded JSON directory, early way out');\r\n        gL10nData = dict.locales[lang];\r\n\r\n        if (!gL10nData) {\r\n          var defaultLocale = dict.default_locale.toLowerCase();\r\n\r\n          for (var anyCaseLang in dict.locales) {\r\n            anyCaseLang = anyCaseLang.toLowerCase();\r\n\r\n            if (anyCaseLang === lang) {\r\n              gL10nData = dict.locales[lang];\r\n              break;\r\n            } else if (anyCaseLang === defaultLocale) {\r\n              gL10nData = dict.locales[defaultLocale];\r\n            }\r\n          }\r\n        }\r\n\r\n        callback();\r\n      } else {\r\n        console.log('no resource to load, early way out');\r\n      }\r\n\r\n      gReadyState = 'complete';\r\n      return;\r\n    }\r\n\r\n    var onResourceLoaded = null;\r\n    var gResourceCount = 0;\r\n\r\n    onResourceLoaded = function onResourceLoaded() {\r\n      gResourceCount++;\r\n\r\n      if (gResourceCount >= langCount) {\r\n        callback();\r\n        gReadyState = 'complete';\r\n      }\r\n    };\r\n\r\n    function L10nResourceLink(link) {\r\n      var href = link.href;\r\n\r\n      this.load = function (lang, callback) {\r\n        parseResource(href, lang, callback, function () {\r\n          console.warn(href + ' not found.');\r\n          console.warn('\"' + lang + '\" resource not found');\r\n          gLanguage = '';\r\n          callback();\r\n        });\r\n      };\r\n    }\r\n\r\n    for (var i = 0; i < langCount; i++) {\r\n      var resource = new L10nResourceLink(langLinks[i]);\r\n      resource.load(lang, onResourceLoaded);\r\n    }\r\n  }\r\n\r\n  function clear() {\r\n    gL10nData = {};\r\n    gTextData = '';\r\n    gLanguage = '';\r\n  }\r\n\r\n  function getPluralRules(lang) {\r\n    var locales2rules = {\r\n      'af': 3,\r\n      'ak': 4,\r\n      'am': 4,\r\n      'ar': 1,\r\n      'asa': 3,\r\n      'az': 0,\r\n      'be': 11,\r\n      'bem': 3,\r\n      'bez': 3,\r\n      'bg': 3,\r\n      'bh': 4,\r\n      'bm': 0,\r\n      'bn': 3,\r\n      'bo': 0,\r\n      'br': 20,\r\n      'brx': 3,\r\n      'bs': 11,\r\n      'ca': 3,\r\n      'cgg': 3,\r\n      'chr': 3,\r\n      'cs': 12,\r\n      'cy': 17,\r\n      'da': 3,\r\n      'de': 3,\r\n      'dv': 3,\r\n      'dz': 0,\r\n      'ee': 3,\r\n      'el': 3,\r\n      'en': 3,\r\n      'eo': 3,\r\n      'es': 3,\r\n      'et': 3,\r\n      'eu': 3,\r\n      'fa': 0,\r\n      'ff': 5,\r\n      'fi': 3,\r\n      'fil': 4,\r\n      'fo': 3,\r\n      'fr': 5,\r\n      'fur': 3,\r\n      'fy': 3,\r\n      'ga': 8,\r\n      'gd': 24,\r\n      'gl': 3,\r\n      'gsw': 3,\r\n      'gu': 3,\r\n      'guw': 4,\r\n      'gv': 23,\r\n      'ha': 3,\r\n      'haw': 3,\r\n      'he': 2,\r\n      'hi': 4,\r\n      'hr': 11,\r\n      'hu': 0,\r\n      'id': 0,\r\n      'ig': 0,\r\n      'ii': 0,\r\n      'is': 3,\r\n      'it': 3,\r\n      'iu': 7,\r\n      'ja': 0,\r\n      'jmc': 3,\r\n      'jv': 0,\r\n      'ka': 0,\r\n      'kab': 5,\r\n      'kaj': 3,\r\n      'kcg': 3,\r\n      'kde': 0,\r\n      'kea': 0,\r\n      'kk': 3,\r\n      'kl': 3,\r\n      'km': 0,\r\n      'kn': 0,\r\n      'ko': 0,\r\n      'ksb': 3,\r\n      'ksh': 21,\r\n      'ku': 3,\r\n      'kw': 7,\r\n      'lag': 18,\r\n      'lb': 3,\r\n      'lg': 3,\r\n      'ln': 4,\r\n      'lo': 0,\r\n      'lt': 10,\r\n      'lv': 6,\r\n      'mas': 3,\r\n      'mg': 4,\r\n      'mk': 16,\r\n      'ml': 3,\r\n      'mn': 3,\r\n      'mo': 9,\r\n      'mr': 3,\r\n      'ms': 0,\r\n      'mt': 15,\r\n      'my': 0,\r\n      'nah': 3,\r\n      'naq': 7,\r\n      'nb': 3,\r\n      'nd': 3,\r\n      'ne': 3,\r\n      'nl': 3,\r\n      'nn': 3,\r\n      'no': 3,\r\n      'nr': 3,\r\n      'nso': 4,\r\n      'ny': 3,\r\n      'nyn': 3,\r\n      'om': 3,\r\n      'or': 3,\r\n      'pa': 3,\r\n      'pap': 3,\r\n      'pl': 13,\r\n      'ps': 3,\r\n      'pt': 3,\r\n      'rm': 3,\r\n      'ro': 9,\r\n      'rof': 3,\r\n      'ru': 11,\r\n      'rwk': 3,\r\n      'sah': 0,\r\n      'saq': 3,\r\n      'se': 7,\r\n      'seh': 3,\r\n      'ses': 0,\r\n      'sg': 0,\r\n      'sh': 11,\r\n      'shi': 19,\r\n      'sk': 12,\r\n      'sl': 14,\r\n      'sma': 7,\r\n      'smi': 7,\r\n      'smj': 7,\r\n      'smn': 7,\r\n      'sms': 7,\r\n      'sn': 3,\r\n      'so': 3,\r\n      'sq': 3,\r\n      'sr': 11,\r\n      'ss': 3,\r\n      'ssy': 3,\r\n      'st': 3,\r\n      'sv': 3,\r\n      'sw': 3,\r\n      'syr': 3,\r\n      'ta': 3,\r\n      'te': 3,\r\n      'teo': 3,\r\n      'th': 0,\r\n      'ti': 4,\r\n      'tig': 3,\r\n      'tk': 3,\r\n      'tl': 4,\r\n      'tn': 3,\r\n      'to': 0,\r\n      'tr': 0,\r\n      'ts': 3,\r\n      'tzm': 22,\r\n      'uk': 11,\r\n      'ur': 3,\r\n      've': 3,\r\n      'vi': 0,\r\n      'vun': 3,\r\n      'wa': 4,\r\n      'wae': 3,\r\n      'wo': 0,\r\n      'xh': 3,\r\n      'xog': 3,\r\n      'yo': 0,\r\n      'zh': 0,\r\n      'zu': 3\r\n    };\r\n\r\n    function isIn(n, list) {\r\n      return list.indexOf(n) !== -1;\r\n    }\r\n\r\n    function isBetween(n, start, end) {\r\n      return start <= n && n <= end;\r\n    }\r\n\r\n    var pluralRules = {\r\n      '0': function _(n) {\r\n        return 'other';\r\n      },\r\n      '1': function _(n) {\r\n        if (isBetween(n % 100, 3, 10)) return 'few';\r\n        if (n === 0) return 'zero';\r\n        if (isBetween(n % 100, 11, 99)) return 'many';\r\n        if (n == 2) return 'two';\r\n        if (n == 1) return 'one';\r\n        return 'other';\r\n      },\r\n      '2': function _(n) {\r\n        if (n !== 0 && n % 10 === 0) return 'many';\r\n        if (n == 2) return 'two';\r\n        if (n == 1) return 'one';\r\n        return 'other';\r\n      },\r\n      '3': function _(n) {\r\n        if (n == 1) return 'one';\r\n        return 'other';\r\n      },\r\n      '4': function _(n) {\r\n        if (isBetween(n, 0, 1)) return 'one';\r\n        return 'other';\r\n      },\r\n      '5': function _(n) {\r\n        if (isBetween(n, 0, 2) && n != 2) return 'one';\r\n        return 'other';\r\n      },\r\n      '6': function _(n) {\r\n        if (n === 0) return 'zero';\r\n        if (n % 10 == 1 && n % 100 != 11) return 'one';\r\n        return 'other';\r\n      },\r\n      '7': function _(n) {\r\n        if (n == 2) return 'two';\r\n        if (n == 1) return 'one';\r\n        return 'other';\r\n      },\r\n      '8': function _(n) {\r\n        if (isBetween(n, 3, 6)) return 'few';\r\n        if (isBetween(n, 7, 10)) return 'many';\r\n        if (n == 2) return 'two';\r\n        if (n == 1) return 'one';\r\n        return 'other';\r\n      },\r\n      '9': function _(n) {\r\n        if (n === 0 || n != 1 && isBetween(n % 100, 1, 19)) return 'few';\r\n        if (n == 1) return 'one';\r\n        return 'other';\r\n      },\r\n      '10': function _(n) {\r\n        if (isBetween(n % 10, 2, 9) && !isBetween(n % 100, 11, 19)) return 'few';\r\n        if (n % 10 == 1 && !isBetween(n % 100, 11, 19)) return 'one';\r\n        return 'other';\r\n      },\r\n      '11': function _(n) {\r\n        if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few';\r\n        if (n % 10 === 0 || isBetween(n % 10, 5, 9) || isBetween(n % 100, 11, 14)) return 'many';\r\n        if (n % 10 == 1 && n % 100 != 11) return 'one';\r\n        return 'other';\r\n      },\r\n      '12': function _(n) {\r\n        if (isBetween(n, 2, 4)) return 'few';\r\n        if (n == 1) return 'one';\r\n        return 'other';\r\n      },\r\n      '13': function _(n) {\r\n        if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few';\r\n        if (n != 1 && isBetween(n % 10, 0, 1) || isBetween(n % 10, 5, 9) || isBetween(n % 100, 12, 14)) return 'many';\r\n        if (n == 1) return 'one';\r\n        return 'other';\r\n      },\r\n      '14': function _(n) {\r\n        if (isBetween(n % 100, 3, 4)) return 'few';\r\n        if (n % 100 == 2) return 'two';\r\n        if (n % 100 == 1) return 'one';\r\n        return 'other';\r\n      },\r\n      '15': function _(n) {\r\n        if (n === 0 || isBetween(n % 100, 2, 10)) return 'few';\r\n        if (isBetween(n % 100, 11, 19)) return 'many';\r\n        if (n == 1) return 'one';\r\n        return 'other';\r\n      },\r\n      '16': function _(n) {\r\n        if (n % 10 == 1 && n != 11) return 'one';\r\n        return 'other';\r\n      },\r\n      '17': function _(n) {\r\n        if (n == 3) return 'few';\r\n        if (n === 0) return 'zero';\r\n        if (n == 6) return 'many';\r\n        if (n == 2) return 'two';\r\n        if (n == 1) return 'one';\r\n        return 'other';\r\n      },\r\n      '18': function _(n) {\r\n        if (n === 0) return 'zero';\r\n        if (isBetween(n, 0, 2) && n !== 0 && n != 2) return 'one';\r\n        return 'other';\r\n      },\r\n      '19': function _(n) {\r\n        if (isBetween(n, 2, 10)) return 'few';\r\n        if (isBetween(n, 0, 1)) return 'one';\r\n        return 'other';\r\n      },\r\n      '20': function _(n) {\r\n        if ((isBetween(n % 10, 3, 4) || n % 10 == 9) && !(isBetween(n % 100, 10, 19) || isBetween(n % 100, 70, 79) || isBetween(n % 100, 90, 99))) return 'few';\r\n        if (n % 1000000 === 0 && n !== 0) return 'many';\r\n        if (n % 10 == 2 && !isIn(n % 100, [12, 72, 92])) return 'two';\r\n        if (n % 10 == 1 && !isIn(n % 100, [11, 71, 91])) return 'one';\r\n        return 'other';\r\n      },\r\n      '21': function _(n) {\r\n        if (n === 0) return 'zero';\r\n        if (n == 1) return 'one';\r\n        return 'other';\r\n      },\r\n      '22': function _(n) {\r\n        if (isBetween(n, 0, 1) || isBetween(n, 11, 99)) return 'one';\r\n        return 'other';\r\n      },\r\n      '23': function _(n) {\r\n        if (isBetween(n % 10, 1, 2) || n % 20 === 0) return 'one';\r\n        return 'other';\r\n      },\r\n      '24': function _(n) {\r\n        if (isBetween(n, 3, 10) || isBetween(n, 13, 19)) return 'few';\r\n        if (isIn(n, [2, 12])) return 'two';\r\n        if (isIn(n, [1, 11])) return 'one';\r\n        return 'other';\r\n      }\r\n    };\r\n    var index = locales2rules[lang.replace(/-.*$/, '')];\r\n\r\n    if (!(index in pluralRules)) {\r\n      console.warn('plural form unknown for [' + lang + ']');\r\n      return function () {\r\n        return 'other';\r\n      };\r\n    }\r\n\r\n    return pluralRules[index];\r\n  }\r\n\r\n  gMacros.plural = function (str, param, key, prop) {\r\n    var n = parseFloat(param);\r\n    if (isNaN(n)) return str;\r\n    if (prop != gTextProp) return str;\r\n\r\n    if (!gMacros._pluralRules) {\r\n      gMacros._pluralRules = getPluralRules(gLanguage);\r\n    }\r\n\r\n    var index = '[' + gMacros._pluralRules(n) + ']';\r\n\r\n    if (n === 0 && key + '[zero]' in gL10nData) {\r\n      str = gL10nData[key + '[zero]'][prop];\r\n    } else if (n == 1 && key + '[one]' in gL10nData) {\r\n      str = gL10nData[key + '[one]'][prop];\r\n    } else if (n == 2 && key + '[two]' in gL10nData) {\r\n      str = gL10nData[key + '[two]'][prop];\r\n    } else if (key + index in gL10nData) {\r\n      str = gL10nData[key + index][prop];\r\n    } else if (key + '[other]' in gL10nData) {\r\n      str = gL10nData[key + '[other]'][prop];\r\n    }\r\n\r\n    return str;\r\n  };\r\n\r\n  function getL10nData(key, args, fallback) {\r\n    var data = gL10nData[key];\r\n\r\n    if (!data) {\r\n      console.warn('#' + key + ' is undefined.');\r\n\r\n      if (!fallback) {\r\n        return null;\r\n      }\r\n\r\n      data = fallback;\r\n    }\r\n\r\n    var rv = {};\r\n\r\n    for (var prop in data) {\r\n      var str = data[prop];\r\n      str = substIndexes(str, args, key, prop);\r\n      str = substArguments(str, args, key);\r\n      rv[prop] = str;\r\n    }\r\n\r\n    return rv;\r\n  }\r\n\r\n  function substIndexes(str, args, key, prop) {\r\n    var reIndex = /\\{\\[\\s*([a-zA-Z]+)\\(([a-zA-Z]+)\\)\\s*\\]\\}/;\r\n    var reMatch = reIndex.exec(str);\r\n    if (!reMatch || !reMatch.length) return str;\r\n    var macroName = reMatch[1];\r\n    var paramName = reMatch[2];\r\n    var param;\r\n\r\n    if (args && paramName in args) {\r\n      param = args[paramName];\r\n    } else if (paramName in gL10nData) {\r\n      param = gL10nData[paramName];\r\n    }\r\n\r\n    if (macroName in gMacros) {\r\n      var macro = gMacros[macroName];\r\n      str = macro(str, param, key, prop);\r\n    }\r\n\r\n    return str;\r\n  }\r\n\r\n  function substArguments(str, args, key) {\r\n    var reArgs = /\\{\\{\\s*(.+?)\\s*\\}\\}/g;\r\n    return str.replace(reArgs, function (matched_text, arg) {\r\n      if (args && arg in args) {\r\n        return args[arg];\r\n      }\r\n\r\n      if (arg in gL10nData) {\r\n        return gL10nData[arg];\r\n      }\r\n\r\n      console.log('argument {{' + arg + '}} for #' + key + ' is undefined.');\r\n      return matched_text;\r\n    });\r\n  }\r\n\r\n  function translateElement(element) {\r\n    var l10n = getL10nAttributes(element);\r\n    if (!l10n.id) return;\r\n    var data = getL10nData(l10n.id, l10n.args);\r\n\r\n    if (!data) {\r\n      console.warn('#' + l10n.id + ' is undefined.');\r\n      return;\r\n    }\r\n\r\n    if (data[gTextProp]) {\r\n      if (getChildElementCount(element) === 0) {\r\n        element[gTextProp] = data[gTextProp];\r\n      } else {\r\n        var children = element.childNodes;\r\n        var found = false;\r\n\r\n        for (var i = 0, l = children.length; i < l; i++) {\r\n          if (children[i].nodeType === 3 && /\\S/.test(children[i].nodeValue)) {\r\n            if (found) {\r\n              children[i].nodeValue = '';\r\n            } else {\r\n              children[i].nodeValue = data[gTextProp];\r\n              found = true;\r\n            }\r\n          }\r\n        }\r\n\r\n        if (!found) {\r\n          var textNode = document.createTextNode(data[gTextProp]);\r\n          element.insertBefore(textNode, element.firstChild);\r\n        }\r\n      }\r\n\r\n      delete data[gTextProp];\r\n    }\r\n\r\n    for (var k in data) {\r\n      element[k] = data[k];\r\n    }\r\n  }\r\n\r\n  function getChildElementCount(element) {\r\n    if (element.children) {\r\n      return element.children.length;\r\n    }\r\n\r\n    if (typeof element.childElementCount !== 'undefined') {\r\n      return element.childElementCount;\r\n    }\r\n\r\n    var count = 0;\r\n\r\n    for (var i = 0; i < element.childNodes.length; i++) {\r\n      count += element.nodeType === 1 ? 1 : 0;\r\n    }\r\n\r\n    return count;\r\n  }\r\n\r\n  function translateFragment(element) {\r\n    element = element || document.documentElement;\r\n    var children = getTranslatableChildren(element);\r\n    var elementCount = children.length;\r\n\r\n    for (var i = 0; i < elementCount; i++) {\r\n      translateElement(children[i]);\r\n    }\r\n\r\n    translateElement(element);\r\n  }\r\n\r\n  return {\r\n    get: function get(key, args, fallbackString) {\r\n      var index = key.lastIndexOf('.');\r\n      var prop = gTextProp;\r\n\r\n      if (index > 0) {\r\n        prop = key.substring(index + 1);\r\n        key = key.substring(0, index);\r\n      }\r\n\r\n      var fallback;\r\n\r\n      if (fallbackString) {\r\n        fallback = {};\r\n        fallback[prop] = fallbackString;\r\n      }\r\n\r\n      var data = getL10nData(key, args, fallback);\r\n\r\n      if (data && prop in data) {\r\n        return data[prop];\r\n      }\r\n\r\n      return '{{' + key + '}}';\r\n    },\r\n    getData: function getData() {\r\n      return gL10nData;\r\n    },\r\n    getText: function getText() {\r\n      return gTextData;\r\n    },\r\n    getLanguage: function getLanguage() {\r\n      return gLanguage;\r\n    },\r\n    setLanguage: function setLanguage(lang, callback) {\r\n      loadLocale(lang, function () {\r\n        if (callback) callback();\r\n      });\r\n    },\r\n    getDirection: function getDirection() {\r\n      var rtlList = ['ar', 'he', 'fa', 'ps', 'ur'];\r\n      var shortCode = gLanguage.split('-', 1)[0];\r\n      return rtlList.indexOf(shortCode) >= 0 ? 'rtl' : 'ltr';\r\n    },\r\n    translate: translateFragment,\r\n    getReadyState: function getReadyState() {\r\n      return gReadyState;\r\n    },\r\n    ready: function ready(callback) {\r\n      if (!callback) {\r\n        return;\r\n      } else if (gReadyState == 'complete' || gReadyState == 'interactive') {\r\n        window.setTimeout(function () {\r\n          callback();\r\n        });\r\n      } else if (document.addEventListener) {\r\n        document.addEventListener('localized', function once() {\r\n          document.removeEventListener('localized', once);\r\n          callback();\r\n        });\r\n      }\r\n    }\r\n  };\r\n}(window, document);\r\n\r\n/***/ }),\r\n/* 42 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.GenericScripting = void 0;\r\n\r\nvar _regenerator = _interopRequireDefault(__webpack_require__(4));\r\n\r\nvar _pdfjsLib = __webpack_require__(7);\r\n\r\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\r\n\r\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\r\n\r\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\r\n\r\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\r\n\r\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\r\n\r\nvar GenericScripting = /*#__PURE__*/function () {\r\n  function GenericScripting(sandboxBundleSrc) {\r\n    _classCallCheck(this, GenericScripting);\r\n\r\n    this._ready = (0, _pdfjsLib.loadScript)(sandboxBundleSrc, true).then(function () {\r\n      return window.pdfjsSandbox.QuickJSSandbox();\r\n    });\r\n  }\r\n\r\n  _createClass(GenericScripting, [{\r\n    key: \"createSandbox\",\r\n    value: function () {\r\n      var _createSandbox = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(data) {\r\n        var sandbox;\r\n        return _regenerator[\"default\"].wrap(function _callee$(_context) {\r\n          while (1) {\r\n            switch (_context.prev = _context.next) {\r\n              case 0:\r\n                _context.next = 2;\r\n                return this._ready;\r\n\r\n              case 2:\r\n                sandbox = _context.sent;\r\n                sandbox.create(data);\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context.stop();\r\n            }\r\n          }\r\n        }, _callee, this);\r\n      }));\r\n\r\n      function createSandbox(_x) {\r\n        return _createSandbox.apply(this, arguments);\r\n      }\r\n\r\n      return createSandbox;\r\n    }()\r\n  }, {\r\n    key: \"dispatchEventInSandbox\",\r\n    value: function () {\r\n      var _dispatchEventInSandbox = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(event) {\r\n        var sandbox;\r\n        return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\r\n          while (1) {\r\n            switch (_context2.prev = _context2.next) {\r\n              case 0:\r\n                _context2.next = 2;\r\n                return this._ready;\r\n\r\n              case 2:\r\n                sandbox = _context2.sent;\r\n                sandbox.dispatchEvent(event);\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context2.stop();\r\n            }\r\n          }\r\n        }, _callee2, this);\r\n      }));\r\n\r\n      function dispatchEventInSandbox(_x2) {\r\n        return _dispatchEventInSandbox.apply(this, arguments);\r\n      }\r\n\r\n      return dispatchEventInSandbox;\r\n    }()\r\n  }, {\r\n    key: \"destroySandbox\",\r\n    value: function () {\r\n      var _destroySandbox = _asyncToGenerator( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3() {\r\n        var sandbox;\r\n        return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\r\n          while (1) {\r\n            switch (_context3.prev = _context3.next) {\r\n              case 0:\r\n                _context3.next = 2;\r\n                return this._ready;\r\n\r\n              case 2:\r\n                sandbox = _context3.sent;\r\n                sandbox.nukeSandbox();\r\n\r\n              case 4:\r\n              case \"end\":\r\n                return _context3.stop();\r\n            }\r\n          }\r\n        }, _callee3, this);\r\n      }));\r\n\r\n      function destroySandbox() {\r\n        return _destroySandbox.apply(this, arguments);\r\n      }\r\n\r\n      return destroySandbox;\r\n    }()\r\n  }]);\r\n\r\n  return GenericScripting;\r\n}();\r\n\r\nexports.GenericScripting = GenericScripting;\r\n\r\n/***/ }),\r\n/* 43 */\r\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\r\n\r\n\r\n\r\nObject.defineProperty(exports, \"__esModule\", ({\r\n  value: true\r\n}));\r\nexports.PDFPrintService = PDFPrintService;\r\n\r\nvar _ui_utils = __webpack_require__(6);\r\n\r\nvar _app = __webpack_require__(3);\r\n\r\nvar _viewer_compatibility = __webpack_require__(2);\r\n\r\nvar activeService = null;\r\nvar overlayManager = null;\r\n\r\nfunction renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size, printResolution, optionalContentConfigPromise) {\r\n  var scratchCanvas = activeService.scratchCanvas;\r\n  var PRINT_UNITS = printResolution / 72.0;\r\n  scratchCanvas.width = Math.floor(size.width * PRINT_UNITS);\r\n  scratchCanvas.height = Math.floor(size.height * PRINT_UNITS);\r\n  var width = Math.floor(size.width * _ui_utils.CSS_UNITS) + \"px\";\r\n  var height = Math.floor(size.height * _ui_utils.CSS_UNITS) + \"px\";\r\n  var ctx = scratchCanvas.getContext(\"2d\");\r\n  ctx.save();\r\n  ctx.fillStyle = \"rgb(255, 255, 255)\";\r\n  ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height);\r\n  ctx.restore();\r\n  return pdfDocument.getPage(pageNumber).then(function (pdfPage) {\r\n    var renderContext = {\r\n      canvasContext: ctx,\r\n      transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],\r\n      viewport: pdfPage.getViewport({\r\n        scale: 1,\r\n        rotation: size.rotation\r\n      }),\r\n      intent: \"print\",\r\n      annotationStorage: pdfDocument.annotationStorage,\r\n      optionalContentConfigPromise: optionalContentConfigPromise\r\n    };\r\n    return pdfPage.render(renderContext).promise;\r\n  }).then(function () {\r\n    return {\r\n      width: width,\r\n      height: height\r\n    };\r\n  });\r\n}\r\n\r\nfunction PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolution) {\r\n  var optionalContentConfigPromise = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\r\n  var l10n = arguments.length > 5 ? arguments[5] : undefined;\r\n  this.pdfDocument = pdfDocument;\r\n  this.pagesOverview = pagesOverview;\r\n  this.printContainer = printContainer;\r\n  this._printResolution = printResolution || 150;\r\n  this._optionalContentConfigPromise = optionalContentConfigPromise || pdfDocument.getOptionalContentConfig();\r\n  this.l10n = l10n || _ui_utils.NullL10n;\r\n  this.currentPage = -1;\r\n  this.scratchCanvas = document.createElement(\"canvas\");\r\n}\r\n\r\nPDFPrintService.prototype = {\r\n  layout: function layout() {\r\n    this.throwIfInactive();\r\n    var body = document.querySelector(\"body\");\r\n    body.setAttribute(\"data-pdfjsprinting\", true);\r\n    var hasEqualPageSizes = this.pagesOverview.every(function (size) {\r\n      return size.width === this.pagesOverview[0].width && size.height === this.pagesOverview[0].height;\r\n    }, this);\r\n\r\n    if (!hasEqualPageSizes) {\r\n      console.warn(\"Not all pages have the same size. The printed \" + \"result may be incorrect!\");\r\n    }\r\n\r\n    this.pageStyleSheet = document.createElement(\"style\");\r\n    var pageSize = this.pagesOverview[0];\r\n    this.pageStyleSheet.textContent = \"@supports ((size:A4) and (size:1pt 1pt)) {\" + \"@page { size: \" + pageSize.width + \"pt \" + pageSize.height + \"pt;}\" + \"}\";\r\n    body.appendChild(this.pageStyleSheet);\r\n  },\r\n  destroy: function destroy() {\r\n    if (activeService !== this) {\r\n      return;\r\n    }\r\n\r\n    this.printContainer.textContent = \"\";\r\n    var body = document.querySelector(\"body\");\r\n    body.removeAttribute(\"data-pdfjsprinting\");\r\n\r\n    if (this.pageStyleSheet) {\r\n      this.pageStyleSheet.remove();\r\n      this.pageStyleSheet = null;\r\n    }\r\n\r\n    this.scratchCanvas.width = this.scratchCanvas.height = 0;\r\n    this.scratchCanvas = null;\r\n    activeService = null;\r\n    ensureOverlay().then(function () {\r\n      if (overlayManager.active !== \"printServiceOverlay\") {\r\n        return;\r\n      }\r\n\r\n      overlayManager.close(\"printServiceOverlay\");\r\n    });\r\n  },\r\n  renderPages: function renderPages() {\r\n    var _this = this;\r\n\r\n    var pageCount = this.pagesOverview.length;\r\n\r\n    var renderNextPage = function renderNextPage(resolve, reject) {\r\n      _this.throwIfInactive();\r\n\r\n      if (++_this.currentPage >= pageCount) {\r\n        renderProgress(pageCount, pageCount, _this.l10n);\r\n        resolve();\r\n        return;\r\n      }\r\n\r\n      var index = _this.currentPage;\r\n      renderProgress(index, pageCount, _this.l10n);\r\n      renderPage(_this, _this.pdfDocument, index + 1, _this.pagesOverview[index], _this._printResolution, _this._optionalContentConfigPromise).then(_this.useRenderedPage.bind(_this)).then(function () {\r\n        renderNextPage(resolve, reject);\r\n      }, reject);\r\n    };\r\n\r\n    return new Promise(renderNextPage);\r\n  },\r\n  useRenderedPage: function useRenderedPage(printItem) {\r\n    this.throwIfInactive();\r\n    var img = document.createElement(\"img\");\r\n    img.style.width = printItem.width;\r\n    img.style.height = printItem.height;\r\n    var scratchCanvas = this.scratchCanvas;\r\n\r\n    if (\"toBlob\" in scratchCanvas && !_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {\r\n      scratchCanvas.toBlob(function (blob) {\r\n        img.src = URL.createObjectURL(blob);\r\n      });\r\n    } else {\r\n      img.src = scratchCanvas.toDataURL();\r\n    }\r\n\r\n    var wrapper = document.createElement(\"div\");\r\n    wrapper.appendChild(img);\r\n    this.printContainer.appendChild(wrapper);\r\n    return new Promise(function (resolve, reject) {\r\n      img.onload = resolve;\r\n      img.onerror = reject;\r\n    });\r\n  },\r\n  performPrint: function performPrint() {\r\n    var _this2 = this;\r\n\r\n    this.throwIfInactive();\r\n    return new Promise(function (resolve) {\r\n      setTimeout(function () {\r\n        if (!_this2.active) {\r\n          resolve();\r\n          return;\r\n        }\r\n\r\n        print.call(window);\r\n        setTimeout(resolve, 20);\r\n      }, 0);\r\n    });\r\n  },\r\n\r\n  get active() {\r\n    return this === activeService;\r\n  },\r\n\r\n  throwIfInactive: function throwIfInactive() {\r\n    if (!this.active) {\r\n      throw new Error(\"This print request was cancelled or completed.\");\r\n    }\r\n  }\r\n};\r\nvar print = window.print;\r\n\r\nwindow.print = function () {\r\n  if (activeService) {\r\n    console.warn(\"Ignored window.print() because of a pending print job.\");\r\n    return;\r\n  }\r\n\r\n  ensureOverlay().then(function () {\r\n    if (activeService) {\r\n      overlayManager.open(\"printServiceOverlay\");\r\n    }\r\n  });\r\n\r\n  try {\r\n    dispatchEvent(\"beforeprint\");\r\n  } finally {\r\n    if (!activeService) {\r\n      console.error(\"Expected print service to be initialized.\");\r\n      ensureOverlay().then(function () {\r\n        if (overlayManager.active === \"printServiceOverlay\") {\r\n          overlayManager.close(\"printServiceOverlay\");\r\n        }\r\n      });\r\n      return;\r\n    }\r\n\r\n    var activeServiceOnEntry = activeService;\r\n    activeService.renderPages().then(function () {\r\n      return activeServiceOnEntry.performPrint();\r\n    })[\"catch\"](function () {}).then(function () {\r\n      if (activeServiceOnEntry.active) {\r\n        abort();\r\n      }\r\n    });\r\n  }\r\n};\r\n\r\nfunction dispatchEvent(eventType) {\r\n  var event = document.createEvent(\"CustomEvent\");\r\n  event.initCustomEvent(eventType, false, false, \"custom\");\r\n  window.dispatchEvent(event);\r\n}\r\n\r\nfunction abort() {\r\n  if (activeService) {\r\n    activeService.destroy();\r\n    dispatchEvent(\"afterprint\");\r\n  }\r\n}\r\n\r\nfunction renderProgress(index, total, l10n) {\r\n  var progressContainer = document.getElementById(\"printServiceOverlay\");\r\n  var progress = Math.round(100 * index / total);\r\n  var progressBar = progressContainer.querySelector(\"progress\");\r\n  var progressPerc = progressContainer.querySelector(\".relative-progress\");\r\n  progressBar.value = progress;\r\n  l10n.get(\"print_progress_percent\", {\r\n    progress: progress\r\n  }, progress + \"%\").then(function (msg) {\r\n    progressPerc.textContent = msg;\r\n  });\r\n}\r\n\r\nwindow.addEventListener(\"keydown\", function (event) {\r\n  if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) {\r\n    window.print();\r\n    event.preventDefault();\r\n\r\n    if (event.stopImmediatePropagation) {\r\n      event.stopImmediatePropagation();\r\n    } else {\r\n      event.stopPropagation();\r\n    }\r\n  }\r\n}, true);\r\n\r\nif (\"onbeforeprint\" in window) {\r\n  var stopPropagationIfNeeded = function stopPropagationIfNeeded(event) {\r\n    if (event.detail !== \"custom\" && event.stopImmediatePropagation) {\r\n      event.stopImmediatePropagation();\r\n    }\r\n  };\r\n\r\n  window.addEventListener(\"beforeprint\", stopPropagationIfNeeded);\r\n  window.addEventListener(\"afterprint\", stopPropagationIfNeeded);\r\n}\r\n\r\nvar overlayPromise;\r\n\r\nfunction ensureOverlay() {\r\n  if (!overlayPromise) {\r\n    overlayManager = _app.PDFViewerApplication.overlayManager;\r\n\r\n    if (!overlayManager) {\r\n      throw new Error(\"The overlay manager has not yet been initialized.\");\r\n    }\r\n\r\n    overlayPromise = overlayManager.register(\"printServiceOverlay\", document.getElementById(\"printServiceOverlay\"), abort, true);\r\n    document.getElementById(\"printCancel\").onclick = abort;\r\n  }\r\n\r\n  return overlayPromise;\r\n}\r\n\r\n_app.PDFPrintServiceFactory.instance = {\r\n  supportsPrinting: true,\r\n  createPrintService: function createPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, l10n) {\r\n    if (activeService) {\r\n      throw new Error(\"The print service is created and active.\");\r\n    }\r\n\r\n    activeService = new PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, l10n);\r\n    return activeService;\r\n  }\r\n};\r\n\r\n/***/ })\r\n/******/ \t]);\r\n/************************************************************************/\r\n/******/ \t// The module cache\r\n/******/ \tvar __webpack_module_cache__ = {};\r\n/******/ \t\r\n/******/ \t// The require function\r\n/******/ \tfunction __webpack_require__(moduleId) {\r\n/******/ \t\t// Check if module is in cache\r\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\r\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\r\n/******/ \t\t}\r\n/******/ \t\t// Create a new module (and put it into the cache)\r\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\r\n/******/ \t\t\tid: moduleId,\r\n/******/ \t\t\tloaded: false,\r\n/******/ \t\t\texports: {}\r\n/******/ \t\t};\r\n/******/ \t\r\n/******/ \t\t// Execute the module function\r\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\r\n/******/ \t\r\n/******/ \t\t// Flag the module as loaded\r\n/******/ \t\tmodule.loaded = true;\r\n/******/ \t\r\n/******/ \t\t// Return the exports of the module\r\n/******/ \t\treturn module.exports;\r\n/******/ \t}\r\n/******/ \t\r\n/************************************************************************/\r\n/******/ \t/* webpack/runtime/node module decorator */\r\n/******/ \t(() => {\r\n/******/ \t\t__webpack_require__.nmd = (module) => {\r\n/******/ \t\t\tmodule.paths = [];\r\n/******/ \t\t\tif (!module.children) module.children = [];\r\n/******/ \t\t\treturn module;\r\n/******/ \t\t};\r\n/******/ \t})();\r\n/******/ \t\r\n/************************************************************************/\r\n/******/ \t// startup\r\n/******/ \t// Load entry module\r\n/******/ \t__webpack_require__(0);\r\n/******/ \t// This entry module used 'exports' so it can't be inlined\r\n/******/ })()\r\n;\r\n//# sourceMappingURL=viewer.js.map"
  },
  {
    "path": "projects/minimal-api/README.md",
    "content": "# Minimal API (39)\r\n\r\n* [Hello World](hello-world)\r\n  \r\n  This is Hello World ASP.NET Core 6 app using the new `WebApplication` instead of `IHostBuilder`.\r\n\r\n## Minimal Routing (9)\r\n\r\nIn these examples we are using the familiar `Host.CreateDefaultBuilder(args)` host configuration style to emphasis that the new Minimal Routing feature works in both existing style and also in the new minimal hosting API.\r\n\r\n* [Map](map)\r\n\r\n  This is a brand new feature that allows the creation of Web API without using Controllers.\r\n  \r\n* [Accessing HttpContext in Map](map-2)\r\n\r\n  This sample shows how to access HttpContext in `Map`.\r\n\r\n* [Accessing Objects in Map](map-3)\r\n\r\n  This sample shows how to access objects `Map`.\r\n\r\n* [Setup Open API support](map-4)\n\n  This sample shows how to setup Open API support using .NET 10 built-in OpenAPI.\n\r\n* [HttpRequest injection](map-5)\r\n\r\n  This sample shows how to use `HttpRequest` directly without relying on `HttpContext`.\r\n\r\n* [IEndpointRouteBuilder](map-6)\r\n\r\n  This sample shows the use of `IEndPointRouteBuilder` to organize code.\r\n\r\n* [MapPost with JSON model binder](map-post)\r\n\r\n  This sample shows how JSON model binder works in `MapPost`.\r\n\r\n* [MapPost with JSON model binder - 2](map-post-2)\r\n\r\n  This sample shows how JSON model binder works in `MapPost` using static method.\r\n\r\n* [MapMethods with JSON model binder](map-methods)\r\n\r\n  This sample shows how to handle multiple HTTP Verbs request using `MapMethods`. In this example we send 'PUT', 'POST' and 'PATCH' requests.\r\n\r\n## Route Constraints (12)\r\n\r\n  * [Route Constraints - int, min, max and range](route-constraints-int)\r\n  \r\n    This example shows route constraint for integer, the minimum and maximum value, and the range.\r\n\r\n  * [Route Constraints - decimal, float and double](route-constraints-decimal)\r\n    \r\n    This example shows route constraint for decimal, float and double.\r\n\r\n## Link Generator (1)\r\n\r\n * [Link Generator - Generate path from a route name](link-generator-path-by-route-name)\r\n    \r\n   This sample shows how to generate a url path from a route name.\r\n\r\n## Parameter Binding (10)\r\n\r\n * [Route binding - implicit](parameter-binding-route-implicit)\r\n\r\n   This example shows usage of implicit route parameter binding of `int` and `string` types.\r\n\r\n * [Route binding - explicit](parameter-binding-route-explicit)\r\n\r\n   This example shows usage of explicit route parameter binding of `int` and `string` types using `[FromRoute]` attribute.\r\n\r\n * [Query string binding - implicit](parameter-binding-query-string-implicit)\r\n\r\n   This example shows usage of implicit query string parameter binding of `int` and `string` types.\r\n\r\n * [Query string binding - explicit](parameter-binding-query-string-explicit)\r\n\r\n   This example shows usage of explicit query string parameter binding of `int` and `string` types using '[FromQuery]' attribute.\r\n\r\n * [Special types binding](parameter-binding-special-types)\r\n\r\n   This example shows usage of special types binding e.g. - `HttpContext`, `HttpRequest`, `HttpResponse`, `CancellationToken`, and `ClaimsPrincipal`.\r\n\r\n * [Header binding - explicit](parameter-binding-header-explicit)\r\n\r\n   This example shows usage of explicit header parameter binding of `string` type using '[FromHeader]' attribute.\r\n\r\n * [Json binding - implicit](parameter-binding-json-implicit)\r\n\r\n   This example shows usage of explicit json parameter.\r\n\r\n * [Json binding - explicit](parameter-binding-json-explicit)\r\n\r\n   This example shows usage of explicit json parameter binding using '[FromBody]' attribute.\r\n\r\n * [Custom binding to types over Route, Query or Header](parameter-binding-custom-try-parse)\r\n\r\n   This example shows usage of custom binding to types over Route, Query or Header via implementation of static `TryParse` method.\r\n\r\n*  [Custom binding - full control](parameter-binding-custom-bind-async)\r\n\r\n   This shows how to take full control of the binding process by implementing `BindAsync` static method in your type.\r\n\r\n## Antiforgery\r\n\r\n* [Antiforgery Token on HTML form](anti-forgery-1)\r\n  \r\n  This shows how to use the IAntiforgery interface to generate a token for use in an HTML form.\r\n\r\n* [Antiforgery Token on AJAX call](anti-forgery-2)\r\n  \r\n  This shows how to use the IAntiforgery interface to generate a token for use in AJAX call.\r\n\r\n* [Cross site antiforgery](anti-forgery-3)\r\n  \r\n  This shows how to implement cross site antiforgery (e.g. the API is located in a different domain).\r\n\r\n## Endpoint Filter\r\n\r\n* [Endpoint Filter - 1](endpoint-filter-1)\r\n\r\n  This sample shows how to apply an Endpoint filter to your minimal API.\r\n\r\n* [Endpoint Filter - 2](endpoint-filter-2)\r\n\r\n  This sample shows how to apply multiple Endpoint filters to your minimal APIs.\r\n\r\n* [Endpoint Filter - 3](endpoint-filter-3)\r\n\r\n  This examples shows the sequence of code execution before `RouteHandlerFilterDelegate ` and after `RouteHandlerFilterDelegate` in multiple endpoint filters.\r\n\r\n* [Endpoint Filter - 4](endpoint-filter-4)\r\n\r\n  Use `IStatusCodeHttpResult` to detect return result in filter.\r\n\r\n\r\n## Route Group\r\n\r\n* [Route Group - 1](map-group-1)\r\n\r\n  `MapGroup()` extension methods allow grouping of endpoints with a common prefix. It also allow group metadata to be attached to the group.\r\n\r\n* [Route Group - 2](map-group-2)\n\n  Use `.WithTags()`, `.WithDescription()`, `.WithSummary()` to enrich OpenAPI information for all the endpoints in the group. Uses .NET 10 built-in OpenAPI.\n\n* [Route Group - 3](map-group-3)\n\n  Use `.ExcludeFromDescription` to exclude endpoints from OpenAPI description. Uses .NET 10 built-in OpenAPI.\n\r\n\r\n## Minimal API Improvements\r\n\r\n  * [Minimal API Form Model Binding](minimal-api-form-model-binding)\r\n\r\n    This sample demonstrates the ability to use `[FromForm]` binding in Minimal API.\r\n\r\n* [Typed Results - 1](typed-results-1)\r\n  \r\n  `Microsoft.AspNetCore.Http.TypedResults` static class is the “typed” equivalent of the existing `Microsoft.AspNetCore.Http.Results` class.\r\n\r\n* [WithOpenApi - 1](open-api-1)\n\n  This sample demonstrates .NET 10 built-in OpenAPI support using XML comments and `AddOpenApi()`.\n\n* [Results<> Union Type](open-api-2)\n\n  `Results<TResult1, TResult2, TResultN>` provides better description of the result of the operation. Uses .NET 10 built-in OpenAPI.\n\r\n* [IFormFile](iform-file)\r\n  \r\n  This sample demonstrates the usage of `IFormFile` to upload a file in Minimal API.\r\n\r\n* [IFormFileCollection](iform-file-collection)\r\n  \r\n  This sample demonstrates the usage of `IFormFileCollection` to upload multiple files in Minimal API.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/minimal-api/anti-forgery-1/Program.cs",
    "content": "using Microsoft.AspNetCore.Antiforgery;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nWebApplication app = builder.Build();\r\n\r\napp.MapGet(\"/\", (HttpContext context, IAntiforgery antiforgery) =>\r\n{\r\n    var token = antiforgery.GetAndStoreTokens(context);\r\n    var html = $@\"\r\n        <html>\r\n            <body>\r\n                <h1>Implement AntiForgery Manually on Form</h1>\r\n                <form action=\"\"/validate\"\" method=\"\"post\"\">\r\n                    <input name=\"\"{token.FormFieldName}\"\" type=\"\"hidden\"\" value=\"\"{token.RequestToken}\"\" />\r\n                    <input type=\"\"text\"\" name=\"\"name\"\" placeholder=\"\"enter name\"\" /> <br/><br/>\r\n                    <input type=\"\"submit\"\" />\r\n                </form> \r\n            </body>\r\n        </html>\r\n    \";\r\n\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapPost(\"/validate\", async (HttpContext context, IAntiforgery antiforgery) =>\r\n{\r\n    try\r\n    {\r\n        await antiforgery.ValidateRequestAsync(context);\r\n        return Results.Ok(context.Request.Form[\"name\"]);\r\n    }\r\n    catch (Exception ex)\r\n    {\r\n        return Results.Problem(ex?.Message ?? string.Empty);\r\n    }\r\n});\r\n\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-api/anti-forgery-1/README.md",
    "content": "# Antiforgery Token using IAntiforgery\r\n\r\nThis shows how to use the IAntiforgery interface to generate a token for use in an HTML form."
  },
  {
    "path": "projects/minimal-api/anti-forgery-1/anti-forgery-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/anti-forgery-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Antiforgery;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nWebApplication app = builder.Build();\r\n\r\napp.MapGet(\"/\", (HttpContext context, IAntiforgery antiforgery) =>\r\n{\r\n    var token = antiforgery.GetAndStoreTokens(context);\r\n    var html = $@\"<!DOCTYPE html>\r\n        <html>\r\n            <body>\r\n                <h1>Implement Antiforgery on AJAX call </h1>\r\n                <button id=\"\"fetchName\"\">Fetch</button>\r\n                <script>\r\n                    async function getName(){{\r\n                        const response = await fetch(\"\"/validate\"\", {{\r\n                           method : \"\"POST\"\",\r\n                           headers : {{ \r\n                            {token.HeaderName} : \"\"{token.RequestToken}\"\",\r\n                            \"\"Content-Type\"\": \"\"application/json\"\"\r\n                            }}\r\n                        }});\r\n\r\n                        const result = await response.json();\r\n                        alert(result.name);\r\n                    }}\r\n\r\n                    const btn = document.getElementById(\"\"fetchName\"\");\r\n                    btn.addEventListener(\"\"click\"\", async () => {{\r\n                       await getName();\r\n                    }});\r\n                </script>\r\n            </body>\r\n        </html>\r\n    \";\r\n\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapPost(\"/validate\", async (HttpContext context, IAntiforgery antiforgery) =>\r\n{\r\n    try\r\n    {\r\n        await antiforgery.ValidateRequestAsync(context);\r\n        return Results.Ok(new { Name = \"hi Anne\"});\r\n    }\r\n    catch (Exception ex)\r\n    {\r\n        return Results.Problem(ex?.Message ?? string.Empty);\r\n    }\r\n});\r\n\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-api/anti-forgery-2/README.md",
    "content": "# Antiforgery Token using IAntiforgery\r\n\r\nThis shows how to use the IAntiforgery interface to generate a token for use in an AJAX call."
  },
  {
    "path": "projects/minimal-api/anti-forgery-2/anti-forgery-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/anti-forgery-3/README.md",
    "content": "# Implementing cross site antiforgery \r\n\r\nThis example shows how to implement antiforgery for APIs located in different domain."
  },
  {
    "path": "projects/minimal-api/anti-forgery-3/api/Program.cs",
    "content": "using Microsoft.AspNetCore.Antiforgery;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery(options => options.HeaderName = \"X-XSRF-TOKEN\");\r\nbuilder.Services.AddCors(options =>\r\n{\r\n    options.AddPolicy(name: \"localhostOnly\",\r\n                      policy  =>\r\n                      {\r\n                          policy.WithOrigins(builder.Configuration[\"origin\"])\r\n                                .AllowAnyHeader()\r\n                                .AllowAnyMethod()\r\n                                .AllowCredentials();\r\n                      });\r\n});\r\n\r\nWebApplication app = builder.Build();\r\napp.Urls.Add(\"https://localhost:5001\");\r\napp.UseCors(\"localhostOnly\");\r\n\r\napp.MapGet(\"/\", (HttpContext context) =>\r\n{\r\n    var html = $@\"<!DOCTYPE html>\r\n        <html>\r\n            <body>\r\n                System is UP              \r\n            </body>\r\n        </html>\r\n    \";\r\n\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/test-cors\", () => Results.Ok(new { Message = \"cors works\" }));\r\n\r\napp.MapGet(\"/antiforgery\", (IAntiforgery antiforgery, HttpContext context) =>\r\n{\r\n    var tokens = antiforgery.GetAndStoreTokens(context);\r\n    context.Response.Cookies.Append(\"XSRF-TOKEN\", tokens.RequestToken!, new CookieOptions { HttpOnly = false });\r\n});\r\n\r\napp.MapPost(\"/validate\", async (HttpContext context, IAntiforgery antiforgery) =>\r\n{\r\n    try\r\n    {\r\n        await antiforgery.ValidateRequestAsync(context);\r\n        return Results.Ok(new { Name = \"hi Anne\"});\r\n    }\r\n    catch (Exception ex)\r\n    {\r\n        return Results.Problem(ex?.Message ?? string.Empty);\r\n    }\r\n});\r\n\r\napp.Run();\r\n\r\npublic class AntiforgeryMiddleware : IMiddleware\r\n{\r\n    private readonly IAntiforgery _antiforgery;\r\n\r\n    public AntiforgeryMiddleware(IAntiforgery antiforgery)\r\n    {\r\n        _antiforgery = antiforgery;\r\n    }\r\n\r\n    public async Task InvokeAsync(HttpContext context, RequestDelegate next)\r\n    {\r\n        var isGetRequest = string.Equals(\"GET\", context.Request.Method, StringComparison.OrdinalIgnoreCase);\r\n        if (!isGetRequest)\r\n            await _antiforgery.ValidateRequestAsync(context);\r\n\r\n        await next(context);\r\n    }\r\n}"
  },
  {
    "path": "projects/minimal-api/anti-forgery-3/api/api.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/anti-forgery-3/api/appsettings.json",
    "content": "{\r\n    \"origin\" : \"https://localhost:5002\" \r\n}"
  },
  {
    "path": "projects/minimal-api/anti-forgery-3/frontend/Pages/Index.cshtml",
    "content": "@page\r\n@inject IConfiguration Config;\r\n\r\n<!DOCTYPE html>\r\n<html>\r\n    <body>\r\n        <h1>Implement Antiforgery on AJAX call </h1>\r\n        <button id=\"test\">Test CORS</button><br/><br/>\r\n        <button id=\"fetchName\">Fetch</button>\r\n        <script>\r\n            async function getToken(){\r\n                const response = await fetch(\"@Config[\"endpoint\"]/antiforgery\", {\r\n                    method: \"GET\",\r\n                    credentials: 'include'\r\n                });\r\n\r\n                if (response.ok){\r\n                        const xsrfToken = document.cookie\r\n                                        .split(\"; \")\r\n                                        .find(row => row.startsWith(\"XSRF-TOKEN=\"))\r\n                                        .split(\"=\")[1];\r\n\r\n                        return xsrfToken;\r\n                }\r\n                else {\r\n                    return null;\r\n                }\r\n            }\r\n\r\n            async function getName(){\r\n                var antiforgery = await getToken();\r\n                const response = await fetch(\"@Config[\"endpoint\"]/validate\", {\r\n                    method : \"POST\",\r\n                    headers : { \r\n                    \"X-XSRF-TOKEN\" : antiforgery,\r\n                    \"Content-Type\": \"application/json\"\r\n                    },\r\n                    credentials: 'include' \r\n                });\r\n\r\n                const result = await response.json();\r\n                alert(result.name);\r\n            }\r\n\r\n            async function testCors(){\r\n                const response = await fetch(\"@Config[\"endpoint\"]/test-cors\", {\r\n                    method : \"GET\",\r\n                    headers : { \r\n                    \"Content-Type\": \"application/json\"\r\n                    }\r\n                });\r\n                \r\n                const result = await response.json();\r\n                alert(result.message);\r\n            }\r\n\r\n            const btn = document.getElementById(\"fetchName\");\r\n            btn.addEventListener(\"click\", async () => {\r\n                await getName();\r\n            });\r\n\r\n            const btn2 = document.getElementById(\"test\");\r\n            btn2.addEventListener(\"click\", async () => {\r\n                await testCors();\r\n            });\r\n\r\n        </script>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/minimal-api/anti-forgery-3/frontend/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nWebApplication app = builder.Build();\r\napp.Urls.Add(\"https://localhost:5002\");\r\n\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/minimal-api/anti-forgery-3/frontend/appsettings.json",
    "content": "{\r\n    \"endpoint\" : \"https://localhost:5001\"\r\n}"
  },
  {
    "path": "projects/minimal-api/anti-forgery-3/frontend/frontend.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/build.bat",
    "content": "dotnet build anti-forgery-1\r\ndotnet build anti-forgery-2\r\ndotnet build anti-forgery-3\r\ndotnet build endpoint-filter-1\r\ndotnet build endpoint-filter-2\r\ndotnet build endpoint-filter-3\r\ndotnet build endpoint-filter-4\r\ndotnet build hello-world\r\ndotnet build iform-file\r\ndotnet build iform-file-collection\r\ndotnet build link-generator-path-by-route-name\r\ndotnet build map\r\ndotnet build map-2\r\ndotnet build map-3\r\ndotnet build map-4\r\ndotnet build map-5\r\ndotnet build map-6\r\ndotnet build map-group-1\r\ndotnet build map-group-2\r\ndotnet build map-group-3\r\ndotnet build map-methods\r\ndotnet build map-post\r\ndotnet build map-post-2\r\ndotnet build minimal-api-form-model-binding\r\ndotnet build open-api-1\r\ndotnet build open-api-2\r\ndotnet build parameter-binding-custom-bind-async\r\ndotnet build parameter-binding-custom-try-parse\r\ndotnet build parameter-binding-header-explicit\r\ndotnet build parameter-binding-json-explicit\r\ndotnet build parameter-binding-json-implicit\r\ndotnet build parameter-binding-query-string-explicit\r\ndotnet build parameter-binding-query-string-implicit\r\ndotnet build parameter-binding-route-explicit\r\ndotnet build parameter-binding-route-implicit\r\ndotnet build parameter-binding-special-types\r\ndotnet build route-constraints-decimal\r\ndotnet build route-constraints-int\r\ndotnet test typed-results-1"
  },
  {
    "path": "projects/minimal-api/build.sh",
    "content": "#!/bin/bash\ndotnet build anti-forgery-1\ndotnet build anti-forgery-2\ndotnet build anti-forgery-3\ndotnet build endpoint-filter-1\ndotnet build endpoint-filter-2\ndotnet build endpoint-filter-3\ndotnet build endpoint-filter-4\ndotnet build hello-world\ndotnet build iform-file\ndotnet build iform-file-collection\ndotnet build link-generator-path-by-route-name\ndotnet build map\ndotnet build map-2\ndotnet build map-3\ndotnet build map-4\ndotnet build map-5\ndotnet build map-6\ndotnet build map-group-1\ndotnet build map-group-2\ndotnet build map-group-3\ndotnet build map-methods\ndotnet build map-post\ndotnet build map-post-2\ndotnet build minimal-api-form-model-binding\ndotnet build open-api-1\ndotnet build open-api-2\ndotnet build parameter-binding-custom-bind-async\ndotnet build parameter-binding-custom-try-parse\ndotnet build parameter-binding-header-explicit\ndotnet build parameter-binding-json-explicit\ndotnet build parameter-binding-json-implicit\ndotnet build parameter-binding-query-string-explicit\ndotnet build parameter-binding-query-string-implicit\ndotnet build parameter-binding-route-explicit\ndotnet build parameter-binding-route-implicit\ndotnet build parameter-binding-special-types\ndotnet build route-constraints-decimal\ndotnet build route-constraints-int\ndotnet test typed-results-1\n"
  },
  {
    "path": "projects/minimal-api/endpoint-filter-1/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", (HttpContext context) => Results.Content($$\"\"\"\r\n<html>\r\n<head>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        {{ context.Items[\"message\"]}}\r\n    </div>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"))\r\n    .AddEndpointFilter((context, next) =>\r\n    {\r\n       context.HttpContext.Items[\"message\"] = \"hello from filter\";\r\n       return next(context); \r\n    });\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-api/endpoint-filter-1/README.md",
    "content": "# Apply EndpointFilter to your minimal API\r\n\r\nThis shows how to apply an EndpointFilter to your minimal API.\r\n"
  },
  {
    "path": "projects/minimal-api/endpoint-filter-1/endpoint-filter-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/endpoint-filter-2/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", (HttpContext context) => Results.Content($$\"\"\"\r\n<html>\r\n<head>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        {{ context.Items[\"message\"]}}\r\n    </div>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"))\r\n    .AddEndpointFilter((context, next) =>\r\n    {\r\n       context.HttpContext.Items[\"message\"] = \"filter 1\";\r\n       return next(context); \r\n    })\r\n    .AddEndpointFilter((context, next) =>\r\n    {\r\n       context.HttpContext.Items[\"message\"] += \" filter 2\";\r\n       return next(context); \r\n    })\r\n    .AddEndpointFilter((context, next) =>\r\n    {\r\n       context.HttpContext.Items[\"message\"] += \" filter 3\";\r\n       return next(context); \r\n    });\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-api/endpoint-filter-2/README.md",
    "content": "# Apply multiple EndpointFilters to your minimal APIs\r\n\r\nThis shows how to apply multiple EndpointFilters to your minimal API.\r\n"
  },
  {
    "path": "projects/minimal-api/endpoint-filter-2/endpoint-filter-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/endpoint-filter-3/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", (HttpContext context) => Results.Content($$\"\"\"\r\n<html>\r\n    <head>\r\n        <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n    </head>\r\n    <body>\r\n        <div class=\"container\">\r\n            {{ context.Items[\"message\"]}}\r\n        </div>\r\n    </body>\r\n</html>\r\n\"\"\", \"text/html\"))\r\n    .AddEndpointFilter((context, next) =>\r\n    {\r\n       context.HttpContext.Items[\"message\"] = \"filter 1\";\r\n       var result = next(context); \r\n       context.HttpContext.Response.Headers[\"x-application\"] += \"filter 1 \";\r\n       return result;\r\n    })\r\n    .AddEndpointFilter((context, next) =>\r\n    {\r\n       context.HttpContext.Items[\"message\"] += \" filter 2\";\r\n       var result = next(context); \r\n       context.HttpContext.Response.Headers[\"x-application\"] += \"filter 2 \";\r\n       return result;\r\n    })\r\n    .AddEndpointFilter((context, next) =>\r\n    {\r\n       context.HttpContext.Items[\"message\"] += \" filter 3\";\r\n       var result = next(context);\r\n       context.HttpContext.Response.Headers[\"x-application\"] += \"filter 3 \";\r\n       return result; \r\n    });\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-api/endpoint-filter-3/README.md",
    "content": "# RouteHandlerFilterDelegate sequence in multiple endpoint filters\r\n\r\nThis examples shows the sequence of code execution before `RouteHandlerFilterDelegate ` and after `RouteHandlerFilterDelegate` in multiple endpoint filters.\r\n\r\nIn this case, inspect the response for `x-application` header on your browser."
  },
  {
    "path": "projects/minimal-api/endpoint-filter-3/endpoint-filter-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/endpoint-filter-4/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", (HttpContext context) => Results.Content($$\"\"\"\r\n<html>\r\n    <head>\r\n        <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n    </head>\r\n    <body>\r\n        <div class=\"container\">\r\n            <ul>\r\n                <li><a href=\"/about/dody\">/about/dody</a></li>\r\n                <li><a href=\"/about/anne\">/about/anne</a></li>\r\n            </ul>\r\n        </div>\r\n    </body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\n\r\napp.MapGet(\"/about/{name}\", (string name) =>\r\n{\r\n    if (name.Equals(\"anne\"))\r\n        return Results.Ok(name);\r\n    else\r\n        return Results.BadRequest();\r\n}).AddEndpointFilter(async (context, next) =>\r\n{\r\n    var result = await next(context); \r\n\r\n    return result switch\r\n    {\r\n        IStatusCodeHttpResult a when a.StatusCode == StatusCodes.Status400BadRequest => Results.Ok(\"Bad Request\"),\r\n        _ => result\r\n    };\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-api/endpoint-filter-4/README.md",
    "content": "# Use IStatusCodeHttpResult to detect return result in filter\r\n\r\nThese are the new available HttpResults interfaces. \r\n``` csharp\r\n    Microsoft.AspNetCore.Http.IContentTypeHttpResult\r\n    Microsoft.AspNetCore.Http.IFileHttpResult\r\n    Microsoft.AspNetCore.Http.INestedHttpResult\r\n    Microsoft.AspNetCore.Http.IStatusCodeHttpResult\r\n    Microsoft.AspNetCore.Http.IValueHttpResult\r\n    Microsoft.AspNetCore.Http.IValueHttpResult<TValue>\r\n```"
  },
  {
    "path": "projects/minimal-api/endpoint-filter-4/endpoint-filter-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/hello-world/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nWebApplication app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    // Duplicate the code below and write more messages. Save and refresh your browser to see the result.\r\n    await context.Response.WriteAsync(\"Hello world .NET 6. Make sure you run this app using 'dotnet watch run'.\");\r\n});\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-api/hello-world/README.md",
    "content": "# Hello World using the new simplified hosting\r\n\r\nThis hello world sample uses the brand new `WebApplication` hosting class. This simplifies configuring an ASP.NET Core application by a mile.\r\n\r\n\r\nThis is how this code sample used to look like using `IHostBuilder`. \r\n``` C#\r\nnamespace PracticalAspNetCore\r\n{\r\n    public class Startup\r\n    {\r\n        public void Configure(IApplicationBuilder app)\r\n        {\r\n            app.Run(async context =>\r\n            {\r\n                // Duplicate the code below and write more messages. Save and refresh your browser to see the result.\r\n                await context.Response.WriteAsync(\"Hello world .NET 6. Make sure you run this app using 'dotnet watch run'.\");\r\n            });\r\n        }\r\n    }\r\n\r\n    public class Program\r\n    {\r\n        public static void Main(string[] args) =>\r\n            CreateHostBuilder(args).Build().Run();\r\n\r\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\r\n            Host.CreateDefaultBuilder(args)\r\n                .ConfigureWebHostDefaults(webBuilder =>\r\n                    webBuilder.UseStartup<Startup>()\r\n                );\r\n    }\r\n}\r\n```\r\n\r\nand now \r\n\r\n``` c#\r\nusing Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nWebApplication app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    // Duplicate the code below and write more messages. Save and refresh your browser to see the result.\r\n    await context.Response.WriteAsync(\"Hello world .NET 6. Make sure you run this app using 'dotnet watch run'.\");\r\n});\r\n\r\nawait app.RunAsync();\r\n```\r\n\r\nYou can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs). "
  },
  {
    "path": "projects/minimal-api/hello-world/hello-world.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/iform-file/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", (HttpContext context) => Results.Content($$\"\"\"\r\n<html>\r\n<head>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        <h1>Upload File</h1>\r\n        <div class=\"alert alert-info mb-3\">You can find the uploaded file in 'uploaded' directory</div>\r\n        <form action=\"upload\" method=\"post\" enctype=\"multipart/form-data\">\r\n            <input type=\"file\" name=\"file\" />\r\n            <br/>\r\n            <button type=\"submit\" class=\"btn btn-primary mt-3\">Upload</button>\r\n        </form>\r\n    </div>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\napp.MapPost(\"/upload\", async (IFormFile file, IWebHostEnvironment env) =>\r\n{\r\n    if (file is not null && file.Length > 0)\r\n    {\r\n        var folder = Path.Combine(env.ContentRootPath, \"uploaded\");\r\n        if (Directory.Exists(folder) is false)\r\n            Directory.CreateDirectory(folder);\r\n\r\n        var path = Path.Combine(folder, file.FileName);\r\n        Console.WriteLine(path);\r\n        using var stream = System.IO.File.OpenWrite(path);\r\n        await file.CopyToAsync(stream); \r\n    }\r\n\r\n    return Results.LocalRedirect(\"/\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-api/iform-file/README.md",
    "content": "# Use IFormFile in Minimal API \r\n\r\nUse IFormFile in Minimal API to upload a file. "
  },
  {
    "path": "projects/minimal-api/iform-file/i-form-file.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/iform-file-collection/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", (HttpContext context) => Results.Content($$\"\"\"\r\n<html>\r\n<head>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        <h1>Upload Files</h1>\r\n        <div class=\"alert alert-info mb-3\">You can find the uploaded file in 'uploaded' directory</div>\r\n        <form action=\"upload\" method=\"post\" enctype=\"multipart/form-data\">\r\n            <input type=\"file\" name=\"files\" multiple/>\r\n            <br/>\r\n            <button type=\"submit\" class=\"btn btn-primary mt-3\">Upload</button>\r\n        </form>\r\n    </div>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\napp.MapPost(\"/upload\", async (IFormFileCollection files, IWebHostEnvironment env) =>\r\n{\r\n    var folder = Path.Combine(env.ContentRootPath, \"uploaded\");\r\n    if (Directory.Exists(folder) is false)\r\n            Directory.CreateDirectory(folder);\r\n\r\n    foreach(var file in files)\r\n    {\r\n        if (file is not null && file.Length > 0)\r\n        {\r\n            \r\n            var path = Path.Combine(folder, file.FileName);\r\n            Console.WriteLine(path);\r\n            using var stream = System.IO.File.OpenWrite(path);\r\n            await file.CopyToAsync(stream); \r\n        }\r\n    }\r\n\r\n    return Results.LocalRedirect(\"/\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-api/iform-file-collection/README.md",
    "content": "# Use IFormFileCollection in Minimal API \r\n\r\nUse IFormFileCollection in Minimal API to upload multiple files. "
  },
  {
    "path": "projects/minimal-api/iform-file-collection/i-form-file-collection.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/link-generator-path-by-route-name/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.AspNetCore.Routing;\r\n\r\nstatic IResult Index(LinkGenerator linker) => \r\n    Results.Text(@$\"<html><body>\r\n    <ul>\r\n        <li><a href=\"\"{linker.GetPathByName(\"about\", values: null)}\"\">About</a></li>\r\n        <li><a href=\"\"{linker.GetPathByName(\"about\", values: new { name = \"anne\"})}\"\">About Anne</a></li>\r\n        <li><a href=\"\"{linker.GetPathByName(\"about\", values: new { name = \"babka\"})}\"\">About Babka</a></li>\r\n    </ul>\r\n    </body></html>\" , \"text/html\");\r\n\r\nstatic IResult About(string? name) => Results.Text(@$\"<html><body><h1>About {name}</h1></body></html>\"  , \"text/html\");\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Map(\"/\", Index);\r\napp.Map(\"/about\", About).WithName(\"about\");\r\n\r\napp.Run();\r\n\r\n   \r\n "
  },
  {
    "path": "projects/minimal-api/link-generator-path-by-route-name/README.md",
    "content": "# LinkGenerator - Generate path from a route name\r\n\r\nUse `LinkGenerator.GetPathByName` to generate path from a route name. You name a route by using `WithName` extension method `app.Map(\"/about\", About).WithName(\"about\");`.\r\n\r\n**Route name is case sensitive!**"
  },
  {
    "path": "projects/minimal-api/link-generator-path-by-route-name/link-generator-path-by-route-name.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <LangVersion>preview</LangVersion>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map/Program.cs",
    "content": "IResult Index() => Results.Json(new Greeting(\"Hello World\"));\r\nIResult About() => Results.Json(new { about = \"me\" });\r\n\r\nvar app = WebApplication.Create();\r\napp.Map(\"/\", Index);\r\napp.Map(\"/about\", About);\r\n\r\napp.Run();\r\n\r\npublic record Greeting(string Message);\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map/README.md",
    "content": "# Map to JsonResult\r\n\r\nThis is a new functionality in ASP.NET Core to enable creating API without using Controller.\r\n\r\nIn this example we create two endpoints, `/` and `/about`.\r\n\r\n`IEndpointConventionBuilder.Map` responds to all HTTP Verbs. \r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map/map.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>`n    <LangVersion>preview</LangVersion>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-2/Program.cs",
    "content": "IResult TryContext(HttpContext context) => Results.Json(new { path = context.Request.Path });\r\n\r\nvar app = WebApplication.Create();\r\napp.Map(\"/\", TryContext);\r\napp.Run();\r\n"
  },
  {
    "path": "projects/minimal-api/map-2/README.md",
    "content": "# Accessing HttpContext in Map\r\n\r\nThis example shows how to access `HttpContext` in Map.\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-2/map-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/map-3/Program.cs",
    "content": "IResult TryContext(MyData data) => Results.Json(new { greetings = $\"Hello {data.Name}\" });\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddSingleton<MyData>();\r\n\r\nvar app = builder.Build();\r\napp.Map(\"/\", TryContext);\r\napp.Run();\r\n\r\npublic class MyData \r\n{\r\n    public string Name => \"Anne\";\r\n}\r\n"
  },
  {
    "path": "projects/minimal-api/map-3/README.md",
    "content": "# Accessing your objects in Map\r\n\r\nThis example shows how to access your objects in Map.\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-3/map-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-4/Program.cs",
    "content": "using Scalar.AspNetCore;\n\nvar builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddOpenApi();\n\nvar app = builder.Build();\n\napp.MapOpenApi();\napp.MapScalarApiReference();\n\nstring Plaintext() => \"Hello, World!\";\napp.MapGet(\"/hello\", Plaintext);\n\nGreeting Json() => new Greeting(\"Hello, World!\");\napp.MapGet(\"/json\", Json);\n\napp.MapGet(\"/hello/{name}\", (string name) => new Greeting($\"Hello, {name}!\"));\n\napp.Run();\n\npublic record Greeting(string Message);"
  },
  {
    "path": "projects/minimal-api/map-4/README.md",
    "content": "# Built-in OpenAPI with Scalar UI\n\nThis sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support with basic endpoints.\n\n## Key Features\n\n- No external packages required (Swashbuckle/NSwag removed)\n- OpenAPI 3.1 document generated automatically\n- Modern Scalar UI for interactive documentation\n- AOT-compatible\n\n## Running the Sample\n\n```bash\ndotnet watch run\n```\n\n## Viewing the Documentation\n\n- **Scalar UI:** Navigate to `/scalar`\n- **OpenAPI JSON:** Navigate to `/openapi/v1.json`\n\n## Migration Notes\n\nThis sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support.\n\n**Changes:**\n- Removed `Swashbuckle.AspNetCore` package dependency\n- Added `Microsoft.AspNetCore.OpenApi` (built-in)\n- Added `Scalar.AspNetCore` for modern UI\n- Enabled `GenerateDocumentationFile` in .csproj\n\nSee `OUT-OF-DATE.md` for migration details.\n"
  },
  {
    "path": "projects/minimal-api/map-4/map-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <ImplicitUsings>true</ImplicitUsings>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <NoWarn>$(NoWarn);1591</NoWarn>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" />\n    <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\n  </ItemGroup>\n</Project>\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-5/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nvar app = WebApplication.Create();\r\n\r\nIResult Plaintext(HttpRequest request)\r\n{\r\n    var name = request.Query[\"name\"];\r\n    if (!string.IsNullOrWhiteSpace(name))\r\n        return Results.Text(\"hello \" + name, \"text/html\");\r\n    else\r\n        return Results.Text(\"hello\", \"text/html\");\r\n}\r\n\r\napp.MapGet(\"/hello\", Plaintext);\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    return Results.Text(\r\n$@\"<html>\r\n        <body>\r\n            <ul>\r\n                <li><a href=\"\"/hello?name=anne\"\">Greet with name</a></li>\r\n                <li><a href=\"\"/hello\"\">Just greet</a></li>\r\n            </ul>\r\n        </body>\r\n    </html>\r\n\", \"text/html\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/minimal-api/map-5/README.md",
    "content": "# Use injected HttpRequest\r\n\r\nYou can inject `HttpRequest` directly instead of having to rely on `HttpContext` (e.g `HttpContext.Request`).\r\n"
  },
  {
    "path": "projects/minimal-api/map-5/map-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Swashbuckle.AspNetCore\" Version=\"6.6.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-6/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Routing;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nvar app = WebApplication.Create();\r\nMapEndpoints(app);\r\nPages.AllPages(app);\r\n\r\napp.Run();\r\n\r\nvoid MapEndpoints(IEndpointRouteBuilder endpoints)\r\n{\r\n    var header = \"<html><body>\";\r\n    var footer = \"</body></html>\";\r\n\r\n    endpoints.Map(\"/\", () => \r\n        Results.Text(header +  @\"<a href=\"\"/about-us\"\">About Us</a><br/><a href=\"\"/contact-us\"\">Contact Us</a>\" + footer, \"text/html\") \r\n    );\r\n}\r\n\r\npublic static class Pages\r\n{\r\n    public static void AllPages(IEndpointRouteBuilder endpoints)\r\n    {\r\n        endpoints.Map(\"/about-us\", () => \"About Us\" );\r\n        endpoints.Map(\"/contact-us\", () => \"Contact Us\" );\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/minimal-api/map-6/README.md",
    "content": "# IEndpointRouteBuilder\r\n\r\nIn this example we use use `IEndpointRouteBuilder` interface in a method as a way to organize our endpoints configuration. This gives flexibility on how we organize our code."
  },
  {
    "path": "projects/minimal-api/map-6/map-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n\r\n\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-group-1/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", () => Results.Content(\"\"\"\r\n<html>\r\n<head>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        <ul>\r\n            <li><a href=\"/about\">/about</a></li>\r\n            <li><a href=\"/about/us\">/about/us</a></li>\r\n            <li><a href=\"/about/all\">/about/all</a></li>\r\n        </ul>\r\n    </div>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\n\r\napp.MapGroup(\"/about\").MapAboutApi();\r\n\r\napp.Run();\r\n\r\npublic static class AboutApi\r\n{\r\n    public static RouteGroupBuilder MapAboutApi(this RouteGroupBuilder group)\r\n    {\r\n        group.MapGet(\"/\", () => Results.Ok(\"about\"));\r\n        group.MapGet(\"/us\", () => Results.Ok(\"Us\"));\r\n        group.MapGet(\"/all\", () => Results.Ok(\"All\"));\r\n\r\n        return group;\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-group-1/README.md",
    "content": "# Route Groups\r\n\r\n`MapGroup()` extension methods allow grouping of endpoints with a common prefix. It also allow group metadata to be attached to the group."
  },
  {
    "path": "projects/minimal-api/map-group-1/map-group-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/map-group-2/Program.cs",
    "content": "using Scalar.AspNetCore;\n\nvar builder = WebApplication.CreateBuilder();\nbuilder.Services.AddOpenApi();\nvar app = builder.Build();\napp.MapOpenApi();\napp.MapScalarApiReference();\n\napp.MapGet(\"/\", () => Results.Content(\"\"\"\n<html>\n<head>\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\n</head>\n<body>\n    <div class=\"container\">\n        <ul>\n            <li><a href=\"/about\">/about</a></li>\n            <li><a href=\"/about/us\">/about/us</a></li>\n            <li><a href=\"/about/all\">/about/all</a></li>\n            <li><a href=\"/scalar\">Scalar API Documentation</a></li>\n            <li><a href=\"/openapi/v1.json\">OpenAPI JSON</a></li>\n        </ul>\n    </div>\n</body>\n</html>\n\"\"\", \"text/html\"));\n\n\napp.MapGroup(\"/about\")\n    .MapAboutApi()\n    .WithTags(\"about_apis\")\n    .WithDescription(\"This is a group of API related to About\");\n\napp.Run();\n\npublic static class AboutApi\n{\n    public static RouteGroupBuilder MapAboutApi(this RouteGroupBuilder group)\n    {\n        group.MapGet(\"/\", () => Results.Ok(\"about\"));\n        group.MapGet(\"/us\", () => Results.Ok(\"Us\"));\n        group.MapGet(\"/all\", () => Results.Ok(\"All\"));\n\n        return group;\n    }\n}\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-group-2/README.md",
    "content": "# Built-in OpenAPI with Scalar UI\n\nThis sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support with route groups.\n\n## Key Features\n\n- No external packages required (Swashbuckle/NSwag removed)\n- OpenAPI 3.1 document generated automatically\n- Modern Scalar UI for interactive documentation\n- Demonstrates route grouping with `WithTags()` and `WithDescription()`\n- AOT-compatible\n\n## Running the Sample\n\n```bash\ndotnet watch run\n```\n\n## Viewing the Documentation\n\n- **Scalar UI:** Navigate to `/scalar`\n- **OpenAPI JSON:** Navigate to `/openapi/v1.json`\n\n## Migration Notes\n\nThis sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support.\n\n**Changes:**\n- Removed `Swashbuckle.AspNetCore` package dependency\n- Added `Microsoft.AspNetCore.OpenApi` (built-in)\n- Added `Scalar.AspNetCore` for modern UI\n- Enabled `GenerateDocumentationFile` in .csproj\n\nSee `OUT-OF-DATE.md` for migration details.\n"
  },
  {
    "path": "projects/minimal-api/map-group-2/map-group-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <ImplicitUsings>true</ImplicitUsings>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <NoWarn>$(NoWarn);1591</NoWarn>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" />\n    <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "projects/minimal-api/map-group-3/Program.cs",
    "content": "using Scalar.AspNetCore;\n\nvar builder = WebApplication.CreateBuilder();\nbuilder.Services.AddOpenApi();\nvar app = builder.Build();\napp.MapOpenApi();\napp.MapScalarApiReference();\n\napp.MapGet(\"/\", () => Results.Content(\"\"\"\n<html>\n<head>\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\n</head>\n<body>\n    <div class=\"container\">\n        <ul>\n            <li><a href=\"/about\">/about</a></li>\n            <li><a href=\"/about/us\">/about/us</a></li>\n            <li><a href=\"/about/all\">/about/all</a></li>\n            <li><a href=\"/transaction\">/transaction</li>\n            <li><a href=\"/transaction/pay\">/transaction/pay</li>\n            <li><a href=\"/scalar\">Scalar API Documentation</a></li>\n            <li><a href=\"/openapi/v1.json\">OpenAPI JSON</a></li>\n        </ul>\n    </div>\n</body>\n</html>\n\"\"\", \"text/html\")).ExcludeFromDescription();\n\n\napp.MapGroup(\"/about\")\n    .MapAboutApi();\n\napp.MapGroup(\"/transaction\")\n    .MapTransactionApi();\n\napp.Run();\n\npublic static class AboutApi\n{\n    public static RouteGroupBuilder MapAboutApi(this RouteGroupBuilder group)\n    {\n        group.MapGet(\"/\", () => Results.Ok(\"about\")).ExcludeFromDescription();\n        group.MapGet(\"/us\", () => Results.Ok(\"Us\"));\n        group.MapGet(\"/all\", () => Results.Ok(\"All\"));\n\n        return group;\n    }\n}\n\npublic static class TransactionAPI\n{\n    public static RouteGroupBuilder MapTransactionApi(this RouteGroupBuilder group)\n    {\n        group.MapGet(\"/\", () => Results.Ok(\"transaction\")).ExcludeFromDescription();\n        group.MapGet(\"/pay\", () => Results.Ok(\"Pay\"));\n        \n        return group;\n    }\n}\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-group-3/README.md",
    "content": "# Built-in OpenAPI with Scalar UI\n\nThis sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support with route groups and endpoint exclusion.\n\n## Key Features\n\n- No external packages required (Swashbuckle/NSwag removed)\n- OpenAPI 3.1 document generated automatically\n- Modern Scalar UI for interactive documentation\n- Demonstrates `ExcludeFromDescription()` to hide endpoints from API docs\n- Multiple route groups\n- AOT-compatible\n\n## Running the Sample\n\n```bash\ndotnet watch run\n```\n\n## Viewing the Documentation\n\n- **Scalar UI:** Navigate to `/scalar`\n- **OpenAPI JSON:** Navigate to `/openapi/v1.json`\n\n## Migration Notes\n\nThis sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support.\n\n**Changes:**\n- Removed `Swashbuckle.AspNetCore` package dependency\n- Added `Microsoft.AspNetCore.OpenApi` (built-in)\n- Added `Scalar.AspNetCore` for modern UI\n- Enabled `GenerateDocumentationFile` in .csproj\n\nSee `OUT-OF-DATE.md` for migration details.\n"
  },
  {
    "path": "projects/minimal-api/map-group-3/map-group-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <ImplicitUsings>true</ImplicitUsings>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <NoWarn>$(NoWarn);1591</NoWarn>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" />\n    <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "projects/minimal-api/map-methods/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nobject Greet([FromBody] Greeting greet, HttpContext context) \r\n            => new { Message = context.Request.Method + \":\" + greet.Message };\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.MapMethods(\"/greet\", new[] { \"POST\", \"PUT\", \"PATCH\" }, Greet);\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    string page = @\"<!doctype html><html><body>\r\n            <div id=\"\"response\"\"></div>\r\n            <button type=\"\"button\"\" onclick=\"\"send('POST')\"\">Send POST</button>\r\n            <button type=\"\"button\"\" onclick=\"\"send('PUT')\"\">Send PUT</button>\r\n            <button type=\"\"button\"\" onclick=\"\"send('PATCH')\"\">Send PATCH</button>\r\n            <script>\r\n                async function postData(method, url = '', data = {}) {\r\n                const response = await fetch(url, {\r\n                    method: method, \r\n                    headers: {\r\n                    'Content-Type': 'application/json'\r\n                    },\r\n                    body: JSON.stringify({ message : \"\"Hello World\"\"}) \r\n                });\r\n                return response.json(); // parses JSON response into native JavaScript objects\r\n                }\r\n                \r\n                function send(method){\r\n                    postData(method, window.location + 'greet', { answer: 42 })\r\n                    .then(data => {\r\n                        document.getElementById(\"\"response\"\").innerHTML = data.message;\r\n                    });\r\n                }\r\n            </script>\r\n        </body></html>\r\n    \";\r\n\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await context.Response.WriteAsync(page);\r\n});\r\n\r\napp.Run();\r\n\r\npublic record Greeting(string Message);\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-methods/README.md",
    "content": "# Handle multiple HTTP Verbs with JSON model binder\r\n\r\nThis shows how to setup `MapMethods` to handle multiple HTTP Verbs request and with JSON model binder. In this sample we send 'PUT', 'POST' and 'PATCH' verbs.\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-methods/map-methods.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-post/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nIResult Greet([FromBody] Greeting greet) => Results.Json(new { greet.Message });\r\n\r\nvar app = WebApplication.Create();\r\napp.MapPost(\"/greet\", Greet);\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    string page = @\"<!doctype html><html><body>\r\n                            <div id=\"\"response\"\"></div><button type=\"\"button\"\" onclick=\"\"send()\"\">Click</button>\r\n                            <script>\r\n                                async function postData(url = '', data = {}) {\r\n                                const response = await fetch(url, {\r\n                                    method: 'POST', \r\n                                    headers: {\r\n                                    'Content-Type': 'application/json'\r\n                                    },\r\n                                    body: JSON.stringify({ message : \"\"Hello World\"\"}) \r\n                                });\r\n                                return response.json(); // parses JSON response into native JavaScript objects\r\n                                }\r\n                                \r\n                                function send(){\r\n                                    postData(window.location + 'greet', { answer: 42 })\r\n                                    .then(data => {\r\n                                        document.getElementById(\"\"response\"\").innerHTML = data.message;\r\n                                    });\r\n                                }\r\n                            </script>\r\n                        </body></html>\r\n                    \";\r\n\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await context.Response.WriteAsync(page);\r\n});\r\n\r\napp.Run();\r\n\r\npublic record Greeting(string Message);\r\n"
  },
  {
    "path": "projects/minimal-api/map-post/README.md",
    "content": "# MapPost with JSON model binder\r\n\r\nThis shows how to setup `MapPost` to handle POST request and with JSON model binder.\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-post/map-post.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/map-post-2/Program.cs",
    "content": "using System;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.MapPost(\"/greet\", MyApi.Greet);\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    string page = @\"<!doctype html><html><body>\r\n            <div id=\"\"response\"\"></div><button type=\"\"button\"\" onclick=\"\"send()\"\">Click</button>\r\n            <script>\r\n                async function postData(url = '', data = {}) {\r\n                const response = await fetch(url, {\r\n                    method: 'POST', \r\n                    headers: {\r\n                    'Content-Type': 'application/json'\r\n                    },\r\n                    body: JSON.stringify({ message : \"\"Hello World\"\"}) \r\n                });\r\n                return response.json(); // parses JSON response into native JavaScript objects\r\n                }\r\n                \r\n                function send(){\r\n                    postData(window.location + 'greet', { answer: 42 })\r\n                    .then(data => {\r\n                        document.getElementById(\"\"response\"\").innerHTML = data.message;\r\n                    });\r\n                }\r\n            </script>\r\n        </body></html>\r\n    \";\r\n\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await context.Response.WriteAsync(page);\r\n});\r\n\r\napp.Run();\r\n\r\npublic record Greeting(string Message);\r\n\r\npublic static class MyApi\r\n{\r\n    public static IResult Greet([FromBody] Greeting greet) => Results.Json(new { greet.Message });\r\n}\r\n"
  },
  {
    "path": "projects/minimal-api/map-post-2/README.md",
    "content": "# MapPost with JSON model binder\r\n\r\nThis shows how to setup `MapPost` to handle POST request and with JSON model binder with static method.\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/map-post-2/map-post-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/minimal-api-form-model-binding/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"minimal-api-form-model-binding.sln\"\r\n}"
  },
  {
    "path": "projects/minimal-api/minimal-api-form-model-binding/Program.cs",
    "content": "using Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery();\r\nvar app = builder.Build();\r\napp.UseAntiforgery();\r\napp.MapGet(\"/\", (HttpContext context, IAntiforgery antiforgery) =>\r\n{\r\n    var token = antiforgery.GetAndStoreTokens(context);\r\n    return Results.Content(Template($$\"\"\"\r\n            <div class=\"row\">\r\n                <div class=\"col-md-6\">\r\n                    <form method=\"POST\" action=\"/\">\r\n                        <input name=\"{{token.FormFieldName}}\" type=\"hidden\" value=\"{{token.RequestToken}}\" />\r\n                        <div class=\"mb-3\">\r\n                            <label for=\"Title\" class=\"form-label\">Title</label>\r\n                            <input type=\"text\" class=\"form-control\" id=\"Title\" name=\"Title\">\r\n                        </div>\r\n                        <div class=\"mb-3\">\r\n                            <label for=\"Body\" class=\"form-label\">Body</label>\r\n                            <textarea class=\"form-control\" id=\"Body\" name=\"Body\" rows=\"3\"></textarea>\r\n                        </div>\r\n                        <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n                    </form>\r\n                </div>\r\n            </div>\r\n    \"\"\"), \"text/html\");\r\n});\r\n\r\napp.MapPost(\"/\", async ([FromForm] BlogPostInput input, HttpContext context, IAntiforgery antiforgery) =>\r\n{\r\n    try\r\n    {\r\n        await antiforgery.ValidateRequestAsync(context);\r\n        return Results.Content(Template($$\"\"\"\r\n        <div class=\"row\">\r\n            <div class=\"col-md-6\">\r\n                Title : {{input.Title}}<br/>\r\n                Body : {{input.Body}}\r\n            </div>\r\n        </div>\r\n\"\"\"), \"text/html\");\r\n    }\r\n    catch (AntiforgeryValidationException)\r\n    {\r\n        return TypedResults.BadRequest(\"Invalid anti-forgery token\");\r\n    }\r\n});\r\n\r\n\r\napp.Run();\r\n\r\nstatic string Template(string body)\r\n{\r\n    return $$\"\"\"\r\n    <html>\r\n    <head>\r\n      <title>Form Model Binding</title>\r\n      <link href=\"https://fastly.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM\" crossorigin=\"anonymous\">\r\n    </head>\r\n    <body>\r\n        <div class=\"container\">\r\n            <h1>Form Model Binding</h1>\r\n            {{body}}\r\n        </div>\r\n    </body>\r\n    </html>\r\n    \"\"\";\r\n}\r\n\r\npublic class BlogPostInput(string? title, string body)\r\n{\r\n    public string? Title { get; set; } = title;\r\n    public string Body { get; set; } = body;\r\n}\r\n"
  },
  {
    "path": "projects/minimal-api/minimal-api-form-model-binding/README.md",
    "content": "# Minimal API form model binding\r\n\r\nThis sample demonstrates the ability to use `[FromForm]` binding in Minimal API.\r\n"
  },
  {
    "path": "projects/minimal-api/minimal-api-form-model-binding/minimal-api-form-model-binding.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    \r\n    <Nullable>enable</Nullable>\r\n  </PropertyGroup>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/minimal-api-form-model-binding/minimal-api-form-model-binding.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"minimal-api-form-model-binding\", \"minimal-api-form-model-binding.csproj\", \"{9F6FC559-2A87-4F9F-BFF5-1E340B790048}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{9F6FC559-2A87-4F9F-BFF5-1E340B790048}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{9F6FC559-2A87-4F9F-BFF5-1E340B790048}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{9F6FC559-2A87-4F9F-BFF5-1E340B790048}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{9F6FC559-2A87-4F9F-BFF5-1E340B790048}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {B1D5D49B-74DE-4DE6-9327-C9BA5F19073B}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/minimal-api/open-api-1/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#da4ff0\",\r\n        \"activityBar.background\": \"#da4ff0\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#ebce14\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#da4ff0\",\r\n        \"statusBar.background\": \"#d020ec\",\r\n        \"statusBar.debuggingBackground\": \"#3cec20\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#da4ff0\",\r\n        \"statusBarItem.remoteBackground\": \"#d020ec\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#d020ec\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#d020ec99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#d020ec\"\r\n}"
  },
  {
    "path": "projects/minimal-api/open-api-1/Program.cs",
    "content": "using Scalar.AspNetCore;\n\nvar builder = WebApplication.CreateBuilder();\nbuilder.Services.AddOpenApi();\n\nvar app = builder.Build();\napp.MapOpenApi();\napp.MapScalarApiReference();\n\napp.MapGet(\"/\", () => Results.Content(\"\"\"\n<html>\n<head>\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\n</head>\n<body>\n    <div class=\"container\">\n        <ul>\n            <li><a href=\"/scalar\">Scalar API Documentation</a></li>\n            <li><a href=\"/openapi/v1.json\">OpenAPI JSON</a></li>\n        </ul>\n    </div>\n</body>\n</html>\n\"\"\", \"text/html\"));\n\napp.MapGet(\"/greeting\", Hello.GetGreeting);\n\napp.Run();\n\npublic record Person(string Name);\n\n/// <summary>\n/// Return greeting given name\n/// </summary>\npublic static class Hello\n{\n    /// <param name=\"name\">The name of the person to greet</param>\n    public static IResult GetGreeting(string name) => Results.Ok(new Person(name));\n}\n"
  },
  {
    "path": "projects/minimal-api/open-api-1/README.md",
    "content": "# Built-in OpenAPI with Scalar UI\n\nThis sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support.\n\n## Key Features\n\n- No external packages required (Swashbuckle/NSwag removed)\n- OpenAPI 3.1 document generated automatically\n- XML doc comments populate API descriptions\n- Modern Scalar UI for interactive documentation\n- AOT-compatible\n\n## Running the Sample\n\n```bash\ndotnet watch run\n```\n\n## Viewing the Documentation\n\n- **Scalar UI:** Navigate to `/scalar`\n- **OpenAPI JSON:** Navigate to `/openapi/v1.json`\n\n## Migration Notes\n\nThis sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support.\n\n**Changes:**\n- Removed `Swashbuckle.AspNetCore` package dependency\n- Added `Microsoft.AspNetCore.OpenApi` (built-in)\n- Added `Scalar.AspNetCore` for modern UI\n- Replaced `WithOpenApi()` with XML documentation comments\n- Enabled `GenerateDocumentationFile` in .csproj\n\nSee `OUT-OF-DATE.md` for migration details.\n"
  },
  {
    "path": "projects/minimal-api/open-api-1/open-api-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <ImplicitUsings>true</ImplicitUsings>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <NoWarn>$(NoWarn);1591</NoWarn>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" />\n    <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "projects/minimal-api/open-api-1/open-api-1.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"open-api-1\", \"open-api-1.csproj\", \"{C6BC3FA7-3E7A-4CF2-9144-7CFACD62FD3E}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{C6BC3FA7-3E7A-4CF2-9144-7CFACD62FD3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{C6BC3FA7-3E7A-4CF2-9144-7CFACD62FD3E}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{C6BC3FA7-3E7A-4CF2-9144-7CFACD62FD3E}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{C6BC3FA7-3E7A-4CF2-9144-7CFACD62FD3E}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {1F7849BD-034F-4345-A5D2-DA51D2977B1E}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/minimal-api/open-api-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#700713\",\r\n        \"activityBar.background\": \"#700713\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#147808\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#700713\",\r\n        \"statusBar.background\": \"#40040b\",\r\n        \"statusBar.debuggingBackground\": \"#044039\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#700713\",\r\n        \"statusBarItem.remoteBackground\": \"#40040b\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#40040b\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#40040b99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#40040b\"\r\n}"
  },
  {
    "path": "projects/minimal-api/open-api-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.HttpResults;\nusing Scalar.AspNetCore;\n\nvar builder = WebApplication.CreateBuilder();\nbuilder.Services.AddOpenApi();\n\nvar app = builder.Build();\napp.MapOpenApi();\napp.MapScalarApiReference();\n\napp.MapGet(\"/\", () => Results.Content(\"\"\"\n<html>\n<head>\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\n</head>\n<body>\n    <div class=\"container\">\n        <ul>\n            <li><a href=\"/scalar\">Scalar API Documentation</a></li>\n            <li><a href=\"/openapi/v1.json\">OpenAPI JSON</a></li>\n        </ul>\n    </div>\n</body>\n</html>\n\"\"\", \"text/html\"));\n\napp.MapGet(\"/greeting\", Hello.GetGreeting);\n\napp.Run();\n\npublic record Person(string Name);\n\n/// <summary>\n/// Return greeting given name\n/// </summary>\npublic static class Hello\n{\n    /// <param name=\"name\">The name of the person to greet</param>\n    /// <response code=\"200\">Returns the person with the greeting</response>\n    /// <response code=\"404\">If name is null or whitespace</response>\n    public static Results<Ok<Person>, NotFound> GetGreeting(string name)\n    {\n        if (string.IsNullOrWhiteSpace(name))\n            return TypedResults.NotFound();\n        \n        return TypedResults.Ok(new Person(name));\n    } \n}\n"
  },
  {
    "path": "projects/minimal-api/open-api-2/README.md",
    "content": "# Built-in OpenAPI with Scalar UI\n\nThis sample demonstrates ASP.NET Core 10's built-in OpenAPI 3.1 support with multiple response types.\n\n## Key Features\n\n- No external packages required (Swashbuckle/NSwag removed)\n- OpenAPI 3.1 document generated automatically\n- XML doc comments populate API descriptions and response codes\n- Modern Scalar UI for interactive documentation\n- AOT-compatible\n- Demonstrates `Results<T1, T2>` pattern with proper response documentation\n\n## Running the Sample\n\n```bash\ndotnet watch run\n```\n\n## Viewing the Documentation\n\n- **Scalar UI:** Navigate to `/scalar`\n- **OpenAPI JSON:** Navigate to `/openapi/v1.json`\n\n## Migration Notes\n\nThis sample was migrated from Swashbuckle to .NET 10's built-in OpenAPI support.\n\n**Changes:**\n- Removed `Swashbuckle.AspNetCore` package dependency\n- Added `Microsoft.AspNetCore.OpenApi` (built-in)\n- Added `Scalar.AspNetCore` for modern UI\n- Replaced `WithOpenApi()` with XML documentation comments\n- Enabled `GenerateDocumentationFile` in .csproj\n- Added response code documentation (200, 404)\n\nSee `OUT-OF-DATE.md` for migration details.\n"
  },
  {
    "path": "projects/minimal-api/open-api-2/open-api-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <ImplicitUsings>true</ImplicitUsings>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <NoWarn>$(NoWarn);1591</NoWarn>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" />\n    <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "projects/minimal-api/open-api-2/open-api-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"open-api-2\", \"open-api-2.csproj\", \"{CBB8035F-8242-422E-8C95-4817A0816F73}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{CBB8035F-8242-422E-8C95-4817A0816F73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{CBB8035F-8242-422E-8C95-4817A0816F73}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{CBB8035F-8242-422E-8C95-4817A0816F73}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{CBB8035F-8242-422E-8C95-4817A0816F73}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {6ABA987D-8496-49EC-A983-FBA7754F785D}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-custom-bind-async/Program.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nWebApplication app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", () => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    <a href=\"\"/direction?directions=(left, right, straight, right, left)\"\">Click for Directions</a>\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\napp.MapGet(\"/direction\", (DrivingDirection directions) => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    <h1>Directions</h1>\r\n    { String.Join(\", \", directions.Directions)}\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\napp.Run();\r\n\r\npublic enum Direction \r\n{\r\n    Left, \r\n    Right,\r\n    Straight\r\n}\r\n\r\npublic class DrivingDirection\r\n{\r\n    public List<Direction> Directions { get; set; } = new();\r\n\r\n    public static ValueTask<DrivingDirection?> BindAsync(HttpContext context, ParameterInfo parameter)\r\n    {    \r\n        DrivingDirection? result;\r\n        try\r\n        {\r\n            // format is (Left, Right, Straight)\r\n            var trimmedValue = context.Request.Query[\"directions\"].ToString().TrimStart('(').TrimEnd(')');\r\n            var segments = trimmedValue?.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); \r\n\r\n            if (segments is null)\r\n                return ValueTask.FromResult<DrivingDirection?>(null);\r\n\r\n            result = new();\r\n            foreach(var s in segments)\r\n            {\r\n                if (Enum.TryParse(typeof(Direction), s, true, out var dir))\r\n                {\r\n                    result.Directions.Add((Direction)dir!);\r\n                }\r\n            }\r\n\r\n            return ValueTask.FromResult<DrivingDirection?>(result);\r\n        }\r\n        catch\r\n        {\r\n            return ValueTask.FromResult<DrivingDirection?>(null);\r\n        }\r\n    } \r\n}"
  },
  {
    "path": "projects/minimal-api/parameter-binding-custom-bind-async/README.md",
    "content": "# Custom binding - complete control\r\n\r\nThis shows how to take full control of the binding process. Make sure that the parameter does not use any of the binding attributes e.g. `[FromHeader]` or `[FromQuery]`.\r\n\r\nYour type must implement this static method:\r\n``` csharp\r\npublic static ValueTask<T?> BindAsync(HttpContext context, ParameterInfo parameter);\r\n```"
  },
  {
    "path": "projects/minimal-api/parameter-binding-custom-bind-async/parameter-binder-custom-bind-async.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-custom-try-parse/Program.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nWebApplication app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", () => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    <a href=\"\"/direction?directions=(left, right, straight, right, left)\"\">Click for Directions</a>\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\napp.MapGet(\"/direction\", ([FromQuery]DrivingDirection directions) => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    <h1>Directions</h1>\r\n    { String.Join(\", \", directions.Directions)}\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\napp.Run();\r\n\r\npublic enum Direction \r\n{\r\n    Left, \r\n    Right,\r\n    Straight\r\n}\r\n\r\npublic class DrivingDirection\r\n{\r\n    public List<Direction> Directions { get; set; } = new();\r\n\r\n    public static bool TryParse(string value, out DrivingDirection? result)\r\n    {\r\n        try\r\n        {\r\n            // format is (Left, Right, Straight)\r\n            var trimmedValue = value?.TrimStart('(').TrimEnd(')');\r\n            var segments = trimmedValue?.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); \r\n\r\n            result = new();\r\n            foreach(var s in segments)\r\n            {\r\n                if (Enum.TryParse(typeof(Direction), s, true, out var dir))\r\n                {\r\n                    result.Directions.Add((Direction)dir);\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n        catch\r\n        {\r\n            result = null;\r\n            return false;\r\n        }\r\n    } \r\n}"
  },
  {
    "path": "projects/minimal-api/parameter-binding-custom-try-parse/README.md",
    "content": "# Custom binding to types over Route, Query or Header\r\n\r\nThis shows how to bind custom types over Route, Query or Header.\r\n\r\nYour type must implement either of this static methods:\r\n``` csharp\r\npublic static bool TryParse(string value, T out result);\r\npublic static bool TryParse(string value, IFormatProvider provider, T out result);\r\n```"
  },
  {
    "path": "projects/minimal-api/parameter-binding-custom-try-parse/parameter-binder-custom-try-parse.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-header-explicit/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nWebApplication app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", ([FromHeader(Name = \"Accept-Language\")] string lang, [FromHeaderAttribute(Name = \"User-Agent\")] string userAgent) => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    Header `Accept-Language` = { lang }<br/>\r\n    Header `User-Agent` = { userAgent }\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\napp.MapGet(\"/{number:int}/{name:alpha}\", (int number, string name) => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    Hello {name}. You are number {number}.\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-api/parameter-binding-header-explicit/README.md",
    "content": "# Explicit header binding\r\n\r\nThis example shows usage of explicit header binding `string` type using `[FromHeader]` attribute."
  },
  {
    "path": "projects/minimal-api/parameter-binding-header-explicit/parameter-binding-header-explicit.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-json-explicit/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar web = WebApplication.Create();\r\n\r\nweb.MapPost(\"/greet\", ([FromBody] Greeting greet) => Results.Json(new {  Message = greet.Message + \" from the server\" }));\r\n\r\nweb.MapGet(\"/\", () => Results.Text(@\"<!doctype html><html><body>\r\n                            <div id=\"\"response\"\"></div><button type=\"\"button\"\" onclick=\"\"send()\"\">Click</button>\r\n                            <script>\r\n                                async function postData(url = '', data = {}) {\r\n                                const response = await fetch(url, {\r\n                                    method: 'POST', \r\n                                    headers: {\r\n                                    'Content-Type': 'application/json'\r\n                                    },\r\n                                    body: JSON.stringify({ message : \"\"Hello World\"\"}) \r\n                                });\r\n                                return response.json(); // parses JSON response into native JavaScript objects\r\n                                }\r\n                                \r\n                                function send(){\r\n                                    postData(window.location + 'greet', { answer: 42 })\r\n                                    .then(data => {\r\n                                        document.getElementById(\"\"response\"\").innerHTML = data.message;\r\n                                    });\r\n                                }\r\n                            </script>\r\n                        </body></html>\r\n                    \", \"text/html\"));\r\n\r\nweb.Run();\r\n\r\npublic record Greeting(string Message);\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-json-explicit/README.md",
    "content": "# Explicit JSON body parameter binding\r\n\r\nThis shows how to bind a JSON request body to a parameter using `[FromBody]` attribute.\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-json-explicit/parameter-binding-json-explicit.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-json-implicit/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nvar web = WebApplication.Create();\r\n\r\nweb.MapPost(\"/greet\", (Greeting greet) => Results.Json(new {  Message = greet.Message + \" from the server via implicit binding\" }));\r\n\r\nweb.MapGet(\"/\", () => Results.Text(@\"<!doctype html><html><body>\r\n                            <div id=\"\"response\"\"></div><button type=\"\"button\"\" onclick=\"\"send()\"\">Click</button>\r\n                            <script>\r\n                                async function postData(url = '', data = {}) {\r\n                                const response = await fetch(url, {\r\n                                    method: 'POST', \r\n                                    headers: {\r\n                                    'Content-Type': 'application/json'\r\n                                    },\r\n                                    body: JSON.stringify({ message : \"\"Hello World\"\"}) \r\n                                });\r\n                                return response.json(); // parses JSON response into native JavaScript objects\r\n                                }\r\n                                \r\n                                function send(){\r\n                                    postData(window.location + 'greet', { answer: 42 })\r\n                                    .then(data => {\r\n                                        document.getElementById(\"\"response\"\").innerHTML = data.message;\r\n                                    });\r\n                                }\r\n                            </script>\r\n                        </body></html>\r\n                    \", \"text/html\"));\r\n\r\nweb.Run();\r\n\r\npublic record Greeting(string Message);\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-json-implicit/README.md",
    "content": "# Implict JSON body parameter binding\r\n\r\nThis shows how to bind a JSON request body to a parameter.\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-json-implicit/parameter-binding-json-implicit.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-query-string-explicit/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nWebApplication app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", () => Results.Text(@\"\r\n<html>\r\n<body>\r\n    <a href=\"\"/greet?number=1&nm=anne\"\">Click here</a>\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\napp.MapGet(\"/greet\", ([FromQuery] int number, [FromQuery(Name=\"nm\")]string name) => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    Hello {name}. You are number {number}.\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-api/parameter-binding-query-string-explicit/README.md",
    "content": "# Explicit query string parameter binding\r\n\r\nThis example shows usage of explicit query string parameter binding of `int` and `string` types using '[FromQuery]' attribute."
  },
  {
    "path": "projects/minimal-api/parameter-binding-query-string-explicit/parameter-binding-query-string-explicit.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-query-string-implicit/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nWebApplication app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", () => Results.Text(@\"\r\n<html>\r\n<body>\r\n    <a href=\"\"/greet?number=1&name=anne\"\">Click here</a>\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\napp.MapGet(\"/greet\", (int number, string name) => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    Hello {name}. You are number {number}.\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-api/parameter-binding-query-string-implicit/README.md",
    "content": "# Implicit query string parameter binding\r\n\r\nThis example shows usage of implicit query string parameter binding of `int` and `string` types."
  },
  {
    "path": "projects/minimal-api/parameter-binding-query-string-implicit/parameter-binding-query-string-implicit.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-route-explicit/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nWebApplication app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", () => Results.Text(@\"\r\n<html>\r\n<body>\r\n    <a href=\"\"/1/anne\"\">Click here</a>\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\napp.MapGet(\"/{number:int}/{nm:alpha}\", ([FromRoute]int number, [FromRoute(Name = \"nm\")]string name) => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    Hello {name}. You are number {number}.\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-api/parameter-binding-route-explicit/README.md",
    "content": "# Explicit route parameter binding\r\n\r\nThis example shows usage of explicit route parameter binding of `int` and `string` types using `[FromRoute]` attribute.\r\n\r\nNote: This example isn't working yet in RC2. There is a confirmed bug with FromRouteAttribute Name property that that has already been fixed but not available in RC2 (https://github.com/dotnet/aspnetcore/issues/37268)"
  },
  {
    "path": "projects/minimal-api/parameter-binding-route-explicit/parameter-binding-route-explicit.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-route-implicit/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nWebApplication app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", () => Results.Text(@\"\r\n<html>\r\n<body>\r\n    <a href=\"\"/1/anne\"\">Click here</a>\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\napp.MapGet(\"/{number:int}/{name:alpha}\", (int number, string name) => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    Hello {name}. You are number {number}.\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-api/parameter-binding-route-implicit/README.md",
    "content": "# Implicit route parameter binding\r\n\r\nThis example shows usage of implicit route parameter binding of `int` and `string` types."
  },
  {
    "path": "projects/minimal-api/parameter-binding-route-implicit/parameter-binding-route-implicit.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-special-types/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Hosting;\r\nusing System.Threading;\r\nusing System.Security.Claims;\r\n\r\nWebApplication app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", (HttpContext context) => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    <h1>Special types binding - HttpContext</h1>\r\n    <p>\r\n    This is the value from HttpContext.TraceIdentifier { context.TraceIdentifier }\r\n    </p>\r\n    <ul>\r\n        <li><a href=\"\"/http-request\"\">Bind HttpRequest</a></li>\r\n        <li><a href=\"\"/http-response\"\">Bind HttpResponse</a></li>\r\n        <li><a href=\"\"/cancellation-token\"\">Bind CancellationToken</a></li>\r\n        <li><a href=\"\"/claims-principal\"\">Bind ClaimsPrincipal</a></li>\r\n    </ul>\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\napp.MapGet(\"/claims-principal\", (ClaimsPrincipal claims) => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    <h1>Special types binding - ClaimsPrincipal</h1>\r\n    <p>\r\n        This is the value of ClaimsPrincipal.Identity.IsAuthenticated { claims.Identity.IsAuthenticated }\r\n    </p?\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\napp.MapGet(\"/cancellation-token\", (CancellationToken token) => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    <h1>Special types binding - CancellationToken</h1>\r\n    <p>\r\n        This is the value of CancellationToken.IsCancellationRequested { token.IsCancellationRequested }\r\n    </p?\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\napp.MapGet(\"/http-response\", (HttpResponse response) => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    <h1>Special types binding - HttpRequest</h1>\r\n    <p>\r\n        This is the value of HttpResponse.StatusCode { response.StatusCode }\r\n    </p?\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\n\r\napp.MapGet(\"/http-request\", (HttpRequest request) => Results.Text(@$\"\r\n<html>\r\n<body>\r\n    <h1>Special types binding - HttpRequest</h1>\r\n    <p>\r\n        This is the value of HttpRequest.Path { request.Path }\r\n    </p?\r\n</body>\r\n</html>\r\n\", \"text/html\"));\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-api/parameter-binding-special-types/README.md",
    "content": "# Special types binding\r\n\r\nThese are special types that the framework supports binding without any explicit attributes:\r\n\r\n- `HttpContext` \r\n- `HttpRequest` \r\n- `HttpResponse` \r\n- `CancellationToken` \r\n- `ClaimsPrincipal` - From (HttpContext.User).\r\n"
  },
  {
    "path": "projects/minimal-api/parameter-binding-special-types/parameter-binding-special-types.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/route-constraints-decimal/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nvar app = WebApplication.CreateBuilder(new WebApplicationOptions { EnvironmentName = Environments.Development }).Build();\r\n\r\napp.UseStatusCodePages();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    return Results.Text(@\"\r\n    <html>\r\n        <head>\r\n            <link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css\"\" decimalegrity=\"\"sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU\"\" crossorigin=\"\"anonymous\"\">\r\n        </head>\r\n        <body>\r\n            <h1>Sample for {decimal}, {float}, and {double} route constraints</h1>\r\n            <ul>\r\n                <li>/{id:decimal} <a href=\"\"/decimal/10\"\">/decimal/10</a></li>\r\n                <li>/{id:decimal} <a href=\"\"/decimal/-20\"\">/decimal/-20</a></li>\r\n                <li>/{id:decimal} <a href=\"\"/decimal/10f\"\">/decimal/10f</a> (404)</li>\r\n                <li>/{id:decimal} <a href=\"\"/decimal/10_000\"\">/decimal/10_000</a> (404)</li>\r\n                <li>/{id:decimal} <a href=\"\"/decimal/10.4\"\">/decimal/10.4</a> (404)</li>\r\n            </ul>\r\n            <ul>\r\n                <li>/{id:float} <a href=\"\"/float/10\"\">/float/10</a></li>\r\n                <li>/{id:float} <a href=\"\"/float/-20\"\">/float/-20</a></li>\r\n                <li>/{id:float} <a href=\"\"/float/10f\"\">/float/10f</a> (404)</li>\r\n                <li>/{id:float} <a href=\"\"/float/10_000\"\">/float/10_000</a> (404)</li>\r\n                <li>/{id:float} <a href=\"\"/float/10.4\"\">/float/10.4</a> (404)</li>\r\n            </ul>\r\n            <ul>\r\n                <li>/{id:double} <a href=\"\"/double/10\"\">/double/10</a></li>\r\n                <li>/{id:double} <a href=\"\"/double/-20\"\">/double/-20</a></li>\r\n                <li>/{id:double} <a href=\"\"/double/10f\"\">/double/10f</a> (404)</li>\r\n                <li>/{id:double} <a href=\"\"/double/10_000\"\">/double/10_000</a> (404)</li>\r\n                <li>/{id:double} <a href=\"\"/double/10.4\"\">/double/10.4</a> (404)</li>\r\n            </ul>\r\n        </body>\r\n    </html>\r\n    \", \"text/html\");\r\n});\r\n\r\napp.MapGet(\"decimal/{id:decimal}\", (decimal id) => id.ToString());\r\napp.MapGet(\"float/{yid:float}\", (float id) => id.ToString());\r\napp.MapGet(\"double/{id:double}\", (double id) => id.ToString());\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-api/route-constraints-decimal/README.md",
    "content": "# Route Constraints - decimal, float and double \r\n\r\nThis example shows route constraint for decimal, float and double.\r\n\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/route-constraints-decimal/route-constraints-decimal.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/route-constraints-int/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nvar app = WebApplication.CreateBuilder(new WebApplicationOptions { EnvironmentName = Environments.Development }).Build();\r\n\r\napp.UseStatusCodePages();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    return Results.Text(@\"\r\n    <html>\r\n        <head>\r\n            <link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css\"\" integrity=\"\"sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU\"\" crossorigin=\"\"anonymous\"\">\r\n        </head>\r\n        <body>\r\n            <h1>Sample for {int}, {min()}, {max()}, and {range(min, max))} route constraints</h1>\r\n            <ul>\r\n                <li>/{id:int} <a href=\"\"/10\"\">/10</a></li>\r\n                <li>/{id:int} <a href=\"\"/10f\"\">/10f</a> (404)</li>\r\n                <li>/{id:int} <a href=\"\"/10_000\"\">/10_000</a> (404)</li>\r\n                <li>/{id:int} <a href=\"\"/10.4\"\">/10.4</a> (404)</li>\r\n                <li>/min/{minId:min(1)} <a href=\"\"/min/100\"\">/min/100</a></li>\r\n                <li>/min/{minId:min(1)} <a href=\"\"/min/0\"\">/min/0</a> (404)</li>\r\n                <li>/max/{maxId:max(10)} <a href=\"\"/max/10\"\">/max/10</a></li>\r\n                <li>/max/{maxId:max(10)} <a href=\"\"/max/11\"\">/max/11</a> (404)</li>\r\n                <li>/range/{rangeId:range(1, 10)} <a href=\"\"/range/1\"\">/range/1</a></li>\r\n                <li>/range/{rangeId:range(1, 10)} <a href=\"\"/range/10\"\">/range/10</a></li>\r\n                <li>/range/{rangeId:range(1, 10)} <a href=\"\"/range/0\"\">/range/0</a> (404)</li>\r\n                <li>/range/{rangeId:range(1, 10)} <a href=\"\"/range/11\"\">/range/11</a> (404)</li>\r\n            </ul>\r\n        </body>\r\n    </html>\r\n    \", \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/{id:int}\", (int id) => id.ToString());\r\napp.MapGet(\"/min/{minId:min(1)}\", (int minId) => minId.ToString());\r\napp.MapGet(\"/max/{maxId:max(10)}\", (int maxId) => maxId.ToString());\r\napp.MapGet(\"/range/{rangeId:range(1, 10)}\", (int rangeId) => rangeId.ToString());\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-api/route-constraints-int/README.md",
    "content": "# Route Constraint - int, min, max, range\r\n\r\nThis example shows route constraint for integer, the minimum and maximum value, and the range.\r\n\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/route-constraints-int/route-constraints-int.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-api/typed-results-1/Program.cs",
    "content": "using Xunit;\r\nusing Microsoft.AspNetCore.Http.HttpResults;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", Hello.GetGreeting);\r\napp.Run();\r\n\r\npublic record Person(string Name);\r\n\r\npublic static class Hello\r\n{\r\n    public static IResult GetGreeting(string name) => TypedResults.Json(new Person(name));\r\n}\r\n\r\npublic static class Tests\r\n{\r\n    [Fact]\r\n    public static void MyTest()\r\n    {\r\n        var result = Hello.GetGreeting(\"anne\");\r\n        Assert.IsType<JsonHttpResult<Person>>(result);\r\n        \r\n        var result2 = (JsonHttpResult<Person>) result;\r\n        Assert.Equal(result2.Value.Name, \"anne\");\r\n    }\r\n}"
  },
  {
    "path": "projects/minimal-api/typed-results-1/README.md",
    "content": "# TypedResults\r\n\r\n> The new `Microsoft.AspNetCore.Http.TypedResults` static class is the “typed” equivalent of the existing `Microsoft.AspNetCore.Http.Results` class. You can use TypedResults in your minimal APIs to create instances of the in-framework IResult-implementing types and preserve the concrete type information.\r\n>\r\n> [Microsoft](https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-7-preview-4/)\r\n\r\nThis allows you to check the full concrete type of the result of your minimal API method. Run `dotnet test` to see the result.\r\n\r\n"
  },
  {
    "path": "projects/minimal-api/typed-results-1/typed-results-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"17.10.0\" />\r\n    <PackageReference Include=\"xunit\" Version=\"2.8.1\" />\r\n    <PackageReference Include=\"xunit.runner.visualstudio\" Version=\"2.8.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-hosting/README.md",
    "content": "# Minimal Hosting (25)\r\n\r\n## Alternative Builders (2)\r\n\r\n* [SlimBuilder](slim-builder)\r\n\r\n  `WebApplication.CreateSlimBuilder` creates `WebApplicationBuilder` with minimal configuration defaults.\r\n\r\n* [EmptyBuilder](empty-builder)\r\n\r\n  `WebApplication.CreateEmptyBuilder` creates `WebApplicationBuilder` with no built-in behavior.\r\n\r\n## WebApplication (6)\r\n\r\n  This is a set of samples that demonstrates things that you can do with the default configuration using `WebApplication.Create()` before you have to resort to `WebApplication.CreateBuilder()`. \r\n\r\n  * [WebApplication - Welcome Page](web-application-welcome-page)\r\n\r\n    This uses the new minimalistic hosting code `WebApplication` and show ASP.NET Core welcome page.\r\n\r\n  * [WebApplication - Default Logger](web-application-logging)\r\n\r\n    `WebApplication.Logger` is available for use immediately without any further configuration. However the default logger is not available via DI.\r\n\r\n  * [WebApplication - Application lifetime events](web-application-lifetime-events)\r\n\r\n    In this sample we learn how to respond to the application lifetime events.\r\n\r\n  * [WebApplication - Middleware](web-application-middleware)\r\n\r\n    In this sample we learn how to use middleware by creating two simple middleware. \r\n\r\n  * [WebApplication - Middleware Pipelines](web-application-middleware-pipeline)\r\n\r\n    In this sample we learn how to use `UseRouter` and `MapMiddlewareGet` to compose two different middleware pipelines. \r\n\r\n  * [WebApplication - Middleware Pipelines 2](web-application-middleware-pipeline-2)\r\n\r\n    In this sample we use `EndpointRouteBuilderExtensions.Map` and `IEndPointRouteBuilder.CreateApplicationBuilder` to build two separate middleware pipelines. \r\n\r\n### Configuration (2)\r\n\r\n  * [WebApplication - Configuration](web-application-configuration)\r\n\r\n    This sample list all the information available in the `Configuration` property. \r\n\r\n  * [WebApplication - Configuration as JSON](web-application-configuration-json)\r\n\r\n    This sample list all the information available in the `Configuration` property and return it as JSON. WARNING: Do not use this in your application. It is a terrible idea. Do not expose your configuration information over the wire. This sample is just to demonstrate a technique. \r\n\r\n### Server (6)\r\n\r\n  * [WebApplication - Default Urls](web-application-server-default-urls)\r\n\r\n    This sample shows the default Urls that the web server listens to.\r\n    \r\n  * [WebApplication - Set Url and Port](web-application-server-specific-url-port)\r\n\r\n    This sample shows how to set the Kestrel web server to listen to a specific Url and port.\r\n\r\n  * [WebApplication - Listen to multiple Urls and Ports](web-application-server-multiple-urls-ports)\r\n\r\n    This sample shows how to set the Kestrel web server to listen to multiple Urls and Ports.\r\n\r\n  * [WebApplication - Set Port from an Environment Variable](web-application-server-port-env-variable)\r\n\r\n    This sample shows how to set the Kestrel web server to listen to a specific port set from an environment variable.\r\n\r\n  * [WebApplication - Set Urls and Port via ASPNETCORE_URLS Environment Variable](web-application-server-aspnetcore-urls)\r\n\r\n    This sample shows how to set the Kestrel web server to listen to a specific url and port via `ASPNETCORE_URLS` environment variable.\r\n\r\n  * [WebApplication - Listening to all interfaces on a specific port](web-application-server-listen-all)\r\n\r\n    This sample shows how to set the Kestrel web server to listen to all IPs (IP4/IP6) on a specific port.\r\n\r\n### Standard ASP.NET Core Middlewares (2)\r\n\r\n  * [WebApplication - UseFileServer](web-application-use-file-server)\r\n\r\n    This uses the new minimalistic hosting code `WebApplication` and server default static files.\r\n\r\n  * [WebApplication - UseWebSockets](web-application-use-web-sockets)\r\n\r\n    This sample shows how to use WebSockets by creating a simple echo server.\r\n\r\n## WebApplicationBuilder - Minimal Hosting (5)\r\n\r\nIn most cases using ```WebApplication``` isn't enough because you need to configure additional services to be used in your system. This is where ```WebApplicationBuilder``` comes. It allows you to configure services and other properties.\r\n\r\n  * [WebApplicationBuilder - enable MVC](web-application-builder-mvc)\r\n\r\n    This sample shows how to enable MVC.\r\n\r\n  * [WebApplicationBuilder - enable Razor Pages](web-application-builder-razor-pages)\r\n\r\n    This sample shows how to enable Razor Pages.\r\n\r\n  * [WebApplicationBuilder - change environment](web-application-builder-change-environment)\r\n\r\n    This sample shows how to change the environment via code.\r\n\r\n  * [WebApplicationBuilder - change logging minimum level](web-application-builder-logging-set-minimum-level)\r\n\r\n    This sample shows how to set logging minimum level via code.\r\n\r\n  * [WebApplicationBuilder - change web root folder](web-application-builder-change-default-web-root-folder)\r\n\r\n    This samples shows how to use `WebApplicationOptions.WebRootPath` to change the default web root folder.\r\n\r\n### WebApplicationOptions (2)\r\n\r\n  Use ```WebApplicationOptions``` to configure initial values of the ```WebApplicationBuilder``` object.\r\n\r\n  * [WebApplicationOptions - set environment](web-application-options-set-environment)\r\n\r\n    This sample shows how to set the environment.  \r\n\r\n  * [WebApplicationOptions - change the content root path](web-application-options-change-content-root-path)\r\n\r\n    This sample shows how to change the content root path of the application.\r\n\r\ndotnet8\r\n"
  },
  {
    "path": "projects/minimal-hosting/build.bat",
    "content": "dotnet build empty-builder\r\ndotnet build slim-builder\r\ndotnet build web-application-builder-change-default-web-root-folder\r\ndotnet build web-application-builder-change-environment\r\ndotnet build web-application-builder-logging-set-minimum-level\r\ndotnet build web-application-builder-mvc\r\ndotnet build web-application-builder-razor-pages\r\ndotnet build web-application-configuration\r\ndotnet build web-application-configuration-json\r\ndotnet build web-application-lifetime-events\r\ndotnet build web-application-logging\r\ndotnet build web-application-middleware\r\ndotnet build web-application-middleware-pipeline\r\ndotnet build web-application-middleware-pipeline-2\r\ndotnet build web-application-options-change-content-root-path\r\ndotnet build web-application-options-set-environment\r\ndotnet build web-application-server-aspnetcore-urls\r\ndotnet build web-application-server-default-urls\r\ndotnet build web-application-server-listen-all\r\ndotnet build web-application-server-multiple-urls-ports\r\ndotnet build web-application-server-port-env-variable\r\ndotnet build web-application-server-specific-url-port\r\ndotnet build web-application-use-file-server\r\ndotnet build web-application-use-web-sockets\r\ndotnet build web-application-welcome-page"
  },
  {
    "path": "projects/minimal-hosting/build.sh",
    "content": "#!/bin/bash\ndotnet build empty-builder\ndotnet build slim-builder\ndotnet build web-application-builder-change-default-web-root-folder\ndotnet build web-application-builder-change-environment\ndotnet build web-application-builder-logging-set-minimum-level\ndotnet build web-application-builder-mvc\ndotnet build web-application-builder-razor-pages\ndotnet build web-application-configuration\ndotnet build web-application-configuration-json\ndotnet build web-application-lifetime-events\ndotnet build web-application-logging\ndotnet build web-application-middleware\ndotnet build web-application-middleware-pipeline\ndotnet build web-application-middleware-pipeline-2\ndotnet build web-application-options-change-content-root-path\ndotnet build web-application-options-set-environment\ndotnet build web-application-server-aspnetcore-urls\ndotnet build web-application-server-default-urls\ndotnet build web-application-server-listen-all\ndotnet build web-application-server-multiple-urls-ports\ndotnet build web-application-server-port-env-variable\ndotnet build web-application-server-specific-url-port\ndotnet build web-application-use-file-server\ndotnet build web-application-use-web-sockets\ndotnet build web-application-welcome-page\n"
  },
  {
    "path": "projects/minimal-hosting/empty-builder/.vscode/settings.json",
    "content": "{\r\n    \"dotnet.defaultSolution\": \"empty-builder.sln\"\r\n}"
  },
  {
    "path": "projects/minimal-hosting/empty-builder/Program.cs",
    "content": "var builder = WebApplication.CreateEmptyBuilder(new WebApplicationOptions());\r\nbuilder.WebHost.UseKestrelCore();\r\nbuilder.Services.AddRouting();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", () => {\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n    <body>\r\n        hello world with WebApplication.CreateEmptyBuilder()\r\n    </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/minimal-hosting/empty-builder/README.md",
    "content": "# WebApplication.CreateEmptyBuilder\r\n\r\n`WebApplication.CreateEmptyBuilder` creates `WebApplicationBuilder` with no built-in behavior. You will need to add services and middleware as needed.\r\n\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/empty-builder/empty-builder.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    \r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-hosting/slim-builder/Program.cs",
    "content": "var builder = WebApplication.CreateSlimBuilder();\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", () => {\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n    <body>\r\n        hello world with WebApplication.CreateSlimBuilder()\r\n    </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/minimal-hosting/slim-builder/README.md",
    "content": "# WebApplication.CreateSlimBuilder\r\n\r\n`WebApplication.CreateSlimBuilder` creates `WebApplicationBuilder` with minimal defaults.\r\n\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/slim-builder/slim-builder.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    \r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-change-default-web-root-folder/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nconst string Page = @\"<html><body><img src=\"\"/cute-kitty.jpg\"\" width=\"\"100%\"\" /></body></html>\";\r\n\r\nvar builder = WebApplication.CreateBuilder(new WebApplicationOptions\r\n{\r\n    WebRootPath = \"wwwroot2\"\r\n});\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\napp.MapGet(\"/\", () => Results.Text(Page, \"text/html\"));\r\napp.Run();"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-change-default-web-root-folder/README.md",
    "content": "# WebApplicationOptions - change the default web root folder\r\n\r\nUse `WebApplicationOptions.WebRootPath` to change the default web root folder.\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-change-default-web-root-folder/web-application-builder-change-default-web-root-folder.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-change-environment/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nvar options = new WebApplicationOptions\r\n{\r\n    EnvironmentName = Environments.Development\r\n};\r\n\r\nWebApplicationBuilder builder = WebApplication.CreateBuilder(options);\r\n\r\nvar app = builder.Build();\r\napp.Run(async context =>\r\n{\r\n    await context.Response.WriteAsync(@\"Environment name \" + app.Environment.EnvironmentName);\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-change-environment/README.md",
    "content": "# WebApplicationBuilder - Set environment by code\r\n\r\nIn most cases using ```WebApplication``` isn't enough because you need to configure additional services to be used in your system. This is where ```WebApplicationBuilder``` comes. It allows you to configure services and other properties.\r\n\r\nIn this example we show how to set the environment of the application by using `WebApplicationOptions`.\r\n\r\nYou can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs)\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-change-environment/web-application-builder-change-environment.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-logging-set-minimum-level/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Trace);\r\n\r\nvar app = builder.Build();\r\napp.Logger.LogInformation(\"System is starting up\");\r\n\r\napp.Run(async (context) =>\r\n{\r\n    await context.Response.WriteAsync(\"Log Level Trace is \" + app.Logger.IsEnabled(LogLevel.Trace));\r\n});\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-logging-set-minimum-level/README.md",
    "content": "# WebApplicationBuilder - Set logging minimum level\r\n\r\nUse `WebApplicationBuilder.Logging.SetMinimumLevel` to set the minimum level of logging via code. In this sample we set the minimum logging to Trace. \r\n\r\nYou can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs)\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-logging-set-minimum-level/web-application-builder-logging-set-minimum-level.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-mvc/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.Extensions.DependencyInjection;\r\n\r\nWebApplicationBuilder builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\nawait app.RunAsync();\r\n\r\npublic class HomeController\r\n{\r\n    [HttpGet(\"/\")]\r\n    public string Index() => \"Hello World\";\r\n}"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-mvc/README.md",
    "content": "# WebApplicationBuilder - MVC\r\n\r\nIn most cases using ```WebApplication``` isn't enough because you need to configure additional services to be used in your system. This is where ```WebApplicationBuilder``` comes. It allows you to configure services and other properties.\r\n\r\nThis example shows how to enable MVC using the minimalistic approach.\r\n\r\n``` csharp\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.Extensions.DependencyInjection;\r\n\r\nWebApplicationBuilder builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\nawait app.RunAsync();\r\n```\r\n\r\nIn contrast this is how it is done using [Startup](/projects/mvc/hello-world/src/Program.cs) class (not all code included)\r\n\r\n``` csharp\r\npublic class Startup\r\n{\r\n    public void ConfigureServices(IServiceCollection services)\r\n    {\r\n        services.AddControllersWithViews();\r\n    }\r\n\r\n    public void Configure(IApplicationBuilder app)\r\n    {\r\n        app.UseRouting();\r\n        app.UseEndpoints(endpoints =>\r\n        {\r\n            endpoints.MapDefaultControllerRoute();\r\n        });\r\n    }\r\n}\r\n```\r\n\r\nYou can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs)\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-mvc/web-application-builder-mvc.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-razor-pages/Pages/Index.cshtml",
    "content": "@page\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Page Title</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n    <h1>Hello World Razor Pages with Minimal Hosting</h1>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-razor-pages/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.Extensions.DependencyInjection;\r\n\r\nWebApplicationBuilder builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\n\r\nawait app.RunAsync();\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-razor-pages/README.md",
    "content": "# WebApplicationBuilder - Razor Pages\r\n\r\nIn most cases using ```WebApplication``` isn't enough because you need to configure additional services to be used in your system. This is where ```WebApplicationBuilder``` comes. It allows you to configure services and other properties.\r\n\r\nThis example shows how to enable Razor Pages using the minimal hosting approach.\r\n\r\n``` csharp\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.Extensions.DependencyInjection;\r\n\r\nWebApplicationBuilder builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\n\r\nawait app.RunAsync();\r\n```\r\n\r\nIn contrast this is how it is done using [Startup.cs](/projects/razor-pages/hello-world/src/Program.cs) (not all codes included). \r\n\r\n``` csharp\r\npublic class Startup\r\n{\r\n    public void ConfigureServices(IServiceCollection services)\r\n    {\r\n        services.AddRazorPages();\r\n    }\r\n\r\n    public void Configure(IApplicationBuilder app)\r\n    {\r\n        app.UseRouting();\r\n        app.UseEndpoints(endpoints =>\r\n        {\r\n            endpoints.MapRazorPages();\r\n        });\r\n    }\r\n}\r\n```    \r\n\r\n\r\nYou can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs)\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-builder-razor-pages/web-application-builder-razor-pages.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-configuration/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Configuration;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async (context) =>\r\n{\r\n    await context.Response.WriteAsync(\"Check the configuration information on your console log. This configuration information should never be transmitted because they expose sensitive information.\");\r\n    app.Logger.LogInformation((app.Configuration as IConfigurationRoot).GetDebugView());\r\n});\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-hosting/web-application-configuration/README.md",
    "content": "# WebApplication - list all the configuration information available\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. In this example we list all the information available in the `app.Configuration` property.\r\n\r\nYou can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs)\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-configuration/web-application-configuration.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-configuration-json/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Configuration;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\n\r\nvar app = WebApplication.Create();\r\n\r\n// WARNING: THIS IS A TERRIBLE IDEA IN REAL LIFE. DO not expose your configuration file over the wire this way!.\r\napp.MapGet(\"/\", (HttpContext context) =>\r\n{\r\n    var env = new List<ConfigInfo>();\r\n    env.AddRange(app.Configuration.AsEnumerable().Select(x => new ConfigInfo(x.Key, x.Value)));\r\n    return env;\r\n});\r\n\r\nawait app.RunAsync();\r\n\r\nrecord ConfigInfo(string Key, string Value);"
  },
  {
    "path": "projects/minimal-hosting/web-application-configuration-json/README.md",
    "content": "# WebApplication - list all the configuration information available as JSON\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. \r\n\r\nIn this example we list all the information available in the `app.Configuration` property and return it as JSON.\r\n\r\n## WARNING\r\n\r\nExposing your sensitive configuration information over the wire like this is a terrible idea. Do not do this in your application. This sample is just meant to demonstrate a technique. \r\n\r\nYou can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs)\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-configuration-json/web-application-configuration-json.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-lifetime-events/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async (context) =>\r\n{\r\n    await context.Response.WriteAsync(\"Check the log to see when the log messages displayed in response to application lifetime event\");\r\n});\r\n\r\napp.Lifetime.ApplicationStarted.Register(() => \r\n{\r\n    app.Logger.LogWarning(\"Application started\");\r\n});\r\n\r\napp.Lifetime.ApplicationStopping.Register(() => \r\n{\r\n    app.Logger.LogWarning(\"Application stopping\");\r\n});\r\n\r\n\r\napp.Lifetime.ApplicationStopped.Register(() => \r\n{\r\n    app.Logger.LogWarning(\"Application stopped\");\r\n});\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-hosting/web-application-lifetime-events/README.md",
    "content": "# WebApplication - application lifetime events\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. In this example we learn how to respond to the application lifetime events available.\r\n\r\nYou can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs)\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-lifetime-events/web-application-lifetime-events.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-logging/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Logging;\r\nusing Microsoft.Extensions.DependencyInjection;\r\n\r\nvar app = WebApplication.Create();\r\napp.Logger.LogInformation(\"System is starting up\");\r\n\r\napp.Run(async (context) =>\r\n{\r\n    var logger = context.RequestServices.GetService<ILogger>();\r\n    if (logger is null)\r\n        app.Logger.LogWarning(\"GetService<ILogger> is null.\");\r\n        \r\n    await context.Response.WriteAsync(\"hello world\");\r\n});\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-hosting/web-application-logging/README.md",
    "content": "# WebApplication - Default Logging\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. \r\n\r\n`WebApplication.Logger` is available for use immediately without any further configuration. However the default logger is not available via DI.\r\n\r\nYou can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs)\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-logging/web-application-logging.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-middleware/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Use((context, next) => \r\n{\r\n    context.Items[\"start\"] = context.Request.Path.ToString() switch\r\n    {\r\n        \"/about-us\" =>  @\"<html><body style=\"\"color:red;\"\">\",\r\n        _ => \"<html><body>\"\r\n    };\r\n\r\n    return next(context);\r\n});\r\n\r\n\r\napp.Use((context, next) => \r\n{\r\n    context.Items[\"end\"] = \"</body></html>\";\r\n    return next(context);\r\n});\r\n\r\napp.MapGet(\"/\", (HttpContext context) =>\r\n{\r\n    return Results.Text(context.Items[\"start\"] + @\"Hello world<br/> Go to <a href=\"\"/about-us\"\">about us</a>\" + context.Items[\"end\"], \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/about-us\", (HttpContext context) =>\r\n{\r\n    return Results.Text(context.Items[\"start\"] + \"About Us\" + context.Items[\"end\"], \"text/html\");\r\n});\r\n\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-hosting/web-application-middleware/README.md",
    "content": "# WebApplication - middleware\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. In this example we create two simple middleware that executes before the `app.MapGet`.\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-middleware/web-application-middleware.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-middleware-pipeline/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.AspNetCore.Routing;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.UseRouter(MapPipeline(app));\r\napp.UseRouter(MapPipeline2(app));\r\n\r\nIApplicationBuilder x = app;\r\n\r\napp.Run();\r\n\r\nIRouter MapPipeline(IApplicationBuilder applicationBuilder)\r\n{\r\n    var builder = new RouteBuilder(applicationBuilder);\r\n\r\n    builder.MapMiddlewareGet(\"/\", appBuilder => \r\n    {\r\n        appBuilder.Use((context, next ) => \r\n        {\r\n            context.Items[\"message\"] = \"hello world from items\";\r\n            return next(context);\r\n        });\r\n\r\n        appBuilder.Run(async context =>\r\n        {\r\n            await context.Response.WriteAsync(\"<html><body>\" + \r\n                context.Items[\"message\"] + \r\n                @\"<br/><a href=\"\"/about-us\"\">about us</a>\" + \r\n                \"</body></html>\");\r\n        });\r\n    });\r\n\r\n    return builder.Build();\r\n}\r\n\r\nIRouter MapPipeline2(IApplicationBuilder applicationBuilder)\r\n{\r\n    var builder = new RouteBuilder(applicationBuilder);\r\n\r\n    builder.MapMiddlewareGet(\"/about-us\", appBuilder => \r\n    {\r\n        appBuilder.Run(async context =>\r\n        {\r\n            await context.Response.WriteAsync(\"About us\");\r\n        });\r\n    });\r\n\r\n    return builder.Build();\r\n}"
  },
  {
    "path": "projects/minimal-hosting/web-application-middleware-pipeline/README.md",
    "content": "# WebApplication - middleware pipeline\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. In this example we use `RouteBuilder` and `MapMiddlewareGet` to build two separate middleware pipelines than handle \"/\" and \"/about-us\" routes. \r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-middleware-pipeline/web-application-middleware-pipeline.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-middleware-pipeline-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.AspNetCore.Routing;\r\n\r\nvar app = WebApplication.Create();\r\n\r\nIEndpointRouteBuilder endpoints = app;\r\nIApplicationBuilder pipeline = endpoints.CreateApplicationBuilder();\r\npipeline.Use((context, next) =>\r\n{\r\n    context.Items[\"message\"] = \"Hello World\";\r\n    return next(context);\r\n})\r\n.Run(async context =>\r\n{\r\n    await context.Response.WriteAsync(\"<html><body>\" + \r\n            context.Items[\"message\"] + \r\n            @\"<br/><a href=\"\"/about-us\"\">about us</a>\" + \r\n            \"</body></html>\");\r\n});\r\n\r\nIApplicationBuilder pipeline2 = endpoints.CreateApplicationBuilder();\r\npipeline2.Use((context, next) =>\r\n{\r\n    context.Items[\"message\"] = \"About Us\";\r\n    return next(context);\r\n})\r\n.Run(async context =>\r\n{\r\n    await context.Response.WriteAsync(context.Items[\"message\"].ToString());\r\n});\r\n\r\napp.Map(\"/\", pipeline.Build());\r\napp.Map(\"/about-us\", pipeline2.Build());\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-hosting/web-application-middleware-pipeline-2/README.md",
    "content": "# WebApplication - middleware pipeline 2\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. \r\n\r\nIn this example we use `EndpointRouteBuilderExtensions.Map` and `IEndPointRouteBuilder.CreateApplicationBuilder` to build two separate middleware pipelines than handle \"/\" and \"/about-us\" routes. \r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-middleware-pipeline-2/web-application-middleware-pipeline-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-options-change-content-root-path/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Hosting;\r\nusing System.IO;\r\nusing System.Reflection;\r\n\r\nvar options = new WebApplicationOptions\r\n{\r\n    // Here we are trying to get the path to the root of the project. This is just useful for this sample;it's not really applicable for general purpose use.\r\n    ContentRootPath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location.Substring(0, Assembly.GetEntryAssembly().Location.IndexOf(\"bin\\\\\"))), \"root\")\r\n};\r\n\r\nvar builder = WebApplication.CreateBuilder(options);\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\n\r\napp.Run(async (context) =>\r\n{\r\n    await context.Response.WriteAsync(@\"<html><body><img src=\"\"/cute-kitty.jpg\"\" width=\"\"100%\"\" /></body></html>\");\r\n});\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-hosting/web-application-options-change-content-root-path/README.md",
    "content": "# WebApplicationOptions - change the default content root path\r\n\r\nUse ```WebApplicationOptions``` to configure initial values of the ```WebApplication``` and ```WebApplicationBuilder``` objects. In this example we will change the default content  root path to 'root' folder inside this sample application project directory.\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-options-change-content-root-path/web-application-options-change-content-root-path.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-options-set-environment/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nvar options = new WebApplicationOptions\r\n{\r\n    EnvironmentName = Environments.Development\r\n};\r\n\r\nvar builder = WebApplication.CreateBuilder(options);\r\nvar app = builder.Build();\r\n\r\napp.Run(async (context) =>\r\n{\r\n    await context.Response.WriteAsync($\"Environment {options.EnvironmentName}\");\r\n});\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-hosting/web-application-options-set-environment/README.md",
    "content": "# WebApplicationOptions - set environment\r\n\r\nUse ```WebApplicationOptions``` to configure initial values of the ```WebApplicationBuilder``` object. In this example we change the environment to Development.\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-options-set-environment/web-application-options-set-environment.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-aspnetcore-urls/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nvar app = WebApplication.Create(args);\r\n\r\napp.Run(async (context) =>\r\n{\r\n    foreach(var u in app.Urls)\r\n        await context.Response.WriteAsync(u + \"\\n\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-aspnetcore-urls/README.md",
    "content": "# WebApplication - Set urls and ports via ASPNETCORE_URLS environment variable\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. This sample shows how to set the Kestrel web server to listen to a specific url and port via `ASPNETCORE_URLS` environment variable.\r\n\r\n## How to set Environment Variable ASPNETCORE_URLS on Windows using PowerShell\r\n\r\n`dir env:` will show all environment variables.\r\n\r\n`$env:ASPNETCORE_URLS = \"http://localhost:3000;http://localhost:5000\"` will set the environment variable `ASPNETCORE_URLS` to `http://localhost:3000;http://localhost:5000`."
  },
  {
    "path": "projects/minimal-hosting/web-application-server-aspnetcore-urls/web-application-server-aspnetcore-urls.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-default-urls/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async (context) =>\r\n{\r\n    foreach(var u in app.Urls)\r\n        await context.Response.WriteAsync(u + \"\\n\");\r\n});\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-default-urls/README.md",
    "content": "# WebApplication - Default Urls\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. \r\n\r\nIn this example we shows the urls that Kestrel web server by default is listening to (`WebApplication.Urls`).\r\n\r\nYou can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs)\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-default-urls/web-application-server-default-urls.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-listen-all/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nvar app = WebApplication.Create(args);\r\n\r\n//app.Urls.Add(\"http://*:3000\");\r\n//app.Urls.Add(\"http://+:3000\"); //You can also use this. They are equivalent: Bind to all IP4 and IP6 addresses.\r\napp.Urls.Add(\"http://0.0.0.0:3000\"); //You can also use this. This means bind to all IP4 addresses\r\n\r\napp.Run(async (context) =>\r\n{\r\n    foreach(var u in app.Urls)\r\n        await context.Response.WriteAsync(u + \"\\n\");\r\n});\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-listen-all/README.md",
    "content": "# WebApplication - Listen to all interfaces (IP4 and IP6) on specific port.\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. In this example we set the Kestrel web server to listen to all interfaces on a specific port. You can open the page at `http://localhost:3000` or any host/ip on your machine at port 3000.\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-listen-all/web-application-server-listen-all.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-multiple-urls-ports/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nvar app = WebApplication.Create(args);\r\n\r\napp.Urls.Add(\"http://localhost:3000\");\r\napp.Urls.Add(\"http://localhost:5000\");\r\n\r\napp.Run(async (context) =>\r\n{\r\n    foreach(var u in app.Urls)\r\n        await context.Response.WriteAsync(u + \"\\n\");\r\n});\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-multiple-urls-ports/README.md",
    "content": "# WebApplication - Listen to multiple ports.\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. In this example we set the Kestrel web server to listen to multiple urls and ports. You can open the page at `http://localhost:3000` or `http://localhost:5000`.\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-multiple-urls-ports/web-application-server-multiple-urls-ports.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-port-env-variable/Program.cs",
    "content": "using System;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nvar app = WebApplication.Create(args);\r\nvar port = Environment.GetEnvironmentVariable(\"PORT\") ?? \"3000\";\r\n\r\napp.Run(async (context) =>\r\n{\r\n    foreach(var u in app.Urls)\r\n        await context.Response.WriteAsync(u + \"\\n\");\r\n});\r\n\r\napp.Run($\"http://localhost:{port}\");"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-port-env-variable/README.md",
    "content": "# WebApplication - Reading the port from environment\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. In this example we set Kestrel port from an environment variable `PORT`. You can open the page at `http://localhost:3000` or `http://localhost:5000` if you have set up the environment variable PORT to 5000.\r\n\r\n\r\n## How to set Environment Variable PORT on Windows using PowerShell\r\n\r\n`dir env:` will show all environment variables.\r\n\r\n`$env:PORT = 5000` will set the environment variable `PORT` to `5000`."
  },
  {
    "path": "projects/minimal-hosting/web-application-server-port-env-variable/web-application-server-port-env-variable.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-specific-url-port/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(async (context) =>\r\n{\r\n    foreach(var u in app.Urls)\r\n        await context.Response.WriteAsync(u + \"\\n\");\r\n});\r\n\r\nawait app.RunAsync(\"http://localhost:3000\");"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-specific-url-port/README.md",
    "content": "# WebApplication - Listen to a specific url and port\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. In this example we set the Kestrel web server to listen to a specific url and port. You can open the page at `http://localhost:3000`.\r\n\r\nYou can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs)\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-server-specific-url-port/web-application-server-specific-url-port.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-use-file-server/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nvar app = WebApplication.Create();\r\napp.UseFileServer();\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-hosting/web-application-use-file-server/README.md",
    "content": "# WebApplication - UseFileServer()\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. ```app.UseFileServer();``` enables Kestrel to server static files and automatically look for the following files\r\n\r\n* default.htm\r\n* default.html\r\n* index.htm\r\n* index.html\r\n\r\nat `wwwroot`.\r\n\r\n\r\nYou can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs)\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-use-file-server/web-application-use-file-server.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-use-file-server/wwwroot/index.html",
    "content": "<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x\" crossorigin=\"anonymous\">\r\n    <title>Hello Kitty</title>\r\n  </head>\r\n  <body>\r\n      <img src=\"kitty.jpg\"/>\r\n  </body>\r\n</html>\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-use-web-sockets/Program.cs",
    "content": "using System;\r\nusing System.Net.WebSockets;\r\nusing System.Text;\r\nusing System.Threading;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nvar app = WebApplication.Create(args);\r\napp.UseWebSockets();\r\n\r\napp.Use(async (context, next) =>\r\n{\r\n    if (!context.WebSockets.IsWebSocketRequest)\r\n    {\r\n        // Not a web socket request\r\n        await next();\r\n        return;\r\n    }\r\n\r\n    var socket = await context.WebSockets.AcceptWebSocketAsync();\r\n    var bufferSize = new byte[1024 * 4];\r\n    var receiveBuffer = new ArraySegment<byte>(bufferSize);\r\n    var result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None);\r\n\r\n    while (!result.CloseStatus.HasValue)\r\n    {\r\n        if (result.MessageType == WebSocketMessageType.Text)\r\n        {\r\n            var clientRequest = Encoding.UTF8.GetString(receiveBuffer.Array, receiveBuffer.Offset, result.Count);\r\n\r\n            var serverReply = Encoding.UTF8.GetBytes(\"Echo \" + clientRequest);\r\n            var replyBuffer = new ArraySegment<byte>(serverReply);\r\n            await socket.SendAsync(replyBuffer, WebSocketMessageType.Text, true, CancellationToken.None);\r\n\r\n            receiveBuffer = new ArraySegment<byte>(bufferSize);\r\n            result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None);\r\n        }\r\n    }\r\n});\r\n\r\napp.Run(async context =>\r\n    {\r\n        context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n        await context.Response.WriteAsync(@\"\r\n<html>                \r\n    <head>\r\n    <script src=\"\"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js\"\" integrity=\"\"sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==\"\" crossorigin=\"\"anonymous\"\" referrerpolicy=\"\"no-referrer\"\"></script>\r\n    </head>\r\n    <body>\r\n        <h1>Web Socket</h1>\r\n        <input type=\"\"text\"\" length=\"\"50\"\" id=\"\"msg\"\" value=\"\"hello world\"\"/> <button type=\"\"button\"\" id=\"\"send\"\">Send</button>\r\n        <br/>\r\n        <script>\r\n            $(function(){\r\n                var url = \"\"ws://localhost:5000\"\";\r\n                var socket = new WebSocket(url);\r\n                var send = $(\"\"#send\"\");\r\n                var msg = $(\"\"#msg\"\");\r\n                socket.onopen = function(e){\r\n                    send.click(function(){\r\n                        socket.send(msg.val());                    \r\n                    });\r\n                };\r\n                socket.onmessage = function(e){\r\n                    var response = e.data;\r\n                    alert(response.trim());\r\n                };\r\n            });\r\n        </script>\r\n    </body>\r\n</html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/minimal-hosting/web-application-use-web-sockets/README.md",
    "content": "# WebApplication - UseWebSockets\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. This sample shows how to create a simple echo server using WebSockets.\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-use-web-sockets/web-application-use-web-sockets.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-welcome-page/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nWebApplication app = WebApplication.Create();\r\napp.UseWelcomePage();\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/minimal-hosting/web-application-welcome-page/README.md",
    "content": "# WebApplication - Welcome Page\r\n\r\nThis sample uses the brand new `WebApplication` hosting class. This simplifies configuring an ASP.NET Core application by a mile. `app.UseWelcomePage();` shows standard ASP.NET Core Welcome Page.\r\n\r\n\r\nYou can read the implementation of ```WebApplication``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplication.cs) and its sibling ```WebApplicationBuilder``` [here](https://github.com/dotnet/aspnetcore/blob/main/src/DefaultBuilder/src/WebApplicationBuilder.cs)\r\n\r\n"
  },
  {
    "path": "projects/minimal-hosting/web-application-welcome-page/web-application-welcome-page.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/README.md",
    "content": "# MVC (50)\r\n\r\n| Sections                                                       |     |\r\n| -------------------------------------------------------------- | --- |\r\n| [MVC - Localization](/projects/mvc/localization)               | 10  |\r\n| [MVC - Routing](/projects/mvc/routing)                         | 9   |\r\n| [MVC - Razor Class Library](/projects/mvc/razor-class-library) | 3   |\r\n| [MVC - Tag Helpers](/projects/mvc/tag-helper)                  | 7   |\r\n| [MVC - View Component](/projects/mvc/view-component)           | 4   |\r\n|                                                                | 33  |\r\n\r\n* [Hello World](/projects/mvc/hello-world)\r\n\r\n  A \"hello world\" MVC app.\r\n\r\n* [Infer dependency from action parameter](mvc-infer-dependency-from-action)\r\n\r\n  There is no need for `[FromServices]` attribute anymore to inject a dependency to your action method.\r\n\r\n## Authentication/Authorization (1)\r\n\r\n* [JWT](/projects/mvc/jwt)\r\n\r\n  Show how to generate and decode [JSON Web Tokens](https://jwt.io/).\r\n\r\n## API (2)\r\n\r\n* [Use Microsoft.AspNetCore.Mvc.ProblemDetails](/projects/mvc/api-problem-details)\r\n\r\n  Use `Microsoft.AspNetCore.Mvc.ProblemDetails` as part of your Web API error reply. It is implementing [RFC  7807](https://tools.ietf.org/html/rfc7807). It will make life easier for everybody.\r\n\r\n* [Extends Microsoft.AspNetCore.Mvc.ProblemDetails](/projects/mvc/api-problem-details-2)\r\n\r\n  Extend `Microsoft.AspNetCore.Mvc.ProblemDetails` to make it easier for day to day use. It will adjust what kind of information it shows based on your development environment.\r\n\r\n## Model Binding (2)\r\n  \r\n  We are exploring everything related to model binding in this section.\r\n\r\n  * [Model binding using a class and FromQuery attribute](/projects/mvc/model-binding-from-query)\r\n\r\n    Use `[FromQuery]` attribute to have MVC put all the query string values nicely in a class instead of using primitives e.g. `int userId`.\r\n\r\n  * [Model binding using a class and FromRoute attribute](/projects/mvc/model-binding-from-route)\r\n\r\n    Use `[FromRoute]` attribute to have MVC put all the route values nicely in a class instead of using primitives e.g. `int userId`.\r\n\r\n\r\n## Action Results (3)\r\n  \r\n  We are exploring various  that an Action returns.\r\n\r\n  * [FileStreamResult](/projects/mvc/result-filestream)\r\n\r\n    An example on how to return a file to the browser when you have a stream available.  \r\n\r\n  * [PhysicalFileResult](/projects/mvc/result-physicalfile)\r\n\r\n    An example on how to return a file to the browser when you have a path to a file on disk.\r\n\r\n  * [JsonResult](/projects/mvc/result-json)\r\n\r\n    Makes it easy to returns JSON content from an action.\r\n \r\n\r\n## Formatters (1)\r\n\r\n* [Returning XML Response](/projects/mvc/mvc-output-xml)\r\n\r\n  Return XML response using `Microsoft.AspNetCore.Mvc.Formatters.Xml`. \r\n\r\n## Swagger (API Documentation) (2)\n\n* [Using NSwag](/projects/mvc/nswag)\n  \n  Generate automatic documentation for your Web API using .NET 10 built-in OpenAPI (previously used NSwag).\n\n* [Customizing NSwag](/projects/mvc/nswag-2)\n\n  Use attribute such as `OpenApiTag` to organize your API or `OpenApiIgnore` to hide an API from the definition (using `[ApiExplorerSettings(IgnoreApi = true)]` also works). Uses NSwag as alternative to built-in OpenAPI.\n\r\n## Syndication Output Formatter (1)\r\n\r\n  We are building a RSS/ATOM Output formatter starting from the very basic.\r\n\r\n  * [Output Formatter Syndication](/projects/mvc/output-formatter-syndication)\r\n\r\n    This is a very rudimentary RSS output formatter. It's valid but it does not do much other than providing RSS items.\r\n  \r\n## Newtonsoft.Json (1)\r\n\r\n  * [Using Newtonsoft.Json](/projects/mvc/newtonsoft-json)\r\n\r\n    Use `Microsoft.AspNetCore.Mvc.NewtonsoftJson` to have MVC use `Newtonsoft.Json` instead of `System.Text.Json`.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/mvc/api/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllers();\r\nvar app = builder.Build();\r\napp.MapControllers();\r\napp.Run();\r\n\r\n[Route(\"api\")]\r\npublic class ToDoItemsController : Controller\r\n{\r\n    [HttpGet(\"[Action]\")]\r\n    public IActionResult AnEndpoint()\r\n    {\r\n        return new ObjectResult(\"This string is returned with this controller endpoint\");\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/mvc/api/README.md",
    "content": "# A sample MVC API in .NET 6\r\n\r\nOpen to `http://localhost:5000/api/anendpoint`"
  },
  {
    "path": "projects/mvc/api/api.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mvc/api-problem-details/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\n\r\napp.Run();\r\n\r\n[ApiController]\r\npublic class HomeController : Controller\r\n{\r\n    [HttpGet(\"\")]\r\n    public ActionResult<string> Index()\r\n    {\r\n        try\r\n        {\r\n            throw new ApplicationException(\"Catch this one\");\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            return new ObjectResult(\r\n                new ProblemDetails\r\n                {\r\n                    Title = \"Use Microsoft.AspNetCore.Mvc.ProblemDetails to describe error in your web APIs\",\r\n                    Detail = \"It is implemeting this RFC https://tools.ietf.org/html/rfc7807 and can be easily extended.\",\r\n                    Status = Microsoft.AspNetCore.Http.StatusCodes.Status500InternalServerError\r\n                });\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/api-problem-details/api-problem-details.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/api-problem-details-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Net;\r\nusing Microsoft.AspNetCore.Mvc.ModelBinding;\r\nusing Microsoft.AspNetCore.Http.Extensions;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.UseRouting();\r\napp.MapControllers();\r\napp.Run();\r\n\r\n[ApiController]\r\npublic class HomeController : Controller\r\n{\r\n    [HttpGet(\"\")]\r\n    public ActionResult<string> Index()\r\n    {\r\n        try\r\n        {\r\n            throw new ApplicationException(\"Catch this one\");\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            return this.ApiProblemDetails(HttpStatusCode.InternalServerError, exception: ex);\r\n        }\r\n    }\r\n}\r\n\r\n\r\n\r\n\r\npublic class ApiProblemsDetails : ProblemDetails\r\n{\r\n    public string RequestPath { get; set; }\r\n\r\n    public object RequestPayload { get; set; }\r\n\r\n    public IReadOnlyDictionary<string, string> ValidationMessages { get; set; } = new Dictionary<string, string>();\r\n\r\n    public string StackTrace { get; set; }\r\n}\r\n\r\npublic static class ControllerExtensions\r\n{\r\n    public static ActionResult ApiProblemDetails(this Controller self, HttpStatusCode statusCode,\r\n        string title = \"\",\r\n        string detail = \"\",\r\n        IReadOnlyDictionary<string, string> validationMessages = null,\r\n        ModelStateDictionary modelState = null,\r\n        Exception exception = null,\r\n        object request = null)\r\n    {\r\n        var details = new ApiProblemsDetails\r\n        {\r\n            Title = title,\r\n            Detail = detail,\r\n            RequestPath = self.Request.GetDisplayUrl(),\r\n            Status = (int)statusCode\r\n        };\r\n\r\n        if (validationMessages != null)\r\n            details.ValidationMessages = validationMessages;\r\n\r\n        if (modelState != null)\r\n        {\r\n            var modelStateMessages = modelState\r\n            .Where(x => x.Value.Errors.Count > 0)\r\n            .ToDictionary(\r\n                kvp => kvp.Key,\r\n                kvp => string.Join(\",\", kvp.Value.Errors.Select(e => e.ErrorMessage).ToArray())\r\n            );\r\n\r\n            if (details.ValidationMessages == null)\r\n                details.ValidationMessages = modelStateMessages;\r\n            else\r\n                details.ValidationMessages = details.ValidationMessages.Union(modelStateMessages).ToDictionary(x => x.Key, x => x.Value);\r\n        }\r\n\r\n        var host = self.HttpContext.RequestServices.GetService(typeof(IWebHostEnvironment)) as IWebHostEnvironment;\r\n\r\n        if (exception != null && host.EnvironmentName == Environments.Development)\r\n        {\r\n            if (string.IsNullOrWhiteSpace(details.Detail))\r\n                details.Detail = \"Exception Message: \" + exception.Message;\r\n            else\r\n                details.Detail += \"\\n\\n Exception Message: \" + exception.Message;\r\n\r\n            details.StackTrace = exception.StackTrace;\r\n        }\r\n\r\n        if (request != null)\r\n            details.RequestPayload = request;\r\n\r\n        return self.StatusCode((int)statusCode, details);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/api-problem-details-2/api-problem-details-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/api-versioning/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\nbuilder.Services.AddApiVersioning(o => o.ReportApiVersions = true);\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\n[ApiVersion(\"1.0\")]\r\n[Route(\"api/v{version:apiVersion}/[controller]\")]\r\n[ApiController]\r\npublic class HelloWorldController : ControllerBase\r\n{\r\n    [HttpGet]\r\n    public IActionResult Get(ApiVersion apiVersion) => Ok(new { Controller = GetType().Name, Version = apiVersion.ToString() });\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html>\r\n                    <body>\r\n                    <ul>\r\n                        <li><a href=\"\"/api/v1/helloWorld\"\">Click here for Version 1</a></li>\r\n                        <li><a href=\"\"/api/v2/helloWorld\"\">Click here for Version 2</a></li>\r\n                    </ul>\r\n                    </body>\r\n                </html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/api-versioning/api-versioning.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Mvc.Versioning\" Version=\"5.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/build.bat",
    "content": "dotnet build api\r\ndotnet build api-problem-details\r\ndotnet build api-problem-details-2\r\ndotnet build api-versioning\r\ndotnet build hello-world\r\ndotnet build jwt\r\ndotnet build localization\\mvc-localization-1\r\ndotnet build localization\\mvc-localization-2\r\ndotnet build localization\\mvc-localization-3\r\ndotnet build localization\\mvc-localization-4\r\ndotnet build localization\\mvc-localization-5\r\ndotnet build localization\\mvc-localization-6\r\ndotnet build localization\\mvc-localization-7\r\ndotnet build localization\\mvc-localization-8\r\ndotnet build localization\\mvc-localization-9\r\ndotnet build localization\\mvc-localization-10\r\ndotnet build model-binding-from-query\r\ndotnet build model-binding-from-route\r\ndotnet build mvc-infer-dependency-from-action\r\ndotnet build mvc-output-xml\r\ndotnet build newtonsoft-json\r\ndotnet build nswag\r\ndotnet build nswag-2\r\ndotnet build output-formatter-syndication\r\ndotnet build razor-class-library\\razor-class-library-1\r\ndotnet build razor-class-library\\razor-class-library-with-controllers\r\ndotnet build razor-class-library\\razor-class-library-with-static-files\r\ndotnet build result-filestream\r\ndotnet build result-json\r\ndotnet build result-physicalfile\r\ndotnet build routing\\routing-1\r\ndotnet build routing\\routing-2\r\ndotnet build routing\\routing-3\r\ndotnet build routing\\routing-4\r\ndotnet build routing\\routing-5\r\ndotnet build routing\\routing-6\r\ndotnet build routing\\routing-7\r\ndotnet build routing\\routing-8\r\ndotnet build routing\\routing-9\r\ndotnet build tag-helper\\tag-helper-1\r\ndotnet build tag-helper\\tag-helper-2\r\ndotnet build tag-helper\\tag-helper-3\r\ndotnet build tag-helper\\tag-helper-4\r\ndotnet build tag-helper\\tag-helper-5\r\ndotnet build tag-helper\\tag-helper-img\r\ndotnet build tag-helper\\tag-helper-link\r\ndotnet build view-component\\view-component-1\r\ndotnet build view-component\\view-component-2\r\ndotnet build view-component\\view-component-3\r\ndotnet build view-component\\view-component-4"
  },
  {
    "path": "projects/mvc/build.sh",
    "content": "#!/bin/bash\ndotnet build api\ndotnet build api-problem-details\ndotnet build api-problem-details-2\ndotnet build api-versioning\ndotnet build hello-world\ndotnet build jwt\ndotnet build localization/mvc-localization-1\ndotnet build localization/mvc-localization-2\ndotnet build localization/mvc-localization-3\ndotnet build localization/mvc-localization-4\ndotnet build localization/mvc-localization-5\ndotnet build localization/mvc-localization-6\ndotnet build localization/mvc-localization-7\ndotnet build localization/mvc-localization-8\ndotnet build localization/mvc-localization-9\ndotnet build localization/mvc-localization-10\ndotnet build model-binding-from-query\ndotnet build model-binding-from-route\ndotnet build mvc-infer-dependency-from-action\ndotnet build mvc-output-xml\ndotnet build newtonsoft-json\ndotnet build nswag\ndotnet build nswag-2\ndotnet build output-formatter-syndication\ndotnet build razor-class-library/razor-class-library-1\ndotnet build razor-class-library/razor-class-library-with-controllers\ndotnet build razor-class-library/razor-class-library-with-static-files\ndotnet build result-filestream\ndotnet build result-json\ndotnet build result-physicalfile\ndotnet build routing/routing-1\ndotnet build routing/routing-2\ndotnet build routing/routing-3\ndotnet build routing/routing-4\ndotnet build routing/routing-5\ndotnet build routing/routing-6\ndotnet build routing/routing-7\ndotnet build routing/routing-8\ndotnet build routing/routing-9\ndotnet build tag-helper/tag-helper-1\ndotnet build tag-helper/tag-helper-2\ndotnet build tag-helper/tag-helper-3\ndotnet build tag-helper/tag-helper-4\ndotnet build tag-helper/tag-helper-5\ndotnet build tag-helper/tag-helper-img\ndotnet build tag-helper/tag-helper-link\ndotnet build view-component/view-component-1\ndotnet build view-component/view-component-2\ndotnet build view-component/view-component-3\ndotnet build view-component/view-component-4\n"
  },
  {
    "path": "projects/mvc/hello-world/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = \"<html><body><b>Hello World</b></body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/hello-world/hello-world.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/jwt/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#ebb4de\",\r\n        \"activityBar.background\": \"#ebb4de\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#687e22\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#ebb4de\",\r\n        \"statusBar.background\": \"#e18bcc\",\r\n        \"statusBar.debuggingBackground\": \"#8be1a0\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#d762ba\",\r\n        \"statusBarItem.remoteBackground\": \"#e18bcc\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#e18bcc\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#e18bcc99\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#e18bcc\"\r\n}"
  },
  {
    "path": "projects/mvc/jwt/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.IdentityModel.Tokens;\r\nusing Microsoft.Extensions.Options;\r\nusing System.Text;\r\nusing System.IdentityModel.Tokens.Jwt;\r\nusing System.Security.Claims;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.Configure<JwtIssuerOptions>(options =>\r\n{\r\n    options.Issuer = \"SimpleServer\";\r\n    options.Audience = \"http://localhost\";\r\n    options.SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.ASCII.GetBytes(\"12345678901234567890\")), SecurityAlgorithms.HmacSha256);\r\n});\r\n\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class JwtIssuerOptions\r\n{\r\n    public string Issuer { get; set; }\r\n\r\n    public string Audience { get; set; }\r\n\r\n    public SigningCredentials SigningCredentials { get; set; }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    readonly IOptions<JwtIssuerOptions> _options;\r\n    public HomeController(IOptions<JwtIssuerOptions> options)\r\n    {\r\n        _options = options;\r\n    }\r\n\r\n    [HttpGet]\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content =\r\n$@\"<html>\r\n    <body>\r\n    <form action=\"\"Home/Jwt\"\" method=\"\"post\"\">\r\n        <button type=\"\"submit\"\">Get Token</button>\r\n    </form>\r\n    </body>\r\n</html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpPost]\r\n    public ActionResult Jwt()\r\n    {\r\n        var claims = new[]\r\n        {\r\n                new Claim(ClaimTypes.Name, \"Anne\"),\r\n                new Claim(ClaimTypes.Role, \"Admin\")\r\n            };\r\n\r\n        var option = _options.Value;\r\n\r\n        var token = new JwtSecurityToken\r\n        (\r\n            issuer: option.Issuer,\r\n            audience: option.Audience,\r\n            claims: claims,\r\n            expires: DateTime.Now.AddMinutes(60),\r\n            signingCredentials: option.SigningCredentials\r\n        );\r\n\r\n        var outputToken = new JwtSecurityTokenHandler().WriteToken(token);\r\n        var content =\r\n        $@\"\r\n<html>\r\n<body>\r\n    <strong>Content</strong>: {token}\r\n    <br/><br/>\r\n    <strong>Encoded Token</strong>: {outputToken}\r\n\r\n    <hr />\r\n    Copy the encoded token here to get the content of the token back\r\n    <form action=\"\"/Home/DecodeJwt\"\" method=\"\"post\"\">\r\n        <input type=\"\"text\"\" name=\"\"token\"\" />\r\n        <button type=\"\"submit\"\">Decode Token</button>\r\n    </form>\r\n</body>\r\n</html>\";\r\n\r\n        return new ContentResult\r\n        {\r\n            Content = content,\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpPost]\r\n    public ActionResult DecodeJwt([FromForm] string token)\r\n    {\r\n        var jwt = new JwtSecurityToken(token);\r\n\r\n        var content = $@\"<html>\r\n<body>\r\n    <strong>Content</strong>: {jwt}\r\n</body>\r\n</html>\";\r\n        return new ContentResult\r\n        {\r\n            Content = content,\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/jwt/jwt.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.IdentityModel.Tokens\" Version=\"7.4.1\" />\r\n    <PackageReference Include=\"System.IdentityModel.Tokens.Jwt\" Version=\"7.4.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/jwt/jwt.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"jwt\", \"jwt.csproj\", \"{A0F8E38E-F6EE-4A24-97E5-3429AF05BF8A}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{A0F8E38E-F6EE-4A24-97E5-3429AF05BF8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A0F8E38E-F6EE-4A24-97E5-3429AF05BF8A}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A0F8E38E-F6EE-4A24-97E5-3429AF05BF8A}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A0F8E38E-F6EE-4A24-97E5-3429AF05BF8A}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {D54F338C-7BBA-45F9-ACB5-5F12D3F1BF9C}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/mvc/localization/README.md",
    "content": "## Localization (10)\r\n\r\n  We are exploring all the nitty gritty of localization with MVC here.\r\n\r\n  * [MVC Localization - 1](/projects/mvc/localization/mvc-localization-1)\r\n\r\n    Demonstrate the sample of naming resource file using the \".\" dot naming convention. In this case, our Assembly Name differs from our namespace so we use full type name in our resource. This allows `IStringLocalizer<>` to be used in Controllers.\r\n\r\n  * [MVC Localization - 2](/projects/mvc/localization/mvc-localization-2)\r\n\r\n    This sample is identical as previous example except that we are using the path naming convention. \r\n    \r\n  * [MVC Localization - 3](/projects/mvc/localization/mvc-localization-3)\r\n\r\n    Demonstrate an easy way to use shared resources. The class name, `Global`, is just a name. It can be `Common` or `CommonResources`, etc. It does not matter.\r\n\r\n  * [MVC Localization - 4](/projects/mvc/localization/mvc-localization-4)\r\n\r\n    Similar to `MVC Localization - 3` except that now the assembly name and namespace share the same name. This is in contrast to `MVC Localization - 1` and `MVC Localization`.\r\n\r\n  * [MVC Localization - 5](/projects/mvc/localization/mvc-localization-5)\r\n\r\n    Use shared resource on View.\r\n\r\n  * [MVC Localization - 6](/projects/mvc/localization/mvc-localization-6)\r\n\r\n    If you keep wondering why your default request language doesn't work, this example is for you.\r\n    \r\n    This example demonstrates on how to ignore browser language preference by removing `AcceptLanguageHeaderRequestCultureProvider` and forcing your default language. This [article](https://dotnetcoretutorials.com/2017/06/22/request-culture-asp-net-core/) has a useful explanation on this provider.\r\n\r\n  * [MVC Localization - 7](/projects/mvc/localization/mvc-localization-7)\r\n\r\n    This sample shows how to use localization resources located in a separate project. Notice how the namespace correspondents to the folder name at the resource project.\r\n\r\n  * [MVC Localization - 8](/projects/mvc/localization/mvc-localization-8)\r\n\r\n    This sample demonstrates the usage of `AcceptLanguageHeaderRequestCultureProvider` and `Accept-Language` HTTP header.\r\n\r\n  * [MVC Localization - 9](/projects/mvc/localization/mvc-localization-9)\r\n\r\n    This sample demonstrates the situation of `cultural fallback` behaviour - `Starting from the requested culture, if not found, it reverts to the parent culture of that culture.`[doc](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-3.1#culture-fallback-behavior).\r\n\r\n  * [MVC Localization - 10](/projects/mvc/localization/mvc-localization-10)\r\n\r\n    This sample uses `CustomRequestCultureProvider` to provide fine localization based on the first part of a url segment e.g. /en/my-page, /fr.\r\n\r\n    dotnet6"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-1/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-localization.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-1/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/mvc-localization.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-1/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Globalization;\r\nusing Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(opts => { opts.ResourcesPath = \"Resources\"; });\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\n\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\")\r\n};\r\n\r\nvar options = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"fr-FR\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\napp.UseRequestLocalization(options);\r\n\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\n\r\nnamespace MvcLocalization\r\n{\r\n    public class HomeController : Controller\r\n    {\r\n        readonly IStringLocalizer<HomeController> _local;\r\n\r\n        public HomeController(IStringLocalizer<HomeController> local)\r\n        {\r\n            _local = local;\r\n        }\r\n        public ActionResult Index()\r\n        {\r\n            var culture = this.HttpContext.Features.Get<IRequestCultureFeature>();\r\n\r\n            return new ContentResult\r\n            {\r\n                Content = $@\"<html><body>\r\n                    <h1>MVC Localization Resource File Naming - Dot Naming Convention</h1>\r\n                    <p>\r\n                    <i><b>Resources are named for the full type name of their class minus the assembly name</b>. For example, a French resource in a project whose main assembly is LocalizationWebsite.Web.dll for the class LocalizationWebsite.Web.Startup would be named Startup.fr.resx. A resource for the class LocalizationWebsite.Web.Controllers.HomeController would be named Controllers.HomeController.fr.resx. If your targeted class's namespace isn't the same as the assembly name you will need the full type name. For example, in the sample project a resource for the type ExtraNamespace.Tools would be named ExtraNamespace.Tools.fr.resx.\r\n                    </i>\r\n                    <a href=\"\"https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-3.1\"\">Doc</a>\r\n                    </p>\r\n                    <p>\r\n                        In this sample, the assembly name is \"\"mvc-localization\"\" however the namespace used is \"\"MvcLocalization\"\". Since the namespace differs from the Assembly Name, we use full type path.\r\n                    </p>\r\n                    <b>Culture requested</b> {culture.RequestCulture.Culture} <br/>\r\n                    <b>UI Culture requested</b> {culture.RequestCulture.UICulture} <br/>\r\n                    Text: {_local[\"Hello\"]}<br/>\r\n                    Text: {_local[\"Goodbye\"]}</body></html>\",\r\n                ContentType = \"text/html\"\r\n            };\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-1/Resources/MvcLocalization.HomeController.fr.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Oui</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Non</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-1/mvc-localization.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-10/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Globalization;\r\nusing Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(opts => { opts.ResourcesPath = \"Resources\"; });\r\nbuilder.Services.AddControllersWithViews();\r\nbuilder.Services.Configure<RequestLocalizationOptions>(options =>\r\n    {\r\n      options.RequestCultureProviders.Clear();\r\n\r\n      var supportedCultures = new List<CultureInfo>\r\n      {\r\n          new CultureInfo(\"fr\"),\r\n          new CultureInfo(\"en-US\"),\r\n          new CultureInfo(\"en\"),\r\n      };\r\n\r\n      options.DefaultRequestCulture = new RequestCulture(\"fr\");\r\n      options.SupportedCultures = supportedCultures;\r\n      options.SupportedUICultures = supportedCultures;\r\n\r\n      options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(context =>\r\n      {\r\n          var defaultCulture = options.DefaultRequestCulture.Culture;\r\n\r\n          var segments = context.Request.Path.Value.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);\r\n\r\n          if (segments.Length > 0)\r\n          {\r\n            foreach (var c in options.SupportedCultures)\r\n            {\r\n              if (c.Name.Equals(segments[0], StringComparison.InvariantCulture))\r\n                return Task.FromResult(new ProviderCultureResult(c.Name));\r\n            }\r\n          }\r\n\r\n          return Task.FromResult(new ProviderCultureResult(defaultCulture.Name));\r\n        }));\r\n    });\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\napp.UseRequestLocalization();\r\napp.MapDefaultControllerRoute();\r\n\r\napp.Run();\r\n\r\n\r\nnamespace MvcLocalization\r\n{\r\n    // Leave this class empty\r\n    public class Global\r\n    {\r\n    }\r\n\r\n    [Route(\"api\")]\r\n    [Produces(\"application/json\")]\r\n    [ApiController]\r\n    public class ApiController : ControllerBase\r\n    {\r\n      IStringLocalizer<Global> _global;\r\n\r\n      public ApiController(IStringLocalizer<Global> global)\r\n      {\r\n        _global = global;\r\n      }\r\n\r\n      [HttpGet(\"{word}\")]\r\n      public ActionResult Get(string word)\r\n      {\r\n        return Ok(new { Greeting = _global[word].ToString() });\r\n      }\r\n    }\r\n\r\n    public class HomeController : Controller\r\n    {\r\n      [Route(\"{*url}\")]\r\n      public ActionResult Index()\r\n      {\r\n        return View();\r\n      }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-10/README.md",
    "content": "# Custom Culture Provider\r\n\r\nThis sample uses `CustomRequestCultureProvider` to provide fine localization based on the first part of a url segment e.g. /en/my-page, /fr."
  },
  {
    "path": "projects/mvc/localization/mvc-localization-10/Resources/MvcLocalization/Global.en-US.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>So long</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-10/Resources/MvcLocalization/Global.en.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>See you again</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>How do you do</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-10/Resources/MvcLocalization/Global.fr.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-10/Views/Home/Index.cshtml",
    "content": "@using Microsoft.Extensions.Localization\r\n@using Microsoft.AspNetCore.Localization\r\n@inject IStringLocalizer<MvcLocalization.Global> Local\r\n\r\n@{\r\n    var culture = Context.Features.Get<IRequestCultureFeature>();\r\n}\r\n<html>\r\n    <head>\r\n        <link rel=\"stylesheet\" href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css\" integrity=\"sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T\" crossorigin=\"anonymous\">\r\n    </head>\r\n    <body>\r\n        <div class=\"container\">\r\n            <h1>Custom Culture Provider</h1>\r\n            <p>\r\n                As you can see here we are providing culture based on the first segment of the url. If the first segment doesn't exist (e.g. /) or doesn't match our list of supported culture, the default culture is returned. \r\n                The default culture in this case is 'fr'.\r\n            </p>\r\n            <ul>\r\n                <li><a href=\"/\">/</a></li>\r\n                <li><a href=\"/fr\">/fr</a></li>\r\n                <li><a href=\"/fr/oui\">/fr/oui</a></li>\r\n                <li><a href=\"/en\">/en</a></li>\r\n                <li><a href=\"/en/yes\">/en/yes</a></li>\r\n                <li><a href=\"/en-US/yes\">/en-US/yes</a></li>\r\n                <li><a href=\"/ar\">/ar</a></li>\r\n            </ul>\r\n            \r\n            <table class=\"table\">\r\n                <thead>\r\n                    <tr>\r\n                        <th>Key</th>\r\n                        <th>Value</th>\r\n                    </tr>\r\n                </thead>\r\n                <tbody>\r\n                    <tr>\r\n                        <td>\r\n                            Hello\r\n                        </td>\r\n                        <td>\r\n                            @Local[\"Hello\"]\r\n                        </td>\r\n                    </tr>\r\n                    <tr>\r\n                        <td>\r\n                            Goodbye\r\n                        </td>\r\n                        <td>\r\n                            @Local[\"Goodbye\"]\r\n                        </td>\r\n                    </tr>\r\n                </tbody>\r\n            </table>        \r\n        </div>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-10/mvc-localization-10.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-2/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-localization-2.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-2/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/mvc-localization-2.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Globalization;\r\nusing Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(opts => { opts.ResourcesPath = \"Resources\"; });\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\")\r\n};\r\n\r\nvar options = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"fr-FR\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\napp.UseRequestLocalization(options);\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\nnamespace MvcLocalization\r\n{\r\n    public class HomeController : Controller\r\n    {\r\n        readonly IStringLocalizer<HomeController> _local;\r\n\r\n        public HomeController(IStringLocalizer<HomeController> local)\r\n        {\r\n            _local = local;\r\n        }\r\n        public ActionResult Index()\r\n        {\r\n            var culture = this.HttpContext.Features.Get<IRequestCultureFeature>();\r\n\r\n            return new ContentResult\r\n            {\r\n                Content = $@\"<html><body>\r\n                    <h1>MVC Localization Resource File Naming - Path Naming Convention</h1>\r\n                    <p>\r\n                    <i><b>Resources are named for the full type name of their class minus the assembly name</b>. For example, a French resource in a project whose main assembly is LocalizationWebsite.Web.dll for the class LocalizationWebsite.Web.Startup would be named Startup.fr.resx. A resource for the class LocalizationWebsite.Web.Controllers.HomeController would be named Controllers.HomeController.fr.resx. If your targeted class's namespace isn't the same as the assembly name you will need the full type name. For example, in the sample project a resource for the type ExtraNamespace.Tools would be named ExtraNamespace.Tools.fr.resx.\r\n                    </i>\r\n                    <a href=\"\"https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-3.1\"\">Doc</a>\r\n                    </p>\r\n                    <p>\r\n                        In this sample, the assembly name is \"\"mvc-localization\"\" however the namespace used is \"\"MvcLocalization\"\". Since the namespace differs from the Assembly Name, we use full type path.\r\n                    </p>\r\n                    <b>Culture requested</b> {culture.RequestCulture.Culture} <br/>\r\n                    <b>UI Culture requested</b> {culture.RequestCulture.UICulture} <br/>\r\n                    Text: {_local[\"Hello\"]}<br/>\r\n                    Text: {_local[\"Goodbye\"]}</body></html>\",\r\n                ContentType = \"text/html\"\r\n            };\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-2/Resources/MvcLocalization/HomeController.fr.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour Mon Ami</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Oui</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Non</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-2/mvc-localization-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-3/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-localization-2.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-3/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/mvc-localization-2.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-3/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Globalization;\r\nusing Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(opts => { opts.ResourcesPath = \"Resources\"; });\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\n\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\")\r\n};\r\n\r\nvar options = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"fr-FR\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\napp.UseRequestLocalization(options);\r\n\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\nnamespace MvcLocalization\r\n{\r\n    \r\n    // Leave this class empty\r\n    public class Global\r\n    {\r\n\r\n    }\r\n\r\n    public class HomeController : Controller\r\n    {\r\n        readonly IStringLocalizer<Global> _local;\r\n\r\n        public HomeController(IStringLocalizer<Global> local)\r\n        {\r\n            _local = local;\r\n        }\r\n        public ActionResult Index()\r\n        {\r\n            var culture = this.HttpContext.Features.Get<IRequestCultureFeature>();\r\n\r\n            return new ContentResult\r\n            {\r\n                Content = $@\"<html><body>\r\n                    <h1>MVC Shared Resources - Home</h1>\r\n                    <p>\r\n                        <a href=\"\"/about/index\"\">About</a>\r\n                    </p>\r\n                    <b>Culture requested</b> {culture.RequestCulture.Culture} <br/>\r\n                    <b>UI Culture requested</b> {culture.RequestCulture.UICulture} <br/>\r\n                    Text: {_local[\"Hello\"]}<br/>\r\n                    Text: {_local[\"Goodbye\"]}</body></html>\",\r\n                ContentType = \"text/html\"\r\n            };\r\n        }\r\n    }\r\n\r\n    public class AboutController : Controller\r\n    {\r\n        readonly IStringLocalizer<Global> _local;\r\n\r\n        public AboutController(IStringLocalizer<Global> local)\r\n        {\r\n            _local = local;\r\n        }\r\n        public ActionResult Index()\r\n        {\r\n            var culture = this.HttpContext.Features.Get<IRequestCultureFeature>();\r\n\r\n            return new ContentResult\r\n            {\r\n                Content = $@\"<html><body>\r\n                    <h1>MVC Shared Resources - About</h1>\r\n                    <p>\r\n                        <a href=\"\"/\"\">Home</a>\r\n                    </p>\r\n                    <b>Culture requested</b> {culture.RequestCulture.Culture} <br/>\r\n                    <b>UI Culture requested</b> {culture.RequestCulture.UICulture} <br/>\r\n                    Text: {_local[\"Hello\"]}<br/>\r\n                    Text: {_local[\"Goodbye\"]}</body></html>\",\r\n                ContentType = \"text/html\"\r\n            };\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-3/Resources/MvcLocalization/Global.fr.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Oui</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Non</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-3/mvc-localization-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-4/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-localization-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-4/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/mvc-localization-4.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-4/MvcLocalization.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-4/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Globalization;\r\nusing Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(opts => { opts.ResourcesPath = \"Resources\"; });\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\n\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\")\r\n};\r\n\r\nvar options = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"fr-FR\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\napp.UseRequestLocalization(options);\r\napp.MapDefaultControllerRoute();\r\n\r\napp.Run();\r\n\r\n// Leave this class empty\r\npublic class Global\r\n{\r\n\r\n}\r\npublic class HomeController : Controller\r\n{\r\n    readonly IStringLocalizer<Global> _local;\r\n\r\n    public HomeController(IStringLocalizer<Global> local)\r\n    {\r\n        _local = local;\r\n    }\r\n    public ActionResult Index()\r\n    {\r\n        var culture = this.HttpContext.Features.Get<IRequestCultureFeature>();\r\n\r\n        return new ContentResult\r\n        {\r\n            Content = $@\"<html><body>\r\n                <h1>MVC Shared Resources - Home - Where namespace and assembly name are the same</h1>\r\n                <p>\r\n                    Please note that the project name is `MvcLocalization.csproj`, the Assembly Name value is also `MvcLocalization` and the root namespace is `MvcLocalization` as well. \r\n                </p>\r\n                <p>\r\n                    This means that we do not have to fully qualify the name of the resource file based on the following naming rules <br/><br/>\r\n                    <i>Resources are named for the full type name of their class minus the assembly name. For example, a French resource in a project whose main assembly is LocalizationWebsite.Web.dll for the class LocalizationWebsite.Web.Startup would be named Startup.fr.resx. A resource for the class LocalizationWebsite.Web.Controllers.HomeController would be named Controllers.HomeController.fr.resx. If your targeted class's namespace isn't the same as the assembly name you will need the full type name. For example, in the sample project a resource for the type ExtraNamespace.Tools would be named ExtraNamespace.Tools.fr.resx.\r\n                    </i>\r\n                    <a href=\"\"https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-3.1\"\">Doc</a>\r\n                </p>\r\n                <p>\r\n                    <a href=\"\"/about/index\"\">About</a>\r\n                </p>\r\n                <b>Culture requested</b> {culture.RequestCulture.Culture} <br/>\r\n                <b>UI Culture requested</b> {culture.RequestCulture.UICulture} <br/>\r\n                Text: {_local[\"Hello\"]}<br/>\r\n                Text: {_local[\"Goodbye\"]}</body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n\r\npublic class AboutController : Controller\r\n{\r\n    readonly IStringLocalizer<Global> _local;\r\n\r\n    public AboutController(IStringLocalizer<Global> local)\r\n    {\r\n        _local = local;\r\n    }\r\n    public ActionResult Index()\r\n    {\r\n        var culture = this.HttpContext.Features.Get<IRequestCultureFeature>();\r\n\r\n        return new ContentResult\r\n        {\r\n            Content = $@\"<html><body>\r\n                <h1>MVC Shared Resources - About</h1>\r\n                <p>\r\n                    <a href=\"\"/\"\">Home</a>\r\n                </p>\r\n                <b>Culture requested</b> {culture.RequestCulture.Culture} <br/>\r\n                <b>UI Culture requested</b> {culture.RequestCulture.UICulture} <br/>\r\n                Text: {_local[\"Hello\"]}<br/>\r\n                Text: {_local[\"Goodbye\"]}</body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-4/Resources/Global.fr.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Oui</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Non</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-5/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-localization-5.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-5/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/mvc-localization-5.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-5/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Globalization;\r\nusing Microsoft.AspNetCore.Localization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(opts => { opts.ResourcesPath = \"Resources\"; });\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\n\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\")\r\n};\r\n\r\nvar options = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"fr-FR\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\napp.UseRequestLocalization(options);\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\nnamespace MvcLocalization\r\n{\r\n    // Leave this class empty\r\n    public class Global\r\n    {\r\n\r\n    }\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-5/Resources/MvcLocalization/Global.fr.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Oui</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Non</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-5/Views/Home/Index.cshtml",
    "content": "@using Microsoft.Extensions.Localization\r\n@using Microsoft.AspNetCore.Localization\r\n@inject IStringLocalizer<MvcLocalization.Global> local\r\n\r\n@{\r\n    var culture = Context.Features.Get<IRequestCultureFeature>();\r\n}\r\n<html>\r\n    <body>\r\n        <h1>MVC Shared Resources - Using View</h1>\r\n        <b>Culture requested</b> @culture.RequestCulture.Culture <br/>\r\n        <b>UI Culture requested</b> @culture.RequestCulture.UICulture <br/>\r\n        @local[\"Hello\"]<br/>\r\n        @local[\"Goodbye\"]<br/>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-5/mvc-localization-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-6/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Globalization;\r\nusing Microsoft.AspNetCore.Localization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(opts => { opts.ResourcesPath = \"Resources\"; });\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\n\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\"),\r\n    new CultureInfo(\"en-US\")\r\n};\r\n\r\nvar options = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"fr-FR\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\n/*\r\n    By default you have the following providers. \r\n    - QueryStringRequestCultureProvider\r\n    - CookieRequestCultureProvider\r\n    - AcceptLanguageHeaderRequestCultureProvider\r\n\r\n    AcceptLanguageHeaderRequestCultureProvider is the one that check for client's language preference. We don't want this. \r\n    */\r\n\r\noptions.RequestCultureProviders.Clear();\r\noptions.RequestCultureProviders.Add(new QueryStringRequestCultureProvider());\r\noptions.RequestCultureProviders.Add(new CookieRequestCultureProvider());\r\n\r\napp.UseRequestLocalization(options);\r\napp.MapDefaultControllerRoute();\r\n\r\napp.Run();\r\n\r\nnamespace MvcLocalization \r\n{\r\n    // Leave this class empty\r\n    public class Global\r\n    {\r\n\r\n    }\r\n\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-6/Resources/MvcLocalization/Global.en.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>So long</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Howdy</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Hell Yeah</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>No</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-6/Resources/MvcLocalization/Global.fr.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Oui</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Non</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-6/Views/Home/Index.cshtml",
    "content": "@using Microsoft.Extensions.Localization\r\n@using Microsoft.AspNetCore.Localization\r\n@inject IStringLocalizer<MvcLocalization.Global> local\r\n\r\n@{\r\n    var culture = Context.Features.Get<IRequestCultureFeature>();\r\n}\r\n<html>\r\n    <body>\r\n        <h1>MVC Shared Resources - Forcing the default language to be French although your browser wants (probably) English</h1>\r\n        <b>Culture requested</b> @culture.RequestCulture.Culture <br/>\r\n        <b>UI Culture requested</b> @culture.RequestCulture.UICulture <br/>\r\n        @local[\"Hello\"]<br/>\r\n        @local[\"Goodbye\"]<br/>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-6/mvc-localization-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-7/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/src/Web/bin/Debug/netcoreapp3.1/mvc-localization-3.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}/src/Web\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-7/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/src/Web/mvc-localization-7.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-7/ProjectWithResources/ClassLibrary.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\r\n  <PropertyGroup>\r\n    <TargetFramework>netstandard2.1</TargetFramework>\r\n    <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>\r\n    <AssemblyName>ClassLibrary</AssemblyName>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-7/ProjectWithResources/Messages.cs",
    "content": "namespace ClassLibrary\r\n{\r\n    public class Messages\r\n    {\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-7/ProjectWithResources/Messages.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    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=\"SeeYouTomorrow\" xml:space=\"preserve\">\r\n    <value>A Demain</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-7/ProjectWithResources/Resources/Global.cs",
    "content": "namespace ClassLibrary.Resources\r\n{\r\n    public class Global\r\n    {\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-7/ProjectWithResources/Resources/Global.fr.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Oui</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Non</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-7/Web/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Globalization;\r\nusing Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\nusing ClassLibrary.Resources;\r\nusing ClassLibrary;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\n\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\")\r\n};\r\n\r\nvar options = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"fr-FR\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\napp.UseRequestLocalization(options);\r\napp.MapDefaultControllerRoute();\r\n\r\napp.Run();\r\n\r\n// Leave this class empty\r\n\r\npublic class HomeController : Controller\r\n{\r\n    readonly IStringLocalizer<Global> _local;\r\n    readonly IStringLocalizer<Messages> _local2;\r\n\r\n    public HomeController(IStringLocalizer<Global> local, IStringLocalizer<Messages> local2)\r\n    {\r\n        _local = local;\r\n        _local2 = local2;\r\n    }\r\n\r\n    public ActionResult Index()\r\n    {\r\n        var culture = this.HttpContext.Features.Get<IRequestCultureFeature>();\r\n\r\n        return new ContentResult\r\n        {\r\n            Content = $@\"<html><body>\r\n                <h1>MVC Shared Resources - Home</h1>\r\n                <p>\r\n                    <a href=\"\"/about/index\"\">About</a>\r\n                </p>\r\n                <b>Culture requested</b> {culture.RequestCulture.Culture} <br/>\r\n                <b>UI Culture requested</b> {culture.RequestCulture.UICulture} <br/>\r\n                <h2>From ClassLibrary.Resources.Global</h2>\r\n                Text: {_local[\"Hello\"]}<br/>\r\n                Text: {_local[\"Goodbye\"]}\r\n                <h2>From ClassLibrary.Messages</h2>\r\n                Text: {_local2[\"SeeYouTomorrow\"]}\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n\r\npublic class AboutController : Controller\r\n{\r\n    readonly IStringLocalizer<Global> _local;\r\n\r\n    public AboutController(IStringLocalizer<Global> local)\r\n    {\r\n        _local = local;\r\n    }\r\n    public ActionResult Index()\r\n    {\r\n        var culture = this.HttpContext.Features.Get<IRequestCultureFeature>();\r\n\r\n        return new ContentResult\r\n        {\r\n            Content = $@\"<html><body>\r\n                <h1>MVC Shared Resources - About</h1>\r\n                <p>\r\n                    <a href=\"\"/\"\">Home</a>\r\n                </p>\r\n                <b>Culture requested</b> {culture.RequestCulture.Culture} <br/>\r\n                <b>UI Culture requested</b> {culture.RequestCulture.UICulture} <br/>\r\n                Text: {_local[\"Hello\"]}<br/>\r\n                Text: {_local[\"Goodbye\"]}</body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-7/Web/mvc-localization-7.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\ProjectWithResources\\ClassLibrary.csproj\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-8/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Globalization;\r\nusing Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(opts => { opts.ResourcesPath = \"Resources\"; });\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\n\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\"),\r\n    new CultureInfo(\"en-US\"),\r\n};\r\n\r\nvar options = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"fr-FR\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\n/*\r\n    By default you have the following providers. \r\n    - QueryStringRequestCultureProvider\r\n    - CookieRequestCultureProvider\r\n    - AcceptLanguageHeaderRequestCultureProvider\r\n    */\r\n\r\noptions.RequestCultureProviders.Clear();\r\noptions.RequestCultureProviders.Add(new AcceptLanguageHeaderRequestCultureProvider());\r\n\r\napp.UseRequestLocalization(options);\r\n\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\n// Leave this class empty\r\npublic class Global\r\n{\r\n}\r\n\r\n[Route(\"api\")]\r\n[Produces(\"application/json\")]\r\n[ApiController]\r\npublic class ApiController : ControllerBase\r\n{\r\n    IStringLocalizer<Global> _global;\r\n\r\n    public ApiController(IStringLocalizer<Global> global)\r\n    {\r\n        _global = global;\r\n    }\r\n\r\n    [HttpGet(\"\")]\r\n    public ActionResult Get()\r\n    {\r\n        return Ok(new { Greeting = _global[\"Hello\"].ToString() });\r\n    }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return View();\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-8/README.md",
    "content": "# Using Accept-Language HTTP Header \r\n\r\nThis example uses `AcceptLanguageHeaderRequestCultureProvider` to demonstrate on how sending `Accept-Language` header in your Web API call changes the culture information in a ASP.NET Core request."
  },
  {
    "path": "projects/mvc/localization/mvc-localization-8/Resources/Global.en.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>So long</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Howdy</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Hell Yeah</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>No</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-8/Resources/Global.fr.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour</value>\r\n  </data>\r\n  <data name=\"Yes\" xml:space=\"preserve\">\r\n    <value>Oui</value>\r\n  </data>\r\n  <data name=\"No\" xml:space=\"preserve\">\r\n    <value>Non</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-8/Views/Home/Index.cshtml",
    "content": "@using Microsoft.Extensions.Localization\r\n@using Microsoft.AspNetCore.Localization\r\n@inject IStringLocalizer<Global> local\r\n\r\n@{\r\n    var culture = Context.Features.Get<IRequestCultureFeature>();\r\n}\r\n<html>\r\n    <head>\r\n        <link rel=\"stylesheet\" href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css\" integrity=\"sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T\" crossorigin=\"anonymous\">\r\n    </head>\r\n    <body>\r\n        <div class=\"container\">\r\n            <div class=\"col-md-12\">\r\n                <h1>Using `Accept-Language` header in your API call</h1>\r\n                <p>In this example, we only use AcceptLanguageHeaderRequestCultureProvider to demonstrate on how you can affect culture information in your WebAPI request.</p>\r\n                <p>Each of the following AJAX call send 'Accept-Language' header with 'en-US' and 'fr-FR' for their respective languages.</p>\r\n                <div id=\"message\" style=\"color:red;font-weight:bold;\"></div>\r\n\r\n                <br/><br/>\r\n                <button type=\"button\" id=\"english\">Show English</button>\r\n                <button type=\"button\" id=\"french\">Show French</button>\r\n            </div>\r\n        </div>\r\n     \r\n        <script src=\"https://code.jquery.com/jquery-3.4.1.min.js\" integrity=\"sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=\" crossorigin=\"anonymous\"></script>\r\n        <script>\r\n            $(function(){\r\n                $('#english').click(function(){\r\n                    let url = `/api`;\r\n                    $.ajax({\r\n                        typ: `GET`,\r\n                        url: url,\r\n                        dataType: `json`,\r\n                        headers: {\r\n                            'Accept': `application/json`, \r\n                            'Accept-Language': `en-US`\r\n                        }\r\n                    }).done(function(data)\r\n                    {\r\n                        $('#message').text(data.greeting);\r\n                    });\r\n                });\r\n\r\n                $('#french').click(function(){\r\n                    let url = `/api`;\r\n                    $.ajax({\r\n                        typ: `GET`,\r\n                        url: url,\r\n                        dataType: `json`,\r\n                        headers: {\r\n                            'Accept': `application/json`, \r\n                            'Accept-Language': `fr-FR`\r\n                        }\r\n                    }).done(function(data)\r\n                    {\r\n                        $('#message').text(data.greeting);\r\n                    });\r\n\r\n                });\r\n            });\r\n        </script>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-8/mvc-localization-8.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-9/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Globalization;\r\nusing Microsoft.AspNetCore.Localization;\r\nusing Microsoft.Extensions.Localization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddLocalization(opts => { opts.ResourcesPath = \"Resources\"; });\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\n\r\nvar supportedCultures = new List<CultureInfo>\r\n{\r\n    new CultureInfo(\"fr-FR\"),\r\n    new CultureInfo(\"en-US\"),\r\n    new CultureInfo(\"en\"),\r\n};\r\n\r\nvar options = new RequestLocalizationOptions\r\n{\r\n    DefaultRequestCulture = new RequestCulture(\"fr-FR\"),\r\n    SupportedCultures = supportedCultures,\r\n    SupportedUICultures = supportedCultures\r\n};\r\n\r\n/*\r\n    By default you have the following providers. \r\n    - QueryStringRequestCultureProvider\r\n    - CookieRequestCultureProvider\r\n    - AcceptLanguageHeaderRequestCultureProvider\r\n    */\r\n\r\noptions.RequestCultureProviders.Clear();\r\noptions.RequestCultureProviders.Add(new AcceptLanguageHeaderRequestCultureProvider());\r\n\r\napp.UseRequestLocalization(options);\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\nnamespace MvcLocalization\r\n{\r\n    // Leave this class empty\r\n    public class Global\r\n    {\r\n    }\r\n\r\n    [Route(\"api\")]\r\n    [Produces(\"application/json\")]\r\n    [ApiController]\r\n    public class ApiController : ControllerBase\r\n    {\r\n        IStringLocalizer<Global> _global;\r\n\r\n        public ApiController(IStringLocalizer<Global> global)\r\n        {\r\n            _global = global;\r\n        }\r\n\r\n        [HttpGet(\"{word}\")]\r\n        public ActionResult Get(string word)\r\n        {\r\n            return Ok(new { Greeting = _global[word].ToString() });\r\n        }\r\n    }\r\n\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-9/README.md",
    "content": "# Culture fallback\r\n\r\nThis example uses `AcceptLanguageHeaderRequestCultureProvider` to demonstrate \"culture fallback\".\r\n\r\n```\r\nWhen searching for a resource, localization engages in \"culture fallback\". Starting from the requested culture, if not found, it reverts to the parent culture of that culture. As an aside, the CultureInfo.Parent property represents the parent culture. This usually (but not always) means removing the national signifier from the ISO. For example, the dialect of Spanish spoken in Mexico is \"es-MX\". It has the parent \"es\"—Spanish non-specific to any country.\r\n``` \r\n[doc](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.2#culture-fallback-behavior)\r\n"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-9/Resources/MvcLocalization/Global.en-US.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>So long</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-9/Resources/MvcLocalization/Global.en.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>See you again</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>How do you do</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-9/Resources/MvcLocalization/Global.fr.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    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=\"Goodbye\" xml:space=\"preserve\">\r\n    <value>Au Revoir</value>\r\n  </data>\r\n  <data name=\"Hello\" xml:space=\"preserve\">\r\n    <value>Bonjour</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-9/Views/Home/Index.cshtml",
    "content": "@using Microsoft.Extensions.Localization\r\n@using Microsoft.AspNetCore.Localization\r\n@inject IStringLocalizer<MvcLocalization.Global> local\r\n\r\n@{\r\n    var culture = Context.Features.Get<IRequestCultureFeature>();\r\n}\r\n<html>\r\n    <head>\r\n        <link rel=\"stylesheet\" href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css\" integrity=\"sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T\" crossorigin=\"anonymous\">\r\n    </head>\r\n    <body>\r\n        <div class=\"container\">\r\n            <div class=\"col-md-12\">\r\n                <h1>Culture Fallback</h1>\r\n                <ul>\r\n                    <li>Global.en-US.resx has no entry for 'Hello' so it uses the entry contained in Global.en.resx when the request has `en-US` language culture.</li>\r\n                    <li>For `Goodbye`, both Global.en-US.resx and Global.en.resx have their own entries so they show different results.</li>\r\n                </ul>\r\n                <div id=\"message\" style=\"color:red;font-weight:bold;\"></div>\r\n\r\n                <br/><br/>\r\n                <button type=\"button\" class=\"btn btn-primary\" id=\"hello_en\">Hello (en)</button>\r\n                <button type=\"button\" class=\"btn btn-secondary\" id=\"hello_en_us\">Hello (en-US)</button>\r\n                <button type=\"button\" class=\"btn btn-info\" id=\"hello_fr\">Hello (fr)</button>\r\n                <button type=\"button\" class=\"btn btn-warning\" id=\"goodbye_en\">Goodbye (en)</button>\r\n                <button type=\"button\" class=\"btn btn-danger\" id=\"goodbye_en_us\">Goodbye (en-US)</button>\r\n            </div>\r\n        </div>\r\n     \r\n        <script src=\"https://code.jquery.com/jquery-3.4.1.min.js\" integrity=\"sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=\" crossorigin=\"anonymous\"></script>\r\n        <script>\r\n            function fetch(word, lang){\r\n                let url = `/api/` + word;\r\n                $.ajax({\r\n                    typ: `GET`,\r\n                    url: url,\r\n                    dataType: `json`,\r\n                    headers: {\r\n                        'Accept': `application/json`, \r\n                        'Accept-Language': `${lang}`\r\n                    }\r\n                }).done(function(data)\r\n                {\r\n                    $('#message').text(data.greeting);\r\n                });\r\n            }\r\n                \r\n            $(function(){\r\n                $('#hello_en').click(() => fetch('Hello', 'en'));\r\n                $('#hello_en_us').click(() => fetch('Hello', 'en-US'));\r\n                $('#hello_fr').click(() => fetch('Hello', 'fr'));\r\n                $('#goodbye_en').click(() => fetch('Goodbye', 'en'));\r\n                $('#goodbye_en_us').click(() => fetch('Goodbye', 'en-US'));\r\n            });\r\n        </script>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/mvc/localization/mvc-localization-9/mvc-localization-9.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>mvc-localization-9</AssemblyName>\r\n\r\n    <PackageId>mvc-localization</PackageId>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/model-binding-from-query/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class GreetingParams\r\n{\r\n    public int UserId { get; set; }\r\n\r\n    public string Name { get; set; }\r\n\r\n    public bool IsAmazing { get; set; }\r\n\r\n    public short? Age { get; set; }\r\n\r\n    public override string ToString() => $\"User Id: {UserId}, Name: {Name}, Is Amazing: {IsAmazing}, Age: {Age}\";\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index([FromQuery] GreetingParams greet)\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = $@\"<html><body>\r\n                <h1>Class binding with [FromQuery]</h1>\r\n                <p>You can see the difference in behavior between the nullable type and non nullable types here. Age is short? and User Id is int.<p>\r\n                {greet}\r\n                <ul>\r\n                    <li><a href=\"\"/\"\">/</a></li>\r\n                    <li><a href=\"\"/?name=annie\"\">/?name=annie</a></li>\r\n                    <li><a href=\"\"/?isamazing=true\"\">/?isamazing=true</a></li>\r\n                    <li><a href=\"\"/?userid=1\"\">/?userid=1</a></li>\r\n                    <li><a href=\"\"/?age=33\"\">/?age=33</a></li>\r\n                    <li><a href=\"\"/?userid=1&name=annie&isamazing=true\"\">/?userid=1&name=annie&isamazing=true&age=33</a></li>\r\n                </ul>\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/model-binding-from-query/model-binding-from-query.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/model-binding-from-route/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class GreetingParams\r\n{\r\n    public int UserId { get; set; }\r\n\r\n    public string Name { get; set; }\r\n\r\n    public bool IsAmazing { get; set; }\r\n\r\n    public short? Age { get; set; }\r\n\r\n    public override string ToString() => $\"User Id: {UserId}, Name: {Name}, Is Amazing: {IsAmazing}, Age: {Age}\";\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    string _nav = @\"\r\n           <ul>\r\n                <li><a href=\"\"/\"\">/</a></li>\r\n                <li><a href=\"\"/annie\"\">/annie</a></li>\r\n                <li><a href=\"\"/true\"\">/true</a></li>\r\n                <li><a href=\"\"/user/1\"\">/user/33</a></li>\r\n                <li><a href=\"\"/33\"\">/33</a></li>\r\n                <li><a href=\"\"/annie/true/33/1\"\">/annie/true/33/1</a></li>\r\n            </ul>\";\r\n\r\n    [HttpGet(\"\")]\r\n    public ActionResult Index([FromRoute] GreetingParams greet)\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = $@\"<html><body>\r\n                <h1>Class binding with [FromRoute]</h1>\r\n                {greet}\r\n                {_nav}\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpGet(\"{name}\")]\r\n    public ActionResult Name([FromRoute] GreetingParams greet)\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = $@\"<html><body>\r\n                <h1>Class binding with [FromRoute]</h1>\r\n                {greet}\r\n                {_nav}\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpGet(\"{isamazing:bool}\")]\r\n    public ActionResult IsAmazing([FromRoute] GreetingParams greet)\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = $@\"<html><body>\r\n                <h1>Class binding with [FromRoute]</h1>\r\n                {greet}\r\n                {_nav}\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpGet(\"/user/{userid:int}\")]\r\n    public ActionResult UserId([FromRoute] GreetingParams greet)\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = $@\"<html><body>\r\n                <h1>Class binding with [FromRoute]</h1>\r\n                {greet}\r\n                {_nav}\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpGet(\"{age:int}\")]\r\n    public ActionResult Age([FromRoute] GreetingParams greet)\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = $@\"<html><body>\r\n                <h1>Class binding with [FromRoute]</h1>\r\n                {greet}\r\n                {_nav}\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpGet(\"/{name}/{isamazing:bool}/{age:int}/{userid:int}\")]\r\n    public ActionResult All([FromRoute] GreetingParams greet)\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = $@\"<html><body>\r\n                <h1>Class binding with [FromRoute]</h1>\r\n                {greet}\r\n                {_nav}\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/model-binding-from-route/model-binding-from-route.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/mvc-infer-dependency-from-action/Program.cs",
    "content": "\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllers();\r\nbuilder.Services.AddTransient<Greetings>();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\napp.Run();\r\n\r\n\r\npublic class Greetings \r\n{\r\n    public string SayHello() => \"Hello World\";\r\n}\r\n\r\npublic class HomeController: ControllerBase\r\n{\r\n    [HttpGet(\"/\")]\r\n    public ActionResult Index(Greetings greeting)\r\n    {\r\n        var page = $@\"<html>\r\n        <body>\r\n            {greeting.SayHello()}\r\n        </body>\r\n        </html>\";\r\n\r\n        return Content(page, \"text/html\");\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/mvc-infer-dependency-from-action/README.md",
    "content": "# Infer injected services from action parameter\r\n\r\nIn previous version of ASP.NET Core you have to decorate any dependency to your action method with `[FromServices]` attribute e.g. `public ActionResult Index([FromServices] Greetings greeting)`.\r\n\r\nNow there is no need for the attribute anymore. This is enough ``public ActionResult Index(Greetings greeting)`.\r\n\r\nYou can disable this behavior by setting \r\n```csharp\r\nServices.Configure<ApiBehaviorOptions>(options =>\r\n{\r\n     options.DisableImplicitFromServicesParameters = true;\r\n})\r\n```"
  },
  {
    "path": "projects/mvc/mvc-infer-dependency-from-action/mvc-infer-dependency-from-action.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mvc/mvc-output-xml/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.Formatters;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddMvc(config =>\r\n{\r\n    config.OutputFormatters.Add(new XmlSerializerOutputFormatter());\r\n});\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class Greeting\r\n{\r\n    public bool Hello { get; set; }\r\n    public bool World { get; set; }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    [HttpGet(\"\")]\r\n    public IActionResult Index()\r\n    {\r\n        var h = new Greeting\r\n        {\r\n            Hello = true,\r\n            World = true\r\n        };\r\n\r\n        Response.ContentType = \"text/xml\";\r\n        return Ok(h);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/mvc-output-xml/mvc-output-xml.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/newtonsoft-json/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddMvc().AddNewtonsoftJson(options =>\r\n        {\r\n            options.UseMemberCasing();\r\n        });\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\napp.Run();\r\n\r\n[ApiController]\r\n[Route(\"\")]\r\npublic class HomeController : ControllerBase\r\n{\r\n    public IActionResult Index()\r\n    {\r\n        return Ok(new { Greeting = \"Hello World\" });\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/newtonsoft-json/README.md",
    "content": "# Bringing Newtonsoft.Json back \r\n\r\nIf for any reasons you need to use `Newtonsoft.Json` in your app, add `Microsoft.AspNetCore.Mvc.NewtonsoftJson` reference to your project.\r\n\r\nThis sample shows how to bring back Newtonsoft.Json and configure it."
  },
  {
    "path": "projects/mvc/newtonsoft-json/newtonsoft-json.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>newtonsoft-json</AssemblyName>\r\n\r\n    <PackageId>newtonsoft-json</PackageId>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Mvc.NewtonsoftJson\" Version=\"3.1.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/nswag/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#baadcc\",\r\n        \"activityBar.background\": \"#baadcc\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#8a6b56\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#baadcc\",\r\n        \"statusBar.background\": \"#a08eb9\",\r\n        \"statusBar.debuggingBackground\": \"#a7b98e\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#866ea5\",\r\n        \"statusBarItem.remoteBackground\": \"#a08eb9\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#a08eb9\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#a08eb999\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#a08eb9\"\r\n}"
  },
  {
    "path": "projects/mvc/nswag/Program.cs",
    "content": "using Scalar.AspNetCore;\n\nusing Microsoft.AspNetCore.Mvc;\n\nvar builder = WebApplication.CreateBuilder(args);\n\nbuilder.Services.AddOpenApi();\nbuilder.Services.AddControllers();\n\nvar app = builder.Build();\n\napp.MapOpenApi();\napp.MapScalarApiReference();\n\napp.UseStaticFiles();\n\napp.UseRouting();\n\napp.UseAuthorization();\n\napp.MapControllers();\n\napp.Run();\n\r\n\r\n[Route(\"\")]\r\n[ApiExplorerSettings(IgnoreApi = true)]\r\npublic class HomeController : ControllerBase\r\n{\r\n    [HttpGet(\"\")]\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = \"<html><body><b><a href=\\\"/swagger\\\">View API Documentation</a></b></body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n\r\n[Produces(\"application/json\")]\r\n[Route(\"api/[controller]\")]\r\n[ApiController]\r\npublic class GreetingController : ControllerBase\r\n{\r\n    public class Greeting\r\n    {\r\n        public string Message { get; set; }\r\n\r\n        public string PersonName { get; set; }\r\n\r\n        public string PersonAddressCity { get; set; }\r\n    }\r\n\r\n    /// <summary>\r\n    /// This is an API to return a \"Hello World\" message (this text comes from the Action comment)\r\n    /// </summary>\r\n    /// <response code=\"200\">The \"Hello World\" text</response>\r\n    [HttpGet(\"\")]\r\n    public ActionResult<Greeting> Index()\r\n    {\r\n        return new Greeting\r\n        {\r\n            Message = \"Hello World\"\r\n        };\r\n    }\r\n\r\n    [HttpPost(\"goodbye\")]\r\n    public ActionResult<Greeting> Goodbye(string name)\r\n    {\r\n        return new Greeting\r\n        {\r\n            Message = \"Goodbye\",\r\n            PersonName = name\r\n        };\r\n    }\r\n\r\n    [HttpPut(\"\")]\r\n    public ActionResult<Greeting> Relay(Greeting greet)\r\n    {\r\n        return greet;\r\n    }\r\n\r\n    [HttpDelete(\"greetings/{name}\")]\r\n    public ActionResult Remove(string name)\r\n    {\r\n        return Ok($\"{name} removed\");\r\n    }\r\n\r\n    [HttpPatch(\"\")]\r\n    public ActionResult<Greeting> Update(string city)\r\n    {\r\n        return new Greeting\r\n        {\r\n            Message = \"Hello World\",\r\n            PersonAddressCity = city\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/nswag/nswag.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <ImplicitUsings>true</ImplicitUsings>\n    <LangVersion>preview</LangVersion>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <NoWarn>$(NoWarn);1591</NoWarn>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" />\n    <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\n  </ItemGroup>\n</Project>\n\r\n"
  },
  {
    "path": "projects/mvc/nswag/nswag.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"nswag\", \"nswag.csproj\", \"{9D9B59D2-E313-4A59-8B11-4533F73570CC}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{9D9B59D2-E313-4A59-8B11-4533F73570CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{9D9B59D2-E313-4A59-8B11-4533F73570CC}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{9D9B59D2-E313-4A59-8B11-4533F73570CC}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{9D9B59D2-E313-4A59-8B11-4533F73570CC}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {9806BCAB-F587-4C7E-9DF2-35167F2CB511}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/mvc/nswag-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#6d0e38\",\r\n        \"activityBar.background\": \"#6d0e38\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#3a710f\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#6d0e38\",\r\n        \"statusBar.background\": \"#400821\",\r\n        \"statusBar.debuggingBackground\": \"#084027\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#6d0e38\",\r\n        \"statusBarItem.remoteBackground\": \"#400821\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#400821\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#40082199\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#400821\"\r\n}"
  },
  {
    "path": "projects/mvc/nswag-2/Program.cs",
    "content": "using Scalar.AspNetCore;\nusing Microsoft.AspNetCore.Mvc;\n\nvar builder = WebApplication.CreateBuilder();\nbuilder.Services.AddOpenApi();\nbuilder.Services.AddControllersWithViews();\n\nvar app = builder.Build();\napp.MapOpenApi();\napp.MapScalarApiReference();\napp.UseStaticFiles();\napp.MapDefaultControllerRoute();\napp.Run();\n\n\n[Route(\"\")]\n[ApiExplorerSettings(IgnoreApi = true)]\npublic class HomeController : ControllerBase\n{\n    [HttpGet(\"\")]\n    public ActionResult Index()\n    {\n        return new ContentResult\n        {\n            Content = \"<html><body><b><a href=\\\"/scalar\\\">View API Documentation</a></b></body></html>\",\n            ContentType = \"text/html\"\n        };\n    }\n}\n\n[Produces(\"application/json\")]\n[Route(\"api/[controller]\")]\n[ApiController]\n[ApiExplorerSettings()]\npublic class GreetingController : ControllerBase\n{\n    public class Greeting\n    {\n        public string Message { get; set; }\n\n        public string PersonName { get; set; }\n\n        public string PersonAddressCity { get; set; }\n    }\n\n    /// <summary>\n    /// This is an API to return a \"Hello World\" message (this text comes from the Action comment)\n    /// </summary>\n    /// <response code=\"200\">The \"Hello World\" text</response>\n    [HttpGet(\"\")]\n    [Tags(\"Basic\")]\n    public ActionResult<Greeting> Index()\n    {\n        return new Greeting\n        {\n            Message = \"Hello World\"\n        };\n    }\n\n    [HttpPost(\"goodbye\")]\n    [Tags(\"Basic\")]\n    public ActionResult<Greeting> Goodbye(string name)\n    {\n        return new Greeting\n        {\n            Message = \"Goodbye\",\n            PersonName = name\n        };\n    }\n\n    [HttpPut(\"\")]\n    [Tags(\"Intermediate\")]\n    public ActionResult<Greeting> Relay(Greeting greet)\n    {\n        return greet;\n    }\n\n    [HttpDelete(\"greetings/{name}\")]\n    [Tags(\"Intermediate\")]\n    public ActionResult Remove(string name)\n    {\n        return Ok($\"{name} removed\");\n    }\n\n    [HttpPatch(\"\")]\n    [Tags(\"Advanced\")]\n    public ActionResult<Greeting> Update(string city)\n    {\n        return new Greeting\n        {\n            Message = \"Hello World\",\n            PersonAddressCity = city\n        };\n    }\n\n    [HttpGet(\"hide/this\")]\n    [ApiExplorerSettings(IgnoreApi = true)]\n    public ActionResult HideThis()\n    {\n        return Ok(new { gretting = \"hello\" });\n    }\n\n    [HttpGet(\"hide/this2\")]\n    [ApiExplorerSettings(IgnoreApi = true)]\n    public ActionResult HideThisToo()\n    {\n        return Ok(new { gretting = \"hello\" });\n    }\n\n    [HttpGet(\"hide/fail\")]\n    public ActionResult NotHidden()\n    {\n        return Ok(new { gretting = \"hello\" });\n    }\n}\n"
  },
  {
    "path": "projects/mvc/nswag-2/README.md",
    "content": "# Built-in OpenAPI with MVC Controllers\n\nThis sample demonstrates ASP.NET Core 10's built-in OpenAPI support with MVC controllers and tags.\n\n## Key Features\n\n- No external packages required (NSwag removed)\n- OpenAPI 3.1 document generated automatically\n- XML doc comments populate API descriptions\n- Modern Scalar UI for interactive documentation\n- Demonstrates tag grouping with `[Tags(\"Category\")]` attribute\n- Shows endpoint exclusion with `[ApiExplorerSettings(IgnoreApi = true)]`\n- AOT-compatible\n\n## Running the Sample\n\n```bash\ndotnet watch run\n```\n\nNavigate to `http://localhost:5000/` to see the home page.\n\n## Viewing the Documentation\n\n- **Scalar UI:** Navigate to `/scalar`\n- **OpenAPI JSON:** Navigate to `/openapi/v1.json`\n\n## Endpoints\n\n### Basic\n- `GET /api/greeting` - Returns \"Hello World\" message\n- `POST /api/greeting/goodbye` - Returns goodbye message with name\n\n### Intermediate\n- `PUT /api/greeting` - Relays a greeting\n- `DELETE /api/greeting/greetings/{name}` - Removes a greeting\n\n### Advanced\n- `PATCH /api/greeting` - Updates greeting with city\n\n## Migration Notes\n\nThis sample was migrated from NSwag to .NET 10's built-in OpenAPI support.\n\n**Changes:**\n- Removed `NSwag.AspNetCore` and `NSwag.Annotations` package dependencies\n- Added `Microsoft.AspNetCore.OpenApi` (built-in)\n- Added `Scalar.AspNetCore` for modern UI\n- Replaced `[OpenApiTag(\"Basic\")]` with `[Tags(\"Basic\")]`\n- Replaced `[OpenApiIgnore]` with `[ApiExplorerSettings(IgnoreApi = true)]`\n- Enabled `GenerateDocumentationFile` in .csproj\n\n**Benefits:**\n- Uses built-in .NET 10 OpenAPI support\n- Cleaner tag management\n- Modern Scalar UI instead of Swagger UI\n- Better AOT compatibility\n\nSee `OUT-OF-DATE.md` for migration details.\n"
  },
  {
    "path": "projects/mvc/nswag-2/nswag-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <ImplicitUsings>true</ImplicitUsings>\n    <LangVersion>preview</LangVersion>\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\n    <NoWarn>$(NoWarn);1591</NoWarn>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" />\n    <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\n  </ItemGroup>\n</Project>\n\r\n"
  },
  {
    "path": "projects/mvc/nswag-2/nswag-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"nswag-2\", \"nswag-2.csproj\", \"{58CB82AA-EDC2-4433-9930-E61E2FF80F36}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{58CB82AA-EDC2-4433-9930-E61E2FF80F36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{58CB82AA-EDC2-4433-9930-E61E2FF80F36}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{58CB82AA-EDC2-4433-9930-E61E2FF80F36}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{58CB82AA-EDC2-4433-9930-E61E2FF80F36}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {94796678-F11D-4DAF-AF6F-3820A4772C20}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/mvc/output-formatter-syndication/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.SyndicationFeed;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddMvc(options =>\r\n{\r\n    options.OutputFormatters.Add(new RssOutputFormatter());\r\n});\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        var item = new SyndicationItem()\r\n        {\r\n            Title = \"Rss Writer Available\",\r\n            Description = \"The new Rss Writer is now available as a NuGet Package!\",\r\n            Id = \"https://www.nuget.org/packages/Microsoft.SyndicationFeed.ReaderWriter\",\r\n            Published = DateTimeOffset.UtcNow\r\n        };\r\n\r\n        item.AddCategory(new SyndicationCategory(\"Technology\"));\r\n        item.AddContributor(new SyndicationPerson(\"test\", \"test@mail.com\"));\r\n\r\n        var item2 = new SyndicationItem()\r\n        {\r\n            Title = \"We need RSS 'frame'\",\r\n            Description = \"We need a structure that hold the RSS/feed information\",\r\n            Id = \"xx\",\r\n            Published = DateTimeOffset.UtcNow\r\n        };\r\n\r\n        return Ok(new[] { item, item2 });\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/mvc/output-formatter-syndication/RssOutputFormatter.cs",
    "content": "using System.Text;\r\nusing System.Xml;\r\nusing Microsoft.AspNetCore.Mvc.Formatters;\r\nusing Microsoft.Net.Http.Headers;\r\nusing Microsoft.SyndicationFeed;\r\nusing Microsoft.SyndicationFeed.Rss;\r\n\r\npublic class RssOutputFormatter : TextOutputFormatter\r\n{\r\n    public RssOutputFormatter()\r\n    {\r\n        SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse(\"application/rss+xml\"));\r\n        SupportedEncodings.Add(Encoding.UTF8);\r\n        SupportedEncodings.Add(Encoding.Unicode);\r\n    }\r\n\r\n    protected override bool CanWriteType(Type type)\r\n    {\r\n        if (typeof(SyndicationItem).IsAssignableFrom(type) || typeof(IEnumerable<SyndicationItem>).IsAssignableFrom(type))\r\n        {\r\n            return base.CanWriteType(type);\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)\r\n    {\r\n        IServiceProvider serviceProvider = context.HttpContext.RequestServices;\r\n        var response = context.HttpContext.Response;\r\n\r\n        var sw = new StringWriterWithEncoding(selectedEncoding);\r\n\r\n        var list = new List<SyndicationItem>();\r\n\r\n        if (context.Object is SyndicationItem)\r\n        {\r\n            list.Add(context.Object as SyndicationItem);\r\n        }\r\n        else if (context.Object is IEnumerable<SyndicationItem>)\r\n        {\r\n            list.AddRange(context.Object as IEnumerable<SyndicationItem>);\r\n        }\r\n\r\n        using (XmlWriter xmlWriter = XmlWriter.Create(sw, new XmlWriterSettings() { Async = true, Indent = true }))\r\n        {\r\n            var writer = new RssFeedWriter(xmlWriter);\r\n\r\n            // Create item\r\n            foreach (var i in list)\r\n                await writer.Write(i);\r\n\r\n            xmlWriter.Flush();\r\n        }\r\n\r\n        await response.WriteAsync(sw.ToString(), selectedEncoding);\r\n    }\r\n}\r\n\r\nclass StringWriterWithEncoding : StringWriter\r\n{\r\n    private readonly Encoding _encoding;\r\n\r\n    public StringWriterWithEncoding(Encoding encoding)\r\n    {\r\n        this._encoding = encoding;\r\n    }\r\n\r\n    public override Encoding Encoding\r\n    {\r\n        get { return _encoding; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/output-formatter-syndication/output-formatter-syndication.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n    <PropertyGroup>\r\n        <TargetFramework>net10.0</TargetFramework>\r\n        <ImplicitUsings>true</ImplicitUsings>\r\n    </PropertyGroup>\r\n    <ItemGroup>\r\n        <PackageReference Include=\"Microsoft.SyndicationFeed.ReaderWriter\" Version=\"1.0.2\" />\r\n    </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/README.md",
    "content": "\r\n# Razor Class Library (3)\r\n\r\n  We are exploring Razor Class Library (RCL) functionalities in this section. RCL allows you to create reusable UI libraries.\r\n\r\n  * [Razor Class Library - Hello World](/projects/mvc/razor-class-library/razor-class-library-1)\r\n\r\n    This is the simplest example to demonstrate the functionality of RCL. The library uses Razor Pages. Go to `src/WebApplication` folder and run `dotnet watch run` to run the sample.\r\n\r\n    Thanks to [@AdrienTorris](https://twitter.com/AdrienTorris).\r\n \r\n  * [Razor Class Library - Include static files](/projects/mvc/razor-class-library/razor-class-library-with-static-files)\r\n\r\n    This is similar to previous example except now you can including static files (javascript, images, css, etc) with your RCL. Go to `src/WebApplication` folder and run `dotnet watch run` to run the sample.\r\n    \r\n    Thanks to [@AdrienTorris](https://twitter.com/AdrienTorris).\r\n\r\n  * [Razor Class Library - using Controllers and Views](/projects/mvc/razor-class-library/razor-class-library-with-controllers)\r\n\r\n    This sample demonstrates on how to use Controllers and Views in your Razor Class Library in contrast to previous examples that uses Razor Pages.\r\n    \r\n    Thanks to [@AdrienTorris](https://twitter.com/AdrienTorris).\r\n\r\ndotnet6"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-1/README.md",
    "content": "Razor Class Libraries\r\n=====================\r\n\r\n'Hello World' sample with Razor Class Libraries.\r\n\r\nList of commands to execute to create this sample from scratch:\r\n* cd /src\r\n* dotnet new razorclasslib -n RazorClassLibrary1\r\n* dotnet new razorclasslib -n RazorClassLibrary2\r\n* dotnet new web -n WebApplication\r\n* dotnet add WebApplication/WebApplication.csproj reference RazorClassLibrary1/RazorClassLibrary1.csproj RazorClassLibrary2/RazorClassLibrary2.csproj\r\n* cd RazorClassLibrary1\r\n* dotnet new page -n Index -o Areas/Module1/Pages\r\n* cd ../\r\n* cd RazorClassLibrary2\r\n* dotnet new page -n Index -o Areas/Module2/Pages"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary1/Areas/Module1/Pages/Index.cshtml",
    "content": "﻿@page\r\n@model Module1.Pages.IndexModel;\r\n@{\r\n    Layout = null;\r\n}\r\n\r\n<!DOCTYPE html>\r\n\r\n<html>\r\n<head>\r\n    <meta name=\"viewport\" content=\"width=device-width\" />\r\n    <title>Razor class library 1</title>\r\n</head>\r\n<body>\r\n    <h1>Razor class library 1</h1>\r\n    <h2>Hello world from: RazorClassLibrary1/Areas/Module1/Pages/Index.cshml</h2>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary1/Areas/Module1/Pages/Index.cshtml.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\n\r\nnamespace Module1.Pages\r\n{\r\n    public class IndexModel : PageModel\r\n    {\r\n        public void OnGet()\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary1/RazorClassLibrary1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary2/Areas/Module2/Pages/Index.cshtml",
    "content": "﻿@page\r\n@model Module2.Pages.IndexModel;\r\n@{\r\n    Layout = null;\r\n}\r\n\r\n<!DOCTYPE html>\r\n\r\n<html>\r\n<head>\r\n    <meta name=\"viewport\" content=\"width=device-width\" />\r\n    <title>Razor class library 2</title>\r\n</head>\r\n<body>\r\n    <h1>Razor class library 2</h1>\r\n    <h2>Hello world from: RazorClassLibrary2/Areas/Module1/Pages/Index.cshml</h2>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary2/Areas/Module2/Pages/Index.cshtml.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\n\r\nnamespace Module2.Pages\r\n{\r\n    public class IndexModel : PageModel\r\n    {\r\n        public void OnGet()\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary2/RazorClassLibrary2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-1/src/WebApplication/Program.cs",
    "content": "﻿var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n    \r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\n\r\napp.Run(async (context) =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n\r\n    await context.Response.WriteAsync(@\"<html>\r\n        <body>\r\n        <h1>Hello World from the Web Application!</h1>\r\n        Visit page from <a href=\"\"/module1\"\">RazorClassLibrary1</a> and <a href=\"\"/module2\"\">RazorClassLibrary2</a>.\r\n        </body>\r\n        </html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-1/src/WebApplication/WebApplication.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\RazorClassLibrary1\\RazorClassLibrary1.csproj\" />\r\n    <ProjectReference Include=\"..\\RazorClassLibrary2\\RazorClassLibrary2.csproj\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-1/src/WebApplication/appsettings.Development.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Debug\",\r\n      \"System\": \"Information\",\r\n      \"Microsoft\": \"Information\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-1/src/WebApplication/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Warning\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-controllers/README.md",
    "content": "Razor Class Libraries\r\n=====================\r\n\r\nWith Controllers and Views\r\n--------------------------\r\n\r\nList of commands to execute to build this sample from scratch:\r\n* cd /src\r\n* dotnet new razorclasslib -n RazorClassLibrary1\r\n* dotnet new web -n WebApplication\r\n* dotnet add WebApplication/WebApplication.csproj reference RazorClassLibrary1/RazorClassLibrary1.csproj"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1/Areas/MyFeature/Controllers/AboutController.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\n// For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860\r\n\r\nnamespace RazorClassLibrary1.Areas.MyFeature.Controllers\r\n{\r\n    [Area(\"MyFeature\")]\r\n\t[Route(\"[area]/about\")]\r\n    public class AboutController : Controller\r\n    {\r\n        [HttpGet]\r\n        public IActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1/Areas/MyFeature/Controllers/HomeController.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\n// For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860\r\n\r\nnamespace RazorClassLibrary1.Areas.MyFeature.Controllers\r\n{\r\n    [Area(\"MyFeature\")]\r\n    public class HomeController : Controller\r\n    {\r\n        [HttpGet]\r\n        public IActionResult Index()\r\n        {\r\n            return View();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1/Areas/MyFeature/Views/About/Index.cshtml",
    "content": "﻿@*\r\n    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860\r\n*@\r\n@{\r\n    Layout = null;\r\n}\r\n\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta name=\"viewport\" content=\"width=device-width\" />\r\n    <title>Hello world from RazorClassLibrary1</title>\r\n</head>\r\n<body>\r\n    <h1>RazorClassLibrary1 - About</h1>\r\n    <h2>Hello world from: RazorClassLibrary1/Areas/MyFeature/Views/About/Index.cshtml</h2>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1/Areas/MyFeature/Views/Home/Index.cshtml",
    "content": "﻿@*\r\n    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860\r\n*@\r\n@{\r\n    Layout = null;\r\n}\r\n\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta name=\"viewport\" content=\"width=device-width\" />\r\n    <title>Hello world from RazorClassLibrary1</title>\r\n</head>\r\n<body>\r\n    <h1>RazorClassLibrary1</h1>\r\n    <h2>Hello world from: RazorClassLibrary1/Areas/MyFeature/Views/Home/Index.cshtml</h2>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1/RazorClassLibrary1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-controllers/src/WebApplication/Program.cs",
    "content": "﻿var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllerRoute(\"areas\", \"{area}/{controller=Home}/{action=Index}/{id?}\");\r\napp.MapControllerRoute(\"default\", \"{controller=Home}/{action=Index}/{id?}\");\r\n\r\napp.Run(async (context) =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n\r\n    await context.Response.WriteAsync(@\"<html>\r\n        <body>\r\n        <h1>Razor Class Library sample with MVC structure (controllers and views)</h1>\r\n        <ul><li><a href=\"\"/MyFeature\"\">Home</a></li><li><a href=\"\"/MyFeature/About\"\">About (with attribute routing)</a></li></ul>\r\n        </body>\r\n        </html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-controllers/src/WebApplication/WebApplication.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\RazorClassLibrary1\\RazorClassLibrary1.csproj\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-controllers/src/WebApplication/appsettings.Development.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Debug\",\r\n      \"System\": \"Information\",\r\n      \"Microsoft\": \"Information\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-controllers/src/WebApplication/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Warning\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/README.md",
    "content": "Razor Class Libraries\r\n=====================\r\n\r\nWith static files serving\r\n-------------------------\r\n\r\n'Hello World' sample with Razor Class Libraries serving some static files (css, images and JavaScript files).\r\n\r\nList of commands to execute to build this sample from scratch:\r\n* cd /src\r\n* dotnet new razorclasslib -n RazorClassLibrary1\r\n* dotnet new razorclasslib -n RazorClassLibrary2\r\n* dotnet new classlib -n RazorClassLibraries.Mvc.Core\r\n* dotnet new web -n PracticalAspNetCore\r\n* dotnet add RazorClassLibrary1/RazorClassLibrary1.csproj reference RazorClassLibraries.Mvc.Core/RazorClassLibraries.Mvc.Core.csproj\r\n* dotnet add RazorClassLibrary2/RazorClassLibrary2.csproj reference RazorClassLibraries.Mvc.Core/RazorClassLibraries.Mvc.Core.csproj\r\n* dotnet add PracticalAspNetCore/PracticalAspNetCore.csproj reference RazorClassLibrary1/RazorClassLibrary1.csproj RazorClassLibrary2/RazorClassLibrary2.csproj\r\n* cd RazorClassLibrary1\r\n* dotnet new page -n Index -o Areas/Module1/Pages\r\n* cd ../\r\n* cd RazorClassLibrary2\r\n* dotnet new page -n Index -o Areas/Module2/Pages"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibraries.Mvc.Core/BaseModuleUiConfigureOptions.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.AspNetCore.StaticFiles;\r\nusing Microsoft.Extensions.FileProviders;\r\nusing Microsoft.Extensions.Options;\r\nusing System;\r\n\r\nnamespace RazorClassLibraries.Mvc\r\n{\r\n    public abstract class BaseModuleUiConfigureOptions : IPostConfigureOptions<StaticFileOptions>\r\n    {\r\n        public BaseModuleUiConfigureOptions(IWebHostEnvironment environment)\r\n        {\r\n            Environment = environment;\r\n        }\r\n\r\n        public IWebHostEnvironment Environment { get; }\r\n\r\n        public void PostConfigure(string name, StaticFileOptions options)\r\n        {\r\n            name = name ?? throw new ArgumentNullException(nameof(name));\r\n            options = options ?? throw new ArgumentNullException(nameof(options));\r\n\r\n            // Basic initialization in case the options weren't initialized by any other component\r\n            options.ContentTypeProvider = options.ContentTypeProvider ?? new FileExtensionContentTypeProvider();\r\n            if (options.FileProvider == null && Environment.WebRootFileProvider == null)\r\n            {\r\n                throw new InvalidOperationException(\"Missing FileProvider.\");\r\n            }\r\n\r\n            options.FileProvider = options.FileProvider ?? Environment.WebRootFileProvider;\r\n\r\n            var basePath = \"wwwroot\";\r\n\r\n            var filesProvider = new ManifestEmbeddedFileProvider(GetType().Assembly, basePath);\r\n            options.FileProvider = new CompositeFileProvider(options.FileProvider, filesProvider);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibraries.Mvc.Core/RazorClassLibraries.Mvc.Core.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1/Areas/Module1/Pages/Index.cshtml",
    "content": "﻿@page\r\n@model Module1.Pages.IndexModel\r\n@{\r\n    Layout = null;\r\n}\r\n\r\n<!DOCTYPE html>\r\n\r\n<html>\r\n<head>\r\n    <meta name=\"viewport\" content=\"width=device-width\" />\r\n    <title>Hello world from RazorClassLibrary1</title>\r\n   <link rel=\"stylesheet\" type=\"text/css\" href=\"/css/module1.css\" asp-append-version=\"true\"  />\r\n\r\n</head>\r\n<body>\r\n    <h1>Module 1</h1>\r\n    <h2>Hello world from: RazorClassLibrary1/Areas/Module1/Pages/Index.cshtml</h2>\r\n    <p><img src=\"~/img/microsoft-logo.png\" alt=\"\"/></p>\r\n    <p id=\"js-text-container\">[Waiting for JavaScript execution]</p>\r\n    <p class=\"colored-text\">This is a colored text.</p>\r\n    <script src=\"~/js/script.js\" asp-append-version=\"true\"></script>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1/Areas/Module1/Pages/Index.cshtml.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\n\r\nnamespace Module1.Pages\r\n{\r\n    public class IndexModel : PageModel\r\n    {\r\n        public void OnGet()\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1/RazorClassLibrary1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\r\n    <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\RazorClassLibraries.Mvc.Core\\RazorClassLibraries.Mvc.Core.csproj\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n       <PackageReference Include=\"Microsoft.Extensions.FileProviders.Embedded\" Version=\"3.1.2\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"wwwroot\\**\\*\" />\r\n    <Content Update=\"**\\*.cshtml\" Pack=\"false\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1/UiConfigureOptions.cs",
    "content": "using RazorClassLibraries.Mvc;\r\nusing Microsoft.AspNetCore.Hosting;\r\n\r\nnamespace RazorClassLibrary1\r\n{\r\n    public sealed class UiConfigureOptions : BaseModuleUiConfigureOptions\r\n    {\r\n        public UiConfigureOptions(IWebHostEnvironment environment)\r\n            : base(environment)\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1/wwwroot/css/module1.css",
    "content": "p.colored-text\r\n{\r\n\tcolor:Purple !important;\r\n}"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1/wwwroot/js/script.js",
    "content": "//alert('Hello!');\r\ndocument.getElementById('js-text-container').innerHTML = 'Welcome from JavaScript!';"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2/Areas/Module2/Pages/Index.cshtml",
    "content": "﻿@page\r\n@model Module2.Pages.IndexModel\r\n@{\r\n    Layout = null;\r\n}\r\n\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta name=\"viewport\" content=\"width=device-width\" />\r\n    <title>Hello world from RazorClassLibrary2</title>\r\n   <link rel=\"stylesheet\" type=\"text/css\" href=\"/css/module2.css\" asp-append-version=\"true\"  />\r\n</head>\r\n<body>\r\n    <h1>Module 2</h1>\r\n    <h2>Hello world from: RazorClassLibrary2/Areas/Module2/Pages/Index.cshtml</h2>\r\n    <p><img src=\"~/img/dotnet-logo.png\" alt=\"\"/></p>\r\n    <p id=\"js-text-container\">[Waiting for JavaScript execution]</p>\r\n    <p class=\"colored-text\">This is a colored text.</p>\r\n    <script src=\"~/js/script.js\" asp-append-version=\"true\"></script>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2/Areas/Module2/Pages/Index.cshtml.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\n\r\nnamespace Module2.Pages\r\n{\r\n    public class IndexModel : PageModel\r\n    {\r\n        public void OnGet()\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2/RazorClassLibrary2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\r\n    <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\RazorClassLibraries.Mvc.Core\\RazorClassLibraries.Mvc.Core.csproj\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n       <PackageReference Include=\"Microsoft.Extensions.FileProviders.Embedded\" Version=\"3.1.2\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <EmbeddedResource Include=\"wwwroot\\**\\*\" />\r\n    <Content Update=\"**\\*.cshtml\" Pack=\"false\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2/UiConfigureOptions.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\r\nusing RazorClassLibraries.Mvc;\r\n\r\nnamespace RazorClassLibrary2\r\n{\r\n    public sealed class UiConfigureOptions : BaseModuleUiConfigureOptions\r\n    {\r\n        public UiConfigureOptions(IWebHostEnvironment environment)\r\n            : base(environment)\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2/wwwroot/css/module2.css",
    "content": "p.colored-text\r\n{\r\n\tcolor:aqua !important;\r\n}"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2/wwwroot/js/script.js",
    "content": "//alert('Hello!');\r\ndocument.getElementById('js-text-container').innerHTML = 'Welcome from JavaScript!';"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/WebApplication/Program.cs",
    "content": "﻿var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.ConfigureOptions(typeof(RazorClassLibrary1.UiConfigureOptions));\r\nbuilder.Services.ConfigureOptions(typeof(RazorClassLibrary2.UiConfigureOptions));\r\n\r\nvar app = builder.Build();\r\napp.UseRouting();\r\napp.UseStaticFiles();\r\napp.MapRazorPages();\r\n\r\napp.Run(async (context) =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n\r\n    await context.Response.WriteAsync(@\"<html>\r\n        <body>\r\n        <h1>Razor Class Library sample with static files (image, css, js)</h1>\r\n        Visit page from <a href=\"\"/module1\"\">RazorClassLibrary1</a> and <a href=\"\"/module2\"\">RazorClassLibrary2</a>.\r\n        </body>\r\n        </html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/WebApplication/WebApplication.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\RazorClassLibrary1\\RazorClassLibrary1.csproj\" />\r\n    <ProjectReference Include=\"..\\RazorClassLibrary2\\RazorClassLibrary2.csproj\" />\r\n  </ItemGroup>\r\n\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/WebApplication/appsettings.Development.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Debug\",\r\n      \"System\": \"Information\",\r\n      \"Microsoft\": \"Information\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/razor-class-library/razor-class-library-with-static-files/src/WebApplication/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Warning\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/mvc/result-filestream/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    IWebHostEnvironment _env;\r\n\r\n    public HomeController(IWebHostEnvironment env)\r\n    {\r\n        _env = env;\r\n    }\r\n\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = \"<html><body><h1>Download File</h1>Download a copy of  <a href=\\\"/home/hegel\\\">Hegel (pdf)</a></body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    public FileStreamResult Hegel()\r\n    {\r\n        var pathToIdeas = System.IO.Path.Combine(_env.WebRootPath, \"hegel.pdf\");\r\n\r\n        //This is a contrite example to demonstrate returning a stream. If you have a physical file on disk, just use PhySicalFileResult that takes a path. \r\n        return new FileStreamResult(System.IO.File.OpenRead(pathToIdeas), \"application/pdf\")\r\n        {\r\n            FileDownloadName = \"hegel.pdf\"\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/result-filestream/README.md",
    "content": "# Return a FileStreamResult\r\n\r\nReturn a file to a HTTP request by returning a stream. This allows you to stream big files to browsers."
  },
  {
    "path": "projects/mvc/result-filestream/result-filestream.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>result</AssemblyName>\r\n\r\n    <PackageId>result</PackageId>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/result-json/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.Extensions.Hosting;\r\nusing System;\r\n\r\nnamespace PracticalAspNetCore\r\n{\r\n\tpublic class Startup\r\n    {\r\n\t\tpublic void ConfigureServices(IServiceCollection services)\r\n\t\t{\r\n\t\t\tservices.AddControllersWithViews();\r\n\r\n\t\t}\r\n\r\n\t\tpublic void Configure(IApplicationBuilder app)\r\n\t\t{\r\n\t\t\tapp.UseRouting();\r\n\t\t\tapp.UseEndpoints(endpoints => \r\n\t\t\t{\r\n\t\t\t\tendpoints.MapDefaultControllerRoute();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tpublic class HomeController : Controller \r\n\t{\r\n\t\tIWebHostEnvironment _env;\r\n\r\n\t\tpublic HomeController(IWebHostEnvironment env)\r\n\t\t{\r\n\t\t\t_env = env;\r\n\t\t}\r\n\t\t\r\n\t\t/// <summary>\r\n\t\t/// If you navigate to /Home/JsonPersonResult\r\n\t\t/// You'll get a JSON response.\r\n\t\t///{\"id\":\"Some guid\",\"name\":\"Jane\",\"lastName\":\"Doe\"}\r\n\t\t/// </summary>\r\n\t\tpublic JsonResult JsonPersonResult() \r\n\t\t{\r\n\t\t\tvar person = new Person\r\n\t\t\t{\r\n\t\t\t\tId = Guid.NewGuid(),\r\n\t\t\t\tName = \"Jane\",\r\n\t\t\t\tLastName = \"Doe\"\r\n\t\t\t};\r\n\t\t\treturn Json(person);\r\n\t\t}\r\n\r\n        public ActionResult Index()\r\n        {\r\n\t\t\tvar jsonData = JsonPersonResult();\r\n\r\n            return new ContentResult\r\n            {\r\n                Content = $@\"<html>\r\n\t\t\t\t\t\t\t<body>\r\n\t\t\t\t\t\t\t<a href=\"\"/Home/JsonPersonResult\"\">Click here</a> to view the endpoint with JsonResult\r\n\t\t\t\t\t\t\t</body>\r\n\t\t\t\t\t\t</html>\",\r\n                ContentType = \"text/html\"\r\n            };\r\n        }\r\n\t}\r\n\r\n\tpublic class Person \r\n\t{\r\n\t\tpublic Guid Id { get; set; }\r\n\t\tpublic string Name { get; set; }\r\n\t\tpublic string LastName { get; set; }\r\n\t}\r\n\r\n\tpublic class Program \r\n\t{\r\n\t\tpublic static void Main(string[] args)\r\n\t\t{\r\n\t\t\tCreateHostBuilder(args).Build().Run();\r\n\t\t}\r\n\r\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\r\n            Host.CreateDefaultBuilder(args)\r\n                .ConfigureWebHostDefaults(webBuilder =>\r\n                    webBuilder.UseStartup<Startup>()\r\n                );\r\n\t}\r\n}\r\n"
  },
  {
    "path": "projects/mvc/result-json/README.md",
    "content": "# Return Json\r\n\r\nMakes it easy to returns JSON content from an action.\r\n\r\nSample contributed by [genesisrrios](https://github.com/genesisrrios)."
  },
  {
    "path": "projects/mvc/result-json/result-json.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  \r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/result-physicalfile/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    IWebHostEnvironment _env;\r\n\r\n    public HomeController(IWebHostEnvironment env)\r\n    {\r\n        _env = env;\r\n    }\r\n\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = \"<html><body><h1>Download File</h1>Download a copy of  <a href=\\\"/home/hegel\\\">Hegel (pdf)</a></body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    public PhysicalFileResult Hegel()\r\n    {\r\n        var pathToIdeas = System.IO.Path.Combine(_env.WebRootPath, \"hegel.pdf\");\r\n\r\n        return new PhysicalFileResult(pathToIdeas, \"application/pdf\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/result-physicalfile/README.md",
    "content": "# Return a PhysicalFileResult\r\n\r\nReturn a file to a HTTP request by giving a path to a file in a disk to `PhysicalFileResult`. "
  },
  {
    "path": "projects/mvc/result-physicalfile/result-physicalpath.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/README.md",
    "content": "# MVC Routing (9)\r\n\r\n  We are exploring every single boring details about MVC routing in this section.\r\n\r\n  * [MVC Routing - 1](/projects/mvc/routing/routing-1)\r\n\r\n    Demonstrates fixed routing and default conventional routing for ASP.NET MVC.\r\n  \r\n  * [MVC Routing - 2](/projects/mvc/routing/routing-2)\r\n\r\n    Use `endpoints.MapDefaultControllerRoute();` to specify default convention routing for ASP.NET MVC.\r\n\r\n  * [MVC Routing - 3](/projects/mvc/routing/routing-3)\r\n\r\n    The simplest example for attribute routing. We use the `Route` attribute at the Controller. This only allows you to have one Action per Controller.\r\n\r\n  * [MVC Routing - 4](/projects/mvc/routing/routing-4)\r\n\r\n    We use the `Route` attribute at Action methods (in contrast to previous example). This allows you to have multiple Actions in a Controller.\r\n\r\n  * [MVC Routing - 5](/projects/mvc/routing/routing-5)\r\n\r\n    Demonstrate the usage of `HttpGet` and `HttpPost`.\r\n\r\n  * [MVC Routing - 6](/projects/mvc/routing/routing-6)\r\n\r\n    Demonstrate the usage of `[controller]` replacement token at the `Route` attribute.\r\n  \r\n  * [MVC Routing - 7](/projects/mvc/routing/routing-7)\r\n\r\n    Demonstrate the usage of `[controller]` and `[action]` replacement tokens at the `Route` attribute.\r\n\r\n  * [MVC Routing - 8](/projects/mvc/routing/routing-8)\r\n\r\n    Demonstrate the usage of `[action]` replacement tokens at the `HttpGet` attribute.\r\n\r\n  * [MVC Routing - 9](/projects/mvc/routing/routing-9)\r\n\r\n    Demonstrate the usage of `IActionConstraint` attribute.\r\n\r\n    The following map routing will search all HomeController.About action accross the assembly regardless of namespace. If you have multiple\r\n    HomeController.About, it will generate error because the framework cannot decide which method to use. This sample demonstrates on how using\r\n    a custom `IActionConstraint` attribute solves this problem.\r\n\r\n\r\n  dotnet6"
  },
  {
    "path": "projects/mvc/routing/routing-1/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapControllerRoute(\r\n    name: \"home\",\r\n    pattern: \"/\",\r\n    defaults: new { controller = \"Home\", action = \"Index\" });\r\n\r\napp.MapControllerRoute(\r\n    name: \"default\",\r\n    pattern: \"{controller}/{action}\",\r\n    defaults: new { controller = \"Home\", action = \"Index\" });\r\n\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <b>Hello World</b>\r\n                <br/><br/>\r\n                The following links call the same controller and action.\r\n                <ul>\r\n                    <li><a href=\"\"/\"\">/</a></li>\r\n                    <li><a href=\"\"/home\"\">/home</a></li>\r\n                    <li><a href=\"\"/home/index\"\">/home/index</a></li>\r\n                </ul>\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-1/routing-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\n\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <b>Hello World</b>\r\n                <br/><br/>\r\n                The following links call the same controller and action.\r\n                <ul>\r\n                    <li><a href=\"\"/\"\">/</a></li>\r\n                    <li><a href=\"\"/home\"\">/home</a></li>\r\n                    <li><a href=\"\"/home/index\"\">/home/index</a></li>\r\n                </ul>\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-2/routing-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n    <PropertyGroup>\r\n        <TargetFramework>net10.0</TargetFramework>\r\n        <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-3/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-3/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/routing-4.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-3/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\n\r\napp.Run();\r\n\r\n[Route(\"\")]\r\n[Route(\"Home\")]\r\n[Route(\"Home/Index\")]\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <b>Hello World</b>\r\n                <br/><br/>\r\n                The following links call the same controller and action.\r\n                <ul>\r\n                    <li><a href=\"\"/\"\">/</a></li>\r\n                    <li><a href=\"\"/home\"\">/home</a></li>\r\n                    <li><a href=\"\"/home/index\"\">/home/index</a></li>\r\n                </ul>\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-3/routing-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n    <PropertyGroup>\r\n        <TargetFramework>net10.0</TargetFramework>\r\n        <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-4/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-4/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/routing-4.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-4/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\n\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    [Route(\"\")]\r\n    [Route(\"Home\")]\r\n    [Route(\"Home/Index\")]\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <b>Hello World</b>\r\n                <br/><br/>\r\n                <ul>\r\n                    <li><a href=\"\"/\"\">/</a></li>\r\n                    <li><a href=\"\"/home\"\">/home</a></li>\r\n                    <li><a href=\"\"/home/index\"\">/home/index</a></li>\r\n                    <li><a href=\"\"/about\"\">/about</a></li>\r\n                </ul>\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [Route(\"About\")]\r\n    public ActionResult About()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <b>About Page</b>\r\n                <br/><br/>\r\n                <ul>\r\n                    <li><a href=\"\"/\"\">/</a></li>\r\n                    <li><a href=\"\"/home\"\">/home</a></li>\r\n                    <li><a href=\"\"/home/index\"\">/home/index</a></li>\r\n                </ul>\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-4/routing-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n    <PropertyGroup>\r\n        <TargetFramework>net10.0</TargetFramework>\r\n        <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-5/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-5/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/routing-4.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-5/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\n\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    [Route(\"\")]\r\n    [Route(\"Home\")]\r\n    [Route(\"Home/Index\")]\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <h1>[HttpGet] and [HttpPost]</h1>\r\n                <ul>\r\n                    <li><a href=\"\"/about\"\">/about</a></li>\r\n                </ul>\r\n\r\n                <form action=\"\"about\"\" method=\"\"post\"\">\r\n                    <button>Post About</button>\r\n                </form>\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpGet(\"About\")]\r\n    public ActionResult About()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <b>About Page - GET</b\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpPost(\"About\")]\r\n    public ActionResult About2()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <b>About Page - POST</b\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-5/routing-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n    <PropertyGroup>\r\n        <TargetFramework>net10.0</TargetFramework>\r\n        <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-6/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-6/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/routing-4.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-6/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build(); \r\n\r\napp.MapControllers();\r\napp.Run();\r\n\r\n\r\n[Route(\"[controller]\")]\r\npublic class HomeController : Controller\r\n{\r\n    [HttpGet(\"/\")]\r\n    [HttpGet(\"\")] //You have to do this otherwise /Home/Index won't work\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <h1>[controller] replacement token examples</h1>\r\n                <ul>\r\n                    <li><a href=\"\"/\"\">/</a></li>\r\n                    <li><a href=\"\"/home/\"\">/home/</a></li>\r\n                    <li><a href=\"\"/home/about\"\">/home/about</a></li>\r\n                    <li><a href=\"\"/about\"\">/about</a></li>\r\n                </ul>\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpGet(\"about\")]\r\n    public ActionResult About()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <b>About Page</b\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpGet(\"/about\")]\r\n    public ActionResult About2()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <b>About Page 2</b\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-6/routing-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n    <PropertyGroup>\r\n        <TargetFramework>net10.0</TargetFramework>\r\n        <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-7/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-7/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/routing-4.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-7/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\napp.Run();\r\n\r\n\r\n[Route(\"[controller]/[action]\")]\r\npublic class HomeController : Controller\r\n{\r\n    [HttpGet(\"/\")]\r\n    [HttpGet(\"\")]\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <h1>[controller] and [action] replacement tokens examples</h1>\r\n                <ul>\r\n                    <li><a href=\"\"/\"\">/</a></li>\r\n                    <li><a href=\"\"/home/index\"\">/home/index</a></li>\r\n                    <li><a href=\"\"/home/about\"\">/home/about</a></li>\r\n                    <li><a href=\"\"/about\"\">/about</a></li>\r\n                </ul>\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    public ActionResult About()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <b>About Page</b\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpGet(\"/about\")]\r\n    public ActionResult About2()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <b>About Page 2</b\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-7/routing-7.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n    <PropertyGroup>\r\n        <TargetFramework>net10.0</TargetFramework>\r\n        <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-8/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-8/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/routing-4.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-8/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllers();\r\napp.Run();\r\n\r\n\r\n[Route(\"[controller]/\")]\r\npublic class HomeController : Controller\r\n{\r\n    [HttpGet(\"/\")]\r\n    [HttpGet(\"\")]\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <h1>[controller] and [action] replacement tokens examples</h1>\r\n                <ul>\r\n                    <li><a href=\"\"/\"\">/</a></li>\r\n                    <li><a href=\"\"/home/\"\">/home/</a></li>\r\n                    <li><a href=\"\"/home/about\"\">/home/about</a></li>\r\n                    <li><a href=\"\"/about\"\">/about</a></li>\r\n                    <li><a href=\"\"/2/about2\"\">/2/about2</a></li>\r\n                </ul>\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpGet(\"[action]\")]\r\n    public ActionResult About()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <b>About Page using replacement token [action]</b\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n\r\n    [HttpGet(\"/about\")]\r\n    [HttpGet(\"/2/[action]\")]\r\n    public ActionResult About2()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <b>About Page 2</b\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-8/routing-8.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n    <PropertyGroup>\r\n        <TargetFramework>net10.0</TargetFramework>\r\n        <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/routing/routing-9/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-routing-2.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-9/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/routing-4.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-9/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.ActionConstraints;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapControllerRoute(\r\n    \"About\",\r\n    \"{id}/About\",\r\n    defaults: new { controller = \"Home\", Action = \"About\" }\r\n);\r\n\r\napp.Run();\r\n\r\npublic class NumberAttribute : Attribute, IActionConstraint\r\n{\r\n    private readonly int _number;\r\n\r\n    public NumberAttribute(int number)\r\n    {\r\n        _number = number;\r\n    }\r\n\r\n    public int Order\r\n    {\r\n        get\r\n        {\r\n            return 0;\r\n        }\r\n    }\r\n\r\n    public bool Accept(ActionConstraintContext context)\r\n    {\r\n        return Convert.ToInt32(context.RouteContext.RouteData.Values[\"id\"]) == _number;\r\n    }\r\n}\r\n\r\n[Route(\"[controller]/\")]\r\npublic class HomeController : Controller\r\n{\r\n    [HttpGet(\"/\")]\r\n    [HttpGet(\"\")]\r\n    public ActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n                <html><body>\r\n                <h1>Custom Routing Constraint Attribute</h1>\r\n                <ul>\r\n                    <li><a href=\"\"/\"\">/</a></li>\r\n                    <li><a href=\"\"/1/about\"\">/1/about</a></li>\r\n                    <li><a href=\"\"/2/about\"\">/2/about</a></li>\r\n                    <li><a href=\"\"/3/about\"\">/3/about</a></li>\r\n                </ul>\r\n                </body></html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n}\r\n\r\nnamespace PracticalAspNetCore.Route1\r\n{\r\n    public class HomeController : Controller\r\n    {\r\n        [Number(1)]\r\n        public ActionResult About()\r\n        {\r\n            return new ContentResult\r\n            {\r\n                Content = @\"\r\n                <html><body>\r\n                <b>About Page 1</b\r\n                </body></html>\",\r\n                ContentType = \"text/html\"\r\n            };\r\n        }\r\n    }\r\n}\r\n\r\nnamespace PracticalAspNetCore.Route2\r\n{\r\n    public class HomeController : Controller\r\n    {\r\n        [Number(2)]\r\n        public ActionResult About()\r\n        {\r\n            return new ContentResult\r\n            {\r\n                Content = @\"\r\n                <html><body>\r\n                <b>About Page 2</b\r\n                </body></html>\",\r\n                ContentType = \"text/html\"\r\n            };\r\n        }\r\n    }\r\n}\r\n\r\nnamespace PracticalAspNetCore.Route3\r\n{\r\n    public class HomeController : Controller\r\n    {\r\n        [Number(3)]\r\n        public ActionResult About()\r\n        {\r\n            return new ContentResult\r\n            {\r\n                Content = @\"\r\n                <html><body>\r\n                <b>About Page 3</b\r\n                </body></html>\",\r\n                ContentType = \"text/html\"\r\n            };\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/routing/routing-9/routing-9.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n    <PropertyGroup>\r\n        <TargetFramework>net10.0</TargetFramework>\r\n        <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/README.md",
    "content": "# Tag Helpers (5)\r\n\r\n  * [Tag Helper - Hello World](/projects/mvc/tag-helper/tag-helper-1)\r\n\r\n    This is the simplest tag helper you can do. It just prints 'hello world'.\r\n\r\n  * [Tag Helper - Alert Tag Helper](/projects/mvc/tag-helper/tag-helper-2)\r\n\r\n    Convert a message to become an alert message (bootstrap 4).\r\n\r\n  * [Tag Helper - Alert Tag Helper With Style](/projects/mvc/tag-helper/tag-helper-3)\r\n\r\n    Convert a message to become an alert message with 4 style of alerts (bootstrap 4).\r\n\r\n  * [Tag Helper - Alert Tag Helper with other enclosed Tag Helpers](/projects/mvc/tag-helper/tag-helper-4)\r\n\r\n    Demonstrate the usage of other tag helpers within the enclosure of an Alert Tag Helper.\r\n    \r\n  * [Tag Helper - Nested Alert Tag Helper](/projects/mvc/tag-helper/tag-helper-5)\r\n\r\n    Demonstrate passing values from Parent Tag to Child Tag.\r\n\r\n\r\n## Extras (2)\r\n\r\n  * [Cache Busting Tag Helper](/projects/mvc/tag-helper/tag-helper-link)\r\n\r\n    Use `asp-append-version` to your css and script link to make sure that your visitors always use the latest version of your style and script files.\r\n\r\n  * [Cache Busting Image Tag Helper](/projects/mvc/tag-helper/tag-helper-img)\r\n\r\n    Use `asp-append-version` to your images to make sure that your visitors always use the latest version of images.\r\n\r\ndotnet6\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-1/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Razor.TagHelpers;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\n[HtmlTargetElement(\"helloworld\")]\r\npublic class HelloWorld : TagHelper\r\n{\r\n    public override void Process(TagHelperContext context, TagHelperOutput output)\r\n    {\r\n        output.TagName = \"div\";\r\n        output.TagMode = TagMode.StartTagAndEndTag;\r\n        output.Content.SetContent(\"hello world from tag helper\");\r\n    }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return View(\"Index\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-1/Views/Home/Index.cshtml",
    "content": "@addTagHelper *, TagHelpers\r\n<html>\r\n    <head>\r\n        <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    </head>\r\n    <body>\r\n        <helloworld/>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-1/tag-helper.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <AssemblyName>TagHelpers</AssemblyName>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Razor.TagHelpers;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\n[HtmlTargetElement(\"alert\")]\r\npublic class HelloWorld : TagHelper\r\n{\r\n    public override void Process(TagHelperContext context, TagHelperOutput output)\r\n    {\r\n        output.TagName = \"div\";\r\n        output.TagMode = TagMode.StartTagAndEndTag;\r\n        output.Attributes.Add(\"class\", \"alert alert-warning\");\r\n    }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return View(\"Index\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-2/Views/Home/Index.cshtml",
    "content": "@addTagHelper *, TagHelpers\r\n\r\n<html>\r\n    <head>\r\n        <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    </head>\r\n    <body>\r\n        <alert>\r\n            hello Anne\r\n        </alert>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-2/tag-helper-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <AssemblyName>TagHelpers</AssemblyName>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-3/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Razor.TagHelpers;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic enum AlertType\r\n{\r\n    Success,\r\n    Warning,\r\n    Info,\r\n    Danger\r\n}\r\n\r\n[HtmlTargetElement(\"alert\")]\r\npublic class AlertHelper : TagHelper\r\n{\r\n    public AlertType Type { get; set; }\r\n\r\n    public override void Process(TagHelperContext context, TagHelperOutput output)\r\n    {\r\n        output.TagName = \"div\";\r\n        output.TagMode = TagMode.StartTagAndEndTag;\r\n        output.Attributes.Add(\"class\", $\"alert {GetAlertType()}\");\r\n    }\r\n\r\n    string GetAlertType()\r\n    {\r\n        switch (Type)\r\n        {\r\n            case AlertType.Success: return \"alert-success\";\r\n            case AlertType.Warning: return \"alert-warning\";\r\n            case AlertType.Info: return \"alert-info\";\r\n            case AlertType.Danger: return \"alert-danger\";\r\n            default: throw new System.ArgumentOutOfRangeException();\r\n        }\r\n    }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return View(\"Index\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-3/Views/Home/Index.cshtml",
    "content": "@addTagHelper *, TagHelpers\r\n\r\n<html>\r\n    <head>\r\n        <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    </head>\r\n    <body>\r\n        <alert type=\"Danger\">\r\n            Hello World Danger Style\r\n        </alert>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-3/tag-helper-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>TagHelpers</AssemblyName>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-4/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Razor.TagHelpers;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic enum AlertType\r\n{\r\n    Success,\r\n    Warning,\r\n    Info,\r\n    Danger\r\n}\r\n\r\n[HtmlTargetElement(\"hello\")]\r\npublic class HelloHelper : TagHelper\r\n{\r\n    public override void Process(TagHelperContext context, TagHelperOutput output)\r\n    {\r\n        output.TagName = \"b\";\r\n        output.TagMode = TagMode.StartTagAndEndTag;\r\n        output.Content.SetContent(\"hello\");\r\n    }\r\n\r\n}\r\n\r\n[HtmlTargetElement(\"world\")]\r\npublic class WorldHelper : TagHelper\r\n{\r\n    public override void Process(TagHelperContext context, TagHelperOutput output)\r\n    {\r\n        output.TagName = \"b\";\r\n        output.TagMode = TagMode.StartTagAndEndTag;\r\n        output.Content.SetContent(\"world\");\r\n    }\r\n\r\n}\r\n\r\n[HtmlTargetElement(\"alert\")]\r\npublic class AlertHelper : TagHelper\r\n{\r\n    public AlertType Type { get; set; }\r\n\r\n    public override void Process(TagHelperContext context, TagHelperOutput output)\r\n    {\r\n        output.TagName = \"div\";\r\n        output.TagMode = TagMode.StartTagAndEndTag;\r\n        output.Attributes.Add(\"class\", $\"alert {GetAlertType()}\");\r\n    }\r\n\r\n    string GetAlertType()\r\n    {\r\n        switch (Type)\r\n        {\r\n            case AlertType.Success: return \"alert-success\";\r\n            case AlertType.Warning: return \"alert-warning\";\r\n            case AlertType.Info: return \"alert-info\";\r\n            case AlertType.Danger: return \"alert-danger\";\r\n            default: throw new System.ArgumentOutOfRangeException();\r\n        }\r\n    }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return View(\"Index\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-4/Views/Home/Index.cshtml",
    "content": "@addTagHelper *, TagHelpers\r\n\r\n<html>\r\n<head>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\"\r\n        integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n</head>\r\n<body>\r\n    <alert type=\"Danger\">\r\n        Greeting hooman:\r\n        <hello />\r\n        <world />\r\n        <br />\r\n        <img src=\"https://api.thecatapi.com/v1/images/search?format=src&mime_types=image/gif\" />\r\n    </alert>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-4/tag-helper-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <AssemblyName>TagHelpers</AssemblyName>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-5/Program.cs",
    "content": "using Microsoft.AspNetCore.Razor.TagHelpers;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic enum AlertType\r\n{\r\n    Success,\r\n    Warning,\r\n    Info,\r\n    Danger\r\n}\r\n\r\n[HtmlTargetElement(\"danger\")]\r\npublic class DangerTagHelper : TagHelper\r\n{\r\n    public override void Init(TagHelperContext context)\r\n    {\r\n        context.Items[\"AlertType\"] = AlertType.Danger;\r\n    }\r\n}\r\n\r\n[HtmlTargetElement(\"warning\")]\r\npublic class WarningTagHelper : TagHelper\r\n{\r\n    public override void Init(TagHelperContext context)\r\n    {\r\n        context.Items[\"AlertType\"] = AlertType.Warning;\r\n    }\r\n}\r\n\r\n[HtmlTargetElement(\"alert\")]\r\npublic class AlertHelper : TagHelper\r\n{\r\n    AlertType _type { get; set; } = AlertType.Info;\r\n\r\n    public override void Init(TagHelperContext context)\r\n    {\r\n        if (context.Items.ContainsKey(\"AlertType\"))\r\n        {\r\n            _type = (AlertType)context.Items[\"AlertType\"];\r\n        }\r\n    }\r\n\r\n    public override void Process(TagHelperContext context, TagHelperOutput output)\r\n    {\r\n        output.TagName = \"div\";\r\n        output.TagMode = TagMode.StartTagAndEndTag;\r\n        output.Attributes.Add(\"class\", $\"alert {GetAlertType()}\");\r\n    }\r\n\r\n    string GetAlertType()\r\n    {\r\n        switch (_type)\r\n        {\r\n            case AlertType.Success: return \"alert-success\";\r\n            case AlertType.Warning: return \"alert-warning\";\r\n            case AlertType.Info: return \"alert-info\";\r\n            case AlertType.Danger: return \"alert-danger\";\r\n            default: throw new System.ArgumentOutOfRangeException();\r\n        }\r\n    }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return View(\"Index\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-5/Views/Home/Index.cshtml",
    "content": "@addTagHelper *, TagHelpers\r\n\r\n<html>\r\n\r\n<head>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\"\r\n        integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n</head>\r\n\r\n<body>\r\n    <alert>\r\n        Info Alert\r\n        <img src=\"https://api.thecatapi.com/v1/images/search?format=src&mime_types=image/gif\" />\r\n    </alert>\r\n\r\n    <danger>\r\n        <alert>\r\n            Danger Alert\r\n            <img src=\"https://api.thecatapi.com/v1/images/search?format=src&mime_types=image/gif\" />\r\n        </alert>\r\n    </danger>\r\n    <warning>\r\n        <alert>\r\n            You can pass data from 'parent' tag to child tag. Unfortunately you cannot pass data from child tag to\r\n            parent.\r\n        </alert>\r\n    </warning>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-5/tag-helper-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <AssemblyName>TagHelpers</AssemblyName>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-img/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return View();\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-img/Views/Home/Index.cshtml",
    "content": "@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n<html>\r\n    <head>\r\n             <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    </head>\r\n    <body>\r\n        <h1>Cache Busting</h1>\r\n        View the source of this page and see how the image file contains extra string other than just /kitty.png. Everytime you update your image, the links will change which force your browser to download your images.\r\n\r\n        <img src=\"/kitty.png\" asp-append-version=\"true\" />\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-img/tag-helper-img.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-link/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index()\r\n    {\r\n        return View();\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-link/Views/Home/Index.cshtml",
    "content": "@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n<html>\r\n    <head>\r\n             <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n   \r\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\" asp-append-version=\"true\" />\r\n    </head>\r\n\r\n    <body>\r\n        <h1>Cache Busting</h1>\r\n        View the source of this page and see how the stylesheet and js links are generated by the tag helper. Everytime you update your files, the links will change which force your browser to download your latest version of CSS/Javascript.\r\n\r\n        <script type=\"text/javascript\" src=\"hello.js\" asp-append-version=\"true\"></script>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-link/tag-helper-link.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <AssemblyName>TagHelpers</AssemblyName>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-link/wwwroot/hello.js",
    "content": "alert('hello world');"
  },
  {
    "path": "projects/mvc/tag-helper/tag-helper-link/wwwroot/style.css",
    "content": ""
  },
  {
    "path": "projects/mvc/view-component/README.md",
    "content": "# View Component (4)\r\n\r\n  We are exploring everything about ViewComponent in this section.\r\n\r\n  * [ View Component - Hello world](/projects/mvc/view-component/view-component-1)\r\n\r\n    This is the simplest sample of a `ViewComponent` that accept parameters. As you can see, the file for the `ViewComponent` class can be located anywhere. \r\n\r\n    From the [doc](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-2.2#view-search-path) \r\n    \r\n    > The runtime searches for the view in the following paths:\r\n\r\n    > * /Pages/Components/{View Component Name}/{View Name}\r\n    > * /Views/{Controller Name}/Components/{View Component Name}/{View Name}\r\n    > * /Views/Shared/Components/{View Component Name}/{View Name}\r\n    \r\n    > We recommend you name the view file Default.cshtml... \r\n\r\n    So you will find the code for this `HelloWorldViewComponent` at `/Views/Shared/Components/HelloWorld/HelloWorld.cs` and the view at `/Views/Shared/Components/HelloWorld/Default.cshtml`.\r\n\r\n  * [ View Component - Alternative Declaration](/projects/mvc/view-component/view-component-2)\r\n\r\n    This sample is the same as previous sample except the use of Tag Helper invocation. Use `@addTagHelper *, <AssemblyName>` to enable the invocation of view component as a Tag Helper. Pascal-cased view component class and properties are translated into their lower kebab case. \r\n\r\n  * [ View Component - Return View Component result directly from a controller](/projects/mvc/view-component/view-component-3)\r\n\r\n    This sample shows how to return the output of a View Component directly from a controller. Don't forget that your `_Layout.cshtml` won't be used here. It will just return whatever your View Component is producing.\r\n\r\n  * [ View Component - Passing complex object as parameter](/projects/mvc/view-component/view-component-4)\r\n\r\n    This sample shows you how to pass complex object to the View Component.\r\n\r\n    dotnet6"
  },
  {
    "path": "projects/mvc/view-component/view-component-1/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index() =>\r\n        ViewComponent(\"HelloWorld\", new { message = \"Hello World\", times = 10 });\r\n}\r\n"
  },
  {
    "path": "projects/mvc/view-component/view-component-1/Views/Home/Index.cshtml",
    "content": "<html>\r\n<body>\r\n\r\n@await Component.InvokeAsync(\"HelloWorld\", new { message = \"Hello World Dear\", times = 3})\r\n\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/mvc/view-component/view-component-1/Views/Shared/Components/HelloWorld/Default.cshtml",
    "content": "@model Greeting\r\n\r\n@for(var x = 0; x < Model.Repeat; x++)\r\n{\r\n    <h1>@Model.Message</h1>\r\n}\r\n"
  },
  {
    "path": "projects/mvc/view-component/view-component-1/Views/Shared/Components/HelloWorld/HelloWorld.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\npublic class Greeting\r\n{\r\n    public string Message { get; set; }\r\n\r\n    public int Repeat { get; set; }\r\n}\r\n\r\npublic class HelloWorldViewComponent : ViewComponent\r\n{\r\n    public IViewComponentResult Invoke(string message, int times)\r\n    {\r\n        return View(new Greeting { Message = message, Repeat = times });\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/view-component/view-component-1/view-component.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/view-component/view-component-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index() => View();\r\n}\r\n\r\n"
  },
  {
    "path": "projects/mvc/view-component/view-component-2/Views/Home/Index.cshtml",
    "content": "@addTagHelper *, view-component-2\r\n<html>\r\n<body>\r\n<vc:hello-world message=\"Hello World Dear\" times=\"3\"></vc:hello-world>\r\n\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/mvc/view-component/view-component-2/Views/Shared/Components/HelloWorld/Default.cshtml",
    "content": "@model Greeting\r\n\r\n@for(var x = 0; x < Model.Repeat; x++)\r\n{\r\n    <h1>@Model.Message</h1>\r\n}\r\n"
  },
  {
    "path": "projects/mvc/view-component/view-component-2/Views/Shared/Components/HelloWorld/HelloWorld.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Threading.Tasks;\r\n\r\npublic class Greeting\r\n{\r\n    public string Message { get; set; }\r\n\r\n    public int Repeat { get; set; }\r\n}\r\n\r\npublic class HelloWorldViewComponent : ViewComponent\r\n{\r\n    public IViewComponentResult Invoke(string message, int times)\r\n    {\r\n        return View(new Greeting { Message = message, Repeat = times });\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/view-component/view-component-2/view-component-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/view-component/view-component-3/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index() => View();\r\n}\r\n"
  },
  {
    "path": "projects/mvc/view-component/view-component-3/Views/Home/Index.cshtml",
    "content": "@addTagHelper *, view-component-3\r\n<html>\r\n<body>\r\n<vc:hello-world message=\"Hello World Dear\" times=\"3\"></vc:hello-world>\r\n\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/mvc/view-component/view-component-3/Views/Shared/Components/HelloWorld/Default.cshtml",
    "content": "@model Greeting\r\n\r\n@for(var x = 0; x < Model.Repeat; x++)\r\n{\r\n    <h1>@Model.Message</h1>\r\n}\r\n"
  },
  {
    "path": "projects/mvc/view-component/view-component-3/Views/Shared/Components/HelloWorld/HelloWorld.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Threading.Tasks;\r\n\r\npublic class Greeting\r\n{\r\n    public string Message { get; set; }\r\n\r\n    public int Repeat { get; set; }\r\n}\r\n\r\npublic class HelloWorldViewComponent : ViewComponent\r\n{\r\n    public async Task<IViewComponentResult> InvokeAsync(string message, int times)\r\n    {\r\n        return View(new Greeting { Message = message, Repeat = times });\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/view-component/view-component-3/view-component-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/mvc/view-component/view-component-4/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n\r\npublic class RepeatMessage\r\n{\r\n    public string Content { get; set; }\r\n\r\n    public int Repeat { get; set; }\r\n}\r\n\r\npublic class HomeController : Controller\r\n{\r\n    public ActionResult Index() => View();\r\n}\r\n\r\n"
  },
  {
    "path": "projects/mvc/view-component/view-component-4/Views/Home/Index.cshtml",
    "content": "@addTagHelper *, view-component-4\r\n\r\n@{\r\n    var msg = new RepeatMessage\r\n    {\r\n        Content = \"Hello World\",\r\n        Repeat = 5\r\n    };\r\n}\r\n<html>\r\n<body>\r\n<vc:hello-world message=\"msg\"></vc:hello-world>\r\n\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/mvc/view-component/view-component-4/Views/Shared/Components/HelloWorld/Default.cshtml",
    "content": "@model PracticalAspNetCore.Greeting\r\n\r\n@for(var x = 0; x < Model.Repeat; x++)\r\n{\r\n    <h1>@Model.Message</h1>\r\n}\r\n"
  },
  {
    "path": "projects/mvc/view-component/view-component-4/Views/Shared/Components/HelloWorld/HelloWorld.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace PracticalAspNetCore\r\n{\r\n    public class Greeting\r\n    {\r\n        public string Message { get; set; }\r\n\r\n        public int Repeat { get; set; }\r\n    }\r\n\r\n    public class HelloWorldViewComponent : ViewComponent\r\n    {\r\n        public IViewComponentResult Invoke(RepeatMessage message)\r\n        {\r\n            return View(new Greeting { Message = message.Content, Repeat = message.Repeat });\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/mvc/view-component/view-component-4/view-component-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/net10/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#8dbaeb\",\r\n        \"activityBar.background\": \"#8dbaeb\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#d9267c\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#8dbaeb\",\r\n        \"statusBar.background\": \"#61a0e4\",\r\n        \"statusBar.debuggingBackground\": \"#e4a561\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#3586dd\",\r\n        \"statusBarItem.remoteBackground\": \"#61a0e4\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#61a0e4\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#61a0e499\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    }\r\n}"
  },
  {
    "path": "projects/net10/README.md",
    "content": "# ASP.NET Core 10 (12)\r\n\r\nThese samples require SDK [10.0.100](https://dotnet.microsoft.com/en-us/download/dotnet/10.0)\r\n\r\n- [dotnet run](dotnet-run)\r\n\r\n  This is a sample code on how you can build an ASP.NET Core application using the new .NET 10 project-less `dotnet run xxx.cs` functionality.\r\n\r\n- [open-api-8](open-api-8)\r\n\r\n  This sample shows how to populate OpenAPI document with metadata from XML doc comments on methods, class, and members.\r\n\r\n- [open-api-9](open-api-9)\r\n\r\n  This sample shows how to generate OpenAPI documentation YAML format.\r\n\r\n- [open-api-10](open-api-10)\r\n\r\n  This sample shows how to populate OpenAPI document responses information with XML doc comment `response` element.\r\n\r\n- [open-api-11](open-api-11)\r\n\r\n  This sample shows how to populate OpenAPI document response 200 information with XML doc comment `returns` element.\r\n\r\n- [redirect-http-result-is-local-url](redirect-http-result-is-local-url)\r\n\r\n  This sample how to use `RedirectHttpResult.IsLocalUrl` to detect if a URL is local.\r\n\r\n- [sse-2](sse-2)\r\n\r\n  Use `Results.ServerSentEvents` to return Server Side Events on Minimal API.\r\n\r\n- [sse-3](sse-3)\r\n\r\n  Use `Results.ServerSentEvents` to return Server Side Events with Event Type on Minimal API.\r\n\r\n- [sse-4](sse-4)\r\n\r\n  Use `Results.ServerSentEvents` to return Server Side Events with mixed events on Minimal API.\r\n\r\n\r\n## Validation\r\n\r\n- [validation-1](validation-1)\r\n\r\n  This example shows how the to validate complex object bound with the route via `[AsParameter]` attribute.\r\n\r\n- [validation-2](validation-2)\r\n\r\n  This time we implement `IValidatableObject` to implement custom validation logic. \r\n\r\n- [validation-3](validation-3)\r\n  \r\n  This is a demo that show how built-in validation works in [FromForm] scenario but it can't really be used in a straight HTML serving scenario because right now there is no way to obtain the validation results."
  },
  {
    "path": "projects/net10/build.bat",
    "content": "dotnet build open-api-8\r\ndotnet build open-api-9\r\ndotnet build open-api-10\r\ndotnet build open-api-11\r\ndotnet build redirect-http-result-is-local-url\r\ndotnet build sse-2\r\ndotnet build sse-3\r\ndotnet build sse-4\r\ndotnet build validation-1\r\ndotnet build validation-2\r\ndotnet build validation-3\r\n"
  },
  {
    "path": "projects/net10/build.sh",
    "content": "#!/bin/bash\ndotnet build open-api-8\ndotnet build open-api-9\ndotnet build open-api-10\ndotnet build open-api-11\ndotnet build redirect-http-result-is-local-url\ndotnet build sse-2\ndotnet build sse-3\ndotnet build sse-4\ndotnet build validation-1\ndotnet build validation-2\ndotnet build validation-3\n"
  },
  {
    "path": "projects/net10/dotnet-run/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#88ef57\",\r\n        \"activityBar.background\": \"#88ef57\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#5083ee\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#88ef57\",\r\n        \"statusBar.background\": \"#67eb28\",\r\n        \"statusBar.debuggingBackground\": \"#ac28eb\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#4fcd13\",\r\n        \"statusBarItem.remoteBackground\": \"#67eb28\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#67eb28\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#67eb2899\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#67eb28\"\r\n}"
  },
  {
    "path": "projects/net10/dotnet-run/Program.cs",
    "content": "#:sdk Microsoft.NET.Sdk.Web\r\n#:package markdig@0.41.1\r\nusing Markdig;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nvar app = builder.Build();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var content = \"\"\"\r\n    This is a project-less **ASP.NET Core** web application.\r\n    \"\"\";\r\n\r\n    return Results.Content($\"\"\"\r\n    <html><body>{Markdown.ToHtml(content)}</body></html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/net10/dotnet-run/README.md",
    "content": "# dotnet run program.cs\r\n\r\nThis is a sample code on how you can build an ASP.NET Core application using the new .NET 10 project-less `dotnet run xxx.cs` functionality.\r\n\r\nYou can see more about this latest feature here https://www.youtube.com/watch?v=98MizuB7i-w.\r\n\r\nGo to command line and type `dotnet run .\\Program.cs` and voilla. `dotnet watch` is not working on this project-less mode."
  },
  {
    "path": "projects/net10/global.json",
    "content": "{\r\n  \"sdk\": {\r\n    \"version\": \"10.0.100\",\r\n    \"rollForward\": \"major\"\r\n  }\r\n}"
  },
  {
    "path": "projects/net10/open-api-10/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/net10/open-api-10/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.HttpResults;\r\nusing Scalar.AspNetCore;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddOpenApi();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapOpenApi();\r\napp.MapScalarApiReference();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n    <html>\r\n    <body>\r\n        <h1>OpenAPI JSON document - use response XML comment tag to annotate API</h1>\r\n        <ul>\r\n            <li>\r\n                You can check the generated OpenAPI document <a href=\"/openapi/v1.json\">here</a>.\r\n            </li>\r\n            <li>\r\n                You can check the Scalar UI <a href=\"/scalar\">here</a>.\r\n            </li>\r\n    </body>\r\n    </html>\r\n    \"\"\";\r\n\r\n    return TypedResults.Content(html, \"text/html\");\r\n}).ExcludeFromDescription(); //This is not an API endpoint\r\n\r\napp.MapGet(\"/hello/{name}\",  Hello);\r\n\r\napp.Run();\r\n\r\n\r\nstatic partial class Program\r\n{\r\n    ///<summary>\r\n    /// Returns a greeting message\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// This is a sample endpoint that returns a greeting message.\r\n    /// </remarks>\r\n    /// <response code=\"200\">Returns a greeting message</response>\r\n    /// <response code=\"500\">Show error message</response>\r\n    /// <param name=\"name\">The name of the person to greet</param>\r\n    public static Results<Ok<string>, InternalServerError<string>> Hello(string name)\r\n    {\r\n        try\r\n        {\r\n            return TypedResults.Ok($\"Hello, {name}\");\r\n        }\r\n        catch\r\n        {\r\n            return TypedResults.InternalServerError(\"An error occurred while processing your request.\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/net10/open-api-10/README.md",
    "content": "# Populate XML doc comments into OpenAPI document \r\n\r\nThis sample shows how to populate OpenAPI document with metadata from XML doc comments on methods, class, and members.\r\n\r\n- ```<summary></summary>``` corresponds to `summary` in OpenAPI.\r\n- ```<remark></remark>``` corresponds to `description` in OpenAPI.\r\n- ```<param name=\"name\">``` corresponds to `parameters[].description` in OpenAPI.\r\n- ```<response code=\"200\"></response>``` corresponds to `responses.200.description` in OpenAPI.\r\n- ```<response code=\"500\"></response>``` corresponds to `responses.500.description` in OpenAPI.\r\n\r\nWe are using [Scalar](https://scalar.com/) as the API interface."
  },
  {
    "path": "projects/net10/open-api-10/open-api-10.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/net10/open-api-10/open-api-10.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"open-api-10\", \"open-api-10.csproj\", \"{5777E22C-D52B-6F05-FE3D-B9E5E8868896}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{5777E22C-D52B-6F05-FE3D-B9E5E8868896}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{5777E22C-D52B-6F05-FE3D-B9E5E8868896}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{5777E22C-D52B-6F05-FE3D-B9E5E8868896}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{5777E22C-D52B-6F05-FE3D-B9E5E8868896}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {038990B5-F6AA-4D55-BE0C-521ED3A5ACD5}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/net10/open-api-11/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/net10/open-api-11/Program.cs",
    "content": "using Scalar.AspNetCore;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddOpenApi();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapOpenApi();\r\napp.MapScalarApiReference();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n    <html>\r\n    <body>\r\n        <h1>OpenAPI JSON document - use return XML comment tag to annotate API</h1>\r\n        <ul>\r\n            <li>\r\n                You can check the generated OpenAPI document <a href=\"/openapi/v1.json\">here</a>.\r\n            </li>\r\n            <li>\r\n                You can check the Scalar UI <a href=\"/scalar\">here</a>.\r\n            </li>\r\n    </body>\r\n    </html>\r\n    \"\"\";\r\n\r\n    return TypedResults.Content(html, \"text/html\");\r\n}).ExcludeFromDescription(); //This is not an API endpoint\r\n\r\napp.MapGet(\"/hello/{name}\",  Hello);\r\n\r\napp.Run();\r\n\r\n\r\nstatic partial class Program\r\n{\r\n    ///<summary>\r\n    /// Returns a greeting message\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// This is a sample endpoint that returns a greeting message.\r\n    /// </remarks>\r\n    /// <param name=\"name\">The name of the person to greet</param>\r\n    /// <returns>Greeting string message</returns>\r\n    public static string Hello(string name)\r\n    {\r\n        return $\"Hello, {name}\";\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/net10/open-api-11/README.md",
    "content": "# Populate XML doc comments into OpenAPI document\r\n\r\nThis sample shows how to populate OpenAPI document with metadata from XML doc comments on methods, class, and members.\r\n\r\n- ```<summary></summary>``` corresponds to `summary` in OpenAPI.\r\n- ```<remark></remark>``` corresponds to `description` in OpenAPI.\r\n- ```<param name=\"name\">``` corresponds to `parameters[].description` in OpenAPI.\r\n- ```<returns><returns>``` corresponds to `responses.200.description` in OpenAPI.\r\n\r\nWe are using [Scalar](https://scalar.com/) as the API interface."
  },
  {
    "path": "projects/net10/open-api-11/open-api-11.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/net10/open-api-11/open-api-11.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"open-api-11\", \"open-api-11.csproj\", \"{ADF7EEA9-1A47-9C69-8D96-A24FE3E64CD7}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{ADF7EEA9-1A47-9C69-8D96-A24FE3E64CD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{ADF7EEA9-1A47-9C69-8D96-A24FE3E64CD7}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{ADF7EEA9-1A47-9C69-8D96-A24FE3E64CD7}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{ADF7EEA9-1A47-9C69-8D96-A24FE3E64CD7}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {488EEBE8-DFCD-4639-880B-50EE5D2789A1}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/net10/open-api-8/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/net10/open-api-8/Program.cs",
    "content": "using Scalar.AspNetCore;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddOpenApi();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapOpenApi();\r\napp.MapScalarApiReference();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n    <html>\r\n    <body>\r\n        <h1>OpenAPI JSON document</h1>\r\n        <ul>\r\n            <li>\r\n                You can check the generated OpenAPI document <a href=\"/openapi/v1.json\">here</a>.\r\n            </li>\r\n            <li>\r\n                You can check the Scalar UI <a href=\"/scalar\">here</a>.\r\n            </li>\r\n    </body>\r\n    </html>\r\n    \"\"\";\r\n\r\n    return TypedResults.Content(html, \"text/html\");\r\n}).ExcludeFromDescription(); //This is not an API endpoint\r\n\r\napp.MapGet(\"/hello/{name}\",  Hello);\r\n\r\napp.Run();\r\n\r\n\r\nstatic partial class Program\r\n{\r\n    ///<summary>\r\n    /// Returns a greeting message\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// This is a sample endpoint that returns a greeting message.\r\n    /// </remarks>\r\n    /// <param name=\"name\">The name of the person to greet</param>\r\n    public static string Hello(string name)\r\n    {\r\n        return $\"Hello, {name}\";\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/net10/open-api-8/README.md",
    "content": "# Populate XML doc comments into OpenAPI document\r\n\r\nThis sample shows how to populate OpenAPI document with metadata from XML doc comments on methods, class, and members.\r\n\r\n- ```<summary></summary>``` corresponds to `summary` in OpenAPI.\r\n- ```<remark></remark>``` corresponds to `description` in OpenAPI.\r\n- ```<param name=\"name\">``` corresponds to `parameters[].description` in OpenAPI.\r\n\r\nWe are using [Scalar](https://scalar.com/) as the API interface."
  },
  {
    "path": "projects/net10/open-api-8/open-api-8.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"Scalar.AspNetCore\" Version=\"2.1.13\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/net10/open-api-8/open-api-8.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"open-api-8\", \"open-api-8.csproj\", \"{94A2B487-3A87-D5EC-A7AE-3EA833B3961F}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{94A2B487-3A87-D5EC-A7AE-3EA833B3961F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{94A2B487-3A87-D5EC-A7AE-3EA833B3961F}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{94A2B487-3A87-D5EC-A7AE-3EA833B3961F}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{94A2B487-3A87-D5EC-A7AE-3EA833B3961F}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {527EDA78-4C86-4F88-B6B9-A567EE04C7C4}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/net10/open-api-9/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/net10/open-api-9/Program.cs",
    "content": "using Microsoft.Extensions.Options;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddOpenApi();\r\nbuilder.Services.AddOpenApiDocument();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapOpenApi(\"/openapi/{documentName}.json\");\r\napp.MapOpenApi(\"/openapi/{documentName}.yaml\");\r\n\r\napp.UseSwaggerUi(options =>\r\n{\r\n    options.DocumentPath = \"/openapi/{documentName}.yaml\";\r\n});\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n    <html>\r\n    <body>\r\n        <h1>OpenAPI JSON/YAML documents</h1>\r\n        <ul>\r\n            <li>\r\n                You can check the generated OpenAPI document in JSON <a href=\"/openapi/v1.json\">here</a>.\r\n            </li>\r\n            <li>\r\n                The OpenAPI document is also available in YAML format <a href=\"/openapi/v1.yaml\">here</a>.\r\n            </li>\r\n            <li>\r\n                You can check the Swagger UI <a href=\"/swagger/index.html\">here</a>.\r\n            </li>\r\n        </ul>\r\n    </body>\r\n    </html>\r\n    \"\"\";\r\n\r\n    return TypedResults.Content(html, \"text/html\");\r\n}).ExcludeFromDescription(); //This is not an API endpoint\r\n\r\napp.MapGet(\"/hello/{name}\",  Hello);\r\n\r\napp.Run();\r\n\r\n\r\nstatic partial class Program\r\n{\r\n    ///<summary>\r\n    /// Returns a greeting message\r\n    /// </summary>\r\n    /// <remarks>\r\n    /// This is a sample endpoint that returns a greeting message.\r\n    /// </remarks>\r\n    /// <param name=\"name\">The name of the person to greet</param>\r\n    public static string Hello(string name)\r\n    {\r\n        return $\"Hello, {name}\";\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/net10/open-api-9/README.md",
    "content": "# OpenAPI in Yaml\r\n\r\nThis sample shows how to generate OpenAPI documentation YAML format."
  },
  {
    "path": "projects/net10/open-api-9/open-api-9.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.5.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/net10/open-api-9/open-api-9.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"open-api-9\", \"open-api-9.csproj\", \"{BC072E34-D8AB-295D-3EBD-703BB465FB9D}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BC072E34-D8AB-295D-3EBD-703BB465FB9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BC072E34-D8AB-295D-3EBD-703BB465FB9D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BC072E34-D8AB-295D-3EBD-703BB465FB9D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BC072E34-D8AB-295D-3EBD-703BB465FB9D}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {241D2B4C-8BC7-4171-8986-A0994F48440B}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/net10/redirect-http-result-is-local-url/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/net10/redirect-http-result-is-local-url/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.HttpResults;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = $$\"\"\"\r\n    <html>\r\n    <body>\r\n        <h1>RedirectHttpResult.IsLocalUrl</h1>\r\n        <ul>\r\n            <li>https://www.cnn.com - {{ RedirectHttpResult.IsLocalUrl(\"https://www.cnn.com\")}}</li>\r\n            <li>/about - {{ RedirectHttpResult.IsLocalUrl(\"/about\")}}</li>\r\n            <li>~/ - {{ RedirectHttpResult.IsLocalUrl(\"~/\")}}</li>\r\n    </body>\r\n    </html>\r\n    \"\"\";\r\n\r\n    return TypedResults.Content(html, \"text/html\");\r\n}).ExcludeFromDescription(); //This is not an API endpoint\r\n\r\napp.Run();"
  },
  {
    "path": "projects/net10/redirect-http-result-is-local-url/README.md",
    "content": "# Detect if URL is local using RedirectHttpResult.IsLocalUrl\r\n\r\n\r\n`RedirectHttpResult.IsLocalUrl` is useful for validating url to prevent open redirection attack."
  },
  {
    "path": "projects/net10/redirect-http-result-is-local-url/redirect-http-result-is-local-url.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/net10/redirect-http-result-is-local-url/redirect-http-result-is-local-url.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"redirect-http-result-is-local-url\", \"redirect-http-result-is-local-url.csproj\", \"{A68C33B4-9131-44E9-2073-799049203E17}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{A68C33B4-9131-44E9-2073-799049203E17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A68C33B4-9131-44E9-2073-799049203E17}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A68C33B4-9131-44E9-2073-799049203E17}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A68C33B4-9131-44E9-2073-799049203E17}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {093F0EFD-9AB8-4271-A48D-B4A8ACD4F7AA}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/net10/sse-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/net10/sse-2/Program.cs",
    "content": "using System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/sse\", (HttpContext context, CancellationToken cancellationToken) =>\r\n{\r\n    async IAsyncEnumerable<string> CounterAsync([EnumeratorCancellation] CancellationToken cancellationToken)\r\n    {\r\n        int count = 0;\r\n        while (true && !cancellationToken.IsCancellationRequested)\r\n        {\r\n            yield return $\"hello world {++count}\";\r\n            await Task.Delay(3000, cancellationToken);\r\n        }\r\n    }\r\n\r\n    if (context.Request.Headers[\"Accept\"] == \"text/event-stream\")\r\n    {\r\n        return Results.ServerSentEvents(CounterAsync(cancellationToken), \"greeting\");\r\n    }\r\n    else\r\n    {\r\n        return Results.BadRequest(\"Unsupported Accept header. Use 'text/event-stream'.\");\r\n    }\r\n});\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync(@\"\r\n    <html>\r\n        <head>\r\n        </head>\r\n        <body>\r\n            <h1>SSE</h1>\r\n            <ul id=\"\"list\"\"></ul>\r\n            <script>\r\n                console.log('Connecting to SSE...');\r\n                var source = new EventSource('/sse');\r\n                source.onopen = function(event) {\r\n                    console.log('Connection opened:', event);\r\n                };\r\n                source.onmessage = function(e) {\r\n                    var item = document.createElement('li');\r\n                    item.textContent = e.data;\r\n                    list.appendChild(item);\r\n                };\r\n                source.onerror = function(event){\r\n                    console.log(event);\r\n                };\r\n            </script>\r\n        </body>\r\n    </html>\r\n    \");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/net10/sse-2/README.md",
    "content": "# SSE support on Minimal API\r\n\r\nUse `Results.ServerSentEvents` to return Server Side Events on Minimal API."
  },
  {
    "path": "projects/net10/sse-2/sse-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/net10/sse-2/sse-2.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"sse-2\", \"sse-2.csproj\", \"{58FABA0E-A574-B3E4-60BD-102EED691FB2}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{58FABA0E-A574-B3E4-60BD-102EED691FB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{58FABA0E-A574-B3E4-60BD-102EED691FB2}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{58FABA0E-A574-B3E4-60BD-102EED691FB2}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{58FABA0E-A574-B3E4-60BD-102EED691FB2}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {3D94113F-1718-4D8E-96F9-212FDCB8A8BD}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/net10/sse-3/Program.cs",
    "content": "using System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/sse\", (HttpContext context, CancellationToken cancellationToken) =>\r\n{\r\n    async IAsyncEnumerable<string> GreetingsAsync([EnumeratorCancellation] CancellationToken cancellationToken)\r\n    {\r\n        int count = 0;\r\n        while (true && !cancellationToken.IsCancellationRequested)\r\n        {\r\n            yield return $\"hello world {++count}\";\r\n            await Task.Delay(3000, cancellationToken);\r\n        }\r\n    }\r\n\r\n    if (context.Request.Headers.Accept == \"text/event-stream\")\r\n    {\r\n        return Results.ServerSentEvents(GreetingsAsync(cancellationToken), eventType: \"greeting\");\r\n    }\r\n    else\r\n    {\r\n        return Results.BadRequest(\"Unsupported Accept header. Use 'text/event-stream'.\");\r\n    }\r\n});\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync(\"\"\"\r\n    <html>\r\n    <head>\r\n        <meta charset=\"utf-8\">\r\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n        <title>Bootstrap demo</title>\r\n        <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.5/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-SgOJa3DmI69IUzQ2PVdRZhwQ+dy64/BUtbMJw1MZ8t5HZApcHrRKUc4W0kG879m7\" crossorigin=\"anonymous\">\r\n    </head>\r\n        <body>\r\n            <h1>SSE</h1>\r\n            <div class=\"row\">\r\n                <div class=\"col-md-6\">            \r\n                    <ul id=\"list\"></ul>\r\n                </div>\r\n                <div class=\"col-md-6\">\r\n                    <ul id=\"greetings\"></ul>\r\n                </div>\r\n            </div>\r\n            <script>\r\n                console.log('Connecting to SSE...');\r\n                var source = new EventSource('/sse');\r\n                source.onopen = function(event) {\r\n                    console.log('Connection opened:', event);\r\n                };\r\n\r\n                source.addEventListener('greeting', function(e){\r\n                    var item = document.createElement('li');\r\n                    item.textContent = e.data;\r\n                    const greetings = document.getElementById(\"greetings\");\r\n                    greetings.appendChild(item);\r\n                });\r\n\r\n                source.onerror = function(event){\r\n                    console.log(event);\r\n                };\r\n            </script>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/net10/sse-3/README.md",
    "content": "# SSE support on Minimal API with event type \r\n\r\nUse `Results.ServerSentEvents` to return Server Side Events with event type on Minimal API."
  },
  {
    "path": "projects/net10/sse-3/sse-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/net10/sse-3/sse-3.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"sse-3\", \"sse-3.csproj\", \"{D7CCEBA8-80AA-E7FD-FCBE-C6CBA55C4671}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{D7CCEBA8-80AA-E7FD-FCBE-C6CBA55C4671}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D7CCEBA8-80AA-E7FD-FCBE-C6CBA55C4671}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D7CCEBA8-80AA-E7FD-FCBE-C6CBA55C4671}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D7CCEBA8-80AA-E7FD-FCBE-C6CBA55C4671}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {023E918C-DF48-45CE-BAAE-7792232835EF}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/net10/sse-4/Program.cs",
    "content": "using System.Net.ServerSentEvents;\r\nusing System.Runtime.CompilerServices;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/sse\", (HttpContext context, CancellationToken cancellationToken) =>\r\n{\r\n    async IAsyncEnumerable<SseItem<string>> GetEventsAsync([EnumeratorCancellation] CancellationToken cancellationToken)\r\n    {\r\n        int count = 0;\r\n        while (true && !cancellationToken.IsCancellationRequested)\r\n        {\r\n            yield return new SseItem<string>($\"hello world {++count}\", \"greeting\");\r\n            yield return new SseItem<string>($\"{DateTime.UtcNow}\");\r\n            await Task.Delay(3000, cancellationToken);\r\n        }\r\n    }\r\n\r\n    if (context.Request.Headers.Accept == \"text/event-stream\")\r\n    {\r\n        return Results.ServerSentEvents(GetEventsAsync(cancellationToken));\r\n    }\r\n    else\r\n    {\r\n        return Results.BadRequest(\"Unsupported Accept header. Use 'text/event-stream'.\");\r\n    }\r\n});\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    await context.Response.WriteAsync(\"\"\"\r\n    <html>\r\n    <head>\r\n        <meta charset=\"utf-8\">\r\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n        <title>Bootstrap demo</title>\r\n        <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.5/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-SgOJa3DmI69IUzQ2PVdRZhwQ+dy64/BUtbMJw1MZ8t5HZApcHrRKUc4W0kG879m7\" crossorigin=\"anonymous\">\r\n    </head>\r\n        <body>\r\n            <h1>SSE</h1>\r\n            <div class=\"row\">\r\n                <div class=\"col-md-6\">            \r\n                    <ul id=\"list\"></ul>\r\n                </div>\r\n                <div class=\"col-md-6\">\r\n                    <ul id=\"greetings\"></ul>\r\n                </div>\r\n            </div>\r\n            <script>\r\n                console.log('Connecting to SSE...');\r\n                var source = new EventSource('/sse');\r\n                source.onopen = function(event) {\r\n                    console.log('Connection opened:', event);\r\n                };\r\n\r\n                source.onmessage = function(e){\r\n                    var item = document.createElement('li');\r\n                    item.textContent = e.data;\r\n                    const list = document.getElementById(\"list\");\r\n                    list.appendChild(item);\r\n                };\r\n\r\n                source.addEventListener('greeting', function(e){\r\n                    var item = document.createElement('li');\r\n                    item.textContent = e.data;\r\n                    const greetings = document.getElementById(\"greetings\");\r\n                    greetings.appendChild(item);\r\n                });\r\n\r\n                source.onerror = function(event){\r\n                    console.log(event);\r\n                };\r\n            </script>\r\n        </body>\r\n    </html>\r\n    \"\"\");\r\n});\r\n \r\napp.Run();\r\n"
  },
  {
    "path": "projects/net10/sse-4/README.md",
    "content": "# SSE support on Minimal API with mixed events \r\n\r\nUse `Results.ServerSentEvents` to return Server Side Events with mixed events on Minimal API."
  },
  {
    "path": "projects/net10/sse-4/sse-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"10.0.0-preview.2.*\" GeneratePathProperty=\"true\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/net10/sse-4/sse-4.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"sse-4\", \"sse-4.csproj\", \"{7F33450F-EE98-14DE-94CF-03A2B26B62C6}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{7F33450F-EE98-14DE-94CF-03A2B26B62C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{7F33450F-EE98-14DE-94CF-03A2B26B62C6}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{7F33450F-EE98-14DE-94CF-03A2B26B62C6}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{7F33450F-EE98-14DE-94CF-03A2B26B62C6}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {CFF4467F-5F29-4825-AC27-2E7A56314DF2}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/net10/validation-1/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/net10/validation-1/Program.cs",
    "content": "using System.ComponentModel.DataAnnotations;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddValidation();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n    <html>\r\n    <body>\r\n        <h1>Validation on Route Parameters</h1>\r\n        <ul>\r\n            <li><a href=\"/validate/John/25\">Valid Route</a></li>\r\n            <li><a href=\"/validate/J/25\">Invalid Route (Name too short)</a></li>\r\n            <li><a href=\"/validate/Jonathan-Brand/25\">Invalid Route (Name too long)</a></li>\r\n            <li><a href=\"/validate/John/150\">Invalid Route (Age out of range)</a></li>\r\n        </ul>\r\n    </body>\r\n    </html>\r\n    \"\"\";\r\n\r\n    return TypedResults.Content(html, \"text/html\");\r\n}); //This is not an API endpoint\r\n\r\napp.MapGet(\"/validate/{name}/{age}\", ([AsParameters]RouteInput input) =>\r\n{\r\n    return TypedResults.Ok(input);\r\n});\r\n\r\napp.Run();\r\n\r\npublic class RouteInput \r\n{\r\n    [Required, MinLength(3), MaxLength(10)]\r\n    public string Name { get; set; } = string.Empty;\r\n\r\n    [Required, Range(1, 100)]\r\n    public int Age { get; set; } = 1;\r\n}"
  },
  {
    "path": "projects/net10/validation-1/README.md",
    "content": "# Validation on Minimal API based on route parameter bound to complex object\r\n\r\nThis example shows how the to validate complex object bound with the route via `[AsParameter]` attribute."
  },
  {
    "path": "projects/net10/validation-1/validation-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <InterceptorsNamespaces>$(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated</InterceptorsNamespaces>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/net10/validation-1/validation-1.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"validation-1\", \"validation-1.csproj\", \"{F3976B81-B0F6-E251-B5BB-9B07B562C7BE}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{F3976B81-B0F6-E251-B5BB-9B07B562C7BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{F3976B81-B0F6-E251-B5BB-9B07B562C7BE}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{F3976B81-B0F6-E251-B5BB-9B07B562C7BE}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F3976B81-B0F6-E251-B5BB-9B07B562C7BE}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {956BA410-4910-45D3-9AD5-4AAA7D872FDE}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/net10/validation-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/net10/validation-2/Program.cs",
    "content": "using System.ComponentModel.DataAnnotations;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddValidation();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n    <html>\r\n    <body>\r\n        <h1>Validation on Route Parameters</h1>\r\n        <ul>\r\n            <li><a href=\"/validate/John/25\">Valid Route</a></li>\r\n            <li><a href=\"/validate/Jonathan-Brand/51\">Invalid Route</a></li>\r\n        </ul>\r\n    </body>\r\n    </html>\r\n    \"\"\";\r\n\r\n    return TypedResults.Content(html, \"text/html\");\r\n}); //This is not an API endpoint\r\n\r\napp.MapGet(\"/validate/{name}/{age}\", ([AsParameters]RouteInput input) =>\r\n{\r\n    return TypedResults.Ok(input);\r\n});\r\n\r\napp.Run();\r\n\r\npublic class RouteInput : IValidatableObject \r\n{\r\n    [Required]\r\n    public string Name { get; set; } = string.Empty;\r\n\r\n    [Required]\r\n    public int Age { get; set; } = 1;\r\n\r\n    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)\r\n    {\r\n        if (Name.Length > 10)\r\n        {\r\n            if (Age > 50)\r\n                yield return new ValidationResult(\"Age must be less than 50 when name is longer than 10 characters\", [nameof(Age)]);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/net10/validation-2/README.md",
    "content": "# Validation on Minimal API based on route parameter bound to complex object implementing IValidatableObject\r\n\r\nThis example shows how the to validate complex object bound with the route via `[AsParameter]` attribute. We will implement `IValidatableObject` interface to implement custom validation."
  },
  {
    "path": "projects/net10/validation-2/validation-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <InterceptorsNamespaces>$(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated</InterceptorsNamespaces>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/net10/validation-2/validation-2.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"validation-2\", \"validation-2.csproj\", \"{2BB8C121-4760-587D-ABA0-5A5EC9D9F574}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{2BB8C121-4760-587D-ABA0-5A5EC9D9F574}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{2BB8C121-4760-587D-ABA0-5A5EC9D9F574}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{2BB8C121-4760-587D-ABA0-5A5EC9D9F574}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{2BB8C121-4760-587D-ABA0-5A5EC9D9F574}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {295B2FCB-659B-47FE-B894-D95199AE81AE}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/net10/validation-3/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/net10/validation-3/Program.cs",
    "content": "using System.ComponentModel.DataAnnotations;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddValidation();\r\nbuilder.Services.AddAntiforgery();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", (IAntiforgery token, HttpContext context) =>\r\n{\r\n    var html = $\"\"\"\r\n    <html>\r\n    <head>\r\n        <meta charset=\"utf-8\">\r\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n        <meta name=\"color-scheme\" content=\"light dark\">\r\n        <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css\">\r\n    </head>\r\n    <body>\r\n        <main class=\"container\">\r\n        <h1>Server side validation</h1>\r\n        <p>This is just a demo that show how built-in validation works in [FromForm] scenario but it can't really be used\r\n        in a straight HTML serving scenario because right now there is no way to obtain the validation results.</p>\r\n        <form method=\"post\" action=\"/validate\">\r\n            <input type=\"hidden\" name=\"__RequestVerificationToken\" value=\"{token.GetAndStoreTokens(context).RequestToken}\" />\r\n            <fieldset>\r\n                <legend>Person Information</legend>\r\n                \r\n                <label for=\"name\">Name:</label>\r\n                <input type=\"text\" id=\"name\" name=\"name\" placeholder=\"Enter your name\">\r\n                <small>Name must be between 2 and 50 characters</small>\r\n                \r\n                <label for=\"email\">Email:</label>\r\n                <input type=\"email\" id=\"email\" name=\"email\" placeholder=\"Enter your email\">\r\n                <small>Must be a valid email address</small>\r\n                \r\n                <label for=\"age\">Age:</label>\r\n                <input type=\"number\" id=\"age\" name=\"age\" placeholder=\"Enter your age\">\r\n                <small>Age must be between 18 and 120</small>\r\n                \r\n                <button type=\"submit\">Submit</button>\r\n            </fieldset>\r\n        </form>\r\n        </main>\r\n    </body>\r\n    </html>\r\n    \"\"\";\r\n\r\n    return TypedResults.Content(html, \"text/html\");\r\n}); \r\n\r\napp.MapPost(\"/validate\", async ([FromForm]PersonInput input, IAntiforgery antiforgery, HttpContext context) =>\r\n{\r\n    await antiforgery.ValidateRequestAsync(context);\r\n\r\n    return TypedResults.Ok(new\r\n    {\r\n        Message = \"Validation successful!\",\r\n        Data = input\r\n    });\r\n});\r\n\r\napp.UseAntiforgery();\r\napp.Run();\r\n\r\npublic class PersonInput \r\n{\r\n    [Required]\r\n    [StringLength(50, MinimumLength = 2)]\r\n    public string Name { get; set; } = string.Empty;\r\n\r\n    [Required]\r\n    [EmailAddress]\r\n    public string Email { get; set; } = string.Empty;\r\n\r\n    [Required]\r\n    [Range(18, 120)]\r\n    public int? Age { get; set; }\r\n}"
  },
  {
    "path": "projects/net10/validation-3/README.md",
    "content": "# Form Validation on Minimal API\r\n\r\nThis is a demo that show how built-in validation works in [FromForm] scenario but it can't really be used in a straight HTML serving scenario because right now there is no way to obtain the validation results."
  },
  {
    "path": "projects/net10/validation-3/validation-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <GenerateDocumentationFile>true</GenerateDocumentationFile>\r\n    <InterceptorsNamespaces>$(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated</InterceptorsNamespaces>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/net10/validation-3/validation-3.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.2.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"validation-3\", \"validation-3.csproj\", \"{3CF277BB-0ACC-7A24-F195-C5B250AD5EA0}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{3CF277BB-0ACC-7A24-F195-C5B250AD5EA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{3CF277BB-0ACC-7A24-F195-C5B250AD5EA0}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{3CF277BB-0ACC-7A24-F195-C5B250AD5EA0}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{3CF277BB-0ACC-7A24-F195-C5B250AD5EA0}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {2A28F5E2-1F5E-4078-9011-593119965BF7}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/net9/README.md",
    "content": "# ASP.NET Core 9 (3)\r\n\r\nThese samples require SDK [9.0.100](https://dotnet.microsoft.com/en-us/download/dotnet/9.0)\r\n\r\n* [TypedResults.InternalServerError](typed-results-2)\r\n\r\n  This example shows how to return HTTP Status 500 using `TypedResults.InternalServerError`.\r\n\r\n* [Built in OpenAPI generator](open-api-3)\r\n\r\n  This example shows how to use the built in support for generating OpenAPI document. In the previous version of ASP.NET Core you have to rely third party packages such as [NSwag](https://github.com/RicoSuter/NSwag) to do so.\r\n\r\n* [Use NSWag to visualize built-in OpenAPI generator](open-api-4)\r\n\r\n  This example shows how to use [NSwag](https://github.com/RicoSuter/NSwag) UI to visualize the built-in OpenAPI generator."
  },
  {
    "path": "projects/net9/build.bat",
    "content": "dotnet build open-api-3\r\ndotnet build open-api-4\r\ndotnet build typed-results-2"
  },
  {
    "path": "projects/net9/build.sh",
    "content": "#!/bin/bash\ndotnet build open-api-3\ndotnet build open-api-4\ndotnet build typed-results-2\n"
  },
  {
    "path": "projects/net9/global.json",
    "content": "{\r\n  \"sdk\": {\r\n    \"version\": \"9.0.100\",\r\n    \"rollForward\": \"major\"\r\n  }\r\n}"
  },
  {
    "path": "projects/net9/open-api-3/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/net9/open-api-3/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddOpenApi();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapOpenApi();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n    <html>\r\n    <body>\r\n        <h1>OpenAPI JSON document</h1>\r\n        You can check the generated OpenAPI document <a href=\"/openapi/v1.json\">here</a>.\r\n    </body>\r\n    </html>\r\n    \"\"\";\r\n\r\n    return TypedResults.Content(html, \"text/html\");\r\n}).ExcludeFromDescription(); //This is not an API endpoint\r\n\r\napp.MapGet(\"/hello/{name}\", (string name) => $\"Hello {name}\"!);\r\n\r\napp.Run();"
  },
  {
    "path": "projects/net9/open-api-3/README.md",
    "content": "# OpenAPI Document Generator\r\n\r\nThis example shows how to use the built in support for generating OpenAPI document. In the previous version of ASP.NET Core you have to rely third party packages such as [NSwag](https://github.com/RicoSuter/NSwag) to do so.\r\n\r\nYou can see that we use `.ExcludeFromDescription();` to exclude `MapGet(\"\\\")` from being described in the generated OpenAPI document."
  },
  {
    "path": "projects/net9/open-api-3/open-api-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"9.0.0-preview.5.24306.11\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/net9/open-api-3/open-api-3.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"open-api-3\", \"open-api-3.csproj\", \"{A79A546B-8EB4-4C66-AE67-6BF3A3D55CFC}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{A79A546B-8EB4-4C66-AE67-6BF3A3D55CFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A79A546B-8EB4-4C66-AE67-6BF3A3D55CFC}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A79A546B-8EB4-4C66-AE67-6BF3A3D55CFC}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A79A546B-8EB4-4C66-AE67-6BF3A3D55CFC}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {597645EA-4A9D-49D3-80A0-EA3CFA04E687}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/net9/open-api-4/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/net9/open-api-4/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddOpenApi();\r\nbuilder.Services.AddOpenApiDocument();\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapOpenApi();\r\n\r\napp.UseSwaggerUi(options =>\r\n{\r\n    options.DocumentPath = \"/openapi/{documentName}.json\";\r\n});\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n    <html>\r\n    <body>\r\n        <h1>OpenAPI JSON document</h1>\r\n        <ul>\r\n            <li>\r\n                You can check the generated OpenAPI document <a href=\"/openapi/v1.json\">here</a>.\r\n            </li>\r\n            <li>\r\n                You can check the Swagger UI <a href=\"/swagger/index.html\">here</a>.\r\n            </li>\r\n    </body>\r\n    </html>\r\n    \"\"\";\r\n\r\n    return TypedResults.Content(html, \"text/html\");\r\n}).ExcludeFromDescription(); //This is not an API endpoint\r\n\r\napp.MapGet(\"/hello/{name}\", (string name) => $\"Hello {name}\"!);\r\n\r\napp.Run();"
  },
  {
    "path": "projects/net9/open-api-4/README.md",
    "content": "# Use NSWag to visualize the built-in OpenAPI generator\r\n\r\nThis example shows how to use [NSwag](https://github.com/RicoSuter/NSwag) UI to visualize the built-in OpenAPI generator."
  },
  {
    "path": "projects/net9/open-api-4/open-api-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.OpenApi\" Version=\"9.0.0-preview.5.24306.11\" />\r\n    <PackageReference Include=\"NSwag.AspNetCore\" Version=\"14.0.8\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/net9/open-api-4/open-api-4.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"open-api-4\", \"open-api-4.csproj\", \"{18F274F2-BD7D-4164-846B-E6A1373D665B}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{18F274F2-BD7D-4164-846B-E6A1373D665B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{18F274F2-BD7D-4164-846B-E6A1373D665B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{18F274F2-BD7D-4164-846B-E6A1373D665B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{18F274F2-BD7D-4164-846B-E6A1373D665B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {6C439372-8D1E-4F3C-BD19-2AA2F74094E1}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/net9/typed-results-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#b1a853\",\r\n        \"activityBar.background\": \"#b1a853\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e9f5f4\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#b1a853\",\r\n        \"statusBar.background\": \"#908841\",\r\n        \"statusBar.debuggingBackground\": \"#414990\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#6d6731\",\r\n        \"statusBarItem.remoteBackground\": \"#908841\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#908841\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#90884199\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#908841\"\r\n}"
  },
  {
    "path": "projects/net9/typed-results-2/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", () => TypedResults.InternalServerError(\"Something is wrong with the server.\"));\r\n\r\napp.Run();"
  },
  {
    "path": "projects/net9/typed-results-2/README.md",
    "content": "# TypeResults.InternalServerError\r\n\r\n[TypeResults](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.typedresults?view=aspnetcore-8.0) added `TypeResults.InternalServerError` on top of existing HTTP statuses supported by the class. "
  },
  {
    "path": "projects/net9/typed-results-2/typed-results-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/net9/typed-results-2/typed-results-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"typed-results-2\", \"typed-results-2.csproj\", \"{765B8E83-FA40-4D3D-BA9B-03E75FF371EA}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{765B8E83-FA40-4D3D-BA9B-03E75FF371EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{765B8E83-FA40-4D3D-BA9B-03E75FF371EA}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{765B8E83-FA40-4D3D-BA9B-03E75FF371EA}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{765B8E83-FA40-4D3D-BA9B-03E75FF371EA}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {E1B576F2-2AC7-49E9-839E-88E98D533F3A}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/open-telemetry/Readme.md",
    "content": "# Open Telemetry (3)\r\n\r\n* [Open Telemetry 1](/projects/open-telemetry/open-telemetry-1)\r\n  \r\n  In this example we setup a basic Open Telemetry Tracing and show it to the console. We also add a service name to the trace. \r\n\r\n* [Open Telemetry 2](/projects/open-telemetry/open-telemetry-2)\r\n  \r\n  In this example we will set up an Open Telemetry span and record **events** to it. \r\n\r\n* [Open Telemetry 3](/projects/open-telemetry/open-telemetry-3)\r\n  \r\n  In this example we will set up an Open Telemetry span and record **attributes** to it. \r\n\r\n  "
  },
  {
    "path": "projects/open-telemetry/build.bat",
    "content": "dotnet build open-telemetry-1\r\ndotnet build open-telemetry-2\r\ndotnet build open-telemetry-3\r\ndotnet build open-telemetry-4"
  },
  {
    "path": "projects/open-telemetry/build.sh",
    "content": "#!/bin/bash\ndotnet build open-telemetry-1\ndotnet build open-telemetry-2\ndotnet build open-telemetry-3\ndotnet build open-telemetry-4\n"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-1/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#add061\",\r\n        \"activityBar.background\": \"#add061\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#3386ac\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#add061\",\r\n        \"statusBar.background\": \"#98c43a\",\r\n        \"statusBar.debuggingBackground\": \"#663ac4\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#799d2e\",\r\n        \"statusBarItem.remoteBackground\": \"#98c43a\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#98c43a\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#98c43a99\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#98c43a\"\r\n}"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-1/Program.cs",
    "content": "using System.Diagnostics;\r\nusing OpenTelemetry.Trace;\r\nusing OpenTelemetry.Resources;\r\nusing OpenTelemetry.Exporter;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nbuilder.Services.AddOpenTelemetry().WithTracing((b) =>\r\n{\r\n     b.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(builder.Environment.ApplicationName))\r\n     .AddAspNetCoreInstrumentation()\r\n     .AddConsoleExporter( options => options.Targets = ConsoleExporterOutputTargets.Console);\r\n});\r\n\r\nWebApplication app = builder.Build();\r\napp.Run(async context =>\r\n{\r\n    var traceId = Activity.Current?.TraceId;\r\n    await context.Response.WriteAsync($\"Trace Id {traceId}\");\r\n});\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-1/Readme.md",
    "content": "# Basic Open Telemetry\r\n\r\nIn this example we setup a basic Open Telemetry Tracing and show it to the console. We also add a service name to the trace. "
  },
  {
    "path": "projects/open-telemetry/open-telemetry-1/open-telemetry-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OpenTelemetry.Exporter.Console\" Version=\"1.8.0\" />\r\n    <PackageReference Include=\"OpenTelemetry.Extensions.Hosting\" Version=\"1.8.0\" />\r\n    <PackageReference Include=\"OpenTelemetry.Instrumentation.AspNetCore\" Version=\"1.8.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-1/open-telemetry-1.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"open-telemetry-1\", \"open-telemetry-1.csproj\", \"{17D67DD5-1DEC-4530-A7BE-A47F81614738}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{17D67DD5-1DEC-4530-A7BE-A47F81614738}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{17D67DD5-1DEC-4530-A7BE-A47F81614738}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{17D67DD5-1DEC-4530-A7BE-A47F81614738}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{17D67DD5-1DEC-4530-A7BE-A47F81614738}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {90D1951A-D6D2-45D4-8B31-F3EF13549C80}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#5dc2ed\",\r\n        \"activityBar.background\": \"#5dc2ed\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#e619a9\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#5dc2ed\",\r\n        \"statusBar.background\": \"#2fb1e8\",\r\n        \"statusBar.debuggingBackground\": \"#e8662f\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#1797cd\",\r\n        \"statusBarItem.remoteBackground\": \"#2fb1e8\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#2fb1e8\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#2fb1e899\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#2fb1e8\"\r\n}"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-2/Program.cs",
    "content": "using System.Diagnostics;\r\n\r\nusing OpenTelemetry.Trace;\r\nusing OpenTelemetry.Resources;\r\nusing OpenTelemetry.Exporter;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddOpenTelemetry().WithTracing(b =>\r\n{\r\n    b\r\n     .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(builder.Environment.ApplicationName))\r\n     .AddAspNetCoreInstrumentation()\r\n     .AddConsoleExporter( options => options.Targets = ConsoleExporterOutputTargets.Console);\r\n});\r\n\r\nWebApplication app = builder.Build();\r\napp.Run(async context =>\r\n{\r\n    if (context.Request.Path == \"/\")\r\n    {\r\n        await Task.Delay(2000);\r\n        Activity.Current?.AddEvent(new ActivityEvent(\"Getting trace id\"));\r\n        var traceId = Activity.Current?.TraceId;\r\n        await context.Response.WriteAsync($\"Trace Id {traceId}\");\r\n        Activity.Current?.AddEvent(new ActivityEvent(\"After showing trace id\"));\r\n\r\n        await Task.Delay(2000);\r\n        await context.Response.WriteAsync($\"\\nHello World\");\r\n        Activity.Current?.AddEvent(new ActivityEvent(\"After showing hello world\"));\r\n    }\r\n});\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-2/Readme.md",
    "content": "# Record events into a current OTel span\r\n\r\nUse existing ASP.NET Core OTel span to record events.\r\n\r\n```\r\nActivity.TraceId:          5e1f4ddfeecde7b52a3d7823fd2256a3\r\nActivity.SpanId:           442681a750f843b8\r\nActivity.TraceFlags:           Recorded\r\nActivity.ActivitySourceName: OpenTelemetry.Instrumentation.AspNetCore\r\nActivity.DisplayName: /\r\nActivity.Kind:        Server\r\nActivity.StartTime:   2022-06-21T08:01:16.0231599Z\r\nActivity.Duration:    00:00:04.0263921\r\nActivity.Tags:\r\n    http.host: localhost:5000\r\n    http.method: GET\r\n    http.target: /\r\n    http.url: http://localhost:5000/\r\n    http.user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0\r\n    http.status_code: 200\r\n   StatusCode : UNSET\r\nActivity.Events:\r\n    Getting trace id [6/21/2022 8:01:18 AM +00:00]\r\n    After showing trace id [6/21/2022 8:01:18 AM +00:00]\r\n    After showing hello world [6/21/2022 8:01:20 AM +00:00]\r\nResource associated with Activity:\r\n    service.name: open-telemetry-2\r\n    service.instance.id: 49c0f853-4ba3-4920-b2d5-6c1147c40402\r\n```"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-2/open-telemetry-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OpenTelemetry.Exporter.Console\" Version=\"1.8.0\" />\r\n    <PackageReference Include=\"OpenTelemetry.Extensions.Hosting\" Version=\"1.8.0\" />\r\n    <PackageReference Include=\"OpenTelemetry.Instrumentation.AspNetCore\" Version=\"1.8.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-2/open-telemetry-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"open-telemetry-2\", \"open-telemetry-2.csproj\", \"{AEF8372A-0385-4CEF-B191-0695E8FD9741}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{AEF8372A-0385-4CEF-B191-0695E8FD9741}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{AEF8372A-0385-4CEF-B191-0695E8FD9741}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{AEF8372A-0385-4CEF-B191-0695E8FD9741}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{AEF8372A-0385-4CEF-B191-0695E8FD9741}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {E8C62603-08A4-4C12-A6B2-7EFFC856DD4B}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-3/Program.cs",
    "content": "using System.Diagnostics;\r\n\r\nusing OpenTelemetry.Trace;\r\nusing OpenTelemetry.Resources;\r\nusing OpenTelemetry.Exporter;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddOpenTelemetry().WithTracing(b =>\r\n{\r\n    b.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(builder.Environment.ApplicationName))\r\n     .AddAspNetCoreInstrumentation()\r\n     .AddConsoleExporter( options => options.Targets = ConsoleExporterOutputTargets.Console);\r\n});\r\n\r\nWebApplication app = builder.Build();\r\napp.Run(async context =>\r\n{\r\n    if (context.Request.Path == \"/\")\r\n    {\r\n        await Task.Delay(2000);\r\n        Activity.Current?.SetTag(\"project\", \"practical-aspnetcore\");\r\n        Activity.Current?.SetTag(\"location\", \"Cairo\");\r\n        var traceId = Activity.Current?.TraceId;\r\n        await context.Response.WriteAsync($\"Trace Id {traceId}\");\r\n        await Task.Delay(2000);\r\n        await context.Response.WriteAsync($\"\\nHello World\");\r\n    }\r\n});\r\n\r\nawait app.RunAsync();"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-3/Readme.md",
    "content": "# Record OTel attributes \r\n\r\nRecord OTel attributes into a current span.\r\n\r\n```\r\nActivity.TraceId:          d96b296d7783e5f1f17dcdb0c476e0b9\r\nActivity.SpanId:           6f57ceb582a36727\r\nActivity.TraceFlags:           Recorded\r\nActivity.ActivitySourceName: OpenTelemetry.Instrumentation.AspNetCore\r\nActivity.DisplayName: /\r\nActivity.Kind:        Server\r\nActivity.StartTime:   2022-06-23T08:17:01.8251609Z\r\nActivity.Duration:    00:00:04.2195936\r\nActivity.Tags:\r\n    http.host: localhost:5000\r\n    http.method: GET\r\n    http.target: /\r\n    http.url: http://localhost:5000/\r\n    http.user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0\r\n    project: practical-aspnetcore\r\n    location: Cairo\r\n    http.status_code: 200\r\n   StatusCode : UNSET\r\nResource associated with Activity:\r\n    service.name: open-telemetry-3\r\n    service.instance.id: 2fed6f53-4558-4878-a1b8-fcdbd626a087\r\n```"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-3/open-telemetry-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OpenTelemetry.Exporter.Console\" Version=\"1.8.0\" />\r\n    <PackageReference Include=\"OpenTelemetry.Extensions.Hosting\" Version=\"1.8.0\" />\r\n    <PackageReference Include=\"OpenTelemetry.Instrumentation.AspNetCore\" Version=\"1.8.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-4/Program.cs",
    "content": "using System.Diagnostics;\r\nusing OpenTelemetry.Trace;\r\nusing OpenTelemetry.Resources;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddOpenTelemetry().WithTracing(b =>\r\n{\r\n    b.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(builder.Environment.ApplicationName))\r\n     .AddHttpClientInstrumentation();\r\n});\r\n\r\nbuilder.Services.AddHttpClient();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information);\r\n\r\nWebApplication app = builder.Build();\r\napp.MapGet(\"/\", async (HttpRequest request, IHttpClientFactory clientFactory) =>\r\n{\r\n        Activity.Current?.AddBaggage (\"project\", \"practical-aspnetcore\");\r\n        Activity.Current?.AddBaggage (\"location\", \"Cairo\");\r\n\r\n        var baggage = string.Join(\",\", Activity.Current.Baggage.ToDictionary(b => b.Key, b => b.Value).Select(x => x.Key + \"=\" + x.Value));  \r\n\r\n        var client = clientFactory.CreateClient();\r\n        //client.DefaultRequestHeaders.Add(\"baggage\", baggage);\r\n\r\n        var url = request.Scheme + \"://\" + request.Host + \"/baggage\";\r\n        app.Logger.LogInformation(\"REQUEST URL \" + url);\r\n        var response = await client.GetAsync(url);\r\n\r\n        return Results.Text(\"Check the log\", \"text/plain\");\r\n});\r\n\r\napp.MapGet(\"/baggage\", (HttpRequest request) =>\r\n{\r\n    var baggage = request.Headers[\"baggage\"];\r\n    app.Logger.LogInformation($\"BAGGAGE VALUES {baggage}\");\r\n    return Results.Ok();\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-4/Readme.md",
    "content": "# Record OTel baggage and pass it to HttpClient\r\n\r\nThis sample is about setting up [OTel baggage](https://www.w3.org/TR/baggage/), which pass user-defined properties via `baggage` HTTP header, to the next HTTP request.  \r\n"
  },
  {
    "path": "projects/open-telemetry/open-telemetry-4/open-telemetry-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OpenTelemetry.Exporter.Console\" Version=\"1.8.0\" />\r\n    <PackageReference Include=\"OpenTelemetry.Extensions.Hosting\" Version=\"1.8.0\" />\r\n    <PackageReference Include=\"OpenTelemetry.Instrumentation.AspNetCore\" Version=\"1.8.1\" />\r\n    <PackageReference Include=\"OpenTelemetry.Instrumentation.http\" Version=\"1.8.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/orchard-core/README.md",
    "content": "# Orchard Core Framework (4)\r\n\r\n\r\nThis section contains samples of project relying on [Orchard Core Framework](https://orchardcore.readthedocs.io/en/dev/). This section is a bit more advanced than the other parts of Practical ASP.NET Core.\r\n\r\nOrchard Core Framework is interesting because it provides infrastructure to modularize your application. It also go further in providing facilities to create multi tenant application, which is super hard to get right if you start from scratch.\r\n\r\nOrchard Core Framework powers Orchard Core CMS - you can use the framework independently on systems that have nothing to do with content management.\r\n\r\nNotes:\r\n\r\n- To run a sample, go to each sample folder and go to the `Host` folder.\r\n- All module will have `Module` prefix.\r\n- We will be using RC1 (or later) version of Orchard Core.\r\n- The samples in this section will receive frequent revisions as I am exploring the framework as I produce these samples.\r\n\r\n* [Routing - MVC](/projects/orchard-core/routing)\r\n\r\n  This sample shows how routing works in an Orchard Core Framework app.\r\n\r\n* [Routing - Razor Pages](/projects/orchard-core/routing-2)\r\n\r\n  This sample shows how routing works in an Orchard Core Framework app when you are using Razor Pages.\r\n\r\n* [Static Files](/projects/orchard-core/static-files)\r\n\r\n  This sample shows how to use static files in the module.\r\n\r\n* [Multi Tenant](/projects/orchard-core/multi-tenant)\r\n\r\n  This sample shows how Orchard Core Framework handles multi tenancy and how each tenant have its own configuration file.\r\n\r\n\r\ndotnet8"
  },
  {
    "path": "projects/orchard-core/build.bat",
    "content": "dotnet build multi-tenant\\host\r\ndotnet build routing\\host\r\ndotnet build routing-2\\host\r\ndotnet build routing-3\\host\r\ndotnet build static-files\\host"
  },
  {
    "path": "projects/orchard-core/build.sh",
    "content": "#!/bin/bash\ndotnet build multi-tenant/host\ndotnet build routing/host\ndotnet build routing-2/host\ndotnet build routing-3/host\ndotnet build static-files/host\n"
  },
  {
    "path": "projects/orchard-core/decoupled-cms/Pages/Index.cshtml",
    "content": "@page\r\n@inherits OrchardCore.DisplayManagement.RazorPages.Page\r\n@{\r\n    ViewLayout = \"Layout__Frontend\";\r\n}\r\n\r\nHello world"
  },
  {
    "path": "projects/orchard-core/decoupled-cms/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddOrchardCms();\r\n    \r\nvar app = builder.Build();\r\n\r\n// Configure the HTTP request pipeline.\r\nif (!app.Environment.IsDevelopment())\r\n{\r\n    app.UseExceptionHandler(\"/Error\");\r\n    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.\r\n    app.UseHsts();\r\n}\r\n\r\napp.UseHttpsRedirection();\r\napp.UseStaticFiles();\r\napp.UseOrchardCore(x => x.UsePoweredByOrchardCore(enabled: false));\r\n\r\napp.Run();\r\n\r\n"
  },
  {
    "path": "projects/orchard-core/decoupled-cms/Views/Layout-Frontend.cshtml",
    "content": "@inherits OrchardCore.DisplayManagement.Razor.RazorPage\r\n<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n     <link rel=\"shortcut icon\" href=\"/favicon.ico\" />\r\n    <!-- CSS only -->\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n    <link rel=\"stylesheet\" href=\"/css/site.css\" asp-append-version=\"true\" />\r\n</head>\r\n<body>\r\n    <h1>This is layout</h1>\r\n    <div class=\"container mt-3\">\r\n        @await RenderBodyAsync()\r\n    </div>\r\n\r\n    <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js\" integrity=\"sha384-pprn3073KE6tl6bjs2QrFaJGz5/SUsLqktiwsUTF55Jfv3qYSDhgCecCxMW52nD2\" crossorigin=\"anonymous\"></script>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/orchard-core/decoupled-cms/decouple-cms.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <PreserveCompilationReferences>true</PreserveCompilationReferences>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Application.Cms.Targets\" Version=\"1.8.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/orchard-core/decoupled-cms/wwwroot/.placeholder",
    "content": ""
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/App_Data/Sites/CustomerA/DataProtection-Keys/key-806fccc8-1694-40a4-a114-b937a4f5f8bb.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<key id=\"806fccc8-1694-40a4-a114-b937a4f5f8bb\" version=\"1\">\r\n  <creationDate>2019-03-31T07:37:35.6667072Z</creationDate>\r\n  <activationDate>2019-03-31T07:37:35.6652058Z</activationDate>\r\n  <expirationDate>2019-06-29T07:37:35.6652058Z</expirationDate>\r\n  <descriptor deserializerType=\"Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60\">\r\n    <descriptor>\r\n      <encryption algorithm=\"AES_256_CBC\" />\r\n      <validation algorithm=\"HMACSHA256\" />\r\n      <masterKey p4:requiresEncryption=\"true\" xmlns:p4=\"http://schemas.asp.net/2015/03/dataProtection\">\r\n        <!-- Warning: the key below is in an unencrypted form. -->\r\n        <value>ChEuLu6HlKSjBKtk1+tO4vA+7EEBnJqLGMmf22gwRnKW4ulhAYODlRNxwm0fBu9cB//hSl2eMleS4bxjdIxXgQ==</value>\r\n      </masterKey>\r\n    </descriptor>\r\n  </descriptor>\r\n</key>"
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/App_Data/Sites/CustomerA/appSettings.json",
    "content": "{\r\n    \"CustomSetting\": \"Custom setting for Customer A\",\r\n    \"CustomerLevel\": \"Basic\"\r\n}"
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/App_Data/Sites/CustomerB/DataProtection-Keys/key-72549719-b179-4c21-8730-4e4789c067cd.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<key id=\"72549719-b179-4c21-8730-4e4789c067cd\" version=\"1\">\r\n  <creationDate>2019-03-31T07:47:16.7034374Z</creationDate>\r\n  <activationDate>2019-03-31T07:47:16.7020998Z</activationDate>\r\n  <expirationDate>2019-06-29T07:47:16.7020998Z</expirationDate>\r\n  <descriptor deserializerType=\"Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60\">\r\n    <descriptor>\r\n      <encryption algorithm=\"AES_256_CBC\" />\r\n      <validation algorithm=\"HMACSHA256\" />\r\n      <masterKey p4:requiresEncryption=\"true\" xmlns:p4=\"http://schemas.asp.net/2015/03/dataProtection\">\r\n        <!-- Warning: the key below is in an unencrypted form. -->\r\n        <value>tYvZlyd30hGGuXIoVrnH2ai/X5ouJnrESgXr4A+UKOm9w3fcjjhD4ahPJVS7sqOvlRl7NXCy2+yW+jnw0umLbQ==</value>\r\n      </masterKey>\r\n    </descriptor>\r\n  </descriptor>\r\n</key>"
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/App_Data/Sites/CustomerB/appSettings.json",
    "content": "{\r\n    \"CustomSetting\": \"Custom setting for Customer B\",\r\n    \"CustomerLevel\": \"VIP\"\r\n}"
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/App_Data/Sites/Default/DataProtection-Keys/key-f9f0a416-65d2-47d5-80f3-4f0272b538fe.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<key id=\"f9f0a416-65d2-47d5-80f3-4f0272b538fe\" version=\"1\">\r\n  <creationDate>2019-03-29T20:50:57.7942781Z</creationDate>\r\n  <activationDate>2019-03-29T20:50:57.7935641Z</activationDate>\r\n  <expirationDate>2019-06-27T20:50:57.7935641Z</expirationDate>\r\n  <descriptor deserializerType=\"Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60\">\r\n    <descriptor>\r\n      <encryption algorithm=\"AES_256_CBC\" />\r\n      <validation algorithm=\"HMACSHA256\" />\r\n      <masterKey p4:requiresEncryption=\"true\" xmlns:p4=\"http://schemas.asp.net/2015/03/dataProtection\">\r\n        <!-- Warning: the key below is in an unencrypted form. -->\r\n        <value>TqoLEuQqQC6biti8Z63FVhWnV4l2Cargo1oLluHrek2ytvaB7uAkFIC5jbLZEhcAUifE66PTyZzguECrRi3aWw==</value>\r\n      </masterKey>\r\n    </descriptor>\r\n  </descriptor>\r\n</key>"
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/App_Data/Sites/Default/appSettings.json",
    "content": "{\r\n    \"CustomSetting\": \"Custom setting for Default tenant\",\r\n    \"CustomerLevel\": \"Premium\"\r\n}"
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/App_Data/tenants.json",
    "content": "{\r\n    \"Default\": {\r\n        \"State\": \"Running\",\r\n        \"RequestUrlHost\": null,\r\n        \"RequestUrlPrefix\": null\r\n    },\r\n    \"CustomerA\": {\r\n        \"State\": \"Running\",\r\n        \"RequestUrlHost\": null,\r\n        \"RequestUrlPrefix\": \"customer-a\"\r\n    },\r\n    \"CustomerB\": {\r\n        \"State\": \"Running\",\r\n        \"RequestUrlHost\": null,\r\n        \"RequestUrlPrefix\": \"customer-b\"\r\n    }\r\n}"
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/Host.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <TieredCompilation>true</TieredCompilation>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <Folder Include=\"wwwroot\\\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Application.Targets\" Version=\"1.8.2\" />\r\n    <PackageReference Include=\"OrchardCore.Application.Mvc.Targets\" Version=\"1.8.2\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <Watch Include=\"**\\*.cshtml\" />\r\n  </ItemGroup>\r\n\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/Pages/Index.cshtml",
    "content": "@page\r\n@using OrchardCore.Environment.Shell\r\n@inject ShellSettings Settings\r\n\r\n<div class=\"container\">\r\n    <h1>Shell Settings</h1>\r\n\r\n    <ul>\r\n        <li><a href=\"/\">/</a></li>\r\n        <li><a href=\"/customer-a\">customer-a</a></li>\r\n        <li><a href=\"/customer-b\">customer-b</a></li>\r\n    </ul>\r\n\r\n    <table class=\"table\">\r\n        <tbody>\r\n            <tr>\r\n                <td>Name</td>\r\n                <td>@Settings.Name</td>\r\n            </tr>\r\n            <tr>\r\n                <td>State</td>\r\n                <td>@Settings.State</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Prefix</td>\r\n                <td>@Settings.RequestUrlPrefix</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Custom Setting</td>\r\n                <td>@Settings[\"CustomSetting\"]</td>\r\n            </tr>\r\n            <tr>\r\n                <td>Customer Level</td>\r\n                <td>@Settings[\"CustomerLevel\"]</td>\r\n            </tr>\r\n        </tbody>\r\n    </table>\r\n</div>\r\n"
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddOrchardCore().AddMvc().WithTenants();\r\n\r\nvar app = builder.Build();\r\napp.UseOrchardCore();\r\napp.Run();\r\n"
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/Views/Shared/_Layout.cshtml",
    "content": "﻿<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <!-- Required meta tags -->\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\r\n\r\n    <!-- Bootstrap CSS -->\r\n    <link rel=\"stylesheet\" href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css\" integrity=\"sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T\" crossorigin=\"anonymous\">\r\n\r\n    <title>Orchard Core Framework</title>\r\n    @RenderSection(\"CssInline\", required: false)\r\n  </head>\r\n  <body>\r\n\r\n    @RenderBody()\r\n    <footer>\r\n        <p>&copy; @DateTime.Now.Year - Orchard Core Framework</p>\r\n    </footer>\r\n\r\n    <!-- Optional JavaScript -->\r\n    <!-- jQuery first, then Popper.js, then Bootstrap JS -->\r\n    <script src=\"https://code.jquery.com/jquery-3.3.1.slim.min.js\" integrity=\"sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo\" crossorigin=\"anonymous\"></script>\r\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js\" integrity=\"sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1\" crossorigin=\"anonymous\"></script>\r\n    <script src=\"https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js\" integrity=\"sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM\" crossorigin=\"anonymous\"></script>\r\n \r\n    @RenderSection(\"JsInline\", required: false)\r\n  </body>\r\n</html>\r\n"
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/_ViewImports.cshtml",
    "content": "﻿@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers"
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/_ViewStart.cshtml",
    "content": "﻿@{\r\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/multi-tenant/Host/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Warning\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/multi-tenant/README.md",
    "content": "# multi tenant configuration file\r\n\r\nOrchard Core Framework (OCF) support multi-tenancy via url, either by host or prefix. This sample shows how OCF provides the infrastructure for each tenant to have its own configuration file.\r\n\r\nThe tenants are configured at `App_Data/tenants.json`. Additional tenant specific configuration information can be found at `App_Data/Sites/{TenantName}/appSettings.json`.\r\n\r\nAll these information is accessible via `OrchardCore.Environment.Shell.ShellSettings`.\r\n"
  },
  {
    "path": "projects/orchard-core/routing/ForumModule/Controllers/HomeController.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace ForumModule.Controllers\r\n{\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index() => Content(\"From Forum\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/routing/ForumModule/ForumModule.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Module.Targets\" Version=\"1.8.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/orchard-core/routing/ForumModule/Manifest.cs",
    "content": "using OrchardCore.Modules.Manifest;\r\n\r\n[assembly: Module(\r\n    Name = \"ForumModule\",\r\n    Author = \"The Orchard Team\",\r\n    Website = \"http://orchardproject.net\",\r\n    Version = \"0.0.1\",\r\n    Description = \"Forum Module\",\r\n    Category = \"Forum Module\"\r\n)]\r\n"
  },
  {
    "path": "projects/orchard-core/routing/ForumModule/Startup.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Routing;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing OrchardCore.Modules;\r\n\r\nnamespace ForumModule;\r\n\r\npublic class Startup : StartupBase\r\n{\r\n    public override void ConfigureServices(IServiceCollection services)\r\n    {\r\n    }\r\n\r\n    public override void Configure(IApplicationBuilder builder, IEndpointRouteBuilder routes, IServiceProvider serviceProvider)\r\n    {\r\n        routes.MapAreaControllerRoute\r\n       (\r\n           name: \"ForumHome\",\r\n           areaName: \"ForumModule\",\r\n           pattern: \"Forum\",\r\n           defaults: new { controller = \"Home\", action = \"Index\" }\r\n       );\r\n    }\r\n}"
  },
  {
    "path": "projects/orchard-core/routing/ForumModule/Views/Home/Index.cshtml",
    "content": "﻿Hello from Forum Module"
  },
  {
    "path": "projects/orchard-core/routing/Host/App_Data/Sites/Default/DataProtection-Keys/key-f9f0a416-65d2-47d5-80f3-4f0272b538fe.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<key id=\"f9f0a416-65d2-47d5-80f3-4f0272b538fe\" version=\"1\">\r\n  <creationDate>2019-03-29T20:50:57.7942781Z</creationDate>\r\n  <activationDate>2019-03-29T20:50:57.7935641Z</activationDate>\r\n  <expirationDate>2019-06-27T20:50:57.7935641Z</expirationDate>\r\n  <descriptor deserializerType=\"Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60\">\r\n    <descriptor>\r\n      <encryption algorithm=\"AES_256_CBC\" />\r\n      <validation algorithm=\"HMACSHA256\" />\r\n      <masterKey p4:requiresEncryption=\"true\" xmlns:p4=\"http://schemas.asp.net/2015/03/dataProtection\">\r\n        <!-- Warning: the key below is in an unencrypted form. -->\r\n        <value>TqoLEuQqQC6biti8Z63FVhWnV4l2Cargo1oLluHrek2ytvaB7uAkFIC5jbLZEhcAUifE66PTyZzguECrRi3aWw==</value>\r\n      </masterKey>\r\n    </descriptor>\r\n  </descriptor>\r\n</key>"
  },
  {
    "path": "projects/orchard-core/routing/Host/Controllers/HomeController.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace Host\r\n{\r\n    [Route(\"\")]\r\n    public class HomeController : Controller\r\n    {\r\n        public IActionResult Index() => View();\r\n    }\r\n}"
  },
  {
    "path": "projects/orchard-core/routing/Host/Host.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <TieredCompilation>true</TieredCompilation>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Application.Mvc.Targets\" Version=\"1.8.2\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\ForumModule\\ForumModule.csproj\" />\r\n    <ProjectReference Include=\"..\\TicketModule\\TicketModule.csproj\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/orchard-core/routing/Host/Pages/Routes.cshtml",
    "content": "@page\r\n@inject Microsoft.AspNetCore.Mvc.Infrastructure.IActionDescriptorCollectionProvider Actions\r\n@{\r\n    Layout = null;\r\n}\r\n\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Orchard Core Framework</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n<h1>Routing Table</h1>\r\n\r\n<p>\r\n   Interesting facts:\r\n   <ul>\r\n       <li>\r\n           MVC Controllers are processed first, whether it is via conventional routing or attribute routing\r\n       </li>\r\n       <li>\r\n           Razor pages added last\r\n       </li>\r\n   </ul> \r\n</p>\r\n\r\n<h2>Links in the routing table</h2>\r\n<ul>\r\n    @foreach (var r in Routes)\r\n    {\r\n        <li><a href=\"@r.url\">@r.type: @r.url</a></li>\r\n    }\r\n</ul>\r\n\r\n</body>\r\n</html>\r\n\r\n\r\n@functions{\r\n    public List<(string type, string url)> Routes = new List<(string, string)>();\r\n\r\n    public void OnGet()\r\n    {\r\n        foreach (var d in Actions.ActionDescriptors.Items)\r\n        {\r\n            if (d.AttributeRouteInfo != null)\r\n            {\r\n                string rr = string.Empty;\r\n                var template = $\"{d.AttributeRouteInfo?.Template}\";\r\n\r\n                if (template.StartsWith('/'))\r\n                    rr = template;\r\n                else\r\n                    rr = $\"/{template}\";\r\n\r\n                Routes.Add((\"Attribute Routing\", rr));\r\n            }\r\n            else\r\n            {\r\n                string routeValues = string.Empty;\r\n\r\n                if (d.RouteValues.ContainsKey(\"area\"))\r\n                    routeValues = $\"/{d.RouteValues[\"area\"]}/{d.RouteValues[\"controller\"]}/{d.RouteValues[\"action\"]}\";\r\n                else\r\n                    routeValues = $\"/{d.RouteValues[\"controller\"]}/{d.RouteValues[\"action\"]}\";\r\n\r\n                if (!string.IsNullOrWhiteSpace(routeValues))\r\n                    Routes.Add((\"Conventional\", routeValues));\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/orchard-core/routing/Host/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddOrchardCore().AddMvc();\r\n\r\nvar app = builder.Build();\r\napp.UseOrchardCore();\r\napp.Run();"
  },
  {
    "path": "projects/orchard-core/routing/Host/Views/Home/Index.cshtml",
    "content": "<h1>Host App</h1>\r\n\r\n<ul>\r\n    <li><a href=\"Forum\">/Forum</a></li>\r\n    <li><a href=\"/ForumModule/Home/Index\">/ForumModule/Home/Index</a></li>\r\n    <li><a href=\"/Ticket\">/Ticket</a></li>\r\n    <li><a href=\"/TicketModule/Home/Index\">/TicketModule/Home/Index</a></li>\r\n    <li><a href=\"/TicketModule/Home/About\">/TicketModule/Home/About</a></li>\r\n    <li><a href=\"/TicketModule/Login/Index\">/TicketModule/Login/Index</a></li>\r\n</ul>"
  },
  {
    "path": "projects/orchard-core/routing/Host/Views/Shared/_Layout.cshtml",
    "content": "﻿<!doctype html>\r\n<html lang=\"en\">\r\n\r\n<head>\r\n  <!-- Required meta tags -->\r\n  <meta charset=\"utf-8\">\r\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\r\n\r\n  <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\"\r\n    integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n  <title>Orchard Core Framework</title>\r\n  @RenderSection(\"CssInline\", required: false)\r\n</head>\r\n\r\n<body>\r\n  <div class=\"container\">\r\n    @RenderBody()\r\n    <footer>\r\n      <p>&copy; @DateTime.Now.Year - Orchard Core Framework</p>\r\n    </footer>\r\n  </div>\r\n  @RenderSection(\"JsInline\", required: false)\r\n</body>\r\n\r\n</html>\r\n"
  },
  {
    "path": "projects/orchard-core/routing/Host/_ViewImports.cshtml",
    "content": "﻿@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers"
  },
  {
    "path": "projects/orchard-core/routing/Host/_ViewStart.cshtml",
    "content": "﻿@{\r\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/routing/Host/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Warning\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/routing/README.md",
    "content": "# Routing\r\n\r\nThis sample shows how the routing works in an Orchard Core Framework application.\r\n\r\nWe have two modules in this sample:\r\n\r\n* ForumModule\r\n* TicketModule\r\n\r\nEach of this module uses `OrchardCore.Module.Targets`.\r\n\r\nThe host application is a normal ASP.NET Core app that uses `OrchardCore.Application.Mvc.Targets` and has references to the projects of `ForumModule` and `TicketModule`.\r\n\r\nBy default, OCF creates areas based on the name of your modules. Hence we have `ForumModule` and `TicketModule` areas in this app.\r\n\r\nIf you want to customize the routing of each module, you can do it via the `Startup.cs` located under each module. Make sure that `routes.MapAreaControllerRoute` `AreaName` matches the name of your module otherwise it won't work."
  },
  {
    "path": "projects/orchard-core/routing/TicketModule/Controllers/HomeController.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace TicketModule.Controllers\r\n{\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index() => Content(\"From Ticket\");\r\n\r\n        public ActionResult About() => Content(\"About Ticket\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/routing/TicketModule/Controllers/LoginController.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace TicketModule.Controllers\r\n{\r\n    public class LoginController : Controller\r\n    {\r\n        public ActionResult Index() => Content(\"From Ticket Login\");\r\n    }\r\n}"
  },
  {
    "path": "projects/orchard-core/routing/TicketModule/Manifest.cs",
    "content": "using OrchardCore.Modules.Manifest;\r\n\r\n[assembly: Module(\r\n    Name = \"TicketModule\",\r\n    Author = \"The Orchard Team\",\r\n    Website = \"http://orchardproject.net\",\r\n    Version = \"0.0.1\",\r\n    Description = \"Ticket Module\",\r\n    Category = \"Ticket Module\"\r\n)]\r\n"
  },
  {
    "path": "projects/orchard-core/routing/TicketModule/Startup.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Routing;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing OrchardCore.Modules;\r\n\r\nnamespace TicketModule;\r\n\r\npublic class Startup : StartupBase\r\n{\r\n    public override void ConfigureServices(IServiceCollection services)\r\n    {\r\n    }\r\n\r\n    public override void Configure(IApplicationBuilder builder, IEndpointRouteBuilder routes, IServiceProvider serviceProvider)\r\n    {\r\n        routes.MapAreaControllerRoute(\r\n            name: \"TicketHome\",\r\n            areaName: \"TicketModule\",\r\n            pattern: \"Ticket\",\r\n            defaults: new { controller = \"Login\", action = \"Index\" });\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/routing/TicketModule/TicketModule.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Module.Targets\" Version=\"1.8.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/orchard-core/routing-2/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/Host/bin/Debug/netcoreapp3.1/Host.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}/Host\",\r\n            \"stopAtEntry\": false,\r\n            \"launchBrowser\": {\r\n                \"enabled\": true\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/orchard-core/routing-2/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/Host/Host.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/Host/Host.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/Host/Host.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$tsc\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/orchard-core/routing-2/ForumModule/ForumModule.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Module.Targets\" Version=\"1.8.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/orchard-core/routing-2/ForumModule/Manifest.cs",
    "content": "using OrchardCore.Modules.Manifest;\r\n\r\n[assembly: Module(\r\n    Name = \"ForumModule\",\r\n    Author = \"The Orchard Team\",\r\n    Website = \"http://orchardproject.net\",\r\n    Version = \"0.0.1\",\r\n    Description = \"Forum Module\",\r\n    Category = \"Forum Module\"\r\n)]\r\n"
  },
  {
    "path": "projects/orchard-core/routing-2/ForumModule/Pages/Index.cshtml",
    "content": "@page \"\"\r\n\r\n<h1>This is from the Forum Module</h1>"
  },
  {
    "path": "projects/orchard-core/routing-2/ForumModule/Pages/Products.cshtml",
    "content": "@page \"/products\"\r\n\r\n<h1>This product listing from Forum Module</h1>"
  },
  {
    "path": "projects/orchard-core/routing-2/ForumModule/Pages/Users.cshtml",
    "content": "@page \r\n\r\n<h1>User List from Forum Module</h1>"
  },
  {
    "path": "projects/orchard-core/routing-2/ForumModule/Startup.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Routing;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing OrchardCore.Modules;\r\n\r\nnamespace ForumModule;\r\n\r\npublic class Startup : StartupBase\r\n{\r\n    public override void ConfigureServices(IServiceCollection services)\r\n    {\r\n    }\r\n\r\n    public override void Configure(IApplicationBuilder builder, IEndpointRouteBuilder routes, IServiceProvider serviceProvider)\r\n    {\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/routing-2/Host/App_Data/Sites/Default/DataProtection-Keys/key-f9f0a416-65d2-47d5-80f3-4f0272b538fe.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<key id=\"f9f0a416-65d2-47d5-80f3-4f0272b538fe\" version=\"1\">\r\n  <creationDate>2019-03-29T20:50:57.7942781Z</creationDate>\r\n  <activationDate>2019-03-29T20:50:57.7935641Z</activationDate>\r\n  <expirationDate>2019-06-27T20:50:57.7935641Z</expirationDate>\r\n  <descriptor deserializerType=\"Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60\">\r\n    <descriptor>\r\n      <encryption algorithm=\"AES_256_CBC\" />\r\n      <validation algorithm=\"HMACSHA256\" />\r\n      <masterKey p4:requiresEncryption=\"true\" xmlns:p4=\"http://schemas.asp.net/2015/03/dataProtection\">\r\n        <!-- Warning: the key below is in an unencrypted form. -->\r\n        <value>TqoLEuQqQC6biti8Z63FVhWnV4l2Cargo1oLluHrek2ytvaB7uAkFIC5jbLZEhcAUifE66PTyZzguECrRi3aWw==</value>\r\n      </masterKey>\r\n    </descriptor>\r\n  </descriptor>\r\n</key>"
  },
  {
    "path": "projects/orchard-core/routing-2/Host/Controllers/HomeController.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace Host\r\n{\r\n    [Route(\"\")]\r\n    public class HomeController : Controller\r\n    {\r\n        public IActionResult Index() => View();\r\n    }\r\n}"
  },
  {
    "path": "projects/orchard-core/routing-2/Host/Host.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <TieredCompilation>true</TieredCompilation>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Application.Mvc.Targets\" Version=\"1.8.2\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\ForumModule\\ForumModule.csproj\" />\r\n    <ProjectReference Include=\"..\\TicketModule\\TicketModule.csproj\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/orchard-core/routing-2/Host/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddOrchardCore().AddMvc();\r\n\r\nvar app = builder.Build();\r\napp.UseOrchardCore();\r\napp.Run();"
  },
  {
    "path": "projects/orchard-core/routing-2/Host/Views/Home/Index.cshtml",
    "content": "<h1>Host App</h1>\r\n\r\n<p>\r\nHere you see samples of how the @@page custom routing interact with Orchard Core Framework module system out of the box.\r\n</p>\r\n\r\n<ul>\r\n    <li><a href=\"/ForumModule/\">/ForumModule/</a></li>\r\n    <li><a href=\"/ForumModule/Users\">/ForumModule/Users</a></li>\r\n    <li><a href=\"/Products\">/Products</a></li>\r\n    <li><a href=\"/TicketModule/\">/TicketModule/</a></li>\r\n    <li><a href=\"/TicketModule/users/list\">/TicketModule/users/list</a></li>\r\n    <li><a href=\"~/Privacy\">~/Privacy</a></li>\r\n</ul>"
  },
  {
    "path": "projects/orchard-core/routing-2/Host/Views/Shared/_Layout.cshtml",
    "content": "﻿<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <!-- Required meta tags -->\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\r\n\r\n    <!-- Bootstrap CSS -->\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n    <title>Orchard Core Framework</title>\r\n    @RenderSection(\"CssInline\", required: false)\r\n  </head>\r\n  <body>\r\n    <div class=\"container\">\r\n      @RenderBody()\r\n      <footer>\r\n          <p>&copy; @DateTime.Now.Year - Orchard Core Framework</p>\r\n      </footer>\r\n    </div>\r\n    @RenderSection(\"JsInline\", required: false)\r\n  </body>\r\n</html>\r\n"
  },
  {
    "path": "projects/orchard-core/routing-2/Host/_ViewImports.cshtml",
    "content": "﻿@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers"
  },
  {
    "path": "projects/orchard-core/routing-2/Host/_ViewStart.cshtml",
    "content": "﻿@{\r\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/routing-2/Host/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Warning\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/routing-2/README.md",
    "content": "# Routing with Razor Pages\r\n\r\nThis sample shows how the routing works in an Orchard Core Framework application when you are using Razor Pages. *Note*: To see the where the custom routes are defined, go to individual page at the modules. It is defined using `@page` attribute at each page.\r\n\r\nWe have two modules in this sample:\r\n\r\n* ForumModule\r\n* TicketModule\r\n\r\nEach of this module uses `OrchardCore.Module.Targets`.\r\n\r\nThe host application is a normal ASP.NET Core app that uses `OrchardCore.Application.Mvc.Targets` and has references to the projects of `ForumModule` and `TicketModule`.\r\n\r\nBy default, OCF creates areas based on the name of your modules. Hence we have `ForumModule` and `TicketModule` areas in this app.\r\n"
  },
  {
    "path": "projects/orchard-core/routing-2/TicketModule/Manifest.cs",
    "content": "using OrchardCore.Modules.Manifest;\r\n\r\n[assembly: Module(\r\n    Name = \"TicketModule\",\r\n    Author = \"The Orchard Team\",\r\n    Website = \"http://orchardproject.net\",\r\n    Version = \"0.0.1\",\r\n    Description = \"Ticket Module\",\r\n    Category = \"Ticket Module\"\r\n)]\r\n"
  },
  {
    "path": "projects/orchard-core/routing-2/TicketModule/Pages/Index.cshtml",
    "content": "@page \"\"\r\n\r\n<h1>This is from the Ticket Module</h1>"
  },
  {
    "path": "projects/orchard-core/routing-2/TicketModule/Pages/Privacy.cshtml",
    "content": "@page \"~/privacy\"\r\n\r\n<h1>Privacy from from Ticket Module</h1>"
  },
  {
    "path": "projects/orchard-core/routing-2/TicketModule/Pages/Users.cshtml",
    "content": "@page \"list\"\r\n\r\n<h1>User List from Ticket Module</h1>"
  },
  {
    "path": "projects/orchard-core/routing-2/TicketModule/Startup.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Routing;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing OrchardCore.Modules;\r\n\r\nnamespace TicketModule;\r\n\r\npublic class Startup : StartupBase\r\n{\r\n    public override void ConfigureServices(IServiceCollection services)\r\n    {\r\n    }\r\n\r\n    public override void Configure(IApplicationBuilder builder, IEndpointRouteBuilder routes, IServiceProvider serviceProvider)\r\n    {\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/routing-2/TicketModule/TicketModule.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Module.Targets\" Version=\"1.8.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/orchard-core/static-files/ForumModule/Controllers/HomeController.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace ForumModule.Controllers\r\n{\r\n    public class HomeController : Controller\r\n    {\r\n        public ActionResult Index() => View();\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/static-files/ForumModule/ForumModule.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Module.Targets\" Version=\"1.8.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/orchard-core/static-files/ForumModule/Manifest.cs",
    "content": "using OrchardCore.Modules.Manifest;\r\n\r\n[assembly: Module(\r\n    Name = \"ForumModule\",\r\n    Author = \"The Orchard Team\",\r\n    Website = \"http://orchardproject.net\",\r\n    Version = \"0.0.1\",\r\n    Description = \"Forum Module\",\r\n    Category = \"Forum Module\"\r\n)]\r\n"
  },
  {
    "path": "projects/orchard-core/static-files/ForumModule/Startup.cs",
    "content": "using System;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Routing;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing OrchardCore.Modules;\r\n\r\nnamespace ForumModule\r\n{\r\n    public class Startup : StartupBase\r\n    {\r\n        public override void ConfigureServices(IServiceCollection services)\r\n        {\r\n        }\r\n\r\n        public override void Configure(IApplicationBuilder builder, IEndpointRouteBuilder routes, IServiceProvider serviceProvider)\r\n        {\r\n            routes.MapAreaControllerRoute\r\n           (\r\n               name: \"ForumHome\",\r\n               areaName: \"ForumModule\",\r\n               pattern: \"Forum\",\r\n               defaults: new { controller = \"Home\", action = \"Index\" }\r\n           );\r\n        }\r\n\r\n    }\r\n}"
  },
  {
    "path": "projects/orchard-core/static-files/ForumModule/Views/Home/Index.cshtml",
    "content": "﻿@section CssInline{\r\n    <link rel=\"stylesheet\" href=\"~/ForumModule/site.css\" asp-append-version=\"true\" />\r\n}\r\n\r\n\r\n<h1>Static Files</h1>\r\n\r\n<img src=\"~/ForumModule/tesla-cat.jpg\" asp-append-version=\"true\" />"
  },
  {
    "path": "projects/orchard-core/static-files/ForumModule/wwwroot/site.css",
    "content": "body {\r\n    color: pink;\r\n}"
  },
  {
    "path": "projects/orchard-core/static-files/Host/App_Data/Sites/Default/DataProtection-Keys/key-f9f0a416-65d2-47d5-80f3-4f0272b538fe.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<key id=\"f9f0a416-65d2-47d5-80f3-4f0272b538fe\" version=\"1\">\r\n  <creationDate>2019-03-29T20:50:57.7942781Z</creationDate>\r\n  <activationDate>2019-03-29T20:50:57.7935641Z</activationDate>\r\n  <expirationDate>2019-06-27T20:50:57.7935641Z</expirationDate>\r\n  <descriptor deserializerType=\"Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60\">\r\n    <descriptor>\r\n      <encryption algorithm=\"AES_256_CBC\" />\r\n      <validation algorithm=\"HMACSHA256\" />\r\n      <masterKey p4:requiresEncryption=\"true\" xmlns:p4=\"http://schemas.asp.net/2015/03/dataProtection\">\r\n        <!-- Warning: the key below is in an unencrypted form. -->\r\n        <value>TqoLEuQqQC6biti8Z63FVhWnV4l2Cargo1oLluHrek2ytvaB7uAkFIC5jbLZEhcAUifE66PTyZzguECrRi3aWw==</value>\r\n      </masterKey>\r\n    </descriptor>\r\n  </descriptor>\r\n</key>"
  },
  {
    "path": "projects/orchard-core/static-files/Host/Host.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <TieredCompilation>true</TieredCompilation>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <Folder Include=\"wwwroot\\\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"OrchardCore.Application.Mvc.Targets\" Version=\"1.8.2\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\ForumModule\\ForumModule.csproj\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/orchard-core/static-files/Host/Pages/Index.cshtml",
    "content": "@page\r\n\r\n<h1>Static Files</h1>\r\n\r\n<ul>\r\n    <li><a href=\"/ForumModule/Home/Index\">/ForumModule/Home/Index</a></li>\r\n</ul>"
  },
  {
    "path": "projects/orchard-core/static-files/Host/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddOrchardCore().AddMvc();\r\n\r\nvar app = builder.Build();\r\napp.UseOrchardCore();\r\napp.Run();\r\n\r\n"
  },
  {
    "path": "projects/orchard-core/static-files/Host/Views/Shared/_Layout.cshtml",
    "content": "﻿<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <!-- Required meta tags -->\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\r\n\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n\r\n    <title>Orchard Core Framework</title>\r\n    @RenderSection(\"CssInline\", required: false)\r\n  </head>\r\n  <body>\r\n    <div class=\"container\">\r\n      @RenderBody()\r\n      <footer>\r\n          <p>&copy; @DateTime.Now.Year - Orchard Core Framework</p>\r\n      </footer>\r\n    </div>\r\n    \r\n    @RenderSection(\"JsInline\", required: false)\r\n  </body>\r\n</html>\r\n"
  },
  {
    "path": "projects/orchard-core/static-files/Host/_ViewImports.cshtml",
    "content": "﻿@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers"
  },
  {
    "path": "projects/orchard-core/static-files/Host/_ViewStart.cshtml",
    "content": "﻿@{\r\n    Layout = \"~/Views/Shared/_Layout.cshtml\";\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/static-files/Host/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Warning\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/orchard-core/static-files/README.md",
    "content": "#static files\r\n\r\nEach Orchard Core module can have its own static file at `wwwroot`. It just works. You just have to make sure that your links points to the right area, which is your module name. In this sample, it is `ForumModule`.\r\n"
  },
  {
    "path": "projects/orleans/README.md",
    "content": "# Microsoft Orleans (5)\r\n\r\nThese are simple samples to play with [Microsoft Orleans](https://github.com/dotnet/orleans), a cross-platform framework for building robust, scalable distributed applications.\r\n\r\n## Orleans 8\r\n\r\n* [Orleans - 1](orleans-1)\r\n\r\n  This sample shows how to use Orleans 8 in a minimal API application. It shows the new way on how to configure an Orleans server.\r\n\r\n* [Orleans - 2](orleans-2)\r\n\r\n  This is a sample project that shows how to use Redis as a persistence provider for Orleans.\r\n\r\n* [Orleans - 3](orleans-3)\r\n\r\n  This sample demonstrates the functionality of Orleans' Timer via Grain.RegisterTimer. It's useful to trigger actions to be repeated frequently (less than every minute).\r\n\r\n* [Orleans - 4](orleans-4)\r\n\r\n  This sample demonstrates the functionality of Orleans' Reminder via Grain.RegisterOrUpdateReminder. It's useful to trigger actions to be repeated infrequently (more than every minute, hours or days). This is a persistent timer that survives grain restarts. [Reminder is much expensive than Timer](https://github.com/dotnet/orleans/issues/4218#issuecomment-373162275).\r\n\r\n\r\n- [Orleans - 5](orleans-5)\r\n\r\n  This sample demonstrates using HttpClient in a `grain` and also introduces the concept of a Stateless Worker `grain`. \r\n\r\n<!--\r\n## Samples\r\n\r\n- [Timer](timer)\r\n\r\n  This sample demonstrates the functionality of `Grain.RegisterTimer`. It's useful to trigger actions to be repeated frequently (less than every minute). \r\n\r\n- [Reminder](reminder)\r\n\r\n  This sample demonstrates the functionality of `Grain.RegisterOrUpdateReminder`. It's useful to trigger actions to be repeated infrequently (more than every minute, hours or days). This is a persistent timer that survives grain restarts. [Reminder is much expensive than Timer](https://github.com/dotnet/orleans/issues/4218#issuecomment-373162275).\r\n\r\n- [HttpClient and Stateless Worker Grain](http-client)\r\n\r\n  This sample demonstrates using HttpClient in a `grain` and also introduces the concept of a Stateless Worker `grain`. \r\n\r\n- [RSS Reader - Simple](rss-reader)\r\n\r\n  This is a simple RSS Reader that reads syndication items and only store and display unique ones. \r\n\r\n- [RSS Reader with Reminder](rss-reader-2)\r\n\r\n  This is an RSS Reader that reads syndication items and refresh each feed source every x minutes (configurable). \r\n\r\n- [RSS Reader with Reminder + Subscription List](rss-reader-3)\r\n\r\n  This is an RSS reader that read RSS feed sources from an OPML subscription list and refresh each feed source every x minutes (configurable). It uses a single Reminder grain to handle all the reminders created for each feed.\r\n\r\n- [RSS Reader with Reminder + Subscription List 2](rss-reader-4)\r\n\r\n  This is an RSS reader that read RSS feed sources from an OPML subscription list and refresh each feed source every x minutes (configurable). It uses one Reminder grain for each feed.\r\n\r\n- [RSS Reader with Reminder + Subscription List + Orleans Streams](rss-reader-5)\r\n\r\n  This is an RSS reader that read RSS feed sources from an OPML subscription list and publish it into a single stream with a single channel. The data then processed by implicit susbcriber. \r\n\r\n-->"
  },
  {
    "path": "projects/orleans/build.bat",
    "content": "dotnet build hello-world\\client\\\r\ndotnet build hello-world\\silo\\\r\ndotnet build hello-world-2\\client\r\ndotnet build hello-world-2\\silo\r\ndotnet build hello-world-3\r\ndotnet build hello-world-4\r\ndotnet build http-client\r\ndotnet build reminder\r\ndotnet build rss-reader\r\ndotnet build rss-reader-2\r\ndotnet build rss-reader-3\r\ndotnet build rss-reader-4\r\ndotnet build rss-reader-5\r\ndotnet build rss-reader-6\r\ndotnet build timer"
  },
  {
    "path": "projects/orleans/build.sh",
    "content": "#!/bin/bash\ndotnet build hello-world/client/\ndotnet build hello-world/silo/\ndotnet build hello-world-2/client\ndotnet build hello-world-2/silo\ndotnet build hello-world-3\ndotnet build hello-world-4\ndotnet build http-client\ndotnet build reminder\ndotnet build rss-reader\ndotnet build rss-reader-2\ndotnet build rss-reader-3\ndotnet build rss-reader-4\ndotnet build rss-reader-5\ndotnet build rss-reader-6\ndotnet build timer\n"
  },
  {
    "path": "projects/orleans/global.json",
    "content": "{\r\n  \"sdk\": {\r\n    \"version\": \"10.0.0-rc.1.25451.107\",\r\n    \"rollForward\": \"major\",\r\n    \"allowPrerelease\": true\r\n  }\r\n}"
  },
  {
    "path": "projects/orleans/orleans-1/Program.cs",
    "content": "using System.Net;\r\nusing Orleans.Runtime;\r\nusing Orleans.Configuration;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole();\r\nbuilder.Host.UseOrleans(b =>\r\n    {\r\n        b\r\n            .UseLocalhostClustering()\r\n            .Configure<ClusterOptions>(options =>\r\n            {\r\n                options.ClusterId = \"dev\";\r\n                options.ServiceId = \"orleans-1\";\r\n            })\r\n            .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)\r\n            .AddMemoryGrainStorage(name: \"ArchiveStorage\");\r\n    });\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async (IGrainFactory client) =>\r\n{\r\n    IHelloArchive grain = client.GetGrain<IHelloArchive>(0);\r\n    var _ = await grain.SayHello(\"Hello world\");\r\n    var greetings = await grain.GetGreetings();\r\n    return $\"\"\" \r\n    Keep refreshing your browser  \r\n    {string.Join(\"\\n\", greetings)}\r\n    \"\"\";\r\n});\r\n\r\napp.Run();\r\n\r\npublic class HelloArchiveGrain : IGrain, IHelloArchive\r\n{\r\n    private readonly IPersistentState<GreetingArchive> _archive;\r\n\r\n    public IGrainContext GrainContext { get; }\r\n\r\n    public HelloArchiveGrain(IGrainContext context, [PersistentState(\"archive\", \"ArchiveStorage\")] IPersistentState<GreetingArchive> archive)\r\n    {\r\n        _archive = archive;\r\n        GrainContext = context;\r\n    }\r\n\r\n    public async Task<string> SayHello(string greeting)\r\n    {\r\n        _archive.State.Greetings.Add(greeting);\r\n\r\n        await _archive.WriteStateAsync();\r\n\r\n        return $\"You said: '{greeting}', I say: Hello!\";\r\n    }\r\n\r\n    public Task<IEnumerable<string>> GetGreetings() => Task.FromResult<IEnumerable<string>>(_archive.State.Greetings);\r\n}\r\n\r\n[GenerateSerializer]\r\n[Alias(\"greeting-archive\")]\r\npublic class GreetingArchive\r\n{\r\n    [Id(0)]\r\n    public List<string> Greetings { get; } = new();\r\n}\r\n\r\npublic interface IHelloArchive : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task<string> SayHello(string greeting);\r\n\r\n    Task<IEnumerable<string>> GetGreetings();\r\n}"
  },
  {
    "path": "projects/orleans/orleans-1/README.md",
    "content": "# Orleans  Hello World with ASP.NET Core\r\n\r\nThis sample shows how to use Orleans 8 with ASP.NET Core 8. \r\n\r\nThe changes in Orleans 7 or above compared to previous version of Orleans.\r\n- Simplified configuration of just linking to [Microsoft.Orleans.Server](https://www.nuget.org/packages/Microsoft.Orleans.Server).\r\n- Using the new serializer using `GenerateSerializer` and `Id` attributes.\r\n- Grain now implements `IGrain` instead of inheriting from `Grain` class (POCO grains).\r\n- Removing calls for `ConfigureApplicationParts`.\r\n- Using type alias \r\n\r\n> By default, Orleans will serialize your type by encoding its full name. You can override this by adding an Orleans.AliasAttribute. Doing so will result in your type being serialized using a name which is resistant to renaming the underlying class or moving it between assemblies. Type aliases are globally scoped and you cannot have two aliases with the same value in an application. For generic types, the alias value must include the number of generic parameters preceded by a backtick, for example, MyGenericType<T, U> could have the alias [Alias(\"mytype`2\")].\r\n>\r\n> [What's new in Orleans](https://learn.microsoft.com/en-gb/dotnet/orleans/whats-new-in-orleans)\r\n \r\n"
  },
  {
    "path": "projects/orleans/orleans-1/orleans-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Orleans.Server\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/orleans/orleans-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#8c2ac7\",\r\n        \"activityBar.background\": \"#8c2ac7\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#35250b\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#8c2ac7\",\r\n        \"statusBar.background\": \"#6e219d\",\r\n        \"statusBar.debuggingBackground\": \"#509d21\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#8c2ac7\",\r\n        \"statusBarItem.remoteBackground\": \"#6e219d\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#6e219d\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#6e219d99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#6e219d\"\r\n}"
  },
  {
    "path": "projects/orleans/orleans-2/Program.cs",
    "content": "using System.Net;\r\nusing Orleans.Runtime;\r\nusing Orleans.Configuration;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole();\r\nbuilder.Host.UseOrleans(b =>\r\n    {\r\n        b\r\n            .UseLocalhostClustering()\r\n            .Configure<ClusterOptions>(options =>\r\n            {\r\n                options.ClusterId = \"dev\";\r\n                options.ServiceId = \"orleans-2\";\r\n            })\r\n            .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)\r\n            .AddRedisGrainStorage(\"redis\", options =>\r\n            {\r\n                options.ConfigurationOptions = new StackExchange.Redis.ConfigurationOptions\r\n                {\r\n                    EndPoints = { { \"localhost\", 6379 } },\r\n                    AbortOnConnectFail = false\r\n                };\r\n            });\r\n    });\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async (IGrainFactory client) =>\r\n{\r\n    IHelloArchive grain = client.GetGrain<IHelloArchive>(0)!;\r\n    await grain.SayHello(\"Hello world\");\r\n    var res2 = await grain.GetGreetings();\r\n\r\n    var output = $$\"\"\"\r\n        <html>\r\n        <head>\r\n            <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65\" crossorigin=\"anonymous\">\r\n        </head>\r\n        <body>\r\n        <div class=\"container\">\r\n            <h1>Redis Storage</h1>\r\n            Keep refreshing your browser.<br/>\r\n            You will see the messages keep accumulating.<br/>\r\n            Now stop your application and start again.<br/>\r\n            You will see that your actor persist its data at Redis and the messages will resume at the point where you left the last time.\r\n            <ul>\r\n        \"\"\";\r\n        foreach (var g in res2)\r\n        {\r\n            output += ($\"<li>{g.Message} at {g.TimestampUtc}</li>\");\r\n        }\r\n\r\n        output += \"</ul></container></body></html>\";\r\n    \r\n    return Results.Content(output, \"text/html\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\npublic class HelloArchiveGrain : IGrain, IHelloArchive\r\n{\r\n    private readonly IPersistentState<GreetingArchive> _archive;\r\n\r\n    public IGrainContext GrainContext { get; }\r\n\r\n    public HelloArchiveGrain(IGrainContext context, [PersistentState(\"archive\", \"redis\")] IPersistentState<GreetingArchive> archive)\r\n    {\r\n        _archive = archive;\r\n        GrainContext = context;\r\n    }\r\n\r\n    public async Task<string> SayHello(string greeting)\r\n    {\r\n        _archive.State.Greetings.Add(new Greeting(greeting, DateTime.UtcNow));\r\n\r\n        await _archive.WriteStateAsync();\r\n\r\n        return $\"You said: '{greeting}', I say: Hello!\";\r\n    }\r\n\r\n    public Task<IEnumerable<Greeting>> GetGreetings() => Task.FromResult<IEnumerable<Greeting>>(_archive.State.Greetings);\r\n}\r\n\r\n[GenerateSerializer]\r\n[Alias(\"greeting-archive\")]\r\npublic record GreetingArchive\r\n{\r\n    [Id(0)]\r\n    public List<Greeting> Greetings { get; } = new List<Greeting>();\r\n}\r\n\r\n//Record has implicit ids by default. There is no need fro [Id] attribute here.\r\n//You just have to make sure that you don't play around with the order of the member\r\n[GenerateSerializer]\r\n[Alias(\"greeting\")]\r\npublic record Greeting(string Message, DateTime TimestampUtc); \r\n\r\npublic interface IHelloArchive : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task<string> SayHello(string greeting);\r\n\r\n    Task<IEnumerable<Greeting>> GetGreetings();\r\n}\r\n\r\n"
  },
  {
    "path": "projects/orleans/orleans-2/README.md",
    "content": "# Orleans with Redis persistence\r\n\r\nThis is a sample project that shows how to use Redis as a persistence provider for Orleans.\r\n\r\n**Note** make sure that you have a Redis server running on your machine."
  },
  {
    "path": "projects/orleans/orleans-2/orleans-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Orleans.Server\" Version=\"8.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Persistence.Redis\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/orleans/orleans-2/orleans-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"orleans-2\", \"orleans-2.csproj\", \"{F68B7B2D-6437-462E-B109-F93C9AD01421}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{F68B7B2D-6437-462E-B109-F93C9AD01421}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{F68B7B2D-6437-462E-B109-F93C9AD01421}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{F68B7B2D-6437-462E-B109-F93C9AD01421}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F68B7B2D-6437-462E-B109-F93C9AD01421}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {9DD17FA2-FC45-4472-ABCE-E0B419A32139}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/orleans/orleans-3/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#c2c7c3\",\r\n        \"activityBar.background\": \"#c2c7c3\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#8370cf\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#c2c7c3\",\r\n        \"statusBar.background\": \"#a7afa9\",\r\n        \"statusBar.debuggingBackground\": \"#afa7ad\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#8c978f\",\r\n        \"statusBarItem.remoteBackground\": \"#a7afa9\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#a7afa9\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#a7afa999\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#a7afa9\"\r\n}"
  },
  {
    "path": "projects/orleans/orleans-3/Program.cs",
    "content": "using System.Net;\r\nusing Orleans.Runtime;\r\nusing Orleans.Configuration;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole();\r\nbuilder.Host.UseOrleans(b =>\r\n    {\r\n        b\r\n            .UseLocalhostClustering()\r\n            .Configure<ClusterOptions>(options =>\r\n            {\r\n                options.ClusterId = \"dev\";\r\n                options.ServiceId = \"orleans-2\";\r\n            })\r\n            .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)\r\n            .AddRedisGrainStorage(\"redis-timer\", options =>\r\n            {\r\n                options.ConfigurationOptions = new StackExchange.Redis.ConfigurationOptions\r\n                {\r\n                    EndPoints = { { \"localhost\", 6379 } },\r\n                    AbortOnConnectFail = false\r\n                };\r\n            });\r\n    });\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async (IGrainFactory client) =>\r\n{\r\n    IHelloArchive grain = client.GetGrain<IHelloArchive>(0)!;\r\n    await grain.SayHello(\"Bom dia!\");\r\n    var res2 = await grain.GetGreetings();\r\n\r\n    var output = $$\"\"\"\r\n        <html>\r\n        <head>\r\n            <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65\" crossorigin=\"anonymous\">\r\n        </head>\r\n        <body>\r\n        <div class=\"container\">\r\n            Refresh your browser. There's a timer that keeps adding messages every 5 seconds.<br>\r\n        \"\"\";\r\n        foreach (var g in res2)\r\n        {\r\n            output += ($\"<li>{g.Message} at {g.TimestampUtc}</li>\");\r\n        }\r\n\r\n        output += \"</ul></container></body></html>\";\r\n    \r\n    return Results.Content(output, \"text/html\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class HelloTimerGrain : Grain, IHelloArchive\r\n{\r\n    private readonly IPersistentState<GreetingArchive> _archive;\r\n    private readonly ILogger _log;\r\n\r\n    private string _greeting = string.Empty;\r\n\r\n    private IDisposable? _timerDisposable;\r\n\r\n    public HelloTimerGrain([PersistentState(\"archive\", \"redis-timer\")] IPersistentState<GreetingArchive> archive, ILogger<HelloTimerGrain> log)\r\n    {\r\n        _archive = archive;\r\n        _log = log;\r\n    }\r\n\r\n    public override Task OnActivateAsync(CancellationToken cancellationToken)\r\n    {\r\n        _timerDisposable = this.RegisterTimer(async (object data) =>\r\n        {\r\n            var archive = data as IPersistentState<GreetingArchive>;\r\n            var g = new Greeting(_greeting, DateTime.UtcNow);\r\n            archive!.State.Greetings.Insert(0, g);\r\n            await archive!.WriteStateAsync();\r\n\r\n            _log.LogInformation($\"`{g.Message}` added at {g.TimestampUtc}\");\r\n        }, _archive, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(5));\r\n\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public override Task OnDeactivateAsync(DeactivationReason reason, CancellationToken token)\r\n    {\r\n        _timerDisposable?.Dispose();\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task SayHello(string greeting)\r\n    {\r\n        _greeting = greeting;\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task<IEnumerable<Greeting>> GetGreetings() => Task.FromResult<IEnumerable<Greeting>>(_archive.State.Greetings);\r\n}\r\n\r\n[GenerateSerializer]\r\npublic record GreetingArchive\r\n{\r\n    public List<Greeting> Greetings { get; } = new List<Greeting>();\r\n}\r\n\r\n[GenerateSerializer]\r\npublic record Greeting(string Message, DateTime TimestampUtc);\r\n\r\npublic interface IHelloArchive : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task SayHello(string greeting);\r\n\r\n    Task<IEnumerable<Greeting>> GetGreetings();\r\n}"
  },
  {
    "path": "projects/orleans/orleans-3/README.md",
    "content": "#Timer\r\n\r\nThis sample requires redis. Make sure to run FLUSHALL in redis-cli between samples.\r\n\r\nThis is a sample for Grain.RegisterTimer method. You can find out more about this functionality here.\r\n\r\n- Make sure you have redis installed and running.\r\n- Run the app using dotnet run.\r\n- Open localhost:5000\r\n- When you open the page the first time, there's a timer that will add a new message every 5 seconds.\r\n\r\nWe are using C# records in this sample. It works fine."
  },
  {
    "path": "projects/orleans/orleans-3/orleans-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Orleans.Server\" Version=\"8.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Persistence.Redis\" Version=\"8.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Console\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/orleans/orleans-3/orleans-3.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"orleans-3\", \"orleans-3.csproj\", \"{A56EC8A6-F3D6-41A1-8CC8-B20CE28C0224}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{A56EC8A6-F3D6-41A1-8CC8-B20CE28C0224}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A56EC8A6-F3D6-41A1-8CC8-B20CE28C0224}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A56EC8A6-F3D6-41A1-8CC8-B20CE28C0224}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A56EC8A6-F3D6-41A1-8CC8-B20CE28C0224}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {1BF268AA-95B8-4259-A610-128576996097}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/orleans/orleans-4/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#4228c4\",\r\n        \"activityBar.background\": \"#4228c4\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#d4472b\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#4228c4\",\r\n        \"statusBar.background\": \"#341f9a\",\r\n        \"statusBar.debuggingBackground\": \"#859a1f\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#4228c4\",\r\n        \"statusBarItem.remoteBackground\": \"#341f9a\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#341f9a\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#341f9a99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#341f9a\"\r\n}"
  },
  {
    "path": "projects/orleans/orleans-4/Program.cs",
    "content": "using System.Net;\r\nusing Orleans.Runtime;\r\nusing Orleans.Configuration;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole();\r\nbuilder.Host.UseOrleans(b =>\r\n    {\r\n        b\r\n            .UseLocalhostClustering()\r\n            .Configure<ClusterOptions>(options =>\r\n            {\r\n                options.ClusterId = \"dev\";\r\n                options.ServiceId = \"orleans-2\";\r\n            })\r\n            .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)\r\n            .AddRedisGrainStorage(\"redis-reminder\", options =>\r\n            {\r\n                options.ConfigurationOptions = new StackExchange.Redis.ConfigurationOptions\r\n                {\r\n                    EndPoints = { { \"localhost\", 6379 } },\r\n                    AbortOnConnectFail = false\r\n                };\r\n            })\r\n            .UseInMemoryReminderService();\r\n    });\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async (IGrainFactory client) =>\r\n{\r\n    IHelloArchive grain = client.GetGrain<IHelloArchive>(0)!;\r\n    await grain.SayHello(\"Bom dia!\");\r\n    var res2 = await grain.GetGreetings();\r\n\r\n    var output = $$\"\"\"\r\n        <html>\r\n        <head>\r\n            <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65\" crossorigin=\"anonymous\">\r\n        </head>\r\n        <body>\r\n        <div class=\"container\">\r\n            Click on Set reminder to start the reminder (it will run every 1 minute). Then refresh this page to see the messages being addded.<br>\r\n            <a href=\"set-reminder\">Set reminder</a> - <a href=\"remove-reminder\">Remove reminder</a><br/>\r\n        \"\"\";\r\n        foreach (var g in res2)\r\n        {\r\n            output += ($\"<li>{g.Message} at {g.TimestampUtc}</li>\");\r\n        }\r\n\r\n        output += \"</ul></container></body></html>\";\r\n    \r\n    return Results.Content(output, \"text/html\");\r\n});\r\n\r\n// WARNING - changing state using GET is a terrible terrible practice. I use it here because this is a sample and I am lazy. Don't follow my bad example.\r\napp.MapGet(\"/set-reminder\", async (IGrainFactory client) =>\r\n{\r\n    IHelloArchive grain = client.GetGrain<IHelloArchive>(0)!;\r\n    \r\n    await grain.AddReminder(\"repeat-hello\", repeatEvery: TimeSpan.FromMinutes(1));\r\n    return Results.Redirect(\"/\");\r\n});\r\n\r\n// WARNING - changing state using GET is a terrible terrible practice. I use it here because this is a sample and I am lazy. Don't follow my bad example.\r\napp.MapGet(\"/remove-reminder\", async (IGrainFactory client) =>\r\n{\r\n    IHelloArchive grain = client.GetGrain<IHelloArchive>(0)!;\r\n    \r\n    await grain.RemoveReminder(\"repeat-hello\");\r\n    return Results.Redirect(\"/\");\r\n});\r\n\r\n\r\n\r\napp.Run();\r\n\r\n\r\npublic class HelloReminderGrain : Grain, IHelloArchive, IRemindable\r\n{\r\n    private readonly IPersistentState<GreetingArchive> _archive;\r\n    private readonly ILogger _log;\r\n\r\n    private string _greeting = \"hello world\";\r\n\r\n    public HelloReminderGrain([PersistentState(\"archive\", \"redis-reminder\")] IPersistentState<GreetingArchive> archive, ILogger<HelloReminderGrain> log)\r\n    {\r\n        _archive = archive;\r\n        _log = log;\r\n    }\r\n\r\n    public Task SayHello(string greeting)\r\n    {\r\n        _greeting = greeting;\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task<IEnumerable<Greeting>> GetGreetings() => Task.FromResult<IEnumerable<Greeting>>(_archive.State.Greetings);\r\n\r\n    public async Task ReceiveReminder(string reminderName, TickStatus status)\r\n    {\r\n        _log.LogInformation($\"Receive reminder {reminderName} on { DateTime.UtcNow } with status { status }\");\r\n        var g = new Greeting(_greeting, DateTime.UtcNow);\r\n        _archive!.State.Greetings.Insert(0, g);\r\n        await _archive!.WriteStateAsync();\r\n\r\n        _log.LogInformation($\"`{g.Message}` added at {g.TimestampUtc}\");\r\n    }\r\n\r\n    public async Task AddReminder(string reminder, TimeSpan repeatEvery)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(reminder))\r\n            throw new ArgumentNullException(nameof(reminder));\r\n\r\n        var r = await this.GetReminder(reminder);\r\n\r\n        if (r is null)\r\n        {\r\n            _log.LogInformation($\"RegisterOrUpdateReminder {reminder}\");\r\n            await this.RegisterOrUpdateReminder(reminder, TimeSpan.FromSeconds(1), repeatEvery);\r\n        }\r\n    }\r\n\r\n    public async Task RemoveReminder(string reminder)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(reminder))\r\n            throw new ArgumentNullException(nameof(reminder));\r\n\r\n        var r = await this.GetReminder(reminder);\r\n\r\n        if (r is object)\r\n        {\r\n            _log.LogInformation($\"UnregisterReminder {reminder}\");\r\n            await this.UnregisterReminder(r);\r\n        }\r\n    }\r\n}\r\n\r\n[GenerateSerializer]\r\npublic record GreetingArchive\r\n{\r\n    public List<Greeting> Greetings { get; } = new List<Greeting>();\r\n}\r\n\r\n[GenerateSerializer]\r\npublic record Greeting(string Message, DateTime TimestampUtc);\r\n\r\npublic interface IHelloArchive : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddReminder(string reminder, TimeSpan repeatEvery);\r\n\r\n    Task RemoveReminder(string reminder);\r\n\r\n    Task SayHello(string greeting);\r\n\r\n    Task<IEnumerable<Greeting>> GetGreetings();\r\n}"
  },
  {
    "path": "projects/orleans/orleans-4/README.md",
    "content": "#Timer\r\n\r\nThis sample requires redis. Make sure to run FLUSHALL in redis-cli between samples.\r\n\r\nThis is a sample for Grain.RegisterTimer method. You can find out more about this functionality here.\r\n\r\n- Make sure you have redis installed and running.\r\n- Run the app using dotnet run.\r\n- Open localhost:5000\r\n- When you open the page the first time, there's a timer that will add a new message every 5 seconds.\r\n\r\nWe are using C# records in this sample. It works fine."
  },
  {
    "path": "projects/orleans/orleans-4/orleans-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Orleans.Server\" Version=\"8.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Persistence.Redis\" Version=\"8.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Console\" Version=\"8.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Reminders\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/orleans/orleans-4/orleans-4.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"orleans-4\", \"orleans-4.csproj\", \"{48C9BCFF-3D19-4BA0-ABB0-F32564BA03C9}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{48C9BCFF-3D19-4BA0-ABB0-F32564BA03C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{48C9BCFF-3D19-4BA0-ABB0-F32564BA03C9}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{48C9BCFF-3D19-4BA0-ABB0-F32564BA03C9}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{48C9BCFF-3D19-4BA0-ABB0-F32564BA03C9}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {439571F3-B56C-46F2-B2A2-764690A1A033}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/orleans/orleans-5/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#e485d3\",\r\n        \"activityBar.background\": \"#e485d3\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#ecf3cb\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#e485d3\",\r\n        \"statusBar.background\": \"#db5bc4\",\r\n        \"statusBar.debuggingBackground\": \"#5bdb72\",\r\n        \"statusBar.debuggingForeground\": \"#15202b\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#d231b5\",\r\n        \"statusBarItem.remoteBackground\": \"#db5bc4\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#db5bc4\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#db5bc499\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#db5bc4\"\r\n}"
  },
  {
    "path": "projects/orleans/orleans-5/Program.cs",
    "content": "using System.Net;\r\nusing Orleans.Configuration;\r\nusing Orleans.Concurrency;\r\nusing System.Text.Json.Serialization;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddHttpClient();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole();\r\nbuilder.Host.UseOrleans(b =>\r\n    {\r\n        b\r\n            .UseLocalhostClustering()\r\n            .Configure<ClusterOptions>(options =>\r\n            {\r\n                options.ClusterId = \"dev\";\r\n                options.ServiceId = \"orleans-5\";\r\n            })\r\n            .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback);\r\n    });\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async (IGrainFactory client) =>\r\n{\r\n    var timezone = \"Africa/Cairo\";\r\n    ITimeKeeper grain = client.GetGrain<ITimeKeeper>(timezone)!;\r\n    var localTime = await grain.GetCurrentTime(timezone);\r\n\r\n    var output = $$\"\"\"\r\n        <html>\r\n        <head>\r\n            <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65\" crossorigin=\"anonymous\">\r\n        </head>\r\n        <body>\r\n        <div class=\"container\">\r\n            Local time in {{localTime.timeZone}} is {{localTime.dateTime}}\r\n        </body></html>\r\n        \"\"\";\r\n    \r\n    return Results.Content(output, \"text/html\");\r\n});\r\n\r\n\r\napp.Run();\r\n\r\n\r\n[StatelessWorker]\r\npublic class TimeKeeperGrain : Grain, ITimeKeeper\r\n{\r\n    private readonly ILogger _log;\r\n\r\n    private readonly IHttpClientFactory _httpFactory;\r\n\r\n    public TimeKeeperGrain(ILogger<TimeKeeperGrain> log, IHttpClientFactory httpFactory)\r\n    {\r\n        _log = log;\r\n        _httpFactory = httpFactory;\r\n    }\r\n\r\n    public async Task<(DateTimeOffset dateTime, string timeZone)> GetCurrentTime(string timeZone)\r\n    {\r\n        var client = _httpFactory.CreateClient();\r\n\r\n        var result = await client.GetAsync($\"http://worldtimeapi.org/api/timezone/{timeZone}\");\r\n        var worldClock = await result.Content.ReadFromJsonAsync<WorldTime>();\r\n\r\n        return (worldClock!.DateTime, timeZone);\r\n    }\r\n}\r\n\r\npublic interface ITimeKeeper : IGrainWithStringKey\r\n{\r\n    Task<(DateTimeOffset dateTime, string timeZone)> GetCurrentTime(string timeZone);\r\n}\r\n\r\npublic class WorldTime\r\n{\r\n    [JsonPropertyName(\"datetime\")]\r\n    public DateTimeOffset DateTime { get; set; }\r\n}"
  },
  {
    "path": "projects/orleans/orleans-5/README.md",
    "content": "# HttpClient and Stateless Worker Grain\r\n\r\nThis same demonstrates how to use HttpClient in a grain. It uses the same DI mechanism in your normal .NET Core app. \r\n\r\n- The `grain` is marked at `[StatelessWorker]` because in **this case**, it keeps no state and Orleans is free to create multiple activations of this grain. You can read more about **Stateless Worker** grains [here](https://learn.microsoft.com/en-us/dotnet/orleans/grains/stateless-worker-grains).\r\n- We are using `System.Json.Text` serializer  `ReadFromJsonAsync` method."
  },
  {
    "path": "projects/orleans/orleans-5/orleans-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Orleans.Server\" Version=\"8.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Console\" Version=\"8.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Reminders\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/orleans/orleans-5/orleans-5.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"orleans-5\", \"orleans-5.csproj\", \"{E1FF1709-0A2C-40ED-BFC3-4CE2C55AF635}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{E1FF1709-0A2C-40ED-BFC3-4CE2C55AF635}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{E1FF1709-0A2C-40ED-BFC3-4CE2C55AF635}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{E1FF1709-0A2C-40ED-BFC3-4CE2C55AF635}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{E1FF1709-0A2C-40ED-BFC3-4CE2C55AF635}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {C19CE51D-8342-41AE-ABC5-6206197F2B73}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/orleans/reminder/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#86d565\",\r\n        \"activityBar.background\": \"#86d565\",\r\n        \"activityBar.foreground\": \"#15202b\",\r\n        \"activityBar.inactiveForeground\": \"#15202b99\",\r\n        \"activityBarBadge.background\": \"#5075cf\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#15202b99\",\r\n        \"sash.hoverBorder\": \"#86d565\",\r\n        \"statusBar.background\": \"#67ca3d\",\r\n        \"statusBar.debuggingBackground\": \"#a03dca\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#15202b\",\r\n        \"statusBarItem.hoverBackground\": \"#52a62d\",\r\n        \"statusBarItem.remoteBackground\": \"#67ca3d\",\r\n        \"statusBarItem.remoteForeground\": \"#15202b\",\r\n        \"titleBar.activeBackground\": \"#67ca3d\",\r\n        \"titleBar.activeForeground\": \"#15202b\",\r\n        \"titleBar.inactiveBackground\": \"#67ca3d99\",\r\n        \"titleBar.inactiveForeground\": \"#15202b99\"\r\n    },\r\n    \"peacock.color\": \"#67ca3d\"\r\n}"
  },
  {
    "path": "projects/orleans/reminder/Program.cs",
    "content": "using System.Net;\r\nusing Orleans.Runtime;\r\nusing Orleans.Configuration;\r\nusing Microsoft.Extensions.Logging.Console;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole();\r\nbuilder.Host.UseOrleans(builder =>\r\n    {\r\n        builder\r\n            .UseLocalhostClustering()\r\n            .UseInMemoryReminderService()\r\n            .Configure<ClusterOptions>(options =>\r\n            {\r\n                options.ClusterId = \"dev\";\r\n                options.ServiceId = \"HelloWorldApp\";\r\n            })\r\n            .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)\r\n            .AddRedisGrainStorage(\"redis-reminder\", options =>\r\n            {\r\n                options.ConfigurationOptions = new StackExchange.Redis.ConfigurationOptions\r\n                {\r\n                    EndPoints = { { \"localhost\", 6379 } },\r\n                    AbortOnConnectFail = false\r\n                };\r\n            });\r\n    });\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    IGrainFactory client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    IHelloArchive grain = client.GetGrain<IHelloArchive>(0)!;\r\n    await grain.SayHello(\"Hello world \" + new Random().Next());\r\n    var res2 = await grain.GetGreetings();\r\n\r\n    await context.Response.WriteAsync(@\"<html><head><link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/css/uikit.min.css\"\" /></head>\");\r\n    await context.Response.WriteAsync(\"<body>\");\r\n    await context.Response.WriteAsync(\"Click on Set reminder to start the reminder (it will run every 1 minute). Then refresh this page to see the messages being addded.<br>\");\r\n    await context.Response.WriteAsync(@\"<a href=\"\"set-reminder\"\">Set reminder</a> - <a href=\"\"remove-reminder\"\">Remove reminder</a><br/>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach(var g in res2)\r\n    {\r\n        await context.Response.WriteAsync($\"<li>{g.Message} at {g.TimestampUtc}</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(\"</body></html>\");\r\n});\r\n\r\n// WARNING - changing state using GET is a terrible terrible practice. I use it here because this is a sample and I am lazy. Don't follow my bad example.\r\napp.MapGet(\"/set-reminder\", async context =>\r\n{\r\n    IGrainFactory client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    IHelloArchive grain = client.GetGrain<IHelloArchive>(0)!;\r\n    \r\n    await grain.AddReminder(\"repeat-hello\", repeatEvery: TimeSpan.FromMinutes(1));\r\n\r\n    context.Response.Redirect(\"/\");\r\n});\r\n\r\n// WARNING - changing state using GET is a terrible terrible practice. I use it here because this is a sample and I am lazy. Don't follow my bad example.\r\napp.MapGet(\"/remove-reminder\", async context =>\r\n{\r\n    IGrainFactory client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    IHelloArchive grain = client.GetGrain<IHelloArchive>(0)!;\r\n    \r\n    await grain.RemoveReminder(\"repeat-hello\");\r\n    context.Response.Redirect(\"/\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class HelloReminderGrain : Grain, IHelloArchive, IRemindable\r\n{\r\n    private readonly IPersistentState<GreetingArchive> _archive;\r\n    private readonly ILogger _log;\r\n\r\n    private string _greeting = \"hello world\";\r\n\r\n    public HelloReminderGrain([PersistentState(\"archive\", \"redis-reminder\")] IPersistentState<GreetingArchive> archive, ILogger<HelloReminderGrain> log)\r\n    {\r\n        _archive = archive;\r\n        _log = log;\r\n    }\r\n\r\n    public Task SayHello(string greeting)\r\n    {\r\n        _greeting = greeting;\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task<IEnumerable<Greeting>> GetGreetings() => Task.FromResult<IEnumerable<Greeting>>(_archive.State.Greetings);\r\n\r\n    public async Task ReceiveReminder(string reminderName, TickStatus status)\r\n    {\r\n    _log.LogInformation(\"Receive reminder {ReminderName} on {Timestamp} with status {Status}\", reminderName, DateTime.UtcNow, status);\r\n    _log.LogInformation(\"Receive reminder {ReminderName} on {Timestamp} with status {Status}\", reminderName, DateTime.UtcNow, status);\r\n        var g = new Greeting(_greeting, DateTime.UtcNow);\r\n        _archive!.State.Greetings.Insert(0, g);\r\n        await _archive!.WriteStateAsync();\r\n\r\n    _log.LogInformation(\"`{Message}` added at {Timestamp}\", g.Message, g.TimestampUtc);\r\n    }\r\n\r\n    public async Task AddReminder(string reminder, TimeSpan repeatEvery)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(reminder))\r\n            throw new ArgumentNullException(nameof(reminder));\r\n        var r = await this.GetReminder(reminder);\r\n        if (r is null)\r\n        {\r\n            _log.LogInformation(\"RegisterOrUpdateReminder {Reminder}\", reminder);\r\n            await this.RegisterOrUpdateReminder(reminder, TimeSpan.FromSeconds(1), repeatEvery);\r\n        }\r\n    }\r\n\r\n    public async Task RemoveReminder(string reminder)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(reminder))\r\n            throw new ArgumentNullException(nameof(reminder));\r\n        var r = await this.GetReminder(reminder);\r\n        if (r is object)\r\n        {\r\n            _log.LogInformation(\"UnregisterReminder {Reminder}\", reminder);\r\n            await this.UnregisterReminder(r);\r\n        }\r\n    }\r\n}\r\n \r\n[GenerateSerializer]\r\npublic record GreetingArchive\r\n{\r\n    public List<Greeting> Greetings { get; } = new List<Greeting>();\r\n}\r\n\r\n[GenerateSerializer]\r\npublic record Greeting(string Message, DateTime TimestampUtc);\r\n\r\npublic interface IHelloArchive : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddReminder(string reminder, TimeSpan repeatEvery);\r\n\r\n    Task RemoveReminder(string reminder);\r\n\r\n    Task SayHello(string greeting);\r\n\r\n    Task<IEnumerable<Greeting>> GetGreetings();\r\n}\r\n"
  },
  {
    "path": "projects/orleans/reminder/README.md",
    "content": "# Reminder\r\n\r\n**This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples.\r\n\r\nThis is a sample for `Grain.RegisterOrUpdateReminder` method. You can find out more about this functionality [here](https://dotnet.github.io/orleans/1.5/Documentation/Core-Features/Timers-and-Reminders.html).\r\n\r\n- Make sure you have redis installed and running.\r\n- Run the app using `dotnet run`.\r\n- Open `localhost:5000`\r\n- When you open the page the first time, click on \"Set reminder\" link. It will start a reminder that will repeat every 1 minute (which is the most minimum value allowed for reminder).\r\n- This reminder will keep running until you stop it by clicking on \"Remove reminder\" or you restart the `silo`.\r\n\r\nWe are using C# records in this sample. It works fine."
  },
  {
    "path": "projects/orleans/reminder/reminder.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Orleans.Server\" Version=\"8.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging\" Version=\"8.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Console\" Version=\"8.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Reminders\" Version=\"8.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Persistence.Redis\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/orleans/reminder/reminder.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"reminder\", \"reminder.csproj\", \"{15798C7B-AF82-4098-A8FB-239DADA5C064}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{15798C7B-AF82-4098-A8FB-239DADA5C064}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{15798C7B-AF82-4098-A8FB-239DADA5C064}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{15798C7B-AF82-4098-A8FB-239DADA5C064}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{15798C7B-AF82-4098-A8FB-239DADA5C064}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {616E92BA-2B57-4840-9CDD-099D9888A5C6}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/orleans/rss-reader/Program.cs",
    "content": "using System.Net;\r\nusing Orleans;\r\nusing Orleans.Runtime;\r\nusing Orleans.Configuration;\r\nusing Orleans.Hosting;\r\nusing System.Xml;\r\nusing Microsoft.SyndicationFeed.Atom;\r\nusing Microsoft.SyndicationFeed;\r\nusing Microsoft.SyndicationFeed.Rss;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddHttpClient();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole();\r\nbuilder.Host.UseOrleans(builder =>\r\n{\r\n    builder\r\n        .UseLocalhostClustering()\r\n        .UseInMemoryReminderService()\r\n        .Configure<ClusterOptions>(options =>\r\n        {\r\n            options.ClusterId = \"dev\";\r\n            options.ServiceId = \"http-client\";\r\n        })\r\n        .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)\r\n        .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(FeedSourceGrain).Assembly).WithReferences())\r\n        .AddRedisGrainStorage(\"redis-rss-reader\", optionsBuilder => optionsBuilder.Configure(options =>\r\n        {\r\n            options.ConnectionString = \"localhost:6379\";\r\n            options.UseJson = true;\r\n            options.DatabaseNumber = 1;\r\n        }));\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    var client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    var feedSourceGrain = client.GetGrain<IFeedSource>(0)!;\r\n\r\n    await feedSourceGrain.AddAsync(new FeedSource\r\n    {\r\n        Type = FeedType.Rss,\r\n        Url = \"http://www.scripting.com/rss.xml\",\r\n        Website = \"http://www.scripting.com\",\r\n        Title = \"Scripting News\"\r\n    });\r\n\r\n    await feedSourceGrain.AddAsync(new FeedSource\r\n    {\r\n        Type = FeedType.Atom,\r\n        Url = \"https://www.reddit.com/r/dotnet.rss\",\r\n        Website = \"https://www.reddit.com/r/dotnet\",\r\n        Title = \"Reddit/r/dotnet\"\r\n    });\r\n\r\n    var sources = await feedSourceGrain.GetAllAsync();\r\n\r\n    foreach (var s in sources)\r\n    {\r\n        var feedFetcherGrain = client.GetGrain<IFeedFetcher>(s.Url.ToString());\r\n        await feedFetcherGrain.FetchAsync(s);\r\n    }\r\n\r\n    var feedResultsGrain = client.GetGrain<IFeedItemResults>(0);\r\n    var feedItems = await feedResultsGrain.GetAllAsync();\r\n\r\n    await context.Response.WriteAsync(@\"<html>\r\n                    <head>\r\n                        <link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/css/uikit.min.css\"\" />\r\n                        <title>Orleans RSS Reader</title>\r\n                    </head>\");\r\n    await context.Response.WriteAsync(\"<body><div class=\\\"uk-container\\\">\");\r\n    await context.Response.WriteAsync(\"<ul class=\\\"uk-list\\\">\");\r\n    foreach (var i in feedItems)\r\n    {\r\n        await context.Response.WriteAsync(\"<li class=\\\"uk-card uk-card-default uk-card-body\\\">\");\r\n        if (!string.IsNullOrWhiteSpace(i.Title))\r\n            await context.Response.WriteAsync($\"{ i.Title }<br/>\");\r\n\r\n        await context.Response.WriteAsync(i.Description ?? \"\");\r\n\r\n        if (i.Url is object)\r\n            await context.Response.WriteAsync($\"<br/><a href=\\\"{i.Url}\\\">link</a>\");\r\n\r\n        await context.Response.WriteAsync($\"<div style=\\\"font-size:small;\\\">published on: {i.PublishedOn}</div>\");\r\n        await context.Response.WriteAsync($\"<div style=\\\"font-size:small;\\\">source: <a href=\\\"{i.Channel?.Website}\\\">{i.Channel?.Title}</a></div>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(\"</div></body></html>\");\r\n});\r\n\r\napp.Run();\r\n\r\nclass FeedItemResultGrain : Grain, IFeedItemResults\r\n{\r\n    private readonly IPersistentState<FeedItemStore> _storage;\r\n\r\n    public FeedItemResultGrain([PersistentState(\"feed-item-results\", \"redis-rss-reader\")] IPersistentState<FeedItemStore> storage) => _storage = storage;\r\n\r\n    public async Task AddAsync(List<FeedItem> items)\r\n    {\r\n        //make sure there is no duplication\r\n        foreach (var i in items.Where(x => !string.IsNullOrWhiteSpace(x.Id)))\r\n        {\r\n            if (!_storage.State.Results.Exists(x => x.Id?.Equals(i.Id, StringComparison.OrdinalIgnoreCase) ?? false))\r\n                _storage.State.Results.Add(i);\r\n        }\r\n        await _storage.WriteStateAsync();\r\n    }\r\n\r\n    public Task<List<FeedItem>> GetAllAsync() => Task.FromResult(_storage.State.Results.OrderByDescending(x => x.PublishedOn).ToList());\r\n\r\n    public async Task ClearAsync()\r\n    {\r\n        _storage.State.Results.Clear();\r\n        await _storage.WriteStateAsync();\r\n    }\r\n}\r\n\r\nrecord FeedItemStore\r\n{\r\n    public List<FeedItem> Results { get; set; } = new List<FeedItem>();\r\n}\r\n\r\ninterface IFeedItemResults : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddAsync(List<FeedItem> items);\r\n\r\n    Task<List<FeedItem>> GetAllAsync();\r\n\r\n    Task ClearAsync();\r\n}\r\n\r\nclass FeedSourceGrain : Grain, IFeedSource\r\n{\r\n    private readonly IPersistentState<FeedSourceStore> _storage;\r\n\r\n    public FeedSourceGrain([PersistentState(\"feed-source\", \"redis-rss-reader\")] IPersistentState<FeedSourceStore> storage) => _storage = storage;\r\n\r\n    public async Task AddAsync(FeedSource source)\r\n    {\r\n        if (_storage.State.Sources.Find(x => x.Url == source.Url) is null)\r\n        {\r\n            _storage.State.Sources.Add(source);\r\n            await _storage.WriteStateAsync();\r\n        }\r\n    }\r\n\r\n    public Task<List<FeedSource>> GetAllAsync() => Task.FromResult(_storage.State.Sources);\r\n}\r\n\r\nrecord FeedSourceStore\r\n{\r\n    public List<FeedSource> Sources { get; set; } = new List<FeedSource>();\r\n}\r\n\r\ninterface IFeedSource : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddAsync(FeedSource source);\r\n\r\n    Task<List<FeedSource>> GetAllAsync();\r\n}\r\n\r\ninterface IFeedFetcher : Orleans.IGrainWithStringKey\r\n{\r\n    Task FetchAsync(FeedSource source);\r\n}\r\n\r\nclass FeedFetchGrain : Grain, IFeedFetcher\r\n{\r\n    readonly IGrainFactory _grainFactory;\r\n\r\n    public FeedFetchGrain(IGrainFactory grainFactory) => _grainFactory = grainFactory;\r\n\r\n    public async Task FetchAsync(FeedSource source)\r\n    {\r\n        var storage = _grainFactory.GetGrain<IFeedItemResults>(0);\r\n        var results = await ReadFeedAsync(source);\r\n        await storage.AddAsync(results);\r\n    }\r\n\r\n    public async Task<List<FeedItem>> ReadFeedAsync(FeedSource source)\r\n    {\r\n        var feed = new List<FeedItem>();\r\n\r\n        try\r\n        {\r\n            using var xmlReader = XmlReader.Create(source.Url.ToString(), new XmlReaderSettings() { Async = true });\r\n            if (source.Type == FeedType.Rss)\r\n            {\r\n                var feedReader = new RssFeedReader(xmlReader);\r\n\r\n                // Read the feed\r\n                while (await feedReader.Read())\r\n                {\r\n                    switch (feedReader.ElementType)\r\n                    {\r\n                        // Read Item\r\n                        case SyndicationElementType.Item:\r\n                            var item = await feedReader.ReadItem();\r\n                            feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(item)));\r\n                            break;\r\n\r\n                        default:\r\n                            var content = await feedReader.ReadContent();\r\n\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                var feedReader = new AtomFeedReader(xmlReader);\r\n\r\n                while (await feedReader.Read())\r\n                {\r\n                    switch (feedReader.ElementType)\r\n                    {\r\n                        // Read Item\r\n                        case SyndicationElementType.Item:\r\n                            var entry = await feedReader.ReadEntry();\r\n                            feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(entry)));\r\n                            break;\r\n\r\n                        default:\r\n                            var content = await feedReader.ReadContent();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return feed;\r\n        }\r\n        catch\r\n        {\r\n            return new List<FeedItem>();\r\n        }\r\n    }\r\n}\r\n\r\nrecord FeedChannel\r\n{\r\n    public string? Title { get; set; }\r\n\r\n    public string? Website { get; set; }\r\n\r\n    public Uri? Url { get; set; }\r\n\r\n    public bool HideTitle { get; set; }\r\n\r\n    public bool HideDescription { get; set; }\r\n}\r\n\r\nclass FeedSource\r\n{\r\n    public string Url { get; set; } = string.Empty;\r\n\r\n    public string Title { get; set; } = string.Empty;\r\n\r\n    public string? Website { get; set; }\r\n\r\n    public FeedType Type { get; set; }\r\n\r\n    public bool HideTitle { get; set; }\r\n\r\n    public bool HideDescription { get; set; }\r\n\r\n    public FeedChannel ToChannel()\r\n    {\r\n        return new FeedChannel\r\n        {\r\n            Title = Title,\r\n            Website = Website,\r\n            HideTitle = HideTitle,\r\n            HideDescription = HideDescription\r\n        };\r\n    }\r\n}\r\n\r\nrecord FeedItem\r\n{\r\n    public FeedChannel? Channel { get; set; }\r\n\r\n    public string? Id { get; set; }\r\n\r\n    public string? Title { get; set; }\r\n\r\n    public string? Description { get; set; }\r\n\r\n    public Uri? Url { get; set; }\r\n\r\n    public DateTimeOffset PublishedOn { get; set; }\r\n\r\n    public FeedItem()\r\n    {\r\n\r\n    }\r\n\r\n    public FeedItem(FeedChannel channel, SyndicationItem item)\r\n    {\r\n        Channel = channel;\r\n        Id = item.Id;\r\n        Title = item.Title;\r\n        Description = item.Description;\r\n        var link = item.Links.FirstOrDefault();\r\n        if (link is object)\r\n            Url = link.Uri;\r\n\r\n        if (item.LastUpdated == default(DateTimeOffset))\r\n            PublishedOn = item.Published;\r\n        else\r\n            PublishedOn = item.LastUpdated;\r\n    }\r\n}\r\n\r\nenum FeedType\r\n{\r\n    Atom,\r\n    Rss\r\n}\r\n"
  },
  {
    "path": "projects/orleans/rss-reader/README.md",
    "content": "# RSS Reader\r\n\r\n**This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples.\r\n\r\nThis is a simple RSS reader that uses two storage, one for storing a feed source and another for storing feed results. You can keep refreshing your browser and the RSS Reader will only pick items that have not been previously inserted.\r\n\r\n- Make sure you have redis installed and running.\r\n- Run the app using `dotnet run`.\r\n- Open `localhost:5000`\r\n- You can keep refreshing the browser page as much as you want and it will only pick up and store unique feed items."
  },
  {
    "path": "projects/orleans/rss-reader/rss-reader.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.SyndicationFeed.ReaderWriter\" Version=\"1.0.2\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Hosting\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Console\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.OrleansRuntime\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.OrleansProviders\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Core\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.CodeGenerator.MSBuild\" Version=\"3.6.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Orleans.Persistence.Redis\" Version=\"3.2.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-2/Program.cs",
    "content": "using System.Net;\r\nusing Orleans;\r\nusing Orleans.Runtime;\r\nusing Orleans.Configuration;\r\nusing Orleans.Hosting;\r\nusing System.Xml;\r\nusing Microsoft.SyndicationFeed.Atom;\r\nusing Microsoft.SyndicationFeed;\r\nusing Microsoft.SyndicationFeed.Rss;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddHttpClient();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole();\r\nbuilder.Host.UseOrleans(builder =>\r\n{\r\n    builder\r\n        .UseLocalhostClustering()\r\n        .UseInMemoryReminderService()\r\n        .Configure<ClusterOptions>(options =>\r\n        {\r\n            options.ClusterId = \"dev\";\r\n            options.ServiceId = \"http-client\";\r\n        })\r\n        .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)\r\n        .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(FeedSourceGrain).Assembly).WithReferences())\r\n        .AddRedisGrainStorage(\"redis-rss-reader-2\", optionsBuilder => optionsBuilder.Configure(options =>\r\n        {\r\n            options.ConnectionString = \"localhost:6379\";\r\n            options.UseJson = true;\r\n            options.DatabaseNumber = 1;\r\n        }));\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    var client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    var feedSourceGrain = client.GetGrain<IFeedSource>(0)!;\r\n\r\n    await feedSourceGrain.AddAsync(new FeedSource\r\n    {\r\n        Type = FeedType.Rss,\r\n        Url = \"http://www.scripting.com/rss.xml\",\r\n        Website = \"http://www.scripting.com\",\r\n        Title = \"Scripting News\",\r\n        UpdateFrequencyInMinutes = 15\r\n    });\r\n\r\n    await feedSourceGrain.AddAsync(new FeedSource\r\n    {\r\n        Type = FeedType.Atom,\r\n        Url = \"https://www.reddit.com/r/dotnet.rss\",\r\n        Website = \"https://www.reddit.com/r/dotnet\",\r\n        Title = \"Reddit/r/dotnet\",\r\n        UpdateFrequencyInMinutes = 1\r\n    });\r\n\r\n    var sources = await feedSourceGrain.GetAllAsync();\r\n\r\n    foreach (var s in sources)\r\n    {\r\n        var feedFetcherReminderGrain = client.GetGrain<IFeedFetcherReminder>(0);\r\n                    // AddReminder is indempotent\r\n                    await feedFetcherReminderGrain.AddReminder(s.Url, s.UpdateFrequencyInMinutes);\r\n    }\r\n\r\n    var feedResultsGrain = client.GetGrain<IFeedItemResults>(0);\r\n    var feedItems = await feedResultsGrain.GetAllAsync();\r\n\r\n    await context.Response.WriteAsync(@\"<html>\r\n                    <head>\r\n                        <link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/css/uikit.min.css\"\" />\r\n                        <title>Orleans RSS Reader</title>\r\n                    </head>\");\r\n    await context.Response.WriteAsync(\"<body><div class=\\\"uk-container\\\">\");\r\n\r\n    if (feedItems.Count == 0)\r\n        await context.Response.WriteAsync(\"<p>Please refresh your browser again if you see no feeds displayed.</p>\");\r\n\r\n    await context.Response.WriteAsync(\"<ul class=\\\"uk-list\\\">\");\r\n    foreach (var i in feedItems)\r\n    {\r\n        await context.Response.WriteAsync(\"<li class=\\\"uk-card uk-card-default uk-card-body\\\">\");\r\n        if (!string.IsNullOrWhiteSpace(i.Title))\r\n            await context.Response.WriteAsync($\"{ i.Title }<br/>\");\r\n\r\n        await context.Response.WriteAsync(i.Description ?? \"\");\r\n\r\n        if (i.Url is object)\r\n            await context.Response.WriteAsync($\"<br/><a href=\\\"{i.Url}\\\">link</a>\");\r\n\r\n        await context.Response.WriteAsync($\"<div style=\\\"font-size:small;\\\">published on: {i.PublishedOn}</div>\");\r\n        await context.Response.WriteAsync($\"<div style=\\\"font-size:small;\\\">source: <a href=\\\"{i.Channel?.Website}\\\">{i.Channel?.Title}</a></div>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(\"</div></body></html>\");\r\n});\r\n\r\n\r\napp.Run();\r\n\r\nclass FeedFetcherReminder : Grain, IRemindable, IFeedFetcherReminder\r\n{\r\n    readonly IGrainFactory _grainFactory;\r\n\r\n    readonly ILogger _logger;\r\n\r\n    public FeedFetcherReminder(IGrainFactory grainFactory, ILogger<FeedFetcherReminder> logger)\r\n    {\r\n        _grainFactory = grainFactory;\r\n        _logger = logger;\r\n    }\r\n\r\n    public async Task AddReminder(string reminder, short repeatEveryMinute)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(reminder))\r\n            throw new ArgumentNullException(nameof(reminder));\r\n\r\n        var r = await GetReminder(reminder);\r\n\r\n        if (r is not object)\r\n            await RegisterOrUpdateReminder(reminder, dueTime: TimeSpan.FromSeconds(1), period: TimeSpan.FromMinutes(repeatEveryMinute));\r\n    }\r\n\r\n    public async Task ReceiveReminder(string reminderName, TickStatus status)\r\n    {\r\n        _logger.Info($\"Receive {reminderName} reminder\");\r\n\r\n        var feedSourceGrain = _grainFactory.GetGrain<IFeedSource>(0)!;\r\n\r\n        var feedSource = await feedSourceGrain.FindFeedSourceByUrlAsync(reminderName);\r\n\r\n        if (feedSource is object)\r\n        {\r\n            _logger.Info($\"Fetching {feedSource.Url}\");\r\n            var feedFetcherGrain = _grainFactory.GetGrain<IFeedFetcher>(feedSource.Url);\r\n            await feedFetcherGrain.FetchAsync(feedSource);\r\n        }\r\n    }\r\n}\r\n\r\ninterface IFeedFetcherReminder : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddReminder(string reminder, short repeatEveryMinute);\r\n}\r\n\r\nclass FeedItemResultGrain : Grain, IFeedItemResults\r\n{\r\n    private readonly IPersistentState<FeedItemStore> _storage;\r\n\r\n    public FeedItemResultGrain([PersistentState(\"feed-item-results-2\", \"redis-rss-reader-2\")] IPersistentState<FeedItemStore> storage) => _storage = storage;\r\n\r\n    public async Task AddAsync(List<FeedItem> items)\r\n    {\r\n        //make sure there is no duplication\r\n        foreach (var i in items.Where(x => !string.IsNullOrWhiteSpace(x.Id)))\r\n        {\r\n            if (!_storage.State.Results.Exists(x => x.Id?.Equals(i.Id, StringComparison.OrdinalIgnoreCase) ?? false))\r\n                _storage.State.Results.Add(i);\r\n        }\r\n        await _storage.WriteStateAsync();\r\n    }\r\n\r\n    public Task<List<FeedItem>> GetAllAsync() => Task.FromResult(_storage.State.Results.OrderByDescending(x => x.PublishedOn).ToList());\r\n\r\n    public async Task ClearAsync()\r\n    {\r\n        _storage.State.Results.Clear();\r\n        await _storage.WriteStateAsync();\r\n    }\r\n}\r\n\r\nrecord FeedItemStore\r\n{\r\n    public List<FeedItem> Results { get; set; } = new List<FeedItem>();\r\n}\r\n\r\ninterface IFeedItemResults : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddAsync(List<FeedItem> items);\r\n\r\n    Task<List<FeedItem>> GetAllAsync();\r\n\r\n    Task ClearAsync();\r\n}\r\n\r\nclass FeedSourceGrain : Grain, IFeedSource\r\n{\r\n    private readonly IPersistentState<FeedSourceStore> _storage;\r\n\r\n    public FeedSourceGrain([PersistentState(\"feed-source-2\", \"redis-rss-reader-2\")] IPersistentState<FeedSourceStore> storage) => _storage = storage;\r\n\r\n    public async Task AddAsync(FeedSource source)\r\n    {\r\n        if (_storage.State.Sources.Find(x => x.Url == source.Url) is null)\r\n        {\r\n            _storage.State.Sources.Add(source);\r\n            await _storage.WriteStateAsync();\r\n        }\r\n    }\r\n    public Task<List<FeedSource>> GetAllAsync() => Task.FromResult(_storage.State.Sources);\r\n    public Task<FeedSource?> FindFeedSourceByUrlAsync(string url) =>\r\n        Task.FromResult(_storage.State.Sources.Find(x => x.Url.Equals(url, StringComparison.Ordinal)));\r\n}\r\n\r\nrecord FeedSourceStore\r\n{\r\n    public List<FeedSource> Sources { get; set; } = new List<FeedSource>();\r\n}\r\n\r\ninterface IFeedSource : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddAsync(FeedSource source);\r\n\r\n    Task<List<FeedSource>> GetAllAsync();\r\n\r\n    Task<FeedSource?> FindFeedSourceByUrlAsync(string url);\r\n}\r\n\r\ninterface IFeedFetcher : Orleans.IGrainWithStringKey\r\n{\r\n    Task FetchAsync(FeedSource source);\r\n}\r\n\r\nclass FeedFetchGrain : Grain, IFeedFetcher\r\n{\r\n    readonly IGrainFactory _grainFactory;\r\n\r\n    public FeedFetchGrain(IGrainFactory grainFactory) => _grainFactory = grainFactory;\r\n\r\n    public async Task FetchAsync(FeedSource source)\r\n    {\r\n        var storage = _grainFactory.GetGrain<IFeedItemResults>(0);\r\n        var results = await ReadFeedAsync(source);\r\n        await storage.AddAsync(results);\r\n    }\r\n\r\n    public async Task<List<FeedItem>> ReadFeedAsync(FeedSource source)\r\n    {\r\n        var feed = new List<FeedItem>();\r\n\r\n        try\r\n        {\r\n            using var xmlReader = XmlReader.Create(source.Url.ToString(), new XmlReaderSettings() { Async = true });\r\n            if (source.Type == FeedType.Rss)\r\n            {\r\n                var feedReader = new RssFeedReader(xmlReader);\r\n\r\n                // Read the feed\r\n                while (await feedReader.Read())\r\n                {\r\n                    switch (feedReader.ElementType)\r\n                    {\r\n                        // Read Item\r\n                        case SyndicationElementType.Item:\r\n                            var item = await feedReader.ReadItem();\r\n                            feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(item)));\r\n                            break;\r\n\r\n                        default:\r\n                            var content = await feedReader.ReadContent();\r\n\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                var feedReader = new AtomFeedReader(xmlReader);\r\n\r\n                while (await feedReader.Read())\r\n                {\r\n                    switch (feedReader.ElementType)\r\n                    {\r\n                        // Read Item\r\n                        case SyndicationElementType.Item:\r\n                            var entry = await feedReader.ReadEntry();\r\n                            feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(entry)));\r\n                            break;\r\n\r\n                        default:\r\n                            var content = await feedReader.ReadContent();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            return feed;\r\n        }\r\n        catch\r\n        {\r\n            return new List<FeedItem>();\r\n        }\r\n    }\r\n}\r\n\r\nrecord FeedChannel\r\n{\r\n    public string? Title { get; set; }\r\n\r\n    public string? Website { get; set; }\r\n\r\n    public Uri? Url { get; set; }\r\n\r\n    public bool HideTitle { get; set; }\r\n\r\n    public bool HideDescription { get; set; }\r\n}\r\n\r\nclass FeedSource\r\n{\r\n    public string Url { get; set; } = string.Empty;\r\n\r\n    public string Title { get; set; } = string.Empty;\r\n\r\n    public string? Website { get; set; }\r\n\r\n    public FeedType Type { get; set; }\r\n\r\n    public bool HideTitle { get; set; }\r\n\r\n    public bool HideDescription { get; set; }\r\n\r\n    public short UpdateFrequencyInMinutes { get; set; } = 1;\r\n\r\n    public FeedChannel ToChannel()\r\n    {\r\n        return new FeedChannel\r\n        {\r\n            Title = Title,\r\n            Website = Website,\r\n            HideTitle = HideTitle,\r\n            HideDescription = HideDescription\r\n        };\r\n    }\r\n}\r\n\r\nrecord FeedItem\r\n{\r\n    public FeedChannel? Channel { get; set; }\r\n\r\n    public string? Id { get; set; }\r\n\r\n    public string? Title { get; set; }\r\n\r\n    public string? Description { get; set; }\r\n\r\n    public Uri? Url { get; set; }\r\n\r\n    public DateTimeOffset PublishedOn { get; set; }\r\n\r\n    public FeedItem()\r\n    {\r\n\r\n    }\r\n\r\n    public FeedItem(FeedChannel channel, SyndicationItem item)\r\n    {\r\n        Channel = channel;\r\n        Id = item.Id;\r\n        Title = item.Title;\r\n        Description = item.Description;\r\n        var link = item.Links.FirstOrDefault();\r\n        if (link is object)\r\n            Url = link.Uri;\r\n\r\n        if (item.LastUpdated == default(DateTimeOffset))\r\n            PublishedOn = item.Published;\r\n        else\r\n            PublishedOn = item.LastUpdated;\r\n    }\r\n}\r\n\r\nenum FeedType\r\n{\r\n    Atom,\r\n    Rss\r\n}\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-2/README.md",
    "content": "# RSS Reader with Reminder\r\n\r\n**This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples.\r\n\r\nThis is a simple RSS reader that uses two storage, one for storing a feed source and another for storing feed results. You can keep refreshing your browser and the RSS Reader will display the latest results whenever they are available.\r\n\r\n- Make sure you have redis installed and running.\r\n- Run the app using `dotnet run`.\r\n- Open `localhost:5000`\r\n- You can keep refreshing the browser page as much as you want and it will only pick up and store unique feed items.\r\n- Orleans will keep keep refreshing each feed every x minutes (configurable). "
  },
  {
    "path": "projects/orleans/rss-reader-2/rss-reader-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.SyndicationFeed.ReaderWriter\" Version=\"1.0.2\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Hosting\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Console\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.OrleansRuntime\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.OrleansProviders\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Core\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.CodeGenerator.MSBuild\" Version=\"3.6.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Orleans.Persistence.Redis\" Version=\"3.2.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-3/Feed.cs",
    "content": "\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Microsoft.SyndicationFeed;\r\n\r\nrecord FeedChannel\r\n{\r\n    public string? Title { get; set; }\r\n\r\n    public string? Website { get; set; }\r\n\r\n    public Uri? Url { get; set; }\r\n\r\n    public bool HideTitle { get; set; }\r\n\r\n    public bool HideDescription { get; set; }\r\n}\r\n\r\nclass FeedSource\r\n{\r\n    public string Url { get; set; } = string.Empty;\r\n\r\n    public string Title { get; set; } = string.Empty;\r\n\r\n    public string? Website { get; set; }\r\n\r\n    public bool HideTitle { get; set; }\r\n\r\n    public bool HideDescription { get; set; }\r\n\r\n    public short UpdateFrequencyInMinutes { get; set; } = 1;\r\n\r\n    public bool CanFetch ()=> History.Take(10).Count(x => !x.IsValid) <= 3;  \r\n\r\n    public bool IsLatestValid \r\n    {\r\n        get\r\n        {\r\n            if (History.Count == 0)\r\n                return true;\r\n\r\n            return History.First().IsValid;\r\n        }\r\n    }\r\n\r\n    public List<FeedHistory> History { get; set; } = new List<FeedHistory>();\r\n\r\n    public void LogFetchAttempt(bool isValid, string? message = null) =>\r\n        History.Insert(0, new FeedHistory { Timestamp = DateTimeOffset.UtcNow, IsValid = isValid, Message = message });\r\n\r\n    public FeedChannel ToChannel()\r\n    {\r\n        return new FeedChannel\r\n        {\r\n            Title = Title,\r\n            Website = Website,\r\n            HideTitle = HideTitle,\r\n            HideDescription = HideDescription\r\n        };\r\n    }\r\n}\r\n\r\nrecord FeedHistory \r\n{\r\n    public DateTimeOffset Timestamp { get; set; }\r\n\r\n    public bool IsValid { get; set; }\r\n\r\n    public string? Message { get; set; }\r\n}\r\n\r\nrecord FeedItem\r\n{\r\n    public FeedChannel? Channel { get; set; }\r\n\r\n    public string? Id { get; set; }\r\n\r\n    public string? Title { get; set; }\r\n\r\n    public string? Description { get; set; }\r\n\r\n    public Uri? Url { get; set;}\r\n\r\n    public DateTimeOffset PublishedOn { get; set; }\r\n\r\n    public FeedItem()\r\n    {\r\n\r\n    }\r\n\r\n    public FeedItem(FeedChannel channel, SyndicationItem item)\r\n    {\r\n        Channel = channel;\r\n        Id = item.Id;\r\n        Title = item.Title;\r\n        Description = item.Description;\r\n        var link = item.Links.FirstOrDefault();\r\n        if (link is object)\r\n            Url = link.Uri;        \r\n\r\n        if (item.LastUpdated == default(DateTimeOffset))\r\n            PublishedOn = item.Published;\r\n        else\r\n            PublishedOn = item.LastUpdated;\r\n    }\r\n}\r\n\r\nenum FeedType\r\n{\r\n    Atom,\r\n    Rss\r\n}\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-3/Opml.cs",
    "content": "using System.Xml.Linq;\r\n\r\npublic class Opml\r\n{\r\n    public string? Title { get; set; }\r\n    public DateTime? DateCreated { get; set; }\r\n    public DateTime? DateModified { get; set; }\r\n    public string? OwnerName { get; set; }\r\n    public string? OwnerEmail { get; set; }\r\n    public Uri? OwnerId { get; set; }\r\n    public Uri? Docs { get; set; }\r\n    public string? ExpansionState { get; set; }\r\n    public int? VertScrollState { get; set; }\r\n    public int? WindowTop { get; set; }\r\n    public int? WindowLeft { get; set; }\r\n    public int? WindowBottom { get; set; }\r\n    public int? WindowRight { get; set; }\r\n    public List<Outline> Outlines { get; private set; }\r\n\r\n    public Opml()\r\n    {\r\n        Outlines = new List<Outline>();\r\n    }\r\n\r\n    public Opml(string xml):this()\r\n    {\r\n        LoadFromXML(xml);\r\n    }\r\n\r\n    public void LoadFromXML(string xml)\r\n    {\r\n        var elements = XElement.Parse(xml);\r\n        var heads = elements.Element(\"head\").Descendants();\r\n\r\n        Func<string, string?> selectString = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => x.Value).FirstOrDefault();\r\n\r\n        Func<string, int?> selectInt = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => Convert.ToInt32(x.Value)).FirstOrDefault();\r\n\r\n        Func<string, DateTime?> selectDate = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => Convert.ToDateTime(x.Value)).FirstOrDefault();\r\n\r\n        Func<string, Uri?> selectUri = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => new Uri(x.Value)).FirstOrDefault();\r\n\r\n        Title = selectString(\"title\");\r\n        DateCreated = selectDate(\"dateCreated\");\r\n        DateModified = selectDate(\"dateModified\");\r\n        OwnerName = selectString(\"ownerName\");\r\n        OwnerEmail = selectString(\"ownerEmail\");\r\n        OwnerId = selectUri(\"ownerId\");\r\n        Docs = selectUri(\"docs\");\r\n        ExpansionState = selectString(\"expansionState\");\r\n        VertScrollState = selectInt(\"vertScrollState\");\r\n        WindowTop = selectInt(\"windowTop\");\r\n        WindowLeft = selectInt(\"windowLeft\");\r\n        WindowBottom = selectInt(\"windowBottom\");\r\n        WindowRight = selectInt(\"windowRight\");\r\n\r\n        var bodies = elements.Element(\"body\").Elements();\r\n        //todo: make it recursive\r\n        foreach (var b in bodies)\r\n        {\r\n            var o = new Outline();\r\n            Outlines.Add(o);\r\n            TraverseBody(b, o);\r\n        }\r\n    }\r\n\r\n    private void TraverseBody(XElement outline, Outline ot)\r\n    {\r\n        if (outline != null)\r\n        {\r\n            foreach (var att in outline.Attributes())\r\n            {\r\n                ot.Attributes[att.Name.ToString()] = att.Value;\r\n            }\r\n            \r\n            foreach (var x in outline.Elements())\r\n            {\r\n                var o = new Outline();\r\n                ot.Outlines.Add(o);\r\n                TraverseBody(x, o);\r\n            }\r\n        }\r\n    }\r\n\r\n    public XElement ToXML()\r\n    {\r\n        var root = new XElement(\"opml\",\r\n            new XAttribute(\"version\", \"2.0\"),\r\n                new XElement(\"head\",\r\n                    new XElement(\"title\", this.Title),\r\n                    (this.DateCreated.HasValue) ? new XElement(\"dateCreated\", this.DateCreated.Value.ToString(\"R\")) : null,\r\n                    (this.DateModified.HasValue) ? new XElement(\"dateModified\", this.DateModified.Value.ToString(\"R\")) : null,\r\n                    (!string.IsNullOrWhiteSpace(this.OwnerName))? new XElement(\"ownerName\", this.OwnerName) : null,\r\n                    (!string.IsNullOrWhiteSpace(this.OwnerEmail)) ? new XElement(\"ownerEmail\", this.OwnerEmail) : null\r\n                    ));\r\n                    \r\n        var body = new XElement(\"body\");\r\n        foreach(var x in this.Outlines)\r\n        {\r\n            XElement newOutline = new XElement(\"outline\");\r\n            AddRecursiveChild(newOutline, x);\r\n            body.Add(newOutline);\r\n        }\r\n\r\n        root.Add(body);\r\n\r\n        return root;\r\n    }\r\n\r\n    private void AddRecursiveChild(XElement element, Outline o){\r\n        \r\n        element.Add(from y in o.Attributes\r\n                    select new XAttribute(y.Key, y.Value));\r\n        \r\n        foreach(var oo in o.Outlines)\r\n        {\r\n            XElement newOutline = new XElement(\"outline\");\r\n        \r\n            element.Add(newOutline);\r\n            AddRecursiveChild(newOutline, oo);\r\n        }\r\n    }\r\n\r\n}\r\n\r\npublic record Outline\r\n{\r\n    public Dictionary<string, string> Attributes { get; private set; } = new Dictionary<string, string>();\r\n\r\n    public List<Outline> Outlines { get; private set; } = new List<Outline>();\r\n}\r\n\r\npublic record RssSubscription\r\n{\r\n    public string? Title { get; set; }\r\n    public string? OwnerName { get; set; }\r\n    public string? OwnerEmail { get; set; }\r\n    public DateTime? DateCreated { get; set; }\r\n    public DateTime? DateModified { get; set; }\r\n    public List<RssSubscriptionItem> Items { get; set; } = new List<RssSubscriptionItem>();\r\n\r\n    /// <summary>\r\n    /// List errors in parsing opml attributes\r\n    /// </summary>\r\n    public List<string> ParsingErrors { get; set; } = new List<string>();\r\n\r\n    public RssSubscription(Opml opml)\r\n    {\r\n        Title = opml.Title;\r\n        DateCreated = opml.DateCreated;\r\n        DateModified = opml.DateModified;\r\n\r\n        var line = 0;\r\n        foreach (var x in opml.Outlines)\r\n        {\r\n            line++;\r\n            var item = new RssSubscriptionItem();\r\n            foreach (var y in x.Attributes)\r\n            {\r\n                try\r\n                {\r\n                    if (y.Key == \"text\")\r\n                        item.Text = y.Value;\r\n                    else if (y.Key == \"description\")\r\n                        item.Description = y.Value;\r\n                    else if (y.Key == \"title\")\r\n                        item.Title = y.Value;\r\n                    else if (y.Key == \"name\")\r\n                        item.Name = y.Value;\r\n                    else if (y.Key == \"htmlUrl\" && !string.IsNullOrWhiteSpace(y.Value))\r\n                        item.HtmlUri = new Uri(y.Value);\r\n                    else if (y.Key == \"xmlUrl\" && !string.IsNullOrWhiteSpace(y.Value))\r\n                        item.XmlUri = new Uri(y.Value);\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    ParsingErrors.Add(\"Error at line \" + line + \" in processing attribute \" \r\n                        + y.Key + \" with value \" + y.Value + \" \" +  ex.Message);\r\n                }\r\n            }\r\n\r\n            Items.Add(item);\r\n        }\r\n    }\r\n}\r\n\r\npublic record RssSubscriptionItem\r\n{\r\n    public string? Text { get; set; }\r\n    public string? Name { get; set; }\r\n    public string? Title { get; set; }\r\n    public string? Description { get; set; }\r\n    public Uri? HtmlUri { get; set; }\r\n    public Uri? XmlUri { get; set; }\r\n}"
  },
  {
    "path": "projects/orleans/rss-reader-3/Program.cs",
    "content": "using System.Net;\r\nusing Orleans;\r\nusing Orleans.Runtime;\r\nusing Orleans.Configuration;\r\nusing Orleans.Hosting;\r\nusing System.Xml;\r\nusing Microsoft.SyndicationFeed.Atom;\r\nusing Microsoft.SyndicationFeed;\r\nusing Microsoft.SyndicationFeed.Rss;\r\nusing System.Diagnostics;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddHttpClient();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole();\r\nbuilder.Host.UseOrleans(builder =>\r\n{\r\n    builder\r\n        .UseLocalhostClustering()\r\n        .UseInMemoryReminderService()\r\n        .Configure<ClusterOptions>(options =>\r\n        {\r\n            options.ClusterId = \"dev\";\r\n            options.ServiceId = \"http-client\";\r\n        })\r\n        .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)\r\n        .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(FeedSourceGrain).Assembly).WithReferences())\r\n        .AddRedisGrainStorage(Config.RedisStorage, optionsBuilder => optionsBuilder.Configure(options =>\r\n        {\r\n            options.ConnectionString = \"localhost:6379\";\r\n            options.UseJson = true;\r\n            options.DatabaseNumber = 1;\r\n        }));\r\n});\r\n\r\nvar app = builder.Build();\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    var logger = context.RequestServices.GetService<ILoggerFactory>()!.CreateLogger(\"rss-reader\");\r\n\r\n    var httpClientFactory = context.RequestServices.GetService<IHttpClientFactory>();\r\n    var httpClient = httpClientFactory.CreateClient();\r\n\r\n    var opmlSubscriptionList = await httpClient.GetStringAsync(\"http://scripting.com/misc/mlb.opml\");\r\n    var opml = new Opml(opmlSubscriptionList);\r\n    var subscriptionList = new RssSubscription(opml);\r\n\r\n    var client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    var feedSourceGrain = client.GetGrain<IFeedSource>(0)!;\r\n\r\n    foreach (var source in subscriptionList.Items)\r\n    {\r\n        logger.LogInformation(\"Adding \" + source.XmlUri?.ToString() ?? String.Empty);\r\n        await feedSourceGrain.AddAsync(new FeedSource\r\n        {\r\n            Url = source.XmlUri?.ToString() ?? string.Empty,\r\n            Website = source.HtmlUri?.ToString() ?? string.Empty,\r\n            Title = source.Title ?? string.Empty,\r\n            UpdateFrequencyInMinutes = 3\r\n        });\r\n    }\r\n\r\n    var sources = await feedSourceGrain.GetAllAsync();\r\n    var feedFetcherReminderGrain = client.GetGrain<IFeedFetcherReminder>(0);\r\n\r\n    foreach (var s in sources)\r\n    {\r\n                    // AddReminder is indempotent\r\n                    await feedFetcherReminderGrain.AddReminder(s.Url, s.UpdateFrequencyInMinutes);\r\n    }\r\n\r\n    var feedResultsGrain = client.GetGrain<IFeedItemResults>(0);\r\n    var feedItems = await feedResultsGrain.GetAllAsync();\r\n\r\n    await context.Response.WriteAsync(@\"<html>\r\n                    <head>\r\n                        <link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/css/uikit.min.css\"\" />\r\n                        <title>Orleans RSS Reader</title>\r\n                    </head>\");\r\n    await context.Response.WriteAsync(\"<body><div class=\\\"uk-container\\\">\");\r\n    await context.Response.WriteAsync(\"<a href=\\\"/feed-sources\\\">Feed Sources</a><br/>\");\r\n    if (feedItems.Count == 0)\r\n        await context.Response.WriteAsync(\"<p>Please refresh your browser again if you see no feeds displayed.</p>\");\r\n\r\n    await context.Response.WriteAsync(\"<ul class=\\\"uk-list\\\">\");\r\n    foreach (var i in feedItems)\r\n    {\r\n        await context.Response.WriteAsync(\"<li class=\\\"uk-card uk-card-default uk-card-body\\\">\");\r\n        if (!string.IsNullOrWhiteSpace(i.Title))\r\n            await context.Response.WriteAsync($\"{ i.Title }<br/>\");\r\n\r\n        await context.Response.WriteAsync(i.Description ?? \"\");\r\n\r\n        if (i.Url is object)\r\n            await context.Response.WriteAsync($\"<br/><a href=\\\"{i.Url}\\\">link</a>\");\r\n\r\n        await context.Response.WriteAsync($\"<div style=\\\"font-size:small;\\\">published on: {i.PublishedOn}</div>\");\r\n        await context.Response.WriteAsync($\"<div style=\\\"font-size:small;\\\">source: <a href=\\\"{i.Channel?.Website}\\\">{i.Channel?.Title}</a></div>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(\"</div></body></html>\");\r\n});\r\n\r\napp.MapGet(\"/feed-sources\", async context =>\r\n{\r\n    var client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    var feedSourceGrain = client.GetGrain<IFeedSource>(0)!;\r\n    var sources = await feedSourceGrain.GetAllAsync();\r\n\r\n    await context.Response.WriteAsync(@\"<html>\r\n                    <head>\r\n                        <link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/css/uikit.min.css\"\" />\r\n                        <title>Orleans RSS Reader</title>\r\n                    </head>\");\r\n    await context.Response.WriteAsync(\"<body><div class=\\\"uk-container\\\">\");\r\n    await context.Response.WriteAsync(\"<a href=\\\"/\\\">Home</a><br/>\");\r\n    await context.Response.WriteAsync(\"<strong>Valid</strong>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var s in sources.Where(x => x.IsLatestValid))\r\n    {\r\n        await context.Response.WriteAsync($\"<li><a href=\\\"{s.Url}\\\">{s.Url}</a>\");\r\n        await context.Response.WriteAsync(\"<ul>\");\r\n        foreach (var h in s.History)\r\n        {\r\n            await context.Response.WriteAsync($\"<li>{h.Timestamp} - {h.IsValid}<p>{h.Message}</p></li>\");\r\n        }\r\n        await context.Response.WriteAsync(\"</ul>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n\r\n    await context.Response.WriteAsync(\"<strong>Invalid</strong>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var s in sources.Where(x => !x.IsLatestValid))\r\n    {\r\n        await context.Response.WriteAsync($\"<li><a href=\\\"{s.Url}\\\">{s.Url}</a>\");\r\n        await context.Response.WriteAsync(\"<ul>\");\r\n        foreach (var h in s.History)\r\n        {\r\n            await context.Response.WriteAsync($\"<li>{h.Timestamp} - {h.IsValid}<p>{h.Message}</p></li>\");\r\n        }\r\n        await context.Response.WriteAsync(\"</ul>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n\r\n    await context.Response.WriteAsync(\"</div></body></html>\");\r\n});\r\n\r\napp.Run();\r\n\r\nstatic class Config\r\n{\r\n    public const string RedisStorage = \"redis-rss-reader-3\";\r\n}\r\n\r\n\r\nclass FeedFetcherReminder : Grain, IRemindable, IFeedFetcherReminder\r\n{\r\n    readonly IGrainFactory _grainFactory;\r\n    readonly ILogger _logger;\r\n\r\n    readonly Dictionary<string, (Task FetchTask, Stopwatch FetchDuration)> _runningReminders = new Dictionary<string, (Task FetchTask, Stopwatch FetchDuration)>();\r\n\r\n    public FeedFetcherReminder(IGrainFactory grainFactory, ILogger<FeedFetcherReminder> logger)\r\n    {\r\n        _grainFactory = grainFactory;\r\n        _logger = logger;\r\n    }\r\n\r\n    public async Task AddReminder(string reminder, short repeatEveryMinute)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(reminder))\r\n            throw new ArgumentNullException(nameof(reminder));\r\n\r\n        var r = await GetReminder(reminder);\r\n\r\n        if (r is not object)\r\n            await RegisterOrUpdateReminder(reminder, dueTime: TimeSpan.FromSeconds(1), period: TimeSpan.FromMinutes(repeatEveryMinute));\r\n    }\r\n\r\n    public async Task ReceiveReminder(string reminderName, TickStatus status)\r\n    {\r\n        _logger.Info($\"Receive {reminderName} reminder\");\r\n\r\n        if (_runningReminders.TryGetValue(reminderName, out var reminder))\r\n        {\r\n            if (!reminder.FetchTask.IsCompleted)\r\n            {\r\n                _logger.LogInformation(\r\n                    \"Received reminder {ReminderName}, but previous refresh task is still running and has been running for {TaskRunTime}\",\r\n                    reminderName,\r\n                    reminder.FetchDuration.Elapsed);\r\n                return;\r\n            }\r\n        }\r\n\r\n        var feedSourceGrain = _grainFactory.GetGrain<IFeedSource>(0)!;\r\n\r\n        var feedSource = await feedSourceGrain.FindFeedSourceByUrlAsync(reminderName);\r\n\r\n        if (feedSource is object)\r\n        {\r\n            _logger.Info($\"Fetching {feedSource.Url}\");\r\n            var feedFetcherGrain = _grainFactory.GetGrain<IFeedFetcher>(feedSource.Url);\r\n            var task = feedFetcherGrain.FetchAsync(feedSource);\r\n            task.Ignore();\r\n            var stopwatch = reminder.FetchDuration ?? new Stopwatch();\r\n            stopwatch.Restart();\r\n            _runningReminders[reminderName] = (task, stopwatch);\r\n        }\r\n    }\r\n}\r\n\r\ninterface IFeedFetcherReminder : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddReminder(string reminder, short repeatEveryMinute);\r\n}\r\n\r\nclass FeedItemResultGrain : Grain, IFeedItemResults\r\n{\r\n    private readonly IPersistentState<FeedItemStore> _storage;\r\n\r\n    public FeedItemResultGrain([PersistentState(\"feed-item-results-3\", Config.RedisStorage)] IPersistentState<FeedItemStore> storage) => _storage = storage;\r\n\r\n    public async Task AddAsync(List<FeedItem> items)\r\n    {\r\n        //make sure there is no duplication\r\n        foreach (var i in items.Where(x => !string.IsNullOrWhiteSpace(x.Id)))\r\n        {\r\n            if (!_storage.State.Results.Exists(x => x.Id?.Equals(i.Id, StringComparison.OrdinalIgnoreCase) ?? false))\r\n                _storage.State.Results.Add(i);\r\n        }\r\n        await _storage.WriteStateAsync();\r\n    }\r\n\r\n    public Task<List<FeedItem>> GetAllAsync() => Task.FromResult(_storage.State.Results.OrderByDescending(x => x.PublishedOn).ToList());\r\n\r\n    public async Task ClearAsync()\r\n    {\r\n        _storage.State.Results.Clear();\r\n        await _storage.WriteStateAsync();\r\n    }\r\n}\r\n\r\nrecord FeedItemStore\r\n{\r\n    public List<FeedItem> Results { get; set; } = new List<FeedItem>();\r\n}\r\n\r\ninterface IFeedItemResults : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddAsync(List<FeedItem> items);\r\n\r\n    Task<List<FeedItem>> GetAllAsync();\r\n\r\n    Task ClearAsync();\r\n}\r\n\r\nclass FeedSourceGrain : Grain, IFeedSource\r\n{\r\n    private readonly IPersistentState<FeedSourceStore> _storage;\r\n\r\n    public FeedSourceGrain([PersistentState(\"feed-source-3\", Config.RedisStorage)] IPersistentState<FeedSourceStore> storage) => _storage = storage;\r\n\r\n    public async Task AddAsync(FeedSource source)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(source.Url))\r\n            return;\r\n\r\n        if (_storage.State.Sources.Find(x => x.Url == source.Url) is null)\r\n        {\r\n            _storage.State.Sources.Add(source);\r\n            await _storage.WriteStateAsync();\r\n        }\r\n    }\r\n\r\n    public Task<List<FeedSource>> GetAllAsync() => Task.FromResult(_storage.State.Sources);\r\n\r\n\r\n    public Task<FeedSource?> FindFeedSourceByUrlAsync(string url) =>\r\n        Task.FromResult(_storage.State.Sources.Find(x => x.Url.Equals(url, StringComparison.Ordinal)));\r\n\r\n    public async Task<FeedSource?> UpdateFeedSourceStatus(string url, bool activeStatus, string? message)\r\n    {\r\n        var feed = await FindFeedSourceByUrlAsync(url);\r\n        if (feed is object)\r\n        {\r\n            feed.LogFetchAttempt(activeStatus, message);\r\n            await _storage.WriteStateAsync();\r\n        }\r\n\r\n        return feed;\r\n    }\r\n}\r\n\r\nrecord FeedSourceStore\r\n{\r\n    public List<FeedSource> Sources { get; set; } = new List<FeedSource>();\r\n}\r\n\r\ninterface IFeedSource : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddAsync(FeedSource source);\r\n\r\n    Task<List<FeedSource>> GetAllAsync();\r\n\r\n    Task<FeedSource?> FindFeedSourceByUrlAsync(string url);\r\n\r\n    Task<FeedSource?> UpdateFeedSourceStatus(string url, bool activeStatus, string? message);\r\n}\r\n\r\ninterface IFeedFetcher : Orleans.IGrainWithStringKey\r\n{\r\n    Task FetchAsync(FeedSource source);\r\n}\r\n\r\nclass FeedFetchGrain : Grain, IFeedFetcher\r\n{\r\n    readonly IGrainFactory _grainFactory;\r\n\r\n    readonly ILogger _logger;\r\n\r\n    readonly IHttpClientFactory _httpClientFactory;\r\n\r\n    public FeedFetchGrain(IGrainFactory grainFactory, ILogger<FeedFetchGrain> logger, IHttpClientFactory httpClientFactory)\r\n    {\r\n        _grainFactory = grainFactory;\r\n        _logger = logger;\r\n        _httpClientFactory = httpClientFactory;\r\n    }\r\n\r\n    public async Task FetchAsync(FeedSource source)\r\n    {\r\n        var storage = _grainFactory.GetGrain<IFeedItemResults>(0);\r\n        var results = await ReadFeedAsync(source);\r\n        await storage.AddAsync(results);\r\n    }\r\n\r\n    public async Task<List<FeedItem>> ReadFeedAsync(FeedSource source)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(source.Url))\r\n            return new List<FeedItem>();\r\n\r\n        if (!source.CanFetch())\r\n            return new List<FeedItem>();\r\n\r\n        var feed = new List<FeedItem>();\r\n        FeedType feedType = FeedType.Rss;\r\n        try\r\n        {\r\n            _logger.LogInformation($\"Fetching {source.Url}\");\r\n\r\n            var client = _httpClientFactory.CreateClient();\r\n            client.Timeout = TimeSpan.FromSeconds(10);\r\n            var response = await client.GetAsync(source.Url.ToString());\r\n\r\n            var memory = new MemoryStream();\r\n            await response.Content.CopyToAsync(memory);\r\n\r\n            memory.Seek(0, SeekOrigin.Begin);\r\n            char[] buf = new char[400]; // We need large buffer because to skip xml metadata and comments before the root of the xml document starts\r\n            var sr = new StreamReader(memory);\r\n            var charRead = sr.ReadBlock(buf, 0, buf.Length);\r\n\r\n            if (!new string(buf).Contains(\"rss\", StringComparison.OrdinalIgnoreCase))\r\n                feedType = FeedType.Atom;\r\n\r\n            memory.Seek(0, SeekOrigin.Begin);\r\n            using var xmlReader = XmlReader.Create(memory, new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore });\r\n\r\n            if (feedType == FeedType.Rss)\r\n            {\r\n                var feedReader = new RssFeedReader(xmlReader);\r\n                // Read the feed\r\n                while (await feedReader.Read())\r\n                {\r\n                    switch (feedReader.ElementType)\r\n                    {\r\n                        // Read Item\r\n                        case SyndicationElementType.Item:\r\n                            var item = await feedReader.ReadItem();\r\n                            feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(item)));\r\n                            break;\r\n\r\n                        default:\r\n                            var content = await feedReader.ReadContent();\r\n\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                var feedReader = new AtomFeedReader(xmlReader);\r\n\r\n                while (await feedReader.Read())\r\n                {\r\n                    switch (feedReader.ElementType)\r\n                    {\r\n                        // Read Item\r\n                        case SyndicationElementType.Item:\r\n                            var entry = await feedReader.ReadEntry();\r\n                            feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(entry)));\r\n                            break;\r\n\r\n                        default:\r\n                            var content = await feedReader.ReadContent();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            var feedSource = _grainFactory.GetGrain<IFeedSource>(0)!;\r\n            await feedSource.UpdateFeedSourceStatus(source.Url, true, $\"{feed.Count} items fetched\");\r\n\r\n            return feed;\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            _logger.LogError($\"({feedType}) {source.Url} Exception: {ex.Message}\");\r\n\r\n            // Mark feed as invalid\r\n            var feedSource = _grainFactory.GetGrain<IFeedSource>(0)!;\r\n            await feedSource.UpdateFeedSourceStatus(source.Url, false, ex.Message);\r\n\r\n            return new List<FeedItem>();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-3/README.md",
    "content": "# RSS Reader with Reminder + Subscription list\r\n\r\n**This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples.\r\n\r\nThis is a simple RSS reader that uses two storage, one for storing a feed source and another for storing feed results. You can keep refreshing your browser and the RSS Reader will display the latest results whenever they are available. It also logs the result of every RSS feed that got fetch regularly using Orleans reminder.\r\n\r\n- Make sure you have redis installed and running.\r\n- Run the app using `dotnet run`.\r\n- Open `localhost:5000`\r\n- You can keep refreshing the browser page as much as you want and it will only pick up and store unique feed items.\r\n- Orleans will keep keep refreshing each feed every x minutes (configurable). \r\n- This Rss Reader will read a list of RSS sources from an OPML subscription feed http://scripting.com/misc/mlb.opml\r\n\r\nIn this RSS feed we use a single Reminder grain to handle all the reminders created for each feed. An alternative approach would be to use one Reminder grain per Reminder (this is demonstrated in another sample [RSS Reader with Reminder + Subscription list 2](../rss-reader-4)). "
  },
  {
    "path": "projects/orleans/rss-reader-3/rss-reader-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.SyndicationFeed.ReaderWriter\" Version=\"1.0.2\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Hosting\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Console\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.OrleansRuntime\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.OrleansProviders\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Core\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.CodeGenerator.MSBuild\" Version=\"3.6.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Orleans.Persistence.Redis\" Version=\"3.2.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-4/Feed.cs",
    "content": "\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Microsoft.SyndicationFeed;\r\n\r\nrecord FeedChannel\r\n{\r\n    public string? Title { get; set; }\r\n\r\n    public string? Website { get; set; }\r\n\r\n    public Uri? Url { get; set; }\r\n\r\n    public bool HideTitle { get; set; }\r\n\r\n    public bool HideDescription { get; set; }\r\n}\r\n\r\nclass FeedSource\r\n{\r\n    public string Url { get; set; } = string.Empty;\r\n\r\n    public string Title { get; set; } = string.Empty;\r\n\r\n    public string? Website { get; set; }\r\n\r\n    public bool HideTitle { get; set; }\r\n\r\n    public bool HideDescription { get; set; }\r\n\r\n    public short UpdateFrequencyInMinutes { get; set; } = 1;\r\n\r\n    public bool CanFetch ()=> History.Take(10).Count(x => !x.IsValid) <= 3;  \r\n\r\n    public bool IsLatestValid \r\n    {\r\n        get\r\n        {\r\n            if (History.Count == 0)\r\n                return true;\r\n\r\n            return History.First().IsValid;\r\n        }\r\n    }\r\n\r\n    public List<FeedHistory> History { get; set; } = new List<FeedHistory>();\r\n\r\n    public void LogFetchAttempt(bool isValid, string? message = null) =>\r\n        History.Insert(0, new FeedHistory { Timestamp = DateTimeOffset.UtcNow, IsValid = isValid, Message = message });\r\n\r\n    public FeedChannel ToChannel()\r\n    {\r\n        return new FeedChannel\r\n        {\r\n            Title = Title,\r\n            Website = Website,\r\n            HideTitle = HideTitle,\r\n            HideDescription = HideDescription\r\n        };\r\n    }\r\n}\r\n\r\nrecord FeedHistory \r\n{\r\n    public DateTimeOffset Timestamp { get; set; }\r\n\r\n    public bool IsValid { get; set; }\r\n\r\n    public string? Message { get; set; }\r\n}\r\n\r\nrecord FeedItem\r\n{\r\n    public FeedChannel? Channel { get; set; }\r\n\r\n    public string? Id { get; set; }\r\n\r\n    public string? Title { get; set; }\r\n\r\n    public string? Description { get; set; }\r\n\r\n    public Uri? Url { get; set;}\r\n\r\n    public DateTimeOffset PublishedOn { get; set; }\r\n\r\n    public FeedItem()\r\n    {\r\n\r\n    }\r\n\r\n    public FeedItem(FeedChannel channel, SyndicationItem item)\r\n    {\r\n        Channel = channel;\r\n        Id = item.Id;\r\n        Title = item.Title;\r\n        Description = item.Description;\r\n        var link = item.Links.FirstOrDefault();\r\n        if (link is object)\r\n            Url = link.Uri;        \r\n\r\n        if (item.LastUpdated == default(DateTimeOffset))\r\n            PublishedOn = item.Published;\r\n        else\r\n            PublishedOn = item.LastUpdated;\r\n    }\r\n}\r\n\r\nenum FeedType\r\n{\r\n    Atom,\r\n    Rss\r\n}\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-4/Opml.cs",
    "content": "\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Xml.Linq;\r\n\r\npublic class Opml\r\n{\r\n    public string? Title { get; set; }\r\n    public DateTime? DateCreated { get; set; }\r\n    public DateTime? DateModified { get; set; }\r\n    public string? OwnerName { get; set; }\r\n    public string? OwnerEmail { get; set; }\r\n    public Uri? OwnerId { get; set; }\r\n    public Uri? Docs { get; set; }\r\n    public string? ExpansionState { get; set; }\r\n    public int? VertScrollState { get; set; }\r\n    public int? WindowTop { get; set; }\r\n    public int? WindowLeft { get; set; }\r\n    public int? WindowBottom { get; set; }\r\n    public int? WindowRight { get; set; }\r\n    public List<Outline> Outlines { get; private set; }\r\n\r\n    public Opml()\r\n    {\r\n        Outlines = new List<Outline>();\r\n    }\r\n\r\n    public Opml(string xml):this()\r\n    {\r\n        LoadFromXML(xml);\r\n    }\r\n\r\n    public void LoadFromXML(string xml)\r\n    {\r\n        var elements = XElement.Parse(xml);\r\n        var heads = elements.Element(\"head\").Descendants();\r\n\r\n        Func<string, string?> selectString = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => x.Value).FirstOrDefault();\r\n\r\n        Func<string, int?> selectInt = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => Convert.ToInt32(x.Value)).FirstOrDefault();\r\n\r\n        Func<string, DateTime?> selectDate = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => Convert.ToDateTime(x.Value)).FirstOrDefault();\r\n\r\n        Func<string, Uri?> selectUri = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => new Uri(x.Value)).FirstOrDefault();\r\n\r\n        Title = selectString(\"title\");\r\n        DateCreated = selectDate(\"dateCreated\");\r\n        DateModified = selectDate(\"dateModified\");\r\n        OwnerName = selectString(\"ownerName\");\r\n        OwnerEmail = selectString(\"ownerEmail\");\r\n        OwnerId = selectUri(\"ownerId\");\r\n        Docs = selectUri(\"docs\");\r\n        ExpansionState = selectString(\"expansionState\");\r\n        VertScrollState = selectInt(\"vertScrollState\");\r\n        WindowTop = selectInt(\"windowTop\");\r\n        WindowLeft = selectInt(\"windowLeft\");\r\n        WindowBottom = selectInt(\"windowBottom\");\r\n        WindowRight = selectInt(\"windowRight\");\r\n\r\n        var bodies = elements.Element(\"body\").Elements();\r\n        //todo: make it recursive\r\n        foreach (var b in bodies)\r\n        {\r\n            var o = new Outline();\r\n            Outlines.Add(o);\r\n            TraverseBody(b, o);\r\n        }\r\n    }\r\n\r\n    private void TraverseBody(XElement outline, Outline ot)\r\n    {\r\n        if (outline != null)\r\n        {\r\n            foreach (var att in outline.Attributes())\r\n            {\r\n                ot.Attributes[att.Name.ToString()] = att.Value;\r\n            }\r\n            \r\n            foreach (var x in outline.Elements())\r\n            {\r\n                var o = new Outline();\r\n                ot.Outlines.Add(o);\r\n                TraverseBody(x, o);\r\n            }\r\n        }\r\n    }\r\n\r\n    public XElement ToXML()\r\n    {\r\n        var root = new XElement(\"opml\",\r\n            new XAttribute(\"version\", \"2.0\"),\r\n                new XElement(\"head\",\r\n                    new XElement(\"title\", this.Title),\r\n                    (this.DateCreated.HasValue) ? new XElement(\"dateCreated\", this.DateCreated.Value.ToString(\"R\")) : null,\r\n                    (this.DateModified.HasValue) ? new XElement(\"dateModified\", this.DateModified.Value.ToString(\"R\")) : null,\r\n                    (!string.IsNullOrWhiteSpace(this.OwnerName))? new XElement(\"ownerName\", this.OwnerName) : null,\r\n                    (!string.IsNullOrWhiteSpace(this.OwnerEmail)) ? new XElement(\"ownerEmail\", this.OwnerEmail) : null\r\n                    ));\r\n                    \r\n        var body = new XElement(\"body\");\r\n        foreach(var x in this.Outlines)\r\n        {\r\n            XElement newOutline = new XElement(\"outline\");\r\n            AddRecursiveChild(newOutline, x);\r\n            body.Add(newOutline);\r\n        }\r\n\r\n        root.Add(body);\r\n\r\n        return root;\r\n    }\r\n\r\n    private void AddRecursiveChild(XElement element, Outline o){\r\n        \r\n        element.Add(from y in o.Attributes\r\n                    select new XAttribute(y.Key, y.Value));\r\n        \r\n        foreach(var oo in o.Outlines)\r\n        {\r\n            XElement newOutline = new XElement(\"outline\");\r\n        \r\n            element.Add(newOutline);\r\n            AddRecursiveChild(newOutline, oo);\r\n        }\r\n    }\r\n\r\n}\r\n\r\npublic record Outline\r\n{\r\n    public Dictionary<string, string> Attributes { get; private set; } = new Dictionary<string, string>();\r\n\r\n    public List<Outline> Outlines { get; private set; } = new List<Outline>();\r\n}\r\n\r\npublic record RssSubscription\r\n{\r\n    public string? Title { get; set; }\r\n    public string? OwnerName { get; set; }\r\n    public string? OwnerEmail { get; set; }\r\n    public DateTime? DateCreated { get; set; }\r\n    public DateTime? DateModified { get; set; }\r\n    public List<RssSubscriptionItem> Items { get; set; } = new List<RssSubscriptionItem>();\r\n\r\n    /// <summary>\r\n    /// List errors in parsing opml attributes\r\n    /// </summary>\r\n    public List<string> ParsingErrors { get; set; } = new List<string>();\r\n\r\n    public RssSubscription(Opml opml)\r\n    {\r\n        Title = opml.Title;\r\n        DateCreated = opml.DateCreated;\r\n        DateModified = opml.DateModified;\r\n\r\n        var line = 0;\r\n        foreach (var x in opml.Outlines)\r\n        {\r\n            line++;\r\n            var item = new RssSubscriptionItem();\r\n            foreach (var y in x.Attributes)\r\n            {\r\n                try\r\n                {\r\n                    if (y.Key == \"text\")\r\n                        item.Text = y.Value;\r\n                    else if (y.Key == \"description\")\r\n                        item.Description = y.Value;\r\n                    else if (y.Key == \"title\")\r\n                        item.Title = y.Value;\r\n                    else if (y.Key == \"name\")\r\n                        item.Name = y.Value;\r\n                    else if (y.Key == \"htmlUrl\" && !string.IsNullOrWhiteSpace(y.Value))\r\n                        item.HtmlUri = new Uri(y.Value);\r\n                    else if (y.Key == \"xmlUrl\" && !string.IsNullOrWhiteSpace(y.Value))\r\n                        item.XmlUri = new Uri(y.Value);\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    ParsingErrors.Add(\"Error at line \" + line + \" in processing attribute \" \r\n                        + y.Key + \" with value \" + y.Value + \" \" +  ex.Message);\r\n                }\r\n            }\r\n\r\n            Items.Add(item);\r\n        }\r\n    }\r\n}\r\n\r\npublic record RssSubscriptionItem\r\n{\r\n    public string? Text { get; set; }\r\n    public string? Name { get; set; }\r\n    public string? Title { get; set; }\r\n    public string? Description { get; set; }\r\n    public Uri? HtmlUri { get; set; }\r\n    public Uri? XmlUri { get; set; }\r\n}"
  },
  {
    "path": "projects/orleans/rss-reader-4/Program.cs",
    "content": "using System.Net;\r\nusing Orleans;\r\nusing Orleans.Runtime;\r\nusing Orleans.Configuration;\r\nusing Orleans.Hosting;\r\nusing System.Xml;\r\nusing Microsoft.SyndicationFeed.Atom;\r\nusing Microsoft.SyndicationFeed;\r\nusing Microsoft.SyndicationFeed.Rss;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddHttpClient();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole();\r\nbuilder.Host.UseOrleans(builder =>\r\n    {\r\n        builder\r\n            .UseLocalhostClustering()\r\n            .UseInMemoryReminderService()\r\n            .Configure<ClusterOptions>(options =>\r\n            {\r\n                options.ClusterId = \"dev\";\r\n                options.ServiceId = \"http-client\";\r\n            })\r\n            .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)\r\n            .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(FeedSourceGrain).Assembly).WithReferences())\r\n            .AddRedisGrainStorage(Config.RedisStorage, optionsBuilder => optionsBuilder.Configure(options =>\r\n            {\r\n                options.ConnectionString = \"localhost:6379\";\r\n                options.UseJson = true;\r\n                options.DatabaseNumber = 1;\r\n            }));\r\n    });\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    var httpClientFactory = context.RequestServices.GetService<IHttpClientFactory>();\r\n    var httpClient = httpClientFactory.CreateClient();\r\n\r\n    var opmlSubscriptionList = await httpClient.GetStringAsync(\"http://scripting.com/misc/mlb.opml\");\r\n    var opml = new Opml(opmlSubscriptionList);\r\n    var subscriptionList = new RssSubscription(opml);\r\n\r\n    var client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    var feedSourceGrain = client.GetGrain<IFeedSource>(0)!;\r\n\r\n    var logger = context.RequestServices.GetService<ILoggerFactory>()!.CreateLogger(\"rss-reader\");\r\n\r\n    foreach (var source in subscriptionList.Items)\r\n    {\r\n        logger.LogInformation(\"Adding \" + source.XmlUri?.ToString() ?? String.Empty);\r\n        await feedSourceGrain.AddAsync(new FeedSource\r\n        {\r\n            Url = source.XmlUri?.ToString() ?? string.Empty,\r\n            Website = source.HtmlUri?.ToString() ?? string.Empty,\r\n            Title = source.Title ?? string.Empty,\r\n            UpdateFrequencyInMinutes = 3\r\n        });\r\n    }\r\n\r\n    var sources = await feedSourceGrain.GetAllAsync();\r\n\r\n    foreach (var s in sources)\r\n    {\r\n        var feedFetcherReminderGrain = client.GetGrain<IFeedFetcherReminder>(s.Url);\r\n                    // AddReminder is indempotent\r\n                    await feedFetcherReminderGrain.AddReminder(s.Url, s.UpdateFrequencyInMinutes);\r\n    }\r\n\r\n    var feedResultsGrain = client.GetGrain<IFeedItemResults>(0);\r\n    var feedItems = await feedResultsGrain.GetAllAsync();\r\n\r\n    await context.Response.WriteAsync(@\"<html>\r\n                    <head>\r\n                        <link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/css/uikit.min.css\"\" />\r\n                        <title>Orleans RSS Reader</title>\r\n                    </head>\");\r\n    await context.Response.WriteAsync(\"<body><div class=\\\"uk-container\\\">\");\r\n    await context.Response.WriteAsync(\"<a href=\\\"/feed-sources\\\">Feed Sources</a><br/>\");\r\n    if (feedItems.Count == 0)\r\n        await context.Response.WriteAsync(\"<p>Please refresh your browser again if you see no feeds displayed.</p>\");\r\n\r\n    await context.Response.WriteAsync(\"<ul class=\\\"uk-list\\\">\");\r\n    foreach (var i in feedItems)\r\n    {\r\n        await context.Response.WriteAsync(\"<li class=\\\"uk-card uk-card-default uk-card-body\\\">\");\r\n        if (!string.IsNullOrWhiteSpace(i.Title))\r\n            await context.Response.WriteAsync($\"{ i.Title }<br/>\");\r\n\r\n        await context.Response.WriteAsync(i.Description ?? \"\");\r\n\r\n        if (i.Url is object)\r\n            await context.Response.WriteAsync($\"<br/><a href=\\\"{i.Url}\\\">link</a>\");\r\n\r\n        await context.Response.WriteAsync($\"<div style=\\\"font-size:small;\\\">published on: {i.PublishedOn}</div>\");\r\n        await context.Response.WriteAsync($\"<div style=\\\"font-size:small;\\\">source: <a href=\\\"{i.Channel?.Website}\\\">{i.Channel?.Title}</a></div>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(\"</div></body></html>\");\r\n});\r\n\r\napp.MapGet(\"/feed-sources\", async context =>\r\n{\r\n    var client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    var feedSourceGrain = client.GetGrain<IFeedSource>(0)!;\r\n    var sources = await feedSourceGrain.GetAllAsync();\r\n\r\n    await context.Response.WriteAsync(@\"<html>\r\n                    <head>\r\n                        <link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/css/uikit.min.css\"\" />\r\n                        <title>Orleans RSS Reader</title>\r\n                    </head>\");\r\n    await context.Response.WriteAsync(\"<body><div class=\\\"uk-container\\\">\");\r\n    await context.Response.WriteAsync(\"<a href=\\\"/\\\">Home</a><br/>\");\r\n    await context.Response.WriteAsync(\"<strong>Valid</strong>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var s in sources.Where(x => x.IsLatestValid))\r\n    {\r\n        await context.Response.WriteAsync($\"<li><a href=\\\"{s.Url}\\\">{s.Url}</a>\");\r\n        await context.Response.WriteAsync(\"<ul>\");\r\n        foreach (var h in s.History)\r\n        {\r\n            await context.Response.WriteAsync($\"<li>{h.Timestamp} - {h.IsValid}<p>{h.Message}</p></li>\");\r\n        }\r\n        await context.Response.WriteAsync(\"</ul>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n\r\n    await context.Response.WriteAsync(\"<strong>Invalid</strong>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var s in sources.Where(x => !x.IsLatestValid))\r\n    {\r\n        await context.Response.WriteAsync($\"<li><a href=\\\"{s.Url}\\\">{s.Url}</a>\");\r\n        await context.Response.WriteAsync(\"<ul>\");\r\n        foreach (var h in s.History)\r\n        {\r\n            await context.Response.WriteAsync($\"<li>{h.Timestamp} - {h.IsValid}<p>{h.Message}</p></li>\");\r\n        }\r\n        await context.Response.WriteAsync(\"</ul>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n\r\n    await context.Response.WriteAsync(\"</div></body></html>\");\r\n});\r\n\r\napp.Run();\r\n\r\nstatic class Config\r\n{\r\n    public const string RedisStorage = \"redis-rss-reader-4\";\r\n}\r\n\r\n\r\nclass FeedFetcherReminder : Grain, IRemindable, IFeedFetcherReminder\r\n{\r\n    readonly IGrainFactory _grainFactory;\r\n    readonly ILogger _logger;\r\n\r\n    public FeedFetcherReminder(IGrainFactory grainFactory, ILogger<FeedFetcherReminder> logger)\r\n    {\r\n        _grainFactory = grainFactory;\r\n        _logger = logger;\r\n    }\r\n\r\n    public async Task AddReminder(string reminder, short repeatEveryMinute)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(reminder))\r\n            throw new ArgumentNullException(nameof(reminder));\r\n\r\n        var r = await GetReminder(reminder);\r\n\r\n        if (r is not object)\r\n            await RegisterOrUpdateReminder(reminder, dueTime: TimeSpan.FromSeconds(1), period: TimeSpan.FromMinutes(repeatEveryMinute));\r\n    }\r\n\r\n    public async Task ReceiveReminder(string reminderName, TickStatus status)\r\n    {\r\n        _logger.Info($\"Receive {reminderName} reminder\");\r\n\r\n        var feedSourceGrain = _grainFactory.GetGrain<IFeedSource>(0)!;\r\n\r\n        var feedSource = await feedSourceGrain.FindFeedSourceByUrlAsync(reminderName);\r\n\r\n        if (feedSource is object)\r\n        {\r\n            _logger.Info($\"Fetching {feedSource.Url}\");\r\n            var feedFetcherGrain = _grainFactory.GetGrain<IFeedFetcher>(feedSource.Url);\r\n            await feedFetcherGrain.FetchAsync(feedSource);\r\n        }\r\n    }\r\n}\r\n\r\ninterface IFeedFetcherReminder : Orleans.IGrainWithStringKey\r\n{\r\n    Task AddReminder(string reminder, short repeatEveryMinute);\r\n}\r\n\r\nclass FeedItemResultGrain : Grain, IFeedItemResults\r\n{\r\n    private readonly IPersistentState<FeedItemStore> _storage;\r\n\r\n    public FeedItemResultGrain([PersistentState(\"feed-item-results-4\", Config.RedisStorage)] IPersistentState<FeedItemStore> storage) => _storage = storage;\r\n\r\n    public async Task AddAsync(List<FeedItem> items)\r\n    {\r\n        //make sure there is no duplication\r\n        foreach (var i in items.Where(x => !string.IsNullOrWhiteSpace(x.Id)))\r\n        {\r\n            if (!_storage.State.Results.Exists(x => x.Id?.Equals(i.Id, StringComparison.OrdinalIgnoreCase) ?? false))\r\n                _storage.State.Results.Add(i);\r\n        }\r\n        await _storage.WriteStateAsync();\r\n    }\r\n\r\n    public Task<List<FeedItem>> GetAllAsync() => Task.FromResult(_storage.State.Results.OrderByDescending(x => x.PublishedOn).ToList());\r\n\r\n    public async Task ClearAsync()\r\n    {\r\n        _storage.State.Results.Clear();\r\n        await _storage.WriteStateAsync();\r\n    }\r\n}\r\n\r\nrecord FeedItemStore\r\n{\r\n    public List<FeedItem> Results { get; set; } = new List<FeedItem>();\r\n}\r\n\r\ninterface IFeedItemResults : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddAsync(List<FeedItem> items);\r\n\r\n    Task<List<FeedItem>> GetAllAsync();\r\n\r\n    Task ClearAsync();\r\n}\r\n\r\nclass FeedSourceGrain : Grain, IFeedSource\r\n{\r\n    private readonly IPersistentState<FeedSourceStore> _storage;\r\n\r\n    public FeedSourceGrain([PersistentState(\"feed-source-4\", Config.RedisStorage)] IPersistentState<FeedSourceStore> storage) => _storage = storage;\r\n\r\n    public async Task AddAsync(FeedSource source)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(source.Url))\r\n            return;\r\n\r\n        if (_storage.State.Sources.Find(x => x.Url == source.Url) is null)\r\n        {\r\n            _storage.State.Sources.Add(source);\r\n            await _storage.WriteStateAsync();\r\n        }\r\n    }\r\n\r\n    public Task<List<FeedSource>> GetAllAsync() => Task.FromResult(_storage.State.Sources);\r\n\r\n\r\n    public Task<FeedSource?> FindFeedSourceByUrlAsync(string url) =>\r\n        Task.FromResult(_storage.State.Sources.Find(x => x.Url.Equals(url, StringComparison.Ordinal)));\r\n\r\n    public async Task<FeedSource?> UpdateFeedSourceStatus(string url, bool activeStatus, string? message)\r\n    {\r\n        var feed = await FindFeedSourceByUrlAsync(url);\r\n        if (feed is object)\r\n        {\r\n            feed.LogFetchAttempt(activeStatus, message);\r\n            await _storage.WriteStateAsync();\r\n        }\r\n\r\n        return feed;\r\n    }\r\n}\r\n\r\nrecord FeedSourceStore\r\n{\r\n    public List<FeedSource> Sources { get; set; } = new List<FeedSource>();\r\n}\r\n\r\ninterface IFeedSource : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddAsync(FeedSource source);\r\n\r\n    Task<List<FeedSource>> GetAllAsync();\r\n\r\n    Task<FeedSource?> FindFeedSourceByUrlAsync(string url);\r\n\r\n    Task<FeedSource?> UpdateFeedSourceStatus(string url, bool activeStatus, string? message);\r\n}\r\n\r\ninterface IFeedFetcher : Orleans.IGrainWithStringKey\r\n{\r\n    Task FetchAsync(FeedSource source);\r\n}\r\n\r\nclass FeedFetchGrain : Grain, IFeedFetcher\r\n{\r\n    readonly IGrainFactory _grainFactory;\r\n\r\n    readonly ILogger _logger;\r\n\r\n    readonly IHttpClientFactory _httpClientFactory;\r\n\r\n    public FeedFetchGrain(IGrainFactory grainFactory, ILogger<FeedFetchGrain> logger, IHttpClientFactory httpClientFactory)\r\n    {\r\n        _grainFactory = grainFactory;\r\n        _logger = logger;\r\n        _httpClientFactory = httpClientFactory;\r\n    }\r\n\r\n    public async Task FetchAsync(FeedSource source)\r\n    {\r\n        var storage = _grainFactory.GetGrain<IFeedItemResults>(0);\r\n        var results = await ReadFeedAsync(source);\r\n        await storage.AddAsync(results);\r\n    }\r\n\r\n    public async Task<List<FeedItem>> ReadFeedAsync(FeedSource source)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(source.Url))\r\n            return new List<FeedItem>();\r\n\r\n        if (!source.CanFetch())\r\n            return new List<FeedItem>();\r\n\r\n        var feed = new List<FeedItem>();\r\n        FeedType feedType = FeedType.Rss;\r\n        try\r\n        {\r\n            _logger.LogInformation($\"Fetching {source.Url}\");\r\n\r\n            var client = _httpClientFactory.CreateClient();\r\n            client.Timeout = TimeSpan.FromSeconds(10);\r\n            var response = await client.GetAsync(source.Url.ToString());\r\n\r\n            var memory = new MemoryStream();\r\n            await response.Content.CopyToAsync(memory);\r\n\r\n            memory.Seek(0, SeekOrigin.Begin);\r\n            char[] buf = new char[400]; // We need large buffer because to skip xml metadata and comments before the root of the xml document starts\r\n            var sr = new StreamReader(memory);\r\n            var charRead = sr.ReadBlock(buf, 0, buf.Length);\r\n\r\n            if (!new string(buf).Contains(\"rss\", StringComparison.OrdinalIgnoreCase))\r\n                feedType = FeedType.Atom;\r\n\r\n            memory.Seek(0, SeekOrigin.Begin);\r\n            using var xmlReader = XmlReader.Create(memory, new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore });\r\n\r\n            if (feedType == FeedType.Rss)\r\n            {\r\n                var feedReader = new RssFeedReader(xmlReader);\r\n                // Read the feed\r\n                while (await feedReader.Read())\r\n                {\r\n                    switch (feedReader.ElementType)\r\n                    {\r\n                        // Read Item\r\n                        case SyndicationElementType.Item:\r\n                            var item = await feedReader.ReadItem();\r\n                            feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(item)));\r\n                            break;\r\n\r\n                        default:\r\n                            var content = await feedReader.ReadContent();\r\n\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                var feedReader = new AtomFeedReader(xmlReader);\r\n\r\n                while (await feedReader.Read())\r\n                {\r\n                    switch (feedReader.ElementType)\r\n                    {\r\n                        // Read Item\r\n                        case SyndicationElementType.Item:\r\n                            var entry = await feedReader.ReadEntry();\r\n                            feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(entry)));\r\n                            break;\r\n\r\n                        default:\r\n                            var content = await feedReader.ReadContent();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            var feedSource = _grainFactory.GetGrain<IFeedSource>(0)!;\r\n            await feedSource.UpdateFeedSourceStatus(source.Url, true, $\"{feed.Count} items fetched\");\r\n\r\n            return feed;\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            _logger.LogError($\"({feedType}) {source.Url} Exception: {ex.Message}\");\r\n\r\n            // Mark feed as invalid\r\n            var feedSource = _grainFactory.GetGrain<IFeedSource>(0)!;\r\n            await feedSource.UpdateFeedSourceStatus(source.Url, false, ex.Message);\r\n\r\n            return new List<FeedItem>();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-4/README.md",
    "content": "# RSS Reader with Reminder + Subscription list 2\r\n\r\n**This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples.\r\n\r\nThis is a simple RSS reader that uses two storage, one for storing a feed source and another for storing feed results. You can keep refreshing your browser and the RSS Reader will display the latest results whenever they are available. It also logs the result of every RSS feed that got fetch regularly using Orleans Reminder.\r\n\r\n- Make sure you have redis installed and running.\r\n- Run the app using `dotnet run`.\r\n- Open `localhost:5000`\r\n- You can keep refreshing the browser page as much as you want and it will only pick up and store unique feed items.\r\n- Orleans will keep keep refreshing each feed every x minutes (configurable). \r\n- This Rss Reader will read a list of RSS sources from an OPML subscription feed http://scripting.com/misc/mlb.opml\r\n\r\nIn this version of the RSS Reader, we use one Reminder grain per feed source. You can contrast this approach to the previous sample ([RSS Reader with Reminder + Subscription list](../rss-reader-3))"
  },
  {
    "path": "projects/orleans/rss-reader-4/rss-reader-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.SyndicationFeed.ReaderWriter\" Version=\"1.0.2\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Hosting\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Console\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.OrleansRuntime\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.OrleansProviders\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Core\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.CodeGenerator.MSBuild\" Version=\"3.6.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Orleans.Persistence.Redis\" Version=\"3.2.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-5/Feed.cs",
    "content": "\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Microsoft.SyndicationFeed;\r\n\r\nrecord FeedChannel\r\n{\r\n    public string? Title { get; set; }\r\n\r\n    public string? Website { get; set; }\r\n\r\n    public Uri? Url { get; set; }\r\n\r\n    public bool HideTitle { get; set; }\r\n\r\n    public bool HideDescription { get; set; }\r\n}\r\n\r\nclass FeedSource\r\n{\r\n    public string Url { get; set; } = string.Empty;\r\n\r\n    public string Title { get; set; } = string.Empty;\r\n\r\n    public string? Website { get; set; }\r\n\r\n    public bool HideTitle { get; set; }\r\n\r\n    public bool HideDescription { get; set; }\r\n\r\n    public short UpdateFrequencyInMinutes { get; set; } = 1;\r\n\r\n    public bool CanFetch ()=> History.Take(10).Count(x => !x.IsValid) <= 3;  \r\n\r\n    public bool IsLatestValid \r\n    {\r\n        get\r\n        {\r\n            if (History.Count == 0)\r\n                return true;\r\n\r\n            return History.First().IsValid;\r\n        }\r\n    }\r\n\r\n    public List<FeedHistory> History { get; set; } = new List<FeedHistory>();\r\n\r\n    public void LogFetchAttempt(bool isValid, string? message = null) =>\r\n        History.Insert(0, new FeedHistory { Timestamp = DateTimeOffset.UtcNow, IsValid = isValid, Message = message });\r\n\r\n    public FeedChannel ToChannel()\r\n    {\r\n        return new FeedChannel\r\n        {\r\n            Title = Title,\r\n            Website = Website,\r\n            HideTitle = HideTitle,\r\n            HideDescription = HideDescription\r\n        };\r\n    }\r\n}\r\n\r\nrecord FeedHistory \r\n{\r\n    public DateTimeOffset Timestamp { get; set; }\r\n\r\n    public bool IsValid { get; set; }\r\n\r\n    public string? Message { get; set; }\r\n}\r\n\r\nrecord FeedItem\r\n{\r\n    public FeedChannel? Channel { get; set; }\r\n\r\n    public string? Id { get; set; }\r\n\r\n    public string? Title { get; set; }\r\n\r\n    public string? Description { get; set; }\r\n\r\n    public Uri? Url { get; set;}\r\n\r\n    public DateTimeOffset PublishedOn { get; set; }\r\n\r\n    public FeedItem()\r\n    {\r\n\r\n    }\r\n\r\n    public FeedItem(FeedChannel channel, SyndicationItem item)\r\n    {\r\n        Channel = channel;\r\n        Id = item.Id;\r\n        Title = item.Title;\r\n        Description = item.Description;\r\n        var link = item.Links.FirstOrDefault();\r\n        if (link is object)\r\n            Url = link.Uri;        \r\n\r\n        if (item.LastUpdated == default(DateTimeOffset))\r\n            PublishedOn = item.Published;\r\n        else\r\n            PublishedOn = item.LastUpdated;\r\n    }\r\n}\r\n\r\nenum FeedType\r\n{\r\n    Atom,\r\n    Rss\r\n}\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-5/Interfaces.cs",
    "content": "\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\n\r\ninterface IFeedSource : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddAsync(FeedSource source);\r\n\r\n    Task<List<FeedSource>> GetAllAsync();\r\n\r\n    Task<FeedSource?> FindFeedSourceByUrlAsync(string url);\r\n\r\n    Task<FeedSource?> UpdateFeedSourceStatus(string url, bool activeStatus, string? message);\r\n} \r\n\r\ninterface IFeedFetcher : Orleans.IGrainWithStringKey\r\n{\r\n    Task FetchAsync(FeedSource source);\r\n}\r\n\r\ninterface IFeedItemResults : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddAsync(List<FeedItem> items);\r\n\r\n    Task<List<FeedItem>> GetAllAsync();\r\n\r\n    Task ClearAsync();\r\n}\r\n\r\ninterface IFeedFetcherReminder  : Orleans.IGrainWithStringKey\r\n{\r\n    Task AddReminder(string reminder, short repeatEveryMinute);\r\n}\r\n\r\ninterface IFeedStreamReader : Orleans.IGrain { }"
  },
  {
    "path": "projects/orleans/rss-reader-5/Opml.cs",
    "content": "\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Xml.Linq;\r\n\r\npublic class Opml\r\n{\r\n    public string? Title { get; set; }\r\n    public DateTime? DateCreated { get; set; }\r\n    public DateTime? DateModified { get; set; }\r\n    public string? OwnerName { get; set; }\r\n    public string? OwnerEmail { get; set; }\r\n    public Uri? OwnerId { get; set; }\r\n    public Uri? Docs { get; set; }\r\n    public string? ExpansionState { get; set; }\r\n    public int? VertScrollState { get; set; }\r\n    public int? WindowTop { get; set; }\r\n    public int? WindowLeft { get; set; }\r\n    public int? WindowBottom { get; set; }\r\n    public int? WindowRight { get; set; }\r\n    public List<Outline> Outlines { get; private set; }\r\n\r\n    public Opml()\r\n    {\r\n        Outlines = new List<Outline>();\r\n    }\r\n\r\n    public Opml(string xml):this()\r\n    {\r\n        LoadFromXML(xml);\r\n    }\r\n\r\n    public void LoadFromXML(string xml)\r\n    {\r\n        var elements = XElement.Parse(xml);\r\n        var heads = elements.Element(\"head\").Descendants();\r\n\r\n        Func<string, string?> selectString = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => x.Value).FirstOrDefault();\r\n\r\n        Func<string, int?> selectInt = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => Convert.ToInt32(x.Value)).FirstOrDefault();\r\n\r\n        Func<string, DateTime?> selectDate = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => Convert.ToDateTime(x.Value)).FirstOrDefault();\r\n\r\n        Func<string, Uri?> selectUri = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => new Uri(x.Value)).FirstOrDefault();\r\n\r\n        Title = selectString(\"title\");\r\n        DateCreated = selectDate(\"dateCreated\");\r\n        DateModified = selectDate(\"dateModified\");\r\n        OwnerName = selectString(\"ownerName\");\r\n        OwnerEmail = selectString(\"ownerEmail\");\r\n        OwnerId = selectUri(\"ownerId\");\r\n        Docs = selectUri(\"docs\");\r\n        ExpansionState = selectString(\"expansionState\");\r\n        VertScrollState = selectInt(\"vertScrollState\");\r\n        WindowTop = selectInt(\"windowTop\");\r\n        WindowLeft = selectInt(\"windowLeft\");\r\n        WindowBottom = selectInt(\"windowBottom\");\r\n        WindowRight = selectInt(\"windowRight\");\r\n\r\n        var bodies = elements.Element(\"body\").Elements();\r\n        //todo: make it recursive\r\n        foreach (var b in bodies)\r\n        {\r\n            var o = new Outline();\r\n            Outlines.Add(o);\r\n            TraverseBody(b, o);\r\n        }\r\n    }\r\n\r\n    private void TraverseBody(XElement outline, Outline ot)\r\n    {\r\n        if (outline != null)\r\n        {\r\n            foreach (var att in outline.Attributes())\r\n            {\r\n                ot.Attributes[att.Name.ToString()] = att.Value;\r\n            }\r\n            \r\n            foreach (var x in outline.Elements())\r\n            {\r\n                var o = new Outline();\r\n                ot.Outlines.Add(o);\r\n                TraverseBody(x, o);\r\n            }\r\n        }\r\n    }\r\n\r\n    public XElement ToXML()\r\n    {\r\n        var root = new XElement(\"opml\",\r\n            new XAttribute(\"version\", \"2.0\"),\r\n                new XElement(\"head\",\r\n                    new XElement(\"title\", this.Title),\r\n                    (this.DateCreated.HasValue) ? new XElement(\"dateCreated\", this.DateCreated.Value.ToString(\"R\")) : null,\r\n                    (this.DateModified.HasValue) ? new XElement(\"dateModified\", this.DateModified.Value.ToString(\"R\")) : null,\r\n                    (!string.IsNullOrWhiteSpace(this.OwnerName))? new XElement(\"ownerName\", this.OwnerName) : null,\r\n                    (!string.IsNullOrWhiteSpace(this.OwnerEmail)) ? new XElement(\"ownerEmail\", this.OwnerEmail) : null\r\n                    ));\r\n                    \r\n        var body = new XElement(\"body\");\r\n        foreach(var x in this.Outlines)\r\n        {\r\n            XElement newOutline = new XElement(\"outline\");\r\n            AddRecursiveChild(newOutline, x);\r\n            body.Add(newOutline);\r\n        }\r\n\r\n        root.Add(body);\r\n\r\n        return root;\r\n    }\r\n\r\n    private void AddRecursiveChild(XElement element, Outline o){\r\n        \r\n        element.Add(from y in o.Attributes\r\n                    select new XAttribute(y.Key, y.Value));\r\n        \r\n        foreach(var oo in o.Outlines)\r\n        {\r\n            XElement newOutline = new XElement(\"outline\");\r\n        \r\n            element.Add(newOutline);\r\n            AddRecursiveChild(newOutline, oo);\r\n        }\r\n    }\r\n\r\n}\r\n\r\npublic record Outline\r\n{\r\n    public Dictionary<string, string> Attributes { get; private set; } = new Dictionary<string, string>();\r\n\r\n    public List<Outline> Outlines { get; private set; } = new List<Outline>();\r\n}\r\n\r\npublic record RssSubscription\r\n{\r\n    public string? Title { get; set; }\r\n    public string? OwnerName { get; set; }\r\n    public string? OwnerEmail { get; set; }\r\n    public DateTime? DateCreated { get; set; }\r\n    public DateTime? DateModified { get; set; }\r\n    public List<RssSubscriptionItem> Items { get; set; } = new List<RssSubscriptionItem>();\r\n\r\n    /// <summary>\r\n    /// List errors in parsing opml attributes\r\n    /// </summary>\r\n    public List<string> ParsingErrors { get; set; } = new List<string>();\r\n\r\n    public RssSubscription(Opml opml)\r\n    {\r\n        Title = opml.Title;\r\n        DateCreated = opml.DateCreated;\r\n        DateModified = opml.DateModified;\r\n\r\n        var line = 0;\r\n        foreach (var x in opml.Outlines)\r\n        {\r\n            line++;\r\n            var item = new RssSubscriptionItem();\r\n            foreach (var y in x.Attributes)\r\n            {\r\n                try\r\n                {\r\n                    if (y.Key == \"text\")\r\n                        item.Text = y.Value;\r\n                    else if (y.Key == \"description\")\r\n                        item.Description = y.Value;\r\n                    else if (y.Key == \"title\")\r\n                        item.Title = y.Value;\r\n                    else if (y.Key == \"name\")\r\n                        item.Name = y.Value;\r\n                    else if (y.Key == \"htmlUrl\" && !string.IsNullOrWhiteSpace(y.Value))\r\n                        item.HtmlUri = new Uri(y.Value);\r\n                    else if (y.Key == \"xmlUrl\" && !string.IsNullOrWhiteSpace(y.Value))\r\n                        item.XmlUri = new Uri(y.Value);\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    ParsingErrors.Add(\"Error at line \" + line + \" in processing attribute \" \r\n                        + y.Key + \" with value \" + y.Value + \" \" +  ex.Message);\r\n                }\r\n            }\r\n\r\n            Items.Add(item);\r\n        }\r\n    }\r\n}\r\n\r\npublic record RssSubscriptionItem\r\n{\r\n    public string? Text { get; set; }\r\n    public string? Name { get; set; }\r\n    public string? Title { get; set; }\r\n    public string? Description { get; set; }\r\n    public Uri? HtmlUri { get; set; }\r\n    public Uri? XmlUri { get; set; }\r\n}"
  },
  {
    "path": "projects/orleans/rss-reader-5/Program.cs",
    "content": "using System.Net;\r\nusing Orleans;\r\nusing Orleans.Runtime;\r\nusing Orleans.Configuration;\r\nusing Orleans.Hosting;\r\nusing System.Xml;\r\nusing Microsoft.SyndicationFeed.Atom;\r\nusing Microsoft.SyndicationFeed;\r\nusing Microsoft.SyndicationFeed.Rss;\r\nusing Orleans.Streams;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddHttpClient();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole();\r\nbuilder.Host.UseOrleans(builder =>\r\n{\r\n    builder\r\n        .UseLocalhostClustering()\r\n        .UseInMemoryReminderService()\r\n        .Configure<ClusterOptions>(options =>\r\n        {\r\n            options.ClusterId = \"dev\";\r\n            options.ServiceId = \"http-client\";\r\n        })\r\n        .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)\r\n        .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(FeedSourceGrain).Assembly).WithReferences())\r\n        .AddRedisGrainStorage(Config.RedisStorage, optionsBuilder => optionsBuilder.Configure(options =>\r\n        {\r\n            options.ConnectionString = \"localhost:6379\";\r\n            options.UseJson = true;\r\n            options.DatabaseNumber = 1;\r\n        }))\r\n        .AddMemoryGrainStorage(\"PubSubStore\")\r\n        .AddSimpleMessageStreamProvider(Config.StreamProvider);\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    var httpClientFactory = context.RequestServices.GetService<IHttpClientFactory>();\r\n    var httpClient = httpClientFactory.CreateClient();\r\n\r\n    var opmlSubscriptionList = await httpClient.GetStringAsync(\"http://scripting.com/misc/mlb.opml\");\r\n    var opml = new Opml(opmlSubscriptionList);\r\n    var subscriptionList = new RssSubscription(opml);\r\n\r\n    var client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    var feedSourceGrain = client.GetGrain<IFeedSource>(0)!;\r\n\r\n    var logger = context.RequestServices.GetService<ILoggerFactory>()!.CreateLogger(\"rss-reader\");\r\n\r\n    foreach (var source in subscriptionList.Items)\r\n    {\r\n        logger.LogInformation(\"Adding \" + source.XmlUri?.ToString() ?? String.Empty);\r\n        await feedSourceGrain.AddAsync(new FeedSource\r\n        {\r\n            Url = source.XmlUri?.ToString() ?? string.Empty,\r\n            Website = source.HtmlUri?.ToString() ?? string.Empty,\r\n            Title = source.Title ?? string.Empty,\r\n            UpdateFrequencyInMinutes = 3\r\n        });\r\n    }\r\n\r\n    var sources = await feedSourceGrain.GetAllAsync();\r\n\r\n    foreach (var s in sources)\r\n    {\r\n        var feedFetcherReminderGrain = client.GetGrain<IFeedFetcherReminder>(s.Url);\r\n                    // AddReminder is indempotent\r\n                    await feedFetcherReminderGrain.AddReminder(s.Url, s.UpdateFrequencyInMinutes);\r\n    }\r\n\r\n    var feedResultsGrain = client.GetGrain<IFeedItemResults>(0);\r\n    var feedItems = await feedResultsGrain.GetAllAsync();\r\n\r\n    await context.Response.WriteAsync(@\"<html>\r\n                    <head>\r\n                        <link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/css/uikit.min.css\"\" />\r\n                        <title>Orleans RSS Reader</title>\r\n                    </head>\");\r\n    await context.Response.WriteAsync(\"<body><div class=\\\"uk-container\\\">\");\r\n    await context.Response.WriteAsync(\"<a href=\\\"/feed-sources\\\">Feed Sources</a><br/>\");\r\n    if (feedItems.Count == 0)\r\n        await context.Response.WriteAsync(\"<p>Please refresh your browser again if you see no feeds displayed.</p>\");\r\n\r\n    await context.Response.WriteAsync(\"<ul class=\\\"uk-list\\\">\");\r\n    foreach (var i in feedItems)\r\n    {\r\n        await context.Response.WriteAsync(\"<li class=\\\"uk-card uk-card-default uk-card-body\\\">\");\r\n        if (!string.IsNullOrWhiteSpace(i.Title))\r\n            await context.Response.WriteAsync($\"{ i.Title }<br/>\");\r\n\r\n        await context.Response.WriteAsync(i.Description ?? \"\");\r\n\r\n        if (i.Url is object)\r\n            await context.Response.WriteAsync($\"<br/><a href=\\\"{i.Url}\\\">link</a>\");\r\n\r\n        await context.Response.WriteAsync($\"<div style=\\\"font-size:small;\\\">published on: {i.PublishedOn}</div>\");\r\n        await context.Response.WriteAsync($\"<div style=\\\"font-size:small;\\\">source: <a href=\\\"{i.Channel?.Website}\\\">{i.Channel?.Title}</a></div>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(\"</div></body></html>\");\r\n});\r\n\r\napp.MapGet(\"/feed-sources\", async context =>\r\n{\r\n    var client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    var feedSourceGrain = client.GetGrain<IFeedSource>(0)!;\r\n    var sources = await feedSourceGrain.GetAllAsync();\r\n\r\n    await context.Response.WriteAsync(@\"<html>\r\n                    <head>\r\n                        <link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/css/uikit.min.css\"\" />\r\n                        <title>Orleans RSS Reader</title>\r\n                    </head>\");\r\n    await context.Response.WriteAsync(\"<body><div class=\\\"uk-container\\\">\");\r\n    await context.Response.WriteAsync(\"<a href=\\\"/\\\">Home</a><br/>\");\r\n    await context.Response.WriteAsync(\"<strong>Valid</strong>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var s in sources.Where(x => x.IsLatestValid))\r\n    {\r\n        await context.Response.WriteAsync($\"<li><a href=\\\"{s.Url}\\\">{s.Url}</a>\");\r\n        await context.Response.WriteAsync(\"<ul>\");\r\n        foreach (var h in s.History)\r\n        {\r\n            await context.Response.WriteAsync($\"<li>{h.Timestamp} - {h.IsValid}<p>{h.Message}</p></li>\");\r\n        }\r\n        await context.Response.WriteAsync(\"</ul>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n\r\n    await context.Response.WriteAsync(\"<strong>Invalid</strong>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var s in sources.Where(x => !x.IsLatestValid))\r\n    {\r\n        await context.Response.WriteAsync($\"<li><a href=\\\"{s.Url}\\\">{s.Url}</a>\");\r\n        await context.Response.WriteAsync(\"<ul>\");\r\n        foreach (var h in s.History)\r\n        {\r\n            await context.Response.WriteAsync($\"<li>{h.Timestamp} - {h.IsValid}<p>{h.Message}</p></li>\");\r\n        }\r\n        await context.Response.WriteAsync(\"</ul>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n\r\n    await context.Response.WriteAsync(\"</div></body></html>\");\r\n});\r\n\r\napp.Run();\r\n\r\nstatic class Config\r\n{\r\n    public const string RedisStorage = \"redis-rss-reader-5\";\r\n\r\n    public const string StreamProvider = \"SMSProvider\";\r\n\r\n    public static readonly Guid StreamId = Guid.NewGuid();\r\n\r\n    public const string StreamChannel = \"RSS\";\r\n}\r\n\r\nclass FeedFetcherReminder : Grain, IRemindable, IFeedFetcherReminder\r\n{\r\n    readonly IGrainFactory _grainFactory;\r\n    readonly ILogger _logger;\r\n\r\n    public FeedFetcherReminder(IGrainFactory grainFactory, ILogger<FeedFetcherReminder> logger)\r\n    {\r\n        _grainFactory = grainFactory;\r\n        _logger = logger;\r\n    }\r\n\r\n    public async Task AddReminder(string reminder, short repeatEveryMinute)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(reminder))\r\n            throw new ArgumentNullException(nameof(reminder));\r\n\r\n        var r = await GetReminder(reminder);\r\n\r\n        if (r is not object)\r\n            await RegisterOrUpdateReminder(reminder, dueTime: TimeSpan.FromSeconds(1), period: TimeSpan.FromMinutes(repeatEveryMinute));\r\n    }\r\n\r\n    public async Task ReceiveReminder(string reminderName, TickStatus status)\r\n    {\r\n        _logger.Info($\"Receive {reminderName} reminder\");\r\n\r\n        var feedSourceGrain = _grainFactory.GetGrain<IFeedSource>(0)!;\r\n\r\n        var feedSource = await feedSourceGrain.FindFeedSourceByUrlAsync(reminderName);\r\n\r\n        if (feedSource is object)\r\n        {\r\n            _logger.Info($\"Fetching {feedSource.Url}\");\r\n            var feedFetcherGrain = _grainFactory.GetGrain<IFeedFetcher>(feedSource.Url);\r\n            await feedFetcherGrain.FetchAsync(feedSource);\r\n        }\r\n    }\r\n}\r\n\r\n[ImplicitStreamSubscription(Config.StreamChannel)]\r\nclass FeedStreamReaderGrain : Grain, IFeedStreamReader\r\n{\r\n    readonly ILogger _logger;\r\n\r\n    readonly IGrainFactory _grainFactory;\r\n\r\n    public FeedStreamReaderGrain(ILogger<FeedStreamReaderGrain> logger, IGrainFactory grainFactory)\r\n    {\r\n        _logger = logger;\r\n        _grainFactory = grainFactory;\r\n    }\r\n\r\n    public override async Task OnActivateAsync()\r\n    {\r\n        var streamProvider = GetStreamProvider(Config.StreamProvider);\r\n        var stream = streamProvider.GetStream<List<FeedItem>>(Config.StreamId, Config.StreamChannel);\r\n\r\n        var feedItemResultGrain = _grainFactory.GetGrain<IFeedItemResults>(0);\r\n        await stream.SubscribeAsync<List<FeedItem>>(async (data, token) =>\r\n        {\r\n            _logger.Info($\"Feed Items {data.Count}\");\r\n            await feedItemResultGrain.AddAsync(data);\r\n        });\r\n    }\r\n}\r\n\r\nclass FeedItemResultGrain : Grain, IFeedItemResults\r\n{\r\n    private readonly IPersistentState<FeedItemStore> _storage;\r\n\r\n    public FeedItemResultGrain([PersistentState(\"feed-item-results-5\", Config.RedisStorage)] IPersistentState<FeedItemStore> storage) => _storage = storage;\r\n\r\n    public async Task AddAsync(List<FeedItem> items)\r\n    {\r\n        //make sure there is no duplication\r\n        foreach (var i in items.Where(x => !string.IsNullOrWhiteSpace(x.Id)))\r\n        {\r\n            if (!_storage.State.Results.Exists(x => x.Id?.Equals(i.Id, StringComparison.OrdinalIgnoreCase) ?? false))\r\n                _storage.State.Results.Add(i);\r\n        }\r\n        await _storage.WriteStateAsync();\r\n    }\r\n\r\n    public Task<List<FeedItem>> GetAllAsync() => Task.FromResult(_storage.State.Results.OrderByDescending(x => x.PublishedOn).ToList());\r\n\r\n    public async Task ClearAsync()\r\n    {\r\n        _storage.State.Results.Clear();\r\n        await _storage.WriteStateAsync();\r\n    }\r\n}\r\n\r\nrecord FeedItemStore\r\n{\r\n    public List<FeedItem> Results { get; set; } = new List<FeedItem>();\r\n}\r\n\r\nclass FeedSourceGrain : Grain, IFeedSource\r\n{\r\n    private readonly IPersistentState<FeedSourceStore> _storage;\r\n\r\n    public FeedSourceGrain([PersistentState(\"feed-source-5\", Config.RedisStorage)] IPersistentState<FeedSourceStore> storage) => _storage = storage;\r\n\r\n    public async Task AddAsync(FeedSource source)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(source.Url))\r\n            return;\r\n\r\n        if (_storage.State.Sources.Find(x => x.Url == source.Url) is null)\r\n        {\r\n            _storage.State.Sources.Add(source);\r\n            await _storage.WriteStateAsync();\r\n        }\r\n    }\r\n\r\n    public Task<List<FeedSource>> GetAllAsync() => Task.FromResult(_storage.State.Sources);\r\n\r\n    public Task<FeedSource?> FindFeedSourceByUrlAsync(string url) =>\r\n        Task.FromResult(_storage.State.Sources.Find(x => x.Url.Equals(url, StringComparison.Ordinal)));\r\n\r\n    public async Task<FeedSource?> UpdateFeedSourceStatus(string url, bool activeStatus, string? message)\r\n    {\r\n        var feed = await FindFeedSourceByUrlAsync(url);\r\n        if (feed is object)\r\n        {\r\n            feed.LogFetchAttempt(activeStatus, message);\r\n            await _storage.WriteStateAsync();\r\n        }\r\n\r\n        return feed;\r\n    }\r\n}\r\n\r\nrecord FeedSourceStore\r\n{\r\n    public List<FeedSource> Sources { get; set; } = new List<FeedSource>();\r\n}\r\n\r\nclass FeedFetchGrain : Grain, IFeedFetcher\r\n{\r\n    readonly IGrainFactory _grainFactory;\r\n\r\n    readonly ILogger _logger;\r\n\r\n    readonly IHttpClientFactory _httpClientFactory;\r\n\r\n    public FeedFetchGrain(IGrainFactory grainFactory, ILogger<FeedFetchGrain> logger, IHttpClientFactory httpClientFactory)\r\n    {\r\n        _grainFactory = grainFactory;\r\n        _logger = logger;\r\n        _httpClientFactory = httpClientFactory;\r\n    }\r\n\r\n    public async Task FetchAsync(FeedSource source)\r\n    {\r\n        var results = await ReadFeedAsync(source);\r\n\r\n        var streamProvider = GetStreamProvider(Config.StreamProvider);\r\n        var stream = streamProvider.GetStream<List<FeedItem>>(Config.StreamId, Config.StreamChannel);\r\n\r\n        await stream.OnNextAsync(results);\r\n    }\r\n\r\n    public async Task<List<FeedItem>> ReadFeedAsync(FeedSource source)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(source.Url))\r\n            return new List<FeedItem>();\r\n\r\n        if (!source.CanFetch())\r\n            return new List<FeedItem>();\r\n\r\n        var feed = new List<FeedItem>();\r\n        FeedType feedType = FeedType.Rss;\r\n        try\r\n        {\r\n            _logger.LogInformation($\"Fetching {source.Url}\");\r\n\r\n            var client = _httpClientFactory.CreateClient();\r\n            client.Timeout = TimeSpan.FromSeconds(10);\r\n            var response = await client.GetAsync(source.Url.ToString());\r\n\r\n            var memory = new MemoryStream();\r\n            await response.Content.CopyToAsync(memory);\r\n\r\n            memory.Seek(0, SeekOrigin.Begin);\r\n            char[] buf = new char[400]; // We need large buffer because to skip xml metadata and comments before the root of the xml document starts\r\n            var sr = new StreamReader(memory);\r\n            var charRead = sr.ReadBlock(buf, 0, buf.Length);\r\n\r\n            if (!new string(buf).Contains(\"rss\", StringComparison.OrdinalIgnoreCase))\r\n                feedType = FeedType.Atom;\r\n\r\n            memory.Seek(0, SeekOrigin.Begin);\r\n            using var xmlReader = XmlReader.Create(memory, new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore });\r\n\r\n            if (feedType == FeedType.Rss)\r\n            {\r\n                var feedReader = new RssFeedReader(xmlReader);\r\n                // Read the feed\r\n                while (await feedReader.Read())\r\n                {\r\n                    switch (feedReader.ElementType)\r\n                    {\r\n                        // Read Item\r\n                        case SyndicationElementType.Item:\r\n                            var item = await feedReader.ReadItem();\r\n                            feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(item)));\r\n                            break;\r\n\r\n                        default:\r\n                            var content = await feedReader.ReadContent();\r\n\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                var feedReader = new AtomFeedReader(xmlReader);\r\n\r\n                while (await feedReader.Read())\r\n                {\r\n                    switch (feedReader.ElementType)\r\n                    {\r\n                        // Read Item\r\n                        case SyndicationElementType.Item:\r\n                            var entry = await feedReader.ReadEntry();\r\n                            feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(entry)));\r\n                            break;\r\n\r\n                        default:\r\n                            var content = await feedReader.ReadContent();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            var feedSource = _grainFactory.GetGrain<IFeedSource>(0)!;\r\n            await feedSource.UpdateFeedSourceStatus(source.Url, true, $\"{feed.Count} items fetched\");\r\n\r\n            return feed;\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            _logger.LogError($\"({feedType}) {source.Url} Exception: {ex.Message}\");\r\n\r\n            // Mark feed as invalid\r\n            var feedSource = _grainFactory.GetGrain<IFeedSource>(0)!;\r\n            await feedSource.UpdateFeedSourceStatus(source.Url, false, ex.Message);\r\n\r\n            return new List<FeedItem>();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-5/README.md",
    "content": "# RSS Reader with Reminder + Subscription list + Orleans Streams\r\n\r\n**This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples.\r\n\r\nThis is a simple RSS reader that uses two storage, one for storing a feed source and another for storing feed results. You can keep refreshing your browser and the RSS Reader will display the latest results whenever they are available. It also logs the result of every RSS feed that got fetch regularly using Orleans Reminder.\r\n\r\n- Make sure you have redis installed and running.\r\n- Run the app using `dotnet run`.\r\n- Open `localhost:5000`\r\n- You can keep refreshing the browser page as much as you want and it will only pick up and store unique feed items.\r\n- Orleans will keep keep refreshing each feed every x minutes (configurable). \r\n- This Rss Reader will read a list of RSS sources from an OPML subscription feed http://scripting.com/misc/mlb.opml\r\n\r\nIn this RSS Reader, there is a single stream with a single channel. Each Reminder will fetch a RSS news feed on a regular basis and publish the results into the stream. Then we will have one (grain) implicit subscriber to the stream that will process the feed and store it. The rule is one grain is created per stream id for implicit subscriber."
  },
  {
    "path": "projects/orleans/rss-reader-5/rss-reader-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.SyndicationFeed.ReaderWriter\" Version=\"1.0.2\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Hosting\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Console\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.OrleansRuntime\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.OrleansProviders\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Core\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.CodeGenerator.MSBuild\" Version=\"3.6.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Orleans.Persistence.Redis\" Version=\"3.2.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-6/Feed.cs",
    "content": "\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Microsoft.SyndicationFeed;\r\n\r\nrecord FeedChannel\r\n{\r\n    public string? Title { get; set; }\r\n\r\n    public string? Website { get; set; }\r\n\r\n    public Uri? Url { get; set; }\r\n\r\n    public bool HideTitle { get; set; }\r\n\r\n    public bool HideDescription { get; set; }\r\n}\r\n\r\nclass FeedSource\r\n{\r\n    public string Url { get; set; } = string.Empty;\r\n\r\n    public string Title { get; set; } = string.Empty;\r\n\r\n    public string? Website { get; set; }\r\n\r\n    public bool HideTitle { get; set; }\r\n\r\n    public bool HideDescription { get; set; }\r\n\r\n    public short UpdateFrequencyInMinutes { get; set; } = 1;\r\n\r\n    public bool CanFetch ()=> History.Take(10).Count(x => !x.IsValid) <= 3;  \r\n\r\n    public bool IsLatestValid \r\n    {\r\n        get\r\n        {\r\n            if (History.Count == 0)\r\n                return true;\r\n\r\n            return History.First().IsValid;\r\n        }\r\n    }\r\n\r\n    public List<FeedHistory> History { get; set; } = new List<FeedHistory>();\r\n\r\n    public void LogFetchAttempt(bool isValid, string? message = null) =>\r\n        History.Insert(0, new FeedHistory { Timestamp = DateTimeOffset.UtcNow, IsValid = isValid, Message = message });\r\n\r\n    public FeedChannel ToChannel()\r\n    {\r\n        return new FeedChannel\r\n        {\r\n            Title = Title,\r\n            Website = Website,\r\n            HideTitle = HideTitle,\r\n            HideDescription = HideDescription\r\n        };\r\n    }\r\n}\r\n\r\nrecord FeedHistory \r\n{\r\n    public DateTimeOffset Timestamp { get; set; }\r\n\r\n    public bool IsValid { get; set; }\r\n\r\n    public string? Message { get; set; }\r\n}\r\n\r\nrecord FeedItem\r\n{\r\n    public FeedChannel? Channel { get; set; }\r\n\r\n    public string? Id { get; set; }\r\n\r\n    public string? Title { get; set; }\r\n\r\n    public string? Description { get; set; }\r\n\r\n    public Uri? Url { get; set;}\r\n\r\n    public DateTimeOffset PublishedOn { get; set; }\r\n\r\n    public FeedItem()\r\n    {\r\n\r\n    }\r\n\r\n    public FeedItem(FeedChannel channel, SyndicationItem item)\r\n    {\r\n        Channel = channel;\r\n        Id = item.Id;\r\n        Title = item.Title;\r\n        Description = item.Description;\r\n        var link = item.Links.FirstOrDefault();\r\n        if (link is object)\r\n            Url = link.Uri;        \r\n\r\n        if (item.LastUpdated == default(DateTimeOffset))\r\n            PublishedOn = item.Published;\r\n        else\r\n            PublishedOn = item.LastUpdated;\r\n    }\r\n}\r\n\r\nenum FeedType\r\n{\r\n    Atom,\r\n    Rss\r\n}\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-6/Interfaces.cs",
    "content": "\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\n\r\ninterface IFeedSource : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddAsync(FeedSource source);\r\n\r\n    Task<List<FeedSource>> GetAllAsync();\r\n\r\n    Task<FeedSource?> FindFeedSourceByUrlAsync(string url);\r\n\r\n    Task<FeedSource?> UpdateFeedSourceStatus(string url, bool activeStatus, string? message);\r\n} \r\n\r\ninterface IFeedFetcher : Orleans.IGrainWithStringKey\r\n{\r\n    Task FetchAsync(FeedSource source);\r\n}\r\n\r\ninterface IFeedItemResults : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task AddAsync(List<FeedItem> items);\r\n\r\n    Task<List<FeedItem>> GetAllAsync();\r\n\r\n    Task ClearAsync();\r\n}\r\n\r\ninterface IFeedFetcherReminder  : Orleans.IGrainWithStringKey\r\n{\r\n    Task AddReminder(string reminder, short repeatEveryMinute);\r\n}\r\n\r\ninterface IFeedStreamReader : Orleans.IGrain { }"
  },
  {
    "path": "projects/orleans/rss-reader-6/Opml.cs",
    "content": "\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Xml.Linq;\r\n\r\npublic class Opml\r\n{\r\n    public string? Title { get; set; }\r\n    public DateTime? DateCreated { get; set; }\r\n    public DateTime? DateModified { get; set; }\r\n    public string? OwnerName { get; set; }\r\n    public string? OwnerEmail { get; set; }\r\n    public Uri? OwnerId { get; set; }\r\n    public Uri? Docs { get; set; }\r\n    public string? ExpansionState { get; set; }\r\n    public int? VertScrollState { get; set; }\r\n    public int? WindowTop { get; set; }\r\n    public int? WindowLeft { get; set; }\r\n    public int? WindowBottom { get; set; }\r\n    public int? WindowRight { get; set; }\r\n    public List<Outline> Outlines { get; private set; }\r\n\r\n    public Opml()\r\n    {\r\n        Outlines = new List<Outline>();\r\n    }\r\n\r\n    public Opml(string xml):this()\r\n    {\r\n        LoadFromXML(xml);\r\n    }\r\n\r\n    public void LoadFromXML(string xml)\r\n    {\r\n        var elements = XElement.Parse(xml);\r\n        var heads = elements.Element(\"head\").Descendants();\r\n\r\n        Func<string, string?> selectString = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => x.Value).FirstOrDefault();\r\n\r\n        Func<string, int?> selectInt = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => Convert.ToInt32(x.Value)).FirstOrDefault();\r\n\r\n        Func<string, DateTime?> selectDate = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => Convert.ToDateTime(x.Value)).FirstOrDefault();\r\n\r\n        Func<string, Uri?> selectUri = (filter) =>\r\n            heads!.Where(x => x.Name == filter).Select(x => new Uri(x.Value)).FirstOrDefault();\r\n\r\n        Title = selectString(\"title\");\r\n        DateCreated = selectDate(\"dateCreated\");\r\n        DateModified = selectDate(\"dateModified\");\r\n        OwnerName = selectString(\"ownerName\");\r\n        OwnerEmail = selectString(\"ownerEmail\");\r\n        OwnerId = selectUri(\"ownerId\");\r\n        Docs = selectUri(\"docs\");\r\n        ExpansionState = selectString(\"expansionState\");\r\n        VertScrollState = selectInt(\"vertScrollState\");\r\n        WindowTop = selectInt(\"windowTop\");\r\n        WindowLeft = selectInt(\"windowLeft\");\r\n        WindowBottom = selectInt(\"windowBottom\");\r\n        WindowRight = selectInt(\"windowRight\");\r\n\r\n        var bodies = elements.Element(\"body\").Elements();\r\n        //todo: make it recursive\r\n        foreach (var b in bodies)\r\n        {\r\n            var o = new Outline();\r\n            Outlines.Add(o);\r\n            TraverseBody(b, o);\r\n        }\r\n    }\r\n\r\n    private void TraverseBody(XElement outline, Outline ot)\r\n    {\r\n        if (outline != null)\r\n        {\r\n            foreach (var att in outline.Attributes())\r\n            {\r\n                ot.Attributes[att.Name.ToString()] = att.Value;\r\n            }\r\n            \r\n            foreach (var x in outline.Elements())\r\n            {\r\n                var o = new Outline();\r\n                ot.Outlines.Add(o);\r\n                TraverseBody(x, o);\r\n            }\r\n        }\r\n    }\r\n\r\n    public XElement ToXML()\r\n    {\r\n        var root = new XElement(\"opml\",\r\n            new XAttribute(\"version\", \"2.0\"),\r\n                new XElement(\"head\",\r\n                    new XElement(\"title\", this.Title),\r\n                    (this.DateCreated.HasValue) ? new XElement(\"dateCreated\", this.DateCreated.Value.ToString(\"R\")) : null,\r\n                    (this.DateModified.HasValue) ? new XElement(\"dateModified\", this.DateModified.Value.ToString(\"R\")) : null,\r\n                    (!string.IsNullOrWhiteSpace(this.OwnerName))? new XElement(\"ownerName\", this.OwnerName) : null,\r\n                    (!string.IsNullOrWhiteSpace(this.OwnerEmail)) ? new XElement(\"ownerEmail\", this.OwnerEmail) : null\r\n                    ));\r\n                    \r\n        var body = new XElement(\"body\");\r\n        foreach(var x in this.Outlines)\r\n        {\r\n            XElement newOutline = new XElement(\"outline\");\r\n            AddRecursiveChild(newOutline, x);\r\n            body.Add(newOutline);\r\n        }\r\n\r\n        root.Add(body);\r\n\r\n        return root;\r\n    }\r\n\r\n    private void AddRecursiveChild(XElement element, Outline o){\r\n        \r\n        element.Add(from y in o.Attributes\r\n                    select new XAttribute(y.Key, y.Value));\r\n        \r\n        foreach(var oo in o.Outlines)\r\n        {\r\n            XElement newOutline = new XElement(\"outline\");\r\n        \r\n            element.Add(newOutline);\r\n            AddRecursiveChild(newOutline, oo);\r\n        }\r\n    }\r\n\r\n}\r\n\r\npublic record Outline\r\n{\r\n    public Dictionary<string, string> Attributes { get; private set; } = new Dictionary<string, string>();\r\n\r\n    public List<Outline> Outlines { get; private set; } = new List<Outline>();\r\n}\r\n\r\npublic record RssSubscription\r\n{\r\n    public string? Title { get; set; }\r\n    public string? OwnerName { get; set; }\r\n    public string? OwnerEmail { get; set; }\r\n    public DateTime? DateCreated { get; set; }\r\n    public DateTime? DateModified { get; set; }\r\n    public List<RssSubscriptionItem> Items { get; set; } = new List<RssSubscriptionItem>();\r\n\r\n    /// <summary>\r\n    /// List errors in parsing opml attributes\r\n    /// </summary>\r\n    public List<string> ParsingErrors { get; set; } = new List<string>();\r\n\r\n    public RssSubscription(Opml opml)\r\n    {\r\n        Title = opml.Title;\r\n        DateCreated = opml.DateCreated;\r\n        DateModified = opml.DateModified;\r\n\r\n        var line = 0;\r\n        foreach (var x in opml.Outlines)\r\n        {\r\n            line++;\r\n            var item = new RssSubscriptionItem();\r\n            foreach (var y in x.Attributes)\r\n            {\r\n                try\r\n                {\r\n                    if (y.Key == \"text\")\r\n                        item.Text = y.Value;\r\n                    else if (y.Key == \"description\")\r\n                        item.Description = y.Value;\r\n                    else if (y.Key == \"title\")\r\n                        item.Title = y.Value;\r\n                    else if (y.Key == \"name\")\r\n                        item.Name = y.Value;\r\n                    else if (y.Key == \"htmlUrl\" && !string.IsNullOrWhiteSpace(y.Value))\r\n                        item.HtmlUri = new Uri(y.Value);\r\n                    else if (y.Key == \"xmlUrl\" && !string.IsNullOrWhiteSpace(y.Value))\r\n                        item.XmlUri = new Uri(y.Value);\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    ParsingErrors.Add(\"Error at line \" + line + \" in processing attribute \" \r\n                        + y.Key + \" with value \" + y.Value + \" \" +  ex.Message);\r\n                }\r\n            }\r\n\r\n            Items.Add(item);\r\n        }\r\n    }\r\n}\r\n\r\npublic record RssSubscriptionItem\r\n{\r\n    public string? Text { get; set; }\r\n    public string? Name { get; set; }\r\n    public string? Title { get; set; }\r\n    public string? Description { get; set; }\r\n    public Uri? HtmlUri { get; set; }\r\n    public Uri? XmlUri { get; set; }\r\n}"
  },
  {
    "path": "projects/orleans/rss-reader-6/Program.cs",
    "content": "using System.Net;\r\nusing Orleans;\r\nusing Orleans.Runtime;\r\nusing Orleans.Configuration;\r\nusing Orleans.Hosting;\r\nusing System.Xml;\r\nusing Microsoft.SyndicationFeed.Atom;\r\nusing Microsoft.SyndicationFeed;\r\nusing Microsoft.SyndicationFeed.Rss;\r\nusing Orleans.Streams;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddHttpClient();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole();\r\nbuilder.Host.UseOrleans(builder =>\r\n{\r\n    builder\r\n        .UseLocalhostClustering()\r\n        .UseInMemoryReminderService()\r\n        .Configure<ClusterOptions>(options =>\r\n        {\r\n            options.ClusterId = \"dev\";\r\n            options.ServiceId = \"http-client\";\r\n        })\r\n        .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)\r\n        .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(FeedSourceGrain).Assembly).WithReferences())\r\n        .AddRedisGrainStorage(Config.RedisStorage, optionsBuilder => optionsBuilder.Configure(options =>\r\n        {\r\n            options.ConnectionString = \"localhost:6379\";\r\n            options.UseJson = true;\r\n            options.DatabaseNumber = 1;\r\n        }))\r\n        .AddMemoryGrainStorage(\"PubSubStore\")\r\n        .AddSimpleMessageStreamProvider(Config.StreamProvider);\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    var httpClientFactory = context.RequestServices.GetService<IHttpClientFactory>();\r\n    var httpClient = httpClientFactory.CreateClient();\r\n\r\n    var opmlSubscriptionList = await httpClient.GetStringAsync(\"http://scripting.com/misc/mlb.opml\");\r\n    var opml = new Opml(opmlSubscriptionList);\r\n    var subscriptionList = new RssSubscription(opml);\r\n\r\n    var client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    var feedSourceGrain = client.GetGrain<IFeedSource>(0)!;\r\n\r\n    var logger = context.RequestServices.GetService<ILoggerFactory>()!.CreateLogger(\"rss-reader\");\r\n\r\n    foreach (var source in subscriptionList.Items)\r\n    {\r\n        logger.LogInformation(\"Adding \" + source.XmlUri?.ToString() ?? String.Empty);\r\n        await feedSourceGrain.AddAsync(new FeedSource\r\n        {\r\n            Url = source.XmlUri?.ToString() ?? string.Empty,\r\n            Website = source.HtmlUri?.ToString() ?? string.Empty,\r\n            Title = source.Title ?? string.Empty,\r\n            UpdateFrequencyInMinutes = 3\r\n        });\r\n    }\r\n\r\n    var sources = await feedSourceGrain.GetAllAsync();\r\n\r\n    foreach (var s in sources)\r\n    {\r\n        var feedFetcherReminderGrain = client.GetGrain<IFeedFetcherReminder>(s.Url);\r\n                    // AddReminder is indempotent\r\n                    await feedFetcherReminderGrain.AddReminder(s.Url, s.UpdateFrequencyInMinutes);\r\n    }\r\n\r\n    var feedResultsGrain = client.GetGrain<IFeedItemResults>(0);\r\n    var feedItems = await feedResultsGrain.GetAllAsync();\r\n\r\n    await context.Response.WriteAsync(@\"<html>\r\n                    <head>\r\n                        <link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/css/uikit.min.css\"\" />\r\n                        <title>Orleans RSS Reader</title>\r\n                    </head>\");\r\n    await context.Response.WriteAsync(\"<body><div class=\\\"uk-container\\\">\");\r\n    await context.Response.WriteAsync(\"<a href=\\\"/feed-sources\\\">Feed Sources</a><br/>\");\r\n    if (feedItems.Count == 0)\r\n        await context.Response.WriteAsync(\"<p>Please refresh your browser again if you see no feeds displayed.</p>\");\r\n\r\n    await context.Response.WriteAsync(\"<ul class=\\\"uk-list\\\">\");\r\n    foreach (var i in feedItems)\r\n    {\r\n        await context.Response.WriteAsync(\"<li class=\\\"uk-card uk-card-default uk-card-body\\\">\");\r\n        if (!string.IsNullOrWhiteSpace(i.Title))\r\n            await context.Response.WriteAsync($\"{ i.Title }<br/>\");\r\n\r\n        await context.Response.WriteAsync(i.Description ?? \"\");\r\n\r\n        if (i.Url is object)\r\n            await context.Response.WriteAsync($\"<br/><a href=\\\"{i.Url}\\\">link</a>\");\r\n\r\n        await context.Response.WriteAsync($\"<div style=\\\"font-size:small;\\\">published on: {i.PublishedOn}</div>\");\r\n        await context.Response.WriteAsync($\"<div style=\\\"font-size:small;\\\">source: <a href=\\\"{i.Channel?.Website}\\\">{i.Channel?.Title}</a></div>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(\"</div></body></html>\");\r\n});\r\n\r\napp.MapGet(\"/feed-sources\", async context =>\r\n{\r\n    var client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    var feedSourceGrain = client.GetGrain<IFeedSource>(0)!;\r\n    var sources = await feedSourceGrain.GetAllAsync();\r\n\r\n    await context.Response.WriteAsync(@\"<html>\r\n                    <head>\r\n                        <link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/css/uikit.min.css\"\" />\r\n                        <title>Orleans RSS Reader</title>\r\n                    </head>\");\r\n    await context.Response.WriteAsync(\"<body><div class=\\\"uk-container\\\">\");\r\n    await context.Response.WriteAsync(\"<a href=\\\"/\\\">Home</a><br/>\");\r\n    await context.Response.WriteAsync(\"<strong>Valid</strong>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var s in sources.Where(x => x.IsLatestValid))\r\n    {\r\n        await context.Response.WriteAsync($\"<li><a href=\\\"{s.Url}\\\">{s.Url}</a>\");\r\n        await context.Response.WriteAsync(\"<ul>\");\r\n        foreach (var h in s.History)\r\n        {\r\n            await context.Response.WriteAsync($\"<li>{h.Timestamp} - {h.IsValid}<p>{h.Message}</p></li>\");\r\n        }\r\n        await context.Response.WriteAsync(\"</ul>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n\r\n    await context.Response.WriteAsync(\"<strong>Invalid</strong>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var s in sources.Where(x => !x.IsLatestValid))\r\n    {\r\n        await context.Response.WriteAsync($\"<li><a href=\\\"{s.Url}\\\">{s.Url}</a>\");\r\n        await context.Response.WriteAsync(\"<ul>\");\r\n        foreach (var h in s.History)\r\n        {\r\n            await context.Response.WriteAsync($\"<li>{h.Timestamp} - {h.IsValid}<p>{h.Message}</p></li>\");\r\n        }\r\n        await context.Response.WriteAsync(\"</ul>\");\r\n        await context.Response.WriteAsync(\"</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n\r\n    await context.Response.WriteAsync(\"</div></body></html>\");\r\n});\r\n\r\napp.Run();\r\n\r\nstatic class Config\r\n{\r\n    public const string RedisStorage = \"redis-rss-reader-6\";\r\n\r\n    public const string StreamProvider = \"SMSProvider\";\r\n\r\n    public static readonly Guid StreamId = Guid.NewGuid();\r\n\r\n    public const string StreamChannel = \"RSS\";\r\n}\r\n\r\nclass FeedFetcherReminder : Grain, IRemindable, IFeedFetcherReminder\r\n{\r\n    readonly IGrainFactory _grainFactory;\r\n    readonly ILogger _logger;\r\n\r\n    public FeedFetcherReminder(IGrainFactory grainFactory, ILogger<FeedFetcherReminder> logger)\r\n    {\r\n        _grainFactory = grainFactory;\r\n        _logger = logger;\r\n    }\r\n\r\n    public async Task AddReminder(string reminder, short repeatEveryMinute)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(reminder))\r\n            throw new ArgumentNullException(nameof(reminder));\r\n\r\n        var r = await GetReminder(reminder);\r\n\r\n        if (r is not object)\r\n            await RegisterOrUpdateReminder(reminder, dueTime: TimeSpan.FromSeconds(1), period: TimeSpan.FromMinutes(repeatEveryMinute));\r\n    }\r\n\r\n    public async Task ReceiveReminder(string reminderName, TickStatus status)\r\n    {\r\n        _logger.Info($\"Receive {reminderName} reminder\");\r\n\r\n        var feedSourceGrain = _grainFactory.GetGrain<IFeedSource>(0)!;\r\n\r\n        var feedSource = await feedSourceGrain.FindFeedSourceByUrlAsync(reminderName);\r\n\r\n        if (feedSource is object)\r\n        {\r\n            _logger.Info($\"Fetching {feedSource.Url}\");\r\n            var feedFetcherGrain = _grainFactory.GetGrain<IFeedFetcher>(feedSource.Url);\r\n            await feedFetcherGrain.FetchAsync(feedSource);\r\n        }\r\n    }\r\n}\r\n\r\n[ImplicitStreamSubscription(Config.StreamChannel)]\r\nclass FeedStreamReaderGrain : Grain, IFeedStreamReader\r\n{\r\n    readonly ILogger _logger;\r\n\r\n    readonly IGrainFactory _grainFactory;\r\n\r\n    public FeedStreamReaderGrain(ILogger<FeedStreamReaderGrain> logger, IGrainFactory grainFactory)\r\n    {\r\n        _logger = logger;\r\n        _grainFactory = grainFactory;\r\n    }\r\n\r\n    public override async Task OnActivateAsync()\r\n    {\r\n        var streamProvider = GetStreamProvider(Config.StreamProvider);\r\n        var stream = streamProvider.GetStream<List<FeedItem>>(Config.StreamId, Config.StreamChannel);\r\n\r\n        var feedItemResultGrain = _grainFactory.GetGrain<IFeedItemResults>(0);\r\n        await stream.SubscribeAsync<List<FeedItem>>(async (data, token) =>\r\n        {\r\n            _logger.Info($\"Feed Items {data.Count}\");\r\n            await feedItemResultGrain.AddAsync(data);\r\n        });\r\n    }\r\n}\r\n\r\nclass FeedItemResultGrain : Grain, IFeedItemResults\r\n{\r\n    private readonly IPersistentState<FeedItemStore> _storage;\r\n\r\n    public FeedItemResultGrain([PersistentState(\"feed-item-results-5\", Config.RedisStorage)] IPersistentState<FeedItemStore> storage) => _storage = storage;\r\n\r\n    public async Task AddAsync(List<FeedItem> items)\r\n    {\r\n        //make sure there is no duplication\r\n        foreach (var i in items.Where(x => !string.IsNullOrWhiteSpace(x.Id)))\r\n        {\r\n            if (!_storage.State.Results.Exists(x => x.Id?.Equals(i.Id, StringComparison.OrdinalIgnoreCase) ?? false))\r\n                _storage.State.Results.Add(i);\r\n        }\r\n        await _storage.WriteStateAsync();\r\n    }\r\n\r\n    public Task<List<FeedItem>> GetAllAsync() => Task.FromResult(_storage.State.Results.OrderByDescending(x => x.PublishedOn).ToList());\r\n\r\n    public async Task ClearAsync()\r\n    {\r\n        _storage.State.Results.Clear();\r\n        await _storage.WriteStateAsync();\r\n    }\r\n}\r\n\r\nrecord FeedItemStore\r\n{\r\n    public List<FeedItem> Results { get; set; } = new List<FeedItem>();\r\n}\r\n\r\nclass FeedSourceGrain : Grain, IFeedSource\r\n{\r\n    private readonly IPersistentState<FeedSourceStore> _storage;\r\n\r\n    public FeedSourceGrain([PersistentState(\"feed-source-5\", Config.RedisStorage)] IPersistentState<FeedSourceStore> storage) => _storage = storage;\r\n\r\n    public async Task AddAsync(FeedSource source)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(source.Url))\r\n            return;\r\n\r\n        if (_storage.State.Sources.Find(x => x.Url == source.Url) is null)\r\n        {\r\n            _storage.State.Sources.Add(source);\r\n            await _storage.WriteStateAsync();\r\n        }\r\n    }\r\n\r\n    public Task<List<FeedSource>> GetAllAsync() => Task.FromResult(_storage.State.Sources);\r\n\r\n    public Task<FeedSource?> FindFeedSourceByUrlAsync(string url) =>\r\n        Task.FromResult(_storage.State.Sources.Find(x => x.Url.Equals(url, StringComparison.Ordinal)));\r\n\r\n    public async Task<FeedSource?> UpdateFeedSourceStatus(string url, bool activeStatus, string? message)\r\n    {\r\n        var feed = await FindFeedSourceByUrlAsync(url);\r\n        if (feed is object)\r\n        {\r\n            feed.LogFetchAttempt(activeStatus, message);\r\n            await _storage.WriteStateAsync();\r\n        }\r\n\r\n        return feed;\r\n    }\r\n}\r\n\r\nrecord FeedSourceStore\r\n{\r\n    public List<FeedSource> Sources { get; set; } = new List<FeedSource>();\r\n}\r\n\r\nclass FeedFetchGrain : Grain, IFeedFetcher\r\n{\r\n    readonly IGrainFactory _grainFactory;\r\n\r\n    readonly ILogger _logger;\r\n\r\n    readonly IHttpClientFactory _httpClientFactory;\r\n\r\n    public FeedFetchGrain(IGrainFactory grainFactory, ILogger<FeedFetchGrain> logger, IHttpClientFactory httpClientFactory)\r\n    {\r\n        _grainFactory = grainFactory;\r\n        _logger = logger;\r\n        _httpClientFactory = httpClientFactory;\r\n    }\r\n\r\n    public async Task FetchAsync(FeedSource source)\r\n    {\r\n        var results = await ReadFeedAsync(source);\r\n\r\n        var streamProvider = GetStreamProvider(Config.StreamProvider);\r\n        var stream = streamProvider.GetStream<List<FeedItem>>(Config.StreamId, Config.StreamChannel);\r\n\r\n        await stream.OnNextAsync(results);\r\n    }\r\n\r\n    public async Task<List<FeedItem>> ReadFeedAsync(FeedSource source)\r\n    {\r\n        if (string.IsNullOrWhiteSpace(source.Url))\r\n            return new List<FeedItem>();\r\n\r\n        if (!source.CanFetch())\r\n            return new List<FeedItem>();\r\n\r\n        var feed = new List<FeedItem>();\r\n        FeedType feedType = FeedType.Rss;\r\n        try\r\n        {\r\n            _logger.LogInformation($\"Fetching {source.Url}\");\r\n\r\n            var client = _httpClientFactory.CreateClient();\r\n            client.Timeout = TimeSpan.FromSeconds(10);\r\n            var response = await client.GetAsync(source.Url.ToString());\r\n\r\n            var memory = new MemoryStream();\r\n            await response.Content.CopyToAsync(memory);\r\n\r\n            memory.Seek(0, SeekOrigin.Begin);\r\n            char[] buf = new char[400]; // We need large buffer because to skip xml metadata and comments before the root of the xml document starts\r\n            var sr = new StreamReader(memory);\r\n            var charRead = sr.ReadBlock(buf, 0, buf.Length);\r\n\r\n            if (!new string(buf).Contains(\"rss\", StringComparison.OrdinalIgnoreCase))\r\n                feedType = FeedType.Atom;\r\n\r\n            memory.Seek(0, SeekOrigin.Begin);\r\n            using var xmlReader = XmlReader.Create(memory, new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore });\r\n\r\n            if (feedType == FeedType.Rss)\r\n            {\r\n                var feedReader = new RssFeedReader(xmlReader);\r\n                // Read the feed\r\n                while (await feedReader.Read())\r\n                {\r\n                    switch (feedReader.ElementType)\r\n                    {\r\n                        // Read Item\r\n                        case SyndicationElementType.Item:\r\n                            var item = await feedReader.ReadItem();\r\n                            feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(item)));\r\n                            break;\r\n\r\n                        default:\r\n                            var content = await feedReader.ReadContent();\r\n\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n            else\r\n            {\r\n                var feedReader = new AtomFeedReader(xmlReader);\r\n\r\n                while (await feedReader.Read())\r\n                {\r\n                    switch (feedReader.ElementType)\r\n                    {\r\n                        // Read Item\r\n                        case SyndicationElementType.Item:\r\n                            var entry = await feedReader.ReadEntry();\r\n                            feed.Add(new FeedItem(source.ToChannel(), new SyndicationItem(entry)));\r\n                            break;\r\n\r\n                        default:\r\n                            var content = await feedReader.ReadContent();\r\n                            break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            var feedSource = _grainFactory.GetGrain<IFeedSource>(0)!;\r\n            await feedSource.UpdateFeedSourceStatus(source.Url, true, $\"{feed.Count} items fetched\");\r\n\r\n            return feed;\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            _logger.LogError($\"({feedType}) {source.Url} Exception: {ex.Message}\");\r\n\r\n            // Mark feed as invalid\r\n            var feedSource = _grainFactory.GetGrain<IFeedSource>(0)!;\r\n            await feedSource.UpdateFeedSourceStatus(source.Url, false, ex.Message);\r\n\r\n            return new List<FeedItem>();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/orleans/rss-reader-6/README.md",
    "content": "# RSS Reader with Reminder + Subscription list + Orleans Streams\r\n\r\n**This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples.\r\n\r\nThis is a simple RSS reader that uses two storage, one for storing a feed source and another for storing feed results. You can keep refreshing your browser and the RSS Reader will display the latest results whenever they are available. It also logs the result of every RSS feed that got fetch regularly using Orleans Reminder.\r\n\r\n- Make sure you have redis installed and running.\r\n- Run the app using `dotnet run`.\r\n- Open `localhost:5000`\r\n- You can keep refreshing the browser page as much as you want and it will only pick up and store unique feed items.\r\n- Orleans will keep keep refreshing each feed every x minutes (configurable). \r\n- This Rss Reader will read a list of RSS sources from an OPML subscription feed http://scripting.com/misc/mlb.opml\r\n\r\nIn this RSS Reader, there is a single stream with a single channel. Each Reminder will fetch a RSS news feed on a regular basis and publish the results into the stream.\r\nThen we will have one (grain) implicit subscriber to the stream that will process the feed and store it. The rule is one grain is created per stream id for implicit subscriber."
  },
  {
    "path": "projects/orleans/rss-reader-6/rss-reader-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n\r\n    <Nullable>enable</Nullable>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.SyndicationFeed.ReaderWriter\" Version=\"1.0.2\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Hosting\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Console\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.OrleansRuntime\" Version=\"3.6.0\" />\r\n <PackageReference Include=\"Microsoft.Orleans.OrleansProviders\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Core\" Version=\"3.6.0\" />\r\n<PackageReference Include=\"Microsoft.Orleans.CodeGenerator.MSBuild\" Version=\"3.6.0\">\r\n  <PrivateAssets>all</PrivateAssets>\r\n  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n</PackageReference>\r\n    <PackageReference Include=\"Orleans.Persistence.Redis\" Version=\"3.2.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/orleans/timer/Program.cs",
    "content": "using System.Net;\r\nusing Orleans;\r\nusing Orleans.Runtime;\r\nusing Orleans.Configuration;\r\nusing Orleans.Hosting;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Information).AddConsole();\r\nbuilder.Host.UseOrleans(builder =>\r\n{\r\n    builder\r\n        .UseLocalhostClustering()\r\n        .Configure<ClusterOptions>(options =>\r\n        {\r\n            options.ClusterId = \"dev\";\r\n            options.ServiceId = \"HelloWorldApp\";\r\n        })\r\n        .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)\r\n        .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(HelloTimerGrain).Assembly).WithReferences())\r\n        .AddRedisGrainStorage(\"redis-timer\", optionsBuilder => optionsBuilder.Configure(options =>\r\n        {\r\n            options.ConnectionString = \"localhost:6379\";\r\n            options.UseJson = true;\r\n            options.DatabaseNumber = 1;\r\n        }));\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.MapGet(\"/\", async context =>\r\n{\r\n    IGrainFactory client = context.RequestServices.GetService<IGrainFactory>()!;\r\n    IHelloArchive grain = client.GetGrain<IHelloArchive>(0)!;\r\n    await grain.SayHello(\"Hello world \" + new Random().Next());\r\n    var res2 = await grain.GetGreetings();\r\n\r\n    await context.Response.WriteAsync(@\"<html><head><link rel=\"\"stylesheet\"\" href=\"\"https://cdn.jsdelivr.net/npm/uikit@3.5.5/dist/css/uikit.min.css\"\" /></head>\");\r\n    await context.Response.WriteAsync(\"<body>\");\r\n    await context.Response.WriteAsync(\"Refresh your browser. There's a timer that keeps adding messages every 5 seconds.<br>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var g in res2)\r\n    {\r\n        await context.Response.WriteAsync($\"<li>{g.Message} at {g.TimestampUtc}</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(\"</body></html>\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\npublic class HelloTimerGrain : Grain, IHelloArchive\r\n{\r\n    private readonly IPersistentState<GreetingArchive> _archive;\r\n    private readonly ILogger _log;\r\n\r\n    private string _greeting = \"hello world\";\r\n\r\n    private IDisposable? _timerDisposable;\r\n\r\n    public HelloTimerGrain([PersistentState(\"archive\", \"redis-timer\")] IPersistentState<GreetingArchive> archive, ILogger<HelloTimerGrain> log)\r\n    {\r\n        _archive = archive;\r\n        _log = log;\r\n    }\r\n\r\n    public override Task OnActivateAsync()\r\n    {\r\n        _timerDisposable = this.RegisterTimer(async (object data) =>\r\n        {\r\n            var archive = data as IPersistentState<GreetingArchive>;\r\n            var g = new Greeting(_greeting, DateTime.UtcNow);\r\n            archive!.State.Greetings.Insert(0, g);\r\n            await archive!.WriteStateAsync();\r\n\r\n            _log.Info($\"`{g.Message}` added at {g.TimestampUtc}\");\r\n        }, _archive, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(5));\r\n\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public override Task OnDeactivateAsync()\r\n    {\r\n        _timerDisposable?.Dispose();\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task SayHello(string greeting)\r\n    {\r\n        _greeting = greeting;\r\n        return Task.CompletedTask;\r\n    }\r\n\r\n    public Task<IEnumerable<Greeting>> GetGreetings() => Task.FromResult<IEnumerable<Greeting>>(_archive.State.Greetings);\r\n}\r\n\r\npublic record GreetingArchive\r\n{\r\n    public List<Greeting> Greetings { get; } = new List<Greeting>();\r\n}\r\n\r\npublic record Greeting(string Message, DateTime TimestampUtc);\r\n\r\npublic interface IHelloArchive : Orleans.IGrainWithIntegerKey\r\n{\r\n    Task SayHello(string greeting);\r\n\r\n    Task<IEnumerable<Greeting>> GetGreetings();\r\n}"
  },
  {
    "path": "projects/orleans/timer/README.md",
    "content": "# Timer\r\n\r\n**This sample requires redis**. Make sure to run FLUSHALL in redis-cli between samples.\r\n\r\nThis is a sample for `Grain.RegisterTimer` method. You can find out more about this functionality [here](https://dotnet.github.io/orleans/1.5/Documentation/Core-Features/Timers-and-Reminders.html).\r\n\r\n- Make sure you have redis installed and running.\r\n- Run the app using `dotnet run`.\r\n- Open `localhost:5000`\r\n- When you open the page the first time, there's a timer that will add a new message every 5 seconds.\r\n\r\nWe are using C# records in this sample. It works fine."
  },
  {
    "path": "projects/orleans/timer/timer.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Extensions.Hosting\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Console\" Version=\"6.0.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.OrleansRuntime\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.OrleansProviders\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.Core\" Version=\"3.6.0\" />\r\n    <PackageReference Include=\"Microsoft.Orleans.CodeGenerator.MSBuild\" Version=\"3.6.0\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Orleans.Persistence.Redis\" Version=\"3.2.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/output-cache-middleware/build.bat",
    "content": "dotnet build output-cache-1\r\ndotnet build output-cache-2\r\ndotnet build output-cache-3\r\ndotnet build output-cache-4\r\ndotnet build output-cache-5\r\ndotnet build output-cache-6\r\ndotnet build output-cache-7\r\ndotnet build output-cache-8"
  },
  {
    "path": "projects/output-cache-middleware/build.sh",
    "content": "#!/bin/bash\ndotnet build output-cache-1\ndotnet build output-cache-2\ndotnet build output-cache-3\ndotnet build output-cache-4\ndotnet build output-cache-5\ndotnet build output-cache-6\ndotnet build output-cache-7\ndotnet build output-cache-8\n"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-1/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddOutputCache();\r\n\r\nvar app = builder.Build();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n        <body>\r\n            <ul>\r\n                <li><a href=\"/now\">DateTime.UtcNow()</a></li>\r\n                <li><a href=\"/cached-now\">DateTime.UtcNow() cached</a></li>\r\n            </ul>\r\n        </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.UseOutputCache();\r\napp.MapGet(\"/now\", () => DateTime.UtcNow.ToString());\r\napp.MapGet(\"/cached-now\", () => DateTime.UtcNow.ToString()).CacheOutput();\r\n\r\napp.Run();"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-1/Readme.md",
    "content": "# Output Cache\r\n\r\nThis example a very basic example of using output cache.\r\n\r\nThe default expiration time is 1 minute. The default cacheable size for the response body is 64 MB. You can find more of the default [here](https://github.com/dotnet/aspnetcore/blob/47f5d8f990dc64d9177f8e552f069098c6bcbfa3/src/Middleware/OutputCaching/src/OutputCacheOptions.cs)."
  },
  {
    "path": "projects/output-cache-middleware/output-cache-1/output-cache-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    <UserSecretsId>9adce06a-fec2-402b-acba-28a6852ca7c1</UserSecretsId>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-2/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddOutputCache();\r\n\r\nvar app = builder.Build();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n        <body>\r\n            <ul>\r\n                <li><a href=\"/now\">DateTime.UtcNow()</a></li>\r\n                <li><a href=\"/cached-now?version=1\">DateTime.UtcNow() cached version 1</a></li>\r\n                <li><a href=\"/cached-now?version=2\">DateTime.UtcNow() cached version 2</a></li>\r\n                <li><a href=\"/cached-now?version=1&culture=en\">DateTime.UtcNow() cached version 1 in en culture</a></li>\r\n                <li><a href=\"/cached-now?version=1&culture=ar\">DateTime.UtcNow() cached version 1 in ar culture</a></li>\r\n            </ul>\r\n        </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.UseOutputCache();\r\napp.MapGet(\"/now\", () => DateTime.UtcNow.ToString());\r\napp.MapGet(\"/cached-now\", () => DateTime.UtcNow.ToString()).CacheOutput(p => p.SetVaryByQuery(\"version\", \"culture\"));\r\n\r\napp.Run();"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-2/Readme.md",
    "content": "# Output Cache vary by query string\r\n\r\nThis example a very basic example of using output cache that vary by query string e.g. `?page=1` or `?version=1`. You can add more than one query string. \r\n\r\n"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-2/output-cache-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    <UserSecretsId>9adce06a-fec2-402b-acba-28a6852ca7c1</UserSecretsId>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-3/Program.cs",
    "content": "using Microsoft.AspNetCore.OutputCaching;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddOutputCache();\r\n\r\nvar app = builder.Build();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n        <body>\r\n            <ul>\r\n                <li><a href=\"/now\">DateTime.UtcNow()</a></li>\r\n                <li><a href=\"/cached-now\">Cached DateTime.UtcNow()</a></li>\r\n                <li><a href=\"/cached-now-tagged\">Cached DateTime.UtcNow() tagged</a></li>\r\n                <li><a href=\"/clear\">Clear tagged cache</a></li>\r\n            </ul>\r\n        </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.UseOutputCache();\r\napp.MapGet(\"/now\", () => DateTime.UtcNow.ToString());\r\napp.MapGet(\"/cached-now\", () => DateTime.UtcNow.ToString()).CacheOutput();\r\napp.MapGet(\"/cached-now-tagged\", () => DateTime.UtcNow.ToString()).CacheOutput(p => p.Tag(\"datetime\"));\r\napp.MapGet(\"/clear\", async (IOutputCacheStore cache) =>\r\n{\r\n    await cache.EvictByTagAsync(\"datetime\", CancellationToken.None);\r\n    return Results.Ok(new { message = \"Go back and click on Cached DateTime.UtcNow() tagged to see that the previous cached date has been purged.\" });\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-3/Readme.md",
    "content": "# Evict cache by tag\r\n\r\nThis sample shows how to tagged cache items and evict them by tag using `IOutputCacheStore.EvictByTagAsync`.\r\n"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-3/output-cache-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    <UserSecretsId>9adce06a-fec2-402b-acba-28a6852ca7c1</UserSecretsId>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-4/Program.cs",
    "content": "using System.Security.Cryptography;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddOutputCache(options =>\r\n{\r\n    options.AddBasePolicy(builder => builder.With(c => true));\r\n});\r\n\r\nvar app = builder.Build();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n        <body>\r\n            <ul>\r\n                <li><a href=\"/now\">DateTime.UtcNow()</a></li>\r\n                <li><a href=\"/random\">RandomNumberGenerator.GetInt32(int.MaxValue)</a></li>\r\n            </ul>\r\n        </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.UseOutputCache();\r\napp.MapGet(\"/now\", () => DateTime.UtcNow.ToString());\r\napp.MapGet(\"/random\", () => RandomNumberGenerator.GetInt32(int.MaxValue));\r\n\r\napp.Run();"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-4/Readme.md",
    "content": "# Output Cache base policy\r\n\r\nThis sample shows how to enable output cache for every single endpoint. It will cache using the [default values of OutputCacheOptions](https://github.com/dotnet/aspnetcore/blob/main/src/Middleware/OutputCaching/src/OutputCacheOptions.cs) which cache for 60 seconds.\r\n"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-4/output-cache-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    <UserSecretsId>9adce06a-fec2-402b-acba-28a6852ca7c1</UserSecretsId>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-5/Program.cs",
    "content": "using System.Security.Cryptography;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddOutputCache(options =>\r\n{\r\n    options.AddBasePolicy(builder => builder.With(c => c.HttpContext.Request.QueryString.Value?.Contains(\"cache\") ?? false));\r\n});\r\n\r\nvar app = builder.Build();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n        <body>\r\n            <ul>\r\n                <li><a href=\"/now\">DateTime.UtcNow()</a></li>\r\n                <li><a href=\"/now?cache\">DateTime.UtcNow() cached</a></li>\r\n            </ul>\r\n        </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.UseOutputCache();\r\napp.MapGet(\"/now\", () => DateTime.UtcNow.ToString());\r\n\r\napp.Run();"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-5/Readme.md",
    "content": "# Output Cache base policy using HttpContext by checking existence of a query string parameter\r\n\r\nThis sample demonstrates on how to setup a global Output Cache policy to cache any request with \"cache\" query string parameter.\r\n"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-5/output-cache-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    <UserSecretsId>9adce06a-fec2-402b-acba-28a6852ca7c1</UserSecretsId>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-6/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddOutputCache(options =>\r\n{\r\n    options.AddBasePolicy(builder => builder.With(c => c.HttpContext.Request.Path.StartsWithSegments(\"/cached\")));\r\n});\r\n\r\nvar app = builder.Build();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n        <body>\r\n            <ul>\r\n                <li><a href=\"/now\">DateTime.UtcNow()</a></li>\r\n                <li><a href=\"/cached/now\">DateTime.UtcNow() cached</a></li>\r\n                <li><a href=\"/time/cached/now\">DateTime.UtcNow() not cached</a></li>\r\n            </ul>\r\n        </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.UseOutputCache();\r\napp.MapGet(\"/now\", () => DateTime.UtcNow.ToString());\r\napp.MapGet(\"/cached/now\", () => DateTime.UtcNow.ToString());\r\napp.MapGet(\"/time/cached/now\", () => DateTime.UtcNow.ToString());\r\n\r\napp.Run();"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-6/Readme.md",
    "content": "# Output Cache base policy using HttpContext to cache endpoints with a certain url segment\r\n\r\nThis sample demonstrates on how to setup a global Output Cache policy to cache any request with \"/cache\" at the start of url segments."
  },
  {
    "path": "projects/output-cache-middleware/output-cache-6/output-cache-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    <UserSecretsId>9adce06a-fec2-402b-acba-28a6852ca7c1</UserSecretsId>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-7/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddOutputCache(options =>\r\n{\r\n    options.AddBasePolicy(builder => builder.With(c => c.HttpContext.Request.Path.StartsWithSegments(\"/cached\")));\r\n    options.AddPolicy(\"NoCache\", o => o.NoCache());\r\n});\r\n\r\nvar app = builder.Build();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n        <body>\r\n            <ul>\r\n                <li><a href=\"/now\">DateTime.UtcNow()</a></li>\r\n                <li><a href=\"/cached/now\">DateTime.UtcNow() cached</a></li>\r\n                <li><a href=\"/cached/now-nope\">DateTime.UtcNow() not cached because of NoCache policy</a></li>\r\n            </ul>\r\n        </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.UseOutputCache();\r\napp.MapGet(\"/now\", () => DateTime.UtcNow.ToString());\r\napp.MapGet(\"/cached/now\", () => DateTime.UtcNow.ToString());\r\napp.MapGet(\"/cached/now-nope\", () => DateTime.UtcNow.ToString()).CacheOutput(\"NoCache\");\r\n\r\napp.Run();"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-7/Readme.md",
    "content": "# Output Cache policy\r\n\r\nThis sample demonstrates on how to setup a cache policy and use it. Specific policy override the global base policy."
  },
  {
    "path": "projects/output-cache-middleware/output-cache-7/output-cache-7.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-8/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddOutputCache(options =>\r\n{\r\n    options.AddBasePolicy(builder => builder.With(c => c.HttpContext.Request.Path.StartsWithSegments(\"/cached\")));\r\n    options.AddPolicy(\"10Minutes\", o => o.Expire(TimeSpan.FromMinutes(10)));\r\n});\r\n\r\nvar app = builder.Build();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n        <body>\r\n            <ul>\r\n                <li><a href=\"/now\">DateTime.UtcNow()</a></li>\r\n                <li><a href=\"/cached/now\">DateTime.UtcNow() cached for default 60 seconds</a></li>\r\n                <li><a href=\"/cached/now-nope\">DateTime.UtcNow() cached for 10 minutes</a></li>\r\n            </ul>\r\n        </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.UseOutputCache();\r\napp.MapGet(\"/now\", () => DateTime.UtcNow.ToString());\r\napp.MapGet(\"/cached/now\", () => DateTime.UtcNow.ToString());\r\napp.MapGet(\"/cached/now-nope\", () => DateTime.UtcNow.ToString()).CacheOutput(\"10Minutes\");\r\n\r\napp.Run();"
  },
  {
    "path": "projects/output-cache-middleware/output-cache-8/Readme.md",
    "content": "# Output Cache policy set expiration to 10 minutes\r\n\r\nThis sample demonstrates on how to setup a cache policy that set an expiration time of 10 minutes."
  },
  {
    "path": "projects/output-cache-middleware/output-cache-8/output-cache-8.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/output-cache-middleware/readme.md",
    "content": "## Output cache\r\n\r\n* [Output Cache - 1](output-cache-1)\r\n\r\n  This sample shows how to use the `OutputCache` middleware using basic options.\r\n\r\n* [Output Cache - 2](output-cache-2)\r\n\r\n  This sample shows how to use the `OutputCache` middleware and vary them by one or more query string.\r\n\r\n* [Output Cache - 3](output-cache-3)\r\n\r\n  This sample shows how to tagged cache items and evict them by tag using `IOutputCacheStore.EvictByTagAsync`.\r\n\r\n* [Output Cache - 4](output-cache-4)\r\n  This sample shows how to enable output cache for every single endpoint. \r\n\r\n* [Output Cache - 5](output-cache-5)\r\n  This sample shows how to setup a global Output Cache policy to cache any request with \"cache\" query string parameter.\r\n\r\n* [Output Cache - 6](output-cache-6)\r\n  This sample demonstrates on how to setup a global Output Cache policy to cache any request that start with \"/cache\" in the url segments.\r\n\r\n* [Output Cache - 7](output-cache-7)\r\n  This sample demonstrates on how to setup a cache policy and use it. Specific policy override the global base policy.\r\n\r\n* [Output Cache - 8](output-cache-8)\r\n  This sample demonstrates on how to setup a cache policy that set an expiration time of 10 minutes.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/password-hasher/Program.cs",
    "content": "using Microsoft.AspNetCore.Identity;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(context =>\r\n{\r\n    var password = context.Request.Query[\"password\"];\r\n\r\n    if (string.IsNullOrWhiteSpace(password))\r\n        password = \"123456789\";\r\n\r\n    var usr = new User();\r\n    var hasher = new PasswordHasher<User>();\r\n    var hashedPassword = hasher.HashPassword(usr, password);\r\n\r\n    var isPasswordMatch = hasher.VerifyHashedPassword(usr, hashedPassword, password);\r\n\r\n    return context.Response.WriteAsync($\"Append ?password at url to test your own password hashing.\\nPassword : {password} => Hashed : {hashedPassword} \\nPassword Matched : {isPasswordMatch}\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic record User();\r\n\r\n"
  },
  {
    "path": "projects/password-hasher/password-hasher.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/path-string/README.md",
    "content": "# HttpContext.Request.Path (PathString)(1)\r\n\r\n* [PathString 1](/projects/path-string/path-string-1)\r\n \r\n  This shows different results that `HttpContext.Request.Path` returns when handling different url requests.\r\n\r\n  dotnet8"
  },
  {
    "path": "projects/path-string/build.bat",
    "content": "dotnet build path-string-1"
  },
  {
    "path": "projects/path-string/build.sh",
    "content": "#!/bin/bash\ndotnet build path-string-1\n"
  },
  {
    "path": "projects/path-string/path-string-1/.vscode/launch.json",
    "content": "{\r\n    \"version\": \"0.2.0\",\r\n    \"configurations\": [\r\n        {\r\n            // Use IntelliSense to find out which attributes exist for C# debugging\r\n            // Use hover for the description of the existing attributes\r\n            // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/net5.0/path-string-1.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            // Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser\r\n            \"serverReadyAction\": {\r\n                \"action\": \"openExternally\",\r\n                \"pattern\": \"\\\\\\\\bNow listening on:\\\\\\\\s+(https?://\\\\\\\\S+)\"\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/path-string/path-string-1/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/path-string-1.csproj\",\r\n                \"/property:GenerateFullPaths=true\",\r\n                \"/consoleloggerparameters:NoSummary\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        },\r\n        {\r\n            \"label\": \"publish\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"publish\",\r\n                \"${workspaceFolder}/path-string-1.csproj\",\r\n                \"/property:GenerateFullPaths=true\",\r\n                \"/consoleloggerparameters:NoSummary\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        },\r\n        {\r\n            \"label\": \"watch\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"watch\",\r\n                \"run\",\r\n                \"${workspaceFolder}/path-string-1.csproj\",\r\n                \"/property:GenerateFullPaths=true\",\r\n                \"/consoleloggerparameters:NoSummary\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/path-string/path-string-1/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    var protocol = context.Request.IsHttps ? \"https://\": \"http://\";\r\n    var host = protocol + context.Request.Host;\r\n    context.Response.Headers[\"Content-Type\"] = \"text/html\";\r\n\r\n    await context.Response.WriteAsync($@\"\r\n        <html>\r\n        <body>\r\n            <h1>HttpContext.Request.Path</h1>\r\n            <a href=\"\"{host}/hello\"\" target=\"\"_blank\"\">{host}/hello</a> <br/>\r\n            <a href=\"\"{host}//double-slash\"\" target=\"\"_blank\"\">{host}//double-slash</a> <br/>\r\n            <a href=\"\"{host}/double-slash//version-2\"\" target=\"\"_blank\"\">{host}/double-slash//version-2</a> <br/>\r\n            <a href=\"\"{host}/about-us/\"\" target=\"\"_blank\"\">{host}/about-us/</a> <br/>\r\n            <a href=\"\"{host}/catalog/?id=10\"\" target=\"\"_blank\"\">{host}/catalog/?id=10</a> <br/>\r\n            <a href=\"\"{host}/admin/index?secure=true\"\" target=\"\"_blank\"\">{host}/admin/index?secure=true</a> <br/>\r\n            <p>\r\n                Value of HttpContext.Request.Path :\r\n                { context.Request.Path }\r\n            </p>\r\n        </body>\r\n        </html>\r\n        \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/path-string/path-string-1/README.md",
    "content": "# HttpContext.Request.Path\r\n\r\nThis sample shows results that `HttpContext.Request.Path` returns when handling different type of url requests."
  },
  {
    "path": "projects/path-string/path-string-1/path-string-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/polly/README.md",
    "content": "# Polly\r\n\r\nThis is a collection of example on how to use [Polly](https://www.pollydocs.org/) to improve the resiliency of your applications.\r\n\r\n* [Rate Limiter using HttpClient](rate-limiter-http-client)\r\n\r\n"
  },
  {
    "path": "projects/polly/build.bat",
    "content": "dotnet build rate-limiter-http-client"
  },
  {
    "path": "projects/polly/build.sh",
    "content": "#!/bin/bash\ndotnet build rate-limiter-http-client\n"
  },
  {
    "path": "projects/polly/rate-limiter-http-client/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#7c8463\",\r\n        \"activityBar.background\": \"#7c8463\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#87c4d7\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#7c8463\",\r\n        \"statusBar.background\": \"#61674d\",\r\n        \"statusBar.debuggingBackground\": \"#534d67\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#7c8463\",\r\n        \"statusBarItem.remoteBackground\": \"#61674d\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#61674d\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#61674d99\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#61674d\"\r\n}"
  },
  {
    "path": "projects/polly/rate-limiter-http-client/Pages/Index.cshtml",
    "content": "@page \"/\"\r\n@model IndexModel\r\n\r\n<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n       <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n    <title>Index</title>\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        <h1>Welcome to the Index Page</h1>\r\n\r\n        <ul>\r\n            @foreach (var item in Model.Track)\r\n            {\r\n                <li>@item.Key : @item.Value</li>\r\n            }       \r\n        </ul>\r\n    </div>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/polly/rate-limiter-http-client/Pages/Index.cshtml.cs",
    "content": "using System.Collections.Concurrent;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Polly.RateLimiting;\r\n\r\npublic class IndexModel(IHttpClientFactory clientFactory, ILogger<IndexModel> logger) : PageModel\r\n{\r\n    public ConcurrentDictionary<int, string> Track { get; set; } = new();\r\n\r\n    public async Task<IActionResult> OnGet()\r\n    {\r\n        var client = clientFactory.CreateClient(\"concurrency-http\");\r\n\r\n        var url = \"https://dummyjson.com/products\";\r\n        var totalRequests = 1000;\r\n\r\n        const int batchSize = 20;\r\n        //Batch size determine how many calls do you want to call at the same time\r\n        for (int i = 0; i < totalRequests; i += batchSize)\r\n        {\r\n            var batchTasks = new List<Task>();\r\n            foreach (var x in Enumerable.Range(i, Math.Min(batchSize, totalRequests - i)))\r\n            {\r\n                var batchNo = i == 0 ? 0 : i / batchSize;\r\n                batchTasks.Add(LoadProductsJsonAsync(client, logger, batchNo, x, url, Track));\r\n            }\r\n            await Task.WhenAll(batchTasks);\r\n        }\r\n\r\n        return Page();\r\n    }\r\n    static async Task LoadProductsJsonAsync(HttpClient client, ILogger log, int batch, int idx, string url, ConcurrentDictionary<int, string> track)\r\n    {\r\n        try\r\n        {\r\n            var result = await client.GetAsync(url);\r\n            log.LogInformation($\"Batch {batch} Request {idx} completed with status code {result.StatusCode}\");\r\n            track[idx] = $\"In Batch {batch} completed with status code {result.StatusCode}\";\r\n        }\r\n        catch(RateLimiterRejectedException ex)\r\n        {\r\n            log.LogError(ex, $\"Batch {batch} Request {idx} failed with exception {ex.Message}\");\r\n        };\r\n    }\r\n}"
  },
  {
    "path": "projects/polly/rate-limiter-http-client/Program.cs",
    "content": "using System.Net;\r\nusing Polly;\r\nusing Polly.RateLimiting;\r\nusing Polly.Retry;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Logging.SetMinimumLevel(LogLevel.Warning);\r\nbuilder.Logging.AddConsole();\r\n\r\nvar services = builder.Services;\r\n\r\nservices.AddRazorPages();\r\n\r\nservices.AddHttpClient(\"concurrency-http\")\r\n.ConfigureHttpClient((sp, client) =>\r\n{\r\n    client.Timeout = TimeSpan.FromSeconds(10);\r\n}).AddResilienceHandler(\"concurrency-http-policy\", (builder, c) =>\r\n{\r\n    builder\r\n        .AddConcurrencyLimiter(permitLimit: 5, queueLimit: 5)// only allow 20 concurrent requests, queue up to 50\r\n        .AddRetry(new RetryStrategyOptions<HttpResponseMessage>\r\n        {\r\n            ShouldHandle = response =>\r\n            {\r\n                if (response.Outcome.Exception is RateLimiterRejectedException)\r\n                    return ValueTask.FromResult(true);\r\n\r\n                // retry when the status is not OK\r\n                var result = response.Outcome.Result.StatusCode != HttpStatusCode.OK;\r\n                return ValueTask.FromResult(result);\r\n            },\r\n            MaxRetryAttempts = 3,\r\n            DelayGenerator = static args =>\r\n            {\r\n                // Make the delay increase with each retry\r\n                var delay = args.AttemptNumber switch \r\n                {\r\n                    0 => TimeSpan.Zero,\r\n                    1 => TimeSpan.FromSeconds(1),\r\n                    _ => TimeSpan.FromSeconds(5)\r\n                };\r\n\r\n                // This example uses a synchronous delay generator,\r\n                // but the API also supports asynchronous implementations.\r\n                return new ValueTask<TimeSpan?>(delay);\r\n            },\r\n            OnRetry = args =>\r\n            {\r\n                var logger = c.ServiceProvider.GetService<ILogger<Program>>();\r\n                logger.LogError(\"OnRetry, Attempt: {0}\", args.AttemptNumber);\r\n\r\n                // Event handlers can be asynchronous; here, we return an empty ValueTask.\r\n                return default;\r\n            },\r\n            BackoffType = DelayBackoffType.Constant\r\n        })\r\n        .Build();\r\n});\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/polly/rate-limiter-http-client/README.md",
    "content": "# Polly Rate Limiting with Retry\r\n\r\nYou can find the policy for rate limiting and retry at `Program.cs`.\r\n\r\n- In this case, we only allow max 20 concurrent requests - anything beyond that will be queue maximum to 50. If it exceed this queue, `RateLimiterRejectedException` will be thrown.\r\n- We will retry maximum 3 times if the http request status is not `200`.\r\n- We will retry also if `RateLimiterRejectedException` is thrown."
  },
  {
    "path": "projects/polly/rate-limiter-http-client/rate-limiter-http-client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Polly.Core\" Version=\"8.4.2\" />\r\n    <PackageReference Include=\"Polly.Extensions\" Version=\"8.4.2\" />\r\n    <PackageReference Include=\"Microsoft.Extensions.Http.Resilience\" Version=\"8.10.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/polly/rate-limiter-http-client/rate-limiter-http-client.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"rate-limiter-http-client\", \"rate-limiter-http-client.csproj\", \"{4587B931-62FB-4A35-9792-ADCEBD7542B5}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{4587B931-62FB-4A35-9792-ADCEBD7542B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{4587B931-62FB-4A35-9792-ADCEBD7542B5}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{4587B931-62FB-4A35-9792-ADCEBD7542B5}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{4587B931-62FB-4A35-9792-ADCEBD7542B5}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {803BD79B-088B-49FC-AE85-09AB017287A2}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/problem-details-middleware/README.md",
    "content": "# Problem Details\r\n\r\n* [Problem Details - 1](problem-details)\r\n\r\n  This sample shows how to enable returning [Problem Details](https://www.rfc-editor.org/rfc/rfc7807) in unhandled exception responses.\r\n\r\n* [Problem Details - 2](problem-details-2)\r\n\r\n  This example shows how customize returned [Problem Details](https://www.rfc-editor.org/rfc/rfc7807) in unhandled exception responses.\r\n\r\n* [Problem Details - 3](problem-details-3)\r\n\r\n  This example shows how customize [Problem Details](https://www.rfc-editor.org/rfc/rfc7807) by manipulating `IProblemDetailsService`.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/problem-details-middleware/build.bat",
    "content": "dotnet build problem-details\r\ndotnet build problem-details-2\r\ndotnet build problem-details-3"
  },
  {
    "path": "projects/problem-details-middleware/build.sh",
    "content": "#!/bin/bash\ndotnet build problem-details\ndotnet build problem-details-2\ndotnet build problem-details-3\n"
  },
  {
    "path": "projects/problem-details-middleware/problem-details/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddProblemDetails();\r\nvar app = builder.Build();\r\n\r\napp.UseExceptionHandler();\r\n\r\napp.MapGet(\"/\", (HttpContext context) => Results.Content($$\"\"\"\r\n<html>\r\n<head>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        <a href=\"/problems\">Show problems</a>\r\n    </div>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\napp.MapGet(\"/problems\", async (HttpContext context) =>\r\n{\r\n    throw new ApplicationException(\"We got problems\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/problem-details-middleware/problem-details/README.md",
    "content": "# Enable returning Problem Details on unhandled exceptions\r\n\r\nThis example shows how enable returning [Problem Details](https://www.rfc-editor.org/rfc/rfc7807) in unhandled exception responses. "
  },
  {
    "path": "projects/problem-details-middleware/problem-details/problem-details.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/problem-details-middleware/problem-details-2/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddProblemDetails(options => options.CustomizeProblemDetails = ctx => \r\n{\r\n    ctx.ProblemDetails.Extensions.Add(\"custom-property\", Guid.NewGuid().ToString());\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseExceptionHandler();\r\n\r\napp.MapGet(\"/\", (HttpContext context) => Results.Content($$\"\"\"\r\n<html>\r\n<head>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        <a href=\"/problems\">Show problems</a>\r\n    </div>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\napp.MapGet(\"/problems\", (HttpContext context) =>\r\n{\r\n    throw new ApplicationException(\"We got problems\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/problem-details-middleware/problem-details-2/README.md",
    "content": "# Customize Problem Details in unhandled exception responses\r\n\r\nThis example shows how customize returned [Problem Details](https://www.rfc-editor.org/rfc/rfc7807) in unhandled exception responses."
  },
  {
    "path": "projects/problem-details-middleware/problem-details-2/problem-details-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/problem-details-middleware/problem-details-3/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddProblemDetails();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseExceptionHandler();\r\n\r\napp.Use(async (context, next) =>\r\n{\r\n    if (context.Request.Path == \"/problems\" && context.RequestServices.GetService<IProblemDetailsService>() is { } problemDetailsService)\r\n    {\r\n        context.Response.StatusCode = StatusCodes.Status405MethodNotAllowed;\r\n        var problemDetails = new ProblemDetailsContext { HttpContext = context };\r\n        problemDetails.ProblemDetails.Extensions.Add(\"custom-property-2\", Guid.NewGuid().ToString());\r\n        await problemDetailsService.WriteAsync(problemDetails);\r\n        return;\r\n    }\r\n    await next(context);\r\n});\r\n\r\napp.MapGet(\"/\", (HttpContext context) => Results.Content($$\"\"\"\r\n<html>\r\n<head>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor\" crossorigin=\"anonymous\">\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        <a href=\"/problems\">Show problems</a>\r\n    </div>\r\n</body>\r\n</html>\r\n\"\"\", \"text/html\"));\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/problem-details-middleware/problem-details-3/README.md",
    "content": "# Get and use IProblemDetailsService \r\n\r\nThis example shows how customize [Problem Details](https://www.rfc-editor.org/rfc/rfc7807) by manipulating `IProblemDetailsService`."
  },
  {
    "path": "projects/problem-details-middleware/problem-details-3/problem-details-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/razor-pages/README.md",
    "content": "# Razor Pages (10)\r\n\r\n| Sections |\r\n| --------------------------------------------------------------- |\r\n| [Razor View](/projects/razor-pages/razor) (2) |\r\n\r\n* [Hello World](/projects/razor-pages/hello-world)\r\n\r\n  This is the simplest example for Razor Page. Razor Page by default routes `.cshtml` files with `@page` attribute under `/Pages`. So `/Pages/Index.cshtml` becomes `/` and `/Pages/AboutUs.cshtml` becomes `/AboutUs`. \r\n\r\n* [Razor Pages Basic](/projects/razor-pages/razor-pages-basic)\r\n\r\n  This sample shows the two approaches to `Razor Pages`, one with inline code behind and another with separate code behind.\r\n\r\n* [Razor Pages and MVC Basic](/projects/razor-pages/razor-pages-mvc)\r\n\r\n  Compare and contrast on how the same task can be performed by using `Razor Pages` and `MVC`.\r\n  This sample also shows you how to us `Entity Framework Core` In-Memory Database.\r\n\r\n* [Routing](/projects/razor-pages/routing)\r\n\r\n  Use `@page` directive on your Razor Page file to customize the url of your Razor Page. Each Razor Page can only contain 1 `@page` definition.\r\n\r\n* [Routing-2](/projects/razor-pages/routing-2)\r\n\r\n  Capture routing data from `@page` url template using `RouteData.Values[]`.\r\n\r\n* [Customize HTML Id generated by Tag Helper](/projects/razor-pages/custom-html-generator)\r\n\r\n  If you do not like the HTML Ids generated by Tag Helper, this sample shows you how to customize them.\r\n\r\n* [TempData backed by cookies](/projects/razor-pages/temp-data)\r\n  \r\n  Shows how to use `TempData` backed by coookies.\r\n\r\n## Handler Methods (1)\r\n\r\n * [Get and Post](/projects/razor-pages/handler)\r\n\r\n   This demonstrates the simplest usage for `Get` and `Post` handlers.\r\n\r\n\r\ndotnet6"
  },
  {
    "path": "projects/razor-pages/build.bat",
    "content": "dotnet build custom-html-generator\r\ndotnet build handler\r\ndotnet build hello-world\r\ndotnet build razor\r\ndotnet build razor-pages-basic\r\ndotnet build razor-pages-mvc\r\ndotnet build routing\r\ndotnet build routing-2\r\ndotnet build temp-data"
  },
  {
    "path": "projects/razor-pages/build.sh",
    "content": "#!/bin/bash\ndotnet build custom-html-generator\ndotnet build handler\ndotnet build hello-world\ndotnet build razor\ndotnet build razor-pages-basic\ndotnet build razor-pages-mvc\ndotnet build routing\ndotnet build routing-2\ndotnet build temp-data\n"
  },
  {
    "path": "projects/razor-pages/custom-html-generator/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-hello-world.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/razor-pages/custom-html-generator/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/hello-world.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/razor-pages/custom-html-generator/LowerCaseIdHtmlGenerator.cs",
    "content": "using Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.ModelBinding;\r\nusing Microsoft.AspNetCore.Mvc.Rendering;\r\nusing Microsoft.AspNetCore.Mvc.Routing;\r\nusing Microsoft.AspNetCore.Mvc.ViewFeatures;\r\nusing Microsoft.Extensions.Options;\r\nusing System.Text.Encodings.Web;\r\nusing System.Text.RegularExpressions;\r\n\r\npublic class LowerCaseIdHtmlGenerator : DefaultHtmlGenerator\r\n{\r\n    public LowerCaseIdHtmlGenerator(\r\n        IAntiforgery antiforgery,\r\n        IOptions<MvcViewOptions> optionsAccessor,\r\n        IModelMetadataProvider metadataProvider,\r\n        IUrlHelperFactory urlHelper,\r\n        HtmlEncoder htmlEncoder,\r\n        ValidationHtmlAttributeProvider validationProvider)\r\n       : base(antiforgery, optionsAccessor, metadataProvider, urlHelper, htmlEncoder, validationProvider)\r\n    {\r\n\r\n    }\r\n\r\n    public override TagBuilder GenerateCheckBox(ViewContext viewContext, ModelExplorer modelExplorer, string expression, bool? isChecked, object htmlAttributes)\r\n    {\r\n        var builder = base.GenerateCheckBox(viewContext, modelExplorer, expression, isChecked, htmlAttributes);\r\n\r\n        if (!builder.Attributes.TryGetValue(\"id\", out string id))\r\n            return builder;\r\n\r\n        builder.Attributes[\"id\"] = ConverToLowerCase(id);\r\n\r\n        return builder;\r\n    }\r\n\r\n    public override TagBuilder GenerateForm(ViewContext viewContext, string actionName, string controllerName, object routeValues, string method, object htmlAttributes)\r\n    {\r\n        var builder = base.GenerateForm(viewContext, actionName, controllerName, routeValues, method, htmlAttributes);\r\n\r\n        if (!builder.Attributes.TryGetValue(\"id\", out string id))\r\n            return builder;\r\n\r\n        builder.Attributes[\"id\"] = ConverToLowerCase(id);\r\n\r\n        return builder;\r\n    }\r\n\r\n    public override TagBuilder GenerateHidden(ViewContext viewContext, ModelExplorer modelExplorer, string expression, object value, bool useViewData, object htmlAttributes)\r\n    {\r\n        var builder = base.GenerateHidden(viewContext, modelExplorer, expression, value, useViewData, htmlAttributes);\r\n\r\n        if (!builder.Attributes.TryGetValue(\"id\", out string id))\r\n            return builder;\r\n\r\n        builder.Attributes[\"id\"] = ConverToLowerCase(id);\r\n\r\n        return builder;\r\n    }\r\n\r\n    public override TagBuilder GenerateHiddenForCheckbox(ViewContext viewContext, ModelExplorer modelExplorer, string expression)\r\n    {\r\n        var builder = base.GenerateHiddenForCheckbox(viewContext, modelExplorer, expression);\r\n\r\n        if (!builder.Attributes.TryGetValue(\"id\", out string id))\r\n            return builder;\r\n\r\n        builder.Attributes[\"id\"] = ConverToLowerCase(id);\r\n\r\n        return builder;\r\n    }\r\n\r\n    public override TagBuilder GenerateLabel(ViewContext viewContext, ModelExplorer modelExplorer, string expression, string labelText, object htmlAttributes)\r\n    {\r\n        var builder = base.GenerateLabel(viewContext, modelExplorer, expression, labelText, htmlAttributes);\r\n\r\n        if (!builder.Attributes.TryGetValue(\"id\", out string id))\r\n            return builder;\r\n\r\n        builder.Attributes[\"id\"] = ConverToLowerCase(id);\r\n\r\n        return builder;\r\n    }\r\n\r\n    public override TagBuilder GeneratePassword(ViewContext viewContext, ModelExplorer modelExplorer, string expression, object value, object htmlAttributes)\r\n    {\r\n        var builder = base.GeneratePassword(viewContext, modelExplorer, expression, value, htmlAttributes);\r\n\r\n        if (!builder.Attributes.TryGetValue(\"id\", out string id))\r\n            return builder;\r\n\r\n        builder.Attributes[\"id\"] = ConverToLowerCase(id);\r\n\r\n        return builder;\r\n    }\r\n\r\n    public override TagBuilder GenerateRadioButton(ViewContext viewContext, ModelExplorer modelExplorer, string expression, object value, bool? isChecked, object htmlAttributes)\r\n    {\r\n        var builder = base.GenerateRadioButton(viewContext, modelExplorer, expression, value, isChecked, htmlAttributes);\r\n\r\n        if (!builder.Attributes.TryGetValue(\"id\", out string id))\r\n            return builder;\r\n\r\n        builder.Attributes[\"id\"] = ConverToLowerCase(id);\r\n\r\n        return builder;\r\n    }\r\n\r\n    public override TagBuilder GenerateSelect(ViewContext viewContext, ModelExplorer modelExplorer, string optionLabel, string expression, IEnumerable<SelectListItem> selectList, ICollection<string> currentValues, bool allowMultiple, object htmlAttributes)\r\n    {\r\n        var builder = base.GenerateSelect(viewContext, modelExplorer, optionLabel, expression, selectList, currentValues, allowMultiple, htmlAttributes);\r\n\r\n        if (!builder.Attributes.TryGetValue(\"id\", out string id))\r\n            return builder;\r\n\r\n        builder.Attributes[\"id\"] = ConverToLowerCase(id);\r\n\r\n        return builder;\r\n    }\r\n\r\n\r\n    public override TagBuilder GenerateTextArea(ViewContext viewContext, ModelExplorer modelExplorer, string expression, int rows, int columns, object htmlAttributes)\r\n    {\r\n        var builder = base.GenerateTextArea(viewContext, modelExplorer, expression, rows, columns, htmlAttributes);\r\n\r\n        if (!builder.Attributes.TryGetValue(\"id\", out string id))\r\n            return builder;\r\n\r\n        builder.Attributes[\"id\"] = ConverToLowerCase(id);\r\n\r\n        return builder;\r\n    }\r\n\r\n    public override TagBuilder GenerateTextBox(ViewContext viewContext, ModelExplorer modelExplorer, string expression, object value, string format, object htmlAttributes)\r\n    {\r\n        var builder = base.GenerateTextBox(viewContext, modelExplorer, expression, value, format, htmlAttributes);\r\n\r\n        if (!builder.Attributes.TryGetValue(\"id\", out string id))\r\n            return builder;\r\n\r\n        builder.Attributes[\"id\"] = ConverToLowerCase(id);\r\n\r\n        return builder;\r\n    }\r\n\r\n    private static string ConverToLowerCase(in string id)\r\n    {\r\n        var split = id.Split('_');\r\n\r\n        string newId = PascalToSnakeCase(split[0]) + '_';\r\n\r\n        foreach (var x in split.Skip(1))\r\n            newId += PascalToSnakeCase(x);\r\n\r\n        return newId;\r\n    }\r\n\r\n    public static string PascalToSnakeCase(in string value)\r\n    {\r\n        if (string.IsNullOrEmpty(value))\r\n            return value;\r\n\r\n        return Regex.Replace(\r\n            value,\r\n            \"(?<!^)([A-Z][a-z]|(?<=[a-z])[A-Z])\",\r\n            \"_$1\",\r\n            RegexOptions.Compiled)\r\n            .Trim()\r\n            .ToLower();\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/razor-pages/custom-html-generator/Pages/Index.cshtml",
    "content": "@page\r\n@model  PracticalAspNetCore.Pages.IndexModel\r\n\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Custom HTML Generator</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        <h1>Customize the automatically generated id by Tag Helper to snake_case</h1>\r\n\r\n        <p>\r\n            By default, the Tag Helper will generate something akin to \"Input_FirstName\" for the first text field. This is off course quite annoying \r\n            if you have to refer the element in JavaScript because it's an uncommon id naming convention. \r\n        </p>\r\n\r\n        <p>\r\n            The good thing is that you can customize the HTML that these Tag Helpers generate. Do a view source on this page and you will see that the ids are generated using snake_case.\r\n        </p>\r\n\r\n        <form>\r\n            <input type=\"text\" class=\"mb-3\" asp-for=\"Input.FirstName\" /><br/>\r\n            <input type=\"text\" class=\"mb-3\" asp-for=\"Input.LastName\" /><br/>\r\n            <input type=\"text\" class=\"mb-3\" asp-for=\"Input.LastKnownAddress\" /><br/>\r\n            <input type=\"text\" class=\"mb-3\" asp-for=\"Input.Email\" /><br/>\r\n            <button type=\"Submit\" class=\"btn btn-primary\">Submit</button>\r\n        </form>\r\n    </div>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/razor-pages/custom-html-generator/Pages/Index.cshtml.cs",
    "content": "\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\n\r\nnamespace PracticalAspNetCore.Pages\r\n{\r\n    public class IndexModel : PageModel\r\n    {\r\n        [BindProperty]\r\n        public PersonInput Input { get; set; }\r\n        public void OnGet()\r\n        {\r\n\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/razor-pages/custom-html-generator/Pages/_ViewImports.cshtml",
    "content": "@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n@addTagHelper *, AuthoringTagHelpers\r\n@addTagHelper *, RazorPages"
  },
  {
    "path": "projects/razor-pages/custom-html-generator/PersonInput.cs",
    "content": "public class PersonInput\r\n{\r\n    public string FirstName { get; set; }\r\n\r\n    public string LastName { get; set; }\r\n\r\n    public string LastKnownAddress { get; set; }\r\n\r\n    public string Email { get; set; }\r\n}\r\n"
  },
  {
    "path": "projects/razor-pages/custom-html-generator/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc.ViewFeatures;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\nbuilder.Services.Remove<IHtmlGenerator, DefaultHtmlGenerator>();\r\nbuilder.Services.AddTransient<IHtmlGenerator, LowerCaseIdHtmlGenerator>();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.Run();\r\n\r\npublic static class IServiceCollectionExtensions\r\n{\r\n    public static void Remove<TServiceType, TImplementationType>(this IServiceCollection services)\r\n    {\r\n        var serviceDescriptor = services.First(s => s.ServiceType == typeof(TServiceType) && s.ImplementationType == typeof(TImplementationType));\r\n        services.Remove(serviceDescriptor);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/razor-pages/custom-html-generator/README.md",
    "content": "# Customize the HTML Id attribute generated by Tag Helper to snake_case instead of the current default one\r\n\r\nBy default, the Tag Helper will generate something akin to \"Input_FirstName\" for the first text field. This is off course quite annoying \r\nif you have to refer the element in JavaScript because it's an uncommon id naming convention.\r\n\r\nThe good thing is that you can customize the HTML that these Tag Helpers generate. Do a view source on this page and you will see that the ids are generated using snake_case.\r\n\r\nThe code here is originated from a mash up between:\r\n\r\n* https://gist.github.com/CMircea/67da04f7f3fe1a556d2d\r\n* https://stackoverflow.com/questions/43357057/how-to-make-the-asp-for-input-tag-helper-generate-camelcase-names\r\n\r\n"
  },
  {
    "path": "projects/razor-pages/custom-html-generator/custom-html-generator.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/razor-pages/handler/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-hello-world.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/razor-pages/handler/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/hello-world.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/razor-pages/handler/Pages/Index.cshtml",
    "content": "@page\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n@model IndexModel\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Hello World</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n</head>\r\n<body>\r\n    <div class=\"container\">\r\n        <h1>@Model.Message</h1>\r\n        Method: @Model.Method\r\n        <br/><br/>\r\n        <form class=\"form\" method=\"post\" asp-page=\"Index\">\r\n            <button type=\"Submit\" class=\"btn btn-primary\">Post</button>\r\n        </form>\r\n    </div>\r\n</body>\r\n</html>\r\n\r\n@functions\r\n{\r\n    public class IndexModel : Microsoft.AspNetCore.Mvc.RazorPages.PageModel\r\n    {\r\n      public string Message { get; set; } = \"Hello World\";\r\n\r\n      public string Method { get; set; }\r\n\r\n      public void OnGet()\r\n      {\r\n        Method = this.HttpContext.Request.Method;\r\n      }\r\n\r\n      public IActionResult OnPost()\r\n      {\r\n        Method = this.HttpContext.Request.Method;\r\n        return Page();\r\n      }\r\n    }\r\n}"
  },
  {
    "path": "projects/razor-pages/handler/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/razor-pages/handler/handler.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/razor-pages/hello-world/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-hello-world.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/razor-pages/hello-world/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/hello-world.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/razor-pages/hello-world/Pages/Index.cshtml",
    "content": "@page\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Hello World</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n    <h1>Hello World Razor Page</h1>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/razor-pages/hello-world/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/razor-pages/hello-world/hello-world.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/razor-pages/razor/README.md",
    "content": "# Razor View (2)\r\n\r\n* [Markup at @functions](/projects/razor-pages/razor/razor-1)\r\n   \r\n  Now you can use markup inside methods at `@functions` block.\r\n\r\n* [Markup at code block](/projects/razor-pages/razor/razor-2)\r\n   \r\n  Now you can use markup inside functions at code block.\r\n\r\ndotnet6"
  },
  {
    "path": "projects/razor-pages/razor/razor-1/Pages/Index.cshtml",
    "content": "@page\r\n<html>\r\n    <body>\r\n        <h1>Markup in @@functions</h1>\r\n        @{ Say(\"Hello World\"); }\r\n        <br/>\r\n        @{ Calculate(Enumerable.Range(1, 10));}\r\n    </body>\r\n</html>\r\n\r\n@functions\r\n{\r\n    void Say(string message)\r\n    {\r\n        <div><strong>@message</strong></div>\r\n    }\r\n\r\n    void Calculate(IEnumerable<int> numbers)\r\n    {\r\n        foreach(var b in numbers)\r\n        {\r\n            Say(b + \"\");\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/razor-pages/razor/razor-1/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/razor-pages/razor/razor-1/README.md",
    "content": "# Markup in methods inside @functions block\r\n\r\nNow you can use markup code inside methods located at @functions block."
  },
  {
    "path": "projects/razor-pages/razor/razor-1/razor-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/razor-pages/razor/razor-2/Pages/Index.cshtml",
    "content": "@page\r\n@{\r\n    void Say(string message)\r\n    {\r\n        <div><strong>@message</strong></div>\r\n    }\r\n\r\n    void Calculate(IEnumerable<int> numbers)\r\n    {\r\n        foreach(var b in numbers)\r\n        {\r\n            Say(b + \"\");\r\n        }\r\n    }\r\n}\r\n\r\n<html>\r\n    <body>\r\n        <h1>Markup in code block</h1>\r\n        @{ Say(\"Hello World\"); }\r\n        <br/>\r\n        @{ Calculate(Enumerable.Range(1, 10));}\r\n    </body>\r\n</html>\r\n\r\n"
  },
  {
    "path": "projects/razor-pages/razor/razor-2/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/razor-pages/razor/razor-2/README.md",
    "content": "# Markup in local functions inside code block\r\n\r\nNow you can use markup code inside local functions located at code block."
  },
  {
    "path": "projects/razor-pages/razor/razor-2/razor.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-basic/Pages/Index.cshtml",
    "content": "﻿@page\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <title>Hello, world!</title>\r\n  </head>\r\n  <body>\r\n   <h1>Welcome to Razor Pages Basic</h1>\r\n   <p>\r\n      See <a href=\"/InlineCodebehindFile\">Page with inline code behind model</a>\r\n   </p>\r\n   <p>\r\n      See <a href=\"/SeparateCodebehindFile\">Page with separate code behind model</a>\r\n   </p>\r\n  </body>\r\n</html>\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-basic/Pages/InlineCodebehindFile.cshtml",
    "content": "﻿@page\r\n@model InlineCodebehindFileModel\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <title>Hello, world!</title>\r\n  </head>\r\n  <body>\r\n    <h1>@Model.Title</h1>\r\n    <p>\r\n        @Model.Message\r\n    </p>\r\n    <p>\r\n        Go <a href=\"/\">back</a>\r\n    </p>\r\n  </body>\r\n</html>\r\n\r\n\r\n@functions{\r\n    public class InlineCodebehindFileModel : Microsoft.AspNetCore.Mvc.RazorPages.PageModel\r\n    {\r\n        public string Title => \"Page with inline codebehind file model\";\r\n        public string Message { get; private set; }\r\n\r\n        public void OnGet()\r\n        {\r\n            Message = $\"Generated at { DateTime.Now.ToLongTimeString() }.\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/razor-pages/razor-pages-basic/Pages/SeparateCodebehindFile.cshtml",
    "content": "﻿@page\r\n@using RazorPagesBasic.Pages\r\n@model SeparateCodebehindFileModel\r\n\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3\" crossorigin=\"anonymous\">\r\n    <title>Hello, world!</title>\r\n  </head>\r\n  <body>\r\n    <h1>@Model.Title</h1>\r\n    <p>\r\n        @Model.Message\r\n    </p>\r\n    <p>\r\n        Go <a href=\"/\">back</a>\r\n    </p>\r\n  </body>\r\n</html>\r\n\r\n\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-basic/Pages/SeparateCodebehindFile.cshtml.cs",
    "content": "using Microsoft.AspNetCore.Mvc.RazorPages;\r\n\r\nnamespace RazorPagesBasic.Pages;\r\n\r\npublic class SeparateCodebehindFileModel : PageModel\r\n{\r\n    public string Title => \"Page with separate codebehind file model\";\r\n    public string Message { get; private set; }\r\n\r\n    public void OnGet()\r\n    {\r\n        Message = $\"Generated at { DateTime.Now.ToLongTimeString() }.\";\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-basic/Program.cs",
    "content": "﻿var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/razor-pages/razor-pages-basic/razor-pages-basic.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Controllers/EntryController.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.EntityFrameworkCore;\r\nusing PracticalAspNetCore.Data;\r\n\r\nnamespace PracticalAspNetCore.Controllers\r\n{\r\n    [Route(\"Mvc\")]\r\n    public class EntryController : Controller\r\n    {\r\n        private GuestbookContext _db;\r\n\r\n        public EntryController(GuestbookContext db) => _db = db;\r\n\r\n        [Route(\"Index\")]\r\n        public async Task<IActionResult> Index()\r\n        {\r\n            var entries = await _db.Entries.AsNoTracking().ToListAsync();\r\n            return View(entries);\r\n        }\r\n\r\n        [HttpPost]\r\n        [Route(\"Edit\")]\r\n        public async Task<IActionResult> Edit(Entry entry)\r\n        {\r\n            if (!ModelState.IsValid) return View(\"Edit\", entry);\r\n\r\n            _db.Attach(entry).State = EntityState.Modified;\r\n            await _db.SaveChangesAsync();\r\n            return RedirectToAction(\"Index\");\r\n        }\r\n\r\n        [Route(\"Edit\")]\r\n        public async Task<IActionResult> Edit(int id)\r\n        {\r\n            var entry = await _db.Entries.SingleOrDefaultAsync(e => e.Id == id);\r\n            return View(entry);\r\n        }\r\n\r\n        [HttpPost]\r\n        [Route(\"Create\")]\r\n        public async Task<IActionResult> Create(Entry entry)\r\n        {\r\n            if (!ModelState.IsValid) return View(entry);\r\n\r\n            await _db.Entries.AddAsync(entry);\r\n            await _db.SaveChangesAsync();\r\n            return RedirectToAction(\"Index\");\r\n        }\r\n\r\n        [Route(\"Create\")]\r\n        public IActionResult Create() => View();\r\n\r\n        [HttpPost]\r\n        [Route(\"Like\")]\r\n        public async Task<IActionResult> Like(int id)\r\n        {\r\n            var entry = await _db.Entries.SingleOrDefaultAsync(e => e.Id == id);\r\n            entry.Likes += 1;\r\n            await _db.SaveChangesAsync();\r\n            return RedirectToAction(\"Index\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Data/Entry.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\r\n\r\nnamespace PracticalAspNetCore.Data\r\n{\r\n    public class Entry\r\n    {\r\n        public int Id { get; set; }\r\n\r\n        [Required, StringLength(300)]\r\n        public string Content { get; set; }\r\n\r\n        [Required, EmailAddress]\r\n        public string Email { get; set; }\r\n\r\n        public int Likes { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Data/GuestbookContext.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore;\r\n\r\nnamespace PracticalAspNetCore.Data\r\n{\r\n    public class GuestbookContext : DbContext\r\n    {\r\n        public GuestbookContext(DbContextOptions options) : base(options) { }\r\n\r\n        public DbSet<Entry> Entries { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Pages/Index.cshtml",
    "content": "@page\r\n<h1>Welcome to Razor Pages and MVC example</h1>\r\n\r\n<p>Go to <a href=\"RazorPages/Index\">Razor Pages Implementation</a></p>\r\n\r\n<p>Go to <a href=\"Mvc/Index\">Mvc Implementation</a></p>"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Pages/RazorPages/Create.cshtml",
    "content": "﻿@page\r\n@model PracticalAspNetCore.Pages.CreateModel\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n\r\n<html>\r\n    <body>\r\n        <p>Add new guestbook entry.</p>\r\n        <div asp-validation-summary=\"All\"></div>\r\n        <form method=\"POST\">\r\n            <div>Name: <input asp-for=\"Entry.Content\" /></div>\r\n            <div>Email: <input asp-for=\"Entry.Email\" /></div>\r\n            <input type=\"submit\" />\r\n        </form>\r\n    </body>\r\n</html>\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Pages/RazorPages/Create.cshtml.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing PracticalAspNetCore.Data;\r\n\r\nnamespace PracticalAspNetCore.Pages\r\n{\r\n    public class CreateModel : PageModel\r\n    {\r\n        private readonly GuestbookContext _db;\r\n\r\n        public CreateModel(GuestbookContext db) => _db = db;\r\n\r\n        [BindProperty]\r\n        public Entry Entry { get; set; }\r\n\r\n        public async Task<IActionResult> OnPostAsync()\r\n        {\r\n            if (!ModelState.IsValid) return Page();\r\n\r\n            _db.Entries.Add(Entry);\r\n            await _db.SaveChangesAsync();\r\n            return RedirectToPage(\"Index\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Pages/RazorPages/Edit.cshtml",
    "content": "﻿@page \"{id:int}\"\r\n@model PracticalAspNetCore.Pages.EditModel\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n\r\n<h1>Edit Guestbook Entry @Model.Entry.Id</h1>\r\n\r\n<form method=\"post\">\r\n    <div asp-validation-summary=\"All\"></div>\r\n    <input asp-for=\"Entry.Id\" type=\"hidden\" />\r\n    <input asp-for=\"Entry.Email\" type=\"hidden\" />\r\n    <input asp-for=\"Entry.Likes\" type=\"hidden\" />\r\n    <div>\r\n        <label asp-for=\"Entry.Content\"></label>\r\n        <div>\r\n            <input asp-for=\"Entry.Content\" />\r\n            <span asp-validation-for=\"Entry.Content\"></span>\r\n        </div>\r\n    </div>\r\n\r\n    <div>\r\n        <button type=\"submit\">Save</button>\r\n    </div>\r\n</form>\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Pages/RazorPages/Edit.cshtml.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing PracticalAspNetCore.Data;\r\nusing Microsoft.EntityFrameworkCore;\r\n\r\nnamespace PracticalAspNetCore.Pages\r\n{\r\n    public class EditModel : PageModel\r\n    {\r\n        private readonly GuestbookContext _db;\r\n\r\n        public EditModel(GuestbookContext db) => _db = db;\r\n\r\n        [BindProperty]\r\n        public Entry Entry { get; set; }\r\n\r\n        public async Task<IActionResult> OnGetAsync(int id)\r\n        {\r\n            Entry = await _db.Entries.FindAsync(id);\r\n\r\n            if (Entry == null) return RedirectToPage(\"/Index\");\r\n\r\n            return Page();\r\n        }\r\n\r\n        public async Task<IActionResult> OnPostAsync()\r\n        {\r\n            if (!ModelState.IsValid) return Page();\r\n\r\n            _db.Attach(Entry).State = EntityState.Modified;\r\n            await _db.SaveChangesAsync();\r\n            return RedirectToPage(\"Index\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Pages/RazorPages/Index.cshtml",
    "content": "﻿@page\r\n@model PracticalAspNetCore.Pages.IndexRazorPagesModel\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n\r\n<h1>Razor Pages Implementation</h1>\r\n<p>Add your entry to guestbook.</p>\r\n<form method=\"post\">\r\n    <table class=\"table\">\r\n        <thead>\r\n        <tr>\r\n            <th>Id</th>\r\n            <th>Email</th>\r\n            <th>Content</th>\r\n            <th>Likes</th>\r\n        </tr>\r\n        </thead>\r\n        <tbody>\r\n        @foreach (var entry in Model.Entries)\r\n        {\r\n            <tr>\r\n                <td>@entry.Id</td>\r\n                <td>@entry.Email</td>\r\n                <td>@entry.Content</td>\r\n                <td>@entry.Likes</td>\r\n                <td>\r\n                    <button type=\"submit\" asp-page-handler=\"like\" \r\n                            asp-route-id=\"@entry.Id\">like</button>\r\n                    <a asp-page=\"./Edit\" asp-route-id=\"@entry.Id\">edit</a>\r\n                </td>\r\n            </tr>\r\n        }\r\n        </tbody>\r\n    </table>\r\n    <a asp-page=\"./Create\">Create</a>\r\n</form>\r\n\r\n<p>Go back to <a href=\"/Index\">Index</a></p>\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Pages/RazorPages/Index.cshtml.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing PracticalAspNetCore.Data;\r\nusing Microsoft.EntityFrameworkCore;\r\n\r\nnamespace PracticalAspNetCore.Pages\r\n{\r\n    public class IndexRazorPagesModel : PageModel\r\n    {\r\n        private readonly GuestbookContext _db;\r\n\r\n        public IndexRazorPagesModel(GuestbookContext db) => _db = db;\r\n\r\n        public IList<Entry> Entries { get; private set; }\r\n\r\n        public async Task OnGetAsync()\r\n        {\r\n            Entries = await _db.Entries.AsNoTracking().ToListAsync();\r\n        }\r\n\r\n        public async Task<IActionResult> OnPostLikeAsync(int id)\r\n        {\r\n            var entry = await _db.Entries.FindAsync(id);\r\n            entry.Likes += 1;\r\n            await _db.SaveChangesAsync();\r\n            return RedirectToPage();\r\n        }\r\n\r\n        public async Task<IActionResult> OnPostDeleteAsync(int id)\r\n        {\r\n            var entry = await _db.Entries.FindAsync(id);\r\n            _db.Entries.Remove(entry);\r\n            await _db.SaveChangesAsync();\r\n            return RedirectToPage();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Program.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore;\r\nusing PracticalAspNetCore.Data;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddDbContext<GuestbookContext>(o => o.UseInMemoryDatabase(\"GuestbookDatabase\"));\r\nbuilder.Services.AddControllersWithViews();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.MapRazorPages();\r\n\r\napp.Run();"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Views/Entry/Create.cshtml",
    "content": "﻿@model PracticalAspNetCore.Data.Entry\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n\r\n<html>\r\n    <body>\r\n        <p>\r\n            Add new guestbook entry.\r\n        </p>\r\n        <div asp-validation-summary=\"All\"></div>\r\n        <form method=\"post\" action=\"Create\">\r\n            <div>Name: <input asp-for=\"Content\" /></div>\r\n            <div>Email: <input asp-for=\"Email\" /></div>\r\n            <input type=\"submit\" />\r\n        </form>\r\n    </body>\r\n</html>\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Views/Entry/Edit.cshtml",
    "content": "﻿@model PracticalAspNetCore.Data.Entry\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n\r\n@{\r\n    ViewData[\"Title\"] = \"Edit Guestbook entry\";\r\n}\r\n\r\n<h1>Edit Entry @Model.Id</h1>\r\n<form method=\"post\">\r\n    <div asp-validation-summary=\"All\"></div>\r\n    <input asp-for=\"Id\" type=\"hidden\" />\r\n    <input asp-for=\"Email\" type=\"hidden\" />\r\n    <input asp-for=\"Likes\" type=\"hidden\" />\r\n    <div>\r\n        <label asp-for=\"Content\"></label>\r\n        <div>\r\n            <input asp-for=\"Content\" />\r\n            <span asp-validation-for=\"Content\"></span>\r\n        </div>\r\n    </div>\r\n\r\n    <div>\r\n        <button type=\"submit\">Save</button>\r\n    </div>\r\n</form>\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/Views/Entry/Index.cshtml",
    "content": "﻿@model List<PracticalAspNetCore.Data.Entry>\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n<h1>MVC Implementation</h1>\r\n<p>Add your entry to guestbook.</p>\r\n<form method=\"post\">\r\n    <table class=\"table\">\r\n        <thead>\r\n        <tr>\r\n            <th>Id</th>\r\n            <th>Email</th>\r\n            <th>Content</th>\r\n            <th>Likes</th>\r\n        </tr>\r\n        </thead>\r\n        <tbody>\r\n        @foreach (var entry in Model)\r\n        {\r\n            <tr>\r\n                <td>@entry.Id</td>\r\n                <td>@entry.Email</td>\r\n                <td>@entry.Content</td>\r\n                <td>@entry.Likes</td>\r\n                <td>\r\n                    <button type=\"submit\" asp-controller=\"Entry\" asp-action=\"Like\" asp-route-id=\"@entry.Id\">like</button>\r\n                    <a asp-controller=\"Entry\" asp-action=\"Edit\" asp-route-id=\"@entry.Id\">edit</a>\r\n                </td>\r\n            </tr>\r\n        }\r\n        </tbody>\r\n    </table>\r\n\r\n    <a asp-controller=\"Entry\" asp-action=\"Create\">Create</a>\r\n</form>\r\n\r\n\r\n<p>Go back to <a href=\"/Index\">Index</a></p>\r\n"
  },
  {
    "path": "projects/razor-pages/razor-pages-mvc/razor-pages-mvc.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore\" Version=\"6.0.4\" />\r\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.InMemory\" Version=\"6.0.4\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/razor-pages/routing/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-hello-world.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/razor-pages/routing/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/hello-world.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/razor-pages/routing/Pages/About.cshtml",
    "content": "@page \"/AboutOurSchool\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Remaining</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n    <h1>About</h1>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/razor-pages/routing/Pages/Blog.cshtml",
    "content": "@page \"/Blog/2018/4/20/itsmybirthday\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Path</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n    <h1>Birthday page</h1>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/razor-pages/routing/Pages/Contact.cshtml",
    "content": "@page \"/Contact-Us\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Contact Us</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n    <h1>Contact Us</h1>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/razor-pages/routing/Pages/Index.cshtml",
    "content": "@page\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Page Title</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n<h1>Using @@page to configure routing for your Razor page</h1>\r\n    <ul>\r\n        <li><a href=\"/contact-us\">/contact-us</a> with page Contact.cshtml</li>\r\n        <li><a href=\"/AboutOurSchool\">/AboutOurSchool</a> with page About.cshtml</li>\r\n        <li><a href=\"/Blog/2018/4/20/itsmybirthday\">/Blog/2018/4/20/itsmybirthday</a> with page Blog.cshtml </li>\r\n    </ul>\r\n\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/razor-pages/routing/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/razor-pages/routing/routing.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>routing</AssemblyName>\r\n\r\n    <PackageId>hello-world</PackageId>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/razor-pages/routing-2/.vscode/launch.json",
    "content": "{\r\n   // Use IntelliSense to find out which attributes exist for C# debugging\r\n   // Use hover for the description of the existing attributes\r\n   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md\r\n   \"version\": \"0.2.0\",\r\n   \"configurations\": [\r\n        {\r\n            \"name\": \".NET Core Launch (web)\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"launch\",\r\n            \"preLaunchTask\": \"build\",\r\n            // If you have changed target frameworks, make sure to update the program path.\r\n            \"program\": \"${workspaceFolder}/bin/Debug/netcoreapp3.1/mvc-hello-world.dll\",\r\n            \"args\": [],\r\n            \"cwd\": \"${workspaceFolder}\",\r\n            \"stopAtEntry\": false,\r\n            \"internalConsoleOptions\": \"openOnSessionStart\",\r\n            \"launchBrowser\": {\r\n                \"enabled\": true,\r\n                \"args\": \"${auto-detect-url}\",\r\n                \"windows\": {\r\n                    \"command\": \"cmd.exe\",\r\n                    \"args\": \"/C start ${auto-detect-url}\"\r\n                },\r\n                \"osx\": {\r\n                    \"command\": \"open\"\r\n                },\r\n                \"linux\": {\r\n                    \"command\": \"xdg-open\"\r\n                }\r\n            },\r\n            \"env\": {\r\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n            },\r\n            \"sourceFileMap\": {\r\n                \"/Views\": \"${workspaceFolder}/Views\"\r\n            }\r\n        },\r\n        {\r\n            \"name\": \".NET Core Attach\",\r\n            \"type\": \"coreclr\",\r\n            \"request\": \"attach\",\r\n            \"processId\": \"${command:pickProcess}\"\r\n        }\r\n    ,]\r\n}"
  },
  {
    "path": "projects/razor-pages/routing-2/.vscode/tasks.json",
    "content": "{\r\n    \"version\": \"2.0.0\",\r\n    \"tasks\": [\r\n        {\r\n            \"label\": \"build\",\r\n            \"command\": \"dotnet\",\r\n            \"type\": \"process\",\r\n            \"args\": [\r\n                \"build\",\r\n                \"${workspaceFolder}/hello-world.csproj\"\r\n            ],\r\n            \"problemMatcher\": \"$msCompile\"\r\n        }\r\n    ]\r\n}"
  },
  {
    "path": "projects/razor-pages/routing-2/Pages/About.cshtml",
    "content": "@page \"/About/{section}/{year:int}\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>About</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n    <h1>About @RouteData.Values[\"section\"] | @RouteData.Values[\"year\"]</h1>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/razor-pages/routing-2/Pages/Blog.cshtml",
    "content": "@page \"/Blog/{*path}\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Blog</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n    <h1>@RouteData.Values[\"path\"]</h1>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/razor-pages/routing-2/Pages/Catalog.cshtml",
    "content": "@page \"/Product/{ean:int?}\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Product</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n    <h1>Product @RouteData.Values[\"ean\"]</h1>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/razor-pages/routing-2/Pages/Contact.cshtml",
    "content": "@page \"/contact-us/{id}\"\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Contact</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n    <h1>Contact Us @RouteData.Values[\"id\"]</h1>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/razor-pages/routing-2/Pages/Index.cshtml",
    "content": "@page\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <title>Page Title</title>\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n</head>\r\n<body>\r\n<h1>Capturing routing data from @@page</h1>\r\n    <ol>\r\n        <li><a href=\"/contact-us/1\">/contact-us/{id}</a> with page Contact.cshtml</li>\r\n        <li><a href=\"/About/OurSchool/2019\">/About/{section}/{int:year}</a> with page About.cshtml</li>\r\n        <li><a href=\"/About/our-department-store/2020\">/About/{section}/{int:year}</a> with page About.cshtml</li>\r\n        <li><a href=\"/Blog/2018/4/20/itsmybirthday\">/Blog/{*path}</a> with page Blog.cshtml</li>\r\n        <li><a href=\"/Blog/welcome\">/Blog/{*path}</a> with page Blog.cshtml</li>\r\n        <li><a href=\"/Product/\">/Product/{id:int?}</a> with page Catalog.cshtml</li>\r\n        <li><a href=\"/Product/333\">/Product/{id:int?}</a> with page Catalog.cshtml</li>\r\n    </ol>\r\n\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/razor-pages/routing-2/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n         \r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/razor-pages/routing-2/routing-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/razor-pages/temp-data/Pages/Index.cshtml",
    "content": "@page\r\n@model IndexModel\r\n\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/@@picocss/pico@@latest/css/pico.min.css\">\r\n    <title>Hello, world!</title>\r\n  </head>\r\n  <body>\r\n    <main class=\"container\">\r\n      <h1>Hello, world!</h1>\r\n      Click <a href=\"SetTempData\">here</a> to set TempData.\r\n\r\n    @if (TempData.Peek(\"Message\") != null)\r\n    {\r\n        <h3>Message: @TempData[\"Message\"]</h3>\r\n    }\r\n    </main>\r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/razor-pages/temp-data/Pages/Index.cshtml.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\n\r\npublic class IndexModel : PageModel\r\n{\r\n    public IActionResult OnGet()\r\n    {\r\n        return Page();\r\n    }\r\n}"
  },
  {
    "path": "projects/razor-pages/temp-data/Pages/SetTempData.cshtml",
    "content": "@page\r\n@model SetTempDataModel\r\n<!doctype html>\r\n<html lang=\"en\">\r\n  <head>\r\n    <meta charset=\"utf-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/@@picocss/pico@@latest/css/pico.min.css\">\r\n    <title>Hello, world!</title>\r\n  </head>\r\n  <body>\r\n    <main class=\"container\">\r\n        <h1>You have set the TempData</h1>\r\n        Click <a href=\"/\">here</a> to return to home page.\r\n    </main>\r\n  </body>\r\n</html>"
  },
  {
    "path": "projects/razor-pages/temp-data/Pages/SetTempData.cshtml.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\n\r\npublic class SetTempDataModel : PageModel\r\n{\r\n    [TempData]\r\n    public string Message { get; set; } = string.Empty;\r\n    \r\n    public IActionResult OnGet()\r\n    {\r\n        Message = \"Greeting from SetTempData page\";\r\n        return Page();\r\n    }\r\n}"
  },
  {
    "path": "projects/razor-pages/temp-data/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/razor-pages/temp-data/README.md",
    "content": "# Use TempData backed by cookies\r\n\r\nBy default `TempData` in Razor Pages is backed by cookies. This sample shows how to use `TempData` in a Razor Pages app using `[TempData]` attribute.\r\n\r\nRemember that when you access `TempData` value, it will disappear. To retain the value in `TempData`, use, `TempData.Peek`.  "
  },
  {
    "path": "projects/razor-pages/temp-data/temp-data.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/razor-slices/README.MD",
    "content": "# RazorSlices\r\n\r\n* [Hello World](hello-world)\r\n\r\n  This is the simplest sample on how to start using RazorSlices, a Razor-based template engine that does not require MVC, Razor Pages, nor Blazor. "
  },
  {
    "path": "projects/razor-slices/hello-world/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#0c5dc8\",\r\n        \"activityBar.background\": \"#0c5dc8\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#f669a6\",\r\n        \"activityBarBadge.foreground\": \"#15202b\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#0c5dc8\",\r\n        \"statusBar.background\": \"#094798\",\r\n        \"statusBar.debuggingBackground\": \"#985a09\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#0c5dc8\",\r\n        \"statusBarItem.remoteBackground\": \"#094798\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#094798\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#09479899\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#094798\"\r\n}"
  },
  {
    "path": "projects/razor-slices/hello-world/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", () => Results.Extensions.RazorSlice<HelloWorld.Slices.Index, string>(\"Hello world\"));\r\n\r\napp.Run();\r\n\r\n\r\n"
  },
  {
    "path": "projects/razor-slices/hello-world/README.md",
    "content": "# Hello world\r\n\r\nThis is a hello world sample based on [RazorSlices](https://github.com/DamianEdwards/RazorSlices), a Razor-based template engine. The Nuget Package is available [here](https://www.nuget.org/packages/RazorSlices).\r\n\r\n"
  },
  {
    "path": "projects/razor-slices/hello-world/Slices/Index.cshtml",
    "content": "@inherits RazorSliceHttpResult<string>\r\n<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\">\r\n</head>\r\n<body>\r\n    <p>\r\n        Greetings @Model at @DateTime.UtcNow\r\n    </p>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/razor-slices/hello-world/Slices/_ViewImports.cshtml",
    "content": "@inherits RazorSliceHttpResult\r\n\r\n@using System.Globalization;\r\n@using Microsoft.AspNetCore.Razor;\r\n@using Microsoft.AspNetCore.Http.HttpResults;\r\n\r\n@tagHelperPrefix __disable_tagHelpers__:\r\n@removeTagHelper *, Microsoft.AspNetCore.Mvc.Razor"
  },
  {
    "path": "projects/razor-slices/hello-world/hello-world.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    <RootNamespace>HelloWorld</RootNamespace>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"RazorSlices\" Version=\"0.8.1\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/request/README.md",
    "content": "# Request (15)\r\n\r\n  This section shows all the different ways you capture input and examine request to your web application.\r\n\r\n* [Anti Forgery on Form](/projects/request/anti-forgery)\r\n\r\n  This exists on since .NET Core 1.0 however the configuration for the cookie has changed slightly. We are using ```IAntiForgery``` interface to store and generate anti forgery token to prevent XSRF/CSRF attacks. \r\n\r\n\r\n* **HTTP Verb (1)**\r\n  * [Get request verb](/projects/request/request-verb)\r\n    \r\n    Detect the verb/method of the current request. \r\n\r\n* **Headers (3)**\r\n  * [Access Request Headers](/projects/request/request-headers)\r\n    \r\n    Enumerate all the available headers in a request.\r\n\r\n  * [Access Request Headers using common HTTP header names contained in HeaderNames](/projects/request/request-headers-names)\r\n\r\n    This sample shows all the common HTTP header names contained in `HeaderNames` class. So instead of using string to obtain a HTTP Header, you can just use a convenient constant such as `HeaderNames.ContentType`.\r\n\r\n  * [Type Safe Access to Request Headers](/projects/request/request-headers-typed)\r\n    \r\n    Instead of using string to access HTTP headers, use type safe object properties to access common HTTP headers.\r\n\r\n* **Query String (5)**\r\n  * [Single value query string](/projects/request/query-string-1)\r\n\r\n    Access single value query string.\r\n\r\n  * [Multiple values query string](/projects/request/query-string-2)\r\n\r\n    Access multiples values query string.\r\n\r\n  * [List all query string values](/projects/request/query-string-3)\r\n\r\n    List all query string values. Also shows the implicat conversion from ```StringValues``` to ```string```.\r\n\r\n  There are multiple ways to generate query strings.\r\n\r\n  * [Generate query string](/projects/request/form-url-encoded-content)\r\n\r\n    Use `System.Net.Http.FormUrlEncodedContent` to generate URL encoded query string.\r\n\r\n  * [Generate query string 2](/projects/request/query-string-create)\r\n\r\n    Use `Microsoft.AspNetCore.Http.QueryString.Create` to generate URL encoded query string. \r\n\r\n  * More functionalities to generate and parse query string is available at [Web Utilities](/projects/web-utilities) section.\r\n\r\n* **Form (2)**\r\n\r\n  * [Form Values](/projects/request/form-values) \r\n    \r\n    Handles the values submitted via a form.\r\n\r\n  * [Form Upload File](/projects/request/form-upload-file) \r\n    \r\n    Upload a single file and save it to the current directory (check out the usage of ```.UseContentRoot(Directory.GetCurrentDirectory())```)\r\n\r\n* **Cookies (3)**\r\n        \r\n    * [Cookies](/projects/request/cookies-1)\r\n\r\n      Read and write cookies.\r\n\r\n    * [Removing cookies](/projects/request/cookies-2)\r\n\r\n      Simply demonstrates on how to remove cookies.\r\n\r\n    * [Accessing cookie issues by remote API via AJAX call](/projects/request/cookies-3)\r\n\r\n      Demonstrates on how to access cookie values issued by remote API via AJAX call.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/request/anti-forgery/Program.cs",
    "content": "using Microsoft.AspNetCore.Antiforgery;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddAntiforgery(options =>\r\n{\r\n    options.Cookie.Name = \"AntiForgery\";\r\n    options.Cookie.Domain = \"localhost\";\r\n    options.Cookie.Path = \"/\";\r\n    options.FormFieldName = \"Antiforgery\";\r\n    options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\n//These are the four default services available at Configure\r\napp.Run(async context =>\r\n{\r\n    var antiForgery = context.RequestServices.GetService<IAntiforgery>();\r\n    if (HttpMethods.IsPost(context.Request.Method))\r\n    {\r\n        await antiForgery.ValidateRequestAsync(context);\r\n        await context.Response.WriteAsync(\"Response validated with anti forgery\");\r\n        return;\r\n    }\r\n\r\n    var token = antiForgery.GetAndStoreTokens(context);\r\n\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await context.Response.WriteAsync($@\"\r\n    <html>\r\n    <body>\r\n        View source to see the generated anti forgery token\r\n        <form method=\"\"post\"\">\r\n            <input type=\"\"hidden\"\" name=\"\"{token.FormFieldName}\"\" value=\"\"{token.RequestToken}\"\" />\r\n            <input type=\"\"submit\"\" value=\"\"Push\"\"/>\r\n        </form>\r\n    </body>\r\n    </html>   \r\n    \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/request/anti-forgery/anti-forgery.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/request/build.bat",
    "content": "dotnet build anti-forgery\r\ndotnet build cookies-1\r\ndotnet build cookies-2\r\ndotnet build cookies-3\r\ndotnet build form-upload-file\r\ndotnet build form-url-encoded-content\r\ndotnet build form-values\r\ndotnet build query-string-1\r\ndotnet build query-string-2\r\ndotnet build query-string-3\r\ndotnet build query-string-create\r\ndotnet build request-headers\r\ndotnet build request-headers-names\r\ndotnet build request-headers-typed\r\ndotnet build request-verb"
  },
  {
    "path": "projects/request/build.sh",
    "content": "#!/bin/bash\ndotnet build anti-forgery\ndotnet build cookies-1\ndotnet build cookies-2\ndotnet build cookies-3\ndotnet build form-upload-file\ndotnet build form-url-encoded-content\ndotnet build form-values\ndotnet build query-string-1\ndotnet build query-string-2\ndotnet build query-string-3\ndotnet build query-string-create\ndotnet build request-headers\ndotnet build request-headers-names\ndotnet build request-headers-typed\ndotnet build request-verb\n"
  },
  {
    "path": "projects/request/cookies-1/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.Run(context =>\r\n{\r\n    var cookie = context.Request.Cookies[\"MyCookie\"];\r\n\r\n    if (string.IsNullOrWhiteSpace(cookie))\r\n    {\r\n        context.Response.Cookies.Append\r\n        (\r\n            \"MyCookie\",\r\n            \"Hello World\",\r\n            new CookieOptions\r\n            {\r\n                Path = \"/\",\r\n                HttpOnly = false,\r\n                Secure = false\r\n            }\r\n        );\r\n    }\r\n\r\n    return context.Response.WriteAsync($\"Hello World Cookie: {cookie}. Refresh page to see cookie value.\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/request/cookies-1/cookies-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request/cookies-2/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\",\"text/html\");\r\n    var deleteCookie = context.Request.Query[\"delete\"];\r\n\r\n    if(!string.IsNullOrWhiteSpace(deleteCookie))\r\n    {\r\n        context.Response.Cookies.Delete(\"MyCookie\");\r\n        await context.Response.WriteAsync($@\"<html><body>Delete cookie. Click <a href=\"\"\\\"\">here</a> to go back to home page.</body></html>\");\r\n        return;\r\n    }\r\n\r\n    var cookie = context.Request.Cookies[\"MyCookie\"];\r\n\r\n    await context.Response.WriteAsync(\"<html><body>\");\r\n    if (string.IsNullOrWhiteSpace(cookie) && context.Request.Path == \"/\")  //read https://github.com/aspnet/HttpAbstractions/issues/743\r\n    {\r\n        context.Response.Cookies.Append\r\n        (\r\n            \"MyCookie\",\r\n            \"Hello World\",\r\n            new CookieOptions{\r\n                Path = \"/\",\r\n                Expires = DateTimeOffset.Now.AddDays(1)\r\n            }\r\n        );\r\n\r\n        await context.Response.WriteAsync($\"Writing a new cookie <br/>Refresh page to see cookie value.<br/>\");\r\n    }\r\n    else\r\n    {\r\n        await context.Response.WriteAsync($@\"Click <a href=\"\"\\?delete=1\"\">here</a> to delete cookie.<br/>\");\r\n    }\r\n\r\n    await context.Response.WriteAsync($\"Content of Cookie: {cookie}.\");\r\n    await context.Response.WriteAsync(\"</body></html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/request/cookies-2/cookies-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request/cookies-3/README.md",
    "content": "# Implementing cross site antiforgery \r\n\r\nThis example shows how to implement antiforgery for APIs located in different domain."
  },
  {
    "path": "projects/request/cookies-3/api/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddCors(options =>\r\n{\r\n    options.AddPolicy(name: \"localhostOnly\",\r\n                      policy  =>\r\n                      {\r\n                          policy.WithOrigins(builder.Configuration[\"origin\"])\r\n                                .AllowAnyHeader()\r\n                                .AllowAnyMethod()\r\n                                .AllowCredentials();\r\n                      });\r\n});\r\n\r\nWebApplication app = builder.Build();\r\napp.Urls.Add(\"https://localhost:5001\");\r\napp.UseCors(\"localhostOnly\");\r\n\r\napp.MapGet(\"/\", (HttpContext context) =>\r\n{\r\n    var html = $@\"<!DOCTYPE html>\r\n        <html>\r\n            <body>\r\n                System is UP            \r\n                <a href=\"\"/message-cookie\"\">Get a message cookie</a>  \r\n            </body>\r\n        </html>\r\n    \";\r\n\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/test-cors\", () => Results.Ok(new { Message = \"cors works\" }));\r\n\r\napp.MapGet(\"/message-cookie\", (HttpContext context) =>\r\n{\r\n    context.Response.Cookies.Append(\"message\", \"hello world\", new CookieOptions { HttpOnly = false });\r\n});\r\n\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/request/cookies-3/api/api.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/request/cookies-3/api/appsettings.json",
    "content": "{\r\n    \"origin\" : \"https://localhost:5002\" \r\n}"
  },
  {
    "path": "projects/request/cookies-3/frontend/Pages/Index.cshtml",
    "content": "@page\r\n@inject IConfiguration Config;\r\n\r\n<!DOCTYPE html>\r\n<html>\r\n    <body>\r\n        <h1>Access cookie using AJAX call to API from different domain</h1>\r\n        <button id=\"test\">Test CORS</button><br/><br/>\r\n        <button id=\"fetchName\">Fetch</button>\r\n        <script>\r\n            async function getCookie(){\r\n                const response = await fetch(\"@Config[\"endpoint\"]/message-cookie\", {\r\n                    method: \"GET\",\r\n                    credentials: 'include'\r\n                });\r\n\r\n                if (response.ok){\r\n                        const messageCookie = document.cookie\r\n                                        .split(\"; \")\r\n                                        .find(row => row.startsWith(\"message=\"))\r\n                                        .split(\"=\")[1];\r\n\r\n                        return messageCookie;\r\n                }\r\n                else {\r\n                    return null;\r\n                }\r\n            }\r\n\r\n            async function getName(){\r\n                var message = await getCookie();\r\n                alert(message);\r\n            }\r\n\r\n            async function testCors(){\r\n                const response = await fetch(\"@Config[\"endpoint\"]/test-cors\", {\r\n                    method : \"GET\",\r\n                    headers : { \r\n                    \"Content-Type\": \"application/json\"\r\n                    }\r\n                });\r\n                \r\n                const result = await response.json();\r\n                alert(result.message);\r\n            }\r\n\r\n            const btn = document.getElementById(\"fetchName\");\r\n            btn.addEventListener(\"click\", async () => {\r\n                await getName();\r\n            });\r\n\r\n            const btn2 = document.getElementById(\"test\");\r\n            btn2.addEventListener(\"click\", async () => {\r\n                await testCors();\r\n            });\r\n\r\n        </script>\r\n    </body>\r\n</html>"
  },
  {
    "path": "projects/request/cookies-3/frontend/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRazorPages();\r\n\r\nWebApplication app = builder.Build();\r\napp.Urls.Add(\"https://localhost:5002\");\r\n\r\napp.MapRazorPages();\r\napp.Run();"
  },
  {
    "path": "projects/request/cookies-3/frontend/appsettings.json",
    "content": "{\r\n    \"endpoint\" : \"https://localhost:5001\"\r\n}"
  },
  {
    "path": "projects/request/cookies-3/frontend/frontend.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/request/form-upload-file/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.MapGet(\"\", async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n\r\n    var body = $@\"\r\n                <html><body>\r\n                <h1>Upload File</h1>\r\n                <form action=\"\"Upload\"\" method=\"\"post\"\" enctype=\"\"multipart/form-data\"\">\r\n                        <input type=\"\"file\"\" name=\"\"file\"\" />\r\n                        <input type=\"\"submit\"\" value=\"\"Upload\"\" />\r\n                </form>\r\n                </body></html>\r\n                \";\r\n\r\n    await context.Response.WriteAsync(body);\r\n});\r\n\r\napp.MapPost(\"Upload\", async context =>\r\n{\r\n    if (context.Request.HasFormContentType)\r\n    {\r\n        var form = await context.Request.ReadFormAsync();\r\n\r\n        foreach (var f in form.Files)\r\n        {\r\n            using (var body = f.OpenReadStream())\r\n            {\r\n                var fileName = Path.Combine(app.Environment.ContentRootPath, f.FileName);\r\n                File.WriteAllBytes(fileName, ReadFully(body));\r\n                await context.Response.WriteAsync($\"Uploaded file written to {fileName}\");\r\n            }\r\n        }\r\n    }\r\n    await context.Response.WriteAsync(\"\");\r\n});\r\n\r\napp.Run();\r\n\r\nstatic byte[] ReadFully(Stream input)\r\n{\r\n    byte[] buffer = new byte[16 * 1024];\r\n    using var ms = new MemoryStream();\r\n    int read;\r\n    while ((read = input.Read(buffer, 0, buffer.Length)) > 0)\r\n    {\r\n        ms.Write(buffer, 0, read);\r\n    }\r\n    return ms.ToArray();\r\n}"
  },
  {
    "path": "projects/request/form-upload-file/form-upload-file.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/request/form-url-encoded-content/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    var dicts = new Dictionary<string, string>()\r\n    {\r\n        [\"id\"] = \"10\",\r\n        [\"name\"] = \"dody gunawinata\",\r\n        [\"date\"] = \"2020/05/30\",\r\n        [\"date2\"] = \"2020-05-30\",\r\n        [\"guid\"] = System.Guid.NewGuid().ToString(),\r\n        [\"artist\"] = \"Simon & Garfunkel\",\r\n        [\"formula\"] = \"10 = 10 * 1\"\r\n    };\r\n\r\n    using var queryString = new FormUrlEncodedContent(dicts);\r\n    \r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await context.Response.WriteAsync($@\"<html>\r\n    <head>\r\n        <link rel=\"\"stylesheet\"\" href=\"\"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.5/css/bulma.css\"\" />\r\n    </head>\r\n    <body class=\"\"content\"\">\r\n    <div class=\"\"container\"\">\r\n    <h1>Using FormUrlEncodedContent to get URL encoded string</h1>\r\n    <strong>Input</strong>\r\n    \");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach(var k in dicts)\r\n    {\r\n        await context.Response.WriteAsync($\"<li>{k.Key} = {k.Value}</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(\"<strong>Output</strong><br/>\");\r\n    await context.Response.WriteAsync(await queryString.ReadAsStringAsync());\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(@\"</div></body></html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/request/form-url-encoded-content/README.MD",
    "content": "# Using FormUrlEncodedContent to generate query string\r\n\r\nThis sample demonstrates the usage of `System.Net.Http.FormUrlEncodedContent` class, a container for name/value tuples encoded using application/x-www-form-urlencoded MIME type, to generate  query string.\r\n"
  },
  {
    "path": "projects/request/form-url-encoded-content/form-url-encoded-content.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/request/form-values/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.MapGet(\"\", async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n\r\n    var body = $@\"\r\n<html><body>\r\n<h1>Upload File</h1>\r\n<form action=\"\"Upload\"\" method=\"\"post\"\" enctype=\"\"multipart/form-data\"\">\r\n        <input type=\"\"text\"\" name=\"\"name\"\" placeholder=\"\"Name\"\" /><br/><br/>\r\n        <input type=\"\"password\"\" name=\"\"password\"\" placeholder=\"\"Password\"\" /><br/><br/>\r\n        <textarea name=\"\"description\"\" placeholder=\"\"Description\"\"></textarea><br/><br/>\r\n        <select name=\"\"gender\"\">\r\n            <option value=\"\"M\"\">Male</option>\r\n            <option value=\"\"F\"\">Female</option>\r\n        </select><br/><br/>\r\n        <select name=\"\"hobbies\"\" multiple=\"\"multiple\"\">\r\n            <option>Writing Novel</option>\r\n            <option>Watching Old Movies</option>\r\n            <option>Swimming</option>\r\n        </select><br/><br/>\r\n        <input type=\"\"checkbox\"\" name=\"\"married\"\" value=\"\"Yes\"\"> Married? <br/><br/>\r\n        <input type=\"\"checkbox\"\" name=\"\"adventurous\"\" value=\"\"Yes\"\"> Adventurous? <br/><br/>\r\n        <input type=\"\"hidden\"\" name=\"\"secretHiddenValue\"\" value=\"\"We are secretive\"\" />\r\n        <input type=\"\"submit\"\" value=\"\"Upload\"\" />\r\n</form>\r\n</body></html>\r\n\";\r\n\r\n    await context.Response.WriteAsync(body);\r\n});\r\n\r\napp.MapPost(\"Upload\", async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n\r\n    if (context.Request.HasFormContentType)\r\n    {\r\n        var form = await context.Request.ReadFormAsync();\r\n\r\n        foreach (var v in form.Keys)\r\n        {\r\n            await context.Response.WriteAsync($\"{v} = {form[v]} <br/>\");\r\n        }\r\n\r\n    }\r\n    await context.Response.WriteAsync(\"\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/request/form-values/form-values.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/request/query-string-1/Program.cs",
    "content": "using Microsoft.Extensions.Primitives;\r\nvar app = WebApplication.Create();\r\n//These are the three default services available at Configure\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n\r\n    StringValues queryString = context.Request.Query[\"message\"];\r\n\r\n    await context.Response.WriteAsync(\"<html><body>\");\r\n    await context.Response.WriteAsync(\"<h1>Query String with a single value</h1>\");\r\n    await context.Response.WriteAsync(@\"<a href=\"\"?message=hello world\"\">click this link to add query string</a><br/><br/>\");\r\n    await context.Response.WriteAsync($\"'Message' query string: {queryString}\");\r\n    await context.Response.WriteAsync(\"</body></html>\");\r\n});\r\napp.Run();"
  },
  {
    "path": "projects/request/query-string-1/query-string-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request/query-string-2/Program.cs",
    "content": "using Microsoft.Extensions.Primitives;\r\n\r\nvar app = WebApplication.Create();\r\n\r\n//These are the three default services available at Configure\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n\r\n    StringValues queryString = context.Request.Query[\"message\"];\r\n\r\n    await context.Response.WriteAsync(\"<html><body>\");\r\n    await context.Response.WriteAsync(\"<h1>Query String with multiple values</h1>\");\r\n    await context.Response.WriteAsync(@\"<a href=\"\"?message=hello&message=world&message=again\"\">click this link to add query string</a><br/><br/>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (string v in queryString)\r\n    {\r\n        await context.Response.WriteAsync($\"<li>{v}</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(\"</body></html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/request/query-string-2/query-string-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request/query-string-3/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n\r\n    await context.Response.WriteAsync(\"<html><body>\");\r\n    await context.Response.WriteAsync(\"<h1>All query string</h1>\");\r\n    await context.Response.WriteAsync(@\"<a href=\"\"?message=hello&message=world&message=again&isTrue=1&morning=good\"\">click this link to add query string</a><br/><br/>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var v in context.Request.Query)\r\n    {\r\n        string str = v.Value; //implicit conversion from StringValues to String\r\n        await context.Response.WriteAsync($\"<li>{v.Key} - {str}</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(\"</body></html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/request/query-string-3/query-string-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request/query-string-create/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    var dicts = new Dictionary<string, string>()\r\n    {\r\n        [\"id\"] = \"10\",\r\n        [\"name\"] = \"dody gunawinata\",\r\n        [\"date\"] = \"2020/05/30\",\r\n        [\"date2\"] = \"2020-05-30\",\r\n        [\"guid\"] = System.Guid.NewGuid().ToString(),\r\n        [\"artist\"] = \"Simon & Garfunkel\",\r\n        [\"formula\"] = \"10 = 10 * 1\"\r\n    };\r\n\r\n    var queryString = QueryString.Create(dicts);\r\n    \r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await context.Response.WriteAsync($@\"<html>\r\n    <head>\r\n        <link rel=\"\"stylesheet\"\" href=\"\"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.5/css/bulma.css\"\" />\r\n    </head>\r\n    <body class=\"\"content\"\">\r\n    <div class=\"\"container\"\">\r\n    <h1>Using QueryString.Create to get URL encoded query string</h1>\r\n    <strong>Input</strong>\r\n    \");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach(var k in dicts)\r\n    {\r\n        await context.Response.WriteAsync($\"<li>{k.Key} = {k.Value}</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(\"<strong>Output</strong><br/>\");\r\n    await context.Response.WriteAsync(queryString.Value);\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(@\"</div></body></html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/request/query-string-create/README.MD",
    "content": "# Using QueryString.Create to generate query string\r\n\r\nThis sample demonstrates the usage of `Microsoft.AspNetCore.Http.QueryString.Create` method to generate URL encoded query string\r\n"
  },
  {
    "path": "projects/request/query-string-create/query-string-create.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/request/request-headers/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    await context.Response.WriteAsync(\"<h1>Request Headers</h1>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var h in context.Request.Headers)\r\n    {\r\n        await context.Response.WriteAsync($\"<li>{h.Key} : {h.Value}</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/request/request-headers/request-headers.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request/request-headers-names/Program.cs",
    "content": "using Microsoft.Net.Http.Headers;\r\nusing System.Reflection;\r\n\r\nList<FieldInfo> GetConstants(Type type)\r\n{\r\n    FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);\r\n\r\n    return fieldInfos.ToList();\r\n}\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(HeaderNames.ContentType, \"text/html\");\r\n\r\n    await context.Response.WriteAsync(\"<html><body>\");\r\n    await context.Response.WriteAsync(\"<h1>Request Headers from Microsoft.Net.Http.Headers.HeaderNames</h1>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var h in GetConstants(typeof(HeaderNames)))\r\n    {\r\n        await context.Response.WriteAsync($\"<li>{h.Name} = {h.GetValue(h)}</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n    await context.Response.WriteAsync(\"</body></html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/request/request-headers-names/README.MD",
    "content": "# Microsoft.Net.Http.Headers.HeaderNames\r\n\r\nThis sample shows all the common HTTP header names contained in `HeaderNames` class. It is super convenient to use `HeaderNames.ContentType` instead of typing `Content-Type`."
  },
  {
    "path": "projects/request/request-headers-names/request-headers-names.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request/request-headers-typed/Program.cs",
    "content": "var app = WebApplication.Create();\r\n\r\napp.Run(context =>\r\n{\r\n    var typedHeaders = context.Request.GetTypedHeaders();\r\n\r\n    return context.Response.WriteAsync($@\"\r\nThere are more common HTTP headers properties available in HttpContext.Request.GetTypedHeaders()              \r\nAccept: {typedHeaders.Accept[0]}\r\nAccept Language : {typedHeaders.AcceptLanguage.FirstOrDefault()?.Value}                \r\n    \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/request/request-headers-typed/request-headers-typed.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request/request-verb/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.Run(context => context.Response.WriteAsync($\"Request {context.Request.Method}\"));\r\napp.Run();\r\n"
  },
  {
    "path": "projects/request/request-verb/request-verb.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/build.bat",
    "content": "dotnet build request-timeout\r\ndotnet build request-timeout-2\r\ndotnet build request-timeout-3\r\ndotnet build request-timeout-4\r\ndotnet build request-timeout-5\r\ndotnet build request-timeout-6"
  },
  {
    "path": "projects/request-timeouts-middleware/build.sh",
    "content": "#!/bin/bash\ndotnet build request-timeout\ndotnet build request-timeout-2\ndotnet build request-timeout-3\ndotnet build request-timeout-4\ndotnet build request-timeout-5\ndotnet build request-timeout-6\n"
  },
  {
    "path": "projects/request-timeouts-middleware/readme.md",
    "content": "# Request Timeout\r\n\r\n  * [Request Timeout](request-timeout)\r\n\r\n    This sample demonstrates how to configure a request timeout in Minimal API.\r\n\r\n  * [Request Timeout Policy](request-timeout-2)\r\n\r\n    Trigger exception on a timeout using `HttpContext.RequestAborted.ThrowIfCancellationRequested()` on a timeout that was specified using a named policy in Minimal API.\r\n\r\n  * [Request Timeout Policy](request-timeout-3)\r\n\r\n    Trigger exception on a timeout using `HttpContext.RequestAborted.ThrowIfCancellationRequested()` on a default timeout policy in Minimal API.\r\n\r\n  * [Request Timeout](request-timeout-4)\r\n\r\n    Use `RequestTimeout` attribute in an MVC controller to specify when timeout is trigerred. \r\n\r\n  * [Request Timeout](request-timeout-5)\r\n\r\n    Use `RequestTimeout` attribute in an MVC controller to use a named policy. \r\n    \r\n  * [Request Timeout](request-timeout-6)\r\n\r\n    Use default timeout policy in an MVC controller. \r\n\r\n    dotnet8\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRequestTimeouts();\r\n\r\nvar app = builder.Build();\r\napp.UseRequestTimeouts();\r\n\r\napp.MapGet(\"/\", async (HttpContext context) => {\r\n    await Task.Delay(TimeSpan.FromSeconds(2));\r\n\r\n    if (context.RequestAborted.IsCancellationRequested)\r\n        return Results.Content(\"timeout\", \"text/plain\");            \r\n\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n    <body>\r\n        hello world\r\n    </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n}).WithRequestTimeout(TimeSpan.FromSeconds(1));\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout/README.md",
    "content": "# Enable timeout\r\n\r\nUse `AddRequestTimeouts` to enable timeout functionality in your endpoints. Check `HttpContext.RequestAborted.IsCancellationRequested` to see if the request has timed out. "
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout/request-timeout.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    \r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-2/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRequestTimeouts(options =>\r\n{\r\n    options.AddPolicy(\"quick\", new Microsoft.AspNetCore.Http.Timeouts.RequestTimeoutPolicy\r\n    {\r\n        Timeout = TimeSpan.FromSeconds(1),\r\n        TimeoutStatusCode = 200,\r\n        WriteTimeoutResponse = async (HttpContext context) => \r\n        {\r\n            context.Response.ContentType = \"text/plain\";\r\n            await context.Response.WriteAsync(\"timeout is triggered\");\r\n        }\r\n    });\r\n});\r\n\r\nvar app = builder.Build();\r\napp.UseRequestTimeouts();\r\n\r\napp.MapGet(\"/\", async (HttpContext context) => {\r\n    await Task.Delay(TimeSpan.FromSeconds(2));\r\n\r\n    context.RequestAborted.ThrowIfCancellationRequested();\r\n\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n    <body>\r\n        hello world\r\n    </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n}).WithRequestTimeout(\"quick\");\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-2/README.md",
    "content": "# Named timeout policy\r\n\r\nTrigger exception on a timeout using `HttpContext.RequestAborted.ThrowIfCancellationRequested()` on a timeout that was specified using a named policy.\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-2/request-timeout-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    \r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-3/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddRequestTimeouts(options =>\r\n{\r\n    options.DefaultPolicy = new Microsoft.AspNetCore.Http.Timeouts.RequestTimeoutPolicy\r\n    {\r\n        Timeout = TimeSpan.FromSeconds(1),\r\n        TimeoutStatusCode = 200,\r\n        WriteTimeoutResponse = async (HttpContext context) => \r\n        {\r\n            context.Response.ContentType = \"text/plain\";\r\n            await context.Response.WriteAsync(\"timeout is triggered\");\r\n        }\r\n    };\r\n});\r\n\r\nvar app = builder.Build();\r\napp.UseRequestTimeouts();\r\n\r\napp.MapGet(\"/\", async (HttpContext context) => {\r\n    await Task.Delay(TimeSpan.FromSeconds(2));\r\n\r\n    context.RequestAborted.ThrowIfCancellationRequested();\r\n\r\n    return Results.Content(\"\"\"\r\n    <html>\r\n    <body>\r\n        hello world\r\n    </body>\r\n    </html>\r\n    \"\"\", \"text/html\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-3/README.md",
    "content": "# Default timeout policy\r\n\r\nTrigger exception on a timeout using `HttpContext.RequestAborted.ThrowIfCancellationRequested()` on a default timeout policy."
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-3/request-timeout-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    \r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-3/request-timeout-3.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"request-timeout-3\", \"request-timeout-3.csproj\", \"{3A11F546-ED08-406A-937F-7F936C3576C4}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{3A11F546-ED08-406A-937F-7F936C3576C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{3A11F546-ED08-406A-937F-7F936C3576C4}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{3A11F546-ED08-406A-937F-7F936C3576C4}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{3A11F546-ED08-406A-937F-7F936C3576C4}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {B450A42C-0D5C-470F-9C2D-63D98D0102CD}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-4/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Timeouts;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllers();\r\nbuilder.Services.AddRequestTimeouts();\r\n\r\nvar app = builder.Build();\r\napp.UseRequestTimeouts();\r\napp.MapControllers();\r\n\r\napp.Run();\r\n\r\npublic class HomeController : ControllerBase\r\n{\r\n    [HttpGet(\"/\")]\r\n    [RequestTimeout(milliseconds: 1)]\r\n    public async Task<IActionResult> Index()\r\n    {\r\n        await Task.Delay(100);\r\n        HttpContext.RequestAborted.ThrowIfCancellationRequested();\r\n        return Ok(\"Hello World!\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-4/README.md",
    "content": "# Use RequestTimeout attribute in MVC\r\n\r\nUse `RequestTimeout` attribute to specify how many milliseconds a time out will be trigerred. \r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-4/request-timeout-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    \r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-4/request-timeout-4.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"request-timeout-4\", \"request-timeout-4.csproj\", \"{82B2E0B5-E009-4F7C-AEDA-AB3DD2A50101}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{82B2E0B5-E009-4F7C-AEDA-AB3DD2A50101}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{82B2E0B5-E009-4F7C-AEDA-AB3DD2A50101}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{82B2E0B5-E009-4F7C-AEDA-AB3DD2A50101}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{82B2E0B5-E009-4F7C-AEDA-AB3DD2A50101}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {7FD5CF14-91DD-4569-AD32-DE58589AC66C}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-5/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Timeouts;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllers();\r\nbuilder.Services.AddRequestTimeouts(options =>\r\n{\r\n    options.AddPolicy(\"quick\",new Microsoft.AspNetCore.Http.Timeouts.RequestTimeoutPolicy\r\n    {\r\n        Timeout = TimeSpan.FromMilliseconds(1),\r\n        TimeoutStatusCode = 200,\r\n        WriteTimeoutResponse = async (HttpContext context) => \r\n        {\r\n            context.Response.ContentType = \"text/plain\";\r\n            await context.Response.WriteAsync(\"timeout is triggered\");\r\n        }\r\n    });\r\n});\r\n\r\nvar app = builder.Build();\r\napp.UseRequestTimeouts();\r\napp.MapControllers();\r\n\r\napp.Run();\r\n\r\npublic class HomeController : ControllerBase\r\n{\r\n    [HttpGet(\"/\")]\r\n    [RequestTimeout(\"quick\")]\r\n    public async Task<IActionResult> Index()\r\n    {\r\n        await Task.Delay(100);\r\n        HttpContext.RequestAborted.ThrowIfCancellationRequested();\r\n        return Ok(\"Hello World!\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-5/README.md",
    "content": "# Use RequestTimeout attribute in MVC\r\n\r\nUse `RequestTimeout` attribute to specify which timeout policy to use."
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-5/request-timeout-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    \r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-5/request-timeout-5.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"request-timeout-5\", \"request-timeout-5.csproj\", \"{79DB68DC-DFD0-4377-8092-51CB6132F18C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{79DB68DC-DFD0-4377-8092-51CB6132F18C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{79DB68DC-DFD0-4377-8092-51CB6132F18C}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{79DB68DC-DFD0-4377-8092-51CB6132F18C}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{79DB68DC-DFD0-4377-8092-51CB6132F18C}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {6A9E03E9-E1BE-4884-A2D2-AFDF8A2F4AA5}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-6/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Timeouts;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllers();\r\nbuilder.Services.AddRequestTimeouts(options =>\r\n{\r\n    options.DefaultPolicy = new Microsoft.AspNetCore.Http.Timeouts.RequestTimeoutPolicy\r\n    {\r\n        Timeout = TimeSpan.FromMilliseconds(1),\r\n        TimeoutStatusCode = 200,\r\n        WriteTimeoutResponse = async (HttpContext context) => \r\n        {\r\n            context.Response.ContentType = \"text/plain\";\r\n            await context.Response.WriteAsync(\"timeout is triggered\");\r\n        }\r\n    };\r\n});\r\n\r\nvar app = builder.Build();\r\napp.UseRequestTimeouts();\r\napp.MapControllers();\r\n\r\napp.Run();\r\n\r\npublic class HomeController : ControllerBase\r\n{\r\n    [HttpGet(\"/\")]\r\n    public async Task<IActionResult> Index()\r\n    {\r\n        await Task.Delay(100);\r\n        HttpContext.RequestAborted.ThrowIfCancellationRequested();\r\n        return Ok(\"Hello World!\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-6/README.md",
    "content": "# Rely on default timeout policy on MVC\r\n\r\nThis sample shows on how to use default timeout policy on MVC. There is no need to specify `RequestTimeout` attribute."
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-6/request-timeout-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n    \r\n    \r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/request-timeouts-middleware/request-timeout-6/request-timeout-6.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"request-timeout-6\", \"request-timeout-6.csproj\", \"{9197264F-FB0C-4498-BB16-8EAC6B5D82BA}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{9197264F-FB0C-4498-BB16-8EAC6B5D82BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{9197264F-FB0C-4498-BB16-8EAC6B5D82BA}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{9197264F-FB0C-4498-BB16-8EAC6B5D82BA}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{9197264F-FB0C-4498-BB16-8EAC6B5D82BA}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {C27BA2BF-56AA-42AF-B03E-59ECFB01A627}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/response/README.md",
    "content": "# Response (3)\r\n\r\n* [Adding HTTP Response Header](/projects/response/response-header)\r\n\r\n  Demonstrate on how to add a response header and where is allowed place to do it.\r\n\r\n* [Default Gzip Output Compression](/projects/response/compression-response) \r\n   \r\n  Compress everything using the default Gzip compression.\r\n\r\n  _Everything_ means the following MIME output  \r\n\r\n  * text/plain\r\n  * text/css\r\n  * application/javascript\r\n  * text/html\r\n  * application/xml\r\n  * text/xml\r\n  * application/json\r\n  * text/json \r\n\r\n* [Trailing headers](/projects/response/trailing-headers)\r\n\r\n  This example shows how to issue trailing HTTP headers. Normal HTTP headers must be issued before body of the HTTP Response starts being written. Trailing headers allows you to issue headers after the HTTP body has been written. \r\n\r\n  dotnet8"
  },
  {
    "path": "projects/response/build.bat",
    "content": "dotnet build compression-response\r\ndotnet build response-header\r\ndotnet build trailing-headers"
  },
  {
    "path": "projects/response/build.sh",
    "content": "#!/bin/bash\ndotnet build compression-response\ndotnet build response-header\ndotnet build trailing-headers\n"
  },
  {
    "path": "projects/response/compression-response/Program.cs",
    "content": "using Microsoft.Net.Http.Headers;\r\nusing Microsoft.Extensions.Primitives;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddResponseCompression();\r\n\r\nvar app = builder.Build();\r\napp.UseResponseCompression();\r\n\r\napp.Run(async context =>\r\n{\r\n    var accept = context.Request.Headers[HeaderNames.AcceptEncoding];\r\n    if (!StringValues.IsNullOrEmpty(accept))\r\n    {\r\n        context.Response.Headers.Append(HeaderNames.Vary, HeaderNames.AcceptEncoding);\r\n    }\r\n    \r\n    context.Response.ContentType = \"text/plain\";\r\n    await context.Response.WriteAsync(@\"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/response/compression-response/compression-response.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/response/response-header/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    await context.Response.WriteAsync(\"<b>Hello world</b>\");\r\n    try\r\n    {\r\n        context.Response.Headers.Append(\"my-header\", \"awesome\");\r\n    }\r\n    catch (Exception ex)\r\n    {\r\n        await context.Response.WriteAsync($\"<br/><br/>You cannot modify header collections after the body is sent already. Exception: {ex.Message}\");\r\n    }\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/response/response-header/response-header.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/response/trailing-headers/Program.cs",
    "content": "using System.Diagnostics;\r\nusing Microsoft.AspNetCore.Server.Kestrel.Core;\r\nusing System.Net;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddHttpClient();\r\nbuilder.WebHost.ConfigureKestrel(k =>\r\n    k.Listen(IPAddress.Any, 5000, listenOptions =>\r\n    {\r\n        listenOptions.Protocols = HttpProtocols.Http1AndHttp2;\r\n        listenOptions.UseHttps();\r\n    })\r\n);\r\n\r\nvar app = builder.Build();\r\n\r\n//We need this switch because we are connecting to an unsecure server. If the server runs on SSL, there's no need for this switch.\r\napp.Run(async context =>\r\n{\r\n    bool supportTrailers = context.Response.SupportsTrailers();\r\n\r\n    Stopwatch watch = null;\r\n\r\n    if (supportTrailers)\r\n    {\r\n        context.Response.DeclareTrailer(\"Server-Timing\");\r\n        watch = new Stopwatch();\r\n    }\r\n\r\n    watch?.Start();\r\n\r\n    var httpFactory = context.RequestServices.GetService<IHttpClientFactory>();\r\n    var httpClient = httpFactory.CreateClient();\r\n\r\n    using var response = await httpClient.GetStreamAsync(\"http://histo.io/\");\r\n\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await response.CopyToAsync(context.Response.Body);\r\n\r\n    watch?.Stop();\r\n    if (supportTrailers)\r\n    {\r\n        Console.WriteLine(\"Server-Timing \" + watch.ElapsedMilliseconds + \" ms.\");\r\n                //You won't be able to see this in any browser dev tools\r\n        context.Response.AppendTrailer(\"Server-Timing\", $\"practical-aspnet-core;dur={watch.ElapsedMilliseconds}.0\");\r\n    }\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/response/trailing-headers/README.MD",
    "content": "# Trailing Headers\r\n\r\nThis example shows how to issue trailing HTTP headers. Normal HTTP headers must be issued before body of the HTTP Response starts being written. Trailing headers allows you to issue headers after the HTTP body has been written. \r\n\r\nOpen the sample at https://localhost:5000 and open your browser dev tools. You will be able to see the trailer header being issued but not its content."
  },
  {
    "path": "projects/response/trailing-headers/trailing-headers.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/restore.bat",
    "content": "@REM dotnet restore 5-0\\hello-world\r\n\r\ndotnet restore anonymous-id\r\ndotnet restore application-environment\r\ndotnet restore basic\\hello-world\r\ndotnet restore basic\\hello-world-2\r\ndotnet restore basic\\i-host-environment\r\ndotnet restore basic\\i-webhost-environment\r\ndotnet restore basic\\iconfiguration\r\ndotnet restore bedrock\\echo\\client\r\ndotnet restore bedrock\\echo\\server\r\ndotnet restore blazor\\Component\r\ndotnet restore blazor\\ComponentEight\r\ndotnet restore blazor\\ComponentEleven\r\ndotnet restore blazor\\ComponentFifteen\r\ndotnet restore blazor\\ComponentFive\r\ndotnet restore blazor\\ComponentFour\r\ndotnet restore blazor\\ComponentFourteen\r\ndotnet restore blazor\\ComponentNine\r\ndotnet restore blazor\\ComponentSeven\r\ndotnet restore blazor\\ComponentSix\r\ndotnet restore blazor\\ComponentTen\r\ndotnet restore blazor\\ComponentThirteen\r\ndotnet restore blazor\\ComponentThree\r\ndotnet restore blazor\\ComponentTwelve\r\ndotnet restore blazor\\ComponentTwo\r\ndotnet restore blazor\\DataBinding\r\ndotnet restore blazor\\DataBindingTwo\r\ndotnet restore blazor\\HelloWorld\r\ndotnet restore blazor-ss\\ChatR\r\ndotnet restore blazor-ss\\Chatter\r\ndotnet restore blazor-ss\\DependencyInjection\r\ndotnet restore blazor-ss\\HelloWorld\r\ndotnet restore blazor-ss\\JsIntegration\r\ndotnet restore blazor-ss\\Layout\r\ndotnet restore blazor-ss\\MultiApps\\App1\r\ndotnet restore blazor-ss\\MultiApps\\App2\r\ndotnet restore blazor-ss\\MultiApps\\AppHost\r\ndotnet restore blazor-ss\\RssReader\r\ndotnet restore blazor-ss\\RssReader-2\r\ndotnet restore blazor-ss\\StartingVariation\r\ndotnet restore caching\\caching-1\r\ndotnet restore caching\\caching-2\r\ndotnet restore caching\\caching-3\r\ndotnet restore caching\\caching-4\r\ndotnet restore caching\\redis-cache\r\ndotnet restore configurations\\configuration-1\r\ndotnet restore configurations\\configuration-environment-variables\r\ndotnet restore configurations\\configuration-ini\r\ndotnet restore configurations\\configuration-ini-options\r\ndotnet restore configurations\\configuration-options\r\ndotnet restore configurations\\configuration-xml\r\ndotnet restore configurations\\configuration-xml-options\r\ndotnet restore connection-info\r\ndotnet restore dependency-injection\\dependency-injection-1\r\ndotnet restore dependency-injection\\dependency-injection-3\r\ndotnet restore device-detection\r\ndotnet restore diagnostics\\diagnostics-1\r\ndotnet restore diagnostics\\diagnostics-2\r\ndotnet restore diagnostics\\diagnostics-3\r\ndotnet restore diagnostics\\diagnostics-4\r\ndotnet restore diagnostics\\diagnostics-5\r\ndotnet restore diagnostics\\diagnostics-6\r\ndotnet restore endpoint-routing\\endpoint-routing\r\ndotnet restore endpoint-routing\\endpoint-routing-2\r\ndotnet restore endpoint-routing\\endpoint-routing-3\r\ndotnet restore endpoint-routing\\endpoint-routing-4\r\ndotnet restore endpoint-routing\\endpoint-routing-5\r\ndotnet restore endpoint-routing\\endpoint-routing-6\r\ndotnet restore endpoint-routing\\new-routing\r\ndotnet restore endpoint-routing\\new-routing-10\r\ndotnet restore endpoint-routing\\new-routing-11\r\ndotnet restore endpoint-routing\\new-routing-12\r\ndotnet restore endpoint-routing\\new-routing-13\r\ndotnet restore endpoint-routing\\new-routing-14\r\ndotnet restore endpoint-routing\\new-routing-15\r\ndotnet restore endpoint-routing\\new-routing-16\r\ndotnet restore endpoint-routing\\new-routing-17\r\ndotnet restore endpoint-routing\\new-routing-18\r\ndotnet restore endpoint-routing\\new-routing-19\r\ndotnet restore endpoint-routing\\new-routing-2\r\ndotnet restore endpoint-routing\\new-routing-20\r\ndotnet restore endpoint-routing\\new-routing-21\r\ndotnet restore endpoint-routing\\new-routing-22\r\ndotnet restore endpoint-routing\\new-routing-23\r\ndotnet restore endpoint-routing\\new-routing-24\r\ndotnet restore endpoint-routing\\new-routing-25\r\ndotnet restore endpoint-routing\\new-routing-26\r\ndotnet restore endpoint-routing\\new-routing-27\r\ndotnet restore endpoint-routing\\new-routing-28\r\ndotnet restore endpoint-routing\\new-routing-29\r\ndotnet restore endpoint-routing\\new-routing-3\r\ndotnet restore endpoint-routing\\new-routing-30\r\ndotnet restore endpoint-routing\\new-routing-4\r\ndotnet restore endpoint-routing\\new-routing-5\r\ndotnet restore endpoint-routing\\new-routing-6\r\ndotnet restore endpoint-routing\\new-routing-7\r\ndotnet restore endpoint-routing\\new-routing-8\r\ndotnet restore endpoint-routing\\new-routing-9\r\ndotnet restore endpoint-routing\\parameter-transformer\r\ndotnet restore features\\features-connection\r\ndotnet restore features\\features-http-body-response\r\ndotnet restore features\\features-max-request-body-size\r\ndotnet restore features\\features-request-culture\r\ndotnet restore features\\features-server-addresses\r\ndotnet restore features\\features-server-addresses-2\r\ndotnet restore features\\features-server-custom\r\ndotnet restore features\\features-server-custom-override\r\ndotnet restore features\\features-server-request\r\ndotnet restore features\\features-session\r\ndotnet restore features\\features-session-redis-2\r\ndotnet restore file-provider\\file-provider-custom\r\ndotnet restore file-provider\\file-provider-physical\r\ndotnet restore file-provider\\serve-static-files-1\r\ndotnet restore file-provider\\serve-static-files-2\r\ndotnet restore file-provider\\serve-static-files-3\r\ndotnet restore file-provider\\serve-static-files-4\r\ndotnet restore file-provider\\serve-static-files-5\r\ndotnet restore file-provider\\serve-static-files-6\r\ndotnet restore generic-host\\generic-host-1\r\ndotnet restore generic-host\\generic-host-2\r\ndotnet restore generic-host\\generic-host-3\r\ndotnet restore generic-host\\generic-host-4\r\ndotnet restore generic-host\\generic-host-5\r\ndotnet restore generic-host\\generic-host-configure-app\r\ndotnet restore generic-host\\generic-host-configure-host\r\ndotnet restore generic-host\\generic-host-configure-logging\r\ndotnet restore generic-host\\generic-host-environment\r\ndotnet restore generic-host\\generic-host-ihostapplicationlifetime\r\ndotnet restore grpc\\grpc\\client\r\ndotnet restore grpc\\grpc\\server\r\ndotnet restore grpc\\grpc-10\\client\r\ndotnet restore grpc\\grpc-10\\server\r\ndotnet restore grpc\\grpc-11\\client\r\ndotnet restore grpc\\grpc-11\\server\r\ndotnet restore grpc\\grpc-2\\client\r\ndotnet restore grpc\\grpc-2\\server\r\ndotnet restore grpc\\grpc-3\\client\r\ndotnet restore grpc\\grpc-3\\server\r\ndotnet restore grpc\\grpc-4\\client\r\ndotnet restore grpc\\grpc-4\\server\r\ndotnet restore grpc\\grpc-5\\client\r\ndotnet restore grpc\\grpc-5\\server\r\ndotnet restore grpc\\grpc-6\\client\r\ndotnet restore grpc\\grpc-6\\server\r\ndotnet restore grpc\\grpc-7\\client\r\ndotnet restore grpc\\grpc-7\\server\r\ndotnet restore grpc\\grpc-8\\client\r\ndotnet restore grpc\\grpc-8\\server\r\ndotnet restore grpc\\grpc-9\\client\r\ndotnet restore grpc\\grpc-9\\server\r\ndotnet restore health-check\\health-check-1\r\ndotnet restore health-check\\health-check-2\r\ndotnet restore health-check\\health-check-3\r\ndotnet restore health-check\\health-check-4\r\ndotnet restore health-check\\health-check-5\r\ndotnet restore health-check\\health-check-6\r\ndotnet restore http-status-codes\r\ndotnet restore httpclientfactory\\httpclientfactory-1\r\ndotnet restore httpclientfactory\\httpclientfactory-2\r\ndotnet restore httpclientfactory\\httpclientfactory-3\r\ndotnet restore httpclientfactory\\httpclientfactory-4\r\ndotnet restore i-application-lifetime\r\ndotnet restore ihosted-service\\ihosted-service-1\r\ndotnet restore image-sharp\r\ndotnet restore json\\json\r\ndotnet restore json\\json-2\r\ndotnet restore json\\json-3\r\ndotnet restore json\\json-4\r\ndotnet restore json\\json-5\r\ndotnet restore json\\json-6\r\ndotnet restore json\\json-7\r\ndotnet restore json\\json-8\r\ndotnet restore json\\json-9\r\ndotnet restore localization\\localization-1\r\ndotnet restore localization\\localization-2\r\ndotnet restore localization\\localization-3\r\ndotnet restore localization\\localization-4\r\ndotnet restore localization\\localization-5\r\ndotnet restore localization\\localization-6\r\ndotnet restore logging\\logging-1\r\ndotnet restore logging\\logging-2\r\ndotnet restore mailkit\\mailkit-1\r\ndotnet restore mailkit\\mailkit-2\r\ndotnet restore markdown-server\r\ndotnet restore markdown-server-middleware\r\ndotnet restore media-type-names\r\ndotnet restore media-type-names-2\r\ndotnet restore middleware\\middleware-0\r\ndotnet restore middleware\\middleware-1\r\ndotnet restore middleware\\middleware-10\r\ndotnet restore middleware\\middleware-11\r\ndotnet restore middleware\\middleware-12\r\ndotnet restore middleware\\middleware-2\r\ndotnet restore middleware\\middleware-3\r\ndotnet restore middleware\\middleware-4\r\ndotnet restore middleware\\middleware-5\r\ndotnet restore middleware\\middleware-6\r\ndotnet restore middleware\\middleware-7\r\ndotnet restore middleware\\middleware-8\r\ndotnet restore middleware\\middleware-9\r\ndotnet restore mvc\\api-problem-details\r\ndotnet restore mvc\\api-problem-details-2\r\ndotnet restore mvc\\api-versioning\r\ndotnet restore mvc\\hello-world\r\ndotnet restore mvc\\jwt\r\ndotnet restore mvc\\localization\\mvc-localization-1\r\ndotnet restore mvc\\localization\\mvc-localization-2\r\ndotnet restore mvc\\localization\\mvc-localization-3\r\ndotnet restore mvc\\localization\\mvc-localization-4\r\ndotnet restore mvc\\localization\\mvc-localization-5\r\ndotnet restore mvc\\localization\\mvc-localization-6\r\ndotnet restore mvc\\localization\\mvc-localization-7\\src\\ProjectWithResources\r\ndotnet restore mvc\\localization\\mvc-localization-7\\src\\Web\r\ndotnet restore mvc\\localization\\mvc-localization-8\r\ndotnet restore mvc\\localization\\mvc-localization-9\r\ndotnet restore mvc\\model-binding-from-query\r\ndotnet restore mvc\\model-binding-from-route\r\ndotnet restore mvc\\mvc-output-xml\r\ndotnet restore mvc\\nswag\r\ndotnet restore mvc\\nswag-2\r\ndotnet restore mvc\\output-formatter-syndication\r\ndotnet restore mvc\\razor-class-library\\razor-class-library-1\\src\\RazorClassLibrary1\r\ndotnet restore mvc\\razor-class-library\\razor-class-library-1\\src\\RazorClassLibrary2\r\ndotnet restore mvc\\razor-class-library\\razor-class-library-1\\src\\WebApplication\r\ndotnet restore mvc\\razor-class-library\\razor-class-library-with-controllers\\src\\RazorClassLibrary1\r\ndotnet restore mvc\\razor-class-library\\razor-class-library-with-controllers\\src\\WebApplication\r\ndotnet restore mvc\\razor-class-library\\razor-class-library-with-static-files\\src\\RazorClassLibraries.Mvc.Core\r\ndotnet restore mvc\\razor-class-library\\razor-class-library-with-static-files\\src\\RazorClassLibrary1\r\ndotnet restore mvc\\razor-class-library\\razor-class-library-with-static-files\\src\\RazorClassLibrary2\r\ndotnet restore mvc\\razor-class-library\\razor-class-library-with-static-files\\src\\WebApplication\r\ndotnet restore mvc\\result-filestream\r\ndotnet restore mvc\\result-physicalfile\r\ndotnet restore mvc\\routing\\routing-1\r\ndotnet restore mvc\\routing\\routing-2\r\ndotnet restore mvc\\routing\\routing-3\r\ndotnet restore mvc\\routing\\routing-4\r\ndotnet restore mvc\\routing\\routing-5\r\ndotnet restore mvc\\routing\\routing-6\r\ndotnet restore mvc\\routing\\routing-7\r\ndotnet restore mvc\\routing\\routing-8\r\ndotnet restore mvc\\routing\\routing-9\r\ndotnet restore mvc\\tag-helper\\tag-helper-1\r\ndotnet restore mvc\\tag-helper\\tag-helper-2\r\ndotnet restore mvc\\tag-helper\\tag-helper-3\r\ndotnet restore mvc\\tag-helper\\tag-helper-4\r\ndotnet restore mvc\\tag-helper\\tag-helper-5\r\ndotnet restore mvc\\tag-helper\\tag-helper-img\r\ndotnet restore mvc\\tag-helper\\tag-helper-link\r\ndotnet restore mvc\\utf8json-formatter\r\ndotnet restore mvc\\view-component\\view-component-1\r\ndotnet restore mvc\\view-component\\view-component-2\r\ndotnet restore mvc\\view-component\\view-component-3\r\ndotnet restore mvc\\view-component\\view-component-4\r\ndotnet restore newtonsoft-json\r\ndotnet restore orchard-core\\multi-tenant\\Host\r\ndotnet restore orchard-core\\routing\\ForumModule\r\ndotnet restore orchard-core\\routing\\Host\r\ndotnet restore orchard-core\\routing\\TicketModule\r\ndotnet restore orchard-core\\routing-2\\ForumModule\r\ndotnet restore orchard-core\\routing-2\\Host\r\ndotnet restore orchard-core\\routing-2\\TicketModule\r\ndotnet restore orchard-core\\static-files\\ForumModule\r\ndotnet restore orchard-core\\static-files\\Host\r\ndotnet restore password-hasher\r\ndotnet restore razor-pages\\custom-html-generator\r\ndotnet restore razor-pages\\hello-world\r\ndotnet restore razor-pages\\razor\\razor-1\r\ndotnet restore razor-pages\\razor\\razor-2\r\ndotnet restore razor-pages\\razor-pages-basic\r\ndotnet restore razor-pages\\razor-pages-mvc\r\ndotnet restore razor-pages\\routing\r\ndotnet restore razor-pages\\routing-2\r\ndotnet restore request\\anti-forgery\r\ndotnet restore request\\cookies-1\r\ndotnet restore request\\cookies-2\r\ndotnet restore request\\form-upload-file\r\ndotnet restore request\\form-values\r\ndotnet restore request\\query-string-1\r\ndotnet restore request\\query-string-2\r\ndotnet restore request\\query-string-3\r\ndotnet restore request\\request-headers\r\ndotnet restore request\\request-headers-names\r\ndotnet restore request\\request-headers-typed\r\ndotnet restore request\\request-verb\r\ndotnet restore response\\compression-response\r\ndotnet restore response\\response-buffering\r\ndotnet restore response\\response-header\r\ndotnet restore response\\trailing-headers\r\ndotnet restore rewrite\\rewrite-1\r\ndotnet restore rewrite\\rewrite-2\r\ndotnet restore rewrite\\rewrite-3\r\ndotnet restore rewrite\\rewrite-4\r\ndotnet restore rewrite\\rewrite-5\r\ndotnet restore rewrite\\rewrite-6\r\ndotnet restore security\\authentication-with-identity\\src\r\ndotnet restore signalr\\signalr-1\\Client\r\ndotnet restore signalr\\signalr-1\\Server\r\ndotnet restore sse\r\ndotnet restore startup\\env-development\r\ndotnet restore startup\\no-startup\r\ndotnet restore startup\\startup-basic\r\ndotnet restore startup\\startup-basic-multiple\r\ndotnet restore startup\\startup-basic-multiple-environment\r\ndotnet restore startup\\startup-basic-multiple-urls\r\ndotnet restore startup\\startup-capture-errors\r\ndotnet restore startup\\startup-custom-name\r\ndotnet restore startup\\startup-istartupfilter\r\ndotnet restore startup\\startup-multiple-configure-environment\r\ndotnet restore startup\\startup-multiple-configure-environment-services\r\ndotnet restore startup\\suppress-status-messages\r\ndotnet restore syndications\\syndication-1\r\ndotnet restore syndications\\syndication-2\r\ndotnet restore syndications\\syndication-3\r\ndotnet restore uri-helper\\uri-helper-build-absolute\r\ndotnet restore uri-helper\\uri-helper-from-absolute\r\ndotnet restore uri-helper\\uri-helper-get-display-url\r\ndotnet restore uri-helper\\uri-helper-get-encoded-path-and-query\r\ndotnet restore uri-helper\\uri-helper-get-encoded-url\r\ndotnet restore version\r\ndotnet restore web-sockets\\web-sockets-1\r\ndotnet restore web-sockets\\web-sockets-2\r\ndotnet restore web-sockets\\web-sockets-3\r\ndotnet restore web-sockets\\web-sockets-4\r\ndotnet restore web-sockets\\web-sockets-5\r\ndotnet restore web-utilities\\web-utilities-query-helpers\r\ndotnet restore web-utilities\\web-utilities-query-helpers-2\r\ndotnet restore web-utilities\\web-utilities-reason-phrases\r\n"
  },
  {
    "path": "projects/restore.sh",
    "content": "#!/bin/bash\n# dotnet restore 5-0/hello-world\n\ndotnet restore anonymous-id\ndotnet restore application-environment\ndotnet restore basic/hello-world\ndotnet restore basic/hello-world-2\ndotnet restore basic/i-host-environment\ndotnet restore basic/i-webhost-environment\ndotnet restore basic/iconfiguration\ndotnet restore bedrock/echo/client\ndotnet restore bedrock/echo/server\ndotnet restore blazor/Component\ndotnet restore blazor/ComponentEight\ndotnet restore blazor/ComponentEleven\ndotnet restore blazor/ComponentFifteen\ndotnet restore blazor/ComponentFive\ndotnet restore blazor/ComponentFour\ndotnet restore blazor/ComponentFourteen\ndotnet restore blazor/ComponentNine\ndotnet restore blazor/ComponentSeven\ndotnet restore blazor/ComponentSix\ndotnet restore blazor/ComponentTen\ndotnet restore blazor/ComponentThirteen\ndotnet restore blazor/ComponentThree\ndotnet restore blazor/ComponentTwelve\ndotnet restore blazor/ComponentTwo\ndotnet restore blazor/DataBinding\ndotnet restore blazor/DataBindingTwo\ndotnet restore blazor/HelloWorld\ndotnet restore blazor-ss/ChatR\ndotnet restore blazor-ss/Chatter\ndotnet restore blazor-ss/DependencyInjection\ndotnet restore blazor-ss/HelloWorld\ndotnet restore blazor-ss/JsIntegration\ndotnet restore blazor-ss/Layout\ndotnet restore blazor-ss/MultiApps/App1\ndotnet restore blazor-ss/MultiApps/App2\ndotnet restore blazor-ss/MultiApps/AppHost\ndotnet restore blazor-ss/RssReader\ndotnet restore blazor-ss/RssReader-2\ndotnet restore blazor-ss/StartingVariation\ndotnet restore caching/caching-1\ndotnet restore caching/caching-2\ndotnet restore caching/caching-3\ndotnet restore caching/caching-4\ndotnet restore caching/redis-cache\ndotnet restore configurations/configuration-1\ndotnet restore configurations/configuration-environment-variables\ndotnet restore configurations/configuration-ini\ndotnet restore configurations/configuration-ini-options\ndotnet restore configurations/configuration-options\ndotnet restore configurations/configuration-xml\ndotnet restore configurations/configuration-xml-options\ndotnet restore connection-info\ndotnet restore dependency-injection/dependency-injection-1\ndotnet restore dependency-injection/dependency-injection-3\ndotnet restore device-detection\ndotnet restore diagnostics/diagnostics-1\ndotnet restore diagnostics/diagnostics-2\ndotnet restore diagnostics/diagnostics-3\ndotnet restore diagnostics/diagnostics-4\ndotnet restore diagnostics/diagnostics-5\ndotnet restore diagnostics/diagnostics-6\ndotnet restore endpoint-routing/endpoint-routing\ndotnet restore endpoint-routing/endpoint-routing-2\ndotnet restore endpoint-routing/endpoint-routing-3\ndotnet restore endpoint-routing/endpoint-routing-4\ndotnet restore endpoint-routing/endpoint-routing-5\ndotnet restore endpoint-routing/endpoint-routing-6\ndotnet restore endpoint-routing/new-routing\ndotnet restore endpoint-routing/new-routing-10\ndotnet restore endpoint-routing/new-routing-11\ndotnet restore endpoint-routing/new-routing-12\ndotnet restore endpoint-routing/new-routing-13\ndotnet restore endpoint-routing/new-routing-14\ndotnet restore endpoint-routing/new-routing-15\ndotnet restore endpoint-routing/new-routing-16\ndotnet restore endpoint-routing/new-routing-17\ndotnet restore endpoint-routing/new-routing-18\ndotnet restore endpoint-routing/new-routing-19\ndotnet restore endpoint-routing/new-routing-2\ndotnet restore endpoint-routing/new-routing-20\ndotnet restore endpoint-routing/new-routing-21\ndotnet restore endpoint-routing/new-routing-22\ndotnet restore endpoint-routing/new-routing-23\ndotnet restore endpoint-routing/new-routing-24\ndotnet restore endpoint-routing/new-routing-25\ndotnet restore endpoint-routing/new-routing-26\ndotnet restore endpoint-routing/new-routing-27\ndotnet restore endpoint-routing/new-routing-28\ndotnet restore endpoint-routing/new-routing-29\ndotnet restore endpoint-routing/new-routing-3\ndotnet restore endpoint-routing/new-routing-30\ndotnet restore endpoint-routing/new-routing-4\ndotnet restore endpoint-routing/new-routing-5\ndotnet restore endpoint-routing/new-routing-6\ndotnet restore endpoint-routing/new-routing-7\ndotnet restore endpoint-routing/new-routing-8\ndotnet restore endpoint-routing/new-routing-9\ndotnet restore endpoint-routing/parameter-transformer\ndotnet restore features/features-connection\ndotnet restore features/features-http-body-response\ndotnet restore features/features-max-request-body-size\ndotnet restore features/features-request-culture\ndotnet restore features/features-server-addresses\ndotnet restore features/features-server-addresses-2\ndotnet restore features/features-server-custom\ndotnet restore features/features-server-custom-override\ndotnet restore features/features-server-request\ndotnet restore features/features-session\ndotnet restore features/features-session-redis-2\ndotnet restore file-provider/file-provider-custom\ndotnet restore file-provider/file-provider-physical\ndotnet restore file-provider/serve-static-files-1\ndotnet restore file-provider/serve-static-files-2\ndotnet restore file-provider/serve-static-files-3\ndotnet restore file-provider/serve-static-files-4\ndotnet restore file-provider/serve-static-files-5\ndotnet restore file-provider/serve-static-files-6\ndotnet restore generic-host/generic-host-1\ndotnet restore generic-host/generic-host-2\ndotnet restore generic-host/generic-host-3\ndotnet restore generic-host/generic-host-4\ndotnet restore generic-host/generic-host-5\ndotnet restore generic-host/generic-host-configure-app\ndotnet restore generic-host/generic-host-configure-host\ndotnet restore generic-host/generic-host-configure-logging\ndotnet restore generic-host/generic-host-environment\ndotnet restore generic-host/generic-host-ihostapplicationlifetime\ndotnet restore grpc/grpc/client\ndotnet restore grpc/grpc/server\ndotnet restore grpc/grpc-10/client\ndotnet restore grpc/grpc-10/server\ndotnet restore grpc/grpc-11/client\ndotnet restore grpc/grpc-11/server\ndotnet restore grpc/grpc-2/client\ndotnet restore grpc/grpc-2/server\ndotnet restore grpc/grpc-3/client\ndotnet restore grpc/grpc-3/server\ndotnet restore grpc/grpc-4/client\ndotnet restore grpc/grpc-4/server\ndotnet restore grpc/grpc-5/client\ndotnet restore grpc/grpc-5/server\ndotnet restore grpc/grpc-6/client\ndotnet restore grpc/grpc-6/server\ndotnet restore grpc/grpc-7/client\ndotnet restore grpc/grpc-7/server\ndotnet restore grpc/grpc-8/client\ndotnet restore grpc/grpc-8/server\ndotnet restore grpc/grpc-9/client\ndotnet restore grpc/grpc-9/server\ndotnet restore health-check/health-check-1\ndotnet restore health-check/health-check-2\ndotnet restore health-check/health-check-3\ndotnet restore health-check/health-check-4\ndotnet restore health-check/health-check-5\ndotnet restore health-check/health-check-6\ndotnet restore http-status-codes\ndotnet restore httpclientfactory/httpclientfactory-1\ndotnet restore httpclientfactory/httpclientfactory-2\ndotnet restore httpclientfactory/httpclientfactory-3\ndotnet restore httpclientfactory/httpclientfactory-4\ndotnet restore i-application-lifetime\ndotnet restore ihosted-service/ihosted-service-1\ndotnet restore image-sharp\ndotnet restore json/json\ndotnet restore json/json-2\ndotnet restore json/json-3\ndotnet restore json/json-4\ndotnet restore json/json-5\ndotnet restore json/json-6\ndotnet restore json/json-7\ndotnet restore json/json-8\ndotnet restore json/json-9\ndotnet restore localization/localization-1\ndotnet restore localization/localization-2\ndotnet restore localization/localization-3\ndotnet restore localization/localization-4\ndotnet restore localization/localization-5\ndotnet restore localization/localization-6\ndotnet restore logging/logging-1\ndotnet restore logging/logging-2\ndotnet restore mailkit/mailkit-1\ndotnet restore mailkit/mailkit-2\ndotnet restore markdown-server\ndotnet restore markdown-server-middleware\ndotnet restore media-type-names\ndotnet restore media-type-names-2\ndotnet restore middleware/middleware-0\ndotnet restore middleware/middleware-1\ndotnet restore middleware/middleware-10\ndotnet restore middleware/middleware-11\ndotnet restore middleware/middleware-12\ndotnet restore middleware/middleware-2\ndotnet restore middleware/middleware-3\ndotnet restore middleware/middleware-4\ndotnet restore middleware/middleware-5\ndotnet restore middleware/middleware-6\ndotnet restore middleware/middleware-7\ndotnet restore middleware/middleware-8\ndotnet restore middleware/middleware-9\ndotnet restore mvc/api-problem-details\ndotnet restore mvc/api-problem-details-2\ndotnet restore mvc/api-versioning\ndotnet restore mvc/hello-world\ndotnet restore mvc/jwt\ndotnet restore mvc/localization/mvc-localization-1\ndotnet restore mvc/localization/mvc-localization-2\ndotnet restore mvc/localization/mvc-localization-3\ndotnet restore mvc/localization/mvc-localization-4\ndotnet restore mvc/localization/mvc-localization-5\ndotnet restore mvc/localization/mvc-localization-6\ndotnet restore mvc/localization/mvc-localization-7/src/ProjectWithResources\ndotnet restore mvc/localization/mvc-localization-7/src/Web\ndotnet restore mvc/localization/mvc-localization-8\ndotnet restore mvc/localization/mvc-localization-9\ndotnet restore mvc/model-binding-from-query\ndotnet restore mvc/model-binding-from-route\ndotnet restore mvc/mvc-output-xml\ndotnet restore mvc/nswag\ndotnet restore mvc/nswag-2\ndotnet restore mvc/output-formatter-syndication\ndotnet restore mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary1\ndotnet restore mvc/razor-class-library/razor-class-library-1/src/RazorClassLibrary2\ndotnet restore mvc/razor-class-library/razor-class-library-1/src/WebApplication\ndotnet restore mvc/razor-class-library/razor-class-library-with-controllers/src/RazorClassLibrary1\ndotnet restore mvc/razor-class-library/razor-class-library-with-controllers/src/WebApplication\ndotnet restore mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibraries.Mvc.Core\ndotnet restore mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary1\ndotnet restore mvc/razor-class-library/razor-class-library-with-static-files/src/RazorClassLibrary2\ndotnet restore mvc/razor-class-library/razor-class-library-with-static-files/src/WebApplication\ndotnet restore mvc/result-filestream\ndotnet restore mvc/result-physicalfile\ndotnet restore mvc/routing/routing-1\ndotnet restore mvc/routing/routing-2\ndotnet restore mvc/routing/routing-3\ndotnet restore mvc/routing/routing-4\ndotnet restore mvc/routing/routing-5\ndotnet restore mvc/routing/routing-6\ndotnet restore mvc/routing/routing-7\ndotnet restore mvc/routing/routing-8\ndotnet restore mvc/routing/routing-9\ndotnet restore mvc/tag-helper/tag-helper-1\ndotnet restore mvc/tag-helper/tag-helper-2\ndotnet restore mvc/tag-helper/tag-helper-3\ndotnet restore mvc/tag-helper/tag-helper-4\ndotnet restore mvc/tag-helper/tag-helper-5\ndotnet restore mvc/tag-helper/tag-helper-img\ndotnet restore mvc/tag-helper/tag-helper-link\ndotnet restore mvc/utf8json-formatter\ndotnet restore mvc/view-component/view-component-1\ndotnet restore mvc/view-component/view-component-2\ndotnet restore mvc/view-component/view-component-3\ndotnet restore mvc/view-component/view-component-4\ndotnet restore newtonsoft-json\ndotnet restore orchard-core/multi-tenant/Host\ndotnet restore orchard-core/routing/ForumModule\ndotnet restore orchard-core/routing/Host\ndotnet restore orchard-core/routing/TicketModule\ndotnet restore orchard-core/routing-2/ForumModule\ndotnet restore orchard-core/routing-2/Host\ndotnet restore orchard-core/routing-2/TicketModule\ndotnet restore orchard-core/static-files/ForumModule\ndotnet restore orchard-core/static-files/Host\ndotnet restore password-hasher\ndotnet restore razor-pages/custom-html-generator\ndotnet restore razor-pages/hello-world\ndotnet restore razor-pages/razor/razor-1\ndotnet restore razor-pages/razor/razor-2\ndotnet restore razor-pages/razor-pages-basic\ndotnet restore razor-pages/razor-pages-mvc\ndotnet restore razor-pages/routing\ndotnet restore razor-pages/routing-2\ndotnet restore request/anti-forgery\ndotnet restore request/cookies-1\ndotnet restore request/cookies-2\ndotnet restore request/form-upload-file\ndotnet restore request/form-values\ndotnet restore request/query-string-1\ndotnet restore request/query-string-2\ndotnet restore request/query-string-3\ndotnet restore request/request-headers\ndotnet restore request/request-headers-names\ndotnet restore request/request-headers-typed\ndotnet restore request/request-verb\ndotnet restore response/compression-response\ndotnet restore response/response-buffering\ndotnet restore response/response-header\ndotnet restore response/trailing-headers\ndotnet restore rewrite/rewrite-1\ndotnet restore rewrite/rewrite-2\ndotnet restore rewrite/rewrite-3\ndotnet restore rewrite/rewrite-4\ndotnet restore rewrite/rewrite-5\ndotnet restore rewrite/rewrite-6\ndotnet restore security/authentication-with-identity/src\ndotnet restore signalr/signalr-1/Client\ndotnet restore signalr/signalr-1/Server\ndotnet restore sse\ndotnet restore startup/env-development\ndotnet restore startup/no-startup\ndotnet restore startup/startup-basic\ndotnet restore startup/startup-basic-multiple\ndotnet restore startup/startup-basic-multiple-environment\ndotnet restore startup/startup-basic-multiple-urls\ndotnet restore startup/startup-capture-errors\ndotnet restore startup/startup-custom-name\ndotnet restore startup/startup-istartupfilter\ndotnet restore startup/startup-multiple-configure-environment\ndotnet restore startup/startup-multiple-configure-environment-services\ndotnet restore startup/suppress-status-messages\ndotnet restore syndications/syndication-1\ndotnet restore syndications/syndication-2\ndotnet restore syndications/syndication-3\ndotnet restore uri-helper/uri-helper-build-absolute\ndotnet restore uri-helper/uri-helper-from-absolute\ndotnet restore uri-helper/uri-helper-get-display-url\ndotnet restore uri-helper/uri-helper-get-encoded-path-and-query\ndotnet restore uri-helper/uri-helper-get-encoded-url\ndotnet restore version\ndotnet restore web-sockets/web-sockets-1\ndotnet restore web-sockets/web-sockets-2\ndotnet restore web-sockets/web-sockets-3\ndotnet restore web-sockets/web-sockets-4\ndotnet restore web-sockets/web-sockets-5\ndotnet restore web-utilities/web-utilities-query-helpers\ndotnet restore web-utilities/web-utilities-query-helpers-2\ndotnet restore web-utilities/web-utilities-reason-phrases\n"
  },
  {
    "path": "projects/rewrite/README.md",
    "content": "# URL Redirect/Rewriting (6)\r\n  \r\n  This section explore the dark arts of URL Rewriting\r\n\r\n  * [Rewrite](/projects/rewrite/rewrite-1)\r\n    \r\n    Shows the most basic of URL rewriting which will **redirect** (returns [HTTP 302](https://en.wikipedia.org/wiki/HTTP_302)) anything to the home page \"/\". \r\n    \r\n    If you have used routing yet, I recommend of checking out the routing examples.\r\n\r\n  * [Rewrite - 2](/projects/rewrite/rewrite-2)\r\n    \r\n    **Redirect** (returns [HTTP 302](https://en.wikipedia.org/wiki/HTTP_302)) anything with an extension e.g. about-us.html or welcome.aspx to home page (/). It also shows how to capture the matched regex values.\r\n\r\n  * [Rewrite - 3](/projects/rewrite/rewrite-3)\r\n\r\n    **Rewrite** anything with an extension e.g. about-us.html or welcome.aspx to home page (/). It also shows how to capture the matched regex values.\r\n    \r\n  * [Rewrite - 4](/projects/rewrite/rewrite-4)\r\n    \r\n    **Permanent Redirect** (returns [HTTP 301](https://en.wikipedia.org/wiki/HTTP_301)) anything with an extension e.g. about-us.html or welcome.aspx to home page (/). It also shows how to capture the matched regex values.\r\n\r\n  * [Rewrite - 5](/projects/rewrite/rewrite-5)\r\n  \r\n    Implement a custom redirect logic based on `IRule` implementation. \r\n\r\n    This custom redirection logic allows us to simply specify the image file names without worrying about their exact path e.g.'xx.jpg' and 'yy.png'.\r\n\r\n  * [Rewrite - 6](/projects/rewrite/rewrite-6)\r\n  \r\n    Implement a custom redirect logic using lambda (similar functionality to Rewrite - 5). \r\n\r\n    This custom redirection logic allows us to simply specify the image file names without worrying about their exact path e.g.'xx.jpg' and 'yy.png'.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/rewrite/build.bat",
    "content": "dotnet build rewrite-1\r\ndotnet build rewrite-2\r\ndotnet build rewrite-3\r\ndotnet build rewrite-4\r\ndotnet build rewrite-5\r\ndotnet build rewrite-6"
  },
  {
    "path": "projects/rewrite/build.sh",
    "content": "#!/bin/bash\ndotnet build rewrite-1\ndotnet build rewrite-2\ndotnet build rewrite-3\ndotnet build rewrite-4\ndotnet build rewrite-5\ndotnet build rewrite-6\n"
  },
  {
    "path": "projects/rewrite/rewrite-1/Program.cs",
    "content": "using Microsoft.AspNetCore.Rewrite;\r\n\r\nvar app = WebApplication.Create();\r\n\r\nvar options = new RewriteOptions()\r\n    .AddRedirect(\"/$\", \"/\"); //redirect when path ends with /\r\n\r\napp.UseRewriter(options);\r\n\r\napp.MapGet(\"/\", (context) =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    return context.Response.WriteAsync($@\"<html><body>\r\n    Always display this page when path ends with / e.g. <a href=\"\"/hello-world/\"\">/hello-world/</a> or \r\n    <a href=\"\"/welcome/everybody/inthis/train/\"\">/welcome/everybody/inthis/train/</a>.</body></html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/rewrite/rewrite-1/rewrite.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/rewrite/rewrite-2/Program.cs",
    "content": "using Microsoft.AspNetCore.Rewrite;\r\n\r\nvar app = WebApplication.Create();\r\n\r\nvar options = new RewriteOptions().AddRedirect(\"([/_0-9a-zA-Z-]+)\\\\.([^/]+)$\", \"/?path=$1&ext=$2\"); //redirect any path that ends with .html \r\n\r\napp.UseRewriter(options);\r\n\r\napp.MapGet(\"\", (context) =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    var path = context.Request.Query[\"Path\"];\r\n    var ext = context.Request.Query[\"Ext\"];\r\n    return context.Response.WriteAsync($@\"<html><body>Always display this page when path ends with an extension (e.g. .html or .aspx) and capture the their values. \r\n                    For example <a href=\"\"/hello-world.html\"\">/hello-world.html</a> or <a href=\"\"/welcome/everybody/inthis/train.aspx\"\">/welcome/everybody/inthis/train.aspx</a>.\r\n                    <br/><br/>\r\n                    Query String \"\"path\"\" = {path}<br/>\r\n                    Query String \"\"ext\"\" = {ext}<br/>\r\n                    </body></html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/rewrite/rewrite-2/rewrite-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/rewrite/rewrite-3/Program.cs",
    "content": "using Microsoft.AspNetCore.Rewrite;\r\n\r\nvar app = WebApplication.Create();\r\n\r\nvar options = new RewriteOptions()\r\n   .AddRewrite(\"([/_0-9a-z-]+)+(.*)$\", \"/?path=$1&ext=$2\", skipRemainingRules: false);\r\n\r\napp.UseRewriter(options);\r\n\r\napp.MapGet(\"/\", (context) =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    var path = context.Request.Query[\"Path\"];\r\n    var ext = context.Request.Query[\"Ext\"];\r\n    return context.Response.WriteAsync($@\"\r\n        <html><body>\r\n            <h1>REWRITE</h1>\r\n            Always display this page when path ends with an extension (e.g. .html or .aspx) and capture the their values. \r\n            For example <a href=\"\"/hello-world.html\"\">/hello-world.html</a> or <a href=\"\"/welcome/everybody/inthis/train.aspx\"\">/welcome/everybody/inthis/train.aspx</a>.\r\n            <br/><br/>\r\n            Query String \"\"path\"\" = {path}<br/>\r\n            Query String \"\"ext\"\" = {ext}<br/>\r\n            </body></html>\r\n            \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/rewrite/rewrite-3/rewrite-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/rewrite/rewrite-4/Program.cs",
    "content": "using Microsoft.AspNetCore.Rewrite;\r\nusing System.Net;\r\n\r\nvar app = WebApplication.Create();\r\nvar options = new RewriteOptions()\r\n   .AddRedirect(\"([/_0-9a-z-]+)+(.*)$\", \"/?path=$1&ext=$2\", (int)HttpStatusCode.MovedPermanently); //redirect any path that ends with .html \r\n\r\napp.UseRewriter(options);\r\n\r\napp.MapGet(\"\", (context) =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    var path = context.Request.Query[\"Path\"];\r\n    var ext = context.Request.Query[\"Ext\"];\r\n    return context.Response.WriteAsync($@\"<html><body>\r\n                    <h1>Permanent Redirect</h1>\r\n                    Always display this page when path ends with an extension (e.g. .html or .aspx) and capture the their values. \r\n                    For example <a href=\"\"/hello-world.html\"\">/hello-world.html</a> or <a href=\"\"/welcome/everybody/inthis/train.aspx\"\">/welcome/everybody/inthis/train.aspx</a>.\r\n                    <br/><br/>\r\n                    Query String \"\"path\"\" = {path}<br/>\r\n                    Query String \"\"ext\"\" = {ext}<br/>\r\n                    </body></html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/rewrite/rewrite-4/rewrite-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/rewrite/rewrite-5/Program.cs",
    "content": "using Microsoft.AspNetCore.Rewrite;\r\nusing Microsoft.Net.Http.Headers;\r\n\r\nvar app = WebApplication.Create();\r\napp.UseRouting();\r\n\r\nvar options = new RewriteOptions()\r\n   .Add(new ExtensionRedirection(\".png\", \"/images/png\"))\r\n   .Add(new ExtensionRedirection(\".jpg\", \"/images/jpeg\"));\r\n\r\napp.UseRewriter(options);\r\napp.UseStaticFiles();\r\n\r\napp.MapGet(\"\", async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n\r\n    await context.Response.WriteAsync($\"<h1>Extension Based Redirection</h1><img src=\\\"ryan-wong-25025.jpg\\\" /> <br/> <img src=\\\"Acorn_PNG744.png\\\" />\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class ExtensionRedirection : IRule\r\n{\r\n    readonly string _extension;\r\n    readonly PathString _newPath;\r\n\r\n    public ExtensionRedirection(string extension, string newPath)\r\n    {\r\n        _extension = extension;\r\n        _newPath = new PathString(newPath);\r\n    }\r\n\r\n    public void ApplyRule(RewriteContext context)\r\n    {\r\n        var request = context.HttpContext.Request;\r\n\r\n        // Because we're redirecting back to the same app, stop processing if the request has already been redirected\r\n        // This is to prevent crazy loop. Try it, comment below code and you are going to crash.\r\n        if (request.Path.StartsWithSegments(new PathString(_newPath)))\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (request.Path.Value.EndsWith(_extension, StringComparison.OrdinalIgnoreCase))\r\n        {\r\n            var response = context.HttpContext.Response;\r\n            response.StatusCode = StatusCodes.Status301MovedPermanently;\r\n            context.Result = RuleResult.EndResponse;\r\n            response.Headers[HeaderNames.Location] = _newPath + request.Path + request.QueryString;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/rewrite/rewrite-5/rewrite-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>rewrite-5</AssemblyName>\r\n\r\n    <PackageId>rewrite-5</PackageId>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/rewrite/rewrite-6/Program.cs",
    "content": "using Microsoft.AspNetCore.Rewrite;\r\nusing Microsoft.Net.Http.Headers;\r\n\r\nvar app = WebApplication.Create();\r\n\r\nvar options = new RewriteOptions()\r\n   .Add(context =>\r\n   {\r\n       var request = context.HttpContext.Request;\r\n\r\n       // Because we're redirecting back to the same app, stop processing if the request has already been redirected\r\n       // This is to prevent crazy loop. Try it, comment below code and you are going to crash.\r\n       if (request.Path.StartsWithSegments(new PathString(\"/images/jpeg\")))\r\n       {\r\n           return;\r\n       }\r\n\r\n       if (request.Path.Value.EndsWith(\".jpg\", StringComparison.OrdinalIgnoreCase))\r\n       {\r\n           var response = context.HttpContext.Response;\r\n           response.StatusCode = StatusCodes.Status301MovedPermanently;\r\n           context.Result = RuleResult.EndResponse;\r\n           response.Headers[HeaderNames.Location] = \"/images/jpeg\" + request.Path + request.QueryString;\r\n       }\r\n   });\r\n\r\napp.UseRewriter(options);\r\napp.UseStaticFiles();\r\n\r\napp.MapGet(\"\", async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n\r\n    await context.Response.WriteAsync($\"<h1>Extension Based Redirection</h1><img src=\\\"ryan-wong-25025.jpg\\\" />\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class ExtensionRedirection : IRule\r\n{\r\n    readonly string _extension;\r\n    readonly PathString _newPath;\r\n\r\n    public ExtensionRedirection(string extension, string newPath)\r\n    {\r\n        _extension = extension;\r\n        _newPath = new PathString(newPath);\r\n    }\r\n\r\n    public void ApplyRule(RewriteContext context)\r\n    {\r\n        var request = context.HttpContext.Request;\r\n\r\n        // Because we're redirecting back to the same app, stop processing if the request has already been redirected\r\n        // This is to prevent crazy loop. Try it, comment below code and you are going to crash.\r\n        if (request.Path.StartsWithSegments(new PathString(_newPath)))\r\n        {\r\n            return;\r\n        }\r\n\r\n        if (request.Path.Value.EndsWith(_extension, StringComparison.OrdinalIgnoreCase))\r\n        {\r\n            var response = context.HttpContext.Response;\r\n            response.StatusCode = StatusCodes.Status301MovedPermanently;\r\n            context.Result = RuleResult.EndResponse;\r\n            response.Headers[HeaderNames.Location] = _newPath + request.Path + request.QueryString;\r\n        }\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/rewrite/rewrite-6/rewrite-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/route-debugger-web/RouteDebugger/RouteDebugger.cs",
    "content": "﻿using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.AspNetCore.Mvc.ActionConstraints;\r\nusing Microsoft.AspNetCore.Mvc.Infrastructure;\r\nusing Microsoft.AspNetCore.Routing;\r\n\r\nnamespace RouteSpy;\r\n\r\npublic static class RouteDebugger\r\n{\r\n    public static IApplicationBuilder UseRouteDebugger(this WebApplication app)\r\n    {\r\n        app.UseMiddleware<RouteDebuggerMiddleware>();\r\n        return app;\r\n    }\r\n\r\n    public class RouteDebuggerMiddleware\r\n    {\r\n        private RequestDelegate Next { get; }\r\n\r\n        public RouteDebuggerMiddleware(RequestDelegate next)\r\n        {\r\n            Next = next;\r\n        }\r\n\r\n        public async Task Invoke(HttpContext context, IActionDescriptorCollectionProvider )\r\n        {\r\n            // set header info\r\n            context.Response.OnStarting(static state =>\r\n            {\r\n                if (state is HttpContext httpContext && httpContext.GetEndpoint() is { } endpoint)\r\n                {\r\n                    var info = GetEndpointInformation(endpoint, httpContext.GetRouteData());\r\n\r\n                    var response = httpContext.Response;\r\n                    var results = info.Select(kv => $\"{kv.Key}:{kv.Value}; \");\r\n                    response.Headers.Add(\"X-ASPNETCORE-ROUTE\", string.Join(\"\", results));\r\n                }\r\n\r\n                return Task.CompletedTask;\r\n            }, context);\r\n\r\n            await Next(context);\r\n        }\r\n\r\n        private static Dictionary<string, string?> GetEndpointInformation(Endpoint endpoint, RouteData? routeData)\r\n        {\r\n            var elements = new Dictionary<string, string?>\r\n            {\r\n                { \"Name\", endpoint?.DisplayName }\r\n            };\r\n\r\n            if (endpoint is RouteEndpoint route)\r\n            {\r\n                elements.Add(\"Pattern\", route.RoutePattern.RawText);\r\n\r\n                foreach (var metadata in route.Metadata)\r\n                {\r\n                    if (metadata is RouteNameMetadata name)\r\n                    {\r\n                        elements[\"Name\"] = name.RouteName;\r\n                    }\r\n\r\n                    if (metadata is HttpMethodActionConstraint methods)\r\n                    {\r\n                        elements[\"Methods\"] = string.Join(\",\", methods.HttpMethods);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (routeData is { } && routeData.Values.Any())\r\n            {\r\n                elements[\"RouteData\"] =\r\n                    string.Join(\",\", routeData.Values.Select(x => $\"{x.Key}={x.Value}\"));\r\n            }\r\n\r\n            return elements;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/route-debugger-web/RouteDebugger/RouteDebugger.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <Nullable>enable</Nullable>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/route-debugger-web/route-debugger-web/Program.cs",
    "content": "using Microsoft.AspNetCore.Mvc.ActionConstraints;\r\nusing RouteSpy;\r\nusing static RouteSpy.RouteDebugger;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddSingleton<RouteDebuggerMiddleware>();\r\nbuilder.Services.AddMvc();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseRouteDebugger();\r\n\r\napp.MapGet(\"/\", () => \"Hello World!\");\r\n\r\napp.Run();\r\n\r\n\r\n\r\npublic static class RouteDebugger\r\n{\r\n    public static IApplicationBuilder UseRouteDebugger(this WebApplication app)\r\n    {\r\n        app.UseMiddleware<RouteDebuggerMiddleware>();\r\n        return app;\r\n    }\r\n\r\n    public class RouteDebuggerMiddleware\r\n    {\r\n        private RequestDelegate Next { get; }\r\n\r\n        public RouteDebuggerMiddleware(RequestDelegate next)\r\n        {\r\n            Next = next;\r\n        }\r\n\r\n        public async Task Invoke(HttpContext context, IActionDescriptorCollectionProvider )\r\n        {\r\n            // set header info\r\n            context.Response.OnStarting(static state =>\r\n            {\r\n                if (state is HttpContext httpContext && httpContext.GetEndpoint() is { } endpoint)\r\n                {\r\n                    var info = GetEndpointInformation(endpoint, httpContext.GetRouteData());\r\n\r\n                    var response = httpContext.Response;\r\n                    var results = info.Select(kv => $\"{kv.Key}:{kv.Value}; \");\r\n                    response.Headers.Add(\"X-ASPNETCORE-ROUTE\", string.Join(\"\", results));\r\n                }\r\n\r\n                return Task.CompletedTask;\r\n            }, context);\r\n\r\n            await Next(context);\r\n        }\r\n\r\n        private static Dictionary<string, string?> GetEndpointInformation(Endpoint endpoint, RouteData? routeData)\r\n        {\r\n            var elements = new Dictionary<string, string?>\r\n            {\r\n                { \"Name\", endpoint?.DisplayName }\r\n            };\r\n\r\n            if (endpoint is RouteEndpoint route)\r\n            {\r\n                elements.Add(\"Pattern\", route.RoutePattern.RawText);\r\n\r\n                foreach (var metadata in route.Metadata)\r\n                {\r\n                    if (metadata is RouteNameMetadata name)\r\n                    {\r\n                        elements[\"Name\"] = name.RouteName;\r\n                    }\r\n\r\n                    if (metadata is HttpMethodActionConstraint methods)\r\n                    {\r\n                        elements[\"Methods\"] = string.Join(\",\", methods.HttpMethods);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (routeData is { } && routeData.Values.Any())\r\n            {\r\n                elements[\"RouteData\"] =\r\n                    string.Join(\",\", routeData.Values.Select(x => $\"{x.Key}={x.Value}\"));\r\n            }\r\n\r\n            return elements;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/route-debugger-web/route-debugger-web/RouteDebuggerWeb.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n    <RootNamespace>route_debugger_web</RootNamespace>\r\n  </PropertyGroup>\r\n\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/route-debugger-web/route-debugger-web/appsettings.Development.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft.AspNetCore\": \"Warning\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/route-debugger-web/route-debugger-web/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft.AspNetCore\": \"Warning\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/route-debugger-web/route-debugger-web.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.2.32616.157\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RouteDebuggerWeb\", \"route-debugger-web\\RouteDebuggerWeb.csproj\", \"{303D8353-89B8-461D-8088-04038C3C9A3D}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"RouteDebugger\", \"RouteDebugger\\RouteDebugger.csproj\", \"{A45BDD95-7810-45D5-B00B-CCB7E1A27F3C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{303D8353-89B8-461D-8088-04038C3C9A3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{303D8353-89B8-461D-8088-04038C3C9A3D}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{303D8353-89B8-461D-8088-04038C3C9A3D}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{303D8353-89B8-461D-8088-04038C3C9A3D}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{A45BDD95-7810-45D5-B00B-CCB7E1A27F3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{A45BDD95-7810-45D5-B00B-CCB7E1A27F3C}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{A45BDD95-7810-45D5-B00B-CCB7E1A27F3C}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{A45BDD95-7810-45D5-B00B-CCB7E1A27F3C}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {E12AB8E5-71EE-41BF-B3E7-DC64A6D024EB}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/security/README.md",
    "content": "# Security (7)\r\n\r\n\r\nSection about authentication, authorization and other things related to the security with .NET Core.\r\n----------------------------------------------------------------------------------------------------\r\n\r\n| Sections                                                       |     |\r\n|----------------------------------------------------------------|-----|\r\n| [Data Protection](/projects/security/dataprotection)           | (6) |\r\n\r\n\r\n * [Basic authentication sample with Identity Core and SQLite](/projects/security/authentication-with-identity)\r\n \r\n    Basic sample to show how authentication works with Identity Core and Entity Framework Core with SQLite). This sample provides some basic functionalities like register a new user, sign in or sign out.\r\n\r\n    Thanks to [@AdrienTorris](https://twitter.com/AdrienTorris)."
  },
  {
    "path": "projects/security/authentication-with-identity/README.md",
    "content": "Identity Core basic sample\r\n==========================\r\n\r\nThis is a sample to show how the basic authentication functionalities works with Identity Core and Entity Framework with SQLite.\r\n\r\nThe functionalities provided here are:\r\n * Register a user\r\n * Sign in\r\n * Sign out\r\n * Access to a page restricted to the authenticated users\r\n\r\nNote: SQLite was chosen to have a standalone working sample application because SQLite is contained as a DLL in the solution but there are a lots of other database providers allowed."
  },
  {
    "path": "projects/security/authentication-with-identity/src/Controllers/AccountController.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Threading.Tasks;\r\nusing WebApplication.ViewModels.AccountViewModels;\r\nusing Microsoft.AspNetCore.Authentication;\r\nusing Microsoft.AspNetCore.Authorization;\r\nusing Microsoft.AspNetCore.Identity;\r\nusing WebApplication.Services;\r\nusing System.Text.Encodings.Web;\r\nusing System;\r\n\r\nnamespace WebApplication.Controllers\r\n{\r\n    [Authorize]\r\n\tpublic class AccountController : Controller\r\n\t{\r\n        private readonly UserManager<IdentityUser> userManager;\r\n        private readonly SignInManager<IdentityUser> signInManager;\r\n        private readonly IEmailSender emailSender;\r\n\r\n        public AccountController(\r\n            UserManager<IdentityUser> userManager,\r\n            SignInManager<IdentityUser> signInManager,\r\n\t\t\tIEmailSender emailSender)\r\n        {\r\n            this.userManager = userManager;\r\n            this.signInManager = signInManager;\r\n\t\t\tthis.emailSender = emailSender;\r\n        }\r\n\t\t\r\n\t\t[HttpGet]\r\n        [AllowAnonymous]\r\n\t\tpublic IActionResult Register()\r\n\t\t\t=> View(new RegisterViewModel());\r\n\t\t\t\r\n\t\t[HttpPost]\r\n        [AllowAnonymous]\r\n        [ValidateAntiForgeryToken]\r\n\t\tpublic async Task<IActionResult> Register([FromForm]RegisterViewModel model)\r\n\t\t{\r\n\t\t\tif (ModelState.IsValid)\r\n            {\r\n\t\t\t\tIdentityUser user = new IdentityUser { UserName = model.Email, Email = model.Email };\r\n                IdentityResult result = await this.userManager.CreateAsync(user, model.Password);\r\n                if (result.Succeeded)\r\n                {\r\n                    string code = await this.userManager.GenerateEmailConfirmationTokenAsync(user);\r\n\t\t\t\t\tstring callbackUrl = Url.Action(action: nameof(AccountController.ConfirmEmail),controller: \"Account\",\r\n\t\t\t\t\t\tvalues: new { user.Id, code },protocol: Request.Scheme);\r\n                    await this.emailSender.SendEmailAsync(model.Email, \"Confirm your email\",\r\n\t\t\t\t\t\t$\"Please confirm your account by clicking this link: <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>link</a>\");\r\n\r\n                    await this.signInManager.SignInAsync(user, isPersistent: false);\r\n\t\t\t\t\treturn RedirectToAction(nameof(HomeController.Index), \"Home\");\r\n                }\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treturn View(model);\r\n\t\t}\r\n\r\n        [HttpGet]\r\n        [AllowAnonymous]\r\n        public IActionResult Login()\r\n\t\t\t=> View();\r\n\r\n        [HttpPost]\r\n        [AllowAnonymous]\r\n        [ValidateAntiForgeryToken]\r\n        public async Task<IActionResult> Login(LoginViewModel model)\r\n        {\r\n            if (ModelState.IsValid)\r\n            {\r\n                var result = await this.signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);\r\n                if (result.Succeeded)\r\n                {\r\n                    return RedirectToAction(nameof(HomeController.Index), \"Home\");\r\n                }\r\n                else\r\n                {\r\n                    ModelState.AddModelError(string.Empty, \"Invalid login attempt.\");\r\n                    return View(model);\r\n                }\r\n            }\r\n\r\n            return View(model);\r\n        }\r\n\r\n        [HttpPost]\r\n        [ValidateAntiForgeryToken]\r\n        public async Task<IActionResult> Logout()\r\n        {\r\n            await this.signInManager.SignOutAsync();\r\n            return RedirectToAction(nameof(HomeController.Index), \"Home\");\r\n        }\r\n\r\n        [HttpGet]\r\n        [AllowAnonymous]\r\n        public async Task<IActionResult> ConfirmEmail(string userId, string code)\r\n        {\r\n            if (userId == null || code == null)\r\n            {\r\n                return RedirectToAction(nameof(HomeController.Index), \"Home\");\r\n            }\r\n            IdentityUser user = await this.userManager.FindByIdAsync(userId);\r\n            if (user == null)\r\n            {\r\n                throw new ApplicationException($\"Unable to load user with ID '{userId}'.\");\r\n            }\r\n            IdentityResult result = await this.userManager.ConfirmEmailAsync(user, code);\r\n            return View(result.Succeeded ? \"ConfirmEmail\" : \"Error\");\r\n        }\r\n\t}\r\n}"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Controllers/HomeController.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Threading.Tasks;\r\n\r\nnamespace WebApplication.Controllers\r\n{\r\n\tpublic class HomeController : Controller\r\n\t{\r\n\t\tpublic IActionResult Index()\r\n\t\t\t=> View();\r\n\t}\r\n}"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Controllers/RestrictedAreaController.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Authentication;\r\nusing Microsoft.AspNetCore.Authorization;\r\nusing Microsoft.AspNetCore.Identity;\r\nusing System;\r\nusing WebApplication.ViewModels.RestrictedAreaViewModels;\r\n\r\nnamespace WebApplication.Controllers\r\n{\r\n    [Authorize]\r\n\tpublic class RestrictedAreaController : Controller\r\n\t{\r\n        private readonly UserManager<IdentityUser> userManager;\r\n\t\t\r\n\t\tpublic RestrictedAreaController(UserManager<IdentityUser> userManager)\r\n\t\t{\r\n\t\t\tthis.userManager = userManager;\r\n\t\t}\r\n\t\t\r\n        public async Task<IActionResult> Index()\r\n        {\r\n            IdentityUser user = await this.userManager.GetUserAsync(User);\r\n            if (user == null)\r\n            {\r\n                throw new ApplicationException($\"Unable to load user with ID '{this.userManager.GetUserId(User)}'.\");\r\n            }\r\n\r\n            IndexViewModel model = new IndexViewModel\r\n            {\r\n                Username = user.UserName,\r\n                Email = user.Email,\r\n                PhoneNumber = user.PhoneNumber,\r\n                IsEmailConfirmed = user.EmailConfirmed\r\n            };\r\n\r\n            return View(model);\r\n        }\r\n\t}\r\n}"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Data/ApplicationDbContext.cs",
    "content": "using Microsoft.AspNetCore.Identity.EntityFrameworkCore;\r\nusing Microsoft.EntityFrameworkCore;\r\n\r\nnamespace WebApplication.Data\r\n{\r\n\tpublic class ApplicationDbContext : IdentityDbContext\r\n    {\r\n        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)\r\n            : base(options)\r\n        {\r\n\t\t\t\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing WebApplication.Data;\r\nusing Microsoft.EntityFrameworkCore;\r\nusing Microsoft.AspNetCore.Identity;\r\nusing WebApplication.Services;\r\nusing Microsoft.Extensions.Hosting;\r\nusing System;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace WebApplication\r\n{\r\n    public class Program\r\n    {\r\n        public static void Main(string[] args)\r\n        {\r\n            var host = CreateHostBuilder(args).Build();\r\n\r\n            EnsureDatabase(host);\r\n\r\n            host.Run();\r\n        }\r\n\r\n        private static void EnsureDatabase(IHost host)\r\n        {\r\n            using (var scope = host.Services.CreateScope())\r\n            {\r\n                var services = scope.ServiceProvider;\r\n                var options = services.GetRequiredService<DbContextOptions<ApplicationDbContext>>();\r\n                try\r\n                {\r\n                    using (var dbContext = new ApplicationDbContext(options))\r\n                    {\r\n                        dbContext.Database.EnsureCreated();             \r\n                    }\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    var logger = services.GetRequiredService<ILogger<Program>>();\r\n                    logger.LogError(ex, \"An error occurred while ensuringt database is created.\");\r\n                }\r\n            }\r\n        }\r\n\r\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\r\n            Host.CreateDefaultBuilder(args)\r\n                .ConfigureWebHostDefaults(webBuilder =>\r\n                {\r\n                    webBuilder.UseStartup<Startup>();\r\n                });\r\n    }\r\n\r\n    public class Startup\r\n    {\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            //Add Database Services\r\n            AddDatabaseServices(services);\r\n\r\n            //Add Identity Services\r\n            AddIdentity(services);\r\n\r\n            // Add the application services.\r\n            AddApplicationServices(services);\r\n\r\n            // Add MVC.\r\n            services.AddControllersWithViews();\r\n        }\r\n        \r\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\r\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\r\n        {\r\n            if (env.IsDevelopment())\r\n            {\r\n                app.UseDeveloperExceptionPage();\r\n            }\r\n\r\n            app.UseRouting();\r\n\r\n            app.UseAuthentication();\r\n            app.UseAuthorization();\r\n            app.UseEndpoints(endpoints =>\r\n            {\r\n                endpoints.MapDefaultControllerRoute();\r\n            });\r\n        }\r\n\r\n        private static void AddApplicationServices(IServiceCollection services)\r\n        {\r\n            services.AddTransient<IEmailSender, EmailSender>(); // Service uses to send emails.\r\n        }\r\n\r\n        private static void AddIdentity(IServiceCollection services)\r\n        {\r\n            // Add Identity and configure it to use the default user and role models and the database context we just added.\r\n            services.AddIdentity<IdentityUser, IdentityRole>()\r\n                .AddEntityFrameworkStores<ApplicationDbContext>()\r\n                .AddDefaultTokenProviders();\r\n\r\n            // Configure Identity.\r\n            services.Configure<IdentityOptions>(options =>\r\n            {\r\n                // We set the minimal password policy.\r\n                options.Password.RequireDigit = false;\r\n                options.Password.RequiredLength = 3;\r\n                options.Password.RequireNonAlphanumeric = false;\r\n                options.Password.RequireUppercase = false;\r\n                options.Password.RequireLowercase = false;\r\n\r\n                // SignIn settings.\r\n                options.SignIn.RequireConfirmedEmail = false;\r\n            });\r\n        }\r\n\r\n        private static void AddDatabaseServices(IServiceCollection services)\r\n        {\r\n            // Add the database context we will use.\r\n            services.AddDbContext<ApplicationDbContext>(options =>\r\n                            options.UseSqlite(\"Data Source=identity_db.db\"));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Services/EmailSender.cs",
    "content": "using System.Threading.Tasks;\r\n\r\nnamespace WebApplication.Services\r\n{\r\n    public sealed class EmailSender : IEmailSender\r\n    {\r\n        public Task SendEmailAsync(string email, string subject, string message)\r\n        {\r\n\t\t\t// You need to implement the code to send emails here.\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Services/IEmailSender.cs",
    "content": "using System.Threading.Tasks;\r\n\r\nnamespace WebApplication.Services\r\n{\r\n    public interface IEmailSender\r\n    {\r\n        Task SendEmailAsync(string email, string subject, string message);\r\n    }\r\n}"
  },
  {
    "path": "projects/security/authentication-with-identity/src/ViewModels/AccountViewModels/LoginViewModel.cs",
    "content": "using System.ComponentModel.DataAnnotations;\r\n\r\nnamespace WebApplication.ViewModels.AccountViewModels\r\n{\r\n    public class LoginViewModel\r\n    {\r\n        [Required]\r\n        [EmailAddress]\r\n        public string Email { get; set; }\r\n\r\n        [Required]\r\n        [DataType(DataType.Password)]\r\n        public string Password { get; set; }\r\n\r\n        [Display(Name = \"Remember me?\")]\r\n        public bool RememberMe { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "projects/security/authentication-with-identity/src/ViewModels/AccountViewModels/RegisterViewModel.cs",
    "content": "using System.ComponentModel.DataAnnotations;\r\n\r\nnamespace WebApplication.ViewModels.AccountViewModels\r\n{\r\n\tpublic class RegisterViewModel\r\n\t{\r\n        [Required]\r\n        [EmailAddress]\r\n\t\tpublic string Email {get;set;}\r\n\t\t\r\n        [Required]\r\n        [DataType(DataType.Password)]\r\n\t\tpublic string Password {get;set;}\r\n\t}\r\n}"
  },
  {
    "path": "projects/security/authentication-with-identity/src/ViewModels/RestrictedAreaViewModels/IndexViewModel.cs",
    "content": "using System.ComponentModel.DataAnnotations;\r\n\r\nnamespace WebApplication.ViewModels.RestrictedAreaViewModels\r\n{\r\n\tpublic sealed class IndexViewModel\r\n\t{\r\n\t\tpublic string Username { get; set; }\r\n\r\n        public bool IsEmailConfirmed { get; set; }\r\n\r\n        [Display(Name = \"Email address\")]\r\n        [EmailAddress]\r\n        public string Email { get; set; }\r\n\r\n        [Display(Name = \"Phone number\")]\r\n        public string PhoneNumber { get; set; }\r\n\t}\r\n}"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Views/Account/ConfirmEmail.cshtml",
    "content": "﻿@{\r\n    ViewData[\"Title\"] = \"Confirm email\";\r\n}\r\n\r\n<h2>@ViewData[\"Title\"]</h2>\r\n<div>\r\n    <p>\r\n        Thank you for confirming your email.\r\n    </p>\r\n</div>\r\n"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Views/Account/Login.cshtml",
    "content": "@model WebApplication.ViewModels.AccountViewModels.LoginViewModel;\r\n@{\r\n\tViewData[\"Title\"] = \"Log in\";\r\n}\r\n\r\n<h1>@ViewData[\"Title\"]</h1>\r\n\r\n<form asp-controller=\"Account\" asp-action=\"Login\" method=\"post\">\r\n    <div asp-validation-summary=\"All\"></div>\r\n    <label asp-for=\"Email\"></label>\r\n    <input asp-for=\"Email\" class=\"form-control\" />\r\n    <span asp-validation-for=\"Email\" class=\"text-danger\"></span>\r\n<br /><br />\r\n    <label asp-for=\"Password\"></label>\r\n    <input asp-for=\"Password\" class=\"form-control\" />\r\n    <span asp-validation-for=\"Password\" class=\"text-danger\"></span>\r\n<br /><br />\r\n    <label asp-for=\"RememberMe\">\r\n        <input asp-for=\"RememberMe\" />\r\n\t\t@Html.DisplayNameFor(m => m.RememberMe)\r\n    </label>\r\n\t<br /><br />\r\n    <button type=\"submit\" class=\"btn btn-default\">Log in</button>\r\n</form>\r\n\r\n<p>\r\n   <a asp-action=\"Register\">Create an account</a>\r\n</p>"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Views/Account/Register.cshtml",
    "content": "@model WebApplication.ViewModels.AccountViewModels.RegisterViewModel;\r\n@{\r\n\tViewData[\"Title\"] = \"Register new user\";\r\n}\r\n\r\n<h1>@ViewData[\"Title\"]</h1>\r\n\r\n<form asp-controller=\"Account\" asp-action=\"Register\" method=\"post\" asp-route-returnurl=\"@ViewData[\"ReturnUrl\"]\">\r\n\t<label asp-for=\"Email\"></label>\r\n    <input asp-for=\"Email\" />\r\n    <span asp-validation-for=\"Email\"></span>\r\n\t<br /><br />\r\n\t<label asp-for=\"Password\"></label>\r\n    <input asp-for=\"Password\" />\r\n    <span asp-validation-for=\"Password\"></span>\r\n\t<br /><br />\r\n\t<button type=\"submit\">Register</button>\r\n</form>\r\n\r\n<p>\r\n   <a asp-action=\"Login\">Log in</a>\r\n</p>"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Views/Home/Index.cshtml",
    "content": "@{\r\n\tViewData[\"Title\"] = \"Basic Identity sample\";\r\n}\r\n\r\n<h1>Hello world!</h1>"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Views/RestrictedArea/Index.cshtml",
    "content": "@model WebApplication.ViewModels.RestrictedAreaViewModels.IndexViewModel\r\n@{\r\n    ViewData[\"Title\"] = \"Restricted area\";\r\n}\r\n\r\n<h1>@ViewData[\"Title\"]</h1>\r\n<i>You have to be signed in to access there.</i>\r\n\r\n<br />\r\n<b>Profile:</b>\r\n<ul>\r\n\t<li>\r\n\t\t<label asp-for=\"Username\"></label>\r\n\t</li>\r\n\t<li>\r\n\t\t<label asp-for=\"Email\"></label>\r\n\t\t@if (Model.IsEmailConfirmed)\r\n        {\r\n\t\t\t<i>confirmed</i>\r\n\t\t} else {\r\n\t\t\t<i>not confirmed</i>\r\n\t\t}\r\n\t</li>\r\n\t<li>\r\n\t\t<label asp-for=\"PhoneNumber\"></label>\r\n\t</li>\r\n</ul>"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Views/Shared/_Layout.cshtml",
    "content": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n\t<head>\r\n\t\t<meta charset=\"utf-8\" />\r\n\t\t<title>@ViewData[\"Title\"] - ASP.NET Core Identity sample</title>\r\n\t</head>\r\n\t<body>\r\n\t\t<nav style=\"clear:both;width:100%;\">\r\n\t\t\t<i>From the layout</i>\r\n\t\t\t<partial name=\"_LoginPartial\" />\r\n\t\t</nav>\r\n\t\t<div style=\"clear:both;width:100%;\">\r\n\t\t\t@RenderBody()\r\n\t\t</div>\r\n\t</body>\r\n\r\n</html>"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Views/Shared/_LoginPartial.cshtml",
    "content": "@using Microsoft.AspNetCore.Identity\r\n@inject SignInManager<IdentityUser> SignInManager\r\n@inject UserManager<IdentityUser> UserManager\r\n\r\n<ul>\r\n@if (SignInManager.IsSignedIn(User))\r\n{\r\n    <li>\r\n        <b>Hello @User.Identity.Name!</b>\r\n    </li>\r\n\t<li><a asp-controller=\"Home\" asp-action=\"Index\">Home</a></li>\r\n    <li>\r\n        <a asp-controller=\"RestrictedArea\" asp-action=\"Index\" title=\"You have to be signed in to access to this page\">Restricted area</a>\r\n    </li>\r\n    <li>\r\n        <form asp-controller=\"Account\" asp-action=\"Logout\" asp-route-returnUrl=\"@Url.Action(\"Index\", \"Home\", new { area = \"\" })\">\r\n            <button type=\"submit\">Logout</button>\r\n        </form>\r\n    </li>\r\n}\r\nelse\r\n{\r\n\t<li><a asp-controller=\"Home\" asp-action=\"Index\">Home</a></li>\r\n    <li>\r\n        <a asp-controller=\"Account\" asp-action=\"Register\">Register</a>\r\n    </li>\r\n    <li>\r\n        <a asp-controller=\"Account\" asp-action=\"Login\">Login</a>\r\n    </li>\r\n    <li>\r\n        <a asp-controller=\"RestrictedArea\" asp-action=\"Index\" title=\"You have to be signed in to access to this page\">Restricted area</a>\r\n    </li>\r\n}\r\n</ul>"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Views/_ViewImports.cshtml",
    "content": "@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers"
  },
  {
    "path": "projects/security/authentication-with-identity/src/Views/_ViewStart.cshtml",
    "content": "@{\r\n    Layout = \"_Layout\";\r\n}\r\n"
  },
  {
    "path": "projects/security/authentication-with-identity/src/authentication-with-identity.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Identity.EntityFrameworkCore\" Version=\"5.0.3\" />\r\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.Sqlite\" Version=\"5.0.3\" />\r\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.Design\" Version=\"5.0.3\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/security/build.bat",
    "content": "dotnet build authentication-with-identity\\src"
  },
  {
    "path": "projects/security/build.sh",
    "content": "#!/bin/bash\ndotnet build authentication-with-identity/src\n"
  },
  {
    "path": "projects/security/dataprotection/README.md",
    "content": "Data Protection\r\n========\r\n\r\nSection about data protection stack for ASP.NET Core\r\n----------------------------------------------------------------------------------------------------\r\n\r\n * [Data Protection with Default settings](/projects/security/dataprotection/default-settings)\r\n \r\n    Basic sample to show data protection with default settings.\r\n\r\n* [Data Protection with Azure Storage Blob](/projects/security/dataprotection/azure-storage-blob-key-store)\r\n \r\n    Sample to show data protection with keys stored in Azure Blob storage.\r\n     \r\n* [Data Protection with Azure Key Vault & Azure Storage Blob](/projects/security/dataprotection/azure-keyvault-storage-blob-key-store)\r\n \r\n    Sample to show data protection with keys encrypted using Azure Key Vault and stored in Azure Blob storage.\r\n\r\n* [Data Protection with EF Core Key Store](/projects/security/dataprotection/ef-core-key-store)\r\n \r\n    Sample to show data protection with keys stored in relational database using Entity Framework Core.    \r\n\r\n* [Data Protection with Redis Key Store](/projects/security/dataprotection/redis-key-store)\r\n \r\n    Sample to show data protection with keys stored in Redis.    \r\n\r\n* [Data Protection with Custom XML Encryptor](/projects/security/dataprotection/custom-encryptor)\r\n \r\n    Sample to show data protection with keys encrypted by custom XML encryptor.    \r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/AzKeyVaultStorageBlobKeyStore.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.31320.298\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"AzKeyVaultStorageBlobKeyStore\", \"src\\AzKeyVaultStorageBlobKeyStore.csproj\", \"{7706629F-F388-4822-8ABD-FBC5D55F3705}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{7706629F-F388-4822-8ABD-FBC5D55F3705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{7706629F-F388-4822-8ABD-FBC5D55F3705}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{7706629F-F388-4822-8ABD-FBC5D55F3705}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{7706629F-F388-4822-8ABD-FBC5D55F3705}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {3B33F1DD-AE22-4B21-A61C-D2C6EB4292DA}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/README.md",
    "content": "Azure Key Vault Encryption & Azure Storage Blob - Key Store\r\n========\r\n\r\nThis sample showcases data protection with keys encrypted using Azure Key Vault and stored in Azure Blob Storage.\r\n\r\n* Azure Storage connection string is set up in appsettings.\r\n    ```\r\n    \"DataProtection\": \r\n    {\r\n        ...\r\n        \"StorageConnectionString\": \"<storage connection string>\",\r\n        \"ContainerName\": \"<container name>\",\r\n        \"BlobName\": \"<blob name e.g. dpkeys.xml>\"\r\n        ...\r\n    }\r\n    ```\r\n* Azure Key Vault URI is set up in appsettings.\r\n    ```\r\n    \"DataProtection\": \r\n    {\r\n        ...\r\n        \"KeyId\": \"https://<your key vault name>.vault.azure.net/keys/<your key name>/<your key version>\"        \r\n        ...\r\n    }\r\n    ```\r\n* Key encryption & persistence is set up in StartUp ConfigureServices().\r\n    ```\r\n    public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            ...\r\n            var storageConnectionString = Configuration[\"DataProtection:StorageConnectionString\"];\r\n            var containerName = Configuration[\"DataProtection:ContainerName\"];\r\n            var blobName = Configuration[\"DataProtection:BlobName\"];\r\n            var keyId = Configuration[\"DataProtection:KeyId\"];\r\n            services.AddDataProtection()\r\n                    //Key Encryption\r\n                    .ProtectKeysWithAzureKeyVault(new Uri(keyId),new ChainedTokenCredential(new ManagedIdentityCredential(), new AzureCliCredential()))\r\n                    //Key Persistence\r\n                    .PersistKeysToAzureBlobStorage(storageConnectionString,containerName,blobName);\r\n            ...\r\n        }\r\n    ```\r\n\r\n## Reference\r\n[Data Protection Key Encryption using Azure Key Vault](https://github.com/Azure/azure-sdk-for-net/blob/Azure.Extensions.AspNetCore.DataProtection.Keys_1.0.3/sdk/extensions/Azure.Extensions.AspNetCore.DataProtection.Keys/README.md)\r\n\r\n[Data Protection Key Persistence using Azure Storage Blob](https://github.com/Azure/azure-sdk-for-net/blob/Azure.Extensions.AspNetCore.DataProtection.Blobs_1.2.1/sdk/extensions/Azure.Extensions.AspNetCore.DataProtection.Blobs/README.md)\r\n\r\n## Screenshot\r\n<img src=\"assets/main-page.png\">\r\n\r\n## Credits\r\n[Lohith GN](https://github.com/lohithgn)"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/AzKeyVaultStorageBlobKeyStore.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Azure.Extensions.AspNetCore.DataProtection.Blobs\" Version=\"1.2.1\" />\r\n    <PackageReference Include=\"Azure.Extensions.AspNetCore.DataProtection.Keys\" Version=\"1.0.3\" />\r\n    <PackageReference Include=\"Azure.Identity\" Version=\"1.11.4\" />\r\n  </ItemGroup>\r\n\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/Error.cshtml",
    "content": "@page\r\n@model ErrorModel\r\n@{\r\n    ViewData[\"Title\"] = \"Error\";\r\n}\r\n\r\n<h1 class=\"text-danger\">Error.</h1>\r\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\r\n\r\n@if (Model.ShowRequestId)\r\n{\r\n    <p>\r\n        <strong>Request ID:</strong> <code>@Model.RequestId</code>\r\n    </p>\r\n}\r\n\r\n<h3>Development Mode</h3>\r\n<p>\r\n    Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.\r\n</p>\r\n<p>\r\n    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\r\n    It can result in displaying sensitive information from exceptions to end users.\r\n    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\r\n    and restarting the app.\r\n</p>\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/Error.cshtml.cs",
    "content": "using System.Diagnostics;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace PANC.DataProtection.AzKeyVaultStorageBlobKeyStore.Pages\r\n{\r\n    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]\r\n    [IgnoreAntiforgeryToken]\r\n    public class ErrorModel : PageModel\r\n    {\r\n        public string RequestId { get; set; }\r\n\r\n        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\r\n\r\n        private readonly ILogger<ErrorModel> _logger;\r\n\r\n        public ErrorModel(ILogger<ErrorModel> logger)\r\n        {\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/Index.cshtml",
    "content": "﻿@page\r\n@model IndexModel\r\n@{\r\n    ViewData[\"Title\"] = \"Home page\";\r\n}\r\n\r\n<div class=\"text-center\">\r\n    <h4 class=\"display-6\">Azure Key Vault - Storgae Blob - Key Store Example</h4>\r\n    <p>\r\n        Learn about <a href=\"https://github.com/Azure/azure-sdk-for-net/blob/Azure.Extensions.AspNetCore.DataProtection.Blobs_1.2.1/sdk/extensions/Azure.Extensions.AspNetCore.DataProtection.Blobs/README.md\">\r\n            Azure Storage Blob Key Store for Data Protection</a>.\r\n    </p>\r\n    <p>\r\n        Learn about <a href=\"https://github.com/Azure/azure-sdk-for-net/blob/Azure.Extensions.AspNetCore.DataProtection.Keys_1.0.3/sdk/extensions/Azure.Extensions.AspNetCore.DataProtection.Keys/README.md\">\r\n            Encrypting Data Protection Keys using Azure Key Vault</a>.\r\n    </p>\r\n</div>\r\n\r\n<div class=\"my-5 d-flex align-items-center justify-content-center\">\r\n    <div class=\"w-75 bg-light p-5\">\r\n        <form  method=\"post\">\r\n        <div class=\"mb-3\">\r\n            <label asp-for=\"@Model.StringToEncrypt\" class=\"form-label\">String to encrypt</label>\r\n            <input  class=\"form-control\" asp-for=\"@Model.StringToEncrypt\">\r\n            <span asp-validation-for=\"@Model.StringToEncrypt\" class=\"text-danger\"></span>\r\n        </div>\r\n        <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n    </form>\r\n    @if(!string.IsNullOrEmpty(Model.EncryptedString))\r\n    {\r\n        <div class=\"py-4\">\r\n            Encrypted String: <br />\r\n            <b class=\"w-75 text-wrap\">@Model.EncryptedString</b>\r\n        </div>\r\n        <div class=\"py-4\">\r\n            DeCrypted String: <br />\r\n            <b>@Model.DeCryptedString</b>\r\n        </div>\r\n    }    \r\n    </div> \r\n    \r\n</div>"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/Index.cshtml.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\r\nusing Microsoft.AspNetCore.DataProtection;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace PANC.DataProtection.AzKeyVaultStorageBlobKeyStore.Pages\r\n{\r\n    public class IndexModel : PageModel\r\n    {\r\n        private readonly IDataProtector _protector;\r\n        private readonly ILogger<IndexModel> _logger;\r\n\r\n        \r\n        public string EncryptedString { get; private set; }\r\n        public string DeCryptedString { get; private set; }\r\n        public IndexModel(ILogger<IndexModel> logger, IDataProtectionProvider dataProtectionProvider)\r\n        {\r\n            _protector = dataProtectionProvider.CreateProtector(\"DP.DefaultSettings.V1\");\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n\r\n        }\r\n\r\n        [Required(ErrorMessage = \"Enter string to encrypt.\")]\r\n        [BindProperty]\r\n        public string StringToEncrypt { get; set; }\r\n        public void OnPost()\r\n        {\r\n            EncryptedString = _protector.Protect(StringToEncrypt);\r\n            DeCryptedString = _protector.Unprotect(EncryptedString);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\r\n<html lang=\"en\" class=\"h-100\">\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>@ViewData[\"Title\"] - src</title>\r\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css\">\r\n</head>\r\n\r\n<body class=\"d-flex flex-column h-100\">\r\n    <header>\r\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark\">\r\n            <div class=\"container\">\r\n                <a class=\"navbar-brand\" asp-area=\"\" asp-page=\"/Index\">Data Protection</a>\r\n            </div>\r\n        </nav>\r\n    </header>\r\n    <main class=\"flex-shrink-0\">\r\n        <div class=\"container mt-5 pt-3\">\r\n            @RenderBody()\r\n        </div>\r\n    </main>\r\n\r\n    <footer class=\"footer mt-auto py-3 bg-light\">\r\n        <div class=\"container\">\r\n            &copy; 2021 - <a href=\"https://github.com/dodyg/practical-aspnetcore\" target=\"_blank\">Practical\r\n                ASP.NET Core</a>\r\n        </div>\r\n    </footer>\r\n\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery-validation@1.19.3/dist/jquery.validate.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery-validation-unobtrusive@3.2.12/dist/jquery.validate.unobtrusive.min.js\"></script>\r\n</body>\r\n\r\n</html>\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/_ViewImports.cshtml",
    "content": "﻿@using PANC.DataProtection.AzKeyVaultStorageBlobKeyStore\r\n@namespace PANC.DataProtection.AzKeyVaultStorageBlobKeyStore.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Pages/_ViewStart.cshtml",
    "content": "@{\r\n    Layout = \"_Layout\";\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nnamespace PANC.DataProtection.AzKeyVaultStorageBlobKeyStore\r\n{\r\n    public class Program\r\n    {\r\n        public static void Main(string[] args)\r\n        {\r\n            CreateHostBuilder(args).Build().Run();\r\n        }\r\n\r\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\r\n            Host.CreateDefaultBuilder(args)\r\n                .ConfigureWebHostDefaults(webBuilder =>\r\n                {\r\n                    webBuilder.UseStartup<Startup>();\r\n                });\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/Startup.cs",
    "content": "using System;\r\nusing Azure.Identity;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.DataProtection;\r\nusing Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.Extensions.Configuration;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nnamespace PANC.DataProtection.AzKeyVaultStorageBlobKeyStore\r\n{\r\n    public class Startup\r\n    {\r\n        public Startup(IConfiguration configuration)\r\n        {\r\n            Configuration = configuration;\r\n        }\r\n\r\n        public IConfiguration Configuration { get; }\r\n\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            var storageConnectionString = Configuration[\"DataProtection:StorageConnectionString\"];\r\n            var containerName = Configuration[\"DataProtection:ContainerName\"];\r\n            var blobName = Configuration[\"DataProtection:BlobName\"];\r\n            var keyId = Configuration[\"DataProtection:KeyId\"];\r\n            services.AddDataProtection()\r\n                    .ProtectKeysWithAzureKeyVault(new Uri(keyId),new ChainedTokenCredential(new ManagedIdentityCredential(), new AzureCliCredential()))\r\n                    .PersistKeysToAzureBlobStorage(storageConnectionString,containerName,blobName);\r\n            services.AddRazorPages();\r\n        }\r\n\r\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\r\n        {\r\n            if (env.IsDevelopment())\r\n            {\r\n                app.UseDeveloperExceptionPage();\r\n            }\r\n            else\r\n            {\r\n                app.UseExceptionHandler(\"/Error\");\r\n                app.UseHsts();\r\n            }\r\n\r\n            app.UseHttpsRedirection();\r\n            app.UseStaticFiles();\r\n\r\n            app.UseRouting();\r\n\r\n            app.UseAuthorization();\r\n\r\n            app.UseEndpoints(endpoints =>\r\n            {\r\n                endpoints.MapRazorPages();\r\n            });\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/appsettings.Development.json",
    "content": "{\r\n  \"DetailedErrors\": true,\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-keyvault-storage-blob-key-store/src/appsettings.json",
    "content": "{\r\n  \"DataProtection\": {\r\n    \"StorageConnectionString\": \"UseDevelopmentStorage=true\",\r\n    \"ContainerName\": \"container-dp-keys\",\r\n    \"BlobName\": \"dpkeys.xml\",\r\n    \"KeyId\": \"https://<your key vault name>.vault.azure.net/keys/<your key name>/<your key version>\"\r\n  },\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/AzStorageBlobKeyStore.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.31320.298\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"AzStorageBlobKeyStore\", \"src\\AzStorageBlobKeyStore.csproj\", \"{7706629F-F388-4822-8ABD-FBC5D55F3705}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{7706629F-F388-4822-8ABD-FBC5D55F3705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{7706629F-F388-4822-8ABD-FBC5D55F3705}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{7706629F-F388-4822-8ABD-FBC5D55F3705}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{7706629F-F388-4822-8ABD-FBC5D55F3705}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {3B33F1DD-AE22-4B21-A61C-D2C6EB4292DA}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/README.md",
    "content": "Azure Storage Blob Key Store\r\n========\r\n\r\nThis sample showcases data protection with keys stored in Azure Blob Storage.\r\n\r\n* Azure Storage connection string is set up in appsettings.\r\n    ```\r\n    \"DataProtection\": \r\n    {\r\n        \"StorageConnectionString\": \"<storage connection string>\",\r\n        \"ContainerName\": \"<container name>\",\r\n        \"BlobName\": \"<blob name e.g. dpkeys.xml>\"\r\n    }\r\n    ```\r\n* Key persistence is set up in StartUp ConfigureServices().\r\n    ```\r\n    public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            var storageConnectionString = Configuration[\"DataProtection:StorageConnectionString\"];\r\n            var containerName = Configuration[\"DataProtection:ContainerName\"];\r\n            var blobName = Configuration[\"DataProtection:BlobName\"];\r\n            services.AddDataProtection()\r\n                    .PersistKeysToAzureBlobStorage(storageConnectionString,containerName,blobName);\r\n            ...\r\n        }\r\n    ```\r\n\r\n## Reference\r\n[Data Protection Key Persistenc using Azure Storage Blob](https://github.com/Azure/azure-sdk-for-net/blob/Azure.Extensions.AspNetCore.DataProtection.Blobs_1.2.1/sdk/extensions/Azure.Extensions.AspNetCore.DataProtection.Blobs/README.md)\r\n\r\n## Screenshot\r\n<img src=\"assets/main-page.png\">\r\n\r\n## Credits\r\n[Lohith GN](https://github.com/lohithgn)"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/src/AzStorageBlobKeyStore.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Azure.Extensions.AspNetCore.DataProtection.Blobs\" Version=\"1.2.1\" />\r\n  </ItemGroup>\r\n\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/Error.cshtml",
    "content": "@page\r\n@model ErrorModel\r\n@{\r\n    ViewData[\"Title\"] = \"Error\";\r\n}\r\n\r\n<h1 class=\"text-danger\">Error.</h1>\r\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\r\n\r\n@if (Model.ShowRequestId)\r\n{\r\n    <p>\r\n        <strong>Request ID:</strong> <code>@Model.RequestId</code>\r\n    </p>\r\n}\r\n\r\n<h3>Development Mode</h3>\r\n<p>\r\n    Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.\r\n</p>\r\n<p>\r\n    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\r\n    It can result in displaying sensitive information from exceptions to end users.\r\n    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\r\n    and restarting the app.\r\n</p>\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/Error.cshtml.cs",
    "content": "using System.Diagnostics;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace PANC.DataProtection.AzStorageBlobKeyStore.Pages\r\n{\r\n    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]\r\n    [IgnoreAntiforgeryToken]\r\n    public class ErrorModel : PageModel\r\n    {\r\n        public string RequestId { get; set; }\r\n\r\n        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\r\n\r\n        private readonly ILogger<ErrorModel> _logger;\r\n\r\n        public ErrorModel(ILogger<ErrorModel> logger)\r\n        {\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/Index.cshtml",
    "content": "﻿@page\r\n@model IndexModel\r\n@{\r\n    ViewData[\"Title\"] = \"Home page\";\r\n}\r\n\r\n<div class=\"text-center\">\r\n    <h4 class=\"display-6\">Azure Storgae Blob Key Store Example</h4>\r\n    <p>\r\n        Learn about <a href=\"https://github.com/Azure/azure-sdk-for-net/blob/Azure.Extensions.AspNetCore.DataProtection.Blobs_1.2.1/sdk/extensions/Azure.Extensions.AspNetCore.DataProtection.Blobs/README.md\">\r\n            Azure Storage Blob Key Store for Data Protection</a>.\r\n    </p>\r\n</div>\r\n\r\n<div class=\"my-5 d-flex align-items-center justify-content-center\">\r\n    <div class=\"w-75 bg-light p-5\">\r\n        <form  method=\"post\">\r\n        <div class=\"mb-3\">\r\n            <label asp-for=\"@Model.StringToEncrypt\" class=\"form-label\">String to encrypt</label>\r\n            <input  class=\"form-control\" asp-for=\"@Model.StringToEncrypt\">\r\n            <span asp-validation-for=\"@Model.StringToEncrypt\" class=\"text-danger\"></span>\r\n        </div>\r\n        <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n    </form>\r\n    @if(!string.IsNullOrEmpty(Model.EncryptedString))\r\n    {\r\n        <div class=\"py-4\">\r\n            Encrypted String: <br />\r\n            <b class=\"w-75 text-wrap\">@Model.EncryptedString</b>\r\n        </div>\r\n        <div class=\"py-4\">\r\n            DeCrypted String: <br />\r\n            <b>@Model.DeCryptedString</b>\r\n        </div>\r\n    }    \r\n    </div> \r\n    \r\n</div>\r\n\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/Index.cshtml.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\r\nusing Microsoft.AspNetCore.DataProtection;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace PANC.DataProtection.AzStorageBlobKeyStore.Pages\r\n{\r\n    public class IndexModel : PageModel\r\n    {\r\n        private readonly IDataProtector _protector;\r\n        private readonly ILogger<IndexModel> _logger;\r\n\r\n        \r\n        public string EncryptedString { get; private set; }\r\n        public string DeCryptedString { get; private set; }\r\n        public IndexModel(ILogger<IndexModel> logger, IDataProtectionProvider dataProtectionProvider)\r\n        {\r\n            _protector = dataProtectionProvider.CreateProtector(\"DP.DefaultSettings.V1\");\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n\r\n        }\r\n\r\n        [Required(ErrorMessage = \"Enter string to encrypt.\")]\r\n        [BindProperty]\r\n        public string StringToEncrypt { get; set; }\r\n        public void OnPost()\r\n        {\r\n            EncryptedString = _protector.Protect(StringToEncrypt);\r\n            DeCryptedString = _protector.Unprotect(EncryptedString);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\r\n<html lang=\"en\" class=\"h-100\">\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>@ViewData[\"Title\"] - src</title>\r\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css\">\r\n</head>\r\n\r\n<body class=\"d-flex flex-column h-100\">\r\n    <header>\r\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark\">\r\n            <div class=\"container\">\r\n                <a class=\"navbar-brand\" asp-area=\"\" asp-page=\"/Index\">Data Protection</a>\r\n            </div>\r\n        </nav>\r\n    </header>\r\n    <main class=\"flex-shrink-0\">\r\n        <div class=\"container mt-5 pt-3\">\r\n            @RenderBody()\r\n        </div>\r\n    </main>\r\n\r\n    <footer class=\"footer mt-auto py-3 bg-light\">\r\n        <div class=\"container\">\r\n            &copy; 2021 - <a href=\"https://github.com/dodyg/practical-aspnetcore\" target=\"_blank\">Practical\r\n                ASP.NET Core</a>\r\n        </div>\r\n    </footer>\r\n\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery-validation@1.19.3/dist/jquery.validate.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery-validation-unobtrusive@3.2.12/dist/jquery.validate.unobtrusive.min.js\"></script>\r\n</body>\r\n\r\n</html>\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/_ViewImports.cshtml",
    "content": "﻿@using PANC.DataProtection.AzStorageBlobKeyStore\r\n@namespace PANC.DataProtection.AzStorageBlobKeyStore.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/src/Pages/_ViewStart.cshtml",
    "content": "@{\r\n    Layout = \"_Layout\";\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/src/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nnamespace PANC.DataProtection.AzStorageBlobKeyStore\r\n{\r\n    public class Program\r\n    {\r\n        public static void Main(string[] args)\r\n        {\r\n            CreateHostBuilder(args).Build().Run();\r\n        }\r\n\r\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\r\n            Host.CreateDefaultBuilder(args)\r\n                .ConfigureWebHostDefaults(webBuilder =>\r\n                {\r\n                    webBuilder.UseStartup<Startup>();\r\n                });\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/src/Startup.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.DataProtection;\r\nusing Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.Extensions.Configuration;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nnamespace PANC.DataProtection.AzStorageBlobKeyStore\r\n{\r\n    public class Startup\r\n    {\r\n        public Startup(IConfiguration configuration)\r\n        {\r\n            Configuration = configuration;\r\n        }\r\n\r\n        public IConfiguration Configuration { get; }\r\n\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            var storageConnectionString = Configuration[\"DataProtection:StorageConnectionString\"];\r\n            var containerName = Configuration[\"DataProtection:ContainerName\"];\r\n            var blobName = Configuration[\"DataProtection:BlobName\"];\r\n            services.AddDataProtection()\r\n                    .PersistKeysToAzureBlobStorage(storageConnectionString,containerName,blobName);\r\n            services.AddRazorPages();\r\n        }\r\n\r\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\r\n        {\r\n            if (env.IsDevelopment())\r\n            {\r\n                app.UseDeveloperExceptionPage();\r\n            }\r\n            else\r\n            {\r\n                app.UseExceptionHandler(\"/Error\");\r\n                app.UseHsts();\r\n            }\r\n\r\n            app.UseHttpsRedirection();\r\n            app.UseStaticFiles();\r\n\r\n            app.UseRouting();\r\n\r\n            app.UseAuthorization();\r\n\r\n            app.UseEndpoints(endpoints =>\r\n            {\r\n                endpoints.MapRazorPages();\r\n            });\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/src/appsettings.Development.json",
    "content": "{\r\n  \"DetailedErrors\": true,\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/azure-storage-blob-key-store/src/appsettings.json",
    "content": "{\r\n  \"DataProtection\": {\r\n    \"StorageConnectionString\": \"UseDevelopmentStorage=true\",\r\n    \"ContainerName\": \"container-dp-keys\",\r\n    \"BlobName\": \"dpkeys.xml\"\r\n  },\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/CustomEncryptor.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.DataProtection\" Version=\"6.0.4\" />\r\n  </ItemGroup>\r\n\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/Extensions/DependencyInjection.cs",
    "content": "﻿using System;\r\nusing Microsoft.AspNetCore.DataProtection;\r\nusing Microsoft.AspNetCore.DataProtection.KeyManagement;\r\nusing Microsoft.AspNetCore.DataProtection.XmlEncryption;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.Extensions.Options;\r\n\r\nnamespace CustomEncryptor.Extensions\r\n{\r\n    public static class DependencyInjection\r\n    {\r\n        public static IDataProtectionBuilder UseXmlEncryptor(\r\n            this IDataProtectionBuilder builder,\r\n            Func<IServiceProvider, IXmlEncryptor> factory)\r\n        {\r\n            builder.Services.AddSingleton<IConfigureOptions<KeyManagementOptions>>(serviceProvider =>\r\n            {\r\n                var instance = factory(serviceProvider);\r\n                return new ConfigureOptions<KeyManagementOptions>(options =>\r\n                {\r\n                    options.XmlEncryptor = instance;\r\n                });\r\n            });\r\n\r\n            return builder;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/Pages/Error.cshtml",
    "content": "@page\r\n@model ErrorModel\r\n@{\r\n    ViewData[\"Title\"] = \"Error\";\r\n}\r\n\r\n<h1 class=\"text-danger\">Error.</h1>\r\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\r\n\r\n@if (Model.ShowRequestId)\r\n{\r\n    <p>\r\n        <strong>Request ID:</strong> <code>@Model.RequestId</code>\r\n    </p>\r\n}\r\n\r\n<h3>Development Mode</h3>\r\n<p>\r\n    Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.\r\n</p>\r\n<p>\r\n    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\r\n    It can result in displaying sensitive information from exceptions to end users.\r\n    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\r\n    and restarting the app.\r\n</p>\r\n"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/Pages/Error.cshtml.cs",
    "content": "using System.Diagnostics;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace PANC.DataProtection.CustomEncryptor.Pages\r\n{\r\n    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]\r\n    [IgnoreAntiforgeryToken]\r\n    public class ErrorModel : PageModel\r\n    {\r\n        public string RequestId { get; set; }\r\n\r\n        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\r\n\r\n        private readonly ILogger<ErrorModel> _logger;\r\n\r\n        public ErrorModel(ILogger<ErrorModel> logger)\r\n        {\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/Pages/Index.cshtml",
    "content": "﻿@page\r\n@model IndexModel\r\n@{\r\n    ViewData[\"Title\"] = \"Home page\";\r\n}\r\n\r\n<div class=\"text-center\">\r\n    <h4 class=\"display-6\">Custom Encryptor Example</h4>\r\n    <p>\r\n        Learn about <a href=\"https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/extensibility/key-management?view=aspnetcore-5.0#ixmlencryptor\">Custom XML Encryptor</a>.\r\n    </p>\r\n</div>\r\n\r\n<div class=\"my-5 d-flex align-items-center justify-content-center\">\r\n    <div class=\"w-75 bg-light p-5\">\r\n        <form  method=\"post\">\r\n        <div class=\"mb-3\">\r\n            <label asp-for=\"@Model.StringToEncrypt\" class=\"form-label\">String to encrypt</label>\r\n            <input  class=\"form-control\" asp-for=\"@Model.StringToEncrypt\">\r\n            <span asp-validation-for=\"@Model.StringToEncrypt\" class=\"text-danger\"></span>\r\n        </div>\r\n        <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n    </form>\r\n    @if(!string.IsNullOrEmpty(Model.EncryptedString))\r\n    {\r\n        <div class=\"py-4\">\r\n            Encrypted String: <br />\r\n            <b class=\"w-75 text-wrap\">@Model.EncryptedString</b>\r\n        </div>\r\n        <div class=\"py-4\">\r\n            DeCrypted String: <br />\r\n            <b>@Model.DeCryptedString</b>\r\n        </div>\r\n    }    \r\n    </div> \r\n    \r\n</div>"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/Pages/Index.cshtml.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\r\nusing Microsoft.AspNetCore.DataProtection;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace PANC.DataProtection.CustomEncryptor.Pages\r\n{\r\n    public class IndexModel : PageModel\r\n    {\r\n        private readonly IDataProtector _protector;\r\n        private readonly ILogger<IndexModel> _logger;\r\n\r\n        public string EncryptedString { get; private set; }\r\n        \r\n        public string DeCryptedString { get; private set; }\r\n        public IndexModel(ILogger<IndexModel> logger, IDataProtectionProvider dataProtectionProvider)\r\n        {\r\n            _protector = dataProtectionProvider.CreateProtector(\"DP.DefaultSettings.V1\");\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n\r\n        }\r\n\r\n        [Required(ErrorMessage = \"Enter string to encrypt.\")]\r\n        [BindProperty]\r\n        public string StringToEncrypt { get; set; }\r\n        public void OnPost()\r\n        {\r\n            EncryptedString = _protector.Protect(StringToEncrypt);\r\n            DeCryptedString = _protector.Unprotect(EncryptedString);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/Pages/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\r\n<html lang=\"en\" class=\"h-100\">\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>@ViewData[\"Title\"] - src</title>\r\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css\">\r\n</head>\r\n\r\n<body class=\"d-flex flex-column h-100\">\r\n    <header>\r\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark\">\r\n            <div class=\"container\">\r\n                <a class=\"navbar-brand\" asp-area=\"\" asp-page=\"/Index\">Data Protection</a>\r\n            </div>\r\n        </nav>\r\n    </header>\r\n    <main class=\"flex-shrink-0\">\r\n        <div class=\"container mt-5 pt-3\">\r\n            @RenderBody()\r\n        </div>\r\n    </main>\r\n\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery-validation@1.19.3/dist/jquery.validate.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery-validation-unobtrusive@3.2.12/dist/jquery.validate.unobtrusive.min.js\"></script>\r\n</body>\r\n\r\n</html>\r\n"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/Pages/_ViewImports.cshtml",
    "content": "﻿@using PANC.DataProtection.CustomEncryptor\r\n@namespace PANC.DataProtection.CustomEncryptor.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/Pages/_ViewStart.cshtml",
    "content": "@{\r\n    Layout = \"_Layout\";\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/Program.cs",
    "content": "using System.IO;\r\nusing CustomEncryptor.Extensions;\r\nusing CustomEncryptor.Services;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.DataProtection;\r\nusing Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.Extensions.Configuration;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nvar keysFolder = Path.Combine(Directory.GetCurrentDirectory(), \"temp-keys\");\r\nbuilder.Services.AddDataProtection()\r\n        .PersistKeysToFileSystem(new DirectoryInfo(keysFolder))\r\n        .UseXmlEncryptor(s => new CustomXmlEncryptor(s));\r\n                    \r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\napp.MapRazorPages();\r\n\r\napp.Run();"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/README.md",
    "content": "Custom XML Encryptor\r\n========\r\n\r\nThis sample showcases data protection with keys encrypted using custom XML encryptor.\r\n\r\n* Package `Microsoft.AspNetCore.DataProtection` is added to the project.\r\n\r\n* Custom XML Encryptor class is created\r\n    ```\r\n    public class CustomXmlEncryptor : IXmlEncryptor\r\n    {\r\n        private readonly ILogger _logger;\r\n\r\n        public CustomXmlEncryptor(IServiceProvider services)\r\n        {\r\n            _logger = services.GetRequiredService<ILoggerFactory>().CreateLogger<CustomXmlEncryptor>();\r\n        }\r\n\r\n        public EncryptedXmlInfo Encrypt(XElement plaintextElement)\r\n        {\r\n            if (plaintextElement == null)\r\n            {\r\n                throw new ArgumentNullException(nameof(plaintextElement));\r\n            }\r\n\r\n            _logger.LogInformation(\"Not encrypting key\");\r\n\r\n            var newElement = new XElement(\"unencryptedKey\",\r\n                new XComment(\" This key is not encrypted. \"),\r\n                new XElement(plaintextElement));\r\n            var encryptedTextElement = new EncryptedXmlInfo(newElement, typeof(CustomXmlDecryptor));\r\n\r\n            return encryptedTextElement;\r\n        }\r\n    }\r\n    ```\r\n* Custom XML decryptor class is created\r\n    ```\r\n    public class CustomXmlDecryptor : IXmlDecryptor\r\n    {\r\n        private readonly ILogger _logger;\r\n\r\n        public CustomXmlDecryptor(IServiceProvider services)\r\n        {\r\n            _logger = services.GetRequiredService<ILoggerFactory>().CreateLogger<CustomXmlDecryptor>();\r\n        }\r\n\r\n        public XElement Decrypt(XElement encryptedElement)\r\n        {\r\n            if (encryptedElement == null)\r\n            {\r\n                throw new ArgumentNullException(nameof(encryptedElement));\r\n            }\r\n\r\n            return new XElement(encryptedElement.Elements().Single());\r\n        }\r\n    }\r\n    ```\r\n\r\n* Helper extension method is created to add custom XML encryptor to data protection builder.\r\n    ```\r\n    public static IDataProtectionBuilder UseXmlEncryptor(\r\n            this IDataProtectionBuilder builder,\r\n            Func<IServiceProvider, IXmlEncryptor> factory)\r\n        {\r\n            builder.Services.AddSingleton<IConfigureOptions<KeyManagementOptions>>(serviceProvider =>\r\n            {\r\n                var instance = factory(serviceProvider);\r\n                return new ConfigureOptions<KeyManagementOptions>(options =>\r\n                {\r\n                    options.XmlEncryptor = instance;\r\n                });\r\n            });\r\n\r\n            return builder;\r\n        }\r\n    ```\r\n\r\n* Key persistence & protection is set up in StartUp ConfigureServices().\r\n    ```\r\n    public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            ...\r\n            var keysFolder = Path.Combine(Directory.GetCurrentDirectory(), \"temp-keys\");\r\n            services.AddDataProtection()\r\n                    .PersistKeysToFileSystem(new DirectoryInfo(keysFolder))\r\n                    .UseXmlEncryptor(s => new CustomXmlEncryptor(s));\r\n            ...\r\n        }\r\n    ```\r\n    Note: In this demo, Keys are stored on disk in a temp folder. Not advisable for production scenario.\r\n\r\n## Reference\r\n[Data Protection using custom XML encryptor](https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/extensibility/key-management?view=aspnetcore-5.0#ixmlencryptor)\r\n\r\n## Screenshot\r\n<img src=\"assets/main-page.png\">\r\n\r\n## Credits\r\n[Lohith GN](https://github.com/lohithgn)"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/Services/CustomXmlDecryptor.cs",
    "content": "﻿using Microsoft.AspNetCore.DataProtection.XmlEncryption;\r\nusing Microsoft.Extensions.Logging;\r\nusing System.Xml.Linq;\r\nusing System;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing System.Linq;\r\n\r\nnamespace CustomEncryptor.Services\r\n{\r\n    public class CustomXmlDecryptor : IXmlDecryptor\r\n    {\r\n        private readonly ILogger _logger;\r\n\r\n        public CustomXmlDecryptor(IServiceProvider services)\r\n        {\r\n            _logger = services.GetRequiredService<ILoggerFactory>().CreateLogger<CustomXmlDecryptor>();\r\n        }\r\n\r\n        public XElement Decrypt(XElement encryptedElement)\r\n        {\r\n            if (encryptedElement == null)\r\n            {\r\n                throw new ArgumentNullException(nameof(encryptedElement));\r\n            }\r\n\r\n            return new XElement(encryptedElement.Elements().Single());\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/Services/CustomXmlEncryptor.cs",
    "content": "﻿using System;\r\nusing System.Xml.Linq;\r\nusing Microsoft.AspNetCore.DataProtection.XmlEncryption;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace CustomEncryptor.Services\r\n{\r\n    public class CustomXmlEncryptor : IXmlEncryptor\r\n    {\r\n        private readonly ILogger _logger;\r\n\r\n        public CustomXmlEncryptor(IServiceProvider services)\r\n        {\r\n            _logger = services.GetRequiredService<ILoggerFactory>().CreateLogger<CustomXmlEncryptor>();\r\n        }\r\n\r\n        public EncryptedXmlInfo Encrypt(XElement plaintextElement)\r\n        {\r\n            if (plaintextElement == null)\r\n            {\r\n                throw new ArgumentNullException(nameof(plaintextElement));\r\n            }\r\n\r\n            _logger.LogInformation(\"Not encrypting key\");\r\n\r\n            var newElement = new XElement(\"unencryptedKey\",\r\n                new XComment(\" This key is not encrypted. \"),\r\n                new XElement(plaintextElement));\r\n            var encryptedTextElement = new EncryptedXmlInfo(newElement, typeof(CustomXmlDecryptor));\r\n\r\n            return encryptedTextElement;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/Startup.cs",
    "content": "using System.IO;\r\nusing CustomEncryptor.Extensions;\r\nusing CustomEncryptor.Services;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.DataProtection;\r\nusing Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.Extensions.Configuration;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nnamespace PANC.DataProtection.CustomEncryptor\r\n{\r\n    public class Startup\r\n    {\r\n        public Startup(IConfiguration configuration)\r\n        {\r\n            Configuration = configuration;\r\n        }\r\n\r\n        public IConfiguration Configuration { get; }\r\n\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            var keysFolder = Path.Combine(Directory.GetCurrentDirectory(), \"temp-keys\");\r\n            services.AddDataProtection()\r\n                    .PersistKeysToFileSystem(new DirectoryInfo(keysFolder))\r\n                    .UseXmlEncryptor(s => new CustomXmlEncryptor(s));\r\n                    \r\n            services.AddRazorPages();\r\n        }\r\n\r\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\r\n        {\r\n            if (env.IsDevelopment())\r\n            {\r\n                app.UseDeveloperExceptionPage();\r\n            }\r\n            else\r\n            {\r\n                app.UseExceptionHandler(\"/Error\");\r\n                app.UseHsts();\r\n            }\r\n\r\n            app.UseHttpsRedirection();\r\n            app.UseStaticFiles();\r\n\r\n            app.UseRouting();\r\n\r\n            app.UseAuthorization();\r\n\r\n            app.UseEndpoints(endpoints =>\r\n            {\r\n                endpoints.MapRazorPages();\r\n            });\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/appsettings.Development.json",
    "content": "{\r\n  \"DetailedErrors\": true,\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/custom-encryptor/temp-keys/key-7c2fc905-2a4b-4da4-b168-c0764b406eff.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<key id=\"7c2fc905-2a4b-4da4-b168-c0764b406eff\" version=\"1\">\r\n  <creationDate>2022-04-27T08:47:08.0903902Z</creationDate>\r\n  <activationDate>2022-04-27T08:47:08.0125044Z</activationDate>\r\n  <expirationDate>2022-07-26T08:47:08.0125044Z</expirationDate>\r\n  <descriptor deserializerType=\"Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60\">\r\n    <descriptor>\r\n      <encryption algorithm=\"AES_256_CBC\" />\r\n      <validation algorithm=\"HMACSHA256\" />\r\n      <encryptedSecret decryptorType=\"CustomEncryptor.Services.CustomXmlDecryptor, CustomEncryptor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\" xmlns=\"http://schemas.asp.net/2015/03/dataProtection\">\r\n        <unencryptedKey xmlns=\"\">\r\n          <!-- This key is not encrypted. -->\r\n          <masterKey p6:requiresEncryption=\"true\" xmlns:p6=\"http://schemas.asp.net/2015/03/dataProtection\">\r\n            <!-- Warning: the key below is in an unencrypted form. -->\r\n            <value>iAomnWjv9giI0XmBnaJ+1FBOin8j3x/X+At8wMix/GOsQrCbEO5Olo2an7LkqzTucdbpl3SIuQjW2RLQhEEJmA==</value>\r\n          </masterKey>\r\n        </unencryptedKey>\r\n      </encryptedSecret>\r\n    </descriptor>\r\n  </descriptor>\r\n</key>"
  },
  {
    "path": "projects/security/dataprotection/default-settings/DataProtectionDefaultSettings.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/security/dataprotection/default-settings/Pages/Error.cshtml",
    "content": "@page\r\n@model ErrorModel\r\n@{\r\n    ViewData[\"Title\"] = \"Error\";\r\n}\r\n\r\n<h1 class=\"text-danger\">Error.</h1>\r\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\r\n\r\n@if (Model.ShowRequestId)\r\n{\r\n    <p>\r\n        <strong>Request ID:</strong> <code>@Model.RequestId</code>\r\n    </p>\r\n}\r\n\r\n<h3>Development Mode</h3>\r\n<p>\r\n    Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.\r\n</p>\r\n<p>\r\n    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\r\n    It can result in displaying sensitive information from exceptions to end users.\r\n    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\r\n    and restarting the app.\r\n</p>\r\n"
  },
  {
    "path": "projects/security/dataprotection/default-settings/Pages/Error.cshtml.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace PANC.DataProtection.DefaultSettings.Pages\r\n{\r\n    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]\r\n    [IgnoreAntiforgeryToken]\r\n    public class ErrorModel : PageModel\r\n    {\r\n        public string RequestId { get; set; }\r\n\r\n        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\r\n\r\n        private readonly ILogger<ErrorModel> _logger;\r\n\r\n        public ErrorModel(ILogger<ErrorModel> logger)\r\n        {\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/default-settings/Pages/Index.cshtml",
    "content": "﻿@page\r\n@model IndexModel\r\n@{\r\n    ViewData[\"Title\"] = \"Home page\";\r\n}\r\n\r\n<div class=\"text-center\">\r\n    <h4 class=\"display-6\">Default Settings Example</h4>\r\n    <p>Learn about <a\r\n            href=\"https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/default-settings?view=aspnetcore-5.0\">Data\r\n            Protection Default Settings</a>.</p>\r\n</div>\r\n\r\n<div class=\"my-5 d-flex align-items-center justify-content-center\">\r\n    <div class=\"w-75 bg-light p-5\">\r\n        <form  method=\"post\">\r\n        <div class=\"mb-3\">\r\n            <label asp-for=\"@Model.StringToEncrypt\" class=\"form-label\">String to encrypt</label>\r\n            <input  class=\"form-control\" asp-for=\"@Model.StringToEncrypt\">\r\n            <span asp-validation-for=\"@Model.StringToEncrypt\" class=\"text-danger\"></span>\r\n        </div>\r\n        <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n    </form>\r\n    @if(!string.IsNullOrEmpty(Model.EncryptedString))\r\n    {\r\n        <div class=\"py-4\">\r\n            Encrypted String: <br />\r\n            <b class=\"w-75 text-wrap\">@Model.EncryptedString</b>\r\n        </div>\r\n        <div class=\"py-4\">\r\n            DeCrypted String: <br />\r\n            <b>@Model.DeCryptedString</b>\r\n        </div>\r\n    }    \r\n    </div> \r\n    \r\n</div>\r\n\r\n"
  },
  {
    "path": "projects/security/dataprotection/default-settings/Pages/Index.cshtml.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\r\nusing Microsoft.AspNetCore.DataProtection;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace PANC.DataProtection.DefaultSettings.Pages\r\n{\r\n    public class IndexModel : PageModel\r\n    {\r\n        private readonly IDataProtector _protector;\r\n        private readonly ILogger<IndexModel> _logger;\r\n\r\n        \r\n        public string EncryptedString { get; private set; }\r\n        public string DeCryptedString { get; private set; }\r\n        public IndexModel(ILogger<IndexModel> logger, IDataProtectionProvider dataProtectionProvider)\r\n        {\r\n            _protector = dataProtectionProvider.CreateProtector(\"DP.DefaultSettings.V1\");\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n\r\n        }\r\n\r\n        [Required(ErrorMessage = \"Enter string to encrypt.\")]\r\n        [BindProperty]\r\n        public string StringToEncrypt { get; set; }\r\n        public void OnPost()\r\n        {\r\n            EncryptedString = _protector.Protect(StringToEncrypt);\r\n            DeCryptedString = _protector.Unprotect(EncryptedString);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/default-settings/Pages/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\r\n<html lang=\"en\" class=\"h-100\">\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>@ViewData[\"Title\"] - src</title>\r\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css\">\r\n</head>\r\n\r\n<body class=\"d-flex flex-column h-100\">\r\n    <header>\r\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark\">\r\n            <div class=\"container\">\r\n                <a class=\"navbar-brand\" asp-area=\"\" asp-page=\"/Index\">Data Protection</a>\r\n            </div>\r\n        </nav>\r\n    </header>\r\n    <main class=\"flex-shrink-0\">\r\n        <div class=\"container mt-5 pt-3\">\r\n            @RenderBody()\r\n        </div>\r\n    </main>\r\n\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery-validation@1.19.3/dist/jquery.validate.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery-validation-unobtrusive@3.2.12/dist/jquery.validate.unobtrusive.min.js\"></script>\r\n</body>\r\n\r\n</html>\r\n"
  },
  {
    "path": "projects/security/dataprotection/default-settings/Pages/_ViewImports.cshtml",
    "content": "﻿@using PANC.DataProtection.DefaultSettings\r\n@namespace PANC.DataProtection.DefaultSettings.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/security/dataprotection/default-settings/Pages/_ViewStart.cshtml",
    "content": "@{\r\n    Layout = \"_Layout\";\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/default-settings/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.Extensions.Configuration;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddDataProtection();\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\napp.MapRazorPages();\r\n\r\napp.Run();"
  },
  {
    "path": "projects/security/dataprotection/default-settings/README.md",
    "content": "Data Protection with Default Settings\r\n========\r\n\r\nThis sample showcases data protection with default settings.\r\n\r\n* Data Protection default settings are set in Startup ConfigureServices() method.\r\n    ```\r\n    public void ConfigureServices(IServiceCollection services)\r\n    {\r\n        services.AddDataProtection();\r\n        ...\r\n    }\r\n    ```\r\n\r\n\r\n## Reference\r\n[Data Protection with Default Settings](https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/default-settings?view=aspnetcore-5.0)\r\n\r\n\r\n## Screenshot\r\n<img src=\"assets/main-page.png\">\r\n\r\n\r\n## Credits\r\n[Lohith GN](https://github.com/lohithgn)"
  },
  {
    "path": "projects/security/dataprotection/default-settings/appsettings.Development.json",
    "content": "{\r\n  \"DetailedErrors\": true,\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/default-settings/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/EFCoreKeyStore.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.31320.298\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"EFCoreKeyStore\", \"src\\EFCoreKeyStore.csproj\", \"{7706629F-F388-4822-8ABD-FBC5D55F3705}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{7706629F-F388-4822-8ABD-FBC5D55F3705}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{7706629F-F388-4822-8ABD-FBC5D55F3705}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{7706629F-F388-4822-8ABD-FBC5D55F3705}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{7706629F-F388-4822-8ABD-FBC5D55F3705}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {3B33F1DD-AE22-4B21-A61C-D2C6EB4292DA}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/README.md",
    "content": "Entity Framework Core Key Store\r\n========\r\n\r\nThis sample showcases data protection with keys stored in relational database using Entity Framework Core.\r\n\r\n* Package `Microsoft.AspNetCore.DataProtection.EntityFrameworkCore` is added to the project.\r\n\r\n* Database connection string is set up in appsettings.\r\n    ```\r\n    \"DataProtection\": \r\n    {\r\n        ...\r\n        \"DefaultConnection\": \"<database connection string>\",\r\n        ...\r\n    }\r\n    ```\r\n\r\n* Data protection EF core database context is set up as below:\r\n    ```\r\n    class DataProtectionKeyContext : DbContext, IDataProtectionKeyContext\r\n    {\r\n        public DataProtectionKeyContext(DbContextOptions<DataProtectionKeyContext> options)\r\n            : base(options){ }\r\n\r\n        public DbSet<DataProtectionKey> DataProtectionKeys { get; set; }\r\n    }\r\n    ```\r\n\r\n* EF Core data migration is setup using below commands:\r\n    ```\r\n    dotnet ef migrations add AddDataProtectionKeys --context DataProtectionKeyContext\r\n    dotnet ef database update --context DataProtectionKeyContext\r\n    ```\r\n\r\n* Key persistence is set up in StartUp ConfigureServices().\r\n    ```\r\n    public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            ...\r\n            var storageConnectionString = Configuration[\"DataProtection:DefaultConnection\"];\r\n\r\n            // Add a DbContext to store your data protection Keys\r\n            services.AddDbContext<DataProtectionKeyContext>(options =>\r\n                options.UseSqlServer(storageConnectionString));\r\n\r\n            // Key persistence\r\n            services.AddDataProtection()\r\n                .PersistKeysToDbContext<DataProtectionKeyContext>();\r\n            ...\r\n        }\r\n    ```\r\n\r\n## Reference\r\n[Data Protection Key Persistence using EF Core](https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-5.0&tabs=netcore-cli#entity-framework-core)\r\n\r\n## Screenshot\r\n<img src=\"assets/main-page.png\">\r\n\r\n## Credits\r\n[Lohith GN](https://github.com/lohithgn)"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/Data/DataProtectionKeyContext.cs",
    "content": "﻿using Microsoft.AspNetCore.DataProtection.EntityFrameworkCore;\r\nusing Microsoft.EntityFrameworkCore;\r\n\r\nnamespace PANC.DataProtection.EFCoreKeyStore.Data\r\n{\r\n    class DataProtectionKeyContext : DbContext, IDataProtectionKeyContext\r\n    {\r\n        public DataProtectionKeyContext(DbContextOptions<DataProtectionKeyContext> options)\r\n            : base(options){ }\r\n\r\n        public DbSet<DataProtectionKey> DataProtectionKeys { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/Data/Migrations/20210610013150_AddDataProtectionKeys.Designer.cs",
    "content": "﻿// <auto-generated />\r\nusing Microsoft.EntityFrameworkCore;\r\nusing Microsoft.EntityFrameworkCore.Infrastructure;\r\nusing Microsoft.EntityFrameworkCore.Metadata;\r\nusing Microsoft.EntityFrameworkCore.Migrations;\r\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\r\nusing PANC.DataProtection.EFCoreKeyStore.Data;\r\n\r\nnamespace EFCoreKeyStore.Data.Migrations\r\n{\r\n    [DbContext(typeof(DataProtectionKeyContext))]\r\n    [Migration(\"20210610013150_AddDataProtectionKeys\")]\r\n    partial class AddDataProtectionKeys\r\n    {\r\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\r\n        {\r\n#pragma warning disable 612, 618\r\n            modelBuilder\r\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128)\r\n                .HasAnnotation(\"ProductVersion\", \"5.0.7\")\r\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey\", b =>\r\n                {\r\n                    b.Property<int>(\"Id\")\r\n                        .ValueGeneratedOnAdd()\r\n                        .HasColumnType(\"int\")\r\n                        .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\r\n\r\n                    b.Property<string>(\"FriendlyName\")\r\n                        .HasColumnType(\"nvarchar(max)\");\r\n\r\n                    b.Property<string>(\"Xml\")\r\n                        .HasColumnType(\"nvarchar(max)\");\r\n\r\n                    b.HasKey(\"Id\");\r\n\r\n                    b.ToTable(\"DataProtectionKeys\");\r\n                });\r\n#pragma warning restore 612, 618\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/Data/Migrations/20210610013150_AddDataProtectionKeys.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\r\n\r\nnamespace EFCoreKeyStore.Data.Migrations\r\n{\r\n    public partial class AddDataProtectionKeys : Migration\r\n    {\r\n        protected override void Up(MigrationBuilder migrationBuilder)\r\n        {\r\n            migrationBuilder.CreateTable(\r\n                name: \"DataProtectionKeys\",\r\n                columns: table => new\r\n                {\r\n                    Id = table.Column<int>(type: \"int\", nullable: false)\r\n                        .Annotation(\"SqlServer:Identity\", \"1, 1\"),\r\n                    FriendlyName = table.Column<string>(type: \"nvarchar(max)\", nullable: true),\r\n                    Xml = table.Column<string>(type: \"nvarchar(max)\", nullable: true)\r\n                },\r\n                constraints: table =>\r\n                {\r\n                    table.PrimaryKey(\"PK_DataProtectionKeys\", x => x.Id);\r\n                });\r\n        }\r\n\r\n        protected override void Down(MigrationBuilder migrationBuilder)\r\n        {\r\n            migrationBuilder.DropTable(\r\n                name: \"DataProtectionKeys\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/Data/Migrations/DataProtectionKeyContextModelSnapshot.cs",
    "content": "﻿// <auto-generated />\r\nusing Microsoft.EntityFrameworkCore;\r\nusing Microsoft.EntityFrameworkCore.Infrastructure;\r\nusing Microsoft.EntityFrameworkCore.Metadata;\r\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\r\nusing PANC.DataProtection.EFCoreKeyStore.Data;\r\n\r\nnamespace EFCoreKeyStore.Data.Migrations\r\n{\r\n    [DbContext(typeof(DataProtectionKeyContext))]\r\n    partial class DataProtectionKeyContextModelSnapshot : ModelSnapshot\r\n    {\r\n        protected override void BuildModel(ModelBuilder modelBuilder)\r\n        {\r\n#pragma warning disable 612, 618\r\n            modelBuilder\r\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128)\r\n                .HasAnnotation(\"ProductVersion\", \"5.0.7\")\r\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\r\n\r\n            modelBuilder.Entity(\"Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey\", b =>\r\n                {\r\n                    b.Property<int>(\"Id\")\r\n                        .ValueGeneratedOnAdd()\r\n                        .HasColumnType(\"int\")\r\n                        .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\r\n\r\n                    b.Property<string>(\"FriendlyName\")\r\n                        .HasColumnType(\"nvarchar(max)\");\r\n\r\n                    b.Property<string>(\"Xml\")\r\n                        .HasColumnType(\"nvarchar(max)\");\r\n\r\n                    b.HasKey(\"Id\");\r\n\r\n                    b.ToTable(\"DataProtectionKeys\");\r\n                });\r\n#pragma warning restore 612, 618\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/EFCoreKeyStore.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.DataProtection.EntityFrameworkCore\" Version=\"5.0.7\" />\r\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.Design\" Version=\"5.0.7\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.SqlServer\" Version=\"5.0.7\" />\r\n  </ItemGroup>\r\n\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/Pages/Error.cshtml",
    "content": "@page\r\n@model ErrorModel\r\n@{\r\n    ViewData[\"Title\"] = \"Error\";\r\n}\r\n\r\n<h1 class=\"text-danger\">Error.</h1>\r\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\r\n\r\n@if (Model.ShowRequestId)\r\n{\r\n    <p>\r\n        <strong>Request ID:</strong> <code>@Model.RequestId</code>\r\n    </p>\r\n}\r\n\r\n<h3>Development Mode</h3>\r\n<p>\r\n    Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.\r\n</p>\r\n<p>\r\n    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\r\n    It can result in displaying sensitive information from exceptions to end users.\r\n    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\r\n    and restarting the app.\r\n</p>\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/Pages/Error.cshtml.cs",
    "content": "using System.Diagnostics;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace PANC.DataProtection.EFCoreKeyStore.Pages\r\n{\r\n    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]\r\n    [IgnoreAntiforgeryToken]\r\n    public class ErrorModel : PageModel\r\n    {\r\n        public string RequestId { get; set; }\r\n\r\n        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\r\n\r\n        private readonly ILogger<ErrorModel> _logger;\r\n\r\n        public ErrorModel(ILogger<ErrorModel> logger)\r\n        {\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/Pages/Index.cshtml",
    "content": "﻿@page\r\n@model IndexModel\r\n@{\r\n    ViewData[\"Title\"] = \"Home page\";\r\n}\r\n\r\n<div class=\"text-center\">\r\n    <h4 class=\"display-6\">Entity Framework Core Key Store Example</h4>\r\n    <p>\r\n        Learn about <a href=\"https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-5.0&tabs=netcore-cli#entity-framework-core\">\r\n            Entity Frameowrk Core Key Store Provider</a>.\r\n    </p>\r\n</div>\r\n\r\n<div class=\"my-5 d-flex align-items-center justify-content-center\">\r\n    <div class=\"w-75 bg-light p-5\">\r\n        <form  method=\"post\">\r\n        <div class=\"mb-3\">\r\n            <label asp-for=\"@Model.StringToEncrypt\" class=\"form-label\">String to encrypt</label>\r\n            <input  class=\"form-control\" asp-for=\"@Model.StringToEncrypt\">\r\n            <span asp-validation-for=\"@Model.StringToEncrypt\" class=\"text-danger\"></span>\r\n        </div>\r\n        <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n    </form>\r\n    @if(!string.IsNullOrEmpty(Model.EncryptedString))\r\n    {\r\n        <div class=\"py-4\">\r\n            Encrypted String: <br />\r\n            <b class=\"w-75 text-wrap\">@Model.EncryptedString</b>\r\n        </div>\r\n        <div class=\"py-4\">\r\n            DeCrypted String: <br />\r\n            <b>@Model.DeCryptedString</b>\r\n        </div>\r\n    }    \r\n    </div> \r\n    \r\n</div>"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/Pages/Index.cshtml.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\r\nusing Microsoft.AspNetCore.DataProtection;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace PANC.DataProtection.EFCoreKeyStore.Pages\r\n{\r\n    public class IndexModel : PageModel\r\n    {\r\n        private readonly IDataProtector _protector;\r\n        private readonly ILogger<IndexModel> _logger;\r\n\r\n        \r\n        public string EncryptedString { get; private set; }\r\n        public string DeCryptedString { get; private set; }\r\n        public IndexModel(ILogger<IndexModel> logger, IDataProtectionProvider dataProtectionProvider)\r\n        {\r\n            _protector = dataProtectionProvider.CreateProtector(\"DP.DefaultSettings.V1\");\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n\r\n        }\r\n\r\n        [Required(ErrorMessage = \"Enter string to encrypt.\")]\r\n        [BindProperty]\r\n        public string StringToEncrypt { get; set; }\r\n        public void OnPost()\r\n        {\r\n            EncryptedString = _protector.Protect(StringToEncrypt);\r\n            DeCryptedString = _protector.Unprotect(EncryptedString);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/Pages/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\r\n<html lang=\"en\" class=\"h-100\">\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>@ViewData[\"Title\"] - src</title>\r\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css\">\r\n</head>\r\n\r\n<body class=\"d-flex flex-column h-100\">\r\n    <header>\r\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark\">\r\n            <div class=\"container\">\r\n                <a class=\"navbar-brand\" asp-area=\"\" asp-page=\"/Index\">Data Protection</a>\r\n            </div>\r\n        </nav>\r\n    </header>\r\n    <main class=\"flex-shrink-0\">\r\n        <div class=\"container mt-5 pt-3\">\r\n            @RenderBody()\r\n        </div>\r\n    </main>\r\n\r\n    <footer class=\"footer mt-auto py-3 bg-light\">\r\n        <div class=\"container\">\r\n            &copy; 2021 - <a href=\"https://github.com/dodyg/practical-aspnetcore\" target=\"_blank\">Practical\r\n                ASP.NET Core</a>\r\n        </div>\r\n    </footer>\r\n\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery-validation@1.19.3/dist/jquery.validate.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery-validation-unobtrusive@3.2.12/dist/jquery.validate.unobtrusive.min.js\"></script>\r\n</body>\r\n\r\n</html>\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/Pages/_ViewImports.cshtml",
    "content": "﻿@using PANC.DataProtection.EFCoreKeyStore\r\n@namespace PANC.DataProtection.EFCoreKeyStore.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/Pages/_ViewStart.cshtml",
    "content": "@{\r\n    Layout = \"_Layout\";\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nnamespace PANC.DataProtection.EFCoreKeyStore\r\n{\r\n    public class Program\r\n    {\r\n        public static void Main(string[] args)\r\n        {\r\n            CreateHostBuilder(args).Build().Run();\r\n        }\r\n\r\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\r\n            Host.CreateDefaultBuilder(args)\r\n                .ConfigureWebHostDefaults(webBuilder =>\r\n                {\r\n                    webBuilder.UseStartup<Startup>();\r\n                });\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/Startup.cs",
    "content": "using PANC.DataProtection.EFCoreKeyStore.Data;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.DataProtection;\r\nusing Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.EntityFrameworkCore;\r\nusing Microsoft.Extensions.Configuration;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nnamespace PANC.DataProtection.EFCoreKeyStore\r\n{\r\n    public class Startup\r\n    {\r\n        public Startup(IConfiguration configuration)\r\n        {\r\n            Configuration = configuration;\r\n        }\r\n\r\n        public IConfiguration Configuration { get; }\r\n\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            var storageConnectionString = Configuration[\"DataProtection:DefaultConnection\"];\r\n\r\n            // Add a DbContext to store your Database Keys\r\n            services.AddDbContext<DataProtectionKeyContext>(options =>\r\n                options.UseSqlServer(storageConnectionString));\r\n\r\n            // using Microsoft.AspNetCore.DataProtection;\r\n            services.AddDataProtection()\r\n                .PersistKeysToDbContext<DataProtectionKeyContext>();\r\n                    \r\n            services.AddRazorPages();\r\n        }\r\n\r\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\r\n        {\r\n            if (env.IsDevelopment())\r\n            {\r\n                app.UseDeveloperExceptionPage();\r\n            }\r\n            else\r\n            {\r\n                app.UseExceptionHandler(\"/Error\");\r\n                app.UseHsts();\r\n            }\r\n\r\n            app.UseHttpsRedirection();\r\n            app.UseStaticFiles();\r\n\r\n            app.UseRouting();\r\n\r\n            app.UseAuthorization();\r\n\r\n            app.UseEndpoints(endpoints =>\r\n            {\r\n                endpoints.MapRazorPages();\r\n            });\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/appsettings.Development.json",
    "content": "{\r\n  \"DetailedErrors\": true,\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/ef-key-store/src/appsettings.json",
    "content": "{\r\n  \"DataProtection\": {\r\n    \"DefaultConnection\": \"Data Source=(localdb)\\\\ProjectsV13;Initial Catalog=DPEFCoreKeyStore;Integrated Security=True;\"\r\n  },\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/redis-key-store/Pages/Error.cshtml",
    "content": "@page\r\n@model ErrorModel\r\n@{\r\n    ViewData[\"Title\"] = \"Error\";\r\n}\r\n\r\n<h1 class=\"text-danger\">Error.</h1>\r\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\r\n\r\n@if (Model.ShowRequestId)\r\n{\r\n    <p>\r\n        <strong>Request ID:</strong> <code>@Model.RequestId</code>\r\n    </p>\r\n}\r\n\r\n<h3>Development Mode</h3>\r\n<p>\r\n    Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.\r\n</p>\r\n<p>\r\n    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\r\n    It can result in displaying sensitive information from exceptions to end users.\r\n    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\r\n    and restarting the app.\r\n</p>\r\n"
  },
  {
    "path": "projects/security/dataprotection/redis-key-store/Pages/Error.cshtml.cs",
    "content": "using System.Diagnostics;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace PANC.DataProtection.RedisKeyStore.Pages\r\n{\r\n    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]\r\n    [IgnoreAntiforgeryToken]\r\n    public class ErrorModel : PageModel\r\n    {\r\n        public string RequestId { get; set; }\r\n\r\n        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\r\n\r\n        private readonly ILogger<ErrorModel> _logger;\r\n\r\n        public ErrorModel(ILogger<ErrorModel> logger)\r\n        {\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/redis-key-store/Pages/Index.cshtml",
    "content": "﻿@page\r\n@model IndexModel\r\n@{\r\n    ViewData[\"Title\"] = \"Home page\";\r\n}\r\n\r\n<div class=\"text-center\">\r\n    <h4 class=\"display-6\">Redis Key Store Example</h4>\r\n    <p>\r\n        Learn about <a href=\"https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-6.0&tabs=visual-studio#redis\">\r\n            Redis Key Store Provider</a>.\r\n    </p>\r\n</div>\r\n\r\n<div class=\"my-5 d-flex align-items-center justify-content-center\">\r\n    <div class=\"w-75 bg-light p-5\">\r\n        <form  method=\"post\">\r\n        <div class=\"mb-3\">\r\n            <label asp-for=\"@Model.StringToEncrypt\" class=\"form-label\">String to encrypt</label>\r\n            <input  class=\"form-control\" asp-for=\"@Model.StringToEncrypt\">\r\n            <span asp-validation-for=\"@Model.StringToEncrypt\" class=\"text-danger\"></span>\r\n        </div>\r\n        <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\r\n    </form>\r\n    @if(!string.IsNullOrEmpty(Model.EncryptedString))\r\n    {\r\n        <div class=\"py-4\">\r\n            Encrypted String: <br />\r\n            <b class=\"w-75 text-wrap\">@Model.EncryptedString</b>\r\n        </div>\r\n        <div class=\"py-4\">\r\n            DeCrypted String: <br />\r\n            <b>@Model.DeCryptedString</b>\r\n        </div>\r\n    }    \r\n    </div> \r\n    \r\n</div>"
  },
  {
    "path": "projects/security/dataprotection/redis-key-store/Pages/Index.cshtml.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\r\nusing Microsoft.AspNetCore.DataProtection;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace PANC.DataProtection.RedisKeyStore.Pages\r\n{\r\n    public class IndexModel : PageModel\r\n    {\r\n        private readonly IDataProtector _protector;\r\n        private readonly ILogger<IndexModel> _logger;\r\n\r\n        \r\n        public string EncryptedString { get; private set; }\r\n        public string DeCryptedString { get; private set; }\r\n        public IndexModel(ILogger<IndexModel> logger, IDataProtectionProvider dataProtectionProvider)\r\n        {\r\n            _protector = dataProtectionProvider.CreateProtector(\"DP.DefaultSettings.V1\");\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n\r\n        }\r\n\r\n        [Required(ErrorMessage = \"Enter string to encrypt.\")]\r\n        [BindProperty]\r\n        public string StringToEncrypt { get; set; }\r\n        public void OnPost()\r\n        {\r\n            EncryptedString = _protector.Protect(StringToEncrypt);\r\n            DeCryptedString = _protector.Unprotect(EncryptedString);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/redis-key-store/Pages/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\r\n<html lang=\"en\" class=\"h-100\">\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>@ViewData[\"Title\"] - src</title>\r\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css\">\r\n</head>\r\n\r\n<body class=\"d-flex flex-column h-100\">\r\n    <header>\r\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark\">\r\n            <div class=\"container\">\r\n                <a class=\"navbar-brand\" asp-area=\"\" asp-page=\"/Index\">Data Protection</a>\r\n            </div>\r\n        </nav>\r\n    </header>\r\n    <main class=\"flex-shrink-0\">\r\n        <div class=\"container mt-5 pt-3\">\r\n            @RenderBody()\r\n        </div>\r\n    </main>\r\n\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery-validation@1.19.3/dist/jquery.validate.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery-validation-unobtrusive@3.2.12/dist/jquery.validate.unobtrusive.min.js\"></script>\r\n</body>\r\n\r\n</html>\r\n"
  },
  {
    "path": "projects/security/dataprotection/redis-key-store/Pages/_ViewImports.cshtml",
    "content": "﻿@using PANC.DataProtection.RedisKeyStore\r\n@namespace PANC.DataProtection.RedisKeyStore.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/security/dataprotection/redis-key-store/Pages/_ViewStart.cshtml",
    "content": "@{\r\n    Layout = \"_Layout\";\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/redis-key-store/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.DataProtection;\r\nusing Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.Extensions.Configuration;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.Extensions.Hosting;\r\nusing StackExchange.Redis;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar configuration = builder.Configuration;\r\n\r\nvar redisServer = configuration[\"DataProtection:RedisServer\"];\r\nvar redisPassword = configuration[\"DataProtection:RedisPassword\"];\r\nvar redisKey = configuration[\"DataProtection:RedisKey\"];\r\nvar redis = ConnectionMultiplexer.Connect($\"{redisServer},password={redisPassword}\");\r\n\r\nbuilder.Services.AddDataProtection().PersistKeysToStackExchangeRedis(redis, redisKey);\r\nbuilder.Services.AddRazorPages();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\napp.UseAuthorization();\r\napp.MapRazorPages();\r\n\r\napp.Run();"
  },
  {
    "path": "projects/security/dataprotection/redis-key-store/README.md",
    "content": "Redis Key Store\r\n========\r\n\r\nThis sample showcases data protection with keys stored in Redis.\r\n\r\n* Package `Microsoft.AspNetCore.DataProtection.StackExchangeRedis` is added to the project.\r\n\r\n* Redis configuration is set up in appsettings.\r\n    ```\r\n    \"DataProtection\": \r\n    {\r\n        ...\r\n        \"RedisServer\": \"<your redis server>\",\r\n        \"RedisPassword\": \"<your redis password>\",\r\n        \"RedisKey\": \"dp-keys\"\r\n        ...\r\n    }\r\n    ```\r\n\r\n* Key persistence is set up in StartUp ConfigureServices().\r\n    ```\r\n    public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            ...\r\n            var redisServer = Configuration[\"DataProtection:RedisServer\"];\r\n            var redisPassword = Configuration[\"DataProtection:RedisPassword\"];\r\n            var redisKey = Configuration[\"DataProtection:RedisKey\"];\r\n            var redis = ConnectionMultiplexer.Connect($\"{redisServer},password={redisPassword}\");\r\n            services.AddDataProtection()\r\n                .PersistKeysToStackExchangeRedis(redis,redisKey);\r\n            ...\r\n        }\r\n    ```\r\n\r\n## Reference\r\n[Data Protection Key Persistence using Redis](https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers?view=aspnetcore-5.0&tabs=visual-studio#redis)\r\n\r\n## Screenshot\r\n<img src=\"assets/main-page.png\">\r\n\r\n## Credits\r\n[Lohith GN](https://github.com/lohithgn)\r\n\r\ndotnet6"
  },
  {
    "path": "projects/security/dataprotection/redis-key-store/RedisKeyStore.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.DataProtection.StackExchangeRedis\" Version=\"6.0.4\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/security/dataprotection/redis-key-store/appsettings.Development.json",
    "content": "{\r\n  \"DetailedErrors\": true,\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/security/dataprotection/redis-key-store/appsettings.json",
    "content": "{\r\n  \"DataProtection\": {\r\n    \"RedisServer\": \"localhost:6379\",\r\n    \"RedisPassword\": \"\",\r\n    \"RedisKey\": \"dp-keys\"\r\n  },\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/sfa/README.md",
    "content": "# Single File Application (2)\r\n\r\nSingle File Application (SFA) is software written in just a single file `Program.cs` and the project file. We will be using the latest version of .NET 6, ASP.NET Core 6 and C# 10. We will be using C# 9 top level statements extensively.\r\n\r\nThis style of development is not necessarily the best way to organize your code in production but it is **fun** to write small web apps this way. \r\n\r\n* [Wiki](wiki)\r\n\r\n  This is a wiki system with markdown support in less than 500 lines of code. Everything is written in a single `Program.cs`.\r\n\r\n\r\n* [Time Remaining](remaining-time)\r\n\r\n  This is a tiny system to generate chart of a project remaining time in weeks. Everything is written in a single `Program.cs`.  \r\n\r\n  dotnet6"
  },
  {
    "path": "projects/sfa/remaining-time/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var header = @\"<!doctype html>\r\n        <html lang=\"\"en\"\">\r\n        <head>\r\n            <link href=\"\"https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css\"\" rel=\"\"stylesheet\"\" integrity=\"\"sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU\"\" crossorigin=\"\"anonymous\"\">\r\n        </head>\r\n        <body>\r\n    \";\r\n\r\n    var footer = @\"</body></html>\";\r\n\r\n    var script = @\"\r\n    <script src=\"\"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js\"\" integrity=\"\"sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==\"\" crossorigin=\"\"anonymous\"\" referrerpolicy=\"\"no-referrer\"\"></script>\r\n    <script src=\"\"https://cdn.jsdelivr.net/npm/chart.js@3.5.1/dist/chart.min.js\"\" integrity=\"\"sha256-bC3LCZCwKeehY6T4fFi9VfOU0gztUa+S4cnkIhVPZ5E=\"\" crossorigin=\"\"anonymous\"\"></script>\r\n    <script src=\"\"https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2.0.0\"\"></script>\r\n    <script>\r\n        $(function()\r\n        {\r\n            $('#render').click(renderChart);\r\n        });\r\n\r\n        function renderChart(){\r\n            var progress = $('#progress').val();\r\n            var remaining = $('#total').val() - progress;\r\n            var ctx = document.getElementById('chart').getContext('2d');\r\n            var myChart = new Chart(ctx, {\r\n                type: 'doughnut',\r\n                plugins: [ChartDataLabels],\r\n                data: {\r\n                labels: [\r\n                    'So Far',\r\n                    'Remaining',\r\n                ],\r\n                datasets: [{\r\n                    label: 'Time Remaining',\r\n                    data: [progress, remaining],\r\n                    backgroundColor: [\r\n                    'rgb(255, 99, 132)',\r\n                    'rgb(54, 162, 235)',\r\n                    ],\r\n                    hoverOffset: 4\r\n                }]\r\n                },\r\n                options: {\r\n                    scales: {\r\n                        y: {\r\n                            beginAtZero: true\r\n                        }\r\n                    },\r\n                    plugins: {\r\n                        title: {\r\n                            display: true,\r\n                            text: 'Remaining Project Time (weeks)'\r\n                        },\r\n                        datalabels: {\r\n                            color: 'white',\r\n                            font: {\r\n                                size : '40px'\r\n                            },\r\n                        }\r\n                    },\r\n                    responsive : false\r\n                }\r\n            });\r\n        }\r\n    </script>\r\n    \";\r\n\r\n    var page = header + @\"\r\n        <div class=\"\"container\"\">\r\n        <h1>Remaining Time</h1>\r\n\r\n        <canvas id=\"\"chart\"\" width=\"\"600\"\" height=\"\"500\"\"></canvas>\r\n        <form>\r\n            <div class=\"\"row col-md-6\"\">\r\n                <div class=\"\"col\"\">\r\n                    <input type=\"\"number\"\" class=\"\"form-control\"\" step=\"\"1\"\" min=\"\"1\"\" placeholder=\"\"Progress\"\" id=\"\"progress\"\" value=\"\"0\"\">\r\n                </div>\r\n                <div class=\"\"col\"\">\r\n                    <input type=\"\"number\"\" class=\"\"form-control\"\" step=\"\"1\"\" placeholder=\"\"End\"\" id=\"\"total\"\" value=\"\"0\"\">\r\n                </div>\r\n                <div class=\"\"col\"\">\r\n                    <button type=\"\"button\"\" class=\"\"btn btn-primary\"\" id=\"\"render\"\">Render</button>\r\n                </div>\r\n            </div>\r\n        </form>\r\n        </div>\r\n        \" + script + footer;\r\n\r\n    return Results.Text(page, \"text/html\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/sfa/remaining-time/README.md",
    "content": "# Remaining Time\r\n\r\nThis is a simple program to visual the remaining weeks in a project. Everything is written in a single `program.cs` file.\r\n\r\nIt uses the following JavaScript components:\r\n\r\n* [chart.js](https://www.chartjs.org/)\r\n* [chartjs-plugin-datalables](https://chartjs-plugin-datalabels.netlify.app/guide/labels.html#multiple-labels)\r\n\r\n**Screenshot**\r\n![screenshot of the running program](remaining-time.png)"
  },
  {
    "path": "projects/sfa/remaining-time/remaining-time.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/sfa/wiki/Program.cs",
    "content": "using FluentValidation;\r\nusing FluentValidation.AspNetCore;\r\nusing Ganss.Xss;\r\nusing HtmlBuilders;\r\nusing LiteDB;\r\nusing Markdig;\r\nusing Microsoft.AspNetCore.Antiforgery;\r\nusing Microsoft.AspNetCore.Html;\r\nusing Microsoft.AspNetCore.Mvc.ModelBinding;\r\nusing Microsoft.Extensions.Caching.Memory;\r\nusing Microsoft.Extensions.Primitives;\r\nusing Scriban;\r\nusing System.Globalization;\r\nusing System.Text.RegularExpressions;\r\nusing static HtmlBuilders.HtmlTags;\r\n\r\nconst string DisplayDateFormat = \"MMMM dd, yyyy\";\r\nconst string HomePageName = \"home-page\";\r\nconst string HtmlMime = \"text/html\";\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services\r\n  .AddSingleton<Wiki>()\r\n  .AddSingleton<Render>()\r\n  .AddAntiforgery()\r\n  .AddMemoryCache();\r\n\r\nbuilder.Logging.AddConsole().SetMinimumLevel(LogLevel.Warning);\r\n\r\nvar app = builder.Build();\r\n\r\n// Load home page\r\napp.MapGet(\"/\", (Wiki wiki, Render render) =>\r\n{\r\n    Page? page = wiki.GetPage(HomePageName);\r\n\r\n    if (page is not object)\r\n        return Results.Redirect($\"/{HomePageName}\");\r\n\r\n    return Results.Text(render.BuildPage(HomePageName, atBody: () =>\r\n        new[]\r\n        {\r\n          RenderPageContent(page),\r\n          RenderPageAttachments(page),\r\n          A.Href($\"/edit?pageName={HomePageName}\").Class(\"uk-button uk-button-default uk-button-small\").Append(\"Edit\").ToHtmlString()\r\n        },\r\n        atSidePanel: () => AllPages(wiki)\r\n      ).ToString(), HtmlMime);\r\n});\r\n\r\napp.MapGet(\"/new-page\", (string? pageName) =>\r\n{\r\n    if (string.IsNullOrEmpty(pageName))\r\n        Results.Redirect(\"/\");\r\n\r\n    // Copied from https://www.30secondsofcode.org/c-sharp/s/to-kebab-case\r\n    string ToKebabCase(string str)\r\n    {\r\n        Regex pattern = new Regex(@\"[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+\");\r\n        return string.Join(\"-\", pattern.Matches(str)).ToLower();\r\n    }\r\n\r\n    var page = ToKebabCase(pageName!);\r\n    return Results.Redirect($\"/{page}\");\r\n});\r\n\r\n// Edit a wiki page\r\napp.MapGet(\"/edit\", (string pageName, HttpContext context, Wiki wiki, Render render, IAntiforgery antiForgery) =>\r\n{\r\n    Page? page = wiki.GetPage(pageName);\r\n    if (page is not object)\r\n        return Results.NotFound();\r\n\r\n    return Results.Text(render.BuildEditorPage(pageName,\r\n      atBody: () =>\r\n        new[]\r\n        {\r\n          BuildForm(new PageInput(page!.Id, pageName, page.Content, null), path: $\"{pageName}\", antiForgery: antiForgery.GetAndStoreTokens(context)),\r\n          RenderPageAttachmentsForEdit(page!, antiForgery.GetAndStoreTokens(context))\r\n        },\r\n      atSidePanel: () =>\r\n      {\r\n          var list = new List<string>();\r\n          // Do not show delete button on home page\r\n          if (!pageName!.ToString().Equals(HomePageName, StringComparison.Ordinal))\r\n              list.Add(RenderDeletePageButton(page!, antiForgery: antiForgery.GetAndStoreTokens(context)));\r\n\r\n          list.Add(Br.ToHtmlString());\r\n          list.AddRange(AllPagesForEditing(wiki));\r\n          return list;\r\n      }).ToString(), HtmlMime);\r\n});\r\n\r\n// Deal with attachment download\r\napp.MapGet(\"/attachment\", (string fileId, Wiki wiki) =>\r\n{\r\n    var file = wiki.GetFile(fileId);\r\n    if (file is not object)\r\n      return Results.NotFound();\r\n\r\n    app!.Logger.LogInformation(\"Attachment \" + file.Value.meta.Id + \" - \" + file.Value.meta.Filename);\r\n\r\n    return Results.File(file.Value.file, file.Value.meta.MimeType);\r\n});\r\n\r\n// Load a wiki page\r\napp.MapGet(\"/{pageName}\", (string pageName, HttpContext context, Wiki wiki, Render render, IAntiforgery antiForgery) =>\r\n{\r\n    pageName = pageName ?? \"\";\r\n\r\n    Page? page = wiki.GetPage(pageName);\r\n\r\n    if (page is object)\r\n    {\r\n        return Results.Text(render.BuildPage(pageName, atBody: () =>\r\n          new[]\r\n          {\r\n            RenderPageContent(page),\r\n            RenderPageAttachments(page),\r\n            Div.Class(\"last-modified\").Append(\"Last modified: \" + page!.LastModifiedUtc.ToString(DisplayDateFormat)).ToHtmlString(),\r\n            A.Href($\"/edit?pageName={pageName}\").Append(\"Edit\").ToHtmlString()\r\n          },\r\n          atSidePanel: () => AllPages(wiki)\r\n        ).ToString(), HtmlMime);\r\n    }\r\n    else\r\n    {\r\n        return Results.Text(render.BuildEditorPage(pageName,\r\n        atBody: () =>\r\n          new[]\r\n          {\r\n            BuildForm(new PageInput(null, pageName, string.Empty, null), path: pageName, antiForgery: antiForgery.GetAndStoreTokens(context))\r\n          },\r\n        atSidePanel: () => AllPagesForEditing(wiki)).ToString(), HtmlMime);\r\n    }\r\n});\r\n\r\n// Delete a page\r\napp.MapPost(\"/delete-page\", async (HttpContext context, IAntiforgery antiForgery, Wiki wiki) =>\r\n{\r\n    await antiForgery.ValidateRequestAsync(context);\r\n    var id = context.Request.Form[\"Id\"];\r\n\r\n    if (StringValues.IsNullOrEmpty(id))\r\n    {\r\n        app.Logger.LogWarning($\"Unable to delete page because form Id is missing\");\r\n        return Results.Redirect(\"/\");\r\n    }\r\n\r\n    var (isOk, exception) = wiki.DeletePage(Convert.ToInt32(id), HomePageName);\r\n\r\n    if (!isOk && exception is object)\r\n        app.Logger.LogError(exception, $\"Error in deleting page id {id}\");\r\n    else if (!isOk)\r\n        app.Logger.LogError($\"Unable to delete page id {id}\");\r\n\r\n    return Results.Redirect(\"/\");\r\n});\r\n\r\napp.MapPost(\"/delete-attachment\", async (HttpContext context, IAntiforgery antiForgery, Wiki wiki)=>\r\n{\r\n    await antiForgery.ValidateRequestAsync(context);\r\n    var id = context.Request.Form[\"Id\"];\r\n\r\n    if (StringValues.IsNullOrEmpty(id))\r\n    {\r\n        app.Logger.LogWarning($\"Unable to delete attachment because form Id is missing\");\r\n        return Results.Redirect(\"/\");\r\n    }\r\n\r\n    var pageId = context.Request.Form[\"PageId\"];\r\n    if (StringValues.IsNullOrEmpty(pageId))\r\n    {\r\n        app.Logger.LogWarning($\"Unable to delete attachment because form PageId is missing\");\r\n        return Results.Redirect(\"/\");\r\n    }\r\n\r\n    var (isOk, page, exception) = wiki.DeleteAttachment(Convert.ToInt32(pageId), id.ToString());\r\n\r\n    if (!isOk)\r\n    {\r\n        if (exception is object)\r\n            app.Logger.LogError(exception, $\"Error in deleting page attachment id {id}\");\r\n        else\r\n            app.Logger.LogError($\"Unable to delete page attachment id {id}\");\r\n\r\n        if (page is object)\r\n            return Results.Redirect($\"/{page.Name}\");\r\n        else\r\n            return Results.Redirect(\"/\");\r\n    }\r\n\r\n    return Results.Redirect($\"/{page!.Name}\");\r\n});\r\n\r\n// Add or update a wiki page\r\napp.MapPost(\"/{pageName}\", async (HttpContext context, Wiki wiki, Render render, IAntiforgery antiForgery)  =>\r\n{\r\n    var pageName = context.Request.RouteValues[\"pageName\"] as string ?? \"\";\r\n    await antiForgery.ValidateRequestAsync(context);\r\n\r\n    PageInput input = PageInput.From(context.Request.Form);\r\n\r\n    var modelState = new ModelStateDictionary();\r\n    var validator = new PageInputValidator(pageName, HomePageName);\r\n    validator.Validate(input).AddToModelState(modelState, null);\r\n\r\n    if (!modelState.IsValid)\r\n    {\r\n        return Results.Text(render.BuildEditorPage(pageName,\r\n          atBody: () =>\r\n            new[]\r\n            {\r\n              BuildForm(input, path: $\"{pageName}\", antiForgery: antiForgery.GetAndStoreTokens(context), modelState)\r\n            },\r\n          atSidePanel: () => AllPages(wiki)).ToString(), HtmlMime);\r\n    }\r\n\r\n    var (isOk, p, ex) = wiki.SavePage(input);\r\n    if (!isOk)\r\n    {\r\n        app.Logger.LogError(ex, \"Problem in saving page\");\r\n        return Results.Problem(\"Progblem in saving page\");\r\n    }\r\n\r\n    return Results.Redirect($\"/{p!.Name}\");\r\n});\r\n\r\nawait app.RunAsync();\r\n\r\n// End of the web part\r\n\r\nstatic string[] AllPages(Wiki wiki) => new[]\r\n{\r\n  @\"<span class=\"\"uk-label\"\">Pages</span>\",\r\n  @\"<ul class=\"\"uk-list\"\">\",\r\n  string.Join(\"\",\r\n    wiki.ListAllPages().OrderBy(x => x.Name)\r\n      .Select(x => Li.Append(A.Href(x.Name).Append(x.Name)).ToHtmlString()\r\n    )\r\n  ),\r\n  \"</ul>\"\r\n};\r\n\r\nstatic string[] AllPagesForEditing(Wiki wiki)\r\n{\r\n    static string KebabToNormalCase(string txt) => CultureInfo.CurrentCulture.TextInfo.ToTitleCase(txt.Replace('-', ' '));\r\n\r\n    return new[]\r\n    {\r\n      @\"<span class=\"\"uk-label\"\">Pages</span>\",\r\n      @\"<ul class=\"\"uk-list\"\">\",\r\n      string.Join(\"\",\r\n        wiki.ListAllPages().OrderBy(x => x.Name)\r\n          .Select(x => Li.Append(Div.Class(\"uk-inline\")\r\n              .Append(Span.Class(\"uk-form-icon\").Attribute(\"uk-icon\", \"icon: copy\"))\r\n              .Append(Input.Text.Value($\"[{KebabToNormalCase(x.Name)}](/{x.Name})\").Class(\"uk-input uk-form-small\").Style(\"cursor\", \"pointer\").Attribute(\"onclick\", \"copyMarkdownLink(this);\"))\r\n          ).ToHtmlString()\r\n        )\r\n      ),\r\n      \"</ul>\"\r\n    };\r\n}\r\n\r\nstatic string RenderMarkdown(string str)\r\n{\r\n    var sanitizer = new HtmlSanitizer();\r\n    return sanitizer.Sanitize(Markdown.ToHtml(str, new MarkdownPipelineBuilder().UseSoftlineBreakAsHardlineBreak().UseAdvancedExtensions().Build()));\r\n}\r\n\r\nstatic string RenderPageContent(Page page) => RenderMarkdown(page.Content);\r\n\r\nstatic string RenderDeletePageButton(Page page, AntiforgeryTokenSet antiForgery)\r\n{\r\n    var antiForgeryField = Input.Hidden.Name(antiForgery.FormFieldName).Value(antiForgery.RequestToken!);\r\n    HtmlTag id = Input.Hidden.Name(\"Id\").Value(page.Id.ToString());\r\n    var submit = Div.Style(\"margin-top\", \"20px\").Append(Button.Class(\"uk-button uk-button-danger\").Append(\"Delete Page\"));\r\n\r\n    var form = Form\r\n               .Attribute(\"method\", \"post\")\r\n               .Attribute(\"action\", $\"/delete-page\")\r\n               .Attribute(\"onsubmit\", $\"return confirm('Please confirm to delete this page');\")\r\n                 .Append(antiForgeryField)\r\n                 .Append(id)\r\n                 .Append(submit);\r\n\r\n    return form.ToHtmlString();\r\n}\r\n\r\nstatic string RenderPageAttachmentsForEdit(Page page, AntiforgeryTokenSet antiForgery)\r\n{\r\n    if (page.Attachments.Count == 0)\r\n        return string.Empty;\r\n\r\n    var label = Span.Class(\"uk-label\").Append(\"Attachments\");\r\n    var list = Ul.Class(\"uk-list\");\r\n\r\n    HtmlTag CreateEditorHelper(Attachment attachment) =>\r\n      Span.Class(\"uk-inline\")\r\n          .Append(Span.Class(\"uk-form-icon\").Attribute(\"uk-icon\", \"icon: copy\"))\r\n          .Append(Input.Text.Value($\"[{attachment.FileName}](/attachment?fileId={attachment.FileId})\")\r\n            .Class(\"uk-input uk-form-small uk-form-width-large\")\r\n            .Style(\"cursor\", \"pointer\")\r\n            .Attribute(\"onclick\", \"copyMarkdownLink(this);\")\r\n          );\r\n\r\n    static HtmlTag CreateDelete(int pageId, string attachmentId, AntiforgeryTokenSet antiForgery)\r\n    {\r\n        var antiForgeryField = Input.Hidden.Name(antiForgery.FormFieldName).Value(antiForgery.RequestToken!);\r\n        var id = Input.Hidden.Name(\"Id\").Value(attachmentId.ToString());\r\n        var name = Input.Hidden.Name(\"PageId\").Value(pageId.ToString());\r\n\r\n        var submit = Button.Class(\"uk-button uk-button-danger uk-button-small\").Append(Span.Attribute(\"uk-icon\", \"icon: close; ratio: .75;\"));\r\n        var form = Form\r\n               .Style(\"display\", \"inline\")\r\n               .Attribute(\"method\", \"post\")\r\n               .Attribute(\"action\", $\"/delete-attachment\")\r\n               .Attribute(\"onsubmit\", $\"return confirm('Please confirm to delete this attachment');\")\r\n                 .Append(antiForgeryField)\r\n                 .Append(id)\r\n                 .Append(name)\r\n                 .Append(submit);\r\n\r\n        return form;\r\n    }\r\n\r\n    foreach (var attachment in page.Attachments)\r\n    {\r\n        list = list.Append(Li\r\n          .Append(CreateEditorHelper(attachment))\r\n          .Append(CreateDelete(page.Id, attachment.FileId, antiForgery))\r\n        );\r\n    }\r\n    return label.ToHtmlString() + list.ToHtmlString();\r\n}\r\n\r\nstatic string RenderPageAttachments(Page page)\r\n{\r\n    if (page.Attachments.Count == 0)\r\n        return string.Empty;\r\n\r\n    var label = Span.Class(\"uk-label\").Append(\"Attachments\");\r\n    var list = Ul.Class(\"uk-list uk-list-disc\");\r\n    foreach (var attachment in page.Attachments)\r\n    {\r\n        list = list.Append(Li.Append(A.Href($\"/attachment?fileId={attachment.FileId}\").Append(attachment.FileName)));\r\n    }\r\n    return label.ToHtmlString() + list.ToHtmlString();\r\n}\r\n\r\n// Build the wiki input form \r\nstatic string BuildForm(PageInput input, string path, AntiforgeryTokenSet antiForgery, ModelStateDictionary? modelState = null)\r\n{\r\n    bool IsFieldOK(string key) => modelState!.ContainsKey(key) && modelState[key]!.ValidationState == ModelValidationState.Invalid;\r\n\r\n    var antiForgeryField = Input.Hidden.Name(antiForgery.FormFieldName).Value(antiForgery.RequestToken!);\r\n\r\n    var nameField = Div\r\n      .Append(Label.Class(\"uk-form-label\").Append(nameof(input.Name)))\r\n      .Append(Div.Class(\"uk-form-controls\")\r\n        .Append(Input.Text.Class(\"uk-input\").Name(\"Name\").Value(input.Name))\r\n      );\r\n\r\n    var contentField = Div\r\n      .Append(Label.Class(\"uk-form-label\").Append(nameof(input.Content)))\r\n      .Append(Div.Class(\"uk-form-controls\")\r\n        .Append(Textarea.Name(\"Content\").Class(\"uk-textarea\").Append(input.Content))\r\n      );\r\n\r\n    var attachmentField = Div\r\n      .Append(Label.Class(\"uk-form-label\").Append(nameof(input.Attachment)))\r\n      .Append(Div.Attribute(\"uk-form-custom\", \"target: true\")\r\n        .Append(Input.File.Name(\"Attachment\"))\r\n        .Append(Input.Text.Class(\"uk-input uk-form-width-large\").Attribute(\"placeholder\", \"Click to select file\").ToggleAttribute(\"disabled\", true))\r\n      );\r\n\r\n    if (modelState is object && !modelState.IsValid)\r\n    {\r\n        if (IsFieldOK(\"Name\"))\r\n        {\r\n            foreach (var er in modelState[\"Name\"]!.Errors)\r\n            {\r\n                nameField = nameField.Append(Div.Class(\"uk-form-danger uk-text-small\").Append(er.ErrorMessage));\r\n            }\r\n        }\r\n\r\n        if (IsFieldOK(\"Content\"))\r\n        {\r\n            foreach (var er in modelState[\"Content\"]!.Errors)\r\n            {\r\n                contentField = contentField.Append(Div.Class(\"uk-form-danger uk-text-small\").Append(er.ErrorMessage));\r\n            }\r\n        }\r\n    }\r\n\r\n    var submit = Div.Style(\"margin-top\", \"20px\").Append(Button.Class(\"uk-button uk-button-primary\").Append(\"Submit\"));\r\n\r\n    var form = Form\r\n               .Class(\"uk-form-stacked\")\r\n               .Attribute(\"method\", \"post\")\r\n               .Attribute(\"enctype\", \"multipart/form-data\")\r\n               .Attribute(\"action\", $\"/{path}\")\r\n                 .Append(antiForgeryField)\r\n                 .Append(nameField)\r\n                 .Append(contentField)\r\n                 .Append(attachmentField);\r\n\r\n    if (input.Id is object)\r\n    {\r\n        HtmlTag id = Input.Hidden.Name(\"Id\").Value(input.Id.ToString()!);\r\n        form = form.Append(id);\r\n    }\r\n\r\n    form = form.Append(submit);\r\n\r\n    return form.ToHtmlString();\r\n}\r\n\r\nclass Render\r\n{\r\n    static string KebabToNormalCase(string txt) => CultureInfo.CurrentCulture.TextInfo.ToTitleCase(txt.Replace('-', ' '));\r\n\r\n    static string[] MarkdownEditorHead() => new[]\r\n    {\r\n      @\"<link rel=\"\"stylesheet\"\" href=\"\"https://unpkg.com/easymde/dist/easymde.min.css\"\">\",\r\n      @\"<script src=\"\"https://unpkg.com/easymde/dist/easymde.min.js\"\"></script>\"\r\n    };\r\n\r\n    static string[] MarkdownEditorFoot() => new[]\r\n    {\r\n      @\"<script>\r\n        var easyMDE = new EasyMDE({\r\n          insertTexts: {\r\n            link: [\"\"[\"\", \"\"]()\"\"]\r\n          }\r\n        });\r\n\r\n        function copyMarkdownLink(element) {\r\n          element.select();\r\n          document.execCommand(\"\"copy\"\");\r\n        }\r\n        </script>\"\r\n    };\r\n\r\n    (Template head, Template body, Template layout) _templates = (\r\n      head: Scriban.Template.Parse(\r\n        \"\"\"\r\n          <meta charset=\"utf-8\">\r\n          <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n          <title>{{ title }}</title>\r\n          <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/uikit@3.19.4/dist/css/uikit.min.css\" />\r\n          {{ header }}\r\n          <style>\r\n            .last-modified { font-size: small; }\r\n            a:visited { color: blue; }\r\n            a:link { color: red; }\r\n          </style>\r\n          \"\"\"),\r\n      body: Scriban.Template.Parse(\"\"\"\r\n                <nav class=\"uk-navbar-container\">\r\n                  <div class=\"uk-container\">\r\n                    <div class=\"uk-navbar\">\r\n                      <div class=\"uk-navbar-left\">\r\n                        <ul class=\"uk-navbar-nav\">\r\n                          <li class=\"uk-active\"><a href=\"/\"><span uk-icon=\"home\"></span></a></li>\r\n                        </ul>\r\n                      </div>\r\n                      <div class=\"uk-navbar-center\">\r\n                        <div class=\"uk-navbar-item\">\r\n                          <form action=\"/new-page\">\r\n                            <input class=\"uk-input uk-form-width-large\" type=\"text\" name=\"pageName\" placeholder=\"Type desired page title here\"></input>\r\n                            <input type=\"submit\"  class=\"uk-button uk-button-default\" value=\"Add New Page\">\r\n                          </form>\r\n                        </div>\r\n                      </div>\r\n                    </div>\r\n                  </div>\r\n                </nav>\r\n                {{ if at_side_panel != \"\" }}\r\n                  <div class=\"uk-container\">\r\n                  <div uk-grid>\r\n                    <div class=\"uk-width-4-5\">\r\n                      <h1>{{ page_name }}</h1>\r\n                      {{ content }}\r\n                    </div>\r\n                    <div class=\"uk-width-1-5\">\r\n                      {{ at_side_panel }}\r\n                    </div>\r\n                  </div>\r\n                  </div>\r\n                {{ else }}\r\n                  <div class=\"uk-container\">\r\n                    <h1>{{ page_name }}</h1>\r\n                    {{ content }}\r\n                  </div>\r\n                {{ end }}\r\n                      \r\n                <script src=\"https://cdn.jsdelivr.net/npm/uikit@3.19.4/dist/js/uikit.min.js\"></script>\r\n                <script src=\"https://cdn.jsdelivr.net/npm/uikit@3.19.4/dist/js/uikit-icons.min.js\"></script>\r\n                {{ at_foot }}\r\n                \r\n          \"\"\"),\r\n      layout: Scriban.Template.Parse(\"\"\"\r\n                <!DOCTYPE html>\r\n                  <head>\r\n                    {{ head }}\r\n                  </head>\r\n                  <body>\r\n                    {{ body }}\r\n                  </body>\r\n                </html>\r\n          \"\"\")\r\n    );\r\n\r\n    // Use only when the page requires editor\r\n    public HtmlString BuildEditorPage(string title, Func<IEnumerable<string>> atBody, Func<IEnumerable<string>>? atSidePanel = null) =>\r\n      BuildPage(\r\n        title,\r\n        atHead: () => MarkdownEditorHead(),\r\n        atBody: atBody,\r\n        atSidePanel: atSidePanel,\r\n        atFoot: () => MarkdownEditorFoot()\r\n        );\r\n\r\n    // General page layout building function\r\n    public HtmlString BuildPage(string title, Func<IEnumerable<string>>? atHead = null, Func<IEnumerable<string>>? atBody = null, Func<IEnumerable<string>>? atSidePanel = null, Func<IEnumerable<string>>? atFoot = null)\r\n    {\r\n        var head = _templates.head.Render(new\r\n        {\r\n            title,\r\n            header = string.Join(\"\\r\", atHead?.Invoke() ?? new[] { \"\" })\r\n        });\r\n\r\n        var body = _templates.body.Render(new\r\n        {\r\n            PageName = KebabToNormalCase(title),\r\n            Content = string.Join(\"\\r\", atBody?.Invoke() ?? new[] { \"\" }),\r\n            AtSidePanel = string.Join(\"\\r\", atSidePanel?.Invoke() ?? new[] { \"\" }),\r\n            AtFoot = string.Join(\"\\r\", atFoot?.Invoke() ?? new[] { \"\" })\r\n        });\r\n\r\n        return new HtmlString(_templates.layout.Render(new { head, body }));\r\n    }\r\n}\r\n\r\nclass Wiki\r\n{\r\n    DateTime Timestamp() => DateTime.UtcNow;\r\n\r\n    const string PageCollectionName = \"Pages\";\r\n    const string AllPagesKey = \"AllPages\";\r\n    const double CacheAllPagesForMinutes = 30;\r\n\r\n    readonly IWebHostEnvironment _env;\r\n    readonly IMemoryCache _cache;\r\n    readonly ILogger _logger;\r\n\r\n    public Wiki(IWebHostEnvironment env, IMemoryCache cache, ILogger<Wiki> logger)\r\n    {\r\n        _env = env;\r\n        _cache = cache;\r\n        _logger = logger;\r\n    }\r\n\r\n    // Get the location of the LiteDB file.\r\n    string GetDbPath() => Path.Combine(_env.ContentRootPath, \"wiki.db\");\r\n\r\n    // List all the available wiki pages. It is cached for 30 minutes.\r\n    public List<Page> ListAllPages()\r\n    {\r\n        var pages = _cache.Get(AllPagesKey) as List<Page>;\r\n\r\n        if (pages is object)\r\n            return pages;\r\n\r\n        using var db = new LiteDatabase(GetDbPath());\r\n        var coll = db.GetCollection<Page>(PageCollectionName);\r\n        var items = coll.Query().ToList();\r\n\r\n        _cache.Set(AllPagesKey, items, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(CacheAllPagesForMinutes)));\r\n        return items;\r\n    }\r\n\r\n    // Get a wiki page based on its path\r\n    public Page? GetPage(string path)\r\n    {\r\n        using var db = new LiteDatabase(GetDbPath());\r\n        var coll = db.GetCollection<Page>(PageCollectionName);\r\n        coll.EnsureIndex(x => x.Name);\r\n\r\n        return coll.Query()\r\n                .Where(x => x.Name.Equals(path, StringComparison.OrdinalIgnoreCase))\r\n                .FirstOrDefault();\r\n    }\r\n\r\n    // Save or update a wiki page. Cache(AllPagesKey) will be destroyed.\r\n    public (bool isOk, Page? page, Exception? ex) SavePage(PageInput input)\r\n    {\r\n        try\r\n        {\r\n            using var db = new LiteDatabase(GetDbPath());\r\n            var coll = db.GetCollection<Page>(PageCollectionName);\r\n            coll.EnsureIndex(x => x.Name);\r\n\r\n            Page? existingPage = input.Id.HasValue ? coll.FindOne(x => x.Id == input.Id) : null;\r\n\r\n            var sanitizer = new HtmlSanitizer();\r\n            var properName = input.Name.ToString().Trim().Replace(' ', '-').ToLower();\r\n\r\n            Attachment? attachment = null;\r\n            if (!string.IsNullOrWhiteSpace(input.Attachment?.FileName))\r\n            {\r\n                attachment = new Attachment\r\n                (\r\n                    FileId: Guid.NewGuid().ToString(),\r\n                    FileName: input.Attachment.FileName,\r\n                    MimeType: input.Attachment.ContentType,\r\n                    LastModifiedUtc: Timestamp()\r\n                );\r\n\r\n                using var stream = input.Attachment.OpenReadStream();\r\n                var res = db.FileStorage.Upload(attachment.FileId, input.Attachment.FileName, stream);\r\n            }\r\n\r\n            if (existingPage is not object)\r\n            {\r\n                var newPage = new Page\r\n                {\r\n                    Name = sanitizer.Sanitize(properName),\r\n                    Content = input.Content, //Do not sanitize on input because it will impact some markdown tag such as >. We do it on the output instead.\r\n                    LastModifiedUtc = Timestamp()\r\n                };\r\n\r\n                if (attachment is object)\r\n                    newPage.Attachments.Add(attachment);\r\n\r\n                coll.Insert(newPage);\r\n\r\n                _cache.Remove(AllPagesKey);\r\n                return (true, newPage, null);\r\n            }\r\n            else\r\n            {\r\n                var updatedPage = existingPage with\r\n                {\r\n                    Name = sanitizer.Sanitize(properName),\r\n                    Content = input.Content, //Do not sanitize on input because it will impact some markdown tag such as >. We do it on the output instead.\r\n                    LastModifiedUtc = Timestamp()\r\n                };\r\n\r\n                if (attachment is object)\r\n                    updatedPage.Attachments.Add(attachment);\r\n\r\n                coll.Update(updatedPage);\r\n\r\n                _cache.Remove(AllPagesKey);\r\n                return (true, updatedPage, null);\r\n            }\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            _logger.LogError(ex, $\"There is an exception in trying to save page name '{input.Name}'\");\r\n            return (false, null, ex);\r\n        }\r\n    }\r\n\r\n    public (bool isOk, Page? p, Exception? ex) DeleteAttachment(int pageId, string id)\r\n    {\r\n        try\r\n        {\r\n            using var db = new LiteDatabase(GetDbPath());\r\n            var coll = db.GetCollection<Page>(PageCollectionName);\r\n            var page = coll.FindById(pageId);\r\n            if (page is not object)\r\n            {\r\n                _logger.LogWarning($\"Delete attachment operation fails because page id {id} cannot be found in the database\");\r\n                return (false, null, null);\r\n            }\r\n\r\n            if (!db.FileStorage.Delete(id))\r\n            {\r\n                _logger.LogWarning($\"We cannot delete this file attachment id {id} and it's a mystery why\");\r\n                return (false, page, null);\r\n            }\r\n\r\n            page.Attachments.RemoveAll(x => x.FileId.Equals(id, StringComparison.OrdinalIgnoreCase));\r\n\r\n            var updateResult = coll.Update(page);\r\n\r\n            if (!updateResult)\r\n            {\r\n                _logger.LogWarning($\"Delete attachment works but updating the page (id {pageId}) attachment list fails\");\r\n                return (false, page, null);\r\n            }\r\n\r\n            return (true, page, null);\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            return (false, null, ex);\r\n        }\r\n    }\r\n\r\n    public (bool isOk, Exception? ex) DeletePage(int id, string homePageName)\r\n    {\r\n        try\r\n        {\r\n            using var db = new LiteDatabase(GetDbPath());\r\n            var coll = db.GetCollection<Page>(PageCollectionName);\r\n\r\n            var page = coll.FindById(id);\r\n\r\n            if (page is not object)\r\n            {\r\n                _logger.LogWarning($\"Delete operation fails because page id {id} cannot be found in the database\");\r\n                return (false, null);\r\n            }\r\n\r\n            if (page.Name.Equals(homePageName, StringComparison.OrdinalIgnoreCase))\r\n            {\r\n                _logger.LogWarning($\"Page id {id}  is a home page and elete operation on home page is not allowed\");\r\n                return (false, null);\r\n            }\r\n\r\n            //Delete all the attachments\r\n            foreach (var a in page.Attachments)\r\n            {\r\n                db.FileStorage.Delete(a.FileId);\r\n            }\r\n\r\n            if (coll.Delete(id))\r\n            {\r\n                _cache.Remove(AllPagesKey);\r\n                return (true, null);\r\n            }\r\n\r\n            _logger.LogWarning($\"Somehow we cannot delete page id {id} and it's a mistery why.\");\r\n            return (false, null);\r\n        }\r\n        catch (Exception ex)\r\n        {\r\n            return (false, ex);\r\n        }\r\n    }\r\n\r\n    // Return null if file cannot be found.\r\n    public (LiteFileInfo<string> meta, byte[] file)? GetFile(string fileId)\r\n    {\r\n        using var db = new LiteDatabase(GetDbPath());\r\n\r\n        var meta = db.FileStorage.FindById(fileId);\r\n        if (meta is not object)\r\n            return null;\r\n\r\n        using var stream = new MemoryStream();\r\n        db.FileStorage.Download(fileId, stream);\r\n        return (meta, stream.ToArray());\r\n    }\r\n}\r\n\r\nrecord Page\r\n{\r\n    public int Id { get; set; }\r\n\r\n    public string Name { get; set; } = string.Empty;\r\n\r\n    public string Content { get; set; } = string.Empty;\r\n\r\n    public DateTime LastModifiedUtc { get; set; }\r\n\r\n    public List<Attachment> Attachments { get; set; } = new();\r\n}\r\n\r\nrecord Attachment\r\n(\r\n    string FileId,\r\n\r\n    string FileName,\r\n\r\n    string MimeType,\r\n\r\n    DateTime LastModifiedUtc\r\n);\r\n\r\nrecord PageInput(int? Id, string Name, string Content, IFormFile? Attachment)\r\n{\r\n    public static PageInput From(IFormCollection form)\r\n    {\r\n        var (id, name, content) = (form[\"Id\"], form[\"Name\"], form[\"Content\"]);\r\n\r\n        int? pageId = null;\r\n\r\n        if (!StringValues.IsNullOrEmpty(id))\r\n            pageId = Convert.ToInt32(id);\r\n\r\n        IFormFile? file = form.Files[\"Attachment\"];\r\n\r\n        return new PageInput(pageId, name!, content!, file);\r\n    }\r\n}\r\n\r\nclass PageInputValidator : AbstractValidator<PageInput>\r\n{\r\n    public PageInputValidator(string pageName, string homePageName)\r\n    {\r\n        RuleFor(x => x.Name).NotEmpty().WithMessage(\"Name is required\");\r\n        if (pageName.Equals(homePageName, StringComparison.OrdinalIgnoreCase))\r\n            RuleFor(x => x.Name).Must(name => name.Equals(homePageName)).WithMessage($\"You cannot modify home page name. Please keep it {homePageName}\");\r\n\r\n        RuleFor(x => x.Content).NotEmpty().WithMessage(\"Content is required\");\r\n    }\r\n}"
  },
  {
    "path": "projects/sfa/wiki/README.md",
    "content": "# Wiki\r\n\r\nThis is a Single File Application (SFA) that provide wiki functionality.\r\n\r\n- It supports markdown\r\n- You can rename pages\r\n- It is stored using LiteDB\r\n- It has a nice markdown editor\r\n- You can upload attachments in every page\r\n- You can delete attachments\r\n- You can delete pages\r\n- It has pages and attachment markdown linking helpers\r\n\r\nAll the code (810 lines) is contained within `Program.cs`. \r\n\r\nUsed libraries:\r\n\r\n* Storage - [LiteDB](https://github.com/mbdavid/LiteDB).\r\n* Text Template - [Scriban](https://github.com/lunet-io/scriban).\r\n* Markdown Support - [Markdig](https://github.com/lunet-io/markdig).\r\n* Validation - [FluentValidation](https://github.com/FluentValidation/FluentValidation).\r\n* Html Generation - [HtmlBuilders](https://github.com/amoerie/HtmlBuilders).\r\n* Markdown Editor - [EasyMDE](https://github.com/Ionaru/easy-markdown-editor).\r\n* Sanitizing Input - [HtmlSanitizer](https://github.com/mganss/HtmlSanitizer).\r\n\r\n**Screenshot**\r\n![screenshot of the running wiki](fanon.png)\r\n\r\ndotnet6"
  },
  {
    "path": "projects/sfa/wiki/wiki.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <Nullable>enable</Nullable>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Scriban\" Version=\"5.10.0\" />\r\n    <PackageReference Include=\"Markdig\" Version=\"0.37.0\" />\r\n    <PackageReference Include=\"LiteDB\" Version=\"5.0.19\" />\r\n    <PackageReference Include=\"HtmlBuilders\" Version=\"7.2.0\" />\r\n    <PackageReference Include=\"HtmlSanitizer\" Version=\"8.1.860-beta\" />\r\n    <PackageReference Include=\"FluentValidation.AspNetCore\" Version=\"11.3.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/sfa/wiki/wiki.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"wiki\", \"wiki.csproj\", \"{BD4F3D16-D4B7-4663-B4AB-72BDBEA7391B}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BD4F3D16-D4B7-4663-B4AB-72BDBEA7391B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BD4F3D16-D4B7-4663-B4AB-72BDBEA7391B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BD4F3D16-D4B7-4663-B4AB-72BDBEA7391B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BD4F3D16-D4B7-4663-B4AB-72BDBEA7391B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {66E15924-BA6C-475F-979B-999AE50E98EE}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/signalr/README.md",
    "content": "# SignalR (1)\r\n\r\n* [Public Chat](/projects/signalr/signalr-1)\r\n  \r\n  This is the 'hello world' of SignalR. It demonstrates accessing SignalR from a JavaScript client.\r\n"
  },
  {
    "path": "projects/signalr/signalr-1/.gitignore",
    "content": "node_modules/\r\nbin/\r\nobj/"
  },
  {
    "path": "projects/signalr/signalr-1/Client/Client.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/signalr/signalr-1/Client/Controllers/HomeController.cs",
    "content": "using Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace PracticalAspNetCore\r\n{\r\n    public class HomeController : Controller\r\n    {\r\n        [Route(\"/\")]\r\n        public IActionResult Index() => View();\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/signalr/signalr-1/Client/Program.cs",
    "content": "﻿using Microsoft.Extensions.FileProviders;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\nbuilder.WebHost.UseUrls(\"http://localhost:5002/\");\r\n\r\nvar app = builder.Build();\r\napp.UseStaticFiles();\r\napp.UseStaticFiles(new StaticFileOptions()\r\n{\r\n    FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @\"node_modules\")),\r\n    RequestPath = new PathString(\"/node_modules\")\r\n});\r\n\r\napp.UseRouting();\r\napp.MapDefaultControllerRoute();\r\napp.Run();\r\n"
  },
  {
    "path": "projects/signalr/signalr-1/Client/Views/Home/Index.cshtml",
    "content": "<strong>Note: don't forget to run <i>npm install</i> to install the javascript client</strong>\r\n<br/>\r\n<strong>Also open two tabs at least</strong>\r\n<h2>All Messages</h2>\r\n\r\n<ul id=\"msgs\"></ul>\r\n\r\n<hr>\r\n\r\n<input type=\"text\" id=\"msg\" placeholder=\"Enter Message\" />\r\n<input type=\"button\" id=\"send\" value=\"Send\" />\r\n\r\n@section scripts {\r\n<script>\r\n    $(function () {\r\n        //we are connecting on secure connection to the signalR server\r\n        const connection = new signalR.HubConnectionBuilder()\r\n                   .withUrl(\"https://localhost:5001/chathub\")\r\n                   .build();\r\n    \r\n        connection.start().catch(err => console.error);\r\n\r\n        $(\"#send\").click(function () {\r\n            connection.invoke('Send', $('#msg').val());\r\n        });\r\n\r\n        connection.on('Send', data => {\r\n            $('#msgs').append($('<li>').text(data));\r\n        });\r\n    });\r\n</script>\r\n}"
  },
  {
    "path": "projects/signalr/signalr-1/Client/Views/Shared/_Layout.cshtml",
    "content": "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n    <meta name=\"viewport\" content=\"width=device-width\" />\r\n    <title>ASP.NET Core SignalR</title>\r\n\r\n    <script src=\"/node_modules/@@microsoft/signalr/dist/browser/signalr.js\"></script>\r\n    <script src=\"https://code.jquery.com/jquery-3.3.1.slim.min.js\" integrity=\"sha256-3edrmyuQ0w65f8gfBsqowzjJe2iM6n0nKciPUp8y+7E=\" crossorigin=\"anonymous\"></script>\r\n</head>\r\n<body>\r\n    <div>\r\n        @RenderBody()\r\n        @RenderSection(\"scripts\", required: false)\r\n    </div>\r\n</body>\r\n</html>"
  },
  {
    "path": "projects/signalr/signalr-1/Client/Views/_ViewStart.cshtml",
    "content": "@{\r\n    Layout = \"_Layout\";\r\n}"
  },
  {
    "path": "projects/signalr/signalr-1/Client/package.json",
    "content": "{\r\n  \"dependencies\": {\r\n    \"@microsoft/signalr\": \"^6.0.4\"\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/signalr/signalr-1/Readme.md",
    "content": "## Simple example of ASP.NET Core 6.0 and SignalR Core\r\n\r\n1. Run `npm install` at `Client` directory.\r\n2. To run just execute `dotnet run` inside both `Client` and `Server` directory in separate clis.\r\n3. Go to `http://localhost:5001` in two tabs\r\n4. Start chatting away (kinda)\r\n"
  },
  {
    "path": "projects/signalr/signalr-1/Server/Program.cs",
    "content": "﻿using Microsoft.AspNetCore.SignalR;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddCors(options =>\r\n        {\r\n            options.AddPolicy(\"all\",\r\n                policy => policy.WithOrigins(\"http://localhost:5002\")\r\n                                .AllowAnyHeader()\r\n                                .AllowAnyMethod()\r\n                                .AllowCredentials());\r\n        });\r\n\r\nbuilder.Services.AddSignalR().AddJsonProtocol();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseHttpsRedirection();\r\napp.UseStaticFiles();\r\n\r\napp.UseCors(\"all\");\r\napp.MapHub<ChatHub>(\"/chatHub\");\r\n\r\napp.Run(async context =>\r\n{\r\n    await context.Response.WriteAsync(\"This site host signalR server that allows remote clients to access thanks to CORS all policy.\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class ChatHub : Hub\r\n{\r\n    public async Task Send(string message)\r\n    {\r\n        await this.Clients.All.SendAsync(\"Send\", message);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/signalr/signalr-1/Server/signalr.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/sse/Program.cs",
    "content": "using System.Runtime.CompilerServices;\n\nusing System.Runtime.CompilerServices;\n\nvar builder = WebApplication.CreateBuilder();\nvar app = builder.Build();\n\nasync IAsyncEnumerable<string> CounterAsync([EnumeratorCancellation] CancellationToken cancellationToken)\n{\n    int count = 0;\n    while (true && !cancellationToken.IsCancellationRequested)\n    {\n        yield return $\"hello world {++count}\";\n        await Task.Delay(3000, cancellationToken);\n    }\n}\n\n    if (context.Request.Headers.Accept == \"text/event-stream\")\n    {\n        return Results.ServerSentEvents(CounterAsync(cancellationToken), eventType: \"greeting\");\n    }\n    else\n    {\n        return Results.BadRequest(\"Unsupported Accept header. Use 'text/event-stream'.\");\n    }\n});\n\n    app.MapGet(\"/\", async context =>\n{\n    await context.Response.WriteAsync(@\"\n<html>\n    <head>\n    </head>\n    <body>\n        <h1>SSE with Built-in Support</h1>\n        <ul id=\"\"list\"\"></ul>\n        <script>\n            console.log('Connecting to SSE...');\n            var source = new EventSource('/sse');\n            source.onopen = function(event) {\n                console.log('Connection opened:', event);\n            };\n            source.onmessage = function(e) {\n                var item = document.createElement('li');\n                item.textContent = e.data;\n                list.appendChild(item);\n            };\n            source.onerror = function(event) {\n                console.log(event);\n            }\n        </script>\n    </body>\n</html>\n    \");\n});\n\napp.Run();\n\r\nIEnumerable<int> Counter()\r\n{\r\n    int count = 0;\r\n    while (true)\r\n    {\r\n        yield return ++count;\r\n    }\r\n}"
  },
  {
    "path": "projects/sse/README.md",
    "content": "# Built-in Server-Sent Events\n\nThis sample demonstrates ASP.NET Core 10's built-in Server-Sent Events (SSE) support using `Results.ServerSentEvents()`.\n\n## Running the Sample\n\n```bash\ndotnet watch run\n```\n\nNavigate to `http://localhost:5000/` to see the SSE client in action.\n\n## Key Features\n\n- Built-in SSE support via `Results.ServerSentEvents()`\n- Type-safe with `IAsyncEnumerable<string>`\n- Automatic flush management\n- Proper cancellation token handling\n- No manual protocol implementation needed\n\n## How It Works\n\nThe endpoint returns `Results.ServerSentEvents()` with an `IAsyncEnumerable<string>`:\n\n```csharp\napp.MapGet(\"/sse\", (HttpContext context, CancellationToken cancellationToken) =>\n{\n    async IAsyncEnumerable<string> CounterAsync([EnumeratorCancellation] CancellationToken cancellationToken)\n    {\n        int count = 0;\n        while (true && !cancellationToken.IsCancellationRequested)\n        {\n            yield return $\"hello world {++count}\";\n            await Task.Delay(3000, cancellationToken);\n        }\n    }\n\n    if (context.Request.Headers[\"Accept\"] == \"text/event-stream\")\n    {\n        return Results.ServerSentEvents(CounterAsync(cancellationToken), eventType: \"greeting\");\n    }\n    else\n    {\n        return Results.BadRequest(\"Unsupported Accept header. Use 'text/event-stream'.\");\n    }\n});\n\napp.MapGet(\"/\", async context =>\n{\n    await context.Response.WriteAsync(@\"\n<html>\n    <head>\n    </head>\n    <body>\n        <h1>SSE with Built-in Support</h1>\n        <ul id=\"list\"\"></ul>\n        <script>\n            console.log('Connecting to SSE...');\n            var source = new EventSource('/sse');\n            source.onopen = function(event) {\n                console.log('Connection opened:', event);\n            };\n            source.onmessage = function(e) {\n                var item = document.createElement('li');\n                item.textContent = e.data;\n                list.appendChild(item);\n            };\n            source.onerror = function(event) {\n                console.log(event);\n            }\n        </script>\n    </body>\n</html>\n    \");\n});\n\napp.Run();"
  },
  {
    "path": "projects/sse/sse.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/sse/sse.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"sse\", \"sse.csproj\", \"{F688D32A-78A1-4F19-AC33-6F9181074B14}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{F688D32A-78A1-4F19-AC33-6F9181074B14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{F688D32A-78A1-4F19-AC33-6F9181074B14}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{F688D32A-78A1-4F19-AC33-6F9181074B14}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F688D32A-78A1-4F19-AC33-6F9181074B14}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {5453C324-BECC-4693-8651-FC5A83EB6B99}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/starting-developer/README.md",
    "content": "# Starting Developer Guide (Work in Progress)\r\n\r\nThis is a guide designed for people who are starting web development. I would assume a basic skill in C# programming language. \r\n\r\n## The Plan \r\n\r\nWrite \"Getting Started\" tutorial:\r\n\r\n- Where to download vscode.\r\n- Where to download the .NET Core 3.1 SDK.\r\n- How to run the samples. Ask the reader to run the hello world sample to make sure that they can get the environment working. \r\n\r\nThen introduce them to the basics:\r\n\r\n- Hello World\r\n- How to read and write cookies\r\n- How to get values from query string\r\n- How to obtain value from HTML form\r\n- How to handle upload files\r\n- How to read from and write to HTTP headers.\r\n- How to allow static files files\r\n- How to return JSON output\r\n- How to handle routes \r\n- How to log your app\r\n- How to change the port of the webserver\r\n- How to use TLS\r\n- How to show exceptions during development\r\n- etc\r\n\r\nData:\r\n- How to use it with a database (EF, Dapper, RepoDB)\r\n- How to use it with Redis\r\n- Etc\r\n\r\nHow to pair it with JavaScript frameworks\r\n- AngularJs\r\n- VueJs\r\n- SvelteJs\r\n- ReactJs\r\n\r\nApplication Framework:\r\n- Razor Pages\r\n- MVC\r\n- Blazor Server Side\r\n- Blazor \r\n- SignalR\r\n- etc"
  },
  {
    "path": "projects/syndications/README.md",
    "content": "# Syndications (3)\r\n\r\n  We are using ```Microsoft.SyndicationFeed.ReaderWriter``` package to read RSS and ATOM feeds.\r\n\r\n  * [Syndication - Read RSS](/projects/syndications/syndication-1)\r\n\r\n    This is the shortest amount of code to read an RSS feed. This example read the feed from the inventor of RSS, Dave Winer at http://scripting.com/rss.xml. \r\n  \r\n  * [Syndication - Read RSS with extensions](/projects/syndications/syndication-2)\r\n\r\n    This sample process RSS Outline Extension. \r\n\r\n  *  [Syndication - NewsServer](/projects/syndications/newsserver-mvc)\r\n\r\n     RSS reader demo using ```Microsoft.ServiceModel.Syndication```.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/syndications/build.bat",
    "content": "dotnet build newsserver-mvc\r\ndotnet build syndication-1\r\ndotnet build syndication-2"
  },
  {
    "path": "projects/syndications/build.sh",
    "content": "#!/bin/bash\ndotnet build newsserver-mvc\ndotnet build syndication-1\ndotnet build syndication-2\n"
  },
  {
    "path": "projects/syndications/newsserver-mvc/Controllers/HomeController.cs",
    "content": "﻿using System.Linq;\r\nusing System.ServiceModel.Syndication;\r\nusing System.Xml;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.Extensions.Logging;\r\nusing NewsServer.Models;\r\n\r\nnamespace NewsServer.Controllers\r\n{\r\n    public class HomeController : Controller\r\n    {\r\n        private readonly NewsServerOptions _newsServerOptions;\r\n\r\n        public HomeController(NewsServerOptions newsServerOptions)\r\n        {\r\n            _newsServerOptions = newsServerOptions;\r\n        }\r\n\r\n        public IActionResult Index(string slug)\r\n        {\r\n            var feedList = _newsServerOptions.Feeds;\r\n            var selectedFeedOption = GetCurrentFeed(slug, feedList);\r\n            var currentFeed = GetFeedItems(selectedFeedOption);\r\n            var model = new IndexViewModel\r\n            {\r\n                Feeds = _newsServerOptions.Feeds,\r\n                SelectedFeedOption = selectedFeedOption,\r\n                CurrentFeed = currentFeed\r\n            };\r\n            return View(model);\r\n        }\r\n\r\n        private SyndicationFeed GetFeedItems(FeedOption currentFeed)\r\n        {\r\n            using var reader = XmlReader.Create(currentFeed.Url, new XmlReaderSettings { Async = true });\r\n            return SyndicationFeed.Load(reader);\r\n        }\r\n\r\n        private FeedOption GetCurrentFeed(string slug, FeedOption[] feedList)\r\n        {\r\n            FeedOption currentFeed;\r\n            if (string.IsNullOrEmpty(slug))\r\n            {\r\n                currentFeed = feedList[0];\r\n            }\r\n            else\r\n            {\r\n                currentFeed = feedList.Where(item => item.Name == slug).FirstOrDefault();\r\n            }\r\n            return currentFeed;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/syndications/newsserver-mvc/Models/ErrorViewModel.cs",
    "content": "using System;\r\n\r\nnamespace NewsServer.Models\r\n{\r\n    public class ErrorViewModel\r\n    {\r\n        public string RequestId { get; set; }\r\n\r\n        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/syndications/newsserver-mvc/Models/IndexViewModel.cs",
    "content": "﻿using System.ServiceModel.Syndication;\r\n\r\nnamespace NewsServer.Models\r\n{\r\n    public class IndexViewModel\r\n    {\r\n        public FeedOption[] Feeds { get; set; }\r\n        public FeedOption SelectedFeedOption { get; set; }\r\n        public SyndicationFeed CurrentFeed { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/syndications/newsserver-mvc/Models/NewsServerOptions.cs",
    "content": "﻿namespace NewsServer.Models\r\n{\r\n    public class NewsServerOptions\r\n    {\r\n        public const string NewsServer = \"NewsServer\";\r\n\r\n        public FeedOption[] Feeds { get; set; }\r\n    }\r\n\r\n    public class FeedOption\r\n    {\r\n        public string Name { get; set; }\r\n        public string Url { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/syndications/newsserver-mvc/NewsServer.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"System.ServiceModel.Syndication\" Version=\"5.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/syndications/newsserver-mvc/Program.cs",
    "content": "using NewsServer.Models;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddSingleton(sp =>\r\n{\r\n    return builder.Configuration.GetSection(NewsServerOptions.NewsServer).Get<NewsServerOptions>();\r\n});\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\nif (!app.Environment.IsDevelopment())\r\n{\r\n    app.UseExceptionHandler(\"/Home/Error\");\r\n    app.UseHsts();\r\n}\r\n\r\napp.UseHttpsRedirection();\r\napp.UseStaticFiles();\r\napp.UseAuthorization();\r\n\r\napp.MapControllerRoute(name: \"default\", pattern: \"{controller=Home}/{action=Index}/{**slug}\");\r\napp.Run();"
  },
  {
    "path": "projects/syndications/newsserver-mvc/README.md",
    "content": "# NewsServer Demo\r\n\r\n**About:**\r\n\r\nThis sample showcases creating a RSS reader using ASP.NET Core MVC.\r\n\r\n- Feeds to be read are configured in appsettings.json as below:\r\n  \r\n  ```\r\n  \"NewsServer\": {\r\n      \"Feeds\": [\r\n        {\r\n          \"Name\": \"MS DevBlogs\",\r\n          \"Url\": \"https://devblogs.microsoft.com/landingpage/\"\r\n        },\r\n        ...\r\n      ]\r\n  }\r\n  ```\r\n- Feed is read using ```Microsoft.ServiceModel.Syndication``` library\r\n  \r\n  ```\r\n  using var reader = XmlReader.Create(feedUrl, new XmlReaderSettings { Async = true });\r\n  var feed = SyndicationFeed.Load(reader);\r\n  ```\r\n\r\n**Screenshot:**\r\n\r\n<img src=\"assets/newsserver.png\">\r\n\r\n\r\n**Credits**:\r\n\r\n[Lohith GN](https://github.com/lohithgn)"
  },
  {
    "path": "projects/syndications/newsserver-mvc/Views/Home/Index.cshtml",
    "content": "﻿@model IndexViewModel\r\n\r\n@{\r\n\tViewData[\"Title\"] = @Model.SelectedFeedOption.Name;\r\n}\r\n\r\n<div class=\"row mt-5\">\r\n <div class=\"col-lg-3\">\r\n  <ul class=\"list-group list-group-flush\">\r\n\t@foreach (var feed in @Model.Feeds)\r\n\t{\r\n\t\t<a href=\"/home/index/@Uri.EscapeDataString(feed.Name)\" class=\"list-group-item list-group-item-action @(Model.SelectedFeedOption.Name == feed.Name ? \"active\" : \"\")\" aria-current=\"true\">\r\n\t\t\t@feed.Name\r\n\t   </a>\r\n\t}\r\n  </ul>\r\n </div>\r\n <div class=\"col-lg-9\">\r\n  <div class=\"text-center mb-3 bg-dark text-white p-5\">\r\n   <h3>@Model.CurrentFeed.Title.Text</h3>\r\n   <small>@Model.CurrentFeed.Description?.Text</small>\r\n  </div>\r\n\t\t@foreach (var item in Model.CurrentFeed.Items)\r\n\t\t{\r\n\t\t\t<div class=\"card shadow my-4\">\r\n\t\t\t\t<div class=\"card-body\">\r\n\t\t\t\t\t<h5 class=\"card-title\"><a href=\"@item.Links[0].Uri\" target=\"_blank\" title=\"@item.Title.Text\">@item.Title.Text</a></h5>\r\n\t\t\t\t\t<small class=\"fs-6\">\r\n\t\t\t\t\t\t@if(item.Authors.Count > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t<text>@item.Authors[0].Name |</text>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t@item.PublishDate.DateTime.ToString(\"MMM dd, yyyy\")\r\n\t\t\t\t\t</small>\r\n\t\t\t\t\t<p class=\"card-text mt-2\">@Html.Raw(item.Summary?.Text)</p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/syndications/newsserver-mvc/Views/Shared/Error.cshtml",
    "content": "﻿@model ErrorViewModel\r\n@{\r\n    ViewData[\"Title\"] = \"Error\";\r\n}\r\n\r\n<h1 class=\"text-danger\">Error.</h1>\r\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\r\n\r\n@if (Model.ShowRequestId)\r\n{\r\n    <p>\r\n        <strong>Request ID:</strong> <code>@Model.RequestId</code>\r\n    </p>\r\n}\r\n\r\n<h3>Development Mode</h3>\r\n<p>\r\n    Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.\r\n</p>\r\n<p>\r\n    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\r\n    It can result in displaying sensitive information from exceptions to end users.\r\n    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\r\n    and restarting the app.\r\n</p>\r\n"
  },
  {
    "path": "projects/syndications/newsserver-mvc/Views/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>@ViewData[\"Title\"] - NewsServer</title>\r\n    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x\" crossorigin=\"anonymous\">\r\n</head>\r\n<body class=\"bg-light\">\r\n    <header>\r\n        <nav class=\"navbar navbar-expand-sm navbar-toggleable-sm navbar-dark bg-dark border-bottom box-shadow mb-3\">\r\n            <div class=\"container\">\r\n                <a class=\"navbar-brand\" href=\"/\">NewsServer</a>\r\n            </div>\r\n        </nav>\r\n    </header>\r\n    <div class=\"container\">\r\n        <main role=\"main\" class=\"pb-3\">\r\n            @RenderBody()\r\n        </main>\r\n    </div>\r\n\r\n    <footer class=\"border-top footer text-muted\">\r\n        <div class=\"container\">\r\n            &copy; 2021 - NewsServer\r\n        </div>\r\n    </footer>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js\" integrity=\"sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4\" crossorigin=\"anonymous\"></script>\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/syndications/newsserver-mvc/Views/_ViewImports.cshtml",
    "content": "﻿@using NewsServer\r\n@using NewsServer.Models\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "projects/syndications/newsserver-mvc/Views/_ViewStart.cshtml",
    "content": "﻿@{\r\n    Layout = \"_Layout\";\r\n}\r\n"
  },
  {
    "path": "projects/syndications/newsserver-mvc/appsettings.Development.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/syndications/newsserver-mvc/appsettings.json",
    "content": "{\r\n  \"AllowedHosts\": \"*\",\r\n\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  },\r\n\r\n  \"NewsServer\": {\r\n    \"Feeds\": [\r\n      {\r\n        \"Name\": \"MS DevBlogs\",\r\n        \"Url\": \"https://devblogs.microsoft.com/landingpage/\"\r\n      },\r\n      {\r\n        \"Name\": \"Visual Studio\",\r\n        \"Url\": \"https://devblogs.microsoft.com/visualstudio/feed/\"\r\n      },\r\n      {\r\n        \"Name\": \"Visual Studio Code\",\r\n        \"Url\": \"https://code.visualstudio.com/feed.xml\"\r\n      },\r\n      {\r\n        \"Name\": \"Visual Studio for Mac\",\r\n        \"Url\": \"https://devblogs.microsoft.com/visualstudio/feed/\"\r\n      },\r\n      {\r\n        \"Name\": \"DevOps\",\r\n        \"Url\": \"https://devblogs.microsoft.com/devops/feed/\"\r\n      },\r\n      {\r\n        \"Name\": \"Developer Support\",\r\n        \"Url\": \"https://devblogs.microsoft.com/premier-developer/feed/\"\r\n      },\r\n      {\r\n        \"Name\": \"Azure SDK\",\r\n        \"Url\": \"https://devblogs.microsoft.com/azure-sdk/feed/\"\r\n      },\r\n      {\r\n        \"Name\": \"IoT\",\r\n        \"Url\": \"https://devblogs.microsoft.com/iotdev/feed/\"\r\n      },\r\n      {\r\n        \"Name\": \"Visual C#\",\r\n        \"Url\": \"https://devblogs.microsoft.com/dotnet/tag/c/feed/\"\r\n      },\r\n      {\r\n        \"Name\": \"JavaScript\",\r\n        \"Url\": \"https://devblogs.microsoft.com/visualstudio/tag/javascript/feed/\"\r\n      },\r\n      {\r\n        \"Name\": \".NET\",\r\n        \"Url\": \"https://devblogs.microsoft.com/dotnet/feed/\"\r\n      },\r\n      {\r\n        \"Name\": \"ASP.NET\",\r\n        \"Url\": \"https://devblogs.microsoft.com/aspnet/feed/\"\r\n      },\r\n      {\r\n        \"Name\": \"Xamarin\",\r\n        \"Url\": \"https://devblogs.microsoft.com/xamarin/feed/\"\r\n      },\r\n      {\r\n        \"Name\": \"Microsoft Azure\",\r\n        \"Url\": \"https://azurecomcdn.azureedge.net/en-us/blog/feed/\"\r\n      },\r\n      {\r\n        \"Name\": \"Azure Cosmos DB\",\r\n        \"Url\": \"https://devblogs.microsoft.com/cosmosdb/feed/\"\r\n      }\r\n    ]\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/syndications/syndication-1/Program.cs",
    "content": "using Microsoft.SyndicationFeed;\r\nusing Microsoft.SyndicationFeed.Rss;\r\nusing System.Xml;\r\nusing System.Text;\r\n\r\nvar app = WebApplication.Create();\r\n//These are the four default services available at Configure\r\napp.Run(async context =>\r\n{\r\n    var items = new List<SyndicationItem>();\r\n\r\n    using (var xmlReader = XmlReader.Create(\"http://scripting.com/rss.xml\", new XmlReaderSettings { Async = true }))\r\n    {\r\n        var feedReader = new RssFeedReader(xmlReader);\r\n\r\n        while (await feedReader.Read())\r\n        {\r\n            switch (feedReader.ElementType)\r\n            {\r\n                case SyndicationElementType.Item:\r\n                    ISyndicationItem item = await feedReader.ReadItem();\r\n                    items.Add(new SyndicationItem(item));\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    var str = new StringBuilder();\r\n    str.Append(\"<ul>\");\r\n    foreach (var i in items)\r\n    {\r\n        str.Append($\"<li>{i.Description}</li>\");\r\n    }\r\n    str.Append(\"</ul>\");\r\n\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await context.Response.WriteAsync($@\"\r\n    <html>\r\n        <head>\r\n            <link rel=\"\"stylesheet\"\" type=\"\"text/css\"\" href=\"\"http://fonts.googleapis.com/css?family=Germania+One\"\">\r\n            <style>\r\n                body {{\r\n                font-family: 'Germania One', serif;\r\n                font-size: 24px;\r\n            }}\r\n            </style>\r\n        </head>\r\n        <body>\r\n            {str.ToString()}\r\n        </body>\r\n    </html>\r\n    \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/syndications/syndication-1/syndication.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.SyndicationFeed.ReaderWriter\" Version=\"1.0.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/syndications/syndication-2/Program.cs",
    "content": "using Microsoft.SyndicationFeed;\r\nusing Microsoft.SyndicationFeed.Rss;\r\nusing System.Xml;\r\nusing System.Text;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    var parser = new RssParser();\r\n    var items = new List<OutlineSyndicationItem>();\r\n\r\n    using (var xmlReader = XmlReader.Create(\"http://scripting.com/rss.xml\", new XmlReaderSettings { Async = true }))\r\n    {\r\n        var feedReader = new RssFeedReader(xmlReader);\r\n\r\n        while (await feedReader.Read())\r\n        {\r\n            switch (feedReader.ElementType)\r\n            {\r\n                case SyndicationElementType.Item:\r\n                    //ISyndicationContent is a raw representation of the feed\r\n                    ISyndicationContent content = await feedReader.ReadContent();\r\n\r\n                    ISyndicationItem item = parser.CreateItem(content);\r\n                    ISyndicationContent outline = content.Fields.FirstOrDefault(f => f.Name == \"source:outline\");\r\n\r\n                    items.Add(new OutlineSyndicationItem(item, outline));\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    var str = new StringBuilder();\r\n    str.Append(\"<ul>\");\r\n    foreach (var i in items)\r\n    {\r\n        str.Append($\"<li>{i.Item.Description} - <span style=\\\"color:red;\\\">\");\r\n        if (i.Outline != null)\r\n        {\r\n            str.Append(\"<ul>\");\r\n            foreach (var o in i.Outline.Attributes)\r\n            {\r\n                str.Append($\"<li>{o.Key} - {o.Value}</li>\");\r\n            }\r\n            str.Append(\"</ul>\");\r\n        }\r\n        str.Append(\"</li>\");\r\n    }\r\n    str.Append(\"</ul>\");\r\n\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await context.Response.WriteAsync($@\"\r\n    <html>\r\n        <head>\r\n            <link rel=\"\"stylesheet\"\" type=\"\"text/css\"\" href=\"\"http://fonts.googleapis.com/css?family=Germania+One\"\">\r\n            <style>\r\n                body {{\r\n                font-family: 'Germania One', serif;\r\n                font-size: 24px;\r\n            }}\r\n            </style>\r\n        </head>\r\n        <body>\r\n            {str.ToString()}\r\n        </body>\r\n    </html>\r\n    \");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class Outline\r\n{\r\n    public string Text { get; set; }\r\n\r\n    public string this[string key] => Attributes.ContainsKey(key) ? Attributes[key] : null;\r\n\r\n    public Dictionary<string, string> Attributes { get; set; } = new Dictionary<string, string>();\r\n}\r\n\r\npublic class OutlineSyndicationItem\r\n{\r\n    public ISyndicationItem Item { get; }\r\n\r\n    public Outline Outline { get; }\r\n\r\n    public OutlineSyndicationItem(ISyndicationItem basic, ISyndicationContent outline)\r\n    {\r\n        Item = basic;\r\n        if (outline != null)\r\n        {\r\n            Outline = new Outline\r\n            {\r\n                Text = outline.Attributes.FirstOrDefault(x => x.Name.Equals(\"text\", StringComparison.OrdinalIgnoreCase))?.Value,\r\n                Attributes = outline.Attributes.ToDictionary(x => x.Name, x => x.Value)\r\n            };\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/syndications/syndication-2/syndication-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.SyndicationFeed.ReaderWriter\" Version=\"1.0.2\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/testing/README.md",
    "content": "# Testing (1)\r\n\r\nThe projects in this folder show how to write tests using the `WebApplicationFactory<T>` found in the `Microsoft.AspNetCore.Mvc.Testing` package.\r\n\r\n- [NUnit 1](/projects/testing/nunit-1) shows how to create a simple unit test."
  },
  {
    "path": "projects/testing/nunit-1/README.md",
    "content": "# NUnit 1\r\n\r\nThis sample consists of two projects:\r\n- a simple ASP.NET Core Hello world application \r\n- a NUnit test project that uses WebApplicationFactory\r\n\r\nThe test project uses the `WebApplicationFactory` to start an in-proc instance of the web application. The unit tests will query the web application via an instance of `HttpClient` that skips the wire and queries directly the web application.\r\n\r\nTo run the test, go to `tests` folder and run `dotnet test`.\r\n\r\nSample made by: [@Kralizek](https://github.com/Kralizek)\r\n"
  },
  {
    "path": "projects/testing/nunit-1/src/Program.cs",
    "content": "public class Startup\r\n{\r\n    public void Configure(IApplicationBuilder app)\r\n    {\r\n        app.Run(async context =>\r\n        {\r\n            // Duplicate the code below and write more messages. Save and refresh your browser to see the result.\r\n            await context.Response.WriteAsync(\"Hello world. Make sure you run this app using 'dotnet watch run'.\");\r\n        });\r\n    }\r\n}\r\n\r\npublic class Program\r\n{\r\n    public static void Main(string[] args) =>\r\n        CreateHostBuilder(args).Build().Run();\r\n\r\n    public static IHostBuilder CreateHostBuilder(string[] args) =>\r\n        Host.CreateDefaultBuilder(args)\r\n            .ConfigureWebHostDefaults(webBuilder =>\r\n                webBuilder.UseStartup<Startup>()\r\n            );\r\n}"
  },
  {
    "path": "projects/testing/nunit-1/src/Src.csproj",
    "content": "  \r\n<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/testing/nunit-1/tests/Tests.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"NUnit\" Version=\"3.12.0\" />\r\n    <PackageReference Include=\"NUnit3TestAdapter\" Version=\"3.16.1\" />\r\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"16.5.0\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Mvc.Testing\" Version=\"5.0.*\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\src\\Src.csproj\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/testing/nunit-1/tests/UnitTest1.cs",
    "content": "using NUnit.Framework;\r\nusing Microsoft.AspNetCore.Mvc.Testing;\r\nusing System.Net;\r\n\r\npublic class Tests\r\n{\r\n    private WebApplicationFactory<Startup> _factory;\r\n    private HttpClient _client;\r\n\r\n    [OneTimeSetUp]\r\n    public void OneTimeSetUp()\r\n    {\r\n        _factory = new WebApplicationFactory<Startup>();\r\n    }\r\n\r\n    [SetUp]\r\n    public void Setup()\r\n    {\r\n        _client = _factory.CreateClient();\r\n    }\r\n\r\n    [Test]\r\n    public async Task ReturnsTextStartingWithHelloWorld()\r\n    {\r\n        var result = await _client.GetStringAsync(\"/\");\r\n\r\n        Assert.That(result, Does.StartWith(\"Hello world\"));\r\n    }\r\n\r\n    [Test]\r\n    public async Task Returns200()\r\n    {\r\n        using var request = new HttpRequestMessage(HttpMethod.Get, \"/\");\r\n\r\n        using var response = await _client.SendAsync(request);\r\n\r\n        Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK));\r\n    }\r\n}"
  },
  {
    "path": "projects/unpoly/README.md",
    "content": "# Unpoly JS (5)\r\n\r\nThese examples show how to integrate [UnpolyJS](https://unpoly.com/) with your Minimal API application\r\n\r\n* [up-poll](up-poll)\r\n\r\n  Use `up-poll` attribute to poll content fragment in specific interval. \r\n\r\n* [up-target](up-target)\r\n  \r\n  Use `up-target` to load specific content fragment and show it at targetted HTML element using tag, id, and class selectors.\r\n  \r\n* [up-target-2](up-target-2)\r\n  \r\n  Use `up-target` to load content fragments at multiple elements the same time using tag, id, and class selectors.\r\n\r\n* [up-hungry](up-hungry)\r\n\r\n  Use `up-hungry` to load content fragement at untargeted elements. If the server returns a matching fragment, the untargeted elements will be loaded. \r\n\r\n* [up-flashes](up-flashes)\r\n\r\n  Use `up-flashes` to provide flash message functionality.\r\n"
  },
  {
    "path": "projects/unpoly/up-flashes/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#5e5365\",\r\n        \"activityBar.background\": \"#5e5365\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#302310\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#5e5365\",\r\n        \"statusBar.background\": \"#443c49\",\r\n        \"statusBar.debuggingBackground\": \"#41493c\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#5e5365\",\r\n        \"statusBarItem.remoteBackground\": \"#443c49\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#443c49\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#443c4999\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#443c49\"\r\n}"
  },
  {
    "path": "projects/unpoly/up-flashes/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <script src=\"https://cdn.jsdelivr.net/npm/unpoly@3.8.0/unpoly.min.js\"></script>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n                <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/unpoly@3.8.0/unpoly.min.css\">\r\n            </head>\r\n            <body>\r\n                <div class=\"container mt-5\">\r\n                    <div class=\"row\">\r\n                        <div class=\"col-md-3\">\r\n                            <nav>\r\n                                <a href=\"/unpoly/1\" up-target=\"article:maybe\" up-cache=\"false\">1st</a>\r\n                                <a href=\"/unpoly/2\" up-target=\"article:maybe\" up-cache=\"false\">2nd</a>\r\n                            </nav>\r\n                        </div>\r\n                        <div class=\"col-md-3\">\r\n                            <article>Default Content 1</article>\r\n                        </div>\r\n                        <div class=\"col-md-3\">\r\n                            <div up-flashes></div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\n\r\nint clicked = 0;\r\n\r\napp.MapGet(\"/unpoly/{idx}\", (HttpRequest request, int idx) =>\r\n{\r\n    if (request.IsUnpolyJs() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"\"\"\r\n        <div class=\"alert alert-success\" up-flashes>You have clicked {clicked++} times at {idx}</div>\r\n        \"\"\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\npublic static class UnpolyJs\r\n{\r\n    public static class Headers\r\n    {\r\n        public const string UpVersion = \"X-Up-Version\";\r\n    }\r\n\r\n    public static bool IsUnpolyJs(this HttpRequest self) => !string.IsNullOrWhiteSpace(UpVersion(self));\r\n\r\n    public static string UpVersion(HttpRequest request)\r\n    {\r\n        var header = request.Headers[Headers.UpVersion].ToString();\r\n\r\n        return header;\r\n    }\r\n}"
  },
  {
    "path": "projects/unpoly/up-flashes/README.md",
    "content": "# Load flash message using up-flashes\r\n\r\nWe are using the `up-flashes` attribute as documented [here](https://unpoly.com/flashes). \r\n\r\n```html\r\n    <div class=\"col-md-3\">\r\n        <nav>\r\n            <a href=\"/unpoly/1\" up-target=\"article:maybe\" up-cache=\"false\">1st</a>\r\n            <a href=\"/unpoly/2\" up-target=\"article:maybe\" up-cache=\"false\">2nd</a>\r\n        </nav>\r\n    </div>\r\n    <div class=\"col-md-3\">\r\n        <article>Default Content 1</article>\r\n    </div>\r\n    <div class=\"col-md-3\">\r\n        <div up-flashes></div>\r\n    </div>\r\n```\r\n\r\n> [!NOTE]\r\n>\r\n> We use `up-cache` to prevent unpoly from caching the content.\r\n> We also set the selector with `:maybe` to tell unpoly not to throw error because we are not returning any matching element for article. "
  },
  {
    "path": "projects/unpoly/up-flashes/up-flashes.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/unpoly/up-flashes/up-flashes.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"up-flashes\", \"up-flashes.csproj\", \"{D77C0F65-1E25-4E23-9248-70F1AB716100}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{D77C0F65-1E25-4E23-9248-70F1AB716100}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{D77C0F65-1E25-4E23-9248-70F1AB716100}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{D77C0F65-1E25-4E23-9248-70F1AB716100}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{D77C0F65-1E25-4E23-9248-70F1AB716100}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {53BA3C48-8B70-48C2-9170-F2399D11509E}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/unpoly/up-hungry/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#5e5365\",\r\n        \"activityBar.background\": \"#5e5365\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#302310\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#5e5365\",\r\n        \"statusBar.background\": \"#443c49\",\r\n        \"statusBar.debuggingBackground\": \"#41493c\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#5e5365\",\r\n        \"statusBarItem.remoteBackground\": \"#443c49\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#443c49\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#443c4999\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#443c49\"\r\n}"
  },
  {
    "path": "projects/unpoly/up-hungry/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <script src=\"https://cdn.jsdelivr.net/npm/unpoly@3.8.0/unpoly.min.js\"></script>\r\n                    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n                <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/unpoly@3.8.0/unpoly.min.css\">\r\n            </head>\r\n            <body>\r\n                <div class=\"container\">\r\n                    <div class=\"row\">\r\n                        <div class=\"col-md-3\">\r\n                            <nav>\r\n                                <a href=\"/unpoly/1\" up-target=\"article\">1st</a>\r\n                            </nav>\r\n                        </div>\r\n                        <div class=\"col-md-3\">\r\n                            <article>Default Content 1</article>\r\n                        </div>\r\n                        <div class=\"col-md-3\">\r\n                            <div id=\"show\" up-hungry>Default Content 2</div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/unpoly/{idx}\", (HttpRequest request, int idx) =>\r\n{\r\n    if (request.IsUnpolyJs() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"\"\"\r\n        <article>Tag Selector (article)<strong>{DateTime.UtcNow}</strong></article>\r\n        <div id=\"show\">This is not targeted explicitly but it will show up anyway because the response contains a matching element (#show)</div>\r\n        \"\"\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\npublic static class UnpolyJs\r\n{\r\n    public static class Headers\r\n    {\r\n        public const string UpVersion = \"X-Up-Version\";\r\n    }\r\n\r\n    public static bool IsUnpolyJs(this HttpRequest self) => !string.IsNullOrWhiteSpace(UpVersion(self));\r\n\r\n    public static string UpVersion(HttpRequest request)\r\n    {\r\n        var header = request.Headers[Headers.UpVersion].ToString();\r\n\r\n        return header;\r\n    }\r\n}"
  },
  {
    "path": "projects/unpoly/up-hungry/README.md",
    "content": "# Load fragment of content on untargeted element via up-hungry\r\n\r\nWe are using the `up-hungry` attribute as documented [here](https://unpoly.com/up-hungry). In this example we use a tag selector.\r\n\r\n```html\r\n    <div class=\"row\">\r\n        <div class=\"col-md-3\">\r\n            <nav>\r\n                <a href=\"/unpoly/1\" up-target=\"article\">1st</a>\r\n            </nav>\r\n        </div>\r\n        <div class=\"col-md-3\">\r\n            <article>Default Content 1</article>\r\n        </div>\r\n        <div class=\"col-md-3\">\r\n            <div id=\"show\" up-hungry>Default Content 2</div>\r\n        </div>\r\n</div>\r\n```"
  },
  {
    "path": "projects/unpoly/up-hungry/up-hungry.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/unpoly/up-hungry/up-hungry.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"up-hungry\", \"up-hungry.csproj\", \"{96B40B47-75E1-441C-BE63-BC3452283D13}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{96B40B47-75E1-441C-BE63-BC3452283D13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{96B40B47-75E1-441C-BE63-BC3452283D13}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{96B40B47-75E1-441C-BE63-BC3452283D13}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{96B40B47-75E1-441C-BE63-BC3452283D13}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {94753A04-3182-4B35-AA10-8258D8C07D9D}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/unpoly/up-poll/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#5e5365\",\r\n        \"activityBar.background\": \"#5e5365\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#302310\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#5e5365\",\r\n        \"statusBar.background\": \"#443c49\",\r\n        \"statusBar.debuggingBackground\": \"#41493c\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#5e5365\",\r\n        \"statusBarItem.remoteBackground\": \"#443c49\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#443c49\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#443c4999\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#443c49\"\r\n}"
  },
  {
    "path": "projects/unpoly/up-poll/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <script src=\"https://cdn.jsdelivr.net/npm/unpoly@3.8.0/unpoly.min.js\"></script>\r\n                <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/unpoly@3.8.0/unpoly.min.css\">\r\n            </head>\r\n            <body>\r\n                <div class=\"welcome-message\" up-poll up-source=\"/unpoly\" up-interval=\"500\">\r\n                ..wait for 0.5 seconds\r\n                </div>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/unpoly\", (HttpRequest request) =>\r\n{\r\n    if (request.IsUnpolyJs() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content($\"<div class=\\\"welcome-message\\\" up-poll up-source=\\\"/unpoly\\\" up-interval=\\\"500\\\">Hello world {DateTime.UtcNow} from UnpolyJS</div>\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\npublic static class UnpolyJs\r\n{\r\n    public static class Headers\r\n    {\r\n        public const string UpVersion = \"X-Up-Version\";\r\n    }\r\n\r\n    public static bool IsUnpolyJs(this HttpRequest self) => !string.IsNullOrWhiteSpace(UpVersion(self));\r\n\r\n    public static string UpVersion(HttpRequest request)\r\n    {\r\n        var header = request.Headers[Headers.UpVersion].ToString();\r\n\r\n        return header;\r\n    }\r\n}"
  },
  {
    "path": "projects/unpoly/up-poll/README.md",
    "content": "# Polling in specific interval using up-poll\r\n\r\nWe are using the `up-poll` attribute as documented [here](https://unpoly.com/up-poll).\r\n\r\n```html\r\n    <div class=\"welcome-message\" up-poll up-source=\"/unpoly\" up-interval=\"500\">\r\n    ..wait for 0.5 seconds\r\n    </div>\r\n```\r\n\r\n>[!NOTE]\r\n>\r\n>It is importat that the API returns a matching response otherwise you will not get the desired result (polling).\r\n"
  },
  {
    "path": "projects/unpoly/up-poll/up-poll.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/unpoly/up-poll/up-poll.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"up-poll\", \"up-poll.csproj\", \"{B5069453-D190-4C99-8FD3-5184A34B6532}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{B5069453-D190-4C99-8FD3-5184A34B6532}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{B5069453-D190-4C99-8FD3-5184A34B6532}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{B5069453-D190-4C99-8FD3-5184A34B6532}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{B5069453-D190-4C99-8FD3-5184A34B6532}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {0359680C-D59A-4CE8-BD43-6265F74929DF}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/unpoly/up-target/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#5e5365\",\r\n        \"activityBar.background\": \"#5e5365\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#302310\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#5e5365\",\r\n        \"statusBar.background\": \"#443c49\",\r\n        \"statusBar.debuggingBackground\": \"#41493c\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#5e5365\",\r\n        \"statusBarItem.remoteBackground\": \"#443c49\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#443c49\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#443c4999\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#443c49\"\r\n}"
  },
  {
    "path": "projects/unpoly/up-target/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <script src=\"https://cdn.jsdelivr.net/npm/unpoly@3.8.0/unpoly.min.js\"></script>\r\n                    <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n                <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/unpoly@3.8.0/unpoly.min.css\">\r\n            </head>\r\n            <body>\r\n                <div class=\"container\">\r\n                    <div class=\"row\">\r\n                        <div class=\"col-md-3\">\r\n                            <nav>\r\n                                <a href=\"/unpoly/1\" up-target=\"article\">1st</a>\r\n                                <a href=\"/unpoly/2\" up-target=\"#show\">2nd</a>\r\n                                <a href=\"/unpoly/3\" up-target=\"#show\">3rd</a>\r\n                                <a href=\"/unpoly/4\" up-target=\".show\">4th</a>\r\n                                <a href=\"/unpoly/5\" up-target=\".show\">5th</a>\r\n                            </nav>\r\n                        </div>\r\n                        <div class=\"col-md-3\">\r\n                            <article>Default Content 1</article>\r\n                        </div>\r\n                        <div class=\"col-md-3\">\r\n                            <div id=\"show\">Default Content 2</div>\r\n                        </div>\r\n                        <div class=\"col-md-3\">\r\n                            <div class=\"show\">Default Content 3</div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/unpoly/{idx}\", (HttpRequest request, int idx) =>\r\n{\r\n    if (request.IsUnpolyJs() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return idx switch \r\n    {\r\n        1 => Results.Content($\"<article>Tag Selector (article)<strong>{DateTime.UtcNow}</strong></article>\"),\r\n        2 or 3 => Results.Content($\"<span id=\\\"show\\\">Id Selector (#show) <strong>{DateTime.UtcNow}</strong></span>\"),\r\n        4 => Results.Content($\"<span class=\\\"show\\\">Class Selector (.show) <strong>{DateTime.UtcNow}</strong></span>\"),\r\n        5 => Results.Content($\"<img class=\\\"show\\\" width=\\\"100%\\\" src=\\\"https://images.unsplash.com/photo-1592194996308-7b43878e84a6\\\"/>\"),\r\n        _ => Results.Content(\"n/a\")\r\n    };\r\n});\r\n\r\napp.Run();\r\n\r\n\r\npublic static class UnpolyJs\r\n{\r\n    public static class Headers\r\n    {\r\n        public const string UpVersion = \"X-Up-Version\";\r\n    }\r\n\r\n    public static bool IsUnpolyJs(this HttpRequest self) => !string.IsNullOrWhiteSpace(UpVersion(self));\r\n\r\n    public static string UpVersion(HttpRequest request)\r\n    {\r\n        var header = request.Headers[Headers.UpVersion].ToString();\r\n\r\n        return header;\r\n    }\r\n}"
  },
  {
    "path": "projects/unpoly/up-target/README.md",
    "content": "# Load fragment of content via up-target\r\n\r\nWe are using the `up-target` attribute as documented [here](https://unpoly.com/up.link). In this example we use tag, id, and class selectors.\r\n\r\n```html\r\n    <div class=\"col-md-3\">\r\n        <nav>\r\n            <a href=\"/unpoly/1\" up-target=\"article\">1st</a>\r\n            <a href=\"/unpoly/2\" up-target=\"#show\">2nd</a>\r\n            <a href=\"/unpoly/3\" up-target=\"#show\">3rd</a>\r\n            <a href=\"/unpoly/4\" up-target=\".show\">4th</a>\r\n            <a href=\"/unpoly/5\" up-target=\".show\">5th</a>\r\n        </nav>\r\n    </div>\r\n    <div class=\"col-md-3\">\r\n        <article>Default Content 1</article>\r\n    </div>\r\n    <div class=\"col-md-3\">\r\n        <div id=\"show\">Default Content 2</div>\r\n    </div>\r\n    <div class=\"col-md-3\">\r\n        <div class=\"show\">Default Content 3</div>\r\n    </div>\r\n```\r\n\r\n>[!NOTE]\r\n>\r\n>It is importat that the API returns a matching target otherwise you will not get the desired result.\r\n\r\n```csharp\r\n    return Results.Content($\"<span id=\\\"show\\\"><strong>{text}</strong> {DateTime.UtcNow} from UnpolyJS</span>\");\r\n```\r\n\r\nIf in above example you change the `id` value to the one not specified in `up-target`, you will not get the right result. "
  },
  {
    "path": "projects/unpoly/up-target/up-target.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/unpoly/up-target/up-target.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"up-target\", \"up-target.csproj\", \"{898C4D60-51BB-459F-AB0E-03ADA62B4534}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{898C4D60-51BB-459F-AB0E-03ADA62B4534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{898C4D60-51BB-459F-AB0E-03ADA62B4534}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{898C4D60-51BB-459F-AB0E-03ADA62B4534}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{898C4D60-51BB-459F-AB0E-03ADA62B4534}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {BC1A8F1E-80E4-48CF-953B-EFF822FF5A93}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/unpoly/up-target-2/.vscode/settings.json",
    "content": "{\r\n    \"workbench.colorCustomizations\": {\r\n        \"activityBar.activeBackground\": \"#5e5365\",\r\n        \"activityBar.background\": \"#5e5365\",\r\n        \"activityBar.foreground\": \"#e7e7e7\",\r\n        \"activityBar.inactiveForeground\": \"#e7e7e799\",\r\n        \"activityBarBadge.background\": \"#302310\",\r\n        \"activityBarBadge.foreground\": \"#e7e7e7\",\r\n        \"commandCenter.border\": \"#e7e7e799\",\r\n        \"sash.hoverBorder\": \"#5e5365\",\r\n        \"statusBar.background\": \"#443c49\",\r\n        \"statusBar.debuggingBackground\": \"#41493c\",\r\n        \"statusBar.debuggingForeground\": \"#e7e7e7\",\r\n        \"statusBar.foreground\": \"#e7e7e7\",\r\n        \"statusBarItem.hoverBackground\": \"#5e5365\",\r\n        \"statusBarItem.remoteBackground\": \"#443c49\",\r\n        \"statusBarItem.remoteForeground\": \"#e7e7e7\",\r\n        \"titleBar.activeBackground\": \"#443c49\",\r\n        \"titleBar.activeForeground\": \"#e7e7e7\",\r\n        \"titleBar.inactiveBackground\": \"#443c4999\",\r\n        \"titleBar.inactiveForeground\": \"#e7e7e799\"\r\n    },\r\n    \"peacock.color\": \"#443c49\"\r\n}"
  },
  {
    "path": "projects/unpoly/up-target-2/Program.cs",
    "content": "var app = WebApplication.Create();\r\napp.MapGet(\"/\", () =>\r\n{\r\n    var html = \"\"\"\r\n        <!DOCTYPE html>\r\n        <html>\r\n            <head>\r\n                <script src=\"https://cdn.jsdelivr.net/npm/unpoly@3.8.0/unpoly.min.js\"></script>\r\n                <link href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css\" rel=\"stylesheet\" integrity=\"sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH\" crossorigin=\"anonymous\">\r\n                <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/unpoly@3.8.0/unpoly.min.css\">\r\n            </head>\r\n            <body>\r\n                <div class=\"container\">\r\n                    <h1>Multiple Targets</h1>\r\n                    <div class=\"row\">\r\n                        <div class=\"col-md-3\">\r\n                            <nav>\r\n                                <a href=\"/unpoly/1\" up-target=\"article, #show, .show\">update all</a>\r\n                            </nav>\r\n                        </div>\r\n                        <div class=\"col-md-3\">\r\n                            <article>Default Content 1</article>\r\n                        </div>\r\n                        <div class=\"col-md-3\">\r\n                            <div id=\"show\">Default Content 2</div>\r\n                        </div>\r\n                        <div class=\"col-md-3\">\r\n                            <div class=\"show\">Default Content 3</div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </body>\r\n        </html>\r\n    \"\"\";\r\n    return Results.Content(html, \"text/html\");\r\n});\r\n\r\napp.MapGet(\"/unpoly/{idx}\", (HttpRequest request, int idx) =>\r\n{\r\n    if (request.IsUnpolyJs() is false)\r\n        return Results.Content(\"\");\r\n\r\n    return Results.Content(\r\n    $\"\"\"\r\n        <article>Tag Selector (article)<strong>{DateTime.UtcNow}</strong></article>\r\n        <span id=\"show\">Id Selector (#show) <strong>{DateTime.UtcNow}</strong></span>\r\n        <img class=\"show\" width=\"100%\" src=\"https://images.unsplash.com/photo-1592194996308-7b43878e84a6\"/>\r\n    \"\"\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\npublic static class UnpolyJs\r\n{\r\n    public static class Headers\r\n    {\r\n        public const string UpVersion = \"X-Up-Version\";\r\n    }\r\n\r\n    public static bool IsUnpolyJs(this HttpRequest self) => !string.IsNullOrWhiteSpace(UpVersion(self));\r\n\r\n    public static string UpVersion(HttpRequest request)\r\n    {\r\n        var header = request.Headers[Headers.UpVersion].ToString();\r\n\r\n        return header;\r\n    }\r\n}"
  },
  {
    "path": "projects/unpoly/up-target-2/README.md",
    "content": "# Load multiple fragments of content via up-target\r\n\r\nWe are using the `up-target` attribute as documented [here](https://unpoly.com/up.link). In this example we use tag, id, and class selectors all at the same time.\r\n\r\n```html\r\n    <div class=\"col-md-3\">\r\n        <nav>\r\n            <a href=\"/unpoly/1\" up-target=\"article, #show, .show\">update all</a>\r\n        </nav>\r\n    </div>\r\n    <div class=\"col-md-3\">\r\n        <article>Default Content 1</article>\r\n    </div>\r\n    <div class=\"col-md-3\">\r\n        <div id=\"show\">Default Content 2</div>\r\n    </div>\r\n    <div class=\"col-md-3\">\r\n        <div class=\"show\">Default Content 3</div>\r\n    </div>\r\n```\r\n\r\n"
  },
  {
    "path": "projects/unpoly/up-target-2/up-target-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/unpoly/up-target-2/up-target-2.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.5.002.0\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"up-target-2\", \"up-target-2.csproj\", \"{9E332BD6-6E0F-4520-9054-35ECBD8D55BB}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{9E332BD6-6E0F-4520-9054-35ECBD8D55BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{9E332BD6-6E0F-4520-9054-35ECBD8D55BB}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{9E332BD6-6E0F-4520-9054-35ECBD8D55BB}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{9E332BD6-6E0F-4520-9054-35ECBD8D55BB}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {944EE2BE-45FC-430A-8DD1-3789F516B154}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/uri-helper/README.md",
    "content": "# Uri Helper (5)\r\n  \r\n  This section shows various methods available at `Microsoft.AspNetCore.Http.Extensions.UriHelper`.\r\n\r\n  * [Get Display Url](/projects/uri-helper/uri-helper-get-display-url) \r\n\r\n    `Request.GetDisplayUrl()` shows complete url with host, path and query string of the current request. It's to be used for display purposes only.\r\n\r\n  * [Get Encoded Url](/projects/uri-helper/uri-helper-get-encoded-url)\r\n\r\n    `Request.GetEncodedUrl()` returns the combined components of the request URL in a fully escaped form suitable for use in HTTP headers and other HTTP operations.\r\n\r\n  * [Get Encoded Path and Query](/projects/uri-helper/uri-helper-get-encoded-path-and-query)\r\n\r\n    `UriHelper.GetEncodedPathAndQuery` returns the relative URL of a request.\r\n\r\n  * [From Absolute](/projects/uri-helper/uri-helper-from-absolute)\r\n\r\n    `UriHelper.FromAbsolute` separates the given absolute URI string into components.\r\n\r\n  * [Build Absolute](/projects/uri-helper/uri-helper-build-absolute)\r\n\r\n    `UriHelper.BuildAbsolute` combines the given URI components into a string that is properly encoded for use in HTTP headers. This sample\r\n    shows 9 ways on how to use it.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/uri-helper/build.bat",
    "content": "dotnet build uri-helper-build-absolute\r\ndotnet build uri-helper-from-absolute\r\ndotnet build uri-helper-get-display-url\r\ndotnet build uri-helper-get-encoded-path-and-query\r\ndotnet build uri-helper-get-encoded-url"
  },
  {
    "path": "projects/uri-helper/build.sh",
    "content": "#!/bin/bash\ndotnet build uri-helper-build-absolute\ndotnet build uri-helper-from-absolute\ndotnet build uri-helper-get-display-url\ndotnet build uri-helper-get-encoded-path-and-query\ndotnet build uri-helper-get-encoded-url\n"
  },
  {
    "path": "projects/uri-helper/uri-helper-build-absolute/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Extensions;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(context =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n\r\n    var url1 = UriHelper.BuildAbsolute(scheme: \" http\", host: new HostString(\"localhost:5000\"));\r\n    var url2 = UriHelper.BuildAbsolute(scheme: \"http\", host: new HostString(\"localhost:5000\"), pathBase: new PathString(\"/admin\"));\r\n    var url3 = UriHelper.BuildAbsolute(scheme: \"http\", host: new HostString(\"localhost:5000\"), pathBase: new PathString(\"/admin\"), path: new PathString(\"/index\"));\r\n    var url4 = UriHelper.BuildAbsolute(scheme: \"http\", host: new HostString(\"localhost:5000\"), pathBase: new PathString(\"/admin\"), path: new PathString(\"/index\"),\r\n    query: new QueryString(\"?greeting=Annie&age=32\"));\r\n\r\n    var query5 = new QueryString()\r\n    .Add(\"greeting\", \"Annie\")\r\n    .Add(\"age\", \"32\");\r\n\r\n    var url5 = UriHelper.BuildAbsolute(scheme: \"http\", host: new HostString(\"localhost:5000\"), pathBase: new PathString(\"/admin\"), path: new PathString(\"/index\"),\r\n    query: query5);\r\n\r\n    var url6 = UriHelper.BuildAbsolute(scheme: \"http\", host: new HostString(\"localhost:5000\"), pathBase: new PathString(\"/admin\"), path: new PathString(\"/index\"),\r\n    query: new QueryString(\"?greeting=Annie&age=32\"), fragment: new FragmentString(\"#phd\"));\r\n\r\n    var url7 = UriHelper.BuildAbsolute(scheme: \"http\", host: new HostString(\"localhost:5000\"), pathBase: null, path: new PathString(\"/index\"),\r\n    query: new QueryString(\"?greeting=Annie&age=32\"), fragment: new FragmentString(\"#phd\"));\r\n\r\n    var url8 = UriHelper.BuildAbsolute(scheme: \"http\", host: new HostString(\"localhost:5000\"), pathBase: null, path: null,\r\n    query: new QueryString(\"?greeting=Annie&age=32\"), fragment: new FragmentString(\"#phd\"));\r\n\r\n    var url9 = UriHelper.BuildAbsolute(scheme: \"http\", host: new HostString(\"localhost:5000\"), pathBase: null, path: null,\r\n    query: QueryString.Empty, fragment: new FragmentString(\"#phd\"));\r\n\r\n    return context.Response.WriteAsync($@\"<html>\r\n<body>                \r\n    <h1>UriHelper.BuildAbsolute</h1>\r\n    Combines the given URI components into a string that is properly encoded for use in HTTP headers.\r\n    <a href=\"\"https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.extensions.urihelper.buildabsolute?view=aspnetcore-6-0\"\">doc</a>\r\n    <ul>\r\n        <li><a href=\"\"{url1}\"\">{url1}</a></li>\r\n        <li><a href=\"\"{url2}\"\">{url2}</a></li>\r\n        <li><a href=\"\"{url3}\"\">{url3}</a></li>\r\n        <li><a href=\"\"{url4}\"\">{url4}</a></li>\r\n        <li><a href=\"\"{url5}\"\">{url5}</a></li>\r\n        <li><a href=\"\"{url6}\"\">{url6}</a></li>\r\n        <li><a href=\"\"{url7}\"\">{url7}</a></li>\r\n        <li><a href=\"\"{url8}\"\">{url8}</a></li>\r\n        <li><a href=\"\"{url9}\"\">{url9}</a></li>\r\n    </ul>\r\n</body>          \r\n</html>         \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/uri-helper/uri-helper-build-absolute/README.MD",
    "content": "# UriHelper.BuildAbsolute\r\n\r\nCombines the given URI components into a string that is properly encoded for use in HTTP headers. [doc](https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.extensions.urihelper.buildabsolute?view=aspnetcore-2.2).\r\n\r\nThis sample shows 9 ways on how to use the method helper."
  },
  {
    "path": "projects/uri-helper/uri-helper-build-absolute/uri-helper-build-absolute.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/uri-helper/uri-helper-from-absolute/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Extensions;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(context =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n\r\n    var requestUrl = context.Request.GetEncodedUrl();\r\n    UriHelper.FromAbsolute(requestUrl, out string scheme, out HostString host, out PathString path, out QueryString queryString, out FragmentString fragment);\r\n    return context.Response.WriteAsync($@\"<html>\r\n<body>                \r\n    <h1>From Absolute</h1>\r\n    <i>Separates the given absolute URI string into components. Assumes no PathBase.</i>\r\n    <a href=\"\"https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.extensions.urihelper.fromabsolute?view=aspnetcore-6.0#Microsoft_AspNetCore_Http_Extensions_UriHelper_FromAbsolute_System_String_System_String__Microsoft_AspNetCore_Http_HostString__Microsoft_AspNetCore_Http_PathString__Microsoft_AspNetCore_Http_QueryString__Microsoft_AspNetCore_Http_FragmentString__\"\">Doc</a><br/><br/>\r\n    <p style=\"\"color:red;\"\">{ requestUrl }</p>\r\n\r\n    <p>Click on the links to see what the helper method shows</p>\r\n    <ul>\r\n        <li><a href=\"\"/about/us\"\">/about/us</a></li>\r\n        <li><a href=\"\"/city/?id=30\"\">/city/?id=30</a></li>\r\n        <li><a href=\"\"/continent/?id=300&lat=30&lng=87\"\">/continent/?id=300&lat=30&lng=87</a></li>\r\n        <li><a href=\"\"/person?name=annie\"\">/person?name=annie</a></li>\r\n        <li><a href=\"\"/president?name=Franklin D. Roosevelt\"\">/president?name=Franklin D. Roosevelt</a></li>\r\n        <li><a href=\"\"/\"\">/</a></li>\r\n        <li><a href=\"\"/#header\"\">/#header</a></li>\r\n    </ul>\r\n    <table border=\"\"1\"\">\r\n        <tr>\r\n           <td>Scheme</td>\r\n           <td>{scheme}</td>\r\n        </tr>\r\n        <tr>\r\n           <td>Host</td>\r\n           <td>{host}</td>\r\n        </tr>\r\n        <tr>\r\n           <td>Path</td>\r\n           <td>{path}</td>\r\n        </tr>\r\n        <tr>\r\n           <td>QueryString</td>\r\n           <td>{queryString}</td>\r\n        </tr>\r\n        <tr>\r\n           <td>Fragment String <br/>\r\n           (This is always empty because URL fragment is never sent to the server)\r\n           </td>\r\n           <td>{fragment}</td>\r\n        </tr>\r\n    </table>\r\n</body>          \r\n</html>         \");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/uri-helper/uri-helper-from-absolute/README.MD",
    "content": "# UriHelper.FromAbsolute\r\n\r\n `UriHelper.FromAbsolute` separates the given absolute URI string into components."
  },
  {
    "path": "projects/uri-helper/uri-helper-from-absolute/uri-helper-from-absolute.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <AssemblyName>uri-helper-from-absolute</AssemblyName>\r\n\r\n    <PackageId>uri-helper-from-absolute</PackageId>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/uri-helper/uri-helper-get-display-url/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Extensions;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(context =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    return context.Response.WriteAsync($@\"<html>\r\n<body>                \r\n    <h1>Get Display Url</h1>\r\n    <i>Returns the combined components of the request URL in a fully un-escaped form (except for the QueryString) suitable only for display. This format should not be used in HTTP headers or other HTTP operations.</i>\r\n    <a href=\"\"https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.extensions.urihelper.getdisplayurl?view=aspnetcore-6.0\"\">Doc</a><br/><br/>\r\n    <p style=\"\"color:red;\"\">{ context.Request.GetDisplayUrl() }</p>\r\n\r\n    <p>Click on the links to see what the helper method shows</p>\r\n    <ul>\r\n        <li><a href=\"\"/about/us\"\">/about/us</a></li>\r\n        <li><a href=\"\"/city/?id=30\"\">/city/?id=30</a></li>\r\n        <li><a href=\"\"/continent/?id=300&lat=30&lng=87\"\">/continent/?id=300&lat=30&lng=87</a></li>\r\n        <li><a href=\"\"/person?name=annie\"\">/person?name=annie</a></li>\r\n        <li><a href=\"\"/president?name=Franklin D. Roosevelt\"\">/president?name=Franklin D. Roosevelt</a></li>\r\n        <li><a href=\"\"/\"\">/</a></li>\r\n    </ul>\r\n</body>          \r\n</html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/uri-helper/uri-helper-get-display-url/uri-helper-get-display-url.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/uri-helper/uri-helper-get-encoded-path-and-query/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Extensions;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(context =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n\r\n    var requestUrl = context.Request.GetEncodedPathAndQuery();\r\n    return context.Response.WriteAsync($@\"<html>\r\n<body>                \r\n    <h1>Get Encoded Path and Query</h1>\r\n    <i>Returns the relative url</i>\r\n    <a href=\"\"https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.extensions.urihelper.getencodedpathandquery?view=aspnetcore-6.0#Microsoft_AspNetCore_Http_Extensions_UriHelper_GetEncodedPathAndQuery_Microsoft_AspNetCore_Http_HttpRequest_\"\">Doc</a><br/><br/>\r\n    <p style=\"\"color:red;\"\">{ requestUrl }</p>\r\n\r\n    <p>Click on the links to see what the helper method shows</p>\r\n    <ul>\r\n        <li><a href=\"\"/about/us\"\">/about/us</a></li>\r\n        <li><a href=\"\"/city/?id=30\"\">/city/?id=30</a></li>\r\n        <li><a href=\"\"/continent/?id=300&lat=30&lng=87\"\">/continent/?id=300&lat=30&lng=87</a></li>\r\n        <li><a href=\"\"/person?name=annie\"\">/person?name=annie</a></li>\r\n        <li><a href=\"\"/president?name=Franklin D. Roosevelt\"\">/president?name=Franklin D. Roosevelt</a></li>\r\n        <li><a href=\"\"/\"\">/</a></li>\r\n        <li><a href=\"\"/#header\"\">/#header</a></li>\r\n    </ul>\r\n</body>          \r\n</html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/uri-helper/uri-helper-get-encoded-path-and-query/README.MD",
    "content": "# UriHelper.GetEncodedPathAndQuery\r\n\r\n `UriHelper.GetEncodedPathAndQuery` returns the relative URL."
  },
  {
    "path": "projects/uri-helper/uri-helper-get-encoded-path-and-query/uri-helper-get-encoded-path-and-query.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/uri-helper/uri-helper-get-encoded-url/Program.cs",
    "content": "using Microsoft.AspNetCore.Http.Extensions;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(context =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    return context.Response.WriteAsync($@\"<html>\r\n<body>                \r\n    <h1>Get Encoded Url</h1>\r\n    <i>Returns the combined components of the request URL in a fully escaped form suitable for use in HTTP headers and other HTTP operations.</i>\r\n    <a href=\"\"https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.extensions.urihelper.getencodedurl?view=aspnetcore-6.0#Microsoft_AspNetCore_Http_Extensions_UriHelper_GetEncodedUrl_Microsoft_AspNetCore_Http_HttpRequest_\"\">Doc</a><br/><br/>\r\n    <p style=\"\"color:red;\"\">{ context.Request.GetEncodedUrl() }</p>\r\n\r\n    <p>Click on the links to see what the helper method shows</p>\r\n    <ul>\r\n        <li><a href=\"\"/about/us\"\">/about/us</a></li>\r\n        <li><a href=\"\"/city/?id=30\"\">/city/?id=30</a></li>\r\n        <li><a href=\"\"/continent/?id=300&lat=30&lng=87\"\">/continent/?id=300&lat=30&lng=87</a></li>\r\n        <li><a href=\"\"/person?name=annie\"\">/person?name=annie</a></li>\r\n        <li><a href=\"\"/president?name=Franklin D. Roosevelt\"\">/president?name=Franklin D. Roosevelt</a></li>\r\n        <li><a href=\"\"/\"\">/</a></li>\r\n    </ul>\r\n</body>          \r\n</html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/uri-helper/uri-helper-get-encoded-url/README.md",
    "content": "# Request.GetEncodedUrl\r\n\r\n`Request.GetEncodedUrl()` returns the combined components of the request URL in a fully escaped form suitable for use in HTTP headers and other HTTP operations."
  },
  {
    "path": "projects/uri-helper/uri-helper-get-encoded-url/uri-helper-get-encoded-url.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/utils/README.md",
    "content": "# Utils\r\n\r\n-   [Status Codes](http-status-codes)\r\n\r\n    Here we contrast between the usage of `Microsoft.AspNetCore.Http.StatusCodes` and `System.Net.HttpStatusCode`.\r\n\r\n-   [MediaTypeNames](media-type-names)\r\n\r\n    This class provides convenient constants for some common MIME types. It's not extensive by any means however `MediaTypeNames.Text.Html` and `MediaTypeNames.Application.Json` come handy.\r\n\r\n-   [MediaTypeNames - 2](media-type-names-2)\r\n\r\n    Using `FileExtensionContentTypeProvider` to obtain the correct MIME type of a filename extension.\r\n"
  },
  {
    "path": "projects/utils/build.bat",
    "content": "dotnet build http-status-codes\r\ndotnet build media-type-names\r\ndotnet build media-type-names-2"
  },
  {
    "path": "projects/utils/build.sh",
    "content": "#!/bin/bash\ndotnet build http-status-codes\ndotnet build media-type-names\ndotnet build media-type-names-2\n"
  },
  {
    "path": "projects/utils/http-status-codes/Program.cs",
    "content": "using System.Reflection;\r\nusing System.Net;\r\n\r\nvar app = WebApplication.Create();\r\n\r\nstatic List<FieldInfo> GetConstants(Type type)\r\n{\r\n    FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);\r\n\r\n    return fieldInfos.Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList();\r\n}\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"Content-Type\", \"text/html\");\r\n    await context.Response.WriteAsync(@\"<html>\r\n                <head>\r\n                    <link rel=\"\"stylesheet\"\" href=\"\"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.5/css/bulma.css\"\" />\r\n                </head>\r\n                <body class=\"\"content\"\">\r\n                <h1>Battle of the Http Status Codes</h1>\r\n                \");\r\n\r\n    await context.Response.WriteAsync(@\"<table class=\"\"table\"\">\r\n                <thead>\r\n                    <tr>\r\n                        <th>Microsoft.AspNetCore.Http.StatusCodes</th>\r\n                        <th>System.Net.HttpStatusCode</th>\r\n                    </tr>\r\n                </thead>\");\r\n    await context.Response.WriteAsync(\"<tbody><tr><td><ul>\");\r\n    foreach (var code in GetConstants(typeof(StatusCodes)))\r\n    {\r\n        await context.Response.WriteAsync($\"<li>{code.Name} = {code.GetValue(code)}</li> \\n\");\r\n    }\r\n\r\n    await context.Response.WriteAsync(\"</ul></td><td><ul>\");\r\n\r\n    foreach (var code in Enum.GetNames(typeof(HttpStatusCode)))\r\n    {\r\n        var status = (HttpStatusCode)Enum.Parse(typeof(HttpStatusCode), code);\r\n        await context.Response.WriteAsync($\"<li>{code} = {(int)status}</li> \\n\");\r\n    }\r\n\r\n    await context.Response.WriteAsync(\"</ul></td></tr></tbody></table>\");\r\n    await context.Response.WriteAsync(@\"</body></html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/utils/http-status-codes/README.MD",
    "content": "# Comparison between the two ways of return HTTP Status Code in ASP.NET Core\r\n\r\nHere we contrast between the usage of `Microsoft.AspNetCore.Http.StatusCodes` and `System.Net.HttpStatusCode`."
  },
  {
    "path": "projects/utils/http-status-codes/http-status-codes.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/utils/media-type-names/Program.cs",
    "content": "using System.Reflection;\r\nusing System.Net.Mime;\r\nusing Microsoft.Net.Http.Headers;\r\n\r\nvar app = WebApplication.Create();\r\n\r\nstatic List<FieldInfo> GetConstants(Type type)\r\n{\r\n    FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);\r\n\r\n    return fieldInfos.Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList();\r\n}\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(HeaderNames.ContentType, MediaTypeNames.Text.Html);\r\n\r\n    await context.Response.WriteAsync(\"<html><body>\");\r\n\r\n    await context.Response.WriteAsync(\"<h1>System.Net.Mime.MediaTypeNames</h1>\");\r\n\r\n    await context.Response.WriteAsync(\"<h2>MediaTypeNames.Application</h2>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var h in GetConstants(typeof(MediaTypeNames.Application)))\r\n    {\r\n        await context.Response.WriteAsync($\"<li>{h.Name} = {h.GetValue(h)}</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n\r\n    await context.Response.WriteAsync(\"<h2>MediaTypeNames.Text</h2>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var h in GetConstants(typeof(MediaTypeNames.Text)))\r\n    {\r\n        await context.Response.WriteAsync($\"<li>{h.Name} = {h.GetValue(h)}</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n\r\n    await context.Response.WriteAsync(\"<h2>MediaTypeNames.Image</h2>\");\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    foreach (var h in GetConstants(typeof(MediaTypeNames.Image)))\r\n    {\r\n        await context.Response.WriteAsync($\"<li>{h.Name} = {h.GetValue(h)}</li>\");\r\n    }\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n\r\n    await context.Response.WriteAsync(\"</body></html>\");\r\n\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/utils/media-type-names/README.MD",
    "content": "# System.Net.Mime.MediaTypeNames\r\n\r\nThis class provides convenient constants for some common MIME types. It's not extensive by any means however `MediaTypeNames.Text.Html` and `MediaTypeNames.Application.Json` come handy.  "
  },
  {
    "path": "projects/utils/media-type-names/media-type-names.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/utils/media-type-names-2/Program.cs",
    "content": "using System.Net.Mime;\r\nusing Microsoft.Net.Http.Headers;\r\nusing Microsoft.AspNetCore.StaticFiles;\r\n\r\nvar app = WebApplication.Create();\r\n\r\nvar provider = new FileExtensionContentTypeProvider();\r\nstring GetMime(string ext)\r\n{\r\n    if (provider.TryGetContentType(ext, out string mime))\r\n        return mime;\r\n    else\r\n        return \"\";\r\n}\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(HeaderNames.ContentType, MediaTypeNames.Text.Html);\r\n\r\n    await context.Response.WriteAsync(\"<html><body>\");\r\n    await context.Response.WriteAsync(\"<h1>Geting MIME type based on a file extension</h1>\");\r\n\r\n    await context.Response.WriteAsync(\"<ul>\");\r\n    await context.Response.WriteAsync($\"<li>.pdf = {GetMime(\".pdf\")}\");\r\n    await context.Response.WriteAsync($\"<li>.doc = {GetMime(\".doc\")}\");\r\n    await context.Response.WriteAsync($\"<li>.docx = {GetMime(\".docx\")}\");\r\n    await context.Response.WriteAsync($\"<li>.json = {GetMime(\".json\")}\");\r\n    await context.Response.WriteAsync(\"</ul>\");\r\n\r\n    await context.Response.WriteAsync(\"</body></html>\");\r\n\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/utils/media-type-names-2/README.MD",
    "content": "# Finding Mime type based on a file extension\r\n\r\nUsing `FileExtensionContentTypeProvider` to obtain the correct MIME type of a filename extension."
  },
  {
    "path": "projects/utils/media-type-names-2/media-type-names-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/version/Program.cs",
    "content": "using Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Http;\r\nusing Microsoft.AspNetCore;\r\nusing Microsoft.Extensions.Hosting;\r\nusing System;\r\nusing System.Runtime.InteropServices;\r\nusing System.Reflection;\r\n\r\nvar app = WebApplication.Create();\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers[\"Content-Type\"] = \"text/html\";\r\n\r\n    await context.Response.WriteAsync(\"<html><body>\");\r\n    await context.Response.WriteAsync(\"<h1>.NET Core Info</h1>\");\r\n    await context.Response.WriteAsync($\"Environment.Version: {Environment.Version}\");\r\n    await context.Response.WriteAsync(\"<br/>\");\r\n    await context.Response.WriteAsync($\"RuntimeInformation.FrameworkDescription: {RuntimeInformation.FrameworkDescription}\");\r\n    await context.Response.WriteAsync(\"<br/>\");\r\n    var coreCLR = ((AssemblyInformationalVersionAttribute[])typeof(object).Assembly.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false))[0].InformationalVersion;\r\n    await context.Response.WriteAsync($\"CoreCLR Build: {coreCLR.Split('+')[0]}\");\r\n    await context.Response.WriteAsync(\"<br/>\");\r\n    await context.Response.WriteAsync($\"CoreCLR Hash: {coreCLR.Split('+')[1]}\");\r\n    await context.Response.WriteAsync(\"<br/>\");\r\n\r\n    var coreFX = ((AssemblyInformationalVersionAttribute[])typeof(Uri).Assembly.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false))[0].InformationalVersion;\r\n    await context.Response.WriteAsync($\"CoreFX Build: {coreFX.Split('+')[0]}\");\r\n    await context.Response.WriteAsync(\"<br/>\");\r\n    await context.Response.WriteAsync($\"CoreFX Hash: {coreFX.Split('+')[1]}\");\r\n    await context.Response.WriteAsync(\"<br/>\");\r\n\r\n    await context.Response.WriteAsync(\"<h2>Environment info</h2>\");\r\n    await context.Response.WriteAsync($\"Environment.OSVersion: {Environment.OSVersion}\");\r\n    await context.Response.WriteAsync(\"<br/>\");\r\n    await context.Response.WriteAsync($\"RuntimeInformation.OSDescription: {RuntimeInformation.OSDescription}\");\r\n    await context.Response.WriteAsync(\"<br/>\");\r\n    await context.Response.WriteAsync($\"RuntimeInformation.OSArchitecture: {RuntimeInformation.OSArchitecture}\");\r\n    await context.Response.WriteAsync(\"<br/>\");\r\n    await context.Response.WriteAsync($\"Environment.ProcessorCount: {Environment.ProcessorCount}\");\r\n    await context.Response.WriteAsync(\"</body></html>\");\r\n});\r\n\r\n\r\napp.Run();"
  },
  {
    "path": "projects/version/README.md",
    "content": "# Show Runtime Information\r\n\r\nShow various runtime information of your system. The code is a modified version of this [code by Rich Lander](https://github.com/richlander/testapps/blob/master/versioninfo/Program.cs).\r\n\r\n"
  },
  {
    "path": "projects/version/version.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/web-sockets/README.md",
    "content": "# Web Sockets (6)\r\n\r\n**Warning**: These samples are low level websocket code. For production, use [SignalR](https://github.com/aspnet/signalr). Yes I will work on SignalR samples soon.\r\n\r\n* [Echo Server](/projects/web-sockets/web-sockets-1)\r\n\r\n  This is the simplest web socket code you can write. It simply returns what you sent. It does not handle the closing of the connection. It does not handle data that is larger than buffer. It only handles text payload.\r\n\r\n* [Echo Server 2](/projects/web-sockets/web-sockets-2)\r\n\r\n  We improve upon the previous sample by adding console logging (requiring ```Microsoft.Extensions.Logging.Console``` package) and handling data larger than the buffer. I set the buffer to be very small (4 bytes) so you can see how it works.\r\n\r\n* [Echo Server 3](/projects/web-sockets/web-sockets-3)\r\n\r\n  We improve upon the previous sample by enabling broadcast. What you see here is a very crude chat functionality.\r\n\r\n* [Echo Server 4](/projects/web-sockets/web-sockets-4)\r\n\r\n  We improve upon the previous sample by handling closing event initiated by the web client.\r\n\r\n* [Echo Server 5](/projects/web-sockets/web-sockets-6)\r\n\r\n  Use Mvc Controller to handle websocket request\r\n\r\n* [Chat Server](/projects/web-sockets/web-sockets-5)\r\n\r\n  Implement a rudimentary single channel chat server.\r\n\r\ndotnet8"
  },
  {
    "path": "projects/web-sockets/build.bat",
    "content": "dotnet build web-sockets-1\r\ndotnet build web-sockets-2\r\ndotnet build web-sockets-3\r\ndotnet build web-sockets-4\r\ndotnet build web-sockets-5\r\ndotnet build web-sockets-6"
  },
  {
    "path": "projects/web-sockets/build.sh",
    "content": "#!/bin/bash\ndotnet build web-sockets-1\ndotnet build web-sockets-2\ndotnet build web-sockets-3\ndotnet build web-sockets-4\ndotnet build web-sockets-5\ndotnet build web-sockets-6\n"
  },
  {
    "path": "projects/web-sockets/web-sockets-1/Program.cs",
    "content": "using System.Net.WebSockets;\r\nusing System.Text;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseWebSockets();\r\napp.Use(async (context, next) =>\r\n{\r\n    if (!context.WebSockets.IsWebSocketRequest)\r\n    {\r\n        // Not a web socket request\r\n        await next(context);\r\n        return;\r\n    }\r\n\r\n    var socket = await context.WebSockets.AcceptWebSocketAsync();\r\n    var bufferSize = new byte[1024 * 4];\r\n    var receiveBuffer = new ArraySegment<byte>(bufferSize);\r\n    var result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None);\r\n\r\n    while (!result.CloseStatus.HasValue)\r\n    {\r\n        if (result.MessageType == WebSocketMessageType.Text)\r\n        {\r\n            var clientRequest = Encoding.UTF8.GetString(receiveBuffer.Array, receiveBuffer.Offset, result.Count);\r\n\r\n            var serverReply = Encoding.UTF8.GetBytes(\"Echo \" + clientRequest);\r\n            var replyBuffer = new ArraySegment<byte>(serverReply);\r\n            await socket.SendAsync(replyBuffer, WebSocketMessageType.Text, true, CancellationToken.None);\r\n\r\n            receiveBuffer = new ArraySegment<byte>(bufferSize);\r\n            result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None);\r\n        }\r\n    }\r\n});\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    await context.Response.WriteAsync(@\"\r\n<html>                \r\n    <head>\r\n        <script src=\"\"https://code.jquery.com/jquery-3.2.1.min.js\"\" integrity=\"\"sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=\"\" crossorigin=\"\"anonymous\"\"></script>\r\n    </head>\r\n    <body>\r\n        <h1>Web Socket</h1>\r\n        <input type=\"\"text\"\" length=\"\"50\"\" id=\"\"msg\"\" value=\"\"hello world\"\"/> <button type=\"\"button\"\" id=\"\"send\"\">Send</button>\r\n        <br/>\r\n        <script>\r\n            $(function(){\r\n                var url = \"\"ws://localhost:5000\"\";\r\n                var socket = new WebSocket(url);\r\n                var send = $(\"\"#send\"\");\r\n                var msg = $(\"\"#msg\"\");\r\n\r\n                socket.onopen = function(e){\r\n                    send.click(function(){\r\n                        socket.send(msg.val());                    \r\n                    });\r\n                };\r\n\r\n                socket.onmessage = function(e){\r\n                    var response = e.data;\r\n                    alert(response.trim());\r\n                };\r\n            });\r\n        </script>\r\n    </body>\r\n</html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/web-sockets/web-sockets-1/web-sockets.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/web-sockets/web-sockets-2/Program.cs",
    "content": "using System.Net.WebSockets;\r\nusing System.Text;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Logging.ClearProviders();\r\nbuilder.Logging.AddConsole();\r\nbuilder.Logging.AddFilter((provider, category, logLevel) =>\r\n{\r\n    return !category.Contains(\"Microsoft.AspNetCore\");\r\n});\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseWebSockets();\r\n\r\napp.Use(async (context, next) =>\r\n{\r\n    var log = context.RequestServices.GetService<ILoggerFactory>().CreateLogger(\"websocket\");\r\n\r\n    if (!context.WebSockets.IsWebSocketRequest)\r\n    {\r\n        // Not a web socket request\r\n        await next(context);\r\n        return;\r\n    }\r\n\r\n    var socket = await context.WebSockets.AcceptWebSocketAsync();\r\n    var bufferSize = new byte[4];\r\n    var receiveBuffer = new ArraySegment<byte>(bufferSize);\r\n    WebSocketReceiveResult result;\r\n\r\n    while (socket.State == WebSocketState.Open)\r\n    {\r\n        using (var ms = new MemoryStream())\r\n        {\r\n            int count = 0;\r\n            do\r\n            {\r\n                result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None);\r\n                if (result.MessageType != WebSocketMessageType.Text)\r\n                    throw new Exception(\"Unexpected Message\");\r\n\r\n                ms.Write(receiveBuffer.Array, receiveBuffer.Offset, result.Count);\r\n\r\n                receiveBuffer = new ArraySegment<byte>(bufferSize);\r\n                log.LogDebug($\"Reading incoming data with buffer(size {bufferSize.Length}) {++count} times\");\r\n            }\r\n            while (!result.EndOfMessage && !result.CloseStatus.HasValue);\r\n\r\n            ms.Seek(0, SeekOrigin.Begin);\r\n\r\n            string clientRequest = string.Empty;\r\n            using (var reader = new StreamReader(ms, Encoding.UTF8))\r\n            {\r\n                clientRequest = await reader.ReadToEndAsync();\r\n            }\r\n\r\n            log.LogDebug($\"Receive: {clientRequest}\");\r\n\r\n            var serverReply = Encoding.UTF8.GetBytes(\"Echo \" + clientRequest);\r\n            var replyBuffer = new ArraySegment<byte>(serverReply);\r\n            await socket.SendAsync(replyBuffer, WebSocketMessageType.Text, true, CancellationToken.None);\r\n\r\n            if (result.CloseStatus.HasValue)\r\n                break;\r\n        }\r\n    }\r\n});\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    await context.Response.WriteAsync(@\"\r\n<html>                \r\n    <head>\r\n        <script src=\"\"https://code.jquery.com/jquery-3.2.1.min.js\"\" integrity=\"\"sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=\"\" crossorigin=\"\"anonymous\"\"></script>\r\n    </head>\r\n    <body>\r\n        <h1>Web Socket</h1>\r\n        <input type=\"\"text\"\" length=\"\"50\"\" id=\"\"msg\"\" value=\"\"hello world\"\"/> <button type=\"\"button\"\" id=\"\"send\"\">Send</button>\r\n        <br/>\r\n        <script>\r\n            $(function(){\r\n                var url = \"\"ws://localhost:5000\"\";\r\n                var socket = new WebSocket(url);\r\n                var send = $(\"\"#send\"\");\r\n                var msg = $(\"\"#msg\"\");\r\n\r\n                socket.onopen = function(e){\r\n                    send.click(function(){\r\n                        socket.send(msg.val());                    \r\n                    });\r\n                };\r\n\r\n                socket.onmessage = function(e){\r\n                    var response = e.data;\r\n                    alert(response.trim());\r\n                };\r\n            });\r\n        </script>\r\n    </body>\r\n</html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/web-sockets/web-sockets-2/web-sockets-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/web-sockets/web-sockets-3/Program.cs",
    "content": "using System.Net.WebSockets;\r\nusing System.Text;\r\nusing System.Collections.Concurrent;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddSingleton<ConnectionManager>();\r\n\r\nasync Task ReceiveAsync(ILogger log, WebSocket socket, string socketId, Func<string, Task> responseHandlerAsync)\r\n{\r\n    var bufferSize = new byte[4]; //This is especially small just to exercise the code that handles data that is larger than buffer\r\n    var receiveBuffer = new ArraySegment<byte>(bufferSize);\r\n    WebSocketReceiveResult result;\r\n\r\n    while (socket.State == WebSocketState.Open)\r\n    {\r\n        using (var ms = new MemoryStream())\r\n        {\r\n            do\r\n            {\r\n                result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None);\r\n                if (result.MessageType != WebSocketMessageType.Text)\r\n                    throw new Exception(\"Unexpected Message\");\r\n\r\n                ms.Write(receiveBuffer.Array, receiveBuffer.Offset, result.Count);\r\n            }\r\n\r\n            while (!result.EndOfMessage && !result.CloseStatus.HasValue);\r\n\r\n            ms.Seek(0, SeekOrigin.Begin);\r\n\r\n            string clientRequest = string.Empty;\r\n            using (var reader = new StreamReader(ms, Encoding.UTF8))\r\n            {\r\n                clientRequest = reader.ReadToEnd();\r\n            }\r\n\r\n            log.LogDebug($\"Socket Id {socketId} : Receive: {clientRequest}\");\r\n\r\n            await responseHandlerAsync(clientRequest);\r\n\r\n            if (result.CloseStatus.HasValue)\r\n                break;\r\n        }\r\n    }\r\n}\r\n\r\nvar app = builder.Build();\r\napp.UseWebSockets();\r\n\r\nint count = 0;\r\napp.Use(async (context, next) =>\r\n{\r\n    var log = context.RequestServices.GetService<ILoggerFactory>().CreateLogger(\"app\");\r\n    var cm = context.RequestServices.GetService<ConnectionManager>();\r\n\r\n    if (!context.WebSockets.IsWebSocketRequest)\r\n    {\r\n        await next(context);\r\n        return;\r\n    }\r\n\r\n    var socket = await context.WebSockets.AcceptWebSocketAsync();\r\n    var socketId = cm.AddSocket(socket);\r\n\r\n    await ReceiveAsync(log, socket, socketId, async (clientRequest) =>\r\n    {\r\n        var serverReply = Encoding.UTF8.GetBytes($\"Echo {++count} {clientRequest}\");\r\n        var replyBuffer = new ArraySegment<byte>(serverReply);\r\n        await socket.SendAsync(replyBuffer, WebSocketMessageType.Text, true, CancellationToken.None);\r\n\r\n        var broadcastReply = Encoding.UTF8.GetBytes($\"Broadcast {count} {clientRequest}\");\r\n        var broadcastBuffer = new ArraySegment<byte>(broadcastReply);\r\n\r\n        var socketTasks = new List<Task>();\r\n\r\n        foreach (var (s, sid) in cm.Other(socketId))\r\n        {\r\n            socketTasks.Add(s.SendAsync(broadcastBuffer, WebSocketMessageType.Text, true, CancellationToken.None));\r\n            log.LogDebug($\"Broadcasting to : {sid}\");\r\n        }\r\n\r\n        await Task.WhenAll(socketTasks);\r\n    });\r\n});\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    await context.Response.WriteAsync(@\"\r\n<html>                \r\n    <head>\r\n        <script src=\"\"https://code.jquery.com/jquery-3.2.1.min.js\"\" integrity=\"\"sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=\"\" crossorigin=\"\"anonymous\"\"></script>\r\n    </head>\r\n    <body>\r\n        <h1>Web Socket (please open this page at 2 tabs at least)</h1>\r\n        <input type=\"\"text\"\" length=\"\"50\"\" id=\"\"msg\"\" value=\"\"hello world\"\"/> <button type=\"\"button\"\" id=\"\"send\"\">Send</button>\r\n        <br/>\r\n        <ul id=\"\"responses\"\"></ul>\r\n        <script>\r\n            $(function(){\r\n                var url = \"\"ws://localhost:5000\"\";\r\n                var socket = new WebSocket(url);\r\n                var send = $(\"\"#send\"\");\r\n                var msg = $(\"\"#msg\"\");\r\n                var responses = $(\"\"#responses\"\");\r\n\r\n                socket.onopen = function(e){\r\n                    send.click(function(){\r\n                        socket.send(msg.val());                    \r\n                    });\r\n                };\r\n\r\n                socket.onmessage = function(e){\r\n                    var response = e.data;\r\n                    responses.append(`<li>${e.data.trim()}</li>`);\r\n                };\r\n            });\r\n        </script>\r\n    </body>\r\n</html>\");\r\n});\r\n\r\napp.Run();\r\n\r\n\r\npublic class ConnectionManager\r\n{\r\n    ConcurrentDictionary<string, WebSocket> _sockets = new ConcurrentDictionary<string, WebSocket>();\r\n\r\n    public string AddSocket(WebSocket socket)\r\n    {\r\n        var id = Guid.NewGuid().ToString();\r\n\r\n        if (!_sockets.TryAdd(id, socket))\r\n            throw new Exception($\"Problem in adding socket with Id {id}\");\r\n\r\n        return id;\r\n    }\r\n\r\n    public List<(WebSocket socket, string id)> Other(string id) => _sockets.Where(x => x.Key != id).Select(x => (socket: x.Value, id: x.Key)).ToList();\r\n}"
  },
  {
    "path": "projects/web-sockets/web-sockets-3/web-sockets-3.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/web-sockets/web-sockets-4/Program.cs",
    "content": "using System.Net.WebSockets;\r\nusing System.Text;\r\nusing System.Collections.Concurrent;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nvar app = builder.Build();\r\napp.UseWebSockets();\r\n\r\nvar cm = new ConnectionManager();\r\n\r\nint count = 0;\r\napp.Use(async (context, next) =>\r\n{\r\n    if (!context.WebSockets.IsWebSocketRequest)\r\n    {\r\n        await next();\r\n        return;\r\n    }\r\n\r\n    var log = context.RequestServices.GetService<ILoggerFactory>().CreateLogger(\"app\");\r\n\r\n    var socket = await context.WebSockets.AcceptWebSocketAsync();\r\n    var socketId = cm.AddSocket(socket);\r\n\r\n    await ReceiveAsync(cm, log, socket, socketId, async (connectionManager, clientRequest) =>\r\n    {\r\n        var serverReply = Encoding.UTF8.GetBytes($\"Echo {++count} {clientRequest}\");\r\n        var replyBuffer = new ArraySegment<byte>(serverReply);\r\n        await socket.SendAsync(replyBuffer, WebSocketMessageType.Text, true, CancellationToken.None);\r\n\r\n        var broadcastReply = Encoding.UTF8.GetBytes($\"Broadcast {count} {clientRequest}\");\r\n        var broadcastBuffer = new ArraySegment<byte>(broadcastReply);\r\n\r\n        var socketTasks = new List<Task>();\r\n\r\n        foreach (var (s, sid) in connectionManager.Other(socketId))\r\n        {\r\n            socketTasks.Add(s.SendAsync(broadcastBuffer, WebSocketMessageType.Text, true, CancellationToken.None));\r\n            log.LogDebug($\"Broadcasting to : {sid}\");\r\n        }\r\n\r\n        await Task.WhenAll(socketTasks);\r\n    });\r\n\r\n    if (socket.State != WebSocketState.Open)\r\n    {\r\n        log.LogDebug($\"Socket Id {socketId} with status {socket.State}\");\r\n    }\r\n});\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    await context.Response.WriteAsync(@\"\r\n<html>                \r\n<head>\r\n    <script src=\"\"https://code.jquery.com/jquery-3.2.1.min.js\"\" integrity=\"\"sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=\"\" crossorigin=\"\"anonymous\"\"></script>\r\n</head>\r\n<body>\r\n    <h1>Web Socket (please open this page at 2 tabs at least)</h1>\r\n    <input type=\"\"text\"\" length=\"\"50\"\" id=\"\"msg\"\" value=\"\"hello world\"\"/> \r\n    <button type=\"\"button\"\" id=\"\"send\"\">Send</button>\r\n    <button type=\"\"button\"\" id=\"\"close\"\">Close</button>\r\n    <br/>\r\n    <ul id=\"\"responses\"\"></ul>\r\n    <script>\r\n        $(function(){\r\n            var url = \"\"ws://localhost:5000\"\";\r\n            var socket = new WebSocket(url);\r\n            var send = $(\"\"#send\"\");\r\n            var close = $(\"\"#close\"\");\r\n            var msg = $(\"\"#msg\"\");\r\n            var responses = $(\"\"#responses\"\");\r\n\r\n            socket.onopen = function(e){\r\n                responses.append(`<li>Socket opened</li>`);\r\n                send.click(function(){\r\n                    if (socket.readyState !== WebSocket.OPEN){\r\n                        alert('Socket is closed. Cannot send message.');\r\n                        return;\r\n                    }\r\n                    socket.send(msg.val()); \r\n                });\r\n            };\r\n\r\n            close.click(function(){\r\n                if (socket.readyState !== WebSocket.OPEN){\r\n                    alert('You cannot close this connection because it is already closed');\r\n                    return;\r\n                }\r\n                socket.close();    \r\n            });\r\n\r\n            socket.onmessage = function(e){\r\n                var response = e.data;\r\n                responses.append(`<li>${e.data.trim()}</li>`);\r\n            };\r\n\r\n            socket.onclose = function(e){\r\n                responses.append(`<li>Socket closed</li>`);\r\n            };\r\n        });\r\n    </script>\r\n</body>\r\n</html>\");\r\n});\r\n\r\n\r\napp.Run();\r\n\r\nasync Task ReceiveAsync(ConnectionManager cm, ILogger log, WebSocket socket, string socketId, Func<ConnectionManager, string, Task> responseHandlerAsync)\r\n{\r\n    var bufferSize = new byte[4]; //This is especially small just to exercise the code that handles data that is larger than buffer\r\n    var receiveBuffer = new ArraySegment<byte>(bufferSize);\r\n    WebSocketReceiveResult result;\r\n\r\n    while (socket.State == WebSocketState.Open)\r\n    {\r\n        using (var ms = new MemoryStream())\r\n        {\r\n            do\r\n            {\r\n                result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None);\r\n\r\n                if (result.MessageType == WebSocketMessageType.Close)\r\n                {\r\n                    log.LogDebug($\"Socket Id {socketId} : Receive closing message.\");\r\n                    var removalStatus = cm.RemoveSocket(socketId);\r\n                    log.LogDebug($\"Socket Id {socketId} removal status {removalStatus}.\");\r\n                    break;\r\n                }\r\n\r\n                if (result.MessageType != WebSocketMessageType.Text)\r\n                    throw new Exception(\"Unexpected Message\");\r\n\r\n                ms.Write(receiveBuffer.Array, receiveBuffer.Offset, result.Count);\r\n            }\r\n            while (!result.EndOfMessage && !result.CloseStatus.HasValue);\r\n\r\n            if (result.MessageType == WebSocketMessageType.Text)\r\n            {\r\n                ms.Seek(0, SeekOrigin.Begin);\r\n\r\n                string clientRequest = string.Empty;\r\n                using (var reader = new StreamReader(ms, Encoding.UTF8))\r\n                {\r\n                    clientRequest = reader.ReadToEnd();\r\n                }\r\n\r\n                log.LogDebug($\"Socket Id {socketId} : Receive: {clientRequest}\");\r\n\r\n                await responseHandlerAsync(cm, clientRequest);\r\n            }\r\n\r\n            if (result.CloseStatus.HasValue)\r\n                break;\r\n        }\r\n    }\r\n}\r\n\r\npublic class ConnectionManager\r\n{\r\n    ConcurrentDictionary<string, WebSocket> _sockets = new ConcurrentDictionary<string, WebSocket>();\r\n\r\n    public string AddSocket(WebSocket socket)\r\n    {\r\n        var id = Guid.NewGuid().ToString();\r\n\r\n        if (!_sockets.TryAdd(id, socket))\r\n            throw new Exception($\"Problem in adding socket with Id {id}\");\r\n\r\n        return id;\r\n    }\r\n\r\n    public bool RemoveSocket(string id) => _sockets.TryRemove(id, out WebSocket socket);\r\n\r\n    public List<(WebSocket socket, string id)> Other(string id) => _sockets.Where(x => x.Key != id).Select(x => (socket: x.Value, id: x.Key)).ToList();\r\n}\r\n"
  },
  {
    "path": "projects/web-sockets/web-sockets-4/web-sockets-4.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/web-sockets/web-sockets-5/Program.cs",
    "content": "using System.Net.WebSockets;\r\nusing System.Text;\r\nusing System.Collections.Concurrent;\r\n\r\nvar builder = WebApplication.CreateBuilder();\r\n\r\nasync Task ReceiveAsync(ConnectionManager cm, ILogger log, WebSocket socket, string socketId, Func<ConnectionManager, string, Task> responseHandlerAsync)\r\n{\r\n    var bufferSize = new byte[4]; //This is especially small just to exercise the code that handles data that is larger than buffer\r\n    var receiveBuffer = new ArraySegment<byte>(bufferSize);\r\n    WebSocketReceiveResult result;\r\n\r\n    while (socket.State == WebSocketState.Open)\r\n    {\r\n        using (var ms = new MemoryStream())\r\n        {\r\n            do\r\n            {\r\n                result = await socket.ReceiveAsync(receiveBuffer, CancellationToken.None);\r\n\r\n                if (result.MessageType == WebSocketMessageType.Close)\r\n                {\r\n                    log.LogDebug($\"Socket Id {socketId} : Receive closing message.\");\r\n                    var removalStatus = cm.RemoveSocket(socketId);\r\n                    log.LogDebug($\"Socket Id {socketId} removal status {removalStatus}.\");\r\n                    break;\r\n                }\r\n\r\n                if (result.MessageType != WebSocketMessageType.Text)\r\n                    throw new Exception(\"Unexpected Message\");\r\n\r\n                ms.Write(receiveBuffer.Array, receiveBuffer.Offset, result.Count);\r\n            }\r\n            while (!result.EndOfMessage && !result.CloseStatus.HasValue);\r\n\r\n            if (result.MessageType == WebSocketMessageType.Text)\r\n            {\r\n                ms.Seek(0, SeekOrigin.Begin);\r\n\r\n                string clientRequest = string.Empty;\r\n                using (var reader = new StreamReader(ms, Encoding.UTF8))\r\n                {\r\n                    clientRequest = reader.ReadToEnd();\r\n                }\r\n\r\n                log.LogDebug($\"Socket Id {socketId} : Receive: {clientRequest}\");\r\n\r\n                await responseHandlerAsync(cm, clientRequest);\r\n            }\r\n\r\n            if (result.CloseStatus.HasValue)\r\n                break;\r\n        }\r\n    }\r\n}\r\n\r\nArraySegment<byte> Reply(string content) => new ArraySegment<byte>(Encoding.UTF8.GetBytes(content));\r\n\r\nvar app = builder.Build();\r\napp.UseWebSockets();\r\n\r\nvar cm = new ConnectionManager();\r\n\r\napp.Use(async (context, next) =>\r\n{\r\n    if (!context.WebSockets.IsWebSocketRequest)\r\n    {\r\n        await next();\r\n        return;\r\n    }\r\n\r\n    var log = context.RequestServices.GetService<ILoggerFactory>().CreateLogger(\"app\");\r\n    \r\n    var socket = await context.WebSockets.AcceptWebSocketAsync();\r\n    var socketId = cm.AddSocket(socket);\r\n\r\n    var cmdHandler = new CommandHandler();\r\n    await ReceiveAsync(cm, log, socket, socketId, async (connectionManager, clientRequest) =>\r\n    {\r\n        var (isOK, cmd) = cmdHandler.Parse(clientRequest);\r\n\r\n        if (isOK)\r\n        {\r\n            switch (cmd.Type)\r\n            {\r\n                case CommandType.List:\r\n                    {\r\n                        var others = connectionManager.Other(socketId).Select(x => string.IsNullOrWhiteSpace(x.nickname) ? \"NoNick\" : x.nickname).ToList();\r\n                        if (others.Count > 0)\r\n                            await socket.SendAsync(Reply(string.Join(\",\", others)), WebSocketMessageType.Text, true, CancellationToken.None);\r\n                        else\r\n                            await socket.SendAsync(Reply(\"No other user on this channel\"), WebSocketMessageType.Text, true, CancellationToken.None);\r\n\r\n                        break;\r\n                    }\r\n\r\n                case CommandType.Nick:\r\n                    {\r\n                        var isOk = connectionManager.SetNickName(socketId, cmd.Data.Item1);\r\n                        if (isOK)\r\n                            await socket.SendAsync(Reply($\"Nickname now {cmd.Data.Item1}\"), WebSocketMessageType.Text, true, CancellationToken.None);\r\n                        else\r\n                            await socket.SendAsync(Reply($\"#nick fails\"), WebSocketMessageType.Text, true, CancellationToken.None);\r\n\r\n                        break;\r\n                    }\r\n\r\n                case CommandType.Send:\r\n                    {\r\n                        var (isFound, sck) = connectionManager.GetByNick(cmd.Data.Item1);\r\n                        if (isFound)\r\n                        {\r\n                            var (isOk, sender) = connectionManager.GetNickNameById(socketId);\r\n                            if (isOK)\r\n                                await sck.SendAsync(Reply($\"From {sender}: {cmd.Data.Item2}\"), WebSocketMessageType.Text, true, CancellationToken.None);\r\n                            else\r\n                                await sck.SendAsync(Reply($\"From Unknown: {cmd.Data.Item2}\"), WebSocketMessageType.Text, true, CancellationToken.None);\r\n\r\n                            await socket.SendAsync(Reply($\"Message sent to {cmd.Data.Item1}\"), WebSocketMessageType.Text, true, CancellationToken.None);\r\n                        }\r\n                        else\r\n                            await socket.SendAsync(Reply($\"{cmd.Data.Item1} not found\"), WebSocketMessageType.Text, true, CancellationToken.None);\r\n\r\n                        break;\r\n                    }\r\n\r\n                case CommandType.Quit:\r\n                    {\r\n                        connectionManager.RemoveSocket(socketId);\r\n                        await socket.SendAsync(Reply(\"Quitting chat\"), WebSocketMessageType.Text, true, CancellationToken.None);\r\n                        await socket.CloseAsync(WebSocketCloseStatus.NormalClosure, \"\", CancellationToken.None);\r\n\r\n                        break;\r\n                    }\r\n\r\n                default:\r\n                    {\r\n                        await socket.SendAsync(Reply(\"Command not understood\"), WebSocketMessageType.Text, true, CancellationToken.None);\r\n\r\n                        break;\r\n                    }\r\n            }\r\n        }\r\n        else\r\n            await socket.SendAsync(Reply(\"Command not understood\"), WebSocketMessageType.Text, true, CancellationToken.None);\r\n    });\r\n\r\n    if (socket.State != WebSocketState.Open)\r\n        log.LogDebug($\"Socket Id {socketId} with status {socket.State}\");\r\n});\r\n\r\napp.Run(async context =>\r\n{\r\n    context.Response.Headers.Append(\"content-type\", \"text/html\");\r\n    await context.Response.WriteAsync(@\"\r\n<html>                \r\n    <head>\r\n        <script src=\"\"https://code.jquery.com/jquery-3.2.1.min.js\"\" integrity=\"\"sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=\"\" crossorigin=\"\"anonymous\"\"></script>\r\n    </head>\r\n    <body>\r\n        <h1>Web Socket (please open this page at 2 tabs at least)</h1>\r\n        <p>Commands<p>\r\n        <ul>\r\n            <li>#list</li> \r\n            <li>#nick <i>nickname</i></li>\r\n            <li>#talk <i>nickname</i> <i>text</i></li>\r\n            <li>#quit</li>\r\n        </ul>\r\n        <input type=\"\"text\"\" length=\"\"50\"\" id=\"\"msg\"\" value=\"\"#nick anne\"\"/> \r\n        <button type=\"\"button\"\" id=\"\"send\"\">Send</button>\r\n        <button type=\"\"button\"\" id=\"\"close\"\">Close</button>\r\n        <br/>\r\n        <ul id=\"\"responses\"\"></ul>\r\n        <script>\r\n            $(function(){\r\n                var url = \"\"ws://localhost:5000\"\";\r\n                var socket = new WebSocket(url);\r\n                var send = $(\"\"#send\"\");\r\n                var close = $(\"\"#close\"\");\r\n                var msg = $(\"\"#msg\"\");\r\n                var responses = $(\"\"#responses\"\");\r\n\r\n                socket.onopen = function(e){\r\n                    responses.append(`<li>Socket opened</li>`);\r\n                    send.click(function(){\r\n                        if (socket.readyState !== WebSocket.OPEN){\r\n                            alert('Socket is closed. Cannot send message.');\r\n                            return;\r\n                        }\r\n                        socket.send(msg.val()); \r\n                    });\r\n                };\r\n\r\n                close.click(function(){\r\n                    if (socket.readyState !== WebSocket.OPEN){\r\n                        alert('You cannot close this connection because it is already closed');\r\n                        return;\r\n                    }\r\n                    socket.close();    \r\n                });\r\n\r\n                socket.onmessage = function(e){\r\n                    var response = e.data;\r\n                    responses.append(`<li>${e.data.trim()}</li>`);\r\n                };\r\n\r\n                socket.onclose = function(e){\r\n                    responses.append(`<li>Socket closed</li>`);\r\n                };\r\n            });\r\n        </script>\r\n    </body>\r\n</html>\");\r\n});\r\n\r\napp.Run();\r\n\r\npublic class ConnectionManager\r\n{\r\n    ConcurrentDictionary<string, (WebSocket socket, string nickname)> _sockets = new ConcurrentDictionary<string, (WebSocket, string)>();\r\n\r\n    public string AddSocket(WebSocket socket)\r\n    {\r\n        var id = Guid.NewGuid().ToString();\r\n\r\n        if (!_sockets.TryAdd(id, (socket, string.Empty)))\r\n            throw new Exception($\"Problem in adding socket with Id {id}\");\r\n\r\n        return id;\r\n    }\r\n\r\n    public bool SetNickName(string id, string nickname)\r\n    {\r\n        if (_sockets.TryGetValue(id, out var x))\r\n        {\r\n            _sockets[id] = (x.socket, nickname);\r\n            return true;\r\n        }\r\n        else\r\n            return false;\r\n    }\r\n\r\n    public (bool, string) GetNickNameById(string id)\r\n    {\r\n        if (_sockets.TryGetValue(id, out var x))\r\n            return (true, x.nickname);\r\n        else\r\n            return (false, null);\r\n    }\r\n\r\n    public (bool, WebSocket socket) GetByNick(string nickname)\r\n    {\r\n        var found = _sockets.Where(x => x.Value.nickname.Equals(nickname, StringComparison.CurrentCultureIgnoreCase)).Take(1).ToList();\r\n\r\n        if (found.Count == 0)\r\n            return (false, null);\r\n        else\r\n            return (true, found[0].Value.socket);\r\n    }\r\n\r\n    public bool RemoveSocket(string id) => _sockets.TryRemove(id, out (WebSocket, string) _);\r\n\r\n    public List<(WebSocket socket, string id, string nickname)> Other(string id) =>\r\n        _sockets.Where(x => x.Key != id)\r\n        .Select(x => (x.Value.socket, x.Key, x.Value.nickname))\r\n        .ToList();\r\n}\r\n\r\npublic enum CommandType\r\n{\r\n    List,\r\n    Send,\r\n    Nick,\r\n    Quit\r\n}\r\n\r\npublic class Command\r\n{\r\n    public CommandType Type { get; set; }\r\n\r\n    public (string, string, string) Data { get; set; }\r\n}\r\n\r\npublic class CommandHandler\r\n{\r\n    public (bool, Command) Parse(string cmd)\r\n    {\r\n        try\r\n        {\r\n            if (cmd.StartsWith(\"#\"))\r\n            {\r\n                var segment = cmd.Split(new[] { ' ' });\r\n\r\n                if (segment.Length > 0)\r\n                {\r\n                    switch (segment[0])\r\n                    {\r\n                        case \"#list\": return (true, new Command { Type = CommandType.List, Data = (\"\", \"\", \"\") });\r\n                        case \"#quit\": return (true, new Command { Type = CommandType.Quit, Data = (\"\", \"\", \"\") });\r\n                        case \"#nick\": return (true, new Command { Type = CommandType.Nick, Data = (segment[1], \"\", \"\") });\r\n                        case \"#talk\": return (true, new Command { Type = CommandType.Send, Data = (segment[1], string.Join(\" \", segment.Skip(2)), \"\") });\r\n                        default: return (false, null);\r\n                    }\r\n                }\r\n            }\r\n\r\n            return (false, null);\r\n        }\r\n        catch\r\n        {\r\n            return (false, null);\r\n        }\r\n    }\r\n}\r\n\r\n\r\n"
  },
  {
    "path": "projects/web-sockets/web-sockets-5/web-sockets-5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/web-sockets/web-sockets-6/Program.cs",
    "content": "using System.Net.WebSockets;\r\nusing System.Text;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nbuilder.Services.AddControllers();\r\nvar app = builder.Build();\r\napp.MapDefaultControllerRoute();\r\napp.UseWebSockets();\r\napp.Run();\r\n\r\npublic class HomeController : Controller\r\n{\r\n    [HttpGet]\r\n    public IActionResult Index()\r\n    {\r\n        return new ContentResult\r\n        {\r\n            Content = @\"\r\n            <html>\r\n            <head>\r\n                <script src=\"\"https://code.jquery.com/jquery-3.2.1.min.js\"\" integrity=\"\"sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=\"\" crossorigin=\"\"anonymous\"\"></script>\r\n            </head>\r\n            <body>\r\n                <h1>Web Socket (please open this page at 2 tabs at least)</h1>\r\n                <input type=\"\"text\"\" length=\"\"50\"\" id=\"\"msg\"\" value=\"\"hello world\"\"/>\r\n                <button type=\"\"button\"\" id=\"\"send\"\">Send</button>\r\n                <button type=\"\"button\"\" id=\"\"close\"\">Close</button>\r\n                <br/>\r\n                <ul id=\"\"responses\"\"></ul>\r\n                <script>\r\n                    $(function(){\r\n                        var url = \"\"ws://localhost:5000/ws\"\";\r\n                        var socket = new WebSocket(url);\r\n                        var send = $(\"\"#send\"\");\r\n                        var close = $(\"\"#close\"\");\r\n                        var msg = $(\"\"#msg\"\");\r\n                        var responses = $(\"\"#responses\"\");\r\n\r\n                        socket.onopen = function(e){\r\n                            responses.append(`<li>Socket opened</li>`);\r\n                            send.click(function(){\r\n                                if (socket.readyState !== WebSocket.OPEN){\r\n                                    alert('Socket is closed. Cannot send message.');\r\n                                    return;\r\n                                }\r\n                                socket.send(msg.val());\r\n                            });\r\n                        };\r\n\r\n                        close.click(function(){\r\n                            if (socket.readyState !== WebSocket.OPEN){\r\n                                alert('You cannot close this connection because it is already closed');\r\n                                return;\r\n                            }\r\n                            socket.close();\r\n                        });\r\n\r\n                        socket.onmessage = function(e){\r\n                            var response = e.data;\r\n                            responses.append(`<li>${e.data.trim()}</li>`);\r\n                        };\r\n\r\n                        socket.onclose = function(e){\r\n                            responses.append(`<li>Socket closed</li>`);\r\n                        };\r\n                    });\r\n                </script>\r\n            </body>\r\n            </html>\",\r\n            ContentType = \"text/html\"\r\n        };\r\n    }\r\n    \r\n    [HttpGet(\"/ws\")]\r\n    public async Task<IActionResult> Websocket(CancellationToken token)\r\n    {\r\n        if (!HttpContext.WebSockets.IsWebSocketRequest)\r\n        {\r\n            return NotFound();\r\n        }\r\n        var socket = await HttpContext.WebSockets.AcceptWebSocketAsync();\r\n        var bufferSize = new byte[1024 * 4];\r\n        var receiveBuffer = new ArraySegment<byte>(bufferSize);\r\n        var result = await socket.ReceiveAsync(receiveBuffer, token);\r\n\r\n        while (!result.CloseStatus.HasValue && !token.IsCancellationRequested)\r\n        {\r\n            if (result.MessageType == WebSocketMessageType.Text)\r\n            {\r\n                var clientRequest = Encoding.UTF8.GetString(receiveBuffer.Array, receiveBuffer.Offset, result.Count);\r\n\r\n                var serverReply = Encoding.UTF8.GetBytes(\"Echo \" + clientRequest);\r\n                var replyBuffer = new ArraySegment<byte>(serverReply);\r\n                await socket.SendAsync(replyBuffer, WebSocketMessageType.Text, true, token);\r\n\r\n                receiveBuffer = new ArraySegment<byte>(bufferSize);\r\n                result = await socket.ReceiveAsync(receiveBuffer, token);\r\n            }\r\n        }\r\n        return Ok();\r\n    }\r\n}"
  },
  {
    "path": "projects/web-sockets/web-sockets-6/README.md",
    "content": "# Handle Web Socket request via MVC controller\r\n\r\nThis is a simple example of a web socket request handler via MVC controller.\r\n\r\nBy [ZJKung](https://github.com/ZJKung)"
  },
  {
    "path": "projects/web-sockets/web-sockets-6/web-sockets-6.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>enable</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/web-utilities/README.md",
    "content": "# Web Utilities (3)\r\n\r\n  This section shows various functions available at `Microsoft.AspNetCore.WebUtilities`. \r\n\r\n  * [Query Helpers](/projects/web-utilities/web-utilities-query-helpers)\r\n\r\n    This utility helps you generate query string for your url safely (ht [Rehan Saeed](https://rehansaeed.com/asp-net-core-hidden-gem-queryhelpers/)).\r\n\r\n  * [Parse Query String](/projects/web-utilities/web-utilities-query-helpers-2)\r\n\r\n    `QueryHelpers.ParseQuery` allows you to parse a raw query string and access its individual key and values.\r\n\r\n  * [Reason Phrases](/projects/web-utilities/web-utilities-reason-phrases)\r\n\r\n    This utility returns HTTP response phrases given a status code number.\r\n    \r\ndotnet8"
  },
  {
    "path": "projects/web-utilities/build.bat",
    "content": "dotnet build web-utilities-query-helpers\r\ndotnet build web-utilities-query-helpers-2\r\ndotnet build web-utilities-reason-phrases"
  },
  {
    "path": "projects/web-utilities/build.sh",
    "content": "#!/bin/bash\ndotnet build web-utilities-query-helpers\ndotnet build web-utilities-query-helpers-2\ndotnet build web-utilities-reason-phrases\n"
  },
  {
    "path": "projects/web-utilities/web-utilities-query-helpers/Program.cs",
    "content": "using Microsoft.AspNetCore.WebUtilities;\r\n\r\nvar app = WebApplication.Create();\r\n\r\nvar arguments = new Dictionary<string, string>()\r\n{\r\n    {\"greetings\", \"hello-world\"},\r\n    {\"origin\", \"cairo\"}\r\n};\r\n\r\nvar path = QueryHelpers.AddQueryString(\"/greet\", arguments);\r\nvar path2 = QueryHelpers.AddQueryString(path, \"name\", \"annie\");\r\n\r\napp.Run(async context =>\r\n{\r\n    await context.Response.WriteAsync($\"{path}\\n{path2}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/web-utilities/web-utilities-query-helpers/web-utilities-query-helper.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/web-utilities/web-utilities-query-helpers-2/Program.cs",
    "content": "using Microsoft.AspNetCore.WebUtilities;\r\nvar app = WebApplication.Create();\r\napp.Run(async context =>\r\n{\r\n    var queryString = QueryHelpers.ParseQuery(context.Request.QueryString.ToString());\r\n\r\n    var output = \"\";\r\n\r\n    foreach (var qs in queryString)\r\n    {\r\n        output += qs.Key + \" = \" + qs.Value + \"<br/>\";\r\n    }\r\n    await context.Response.WriteAsync($@\"<html>\r\n    <body>\r\n    <h1>Parsing Raw Query String</h1>\r\n    <ul>\r\n        <li><a href=\"\"?name=anne\"\">?name=anne</a></li>\r\n        <li><a href=\"\"?name=anne&name=annie\"\">?name=anne&name=annie</a></li>\r\n        <li><a href=\"\"?age=25&smart=true\"\">?age=25&smart=true</a></li>\r\n        <li><a href=\"\"?country=zambia&country=senegal&country=\"\">?country=zambia&country=senegal&country=</a></li>\r\n        <li><a href=\"\"?\"\">?</a></li>\r\n        <br /><br /> \r\n        <strong>Query String</strong><br/> \r\n        {output}\r\n    </ul>\r\n    </body>\r\n    </html>\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/web-utilities/web-utilities-query-helpers-2/README.md",
    "content": "# Parse raw query string\r\n\r\n`QueryHelpers.ParseQuery` (from `Microsoft.AspNetCore.WebUtilities`) allows you to parse a raw query string and access individual key and values."
  },
  {
    "path": "projects/web-utilities/web-utilities-query-helpers-2/web-utilities-query-helper-2.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/web-utilities/web-utilities-reason-phrases/Program.cs",
    "content": "using Microsoft.AspNetCore.WebUtilities;\r\n\r\nvar app = WebApplication.Create();\r\napp.Run(context =>\r\n{\r\n    return context.Response.WriteAsync($\"{ReasonPhrases.GetReasonPhrase(200)} : {ReasonPhrases.GetReasonPhrase(500)}\");\r\n});\r\n\r\napp.Run();"
  },
  {
    "path": "projects/web-utilities/web-utilities-reason-phrases/web-utilities-reason-phrases.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/windows-service/README.md",
    "content": "# Windows Service (1)\r\n\r\n  * [Hosting Kestrel from Windows Service](/projects/windows-service/windows-service-1)\r\n\r\n    This sample shows how to host Kestrel from Windows Service. \r\n\r\n    dotnet8"
  },
  {
    "path": "projects/windows-service/windows-service-1/Program.cs",
    "content": "using Microsoft.Extensions.Hosting.WindowsServices;\r\n\r\n// https://stackoverflow.com/questions/69909593/asp-net-6-custom-webapplicationfactory-throws-exception\r\nvar options = new WebApplicationOptions\r\n{\r\n    Args = args,\r\n    ContentRootPath = WindowsServiceHelpers.IsWindowsService() ? AppContext.BaseDirectory : default,\r\n    WebRootPath = \"wwwroot\",\r\n    ApplicationName = typeof(Program).Assembly.FullName\r\n};\r\n\r\nvar builder = WebApplication.CreateBuilder(options);\r\nbuilder.Host.UseWindowsService();\r\nbuilder.WebHost.UseUrls(\"http://localhost:5300\");\r\nvar app = builder.Build();\r\n\r\napp.Run(async context =>\r\n{\r\n    await context.Response.WriteAsync($\"This is hello world running from a Windows Service\");\r\n});\r\n\r\napp.Run();\r\n"
  },
  {
    "path": "projects/windows-service/windows-service-1/README.md",
    "content": "# Hosting Kestrel from Windows Service\r\n\r\nThis sample shows how to create a Windows Service that runs a Kestrel server. Further documentation is [here](https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-6.0&tabs=visual-studio).\r\n\r\nThis sample requires dependency from [Microsoft.Extensions.Hosting.WindowsServices](https://www.nuget.org/packages/Microsoft.Extensions.Hosting.WindowsServices).\r\n\r\n\r\n## How to install the windows service\r\n\r\nRun Visual Studio Command Line under administrator mode.\r\n\r\n![Run VS Studio Command Line](part-1.png)\r\n\r\nRun the following command `sc create \"{Fill Service Name} binpath=\"{Full path to your Windows Service EXE}\"`\r\n\r\n![Run the command](part-2.png)\r\n\r\nOpen Windows Services Manager and start the service.\r\n\r\n![Validate](part-3.png)\r\n\r\nor you can execute this command `sc start \"{Fill Service Name}\"` to start the service from the VS Command Line.\r\n\r\nTo stop the service, execute this command `sc stop \"{Fill Service Name}\"`.\r\n\r\n## How to remove the windows service.\r\n\r\nRun Visual Studio Command Line under administrator mode.\r\n\r\nRun the following command `sc delete \"{Fill Service Name}\"`.\r\n\r\ndotnet6"
  },
  {
    "path": "projects/windows-service/windows-service-1/windows-service-1.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Extensions.Hosting.WindowsServices\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n</Project>\r\n"
  },
  {
    "path": "projects/xml/README.md",
    "content": "# XML (1)\r\n\r\n  This section shows XML related samples. \r\n\r\n  * [XML Validation using xsd](/projects/xml/xml-validation/)\r\n\r\n    XML validation against XML Schema i.e. XSD.\r\n\r\ndotnet6"
  },
  {
    "path": "projects/xml/xml-validation/Controllers/HomeController.cs",
    "content": "﻿using System.Diagnostics;\r\nusing System.Xml;\r\nusing System.Xml.Linq;\r\nusing System.Xml.Schema;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing XmlValidation.Models;\r\n\r\nnamespace XmlValidation.Controllers\r\n{\r\n    public class HomeController : Controller\r\n    {\r\n        private readonly ILogger<HomeController> _logger;\r\n\r\n        public HomeController(ILogger<HomeController> logger)\r\n        {\r\n            _logger = logger;\r\n        }\r\n\r\n        public IActionResult Index()\r\n        {\r\n            var model = new IndexViewModel\r\n            {\r\n\r\n                XmlSchema =\r\n                @\"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>\r\n\t                <xsd:element name='Root'>\r\n\t\t                <xsd:complexType>\r\n\t\t\t                <xsd:sequence>\r\n\t\t\t\t                <xsd:element name='Child1' minOccurs='1' maxOccurs='1' />\r\n\t\t\t\t                <xsd:element name='Child2' minOccurs='1' maxOccurs='1' />\r\n\t\t\t                </xsd:sequence>\r\n\t\t                </xsd:complexType>\r\n\t                </xsd:element>\r\n                </xsd:schema>\",\r\n                XmlDocument =\r\n                @\"<Root>\r\n                    <Child1>content1</Child1>\r\n                    <Child2>content2</Child2>\r\n                  </Root>\",\r\n                XmlValidated = false\r\n            };\r\n            return View(model);\r\n        }\r\n\r\n        [HttpPost]\r\n        public IActionResult Index([Bind(\"XmlSchema, XmlDocument\")]IndexViewModel viewModel)\r\n        {\r\n            if(ModelState.IsValid)\r\n            {\r\n                viewModel.SchemaErrors = ValidateSchema(viewModel.XmlSchema);\r\n                viewModel.XmlErrors = ValidateDocument(viewModel.XmlSchema, viewModel.XmlDocument, viewModel.SchemaValid);\r\n                viewModel.XmlValidated = true;\r\n            }\r\n            return View(viewModel);\r\n        }\r\n\r\n        private IList<string> ValidateDocument(string xmlSchema, string xmlDoc, bool schemaValid)\r\n        {\r\n            IList<string> errors = new List<string>();\r\n            try\r\n            {\r\n                \r\n                var xDocument = XDocument.Parse(xmlDoc);\r\n                if (!string.IsNullOrEmpty(xmlSchema) && schemaValid)\r\n                {\r\n                    var schemaSet = new XmlSchemaSet();\r\n                    schemaSet.Add(\"\",XmlReader.Create(new StringReader(xmlSchema)));\r\n                    xDocument.Validate(schemaSet, (o, e) =>\r\n                    {\r\n                        errors.Add(e.Message);\r\n                    });\r\n                }\r\n            }\r\n            catch (Exception e)\r\n            {\r\n                errors.Add(e.Message);\r\n            }\r\n            return errors;\r\n        }\r\n\r\n        private IList<string> ValidateSchema(string xmlSchema)\r\n        {\r\n            IList<string> errors = new List<string>();\r\n            if (!string.IsNullOrEmpty(xmlSchema))\r\n            {\r\n                try\r\n                {\r\n                    _ = XDocument.Parse(xmlSchema);\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    errors.Add(ex.Message);\r\n                }\r\n            }\r\n            return errors;\r\n        }\r\n\r\n        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]\r\n        public IActionResult Error()\r\n        {\r\n            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/xml/xml-validation/Models/ErrorViewModel.cs",
    "content": "using System;\r\n\r\nnamespace XmlValidation.Models\r\n{\r\n    public class ErrorViewModel\r\n    {\r\n        public string RequestId { get; set; }\r\n\r\n        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/xml/xml-validation/Models/IndexViewModel.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.ComponentModel.DataAnnotations;\r\nusing System.Linq;\r\n\r\nnamespace XmlValidation.Models\r\n{\r\n    public class IndexViewModel\r\n    {\r\n        public string XmlSchema { get; set; }\r\n        [Required]\r\n        public string XmlDocument { get; set; }\r\n        public bool XmlValidated { get; set; }\r\n        public IList<string> SchemaErrors { get; set; } = new List<string>();\r\n        public IList<string> XmlErrors { get; set; } = new List<string>();\r\n        public bool SchemaValid => SchemaErrors.Count() == 0;\r\n        public bool XmlValid => XmlErrors.Count() == 0;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/xml/xml-validation/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllersWithViews();\r\n\r\nvar app = builder.Build();\r\n\r\napp.UseStaticFiles();\r\napp.UseAuthorization();\r\n\r\napp.MapControllerRoute(\r\n    name: \"default\",\r\n    pattern: \"{controller=Home}/{action=Index}/{id?}\");\r\n\r\napp.Run();"
  },
  {
    "path": "projects/xml/xml-validation/README.md",
    "content": "# XML Validation Demo\r\n\r\n**About:**\r\n\r\nThis sample showcases validating XML Document using XML Schema i.e. XSD \r\n\r\n\r\n**Screenshot:**\r\n\r\n<img src=\"assets/mainpage.png\" alt=\"main page\" title=\"Main page\">\r\n<img src=\"assets/schemavalidation.png\" alt=\"schema validation\" title=\"Schema validation\">\r\n<img src=\"assets/xmlvalidation.png\" alt=\"xml validation\" title=\"XML validation\">\r\n<img src=\"assets/validationsuccess.png\" alt=\"validation scuccess\" title=\"Validation scuccess\">\r\n\r\n\r\n\r\n**Credits**:\r\n\r\n[Lohith GN](https://github.com/lohithgn)"
  },
  {
    "path": "projects/xml/xml-validation/ViewComponents/DangerAlertViewComponent.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace XmlValidation.ViewComponents\r\n{\r\n    public class DangerAlertViewComponent : ViewComponent\r\n    {\r\n        public IViewComponentResult Invoke(string text, IEnumerable<string> errors)\r\n        {\r\n            ViewData[\"AlertText\"] = text;\r\n            ViewData[\"Errors\"] = errors;\r\n            return View();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/xml/xml-validation/ViewComponents/SuccessAlertViewComponent.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace XmlValidation.ViewComponents\r\n{\r\n    public class SuccessAlertViewComponent : ViewComponent\r\n    {\r\n        public IViewComponentResult Invoke(string text)\r\n        {\r\n            ViewData[\"AlertText\"] = text;\r\n            return View();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/xml/xml-validation/Views/Home/Index.cshtml",
    "content": "﻿@model IndexViewModel\r\n@{\r\n\tViewData[\"Title\"] = \"Home Page\";\r\n}\r\n<SuccessAlertViewComponent></SuccessAlertViewComponent>\r\n@if (Model.XmlValidated)\r\n{\r\n\t<div class=\"row\">\r\n\t <div class=\"col-lg-12\">\r\n\t\t\t@if (!string.IsNullOrEmpty(Model.XmlSchema))\r\n\t\t\t{\r\n\t\t\t\tif(Model.SchemaValid)\r\n\t\t\t\t{\r\n\t\t\t\t  <vc:success-alert text=\"XSD is Valid\" />\r\n\t\t\t\t}\r\n\t\t\t\tif (!Model.SchemaValid)\r\n\t\t\t\t{\r\n\t\t\t\t  <vc:danger-alert text=\"XSD is Not-Valid\" errors=\"@Model.SchemaErrors\" />\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t@if (Model.SchemaValid)\r\n\t\t\t{\r\n\t\t\t\tif(Model.XmlValid)\r\n\t\t\t\t{\r\n\t\t\t\t  <vc:success-alert text=\"XML Document is Valid\" />\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t<vc:danger-alert text=\"XML Document is Not-Valid\" errors=\"@Model.XmlErrors\" />\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t </div>\r\n\t</div>\r\n}\r\n<form asp-controller=\"Home\" asp-action=\"Index\" method=\"post\">\r\n <div class=\"row\">\r\n  <div class=\"col-lg-6\">\r\n   <div class=\"mb-3\">\r\n\t<label for=\"xmlSchema\" class=\"form-label display-6\">XML Schema</label>\r\n\t<textarea class=\"form-control shadow\" asp-for=\"XmlSchema\" rows=\"15\">@Model.XmlSchema</textarea>\r\n   </div>\r\n  </div>\r\n  <div class=\"col-lg-6\">\r\n   <div class=\"mb-3\">\r\n\t<label for=\"xmlDoc\" class=\"form-label display-6\">XML Document</label>\r\n\t<textarea class=\"form-control shadow\" asp-for=\"XmlDocument\" rows=\"15\">@Model.XmlDocument</textarea>\r\n\t<span asp-validation-for=\"XmlDocument\" class=\"py-2 text-danger\"></span>\r\n   </div>\r\n  </div>\r\n </div>\r\n <div class=\"row\">\r\n  <div class=\"col-lg-12\">\r\n   <button type=\"submit\" class=\"btn btn-primary\">Validate</button>\r\n  </div>\r\n </div>\r\n</form>\r\n@section Scripts {\r\n    @{ await Html.RenderPartialAsync(\"_ValidationScriptsPartial\"); }\r\n}\r\n\r\n"
  },
  {
    "path": "projects/xml/xml-validation/Views/Home/Privacy.cshtml",
    "content": "﻿@{\r\n    ViewData[\"Title\"] = \"Privacy Policy\";\r\n}\r\n<h1>@ViewData[\"Title\"]</h1>\r\n\r\n<p>Use this page to detail your site's privacy policy.</p>\r\n"
  },
  {
    "path": "projects/xml/xml-validation/Views/Shared/Components/DangerAlert/Default.cshtml",
    "content": "﻿@using System.Collections.Generic;\r\n\r\n<div class=\"alert alert-danger\" role=\"alert\">\r\n\t<div class=\"d-flex align-items-center\">\r\n\t\t<svg class=\"bi flex-shrink-0 me-2\" width=\"24\" height=\"24\" role=\"img\" aria-label=\"Danger:\"><use xlink:href=\"#exclamation-triangle-fill\" /></svg>\r\n\t\t<div class=\"h5\">\r\n\t\t\t@ViewData[\"AlertText\"]\r\n\t\t</div>\r\n\t</div>\r\n\t<ul>\r\n\t\t@foreach(var error in (IEnumerable<string>)ViewData[\"Errors\"])\r\n\t\t{\r\n\t\t\t<li>@error</li>\r\n\t\t}\r\n\t</ul>\r\n</div>\r\n\r\n<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\">\r\n  <symbol id=\"exclamation-triangle-fill\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n  <path d=\"M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z\" />\r\n </symbol>\r\n</svg>\r\n\r\n\r\n\r\n\t\t\t\t\t"
  },
  {
    "path": "projects/xml/xml-validation/Views/Shared/Components/SuccessAlert/Default.cshtml",
    "content": "﻿<div class=\"alert alert-success \" role=\"alert\">\r\n\t<div class=\"d-flex align-items-center\">\r\n\t\t<svg class=\"bi flex-shrink-0 me-2\" width=\"24\" height=\"24\" role=\"img\" aria-label=\"Success:\"><use xlink:href=\"#check-circle-fill\" /></svg>\r\n\t\t<div class=\"h5\">\r\n\t\t\t@ViewData[\"AlertText\"]\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: none;\">\r\n <symbol id=\"check-circle-fill\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\r\n  <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z\" />\r\n </symbol>\r\n</svg>"
  },
  {
    "path": "projects/xml/xml-validation/Views/Shared/Error.cshtml",
    "content": "﻿@model ErrorViewModel\r\n@{\r\n    ViewData[\"Title\"] = \"Error\";\r\n}\r\n\r\n<h1 class=\"text-danger\">Error.</h1>\r\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\r\n\r\n@if (Model.ShowRequestId)\r\n{\r\n    <p>\r\n        <strong>Request ID:</strong> <code>@Model.RequestId</code>\r\n    </p>\r\n}\r\n\r\n<h3>Development Mode</h3>\r\n<p>\r\n    Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.\r\n</p>\r\n<p>\r\n    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\r\n    It can result in displaying sensitive information from exceptions to end users.\r\n    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\r\n    and restarting the app.\r\n</p>\r\n"
  },
  {
    "path": "projects/xml/xml-validation/Views/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\r\n    <title>@ViewData[\"Title\"] - Xml Validator</title>\r\n    <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css\" >\r\n</head>\r\n<body>\r\n    <header>\r\n        <nav class=\"navbar navbar-expand-sm navbar-toggleable-sm navbar-dark bg-dark border-bottom box-shadow mb-3\">\r\n            <div class=\"container\">\r\n                <a class=\"navbar-brand\" asp-area=\"\" asp-controller=\"Home\" asp-action=\"Index\">Xml Validator</a>\r\n            </div>\r\n        </nav>\r\n    </header>\r\n    <div class=\"container\">\r\n        <main role=\"main\" class=\"pb-3\">\r\n            @RenderBody()\r\n        </main>\r\n    </div>\r\n\r\n    <footer class=\"border-top footer text-muted\">\r\n        <div class=\"container\">\r\n            &copy; 2021 - XmlValidator\r\n        </div>\r\n    </footer>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js\"></script>\r\n    <script src=\"https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js\"></script>\r\n    @await RenderSectionAsync(\"Scripts\", required: false)\r\n</body>\r\n</html>\r\n"
  },
  {
    "path": "projects/xml/xml-validation/Views/Shared/_ValidationScriptsPartial.cshtml",
    "content": "﻿<script src=\"https://cdn.jsdelivr.net/npm/jquery-validation@1.19.3/dist/jquery.validate.min.js\"></script>\r\n<script src=\"https://cdn.jsdelivr.net/npm/jquery-validation-unobtrusive@3.2.12/dist/jquery.validate.unobtrusive.min.js\"></script>\r\n"
  },
  {
    "path": "projects/xml/xml-validation/Views/_ViewImports.cshtml",
    "content": "﻿@using XmlValidation\r\n@using XmlValidation.Models\r\n@using XmlValidation.ViewComponents\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n@addTagHelper *, XmlValidation\r\n"
  },
  {
    "path": "projects/xml/xml-validation/Views/_ViewStart.cshtml",
    "content": "﻿@{\r\n    Layout = \"_Layout\";\r\n}\r\n"
  },
  {
    "path": "projects/xml/xml-validation/XmlValidation.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/xml/xml-validation/XmlValidation.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.0.31320.298\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"XmlValidation\", \"XmlValidation.csproj\", \"{510DE14B-DAAA-4F65-968E-2F3761579E6C}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{510DE14B-DAAA-4F65-968E-2F3761579E6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{510DE14B-DAAA-4F65-968E-2F3761579E6C}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{510DE14B-DAAA-4F65-968E-2F3761579E6C}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{510DE14B-DAAA-4F65-968E-2F3761579E6C}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {DABB3689-B9CF-47F9-BDCE-70B8428830EA}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "projects/xml/xml-validation/appsettings.Development.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/xml/xml-validation/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/yarp/Readme.md",
    "content": "YARP Reverse Proxy \r\n===========\r\n\r\nThis section showcases demoes on creating reverse proxy using YARP.\r\n\r\n* [Basic Demo](/projects/yarp/basic-demo)\r\n    \r\n    Basic demo showcasing simple routing.\r\n\r\ndotnet6\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Readme.md",
    "content": "YARP Demo\r\n===========\r\nThis demo showcases creating reverse proxy in asp.net core by making use of YARP package. From the official documentation [here](https://microsoft.github.io/reverse-proxy/index.html), YARP is:    \r\n    \r\n    A library to help create reverse proxy servers that are high-performance, production-ready, and highly customizable\r\n    \r\n## Demo Details:\r\n- BackEnd: \r\n    - File > New > ASP.NET Web API project with Weather controller.\r\n    - Runs on `https://localhost:9004;http://localhost:9005`.\r\n- FrontEnd: \r\n    - File > New > Blazor WASM project. \r\n    - Runs on `https://localhost:9002;http://localhost:9003`.\r\n    - Connects to BackEnd to get weather data and displays in a table.\r\n- Proxy: \r\n    - YARP reverse proxy implementation. Proxies FrontEnd & BackEnd\r\n    - Runs on `https://localhost:9000;http://localhost:9001`.\r\n    - YARP Configuration is set up in appsettings.json:\r\n        ```\r\n        \"ReverseProxy\": {\r\n            \"Routes\": {\r\n            \"allrouteprops\": {\r\n                \"ClusterId\": \"allclusterprops\",\r\n                \"Match\": {\r\n                \"Path\": \"{**catch-all}\"\r\n                }\r\n            },\r\n            \"api\": {\r\n                \"ClusterId\": \"api\",\r\n                \"Match\": {\r\n                \"Path\": \"/api/{**slug}\"\r\n                }\r\n            }\r\n            },\r\n            \"Clusters\": {\r\n            \"allclusterprops\": {\r\n                \"Destinations\": {\r\n                \"frontend\": {\r\n                    \"Address\": \"https://localhost:9002\"\r\n                }\r\n                }\r\n            },\r\n            \"api\": {\r\n                \"Destinations\": {\r\n                \"backend\": {\r\n                    \"Address\": \"https://localhost:9004\"\r\n                }\r\n                }\r\n            }\r\n            }\r\n        }\r\n        ```\r\n    - YARP is configured using Minimal API design in `Program.cs`\r\n        ```\r\n        var builder = WebApplication.CreateBuilder(args);\r\n        var yarpConfigSection = builder.Configuration.GetSection(\"ReverseProxy\");\r\n        builder.Services.AddReverseProxy()\r\n                        .LoadFromConfig(yarpConfigSection);\r\n        var app = builder.Build();\r\n        app.MapReverseProxy();\r\n        app.Run();\r\n        ```\r\n## Running the Demo\r\n- Start `Yarp.Demo.BackEnd`\r\n    - Open a terminal window and navigate to Yarp.Demo.BackEnd folder.\r\n    - Execute command `dotnet run`.\r\n- Start `Yarp.Demo.FrontEnd`\r\n    - Open a terminal window and navigate to Yarp.Demo.FrontEnd folder.\r\n    - Execute command `dotnet run`.\r\n- Start `Yarp.Demo.Proxy`\r\n    - Open a terminal window and navigate to Yarp.Demo.Proxy folder.\r\n    - Execute command `dotnet run`.\r\n- Open a browser. Navigate to `https://localhost:9000`\r\n\r\n## Screenshots\r\n* Main Page\r\n<img src=\"assets/main-page.png\" alt=\"main page\" title=\"Main Page\">\r\n\r\n* Proxy Logs\r\n<img src=\"assets/proxy-logs.png\" alt=\"proxy logs\" title=\"proxy logs\">\r\n\r\n\r\n## Credits\r\n[Lohith GN](https://github.com/lohithgn)"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.BackEnd/Controllers/WeatherForecastController.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\r\n\r\nnamespace Yarp.Demo.BackEnd.Controllers\r\n{\r\n    [ApiController]\r\n    [Route(\"api/[controller]\")]\r\n    public class WeatherForecastController : ControllerBase\r\n    {\r\n        private static readonly string[] Summaries = new[]\r\n        {\r\n            \"Freezing\", \"Bracing\", \"Chilly\", \"Cool\", \"Mild\", \"Warm\", \"Balmy\", \"Hot\", \"Sweltering\", \"Scorching\"\r\n        };\r\n\r\n        private readonly ILogger<WeatherForecastController> _logger;\r\n\r\n        public WeatherForecastController(ILogger<WeatherForecastController> logger)\r\n        {\r\n            _logger = logger;\r\n        }\r\n\r\n        [HttpGet]\r\n        public IEnumerable<WeatherForecast> Get()\r\n        {\r\n            var rng = new Random();\r\n            return Enumerable.Range(1, 5).Select(index => new WeatherForecast\r\n            {\r\n                Date = DateTime.Now.AddDays(index),\r\n                TemperatureC = rng.Next(-20, 55),\r\n                Summary = Summaries[rng.Next(Summaries.Length)]\r\n            })\r\n            .ToArray();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.BackEnd/Program.cs",
    "content": "var builder = WebApplication.CreateBuilder();\r\nbuilder.Services.AddControllers();\r\n\r\nvar app = builder.Build();\r\napp.UseHttpsRedirection();\r\napp.UseAuthorization();\r\napp.MapControllers();\r\napp.Run();"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.BackEnd/WeatherForecast.cs",
    "content": "namespace Yarp.Demo.BackEnd\r\n{\r\n    public class WeatherForecast\r\n    {\r\n        public DateTime Date { get; set; }\r\n\r\n        public int TemperatureC { get; set; }\r\n\r\n        public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);\r\n\r\n        public string Summary { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.BackEnd/Yarp.Demo.BackEnd.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.BackEnd/appsettings.Development.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.BackEnd/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/App.razor",
    "content": "﻿<Router AppAssembly=\"@typeof(Program).Assembly\" PreferExactMatches=\"@true\">\r\n    <Found Context=\"routeData\">\r\n        <RouteView RouteData=\"@routeData\" DefaultLayout=\"@typeof(MainLayout)\" />\r\n    </Found>\r\n    <NotFound>\r\n        <LayoutView Layout=\"@typeof(MainLayout)\">\r\n            <p>Sorry, there's nothing at this address.</p>\r\n        </LayoutView>\r\n    </NotFound>\r\n</Router>\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Pages/Counter.razor",
    "content": "@page \"/counter\"\r\n\r\n<h1>Counter</h1>\r\n\r\n<p>Current count: @currentCount</p>\r\n\r\n<button class=\"btn btn-primary\" @onclick=\"IncrementCount\">Click me</button>\r\n\r\n@code {\r\n    private int currentCount = 0;\r\n\r\n    private void IncrementCount()\r\n    {\r\n        currentCount++;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Pages/FetchData.razor",
    "content": "﻿@page \"/fetchdata\"\r\n@inject HttpClient Http\r\n\r\n<h1>Weather forecast</h1>\r\n\r\n<p>This component demonstrates fetching data from the server.</p>\r\n\r\n@if (forecasts == null)\r\n{\r\n    <p><em>Loading...</em></p>\r\n}\r\nelse\r\n{\r\n    <table class=\"table\">\r\n        <thead>\r\n            <tr>\r\n                <th>Date</th>\r\n                <th>Temp. (C)</th>\r\n                <th>Temp. (F)</th>\r\n                <th>Summary</th>\r\n            </tr>\r\n        </thead>\r\n        <tbody>\r\n            @foreach (var forecast in forecasts)\r\n            {\r\n                <tr>\r\n                    <td>@forecast.Date.ToShortDateString()</td>\r\n                    <td>@forecast.TemperatureC</td>\r\n                    <td>@forecast.TemperatureF</td>\r\n                    <td>@forecast.Summary</td>\r\n                </tr>\r\n            }\r\n        </tbody>\r\n    </table>\r\n}\r\n\r\n@code {\r\n    private WeatherForecast[] forecasts;\r\n\r\n    protected override async Task OnInitializedAsync()\r\n    {\r\n        forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>(\"api/weatherforecast\");\r\n    }\r\n\r\n    public class WeatherForecast\r\n    {\r\n        public DateTime Date { get; set; }\r\n\r\n        public int TemperatureC { get; set; }\r\n\r\n        public string Summary { get; set; }\r\n\r\n        public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Pages/Index.razor",
    "content": "﻿@page \"/\"\r\n\r\n<h1>Hello, world!</h1>\r\n\r\nWelcome to your new app.\r\n\r\n<SurveyPrompt Title=\"How is Blazor working for you?\" />\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Program.cs",
    "content": "using Microsoft.AspNetCore.Components.WebAssembly.Hosting;\r\nusing Yarp.Demo.FrontEnd;\r\n\r\nvar builder = WebAssemblyHostBuilder.CreateDefault(args);\r\nbuilder.RootComponents.Add<App>(\"#app\");\r\n\r\nbuilder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });\r\n\r\nawait builder.Build().RunAsync();\r\n\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Shared/MainLayout.razor",
    "content": "@inherits LayoutComponentBase\r\n\r\n<div class=\"page\">\r\n    <div class=\"sidebar\">\r\n        <NavMenu />\r\n    </div>\r\n\r\n    <div class=\"main\">\r\n        <div class=\"top-row px-4\">\r\n            <a href=\"http://blazor.net\" target=\"_blank\" class=\"ml-md-auto\">About</a>\r\n        </div>\r\n\r\n        <div class=\"content px-4\">\r\n            @Body\r\n        </div>\r\n    </div>\r\n</div>\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Shared/MainLayout.razor.css",
    "content": ".page {\r\n    position: relative;\r\n    display: flex;\r\n    flex-direction: column;\r\n}\r\n\r\n.main {\r\n    flex: 1;\r\n}\r\n\r\n.sidebar {\r\n    background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);\r\n}\r\n\r\n.top-row {\r\n    background-color: #f7f7f7;\r\n    border-bottom: 1px solid #d6d5d5;\r\n    justify-content: flex-end;\r\n    height: 3.5rem;\r\n    display: flex;\r\n    align-items: center;\r\n}\r\n\r\n    .top-row ::deep a, .top-row .btn-link {\r\n        white-space: nowrap;\r\n        margin-left: 1.5rem;\r\n    }\r\n\r\n    .top-row a:first-child {\r\n        overflow: hidden;\r\n        text-overflow: ellipsis;\r\n    }\r\n\r\n@media (max-width: 640.98px) {\r\n    .top-row:not(.auth) {\r\n        display: none;\r\n    }\r\n\r\n    .top-row.auth {\r\n        justify-content: space-between;\r\n    }\r\n\r\n    .top-row a, .top-row .btn-link {\r\n        margin-left: 0;\r\n    }\r\n}\r\n\r\n@media (min-width: 641px) {\r\n    .page {\r\n        flex-direction: row;\r\n    }\r\n\r\n    .sidebar {\r\n        width: 250px;\r\n        height: 100vh;\r\n        position: sticky;\r\n        top: 0;\r\n    }\r\n\r\n    .top-row {\r\n        position: sticky;\r\n        top: 0;\r\n        z-index: 1;\r\n    }\r\n\r\n    .main > div {\r\n        padding-left: 2rem !important;\r\n        padding-right: 1.5rem !important;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Shared/NavMenu.razor",
    "content": "﻿<div class=\"top-row pl-4 navbar navbar-dark\">\r\n    <a class=\"navbar-brand\" href=\"\">Yarp.Demo.FrontEnd</a>\r\n    <button class=\"navbar-toggler\" @onclick=\"ToggleNavMenu\">\r\n        <span class=\"navbar-toggler-icon\"></span>\r\n    </button>\r\n</div>\r\n\r\n<div class=\"@NavMenuCssClass\" @onclick=\"ToggleNavMenu\">\r\n    <ul class=\"nav flex-column\">\r\n        <li class=\"nav-item px-3\">\r\n            <NavLink class=\"nav-link\" href=\"\" Match=\"NavLinkMatch.All\">\r\n                <span class=\"oi oi-home\" aria-hidden=\"true\"></span> Home\r\n            </NavLink>\r\n        </li>\r\n        <li class=\"nav-item px-3\">\r\n            <NavLink class=\"nav-link\" href=\"counter\">\r\n                <span class=\"oi oi-plus\" aria-hidden=\"true\"></span> Counter\r\n            </NavLink>\r\n        </li>\r\n        <li class=\"nav-item px-3\">\r\n            <NavLink class=\"nav-link\" href=\"fetchdata\">\r\n                <span class=\"oi oi-list-rich\" aria-hidden=\"true\"></span> Fetch data\r\n            </NavLink>\r\n        </li>\r\n    </ul>\r\n</div>\r\n\r\n@code {\r\n    private bool collapseNavMenu = true;\r\n\r\n    private string NavMenuCssClass => collapseNavMenu ? \"collapse\" : null;\r\n\r\n    private void ToggleNavMenu()\r\n    {\r\n        collapseNavMenu = !collapseNavMenu;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Shared/NavMenu.razor.css",
    "content": ".navbar-toggler {\r\n    background-color: rgba(255, 255, 255, 0.1);\r\n}\r\n\r\n.top-row {\r\n    height: 3.5rem;\r\n    background-color: rgba(0,0,0,0.4);\r\n}\r\n\r\n.navbar-brand {\r\n    font-size: 1.1rem;\r\n}\r\n\r\n.oi {\r\n    width: 2rem;\r\n    font-size: 1.1rem;\r\n    vertical-align: text-top;\r\n    top: -2px;\r\n}\r\n\r\n.nav-item {\r\n    font-size: 0.9rem;\r\n    padding-bottom: 0.5rem;\r\n}\r\n\r\n    .nav-item:first-of-type {\r\n        padding-top: 1rem;\r\n    }\r\n\r\n    .nav-item:last-of-type {\r\n        padding-bottom: 1rem;\r\n    }\r\n\r\n    .nav-item ::deep a {\r\n        color: #d7d7d7;\r\n        border-radius: 4px;\r\n        height: 3rem;\r\n        display: flex;\r\n        align-items: center;\r\n        line-height: 3rem;\r\n    }\r\n\r\n.nav-item ::deep a.active {\r\n    background-color: rgba(255,255,255,0.25);\r\n    color: white;\r\n}\r\n\r\n.nav-item ::deep a:hover {\r\n    background-color: rgba(255,255,255,0.1);\r\n    color: white;\r\n}\r\n\r\n@media (min-width: 641px) {\r\n    .navbar-toggler {\r\n        display: none;\r\n    }\r\n\r\n    .collapse {\r\n        /* Never collapse the sidebar for wide screens */\r\n        display: block;\r\n    }\r\n}\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Shared/SurveyPrompt.razor",
    "content": "<div class=\"alert alert-secondary mt-4\" role=\"alert\">\r\n    <span class=\"oi oi-pencil mr-2\" aria-hidden=\"true\"></span>\r\n    <strong>@Title</strong>\r\n\r\n    <span class=\"text-nowrap\">\r\n        Please take our\r\n        <a target=\"_blank\" class=\"font-weight-bold\" href=\"https://go.microsoft.com/fwlink/?linkid=2148851\">brief survey</a>\r\n    </span>\r\n    and tell us what you think.\r\n</div>\r\n\r\n@code {\r\n    // Demonstrates how a parent component can supply parameters\r\n    [Parameter]\r\n    public string Title { get; set; }\r\n}\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/Yarp.Demo.FrontEnd.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.BlazorWebAssembly\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n      <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly\" Version=\"6.0.4\" />\r\n    <PackageReference Include=\"Microsoft.AspNetCore.Components.WebAssembly.DevServer\" Version=\"6.0.4\" />\r\n  </ItemGroup>\r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/_Imports.razor",
    "content": "﻿@using System.Net.Http\r\n@using System.Net.Http.Json\r\n@using Microsoft.AspNetCore.Components.Forms\r\n@using Microsoft.AspNetCore.Components.Routing\r\n@using Microsoft.AspNetCore.Components.Web\r\n@using Microsoft.AspNetCore.Components.Web.Virtualization\r\n@using Microsoft.AspNetCore.Components.WebAssembly.Http\r\n@using Microsoft.JSInterop\r\n@using Yarp.Demo.FrontEnd\r\n@using Yarp.Demo.FrontEnd.Shared\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/wwwroot/css/app.css",
    "content": "@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');\r\n\r\nhtml, body {\r\n    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\r\n}\r\n\r\na, .btn-link {\r\n    color: #0366d6;\r\n}\r\n\r\n.btn-primary {\r\n    color: #fff;\r\n    background-color: #1b6ec2;\r\n    border-color: #1861ac;\r\n}\r\n\r\n.content {\r\n    padding-top: 1.1rem;\r\n}\r\n\r\n.valid.modified:not([type=checkbox]) {\r\n    outline: 1px solid #26b050;\r\n}\r\n\r\n.invalid {\r\n    outline: 1px solid red;\r\n}\r\n\r\n.validation-message {\r\n    color: red;\r\n}\r\n\r\n#blazor-error-ui {\r\n    background: lightyellow;\r\n    bottom: 0;\r\n    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);\r\n    display: none;\r\n    left: 0;\r\n    padding: 0.6rem 1.25rem 0.7rem 1.25rem;\r\n    position: fixed;\r\n    width: 100%;\r\n    z-index: 1000;\r\n}\r\n\r\n    #blazor-error-ui .dismiss {\r\n        cursor: pointer;\r\n        position: absolute;\r\n        right: 0.75rem;\r\n        top: 0.5rem;\r\n    }\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/wwwroot/css/open-iconic/FONT-LICENSE",
    "content": "SIL OPEN FONT LICENSE Version 1.1\r\n\r\nCopyright (c) 2014 Waybury\r\n\r\nPREAMBLE\r\nThe goals of the Open Font License (OFL) are to stimulate worldwide\r\ndevelopment of collaborative font projects, to support the font creation\r\nefforts of academic and linguistic communities, and to provide a free and\r\nopen framework in which fonts may be shared and improved in partnership\r\nwith others.\r\n\r\nThe OFL allows the licensed fonts to be used, studied, modified and\r\nredistributed freely as long as they are not sold by themselves. The\r\nfonts, including any derivative works, can be bundled, embedded,\r\nredistributed and/or sold with any software provided that any reserved\r\nnames are not used by derivative works. The fonts and derivatives,\r\nhowever, cannot be released under any other type of license. The\r\nrequirement for fonts to remain under this license does not apply\r\nto any document created using the fonts or their derivatives.\r\n\r\nDEFINITIONS\r\n\"Font Software\" refers to the set of files released by the Copyright\r\nHolder(s) under this license and clearly marked as such. This may\r\ninclude source files, build scripts and documentation.\r\n\r\n\"Reserved Font Name\" refers to any names specified as such after the\r\ncopyright statement(s).\r\n\r\n\"Original Version\" refers to the collection of Font Software components as\r\ndistributed by the Copyright Holder(s).\r\n\r\n\"Modified Version\" refers to any derivative made by adding to, deleting,\r\nor substituting -- in part or in whole -- any of the components of the\r\nOriginal Version, by changing formats or by porting the Font Software to a\r\nnew environment.\r\n\r\n\"Author\" refers to any designer, engineer, programmer, technical\r\nwriter or other person who contributed to the Font Software.\r\n\r\nPERMISSION & CONDITIONS\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of the Font Software, to use, study, copy, merge, embed, modify,\r\nredistribute, and sell modified and unmodified copies of the Font\r\nSoftware, subject to the following conditions:\r\n\r\n1) Neither the Font Software nor any of its individual components,\r\nin Original or Modified Versions, may be sold by itself.\r\n\r\n2) Original or Modified Versions of the Font Software may be bundled,\r\nredistributed and/or sold with any software, provided that each copy\r\ncontains the above copyright notice and this license. These can be\r\nincluded either as stand-alone text files, human-readable headers or\r\nin the appropriate machine-readable metadata fields within text or\r\nbinary files as long as those fields can be easily viewed by the user.\r\n\r\n3) No Modified Version of the Font Software may use the Reserved Font\r\nName(s) unless explicit written permission is granted by the corresponding\r\nCopyright Holder. This restriction only applies to the primary font name as\r\npresented to the users.\r\n\r\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\r\nSoftware shall not be used to promote, endorse or advertise any\r\nModified Version, except to acknowledge the contribution(s) of the\r\nCopyright Holder(s) and the Author(s) or with their explicit written\r\npermission.\r\n\r\n5) The Font Software, modified or unmodified, in part or in whole,\r\nmust be distributed entirely under this license, and must not be\r\ndistributed under any other license. The requirement for fonts to\r\nremain under this license does not apply to any document created\r\nusing the Font Software.\r\n\r\nTERMINATION\r\nThis license becomes null and void if any of the above conditions are\r\nnot met.\r\n\r\nDISCLAIMER\r\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\r\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\r\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\r\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\r\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\r\nOTHER DEALINGS IN THE FONT SOFTWARE.\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/wwwroot/css/open-iconic/ICON-LICENSE",
    "content": "The MIT License (MIT)\r\n\r\nCopyright (c) 2014 Waybury\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included in\r\nall copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\nTHE SOFTWARE."
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/wwwroot/css/open-iconic/README.md",
    "content": "[Open Iconic v1.1.1](http://useiconic.com/open)\r\n===========\r\n\r\n### Open Iconic is the open source sibling of [Iconic](http://useiconic.com). It is a hyper-legible collection of 223 icons with a tiny footprint&mdash;ready to use with Bootstrap and Foundation. [View the collection](http://useiconic.com/open#icons)\r\n\r\n\r\n\r\n## What's in Open Iconic?\r\n\r\n* 223 icons designed to be legible down to 8 pixels\r\n* Super-light SVG files - 61.8 for the entire set \r\n* SVG sprite&mdash;the modern replacement for icon fonts\r\n* Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats\r\n* Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats\r\n* PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px.\r\n\r\n\r\n## Getting Started\r\n\r\n#### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](http://useiconic.com/open#icons) and [Reference](http://useiconic.com/open#reference) sections.\r\n\r\n### General Usage\r\n\r\n#### Using Open Iconic's SVGs\r\n\r\nWe like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute).\r\n\r\n```\r\n<img src=\"/open-iconic/svg/icon-name.svg\" alt=\"icon name\">\r\n```\r\n\r\n#### Using Open Iconic's SVG Sprite\r\n\r\nOpen Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack.\r\n\r\nAdding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `<svg>` *tag and a unique class name for each different icon in the* `<use>` *tag.*  \r\n\r\n```\r\n<svg class=\"icon\">\r\n  <use xlink:href=\"open-iconic.svg#account-login\" class=\"icon-account-login\"></use>\r\n</svg>\r\n```\r\n\r\nSizing icons only needs basic CSS. All the icons are in a square format, so just set the `<svg>` tag with equal width and height dimensions.\r\n\r\n```\r\n.icon {\r\n  width: 16px;\r\n  height: 16px;\r\n}\r\n```\r\n\r\nColoring icons is even easier. All you need to do is set the `fill` rule on the `<use>` tag.\r\n\r\n```\r\n.icon-account-login {\r\n  fill: #f00;\r\n}\r\n```\r\n\r\nTo learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/).\r\n\r\n#### Using Open Iconic's Icon Font...\r\n\r\n\r\n##### …with Bootstrap\r\n\r\nYou can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}`\r\n\r\n\r\n```\r\n<link href=\"/open-iconic/font/css/open-iconic-bootstrap.css\" rel=\"stylesheet\">\r\n```\r\n\r\n\r\n```\r\n<span class=\"oi oi-icon-name\" title=\"icon name\" aria-hidden=\"true\"></span>\r\n```\r\n\r\n##### …with Foundation\r\n\r\nYou can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}`\r\n\r\n```\r\n<link href=\"/open-iconic/font/css/open-iconic-foundation.css\" rel=\"stylesheet\">\r\n```\r\n\r\n\r\n```\r\n<span class=\"fi-icon-name\" title=\"icon name\" aria-hidden=\"true\"></span>\r\n```\r\n\r\n##### …on its own\r\n\r\nYou can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}`\r\n\r\n```\r\n<link href=\"/open-iconic/font/css/open-iconic.css\" rel=\"stylesheet\">\r\n```\r\n\r\n```\r\n<span class=\"oi\" data-glyph=\"icon-name\" title=\"icon name\" aria-hidden=\"true\"></span>\r\n```\r\n\r\n\r\n## License\r\n\r\n### Icons\r\n\r\nAll code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT).\r\n\r\n### Fonts\r\n\r\nAll fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web).\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/wwwroot/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"utf-8\" />\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\r\n    <title>Yarp.Demo.FrontEnd</title>\r\n    <base href=\"/\" />\r\n    <link href=\"css/bootstrap/bootstrap.min.css\" rel=\"stylesheet\" />\r\n    <link href=\"css/app.css\" rel=\"stylesheet\" />\r\n    <link href=\"Yarp.Demo.FrontEnd.styles.css\" rel=\"stylesheet\" />\r\n</head>\r\n\r\n<body>\r\n    <div id=\"app\">Loading...</div>\r\n\r\n    <div id=\"blazor-error-ui\">\r\n        An unhandled error has occurred.\r\n        <a href=\"\" class=\"reload\">Reload</a>\r\n        <a class=\"dismiss\">🗙</a>\r\n    </div>\r\n    <script src=\"_framework/blazor.webassembly.js\"></script>\r\n</body>\r\n\r\n</html>\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.FrontEnd/wwwroot/sample-data/weather.json",
    "content": "[\r\n  {\r\n    \"date\": \"2018-05-06\",\r\n    \"temperatureC\": 1,\r\n    \"summary\": \"Freezing\"\r\n  },\r\n  {\r\n    \"date\": \"2018-05-07\",\r\n    \"temperatureC\": 14,\r\n    \"summary\": \"Bracing\"\r\n  },\r\n  {\r\n    \"date\": \"2018-05-08\",\r\n    \"temperatureC\": -13,\r\n    \"summary\": \"Freezing\"\r\n  },\r\n  {\r\n    \"date\": \"2018-05-09\",\r\n    \"temperatureC\": -16,\r\n    \"summary\": \"Balmy\"\r\n  },\r\n  {\r\n    \"date\": \"2018-05-10\",\r\n    \"temperatureC\": -2,\r\n    \"summary\": \"Chilly\"\r\n  }\r\n]\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.Proxy/Program.cs",
    "content": "using Microsoft.AspNetCore.Builder;\r\nusing Microsoft.Extensions.DependencyInjection;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\nvar yarpConfigSection = builder.Configuration.GetSection(\"ReverseProxy\");\r\nbuilder.Services.AddReverseProxy()\r\n                .LoadFromConfig(yarpConfigSection);\r\nvar app = builder.Build();\r\napp.MapReverseProxy();\r\napp.Run();"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.Proxy/Yarp.Demo.Proxy.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n  <PropertyGroup>\r\n    <TargetFramework>net10.0</TargetFramework>\r\n    <ImplicitUsings>true</ImplicitUsings>\r\n  </PropertyGroup>\r\n  <ItemGroup> \r\n    <PackageReference Include=\"Yarp.ReverseProxy\" Version=\"1.1.2\" />\r\n   </ItemGroup> \r\n</Project>\r\n\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.Proxy/appsettings.Development.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.Proxy/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\",\r\n  \"ReverseProxy\": {\r\n    \"Routes\": {\r\n      \"allrouteprops\": {\r\n        \"ClusterId\": \"allclusterprops\",\r\n        \"Match\": {\r\n          \"Path\": \"{**catch-all}\"\r\n        }\r\n      },\r\n      \"api\": {\r\n        \"ClusterId\": \"api\",\r\n        \"Match\": {\r\n          \"Path\": \"/api/{**slug}\"\r\n        }\r\n      }\r\n    },\r\n    \"Clusters\": {\r\n      \"allclusterprops\": {\r\n        \"Destinations\": {\r\n          \"frontend\": {\r\n            \"Address\": \"https://localhost:9002\"\r\n          }\r\n        }\r\n      },\r\n      \"api\": {\r\n        \"Destinations\": {\r\n          \"backend\": {\r\n            \"Address\": \"https://localhost:9004\"\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "projects/yarp/basic-demo/Yarp.Demo.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 16\r\nVisualStudioVersion = 16.6.30114.105\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Yarp.Demo.Proxy\", \"Yarp.Demo.Proxy\\Yarp.Demo.Proxy.csproj\", \"{F1900980-EC0F-4BB5-B20D-9515953173E0}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Yarp.Demo.FrontEnd\", \"Yarp.Demo.FrontEnd\\Yarp.Demo.FrontEnd.csproj\", \"{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Yarp.Demo.BackEnd\", \"Yarp.Demo.BackEnd\\Yarp.Demo.BackEnd.csproj\", \"{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tDebug|x86 = Debug|x86\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\t\tRelease|x64 = Release|x64\r\n\t\tRelease|x86 = Release|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{F1900980-EC0F-4BB5-B20D-9515953173E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{F1900980-EC0F-4BB5-B20D-9515953173E0}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{F1900980-EC0F-4BB5-B20D-9515953173E0}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{F1900980-EC0F-4BB5-B20D-9515953173E0}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{F1900980-EC0F-4BB5-B20D-9515953173E0}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{F1900980-EC0F-4BB5-B20D-9515953173E0}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{F1900980-EC0F-4BB5-B20D-9515953173E0}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{F1900980-EC0F-4BB5-B20D-9515953173E0}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{F1900980-EC0F-4BB5-B20D-9515953173E0}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{F1900980-EC0F-4BB5-B20D-9515953173E0}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{F1900980-EC0F-4BB5-B20D-9515953173E0}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{F1900980-EC0F-4BB5-B20D-9515953173E0}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{32F44A39-DDBD-4B85-AE63-6EBD4E4FD711}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{92A1D7C1-CC99-4DF7-B2DA-72383105BD98}.Release|x86.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {76FE095C-9F02-43EC-BA93-DA1511FAB7CD}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "skills-checklist.md",
    "content": "#Skills Checklist\r\n\r\nThe following are the checklist of ASP.NET Core that you need to know\r\n\r\n(WIP)"
  }
]